uhuu-components 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uhuu-components.umd.cjs","names":["round","createContext","Sheet","forwardRef","useContext","React","useContext","PAGE_BREAK_COMMENT_RE","React","useRef","forwardRef","useContext","Sheet","_Fragment","useContext","defaultAttributes","forwardRef","createElement","defaultAttributes","forwardRef","createElement","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","React","toolbar","zoom","page","addDialog","reorderDialog","thumbnail","notice","image","dialog","toolbar","zoom","page","addDialog","reorderDialog","thumbnail","notice","image","dialog","toolbar","zoom","page","addDialog","reorderDialog","thumbnail","notice","image","dialog","createContext","useState","useMemo","useContext","createContext","useContext","useMemo","useState","React","__defProp","__name","canUseDOM","getOwnerDocument","__defProp","__name","setRef","React","__defProp","__name","React","React","__defProp","__name","React","__defProp","__name","React","useLayoutEffect","isFunction","React2","__defProp","__name","React","getElementRef","concatAriaDescribedby","__defProp","__name","React","__defProp","__name","React","createContextScope2","React2","useComposedRefs2","createSlot2","__defProp","__name","Direction","React","__defProp","__name","useCallbackRef","React","__defProp","__name","React","useCallbackRef","__defProp","__name","count","__defProp","__name","EVENT_OPTIONS","React","useCallbackRef","focusFirst","__defProp","__name","React","clamp","computePosition","arrow","clamp","flip","hide","offset","shift","limitShift","size","isNode","getWindow","isHTMLElement","getComputedStyle","isHTMLElement","getWindow","offset","offset$1","shift","shift$1","flip","flip$1","size","size$1","hide","hide$1","arrow","arrow$1","limitShift","limitShift$1","useLayoutEffect","React","__defProp","__name","React","__defProp","__name","React","CONTENT_NAME","arrow","floatingUIarrow","useCallbackRef","__defProp","__name","React","ReactDOM","__defProp","__name","React","React2","__defProp","__name","React","React2","__defProp","__name","Collection","useCollection","createCollectionScope","Orientation","Direction","React","useCallbackRef","ITEM_NAME","useIsHydrated","wrapArray","focusFirst","useState","useIsomorphicLayoutEffect","React","React","React","parse","React","React","React","SideCar","__defProp","__name","Direction","Collection","useCollection","createCollectionScope","React","useCallbackRef","PopperPrimitive.Root","PopperPrimitive.Anchor","PORTAL_NAME","PortalProvider","usePortalContext","PortalPrimitive","CONTENT_NAME","Slot","RemoveScroll","RovingFocusGroup.Root","PopperPrimitive.Content","RovingFocusGroup.Item","__defProp","__name","DropdownMenu","React","MenuPrimitive.Root","TRIGGER_NAME","DropdownMenuTrigger","MenuPrimitive.Anchor","MenuPrimitive.Portal","CONTENT_NAME","DropdownMenuContent","MenuPrimitive.Content","DropdownMenuLabel","MenuPrimitive.Label","DropdownMenuItem","MenuPrimitive.Item","DropdownMenuCheckboxItem","MenuPrimitive.CheckboxItem","DropdownMenuRadioItem","MenuPrimitive.RadioItem","DropdownMenuSeparator","MenuPrimitive.Separator","DropdownMenuSub","MenuPrimitive.Sub","DropdownMenuSubTrigger","MenuPrimitive.SubTrigger","DropdownMenuSubContent","MenuPrimitive.SubContent","DropdownMenuPrimitive.Root","DropdownMenuPrimitive.Trigger","DropdownMenuPrimitive.Sub","React","DropdownMenuPrimitive.SubTrigger","DropdownMenuPrimitive.SubContent","DropdownMenuPrimitive.Portal","DropdownMenuPrimitive.Content","DropdownMenuPrimitive.Item","DropdownMenuPrimitive.CheckboxItem","DropdownMenuPrimitive.RadioItem","DropdownMenuPrimitive.Label","DropdownMenuPrimitive.Separator","MoreHorizontal","useContext","_Fragment","useContext","useContext","_Fragment","useContext","React","useMemo","clamp","resolveUrl","baseUrlOf","createContext","useState","useMemo","useContext","React","base","createContext","useContext","useRef","useState","useCallback","__defProp","__name","React","TRIGGER_NAME","getState","PortalPrimitive","RemoveScroll","SheetPrimitive.Root","SheetPrimitive.Portal","React","SheetPrimitive.Overlay","SheetPrimitive.Content","SheetPrimitive.Close","XIcon","SheetPrimitive.Title","SheetPrimitive.Description","React","_Fragment","useMemo","useLayoutEffect","useEffect","useRef","useCallback","usePrevious","CSS","React","useState","useCallback","useContext","useState","useCallback","useMemo","React","createPortal","Direction","useRef","usePrevious","useReducer","ID_PREFIX","ID_PREFIX$1","cloneElement","defaultTransition","CSS","useMemo","useRef","React","useState","useContext","CSS","CSS","useState","_Fragment","React","React","_Fragment","Sheet","React","__defProp","__name","React","isFunction","Switch","Fragment","BUBBLE_INPUT_NAME","React","SwitchPrimitive.Root","SwitchPrimitive.Thumb","__defProp","__name","__defProp","__name","React","__defProp","__name","Slider","React","Fragment","React","SliderPrimitive.Root","SliderPrimitive.Track","SliderPrimitive.Range","SliderPrimitive.Thumb","__defProp","__name","Label","React","LabelPrimitive.Root","MoreHorizontal","useState","useRef","useState","useRef","useContext","useCallback","useMemo","useMemo","useCallback","useState","useMemo","useCallback","resolveGalleryPath","AlertDialog","DialogPrimitive.Root","React","DialogPrimitive.Trigger","AlertDialogPortal","DialogPrimitive.Portal","AlertDialogOverlay","DialogPrimitive.Overlay","AlertDialogContent","DialogPrimitive.Content","AlertDialogTitle","DialogPrimitive.Title","AlertDialogDescription","DialogPrimitive.Description","AlertDialogAction","DialogPrimitive.Close","AlertDialogCancel","AlertDialogPrimitive.Root","AlertDialogPrimitive.Portal","React","AlertDialogPrimitive.Overlay","AlertDialogPrimitive.Content","AlertDialogPrimitive.Title","AlertDialogPrimitive.Description","AlertDialogPrimitive.Action","AlertDialogPrimitive.Cancel","_Fragment","useState","useMemo","useContext","useRef","useCallback","React","resolvePagePayload","_Fragment","React","PaginationStatic","SheetStatic","factory","global","exports","__create","__defProp$29","__getOwnPropDesc","__getOwnPropNames","__getProtoOf","__hasOwnProp","__exportAll","target","name","all","no_symbols","__copyProps","from","keys","i","n","key","to","except","k","desc","__toESM","mod","isNodeMode","react$1","react","react_dom","Compatibility","pagedSheet","el","pagedCSS","cssClass","clickListener","value","DocumentUtils","printCssUrl","link","MAX_BLEED","toFiniteNumber","numeric","round$1","resolveBinding","binding","spine","glue","resolvePage","width","input","height","bleed","resolveSheetSize","page","trimWidth","trimHeight","assignCoverPages","coverPages","planCoverSpread","assignment","W","H","B","S","G","sheetHeight","sheetTrimWidth","sheetWidth","spineX","rightTrimX","leftPanel","pageRef","rightPanel","sheets","inner","entry","glueZones","coverSpreadCssVars","sheet","getCoverSpreadWarnings","warnings","coverPageCount","PageSizeUtils","\"A0\"","\"A1\"","\"A2\"","\"A3\"","\"A4\"","\"A5\"","\"A6\"","\"B0\"","\"B1\"","\"B2\"","\"B3\"","\"B4\"","\"B5\"","\"B6\"","\"C0\"","\"C1\"","\"C2\"","\"C3\"","\"C4\"","\"C5\"","\"C6\"","\"LETTER\"","\"LEGAL\"","\"TABLOID\"","\"LEDGER\"","size","format","orientation","mm","dpi","dimensions","numericValue","args","normalizedFormat","isCustom","customWidth","customHeight","fallbackFormat","vars","sheetVars","cssVars","ConfigContext","ConfigProvider","react_jsx_runtime","config","Pagination","setup","styleLink","combinedClassName","className","Sheet$1","dataPageKey","showBleedArea","showBleed","children","overlay","isDev","hostname","finitePositive","normalizeGroupKey","getKeepWithNextCount","getFlowFragmentState","knownFragmentIndex","fragmentIndex","fragmentIndexes","itemIndex","groupKey","groupKeys","previousFragmentItemIndex","previousFragmentGroupKey","sourcePredecessorIndex","previousSourceIndex","previousSourceGroupKey","isFirstInGroup","isFirstInGroupOnPage","itemCount","pageIndex","createFlowPlanMetrics","distributeFlowItems","itemWindow","windowIndexes","windowOffset","heights","at","index","normalizedAvailableHeight","availableHeight","chunks","currentHeight","currentChunk","currentLastIndex","indexes","currentHasContent","getHeaderGroupKey","headerGroupKeys","getHeaderHeight","headerGroupHeights","shouldRepeatHeader","headerGroupRepeats","needsGroupHeader","previousIndex","previousHeaderGroupKey","getItemHeightWithHeader","getAvoidBreakGroupKey","meta","metas","getAvoidBreakGroupHeight","priorIndex","startIndex","metrics","getKeepWithNextHeight","offset","count","nextIndex","stopEarly","ownHeight","startNextChunk","addUnplaceableItem","headerHeight","unplaceable","onUnplaceableItem","maxChunks","avoidBreakGroupKey","previousAvoidBreakGroupKey","hasCurrentContent","keepWithNextHeight","requiredHeight","allPopulatedChunks","chunk","populatedChunks","groupHeaders","position","layoutChunkHeight","sum","header","trackFlowPlanInput","columnGroupId","columnId","restoreGlobalChunk","globalIndex","localIndex","restored","firstChunkForIndexes","trackInput","validateFlowColumnLayout","groupIds","seenIndexes","fail","message","claimIndex","location","nodes","node","nodeIndex","columnIds","column","columnIndex","freshPageRetryVerdict","unplaceableRequiredHeight","attempt","fullPageHeight","firstIndex","layoutPageHasContent","distributeFlowColumns","pages","usedHeight","currentPage","startPage","addChunkIndexes","sequence","sequenceNodeIndex","cursor","result","verdict","freshResult","lastIndex","columns","capacity","attempts","freshAttempts","ensureFreshAttempts","candidate","stalled","columnChunks","groupHeight","hasRemaining","forcedBreakAfter","hasUnplaceable","populatedPages","flow_measure_exports","getEffectiveScale","getOuterHeight","hashString","parseKeepWithNext","readFlowItemElements","readHeaderGroupHeights","readHeaderGroupKey","readHeaderGroupRepeats","readItemMeta","serializeKeepWithNext","rectWidth","element","layoutWidth","scale","rect","styles","marginTop","marginBottom","repeats","item","itemElements","root","hash","planFlowChunks","planFlowColumnChunks","StaticFlowContext","useIsoLayoutEffect","warnedMetaDefaultsWithoutType","getItemType","type","mergeItemMeta","merged","base","override","numericStyle","assertSupportedFlowColumnGeometry","verticalBox","style","group","flow","groupStyle","groupVerticalMargins","naturalColumnHeights","verticalMargins","naturalHeight","child","naturalGroupHeight","buildChunks","flowId","buildFlowColumnChunks","area","options","areaRect","measuredAvailableHeight","hasAvailableHeight","unplaceableItems","fallbackHeight","highestIndex","id","columnHeaderGroupHeights","columnHeaderGroupRepeats","groupId","columnItems","FlowArea","context","areaRef","lastSignatureRef","warnedMultipleFlowsRef","warnedZeroHeightRef","warnedUnplaceableItemsRef","rafId","resizeObserver","observedMeasurementElements","observeMeasurementElements","measure","flows","measurement","onFlowMeasurement","scheduleMeasure","mutationObserver","FlowPage","flowAreaClassName","flowAreaStyle","footer","normalizeItemGroup","getFirstFragmentPositions","positions","getPlannedGroupHeadersByItemIndex","headersByItemIndex","Flow","resolveItemType","activeChunk","visibleIndexes","items","idx","itemGroups","getItemGroup","fragmentPositions","plannedGroupHeaders","renderGroupHeader","pageCount","metaDefaults","warningKey","renderUnplaceableItem","getKey","fragment","getItemMeta","resolvedItemClassName","itemClassName","hasPlannedGroupHeader","shouldRenderGroupHeader","resolvedGroupHeaderClassName","groupHeaderClassName","renderItem","FlowColumns","layout","isMeasurement","columnsContext","renderUnplaceable","renderIndexes","rawIndexes","sourceTrackPositions","sourceTrackIndexes","plannedChunk","sourceTrackPosition","containerProps","resolveContainerProps","markAsLayoutNode","sourceColumnNodes","renderedLayout","layoutIndex","sourceNode","sourceColumnsById","renderedColumns","groupProps","getColumnGroupProps","sourceColumn","renderedColumn","columnProps","getColumnProps","columnIndexes","getColumnItemProps","getDialogProps","dialog","props","isRendererMode","typeMarker","EMPTY_TEXT_CLASS","TEXT_DIALOG_TYPES","isTextDialog","isEmptyContent","Editable","slugify","blockId","idPrefix","source","PAGE_BREAK_COMMENT_RE$1","ELEMENT_NODE","TEXT_NODE","COMMENT_NODE","escapeHtml","text","sanitizeHtml","html","parseHtmlToTokens","template","tokens","breakComment","breakBefore","breakAfter","tokensToItems","breakBeforeNext","token","htmlToFlowItems","DEFAULT_META_DEFAULTS","warnedSanitizeDisabled","useSanitizer","sanitize","FlowDocument","parseHtml","mergedMetaDefaults","sanitizer","resolveItemMeta","resolveRenderItem","flowClassName","editable","PAGE_BREAK_COMMENT_RE","REFERENCE_DEFINITION_RE","STANDALONE_IMAGE_RE","isBlank","line","isHeading","isListStart","isFence","isRule","isTableStart","current","lines","next","isPageBreakComment","isReferenceDefinition","splitLongParagraph","maxLength","markdown","words","parts","word","appendReferenceDefinitions","referenceDefinitions","pushBlock","rawMarkdown","maxParagraphLength","partIndex","part","blocks","markdownToFlowItems","allLines","start","fence","formatMm","useMissingBindingWarning","warned","CoverSpread","bindingProp","guides","leftNo","rightNo","pageNo","panelOverlay","no","leftSheet","leftClassName","leftPageKey","left","rightSheet","rightClassName","rightPageKey","right","blank","showGlue","side","r","f","o","clsx","concatArrays","combinedArray","array1","array2","createClassValidatorObject","createClassPartObject","CLASS_PART_SEPARATOR","EMPTY_CONFLICTS","ARBITRARY_PROPERTY_PREFIX","createClassGroupUtils","classMap","createClassMap","getGroupIdForArbitraryProperty","classParts","getGroupRecursive","hasPostfixModifier","modifierConflicts","conflictingClassGroupModifiers","classGroupId","baseConflicts","conflictingClassGroups","classPartObject","currentClassPart","nextClassPartObject","validators","classRest","validatorsLength","validatorObj","content","colonIndex","property","processClassGroups","classGroups","theme","processClassesRecursively","len","classGroup","classDefinition","processClassDefinition","processStringDefinition","processFunctionDefinition","processObjectDefinition","classPartObjectToEdit","getPart","isThemeGetter","entries","path","func","createLruCache","maxCacheSize","cacheSize","cache","previousCache","update","IMPORTANT_MODIFIER","MODIFIER_SEPARATOR","EMPTY_MODIFIERS","createResultObject","createParseClassName","parseClassName","modifiers","bracketDepth","parenDepth","modifierStart","postfixModifierPosition","currentCharacter","baseClassNameWithImportantModifier","baseClassName","hasImportantModifier","maybePostfixModifierPosition","prefix","fullPrefix","parseClassNameOriginal","experimentalParseClassName","createSortModifiers","modifierWeights","currentSegment","modifier","isArbitrary","isOrderSensitive","createConfigUtils","createPostfixLookupClassGroupIds","lookup","classGroupIds","SPLIT_CLASSES_REGEX","mergeClassList","configUtils","classGroupsInConflict","classNames","classList","originalClassName","isExternal","getClassGroupId","classGroupIdWithPostfix","postfixLookupClassGroupIds","variantModifier","sortModifiers","modifierId","classId","conflictGroups","getConflictingClassGroupIds","twJoin","classLists","argument","resolvedValue","string","toValue","mix","createTailwindMerge","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","createConfigCurrent","previousConfig","createConfigFirst","tailwindMerge","cachedResult","fallbackThemeArr","fromTheme","themeGetter","arbitraryValueRegex","arbitraryVariableRegex","fractionRegex","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isFraction","isNumber","isInteger","isPercent","isTshirtSize","isAny","isLengthOnly","isNever","isShadow","isImage","isAnyNonArbitrary","isArbitraryValue","isArbitraryVariable","isNamedContainerQuery","isArbitrarySize","getIsArbitraryValue","isLabelSize","isArbitraryLength","isLabelLength","isArbitraryNumber","isLabelNumber","isArbitraryWeight","isLabelWeight","isArbitraryFamilyName","isLabelFamilyName","isArbitraryPosition","isLabelPosition","isArbitraryImage","isLabelImage","isArbitraryShadow","isLabelShadow","isArbitraryVariableLength","getIsArbitraryVariable","isArbitraryVariableFamilyName","isArbitraryVariablePosition","isArbitraryVariableSize","isArbitraryVariableImage","isArbitraryVariableShadow","isArbitraryVariableWeight","testLabel","testValue","shouldMatchNoLabel","label","twMerge","themeColor","themeFont","themeText","themeFontWeight","themeTracking","themeLeading","themeBreakpoint","themeContainer","themeSpacing","themeRadius","themeShadow","themeInsetShadow","themeTextShadow","themeDropShadow","themeBlur","themePerspective","themeAspect","themeEase","themeAnimate","scaleBreak","scalePosition","scalePositionWithArbitrary","scaleOverflow","scaleOverscroll","scaleUnambiguousSpacing","scaleInset","scaleGridTemplateColsRows","scaleGridColRowStartAndEnd","scaleGridColRowStartOrEnd","scaleGridAutoColsRows","scaleAlignPrimaryAxis","scaleAlignSecondaryAxis","scaleMargin","scaleSizing","scaleSizingInline","scaleSizingBlock","scaleColor","scaleBgPosition","scaleBgRepeat","scaleBgSize","scaleGradientStopPosition","scaleRadius","scaleBorderWidth","scaleLineStyle","scaleBlendMode","scaleMaskImagePosition","scaleBlur","scaleRotate","scaleScale","scaleSkew","scaleTranslate","cn","inputs","useImageLoadFailure","onError","event","toPageInset","resolveImageWidth","pageSpan","pageWidth","resolveImageAnchorInsets","mode","pageBoxWidth","leftInset","rightInset","ImageBleed","imageLoadErrorHandler","BLEED","PAGE_CONTENT_WIDTH","PAGE_CONTENT_HEIGHT","imageW","imageH","imageL","imageR","imageT","imageB","unitFormat","calculateImageWidth","calculateImageHeight","imageWidth","imageHeight","formatStyleValue","_","imageClassName","src","toKebabCase","toCamelCase","p2","p1","toPascalCase","camelCase","mergeClasses","classes","array","hasA11yProp","prop","defaultAttributes$1","Icon","rest","color","absoluteStrokeWidth","strokeWidth","iconNode","tag","attrs","createLucideIcon","Component","iconName","ArrowDown","ArrowUpDown","ArrowUp","BookDashed","Check","ChevronDown","ChevronRight","ClipboardList","Copy","Ellipsis","GripVertical","Lock","Maximize","Minus","Pencil","Plus","Search","Trash2","UnfoldHorizontal","UnfoldVertical","X","ZoomIn","ZoomOut","PortalRootContext","usePortalRoot","PortalRootProvider","portalContainer","setPortalContainer","container","en_default","\"pages_one\"","\"pages_other\"","\"add\"","\"addHint\"","\"reorder\"","\"reorderHint\"","\"menu\"","\"fitWidth\"","\"fitHeight\"","\"fitPage\"","\"zoomIn\"","\"zoomOut\"","\"count_one\"","\"count_other\"","\"fallbackName\"","\"continued\"","\"options\"","\"groupOptions\"","\"optionsMenu\"","\"rename\"","\"moveUp\"","\"moveDown\"","\"addPage\"","\"duplicate\"","\"delete\"","\"title\"","\"description\"","\"filterLabel\"","\"filterPlaceholder\"","\"emptyTitle\"","\"emptyFiltered\"","\"emptyAdded\"","\"groupFallbackName\"","\"pageFallbackName\"","\"addItem\"","\"added\"","\"addAnother\"","\"done\"","\"emptyDescription\"","\"remove\"","\"cancel\"","\"save\"","\"groupBadge_one\"","\"groupBadge_other\"","\"noPreview\"","\"start\"","\"end\"","\"draggingGroup\"","\"draggingPage\"","\"cannotRemoveTitle\"","\"lastPage\"","\"ok\"","\"edit\"","\"annotate\"","\"close\"","de_default","fr_default","\"pages_many\"","\"count_many\"","\"groupBadge_many\"","it_default","SHELL_LOCALE_QUERY_PARAMS","normalizeLanguageTag","pickLanguage","candidates","language","supported","resolveShellLocale","params","sources","subscribeHostLocale","uhuu","off","data","onLocale","isCatalogNode","deepMergeCatalog","mergeTranslations","builtIn","catalog","overrides","localizeText","locale","fallbackLocale","first","pluralRules","pluralCategory","rules","interpolate","match","createTranslator","chain","catalogs","variants","variant","SHELL_LOCALES","BUILT_IN_CATALOGS","ShellLocaleContext","supportedLocales","translations","detectShellLocale","explicit","host","createShellI18n","fallbackRuntime","getFallbackRuntime","useHostLocale","hostLocale","setHostLocale","useShellI18nRuntime","resolved","ShellLocaleProvider","useShellTranslation","InteractiveModeContext","useInteractive","useShouldHideUI","interactive","isHostEditorShellDevToolsEnabled","InteractiveModeProvider","shouldDisableInteractive","effectiveEnableDevTools","enableDevTools","setInteractive","defaultInteractive","shellI18n","contextValue","falsyToString","cx","cva","getVariantClassNames","variantProp","defaultVariantProp","defaultVariants","variantKey","propsWithoutUndefined","param","acc","cvClass","cvClassName","compoundVariantOptions","buttonVariants","Button","__defProp$28","__name$28","canUseDOM$1","composeEventHandlers","originalEventHandler","checkForDefaultPrevented","ourEventHandler","getOwnerWindow","getOwnerDocument$1","getActiveElement","activeElement","isFrame","activeDescendant","__defProp$27","__name$27","setRef$1","ref","composeRefs","refs","hasCleanup","cleanups","cleanup","useComposedRefs","__defProp$26","__name$26","createContext2","Context","defaultContext","rootComponentName","Provider","useContext2","consumerName","createContextScope","defaultContexts","createContext3","BaseContext","scope","scopeName","createScope","scopeContexts","contexts","composeContextScopes","createContextScopeDeps","scopes","baseScope","scopeHooks","createScope2","nextScopes","currentScope","useScope","overrideScopes","nextScopes2","useLayoutEffect2","__defProp$25","__name$25","useReactEffectEvent","\" useEffectEvent \".trim().toString()","useReactInsertionEffect","\" useInsertionEffect \".trim().toString()","useEffectEvent","callback","__defProp$24","__name$24","useInsertionEffect","useControllableState","uncontrolledProp","setUncontrolledProp","onChangeRef","useUncontrolledState","isControlled","value2","isFunction$2","nextValue","setValue","defaultProp","prevValueRef","onChange","SYNC_STATE","useControllableStateReducer","controlledState","onChangeProp","userArgs","initialArg","init","internalState","dispatch","action","state2","reducer","uncontrolledState","state","__defProp$23","__name$23","createSlot","Slot2","slotProps","slottableElement","hasSlottable","newChildren","isLazyComponent","use","isSlottable","maybeSlottable","slottable","getSlottableElementFromSlottable","slottableElementRef","getElementRef$1","composedRef","forwardedRef","createSlottableError","ownerName","createSlotError","mergedProps","mergeProps","SLOTTABLE_IDENTIFIER","createSlottable","Slottable2","child2","overrideProps","childProps","propName","slotPropValue","childPropValue","concatAriaDescribedby$1","getter","mayWarn","REACT_LAZY_TYPE","isPromiseLike","values","ids","\" use \".trim().toString()","__defProp$22","__name$22","Primitive","Slot","Node","primitiveProps","Comp","asChild","primitive","dispatchDiscreteCustomEvent","__defProp$21","__name$21","createCollection","PROVIDER_NAME","createCollectionContext","createCollectionScope","CollectionProviderImpl","useCollectionContext","CollectionProvider","itemMap","COLLECTION_SLOT_NAME","CollectionSlotImpl","CollectionSlot","composedRefs","ITEM_SLOT_NAME","ITEM_DATA_ATTR","CollectionItemSlotImpl","CollectionItemSlot","itemData","useCollection","collectionNode","orderedNodes","a","b","__instanciated","OrderedDict","_OrderedDict","#keys","has","length","relativeIndex","toSafeInteger","actualIndex","safeIndex","shouldSkip","nextKey","currentKey","currentValue","copy","newKey","deleted","dest","predicate","thisArg","callbackfn","initialValue","accumulator","compareFn","reversed","stop","end","toSafeIndex","number","createCollection2","CollectionContextProvider","CollectionInit","useInitCollection","collectionElement","setCollectionElement","setItemMap","observer","getChildListObserver","setElement","itemDataRef","shallowEqual","memoizedItemData","itemData2","map","sortByDocumentPosition","keysA","keysB","isElementPreceding","mutation","mutationsList","__defProp$20","__name$20","Direction$4","DirectionContext","useDirection","globalDir","localDir","__defProp$19","__name$19","useCallbackRef$1","callbackRef","__defProp$18","__name$18","CONTEXT_UPDATE","POINTER_DOWN_OUTSIDE","FOCUS_OUTSIDE","originalBodyPointerEvents","DismissableLayerContext","DismissableLayer","layerProps","setNode","ownerDocument","force","layers","highestLayerWithOutsidePointerEventsDisabled","highestLayerWithOutsidePointerEventsDisabledIndex","isBodyPointerEventsDisabled","isPointerEventsEnabled","isDeferredPointerDownOutsideRef","pointerDownOutside","usePointerDownOutside","onPointerDownOutside","onInteractOutside","onDismiss","isPointerDownOnBranch","branch","focusOutside","useFocusOutside","deferPointerDownOutside","onFocusOutside","isHighestLayer","handleKeyDown","onEscapeKeyDown","disableOutsidePointerEvents","dispatchUpdate","handleUpdate","useDismissableLayerSurface","IS_TRUE","handlePointerDownOutside","isPointerInsideReactTreeRef","isPointerDownOutsideRef","interceptedOutsideInteractionEventsRef","handleClickRef","resetOutsideInteraction","isOutsideInteractionIntercepted","handleInteractionCapture","dismissableSurfaces","surface","handleInteractionBubble","handlePointerDown","handleAndDispatchPointerDownOutsideEvent2","wasOutsideInteractionIntercepted","handleAndDispatchCustomEvent","eventDetail","shouldHandlePointerDownOutside","outsideInteractionEvents","eventName","timerId","handleFocusOutside","isFocusInsideReactTreeRef","handleFocus","detail","handler","discrete","__defProp$17","__name$17","count$1","guards","FocusGuards","useFocusGuards","createFocusGuard","__defProp$16","__name$16","AUTOFOCUS_ON_MOUNT","AUTOFOCUS_ON_UNMOUNT","EVENT_OPTIONS$1","FocusScope","onMountAutoFocusProp","onUnmountAutoFocusProp","scopeProps","setContainer","onMountAutoFocus","onUnmountAutoFocus","lastFocusedElementRef","branchesRef","branches","isTargetInScope","focusScope","trapped","handleFocusIn2","focus","handleFocusOut2","relatedTarget","handleMutations2","mutations","focusScopesStack","previouslyFocusedElement","mountEvent","focusFirst$2","removeLinks","getTabbableCandidates","unmountEvent","loop","isTabKey","focusedElement","container2","last","getTabbableEdges","FocusScopeBranchContext","FocusScopeBranchProvider","registry","useFocusScopeBranchRegistry","setNodes","prev","useFocusScopeBranch","findVisible","walker","isHiddenInput","canUseCheckVisibility","elements","isHidden","upTo","isSelectableInput","select","createFocusScopesStack","stack","activeFocusScope","arrayRemove","updatedArray","__defProp$15","__name$15","useReactId","\" useId \".trim().toString()","useId","setId","deterministicId","reactId","sides","min","max","round","floor","createCoords","v","oppositeSideMap","clamp$2","evaluate","getSide","placement","getAlignment","getOppositeAxis","axis","getAxisLength","getSideAxis","firstChar","getAlignmentAxis","getAlignmentSides","rtl","alignment","alignmentAxis","mainAlignmentSide","rects","getOppositePlacement","getExpandedPlacements","oppositePlacement","getOppositeAlignmentPlacement","lrPlacement","rlPlacement","tbPlacement","btPlacement","getSideList","isStart","getOppositeAxisPlacements","list","direction","flipAlignment","expandPaddingObject","padding","getPaddingObject","rectToClientRect","y","x","computeCoordsFromPlacement","_ref","sideAxis","alignLength","isVertical","commonX","reference","floating","commonY","commonAlign","coords","detectOverflow","paddingObject","altBoundary","elementContext","clippingClientRect","platform","offsetParent","offsetScale","elementClientRect","MAX_RESET_COUNT","computePosition$1","platformWithDetectOverflow","statefulPlacement","resetCount","middlewareData","middleware","currentMiddleware","nextX","nextY","fn","reset","arrow$3","arrowDimensions","isYAxis","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","largestPossiblePadding","minPadding","maxPadding","center","shouldAddOffset","alignmentOffset","flip$2","_middlewareData$arrow","checkMainAxis","checkCrossAxis","specifiedFallbackPlacements","detectOverflowOptions","initialSideAxis","initialPlacement","isBasePlacement","fallbackPlacements","hasFallbackAxisSideDirection","fallbackAxisSideDirection","placements","overflow","overflows","overflowsData","nextPlacement","d","resetPlacement","fallbackStrategy","currentSideAxis","getSideOffsets","isAnySideFullyClipped","hide$2","strategy","offsets","originSides","convertValueToCoords","mainAxisMulti","crossAxisMulti","rawValue","crossAxis","mainAxis","offset$2","diffCoords","shift$2","mainAxisCoord","crossAxisCoord","clampCoord","coord","limitedCoords","limiter","limitShift$2","rawOffset","computedOffset","limitMin","limitMax","isOriginSide","size$2","heightSide","widthSide","maximumClippingHeight","maximumClippingWidth","overflowAvailableHeight","overflowAvailableWidth","shiftData","noShift","availableWidth","apply","nextDimensions","hasWindow","getNodeName","isNode$1","getWindow$1","_node$ownerDocument","getDocumentElement","isElement","isHTMLElement$1","isShadowRoot","isOverflowElement","getComputedStyle$1","overflowY","overflowX","display","isTableElement","isTopLayer","willChangeRe","containRe","isNotNone","isWebKitValue","isContainingBlock","css","elementOrCss","isWebKit","getContainingBlock","currentNode","getParentNode","isLastTraversableNode","getNodeScroll","getNearestOverflowAncestor","parentNode","getOverflowAncestors","traverseIframes","scrollableAncestor","isBody","win","frameElement","getFrameElement","getCssDimensions","hasOffset","offsetWidth","offsetHeight","shouldFallback","unwrapElement","getScale","domElement","$","noOffsets","getVisualOffsets","shouldAddVisualOffsets","isFixed","floatingOffsetParent","getBoundingClientRect","includeScale","isFixedStrategy","clientRect","visualOffsets","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","top","getWindowScrollBarX","leftScroll","getHTMLOffset","htmlRect","documentElement","scroll","convertOffsetParentRelativeRectToViewportRelativeRect","topLayer","isOffsetParentAnElement","offsetRect","htmlOffset","getClientRects","getDocumentRect","body","SCROLLBAR_MAX","getViewportRect","rootBoundary","isLayoutViewport","visualViewport","layoutRelativeClientCoords","doc","bodyStyles","bodyMarginInline","reservedWidth","gutter","getInnerBoundingClientRect","getClientRectFromClippingAncestor","clippingAncestor","getClippingElementAncestors","lastKeptComputedStyle","elementIsFixed","computedStyle","currentNodeIsContaining","lastPosition","ancestor","getClippingRect","clippingAncestors","boundary","firstRect","bottom","getDimensions","getRectRelativeToOffsetParent","isStaticPositioned","getTrueOffsetParent","polyfill","rawOffsetParent","getOffsetParent","svgOffsetParent","getElementRects","getOffsetParentFn","getDimensionsFn","floatingDimensions","isRTL","rectsAreEqual","observeMove","io","timeoutId","_io","refresh","skip","threshold","elementRectForRootMargin","onMove","insetTop","insetRight","insetBottom","insetLeft","isFirstUpdate","handleObserve","ratio","handleResize","ancestorResize","autoUpdate","referenceEl","ancestors","ancestorScroll","cleanupIo","layoutShift","reobserveFrame","elementResize","firstEntry","_resizeObserver","animationFrame","frameId","prevRefRect","frameLoop","nextRefRect","_resizeObserver2","offset$1","shift$1","flip$1","size$1","hide$1","arrow$2","limitShift$1","computePosition","mergedOptions","platformWithCache","deepEqual","getDPR","roundByDPR","dpr","useLatestRef","useFloating","externalReference","externalFloating","setData","latestMiddleware","setLatestMiddleware","_reference","_setReference","_floating","_setFloating","setReference","referenceRef","setFloating","floatingRef","floatingEl","dataRef","hasWhileElementsMounted","whileElementsMounted","whileElementsMountedRef","platformRef","openRef","open","fullData","isMountedRef","floatingStyles","initialStyles","transform","arrow$1","isRef","deps","shift","limitShift","flip","hide","arrow","__defProp$14","__name$14","useSize","setSize","rAF","borderSizeEntry","\"borderBoxSize\"","borderSize","\"inlineSize\"","\"blockSize\"","__defProp$13","__name$13","Sticky","UpdatePositionStrategy","POPPER_NAME","createPopperContext","createPopperScope","PopperProvider","usePopperContext","Popper","anchor","setAnchor","placementState","setPlacementState","__scopePopper","ANCHOR_NAME","PopperAnchor","anchorProps","onAnchorChange","anchorRef","virtualRef","previousAnchor","sideAndAlign","getSideAndAlignFromPlacement","placedSide","placedAlign","CONTENT_NAME$3","PopperContentProvider","useContentContext","PopperContent","collisionPaddingProp","contentProps","setContent","arrow$4","setArrow","arrowSize","arrowWidth","arrowHeight","desiredPlacement","align","collisionPadding","collisionBoundary","hasExplicitBoundaries","isNotNull","updatePositionStrategy","sideOffset","alignOffset","avoidCollisions","sticky","anchorWidth","anchorHeight","contentStyle","arrowPadding","transformOrigin","hideWhenDetached","handlePlaced","onPlaced","isPositioned","arrowX","arrowY","cannotCenterArrow","contentZIndex","setContentZIndex","isArrowHidden","noArrowAlign","arrowXCenter","arrowYCenter","__defProp$12","Portal","containerProp","portalProps","mounted","setMounted","__defProp$11","__name$11","useStateMachine","machine","initialState","Presence","presence","usePresence","present","useStableComposedRefs","getElementRef","stylesRef","prevPresentRef","prevAnimationNameRef","mountAnimationNameRef","send","getAnimationName","wasPresent","prevAnimationName","currentAnimationName","ownerWindow","handleAnimationEnd","isCurrentAnimation","currentFillMode","handleAnimationStart","node2","setRef","refsRef","currentRefs","__defProp$10","__name$10","_isHydrated","useIsHydrated","isHydrated","setIsHydrated","useReactSyncExternalStore","\" useSyncExternalStore \".trim().toString()","subscribe","useIsHydratedModern","useIsHydrated2","__defProp$9","__name$9","ENTRY_FOCUS","EVENT_OPTIONS","GROUP_NAME","Collection$2","useCollection$2","createCollectionScope$2","createRovingFocusGroupContext","createRovingFocusGroupScope","Orientation$1","Direction$3","RovingFocusProvider","useRovingFocusContext","RovingFocusGroup","RovingFocusGroupImpl","currentTabStopIdProp","dir","currentTabStopId","setCurrentTabStopId","defaultCurrentTabStopId","onCurrentTabStopIdChange","isTabbingBackOut","setIsTabbingBackOut","handleEntryFocus","onEntryFocus","getItems","__scopeRovingFocusGroup","isClickFocusRef","focusableItemsCount","setFocusableItemsCount","tabStopId","prevCount","isKeyboardFocus","entryFocusEvent","focusFirst$1","preventScrollOnEntryFocus","ITEM_NAME$1","RovingFocusGroupItem","itemProps","autoId","isCurrentTabStop","focusable","onFocusableItemAdd","onFocusableItemRemove","focusIntent","getFocusIntent","candidateNodes","currentIndex","wrapArray$1","MAP_KEY_TO_FOCUS_INTENT","getDirectionAwareKey","PREVIOUSLY_FOCUSED_ELEMENT","getDefaultParent","originalTarget","counterMap","uncontrolledNodes","markerMap","lockCount","unwrapHost","correctTargets","targets","parent","correctedTarget","applyAttributeToOthers","markerName","markerCounter","hiddenNodes","elementsToKeep","elementsToStop","keep","deep","attr","controlAttribute","alreadyHidden","counterValue","markerValue","e","hideOthers","activeParentNode","__assign","s","p","t","__rest","__spreadArray","pack","l","ar","zeroRightClassName","fullWidthClassName","noScrollbarsClassName","removedBarSizeVariable","assignRef","useCallbackRef","useIsomorphicLayoutEffect$1","currentValues","useMergeRefs","defaultValue","newValue","oldValue","prevRefs_1","nextRefs_1","current_1","ItoI","innerCreateMedium","buffer","assigned","defaults","cbs","cb","pendingQueue","executeQueue","cycle","filter","createSidecarMedium","medium","SideCar","sideCar","_a","Target","exportSidecar","exported","effectCar","nothing","RemoveScroll","callbacks","setCallbacks","forwardProps","removeScrollBar","enabled","shards","noRelative","noIsolation","inert","allowPinchZoom","_b","Container","gapMode","containerRef","parentRef","currentNonce","getNonce","makeStyleTag","nonce","injectStyles","insertStyleTag","stylesheetSingleton","counter","stylesheet","styleHookSingleton","isDynamic","styleSingleton","useStyle","dynamic","zeroGap","parse$1","getOffset","cs","getGapWidth","documentWidth","windowWidth","Style","lockAttribute","getStyles","gap","important","allowRelative","getCurrentUseCounter","useLockAttribute","newCounter","RemoveScrollBar","noImportant","passiveSupported","nonPassive","alwaysContainsScroll","elementCanBeScrolled","elementCouldBeVScrolled","elementCouldBeHScrolled","locationCouldBeScrolled","elementCouldBeScrolled","getScrollVariables","getVScrollVariables","getHScrollVariables","getDirectionFactor","handleScroll","directionFactor","endTarget","delta","sourceDelta","targetInLock","shouldCancelScroll","isDeltaPositive","availableScroll","availableScrollTop","elementScroll","parent_1","noOverscroll","getTouchXY","getDeltaXY","extractRef","deltaCompare","generateStyle","idCounter","lockStack","RemoveScrollSideCar","shouldPreventQueue","touchStartRef","activeAxis","lastProps","allow_1","shouldCancelEvent","touch","touchStart","deltaX","deltaY","currentAxis","moveDirection","selection","anchorNode","canBeScrolledInMainDirection","cancelingAxis","shouldPrevent","_event","sourceEvent","shardNodes","shouldCancel","getOutermostShadowParent","scrollTouchStart","scrollWheel","scrollTouchMove","inst","shadowParent","sidecar_default","ReactRemoveScroll","__defProp$8","__name$8","Direction$2","SELECTION_KEYS","FIRST_KEYS","LAST_KEYS","FIRST_LAST_KEYS","SUB_OPEN_KEYS","SUB_CLOSE_KEYS","MENU_NAME","Collection$1","useCollection$1","createCollectionScope$1","createMenuContext","createMenuScope","usePopperScope","useRovingFocusGroupScope","MenuProvider","useMenuContext","MenuRootProvider","useMenuRootContext","Menu","popperScope","__scopeMenu","isUsingKeyboardRef","handleOpenChange","onOpenChange","handlePointer","handleBlur","MenuAnchor","PORTAL_NAME$1","PortalProvider$1","usePortalContext$1","MenuPortal","forceMount","CONTENT_NAME$2","MenuContentProvider","useMenuContentContext","MenuContent","portalContext","rootContext","MenuRootContentModal","MenuRootContentNonModal","MenuContentImpl","Slot$1","rovingFocusGroupScope","currentItemId","setCurrentItemId","contentRef","branchNode","setBranchNode","branchNodes","branchRegistry","isModal","trapFocus","disableOutsideScroll","timerRef","searchRef","pointerGraceTimerRef","pointerGraceIntentRef","pointerDirRef","lastPointerXRef","ScrollLockWrapper","scrollLockWrapperProps","handleTypeaheadSearch","search","currentItem","currentMatch","nextMatch","getNextMatch","newItem","updateSearch","isPointerMovingToSubmenu","isPointerInGraceArea","intent","onOpenAutoFocus","onCloseAutoFocus","getOpenState","isKeyDownInside","isModifierKey","isCharacterKey","focusFirst","whenMouse","pointerXHasChanged","newDir","MenuLabel","labelProps","ITEM_NAME","ITEM_SELECT","MenuItem","contentContext","isPointerDownRef","handleSelect","menuItem","disabled","itemSelectEvent","onSelect","MenuItemImpl","isFocused","setIsFocused","textContent","setTextContent","textValue","MenuCheckboxItem","checkboxItemProps","ItemIndicatorProvider","isIndeterminate","checked","getCheckedState","onCheckedChange","RadioGroupProvider","useRadioGroupContext","RADIO_ITEM_NAME","MenuRadioItem","radioItemProps","useItemIndicatorContext","MenuSeparator","separatorProps","SUB_NAME","MenuSubProvider","useMenuSubContext","MenuSub","parentMenuContext","trigger","setTrigger","SUB_TRIGGER_NAME","MenuSubTrigger","subContext","openTimerRef","clearOpenTimer","pointerGraceTimer","onPointerGraceIntentChange","contentRect","rightSide","contentNearEdge","contentFarEdge","SUB_CONTENT_NAME","MenuSubContent","subContentProps","isCloseKey","wrapArray","normalizedSearch","char","currentMatchIndex","wrappedValues","isPointInPolygon","point","inside","j","polygon","ii","jj","xi","yi","xj","yj","__defProp$7","__name$7","DROPDOWN_MENU_NAME","createDropdownMenuContext","createDropdownMenuScope","useMenuScope","DropdownMenuProvider","useDropdownMenuContext","DropdownMenu$1","openProp","menuScope","__scopeDropdownMenu","triggerRef","setOpen","defaultOpen","prevOpen","TRIGGER_NAME$2","DropdownMenuTrigger$1","triggerProps","DropdownMenuPortal","CONTENT_NAME$1","DropdownMenuContent$1","hasInteractedOutsideRef","originalEvent","ctrlLeftClick","isRightClick","DropdownMenuLabel$1","DropdownMenuItem$1","DropdownMenuCheckboxItem$1","DropdownMenuRadioItem$1","DropdownMenuSeparator$1","DropdownMenuSub$1","DropdownMenuSubTrigger$1","subTriggerProps","DropdownMenuSubContent$1","DropdownMenu","DropdownMenuTrigger","DropdownMenuSub","DropdownMenuSubTrigger","inset","DropdownMenuSubContent","DropdownMenuContent","DropdownMenuItem","DropdownMenuCheckboxItem","DropdownMenuRadioItem","DropdownMenuLabel","DropdownMenuSeparator","handleOptionSelect","option","renderOverlay","overlaySvg","trimmed","normalizedSvg","nextAttrs","overlayClassName","ImageOptionsButton","button","anchorInsets","renderOptionsButton","showOptions","useShouldShowOptions","shouldHideUI","ImageBleedWithOverlay","bleedProps","baseDialogProps","dialogProps","baseHandler","extraHandler","ImageSpread","val","createStyle","imageLeft","imageTop","imageBottom","rightPageOffset","useExplicitHeight","leftStyle","rightStyle","ImageSpreadWithOverlay","spreadProps","ImageWithOptions","imageProps","mergedDialogProps","resolvedSrc","isEmptyImage","placeholder","renderImage","renderImageContent","imagePropsClassName","imagePropsStyle","finalSrc","finalAlt","alt","mergedImageProps","imageStyle","hasDataUhuu","hasImageSpreadOrBleed","childrenWithProps","\"dataUhuu\"","ImageBlock","annotation","annotationValue","autoOverlaySvg","autoOptions","dialogConfig","satelliteParams","annotations","annotationConfig","annotateDialogConfig","finalOptions","directDialog","needsImageWithOptions","computedOptions","computedOverlaySvg","computedDirectDialog","_mode","baseProps","isPlainObject","hasOwn","object","textOf","THUMBNAIL_ENDPOINT","SVG_TYPE","sourceOf","hostIsPrintProduct","parse","url","isSvg","parsed","lower","isThumbnail","imageUrl","settings","original","formatParam","COLOR_SLOTS","FONT_ROLES","ROLE_SLOTS","ROLE_NAMES","RUNTIME_ROLE_NAME","RUNTIME_COLOR_NAME","RUNTIME_FONT_NAME","brandKitRuntime","runtime","brandKit","HEX","RGB","OK_COMPONENT","OKLAB","KEYWORD","CSS_WIDE_KEYWORDS","NUMBER","HSL_TRIPLET","HSL_FUNCTION","UNSAFE_VALUE","ALIAS_KEY","clamp$1","hex2","HUE_UNIT","hslToCss","h","hue","unit","saturation","lightness","channel","g","opacity","alpha","alphaIsPercent","toPrintSafeColor","hsl","readSource","semantic","hero","firstPrintSafe","stackTail","composeStack","family","quoted","tail","fontRecord","fonts","font","resolveFontStack","spec","role","tokenStack","primitiveStack","record","brandKitCssVars","raw","slot","aliases","alias","subKey","subRaw","ABSOLUTE","BRAND_KIT_PUBLIC_BASE_URL","brandKitBaseUrl","own","sourceUrl","resolveBrandKitUrl","KIT_ID","brandKitSourceUrl","payload","team","fromId","stored","loadBrandKit","doFetch","response","document","LOGO_KIND","LEGACY_SLOT","ASSIGNMENT","fileOf","files","brandKitLogo","kind","background","found","logoFromSystem","logoFromLegacy","ofKind","logos","other","legacy","COLLECTION_TYPE","brandKitCollection","collections","collection","versions","versionId","version","schemaKeys","envKey","brandKitEnv","rows","wanted","row","brandKitMapStyle","which","fromEnv","UNSAFE_IN_CSS_STRING","listFonts","providerOf","singleFamily","weightsOf","valid","face","weight","googleFontsUrl","weights","faces","tuples","italic","pair","fontFiles","file","cssFormat","hint","cssWeight","fontFaceRule","brandKitFontAssets","stylesheetUrls","addStylesheet","declared","rule","provider","BrandKitContext","absoluteUrl","BrandKitProvider","loaded","setLoaded","controller","onLoad","error","kit","kitSource","status","href","useBrandKit","DEFAULT_PAGE_EDITOR_STATE_KEY","isPageGroup","flattenPages","pageNum","updatePageNumbers","updatedPages","getTotalPageCount","transformItemsForReorder","strictPosition","firstPage","firstPageComponentKey","pageComponentKey","restoreItemsFromReorder","originalItemsMap","originalItems","reorderedItem","reorderedItems","normalizePageItems","_ignored","buildPageEditorState","normalized","readPageEditorState","maybeState","normalizedItems","mergePageEditorStateIntoPayload","generateUID","instantiatePage","templateId","instantiateGroup","instanceId","componentKeys","dataKey","hasFlow","resolvePageIndex","totalPages","isPageInRanges","range","ranges","getRangesForMode","filterPageItems","filterConfig","filtered","filteredPages","isPageNumberIncludedInFilter","getIntegrationData","resolveIntegrationInstanceId","parentGroup","resolveIntegrationBinding","resolveIntegrationForPage","buildIntegrationPath","fieldPath","parseIntegrationPath","afterPrefix","dotIndex","setNestedValue","obj","lastKey","updateIntegrationByPath","updatedIntegration","getPagePayload","targetId","fallbackId","candidateKeys","TemplateDataContext","getReservedKeys","stateKey","mergeExternalPayload","externalPayload","currentPayload","reservedKeys","TemplateDataProvider","setCurrentPayload","lastExternalPayloadRef","isInternalUpdateRef","lastInternalPayloadRef","lastInternalTimestampRef","isInitialMountRef","serializePayload","payloadWithoutReservedKeys","internalSerialized","externalSerialized","currentWithoutReserved","lastInternalWithoutReserved","currentSerialized","lastInternalSerialized","notifyHost","onPayloadChange","setPayload","finalPayload","setPageOptionValue","pageOrGroupId","setIntegrationPayload","prevIntegrations","setIntegrationPayloadValue","prevIntegration","removeIntegrationPayload","removed","remainingIntegrations","updateIntegrationByDialogPath","mergePageEditorState","effectiveKey","resolvePagePayload","toDefault","def","parseValue","buildPayloadPageOption","field","fitModeFromDefaultZoomMode","combineFitDimensions","total","section","resolveFitUnitDimensions","preview","resolveFitPaneHeight","paneClientHeight","viewportHeight","paneTop","resolveFitAvailableSpace","paneWidth","paddingX","paneHeight","paddingY","chromeHeight","calculateFitZoom","contentWidth","contentHeight","scaleX","scaleY","minZoom","maxZoom","resolveZoomFocalPoint","clientX","canvas","clientY","zoomFocalScrollDelta","before","relX","relY","newScreenX","after","newScreenY","snapshotZoomFocalRect","pickZoomFocalAnchor","nearest","nearestDistance","dx","dy","distance","isScrollableOverflow","PANE_GUTTER_X","PANE_GUTTER_BOTTOM","INITIAL_FIT_REVEAL_TIMEOUT_MS","PANE_CONTENT_STYLE","resolveScrollTargets","measureHostInset","measureSectionChrome","wrapper","scaledSheetHeight","ZoomContext","TwoPageSection","pairRef","updatePairWidth","sections","totalNaturalWidth","scaledWidth","scaleValue","pageItemId","naturalDimensions","getFitDimensions","Section","setContentHeight","setContentWidth","updateDimensions","originalTransform","naturalWidth","scaledHeight","contentAlignClass","origin","hideUI","controls","title","SectionPageResizer","hideUIProp","zoom","setZoom","defaultZoom","fitMode","setFitMode","defaultZoomMode","awaitingInitialFit","setAwaitingInitialFit","paneInset","setPaneInset","paneRef","paneContentRef","zoomRef","resolveScrollers","scrollMode","applyZoom","clamped","nextZoom","scrollers","anchorIndex","focalClientX","focalClientY","focal","correct","deltaLeft","deltaTop","viewportFocalPoint","recalculateFit","pane","paneBox","paneView","paneContentStyle","currentZoom","handleFitMode","timer","zoomIn","zoomOut","frame","scheduleFit","observeSections","syncPaneInset","zoomFrameId","attachFrameId","pendingZoom","pendingFocal","cancelled","applyPendingZoom","handleWheel","pixelDelta","attach","menuItems","__defProp$6","__name$6","DIALOG_NAME","createDialogContext","createDialogScope","DialogProvider","useDialogContext","Dialog","titleCount","setTitleCount","descriptionCount","setDescriptionCount","__scopeDialog","TRIGGER_NAME$1","DialogTrigger","composedTriggerRef","getState$1","PORTAL_NAME","PortalProvider","usePortalContext","DialogPortal","OVERLAY_NAME","DialogOverlay","overlayProps","DialogOverlayImpl","CONTENT_NAME","DialogContent","DialogContentModal","DialogContentNonModal","DialogContentImpl","hasPointerDownOutsideRef","ariaDescribedby","concatAriaDescribedby","DialogTitle","titleProps","DialogDescription","descriptionProps","CLOSE_NAME","DialogClose","closeProps","Sheet","SheetPortal","SheetOverlay","SheetContent","closeLabel","SheetHeader","SheetFooter","SheetTitle","SheetDescription","createDefaultRenderThumbnail","i18n","resolvedDimensions","pageWidthMm","pageHeightMm","pageAspectRatio","finalThumbnailWidth","thumbnailWidth","finalThumbnailHeight","thumbnailHeight","pageWidthPx","pageHeightPx","isLocked","firstPageId","firstPagePayload","FirstPageComponent","pageComponents","integration","isDragging","localize","pageId","pagePayload","PageComponent","AddPageDialog","searchQuery","setSearchQuery","filteredItems","availableItems","q","onSelectItem","thumbnailStyle","defaultRenderThumbnail","evaluatePageComponentKeys","err","toReorderItem","pageItem","componentKey","gridColsClass","isGroup","hasDefaultThumbnail","useCombinedRefs","_len","_key","canUseDOM","isWindow","elementString","isNode","getWindow","isDocument","Document","isHTMLElement","isSVGElement","getOwnerDocument","useIsomorphicLayoutEffect","useEvent","handlerRef","useInterval","intervalRef","listener","duration","useLatestValue","dependencies","valueRef","useLazyMemo","useNodeRef","onChangeHandler","usePrevious$1","useUniqueId","createAdjustmentFn","adjustments","adjustment","valueAdjustment","add","subtract","hasViewportRelativeCoordinates","isKeyboardEvent","KeyboardEvent","isTouchEvent","TouchEvent","getEventCoordinates","CSS$1","easing","SELECTOR","findFirstFocusableNode","hiddenStyles","HiddenText","LiveRegion","ariaLiveType","announcement","useAnnouncement","setAnnouncement","DndMonitorContext","useDndMonitor","registerListener","useDndMonitorProvider","listeners","defaultScreenReaderInstructions","defaultAnnouncements","active","_ref2","over","_ref3","_ref4","Accessibility","liveRegionId","announce","announcements","_ref5","_ref6","markup","hiddenTextDescribedById","screenReaderInstructions","Action","\"DragStart\"","\"DragMove\"","\"DragEnd\"","\"DragCancel\"","\"DragOver\"","\"RegisterDroppable\"","\"SetDroppableDisabled\"","\"UnregisterDroppable\"","noop","useSensor","sensor","useSensors","sensors","defaultCoordinates","distanceBetween","getRelativeTransformOrigin","eventCoordinates","sortCollisionsAsc","sortCollisionsDesc","cornersOfRectangle","getFirstCollision","collisions","firstCollision","centerOfRectangle","closestCenter","centerRect","collisionRect","droppableContainer","droppableContainers","droppableRects","distBetween","closestCorners","corners","rectCorners","distances","corner","effectiveDistance","getIntersectionRatio","targetArea","entryArea","intersectionArea","intersectionRatio","rectIntersection","adjustScale","rect1","rect2","getRectDelta","createRectAdjustmentFn","getAdjustedRect","parseTransform","transformArray","inverseTransform","parsedTransform","translateX","translateY","w","defaultOptions","getClientRect","getTransformAgnosticClientRect","getWindowClientRect","isScrollable","overflowRegex","getScrollableAncestors","scrollParents","findScrollableAncestors","limit","getFirstScrollableAncestor","firstScrollableAncestor","getScrollableElement","getScrollXCoordinate","getScrollYCoordinate","getScrollCoordinates","Direction$1","\"Forward\"","\"Backward\"","isDocumentScrollingElement","getScrollPosition","minScroll","scrollingContainer","maxScroll","defaultThreshold","getScrollDirectionAndSpeed","acceleration","thresholdPercentage","scrollContainer","speed","scrollContainerRect","isTop","isBottom","isRight","isLeft","getScrollElementRect","innerWidth","innerHeight","getScrollOffsets","scrollableAncestors","getScrollXOffset","getScrollYOffset","scrollIntoViewIfNeeded","properties","Rect","scrollOffsets","getScrollOffset","currentOffsets","scrollOffsetsDeltla","Listeners","_this$target2","getEventListenerTarget","EventTarget","hasExceededDistance","EventName","\"Click\"","\"Keydown\"","\"ContextMenu\"","\"Resize\"","\"SelectionChange\"","\"VisibilityChange\"","preventDefault","stopPropagation","KeyboardCode","\"Space\"","\"Down\"","\"Right\"","\"Left\"","\"Up\"","\"Esc\"","\"Enter\"","\"Tab\"","defaultKeyboardCodes","defaultKeyboardCoordinateGetter","currentCoordinates","KeyboardSensor","activeNode","onStart","keyboardCodes","code","newCoordinates","coordinateGetter","coordinatesDelta","scrollDelta","scrollElementRect","clampedCoordinates","canScrollX","canScrollY","newScrollCoordinates","canScrollToNewCoordinates","scrollBehavior","coordinates","onEnd","onCancel","activator","onActivation","isDistanceConstraint","constraint","isDelayConstraint","AbstractPointerSensor","listenerTarget","events","activationConstraint","bypassActivationConstraint","onPending","initialCoordinates","activated","onAbort","_this$document$getSel","PointerSensor","events$1","MouseButton","\"RightClick\"","MouseSensor","events$2","TouchSensor","touches","AutoScrollActivator","\"Pointer\"","\"DraggableRect\"","TraversalOrder","\"TreeOrder\"","\"ReversedTreeOrder\"","useAutoScroller","scrollIntent","useScrollIntent","setAutoScrollInterval","clearAutoScrollInterval","scrollSpeed","scrollDirection","pointerCoordinates","draggingRect","scrollContainerRef","autoScroll","scrollLeft","scrollTop","sortedScrollableAncestors","order","canScroll","scrollableAncestorRects","interval","defaultScrollIntent","previousDelta","previousIntent","useCachedNode","draggableNode","draggableNodes","cachedNode","useCombineActivators","Sensor","sensorActivators","getSyntheticHandler","MeasuringStrategy","\"Always\"","\"BeforeDragging\"","\"WhileDragging\"","MeasuringFrequency","\"Optimized\"","useDroppableMeasuring","queue","setQueue","containersRef","containers","isDisabled","disabledRef","measureDroppableContainers","dragging","previousValue","frequency","useInitialValue","computeFn","useInitialRect","useMutationObserver","handleMutations","MutationObserver","useResizeObserver","ResizeObserver","defaultMeasure","useRect","setRect","measureRect","currentRect","fallbackRect","newRect","records","useRectDelta","defaultValue$1","useScrollableAncestors","previousNode","useScrollOffsets","scrollCoordinates","setScrollCoordinates","prevElements","scrollingElement","previousElements","scrollableElement","useScrollOffsetsDelta","initialScrollOffsets","hasScrollOffsets","useSensorSetup","teardownFns","teardown","useSyntheticListeners","useWindowRect","defaultValue$2","useRects","firstElement","windowRect","setRects","measureRects","getMeasurableNode","firstChild","useDragOverlayMeasuring","nodeRef","defaultSensors","defaultData","defaultMeasuringConfiguration","DroppableContainersMap","defaultPublicContext","defaultInternalContext","InternalContext","PublicContext","getInitialState","RestoreFocus","previousActivatorEvent","activatorEvent","previousActiveId","activatorNode","focusableNode","applyModifiers","useMeasuringConfiguration","useLayoutShiftScrollCompensation","initialized","initialRect","rectDelta","ActiveDraggableContext","Status","\"Uninitialized\"","\"Initializing\"","\"Initialized\"","DndContext","dispatchMonitorEvent","registerMonitorListener","setStatus","isInitialized","activeId","activeRects","activeRef","activeSensor","setActiveSensor","setActivatorEvent","latestProps","draggableDescribedById","enabledDroppableContainers","measuringConfiguration","measuring","translate","activationCoordinates","autoScrollOptions","getAutoScrollerOptions","initialActiveNodeRect","activeNodeRect","containerNodeRect","sensorContext","overNode","dragOverlay","draggingNode","draggingNodeRect","usesDragOverlay","nodeRectDelta","modifiedTranslate","scrollAdjustment","activeNodeScrollDelta","scrollAdjustedTranslate","collisionDetection","overId","setOver","activeSensorRef","instantiateSensor","sensorInstance","onDragAbort","onDragPending","onDragStart","createHandler","cancelDrop","activators","nativeEvent","activeDraggableNode","activationContext","onDragMove","overContainer","onDragOver","publicContext","measuringScheduled","internalContext","accessibility","activeSensorDisablesAutoscroll","autoScrollGloballyDisabled","NullContext","defaultRole","ID_PREFIX$1","useDraggable","attributes","setNodeRef","setActivatorNodeRef","roleDescription","ariaDescribedById","tabIndex","useDndContext","ID_PREFIX$1$1","defaultResizeObserverConfig","useDroppable","previous","resizeObserverConnected","callbackId","resizeObserverDisabled","resizeObserverTimeout","resizeObserverConfig","updateMeasurementsFor","previousElement","newElement","AnimationManager","clonedChildren","setClonedChildren","previousChildren","animation","defaultTransform","NullifiedContextProvider","baseStyles","defaultTransition$1","PositionedOverlay","scaleAdjustedTransform","transition","as","defaultDropAnimationConfiguration","initial","final","originalStyles","useDropAnimation","activeDraggable","measurableNode","createDefaultDropAnimation","finalTransform","animationKeyframes","keyframes","firstKeyframe","lastKeyframe","sideEffects","resolve","useKey","DragOverlay","dropAnimationConfig","modifiedTransform","dropAnimation","wrapperElement","arrayMove","newArray","getSortedRects","isValidIndex","itemsEqual","normalizeDisabled","rectSortingStrategy","newRects","overIndex","activeIndex","oldRect","ID_PREFIX","SortableContext","userDefinedItems","disabledProp","containerId","useDragOverlay","previousItemsRef","itemsHaveChanged","disableTransforms","defaultNewIndexGetter","defaultAnimateLayoutChanges","wasDragging","previousItems","newIndex","isSorting","previousContainerId","defaultTransition","transitionProperty","disabledTransition","defaultAttributes","useDerivedTransform","derivedTransform","setDerivedtransform","useSortable","userDefinedAttributes","localDisabled","customData","localStrategy","globalDisabled","globalStrategy","normalizeLocalDisabled","itemsAfterCurrentSortable","setDroppableNodeRef","setDraggableNodeRef","displaceItem","shouldDisplaceDragSource","sortedRects","getNewIndex","shouldAnimateLayoutChanges","animateLayoutChanges","getTransition","hasSortableData","directions","sortableKeyboardCoordinates","filteredContainers","closestId","activeDroppable","newDroppable","newNode","hasDifferentScrollAncestors","hasSameContainer","isSameContainer","isAfterActive","isAfter","rectCoordinates","SortableItem","keyExtractor","renderDragIndicator","DragOverlayItem","DragDropGrid","initialItems","setItems","setActiveId","handleDragStart","draggedItem","isItemDisabled","handleDragEnd","oldIndex","canDropAt","newItems","activeItem","renderToolbar","renderEmptyState","renderDragOverlay","showDebugInfo","badgeVariants","Badge","DefaultPageThumbnail","PageOrderDialog","resolvedTitle","resolvedDescription","description","localPages","setLocalPages","hasChanges","setHasChanges","localIds","handleLocalReorder","newOrder","handleSave","onReorder","handleCancel","renderThumbnail","renderPageThumbnail","showRemove","onRemove","handleRemove","draggedPosition","startEndIndex","endStartIndex","targetIndex","newOpen","PageCanvas","pageKey","renderComponent","componentPageNo","componentTotalPages","visibleFlowContext","flowPageIndex","flowChunksByFlowId","registerFlowMeasurement","flowMeasurementKey","measureFlowContext","flowMeasurementVersion","renderMode","measureFlow","measurementPageNo","measurementTotalPages","renderVisible","Select","__defProp$5","__name$5","SWITCH_NAME","createSwitchContext","createSwitchScope","SwitchProviderImpl","useSwitchContext","SwitchProvider","checkedProp","setChecked","defaultChecked","control","setControl","bubbleInput","setBubbleInput","hasConsumerStoppedPropagationRef","userInteractionCount","onUserInteraction","form","__scopeSwitch","isFunction$1","internal_do_not_use_render","TRIGGER_NAME","SwitchTrigger","switchProps","initialCheckedStateRef","associatedForm","required","getState","onClick","prevChecked","isFormControl","Switch$1","SwitchBubbleInput","THUMB_NAME","SwitchThumb","thumbProps","BUBBLE_INPUT_NAME$1","controlSize","shouldStopClickPropagationRef","prevCheckedRef","prevUserInteractionCountRef","inputProto","isUserInteraction","checkedChanged","bubbles","defaultCheckedRef","Switch","__defProp$4","__name$4","clamp","__defProp$3","__name$3","usePrevious","__defProp$2","__name$2","Orientation","Direction","PAGE_KEYS","ARROW_KEYS","BACK_KEYS","SLIDER_NAME","Collection","createSliderContext","createSliderScope","SliderProvider","useSliderContext","Slider$1","sliderProps","thumbRefs","valueIndexToChangeRef","isKeyboardInteractionRef","SliderOrientation","SliderHorizontal","SliderVertical","setValues","onValueChange","valuesBeforeSlideStartRef","initialValuesRef","handleSlideStart","updateValues","getClosestValueIndex","handleSlideMove","handleSlideEnd","onValueCommit","decimalCount","getDecimalCount","step","roundValue","minStepsDistance","minStepsBetweenThumbs","constrainedValue","preserveThumbOrder","prevValues","atIndex","nextValues","getNextSortedValues","hasMinStepsBetweenValues","hasChanged","commit","stepDirection","multiplier","getNextStepValue","SliderOrientationProvider","useSliderOrientationContext","slider","setSlider","rectRef","isDirectionLTR","isSlidingFromLeft","inverted","getValueFromPointer","linearScale","pointerPosition","SliderImpl","onSlideStart","onSlideMove","onSlideEnd","isBackKey","onStepKeyDown","sliderRef","isSlidingFromBottom","__scopeSlider","onHomeKeyDown","onEndKeyDown","TRACK_NAME","SliderTrack","trackProps","RANGE_NAME","SliderRange","rangeProps","valuesCount","percentages","convertValueToPercentage","offsetStart","offsetEnd","SliderThumbContextProvider","useSliderThumbContext","THUMB_PROVIDER_NAME","SliderThumbProvider","thumb","setThumb","resolvedName","percent","thumbContext","isFunction","THUMB_TRIGGER_NAME","SliderThumbTrigger","onThumbChange","getLabel","orientationSize","thumbInBoundsOffset","getThumbInBoundsOffset","SliderThumb","SliderBubbleInput","BUBBLE_INPUT_NAME","prevValue","totalValues","closestDistance","halfWidth","getStepsBetweenValues","minStepsBetweenValues","stepsBetweenValues","output","str","coefficient","exponent","decimalPart2","exponentNum","decimalPart","rounder","stepsFromMin","nearestSteps","isAligned","nextSteps","Slider","__defProp$1","Label$1","Label","getApplicablePageOptions","matchesTarget","pageOptions","targetItem","PageOptionsRenderer","applicableOptions","renderOption","opt","boolValue","numValue","stringValue","isSelected","colorLabel","PageOptionsDropdown","triggerClassName","PageNameDropdown","isEditing","setIsEditing","renameValue","setRenameValue","inputRef","commitRename","onRename","hasActions","canMoveUp","canMoveDown","canAddPage","canDuplicate","canDelete","canRename","onMoveUp","onMoveDown","onAddPage","onDuplicate","onDelete","omitBinding","pageFormat","isCoverSpreadCandidate","pageFilter","resolveCoverSpreadLayout","plain","geometry","plan","usePageGroups","addDialogOpen","setAddDialogOpen","prevInitialItemsRef","templateDataContext","updateItems","onStateChange","onItemsChange","instanceCountsByTemplate","counts","pageTemplateId","availableItemsToAdd","isRepeatable","maxInstances","groupItem","totalPageCount","addItem","resolveIntegrationMode","draft","available","groupConfig","integrationData","resolveNewItem","integrationMode","shouldAbort","requestIntegration","finalItem","itemPosition","itemToInsert","startItems","middleItems","endItems","pos","anchorIdx","insertPosition","removeItem","showError","notifyError","itemId","updateItemFields","patch","reorderItems","itemsWithPageNum","itemsWithNumbers","renderItems","rendered","renderPage","itemsForReorder","handleReorder","itemsToOrder","usePageItemActions","topItem","topId","topMiddleIndex","isMiddle","clone","anchorId","setPendingInsertPosition","openAddDialog","createVirtualFlowPages","nextPageNum","logicalPages","flowLayout","flowLayoutsByPageKey","flowChunkSets","virtualPageCount","virtualPageIndex","useFlowLayouts","flowLayoutState","setFlowLayoutState","layoutKey","currentFlowPageKeySignature","currentFlowPageKeys","activeFlowLayoutsByPageKey","activeLayouts","registerMeasurement","sourceLayouts","currentLayouts","prunedStaleLayouts","currentLayout","currentSignature","allVirtualPages","virtualTotalPageCount","buildPath","subPath","resolveGalleryPath$1","buildPageDataBinding","integrationBinding","pageBase","groupBase","asPage","templateConfig","templateLookup","repeatable","component","isInitial","asGroup","pageConfig","pagesConfig","normalizeGroups","groups","buildPageGroupsConfig","explicitPageComponents","normalizedGroups","groupMap","inferredPageComponentKeys","pageComponentKeys","mergedPageComponents","maybeGroup","availableGroupItems","__defProp","__name","createAlertDialogContext","createAlertDialogScope","useDialogScope","AlertDialog$1","alertDialogProps","dialogScope","__scopeAlertDialog","AlertDialogPortal$1","AlertDialogOverlay$1","AlertDialogContentProvider","useAlertDialogContentContext","AlertDialogContent$1","cancelRef","AlertDialogTitle$1","AlertDialogDescription$1","AlertDialogAction$1","actionProps","CANCEL_NAME","AlertDialogCancel$1","cancelProps","AlertDialog","AlertDialogPortal","AlertDialogOverlay","AlertDialogContent","AlertDialogHeader","AlertDialogFooter","AlertDialogTitle","AlertDialogDescription","AlertDialogAction","AlertDialogCancel","EDIT_VALUE","PRINT_VALUE","OptionRow","keepOpen","SubTriggerRow","DevPrintControls","selectedModeProp","modeKeys","modes","printOptions","selectedPrint","selectedPrintLabel","handlePrintSelect","onInteractiveChange","onModeChange","hasBrandKits","brandKits","activeKitName","activeBrandKitId","handleAddPublished","onAddBrandKit","onSelectBrandKit","hasReferenceRenderer","referenceOpacity","onReferenceOpacityChange","DEFAULT_PAGE_FORMAT","getPageFlowKey","ItemAddedDialog","onAddAnother","onDone","warnedCoverSpread","PageEditorInner","SpineComponent","devFilter","setDevFilter","devPageFormat","setDevPageFormat","devSelectedMode","setDevSelectedMode","devModeTick","setDevModeTick","devReferenceOpacity","setDevReferenceOpacity","effectiveFilter","effectivePageFormat","effectivePayload","orderDialogOpen","setOrderDialogOpen","coverSpreadCandidate","requestedPreview","pageSetup","plainSetup","resolvedPageOptions","lastAddedItem","setLastAddedItem","pendingInsertPosition","lastInsertedId","setLastInsertedId","highlightTimerRef","itemPages","flowLayoutKey","logicalTotalPageCount","handleFlowMeasurement","renderedVirtualPageIds","renderedVirtualPages","coverSpread","coverPlan","spreadSetup","warning","measurementOnlyPages","buildItemActionHandlers","handleAddItem","getMostVisiblePage","pageEls","viewportCenter","closest","closestDist","dist","handleOpenAddDialogFromToolbar","handlePageOptionChange","pageOption","defaultOverlay","info","buildOverlay","renderPageContent","referenceRenderer","effectiveReference","dataBinding","panelClassName","renderCoverSheet","pageGeometry","spreadFor","renderPageControls","isGroupPage","isFirstPageInGroup","displayName","actionHandlers","pagePairs","pairs","leftPage","rightPage","isEven","defaultMenu","printConfigs","newInteractive","lastPage","firstAnchorId","lastAnchorId","leftTopId","rightTopId","isLeftHighlighted","isRightHighlighted","getPageHandlers","isHighlighted","reorderTitle","reorderDescription","PageEditorView","PageEditor","resolvedConfig","spineComponent","noticeState","setNoticeState","restoredState","restoredItems","rawGroups","groupDefs","groupDefMap","applyPageTemplateMetadata","rehydrated","groupDef","baseItem","baseGroupItem","newKeys","initialItemIds","rehydratedInitialItems","rehydratedInitialCount","freshInitialCount","addedItems","combined","evaluatePathString","getNestedValue","resolveWithConfig","resolver","resolveWithFunction","resolveIntegrationData","resolveGalleryPath","configGalleryPath","buildDialogConfig","integrationPath","isAssistant","fullPath","resolvedGalleryPath","galleryPath","useIntegrationAdapter","resolvedData","originalOnClick","Static","EditorShell"],"sources":["../src/uhuu/pagination-static/pagination/CompatibilityUtils.ts","../src/uhuu/pagination-static/pagination/DocumentUtils.ts","../src/uhuu/pagination-static/spread-core.js","../src/uhuu/utility/PageSizeUtils.js","../src/uhuu/config/config-provider.tsx","../src/uhuu/pagination-static/pagination-static.tsx","../src/uhuu/pagination-static/sheet-static.tsx","../src/uhuu/utility/is-dev.ts","../src/uhuu/pagination-static/flow-core.js","../src/uhuu/pagination-static/flow-measure.ts","../src/uhuu/pagination-static/flow-static.tsx","../src/uhuu/editable/dialog-props.js","../src/uhuu/editable/empty-content.ts","../src/uhuu/editable/editable.tsx","../src/uhuu/pagination-static/flow-id.js","../src/uhuu/pagination-static/html-flow.js","../src/uhuu/pagination-static/flow-document.tsx","../src/uhuu/pagination-static/markdown-flow.js","../src/uhuu/pagination-static/cover-spread.tsx","../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../node_modules/.pnpm/tailwind-merge@3.7.0/node_modules/tailwind-merge/dist/bundle-mjs.mjs","../src/uhuu/ui/cn.ts","../src/uhuu/image/use-image-load-failure.ts","../src/uhuu/image/image-anchor-geometry.ts","../src/uhuu/image/image-bleed.tsx","../node_modules/.pnpm/lucide-react@0.555.0_react@19.3.0/node_modules/lucide-react/dist/esm/shared/src/utils.js","../node_modules/.pnpm/lucide-react@0.555.0_react@19.3.0/node_modules/lucide-react/dist/esm/defaultAttributes.js","../node_modules/.pnpm/lucide-react@0.555.0_react@19.3.0/node_modules/lucide-react/dist/esm/Icon.js","../node_modules/.pnpm/lucide-react@0.555.0_react@19.3.0/node_modules/lucide-react/dist/esm/createLucideIcon.js","../node_modules/.pnpm/lucide-react@0.555.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/arrow-down.js","../node_modules/.pnpm/lucide-react@0.555.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/arrow-up-down.js","../node_modules/.pnpm/lucide-react@0.555.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/arrow-up.js","../node_modules/.pnpm/lucide-react@0.555.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/book-dashed.js","../node_modules/.pnpm/lucide-react@0.555.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/check.js","../node_modules/.pnpm/lucide-react@0.555.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/chevron-down.js","../node_modules/.pnpm/lucide-react@0.555.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/chevron-right.js","../node_modules/.pnpm/lucide-react@0.555.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/clipboard-list.js","../node_modules/.pnpm/lucide-react@0.555.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/copy.js","../node_modules/.pnpm/lucide-react@0.555.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/ellipsis.js","../node_modules/.pnpm/lucide-react@0.555.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/grip-vertical.js","../node_modules/.pnpm/lucide-react@0.555.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/lock.js","../node_modules/.pnpm/lucide-react@0.555.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/maximize.js","../node_modules/.pnpm/lucide-react@0.555.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/minus.js","../node_modules/.pnpm/lucide-react@0.555.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/pencil.js","../node_modules/.pnpm/lucide-react@0.555.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/plus.js","../node_modules/.pnpm/lucide-react@0.555.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/search.js","../node_modules/.pnpm/lucide-react@0.555.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/trash-2.js","../node_modules/.pnpm/lucide-react@0.555.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/unfold-horizontal.js","../node_modules/.pnpm/lucide-react@0.555.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/unfold-vertical.js","../node_modules/.pnpm/lucide-react@0.555.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/x.js","../node_modules/.pnpm/lucide-react@0.555.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/zoom-in.js","../node_modules/.pnpm/lucide-react@0.555.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/zoom-out.js","../src/uhuu/editor-shell/portal-root.tsx","../src/uhuu/i18n/locales/en.json","../src/uhuu/i18n/locales/de.json","../src/uhuu/i18n/locales/fr.json","../src/uhuu/i18n/locales/it.json","../src/uhuu/i18n/i18n-core.js","../src/uhuu/i18n/locale-context.tsx","../src/uhuu/editor-shell/interactive-mode-context.tsx","../node_modules/.pnpm/class-variance-authority@0.7.1/node_modules/class-variance-authority/dist/index.mjs","../src/uhuu/ui/button.tsx","../node_modules/.pnpm/@radix-ui+primitive@1.1.7/node_modules/@radix-ui/primitive/dist/index.mjs","../node_modules/.pnpm/@radix-ui+react-compose-refs@1.1.5_@types+react@19.3.0_react@19.3.0/node_modules/@radix-ui/react-compose-refs/dist/index.mjs","../node_modules/.pnpm/@radix-ui+react-context@1.2.2_@types+react@19.3.0_react@19.3.0/node_modules/@radix-ui/react-context/dist/index.mjs","../node_modules/.pnpm/@radix-ui+react-use-layout-effect@1.1.4_@types+react@19.3.0_react@19.3.0/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs","../node_modules/.pnpm/@radix-ui+react-use-effect-event@0.0.5_@types+react@19.3.0_react@19.3.0/node_modules/@radix-ui/react-use-effect-event/dist/index.mjs","../node_modules/.pnpm/@radix-ui+react-use-controllable-state@1.2.6_@types+react@19.3.0_react@19.3.0/node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs","../node_modules/.pnpm/@radix-ui+react-slot@1.4.0_@types+react@19.3.0_react@19.3.0/node_modules/@radix-ui/react-slot/dist/index.mjs","../node_modules/.pnpm/@radix-ui+react-primitive@2.1.11_@types+react-dom@19.3.0_@types+react@19.3.0__@types+re_2d61650df3f0a7a7bdba633a6dcc8d9a/node_modules/@radix-ui/react-primitive/dist/index.mjs","../node_modules/.pnpm/@radix-ui+react-collection@1.1.16_@types+react-dom@19.3.0_@types+react@19.3.0__@types+r_b1d6247ab86485bab1740806d97e8d38/node_modules/@radix-ui/react-collection/dist/index.mjs","../node_modules/.pnpm/@radix-ui+react-direction@1.1.5_@types+react@19.3.0_react@19.3.0/node_modules/@radix-ui/react-direction/dist/index.mjs","../node_modules/.pnpm/@radix-ui+react-use-callback-ref@1.1.4_@types+react@19.3.0_react@19.3.0/node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs","../node_modules/.pnpm/@radix-ui+react-dismissable-layer@1.1.20_@types+react-dom@19.3.0_@types+react@19.3.0__@_4e89f70e986c5a91a92277a59b4de3bd/node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs","../node_modules/.pnpm/@radix-ui+react-focus-guards@1.1.6_@types+react@19.3.0_react@19.3.0/node_modules/@radix-ui/react-focus-guards/dist/index.mjs","../node_modules/.pnpm/@radix-ui+react-focus-scope@1.2.0_@types+react-dom@19.3.0_@types+react@19.3.0__@types+r_17bb03d71df6075c07bd134f364dcf6d/node_modules/@radix-ui/react-focus-scope/dist/index.mjs","../node_modules/.pnpm/@radix-ui+react-id@1.1.4_@types+react@19.3.0_react@19.3.0/node_modules/@radix-ui/react-id/dist/index.mjs","../node_modules/.pnpm/@floating-ui+utils@0.2.12/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../node_modules/.pnpm/@floating-ui+core@1.8.0/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../node_modules/.pnpm/@floating-ui+utils@0.2.12/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../node_modules/.pnpm/@floating-ui+dom@1.8.0/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../node_modules/.pnpm/@floating-ui+react-dom@2.1.9_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs","../node_modules/.pnpm/@radix-ui+react-use-size@1.1.5_@types+react@19.3.0_react@19.3.0/node_modules/@radix-ui/react-use-size/dist/index.mjs","../node_modules/.pnpm/@radix-ui+react-popper@1.3.8_@types+react-dom@19.3.0_@types+react@19.3.0__@types+react@_04b331dcddb9198baac431c3d7633ae9/node_modules/@radix-ui/react-popper/dist/index.mjs","../node_modules/.pnpm/@radix-ui+react-portal@1.1.18_@types+react-dom@19.3.0_@types+react@19.3.0__@types+react_8071c404ead3ecd57efdf7c5517d13a4/node_modules/@radix-ui/react-portal/dist/index.mjs","../node_modules/.pnpm/@radix-ui+react-presence@1.1.11_@types+react-dom@19.3.0_@types+react@19.3.0__@types+rea_fea964e47d1f796c036ae060b7c5470f/node_modules/@radix-ui/react-presence/dist/index.mjs","../node_modules/.pnpm/@radix-ui+react-use-is-hydrated@0.1.3_@types+react@19.3.0_react@19.3.0/node_modules/@radix-ui/react-use-is-hydrated/dist/index.mjs","../node_modules/.pnpm/@radix-ui+react-roving-focus@1.1.20_@types+react-dom@19.3.0_@types+react@19.3.0__@types_4a1e3c631f31675fbe9dd912b1e92891/node_modules/@radix-ui/react-roving-focus/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.3.0_react@19.3.0/node_modules/react-remove-scroll-bar/dist/es2015/constants.js","../node_modules/.pnpm/use-callback-ref@1.3.3_@types+react@19.3.0_react@19.3.0/node_modules/use-callback-ref/dist/es2015/assignRef.js","../node_modules/.pnpm/use-callback-ref@1.3.3_@types+react@19.3.0_react@19.3.0/node_modules/use-callback-ref/dist/es2015/useRef.js","../node_modules/.pnpm/use-callback-ref@1.3.3_@types+react@19.3.0_react@19.3.0/node_modules/use-callback-ref/dist/es2015/useMergeRef.js","../node_modules/.pnpm/use-sidecar@1.1.3_@types+react@19.3.0_react@19.3.0/node_modules/use-sidecar/dist/es2015/medium.js","../node_modules/.pnpm/use-sidecar@1.1.3_@types+react@19.3.0_react@19.3.0/node_modules/use-sidecar/dist/es2015/exports.js","../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@19.3.0_react@19.3.0/node_modules/react-remove-scroll/dist/es2015/medium.js","../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@19.3.0_react@19.3.0/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.3.0_react@19.3.0/node_modules/react-style-singleton/dist/es2015/singleton.js","../node_modules/.pnpm/react-style-singleton@2.2.3_@types+react@19.3.0_react@19.3.0/node_modules/react-style-singleton/dist/es2015/hook.js","../node_modules/.pnpm/react-style-singleton@2.2.3_@types+react@19.3.0_react@19.3.0/node_modules/react-style-singleton/dist/es2015/component.js","../node_modules/.pnpm/react-remove-scroll-bar@2.3.8_@types+react@19.3.0_react@19.3.0/node_modules/react-remove-scroll-bar/dist/es2015/utils.js","../node_modules/.pnpm/react-remove-scroll-bar@2.3.8_@types+react@19.3.0_react@19.3.0/node_modules/react-remove-scroll-bar/dist/es2015/component.js","../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@19.3.0_react@19.3.0/node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js","../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@19.3.0_react@19.3.0/node_modules/react-remove-scroll/dist/es2015/handleScroll.js","../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@19.3.0_react@19.3.0/node_modules/react-remove-scroll/dist/es2015/SideEffect.js","../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@19.3.0_react@19.3.0/node_modules/react-remove-scroll/dist/es2015/sidecar.js","../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@19.3.0_react@19.3.0/node_modules/react-remove-scroll/dist/es2015/Combination.js","../node_modules/.pnpm/@radix-ui+react-menu@2.1.25_@types+react-dom@19.3.0_@types+react@19.3.0__@types+react@1_3ae13a8b8abaffcff00d77dee41e2df0/node_modules/@radix-ui/react-menu/dist/index.mjs","../node_modules/.pnpm/@radix-ui+react-dropdown-menu@2.1.25_@types+react-dom@19.3.0_@types+react@19.3.0__@type_629a5a4a562bce11ef9cf18d771c29ae/node_modules/@radix-ui/react-dropdown-menu/dist/index.mjs","../src/uhuu/ui/dropdown-menu.tsx","../src/uhuu/image/image-overlay-utils.tsx","../src/uhuu/image/image-bleed-with-overlay.tsx","../src/uhuu/image/image-spread.tsx","../src/uhuu/image/image-spread-with-overlay.tsx","../src/uhuu/image/image-with-options.tsx","../src/uhuu/image/image-block.tsx","../src/uhuu/utility/json.js","../src/uhuu/image/image-url.js","../src/uhuu/brand-kit/brand-kit-css-vars.js","../src/uhuu/brand-kit/brand-kit-assets.js","../src/uhuu/brand-kit/brand-kit-fonts.js","../src/uhuu/brand-kit/brand-kit-provider.tsx","../src/uhuu/editor-shell/document/page-group-utils.ts","../src/uhuu/editor-shell/document/integration-utils.ts","../src/uhuu/editor-shell/document/template-data-provider.tsx","../src/uhuu/editor-shell/resizers/zoom-fit-core.js","../src/uhuu/editor-shell/resizers/zoom-focal-core.js","../src/uhuu/editor-shell/resizers/section-page-resizer.tsx","../node_modules/.pnpm/@radix-ui+react-dialog@1.2.0_@types+react-dom@19.3.0_@types+react@19.3.0__@types+react@_c1edb718822a6de77ff35d62c5110ee0/node_modules/@radix-ui/react-dialog/dist/index.mjs","../src/uhuu/ui/sheet.tsx","../src/uhuu/editor-shell/document/default-render-thumbnail.tsx","../src/uhuu/editor-shell/document/add-page-dialog.tsx","../node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.3.0/node_modules/@dnd-kit/utilities/dist/utilities.esm.js","../node_modules/.pnpm/@dnd-kit+accessibility@3.1.1_react@19.3.0/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js","../node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@dnd-kit/core/dist/core.esm.js","../node_modules/.pnpm/@dnd-kit+sortable@10.0.0_@dnd-kit+core@6.3.1_react-dom@19.3.0_react@19.3.0__react@19.3.0__react@19.3.0/node_modules/@dnd-kit/sortable/dist/sortable.esm.js","../src/uhuu/utility/drag-drop-grid.tsx","../src/uhuu/ui/badge.tsx","../src/uhuu/editor-shell/document/page-order-dialog.tsx","../src/uhuu/editor-shell/document/page-canvas.tsx","../src/uhuu/ui/select.tsx","../node_modules/.pnpm/@radix-ui+react-switch@1.3.8_@types+react-dom@19.3.0_@types+react@19.3.0__@types+react@_9e907e973c095d314448b5bf7a7b557b/node_modules/@radix-ui/react-switch/dist/index.mjs","../src/uhuu/ui/switch.tsx","../node_modules/.pnpm/@radix-ui+number@1.1.3/node_modules/@radix-ui/number/dist/index.mjs","../node_modules/.pnpm/@radix-ui+react-use-previous@1.1.4_@types+react@19.3.0_react@19.3.0/node_modules/@radix-ui/react-use-previous/dist/index.mjs","../node_modules/.pnpm/@radix-ui+react-slider@1.5.0_@types+react-dom@19.3.0_@types+react@19.3.0__@types+react@_764b979897bd8e11b24e0a133366e2c3/node_modules/@radix-ui/react-slider/dist/index.mjs","../src/uhuu/ui/slider.tsx","../node_modules/.pnpm/@radix-ui+react-label@2.1.16_@types+react-dom@19.3.0_@types+react@19.3.0__@types+react@_a0d6e2f71ba73dadad94263bc45ff639/node_modules/@radix-ui/react-label/dist/index.mjs","../src/uhuu/ui/label.tsx","../src/uhuu/editor-shell/document/page-options-renderer.tsx","../src/uhuu/editor-shell/document/page-options-dropdown.tsx","../src/uhuu/editor-shell/document/page-name-dropdown.tsx","../src/uhuu/editor-shell/document/cover-spread-layout.js","../src/uhuu/editor-shell/document/use-page-groups.ts","../src/uhuu/editor-shell/document/use-page-item-actions.ts","../src/uhuu/editor-shell/document/flow-layout-core.js","../src/uhuu/editor-shell/document/use-flow-layouts.ts","../src/uhuu/editor-shell/document/data-binding.ts","../src/uhuu/editor-shell/document/page-group-presets.ts","../node_modules/.pnpm/@radix-ui+react-alert-dialog@1.1.24_@types+react-dom@19.3.0_@types+react@19.3.0__@types_385e64d53e5a1e103e54811f100b6423/node_modules/@radix-ui/react-alert-dialog/dist/index.mjs","../src/uhuu/ui/alert-dialog.tsx","../src/uhuu/editor-shell/document/dev-print-controls.tsx","../src/uhuu/editor-shell/document/page-editor.tsx","../src/uhuu/editor-shell/document/integration-adapter.ts","../src/index.js"],"sourcesContent":["class Compatibility {\n\n static handlePageBreakStyles() {\n document?.querySelectorAll(\".page-break-after[data-paged-css]\").forEach((el) => {\n const pagedSheet = el.closest('div.uhuu-page-sheet');\n const pagedCSS = el.getAttribute('data-paged-css');\n \n if (pagedSheet && pagedCSS) {\n const cssClasses = pagedCSS.split(' ').filter(Boolean);\n cssClasses.forEach((cssClass) => pagedSheet.classList.add(cssClass));\n }\n });\n }\n \n static handleUhuuDialogs() {\n if (typeof window !== 'undefined' && (window as any).$uhuu_renderer) return;\n\n const clickListener = function(this: HTMLElement) {\n const value = JSON.parse(this.getAttribute(\"data-uhuu\") || '{}');\n (window as any).$uhuu?.editDialog?.(value);\n };\n \n document?.querySelectorAll(\"[data-uhuu]\").forEach((el) => {\n el.removeEventListener('click', clickListener);\n el.addEventListener('click', clickListener);\n });\n }\n\n static handle() {\n Compatibility.handlePageBreakStyles();\n Compatibility.handleUhuuDialogs();\n }\n}\n\nexport default Compatibility;\n","class DocumentUtils {\n static setupPageStyles(printCssUrl?: string) {\n if (!printCssUrl || typeof document === 'undefined') return;\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = printCssUrl;\n document.head.appendChild(link);\n return link;\n }\n\n static removePageStyles(link: HTMLLinkElement) {\n if (link && typeof document !== 'undefined') document?.head.removeChild(link);\n }\n \n}\n\nexport default DocumentUtils;","/**\n * Cover spread geometry for perfect-bound products.\n *\n * Pure, DOM-free planning for the two wide cover sheets a printer expects when a\n * book has a spine: the OUTER sheet (back cover · spine · front cover) and the\n * INNER sheet (inside front · blank spine + glue zones · inside back). The DOM\n * layer (`Static.CoverSpread`, `PageEditor`) and `PageSizeUtils` only consume the\n * numbers produced here, so the printer-facing contract can be unit-tested with\n * `node --test` against approved PDF sizes.\n *\n * All values are millimetres. See docs/printer-cover-spine-support.md.\n *\n * @typedef {'perfect' | 'saddle'} BindingType\n *\n * @typedef {Object} BindingConfig\n * @property {BindingType} [type] Defaults to 'perfect' when spine > 0.\n * @property {number} spine Spine width. The printer supplies this number.\n * @property {number} [glue] Ink-free margin on each side of the spine, inner sheet only.\n *\n * @typedef {Object} ResolvedBinding\n * @property {'perfect'} type\n * @property {number} spine\n * @property {number} glue\n *\n * @typedef {Object} Box\n * @property {number} x\n * @property {number} y\n * @property {number} width\n * @property {number} height\n *\n * @typedef {'outer' | 'inner'} CoverSheetKind\n * @typedef {'left' | 'right'} PanelSide\n */\n\nconst MAX_BLEED = 400;\n\nfunction toFiniteNumber(value) {\n const numeric = typeof value === 'string' && value.trim() !== '' ? Number(value) : value;\n return typeof numeric === 'number' && Number.isFinite(numeric) ? numeric : null;\n}\n\n/** Trim floating point noise (e.g. 104.8 + 15) so CSS values stay readable. */\nfunction round(value) {\n return Math.round(value * 10000) / 10000;\n}\n\n/**\n * Normalise a `binding` declaration. Returns `null` whenever no spread should be\n * composed: binding absent, `type: 'saddle'`, or a non-positive spine.\n *\n * @param {BindingConfig | null | undefined} binding\n * @returns {ResolvedBinding | null}\n */\nexport function resolveBinding(binding) {\n if (!binding || typeof binding !== 'object') return null;\n if (binding.type === 'saddle') return null;\n\n const spine = toFiniteNumber(binding.spine);\n if (spine === null || spine <= 0) return null;\n\n const glue = toFiniteNumber(binding.glue);\n\n return {\n type: 'perfect',\n spine: round(spine),\n glue: glue === null || glue < 0 ? 0 : round(glue),\n };\n}\n\n/**\n * Normalise the page geometry shared by every planner below.\n *\n * @param {{ width?: number, height?: number, bleed?: number }} input\n * @returns {{ width: number, height: number, bleed: number } | null}\n */\nfunction resolvePage(input = {}) {\n const width = toFiniteNumber(input.width);\n const height = toFiniteNumber(input.height);\n if (width === null || height === null || width <= 0 || height <= 0) return null;\n\n const bleed = toFiniteNumber(input.bleed);\n return {\n width: round(width),\n height: round(height),\n bleed: bleed === null ? 0 : round(Math.min(Math.max(bleed, 0), MAX_BLEED)),\n };\n}\n\n/**\n * The physical sheet the PDF page must have, with bleed included.\n *\n * Without an active binding this is the ordinary single page (`W + 2B × H + 2B`),\n * so `PageSizeUtils` can call it unconditionally to fill `--uhuu-sheet-*`.\n * With a spine it is the wide cover sheet: `2W + S + 2B × H + 2B`.\n *\n * @param {{ width?: number, height?: number, bleed?: number, binding?: BindingConfig | null }} input\n * @returns {{ width: number, height: number, trimWidth: number, trimHeight: number, spread: boolean } | null}\n */\nexport function resolveSheetSize(input = {}) {\n const page = resolvePage(input);\n if (!page) return null;\n\n const binding = resolveBinding(input.binding);\n const trimWidth = binding ? page.width * 2 + binding.spine : page.width;\n const trimHeight = page.height;\n\n return {\n trimWidth: round(trimWidth),\n trimHeight: round(trimHeight),\n width: round(trimWidth + page.bleed * 2),\n height: round(trimHeight + page.bleed * 2),\n spread: !!binding,\n };\n}\n\n/**\n * Cover pages come out of the `cover` page filter in document order:\n * `[p1, p2, p(n-1), p(n)]` for `coverPageCount: 2` or `[p1, p(n)]` for\n * `coverPageCount: 1`. Map them onto sheets, printer reading order:\n *\n * outer: left = back cover (last), right = front cover (first)\n * inner: left = inside front (second), right = inside back (second to last)\n *\n * @template TPage\n * @param {TPage[]} coverPages\n * @returns {Array<{ sheet: CoverSheetKind, left: TPage, right: TPage }> | null}\n */\nexport function assignCoverPages(coverPages) {\n if (!Array.isArray(coverPages)) return null;\n\n if (coverPages.length === 2) {\n return [{ sheet: 'outer', left: coverPages[1], right: coverPages[0] }];\n }\n\n if (coverPages.length === 4) {\n return [\n { sheet: 'outer', left: coverPages[3], right: coverPages[0] },\n { sheet: 'inner', left: coverPages[1], right: coverPages[2] },\n ];\n }\n\n return null;\n}\n\n/**\n * Plan the cover sheets for a perfect-bound product.\n *\n * Returns `null` when no spread applies (no binding / saddle stitch / bad page\n * size / unsupported cover page count) so callers fall back to plain cover pages.\n *\n * Coordinates are relative to the top-left of the sheet INCLUDING bleed.\n *\n * @template TPage\n * @param {{\n * width?: number,\n * height?: number,\n * bleed?: number,\n * binding?: BindingConfig | null,\n * coverPages?: TPage[],\n * }} input\n * @returns {{\n * binding: ResolvedBinding,\n * page: { width: number, height: number, bleed: number },\n * sheet: { width: number, height: number, trimWidth: number, trimHeight: number },\n * sheets: Array<{\n * sheet: CoverSheetKind,\n * index: number,\n * panels: Array<{ side: PanelSide, page: TPage, trim: Box, bleedBox: Box }>,\n * spine: Box & { blank: boolean },\n * glueZones: Array<Box & { side: PanelSide }>,\n * }>,\n * } | null}\n */\nexport function planCoverSpread(input = {}) {\n const page = resolvePage(input);\n const binding = resolveBinding(input.binding);\n const assignment = assignCoverPages(input.coverPages);\n if (!page || !binding || !assignment) return null;\n\n const { width: W, height: H, bleed: B } = page;\n const { spine: S, glue: G } = binding;\n const sheetHeight = round(H + B * 2);\n const sheetTrimWidth = round(W * 2 + S);\n const sheetWidth = round(sheetTrimWidth + B * 2);\n\n const spineX = round(B + W);\n const rightTrimX = round(B + W + S);\n\n const leftPanel = (pageRef) => ({\n side: 'left',\n page: pageRef,\n trim: { x: B, y: B, width: W, height: H },\n // Outer bleed on top/left/bottom only; the panel is cut at the spine.\n bleedBox: { x: 0, y: 0, width: round(B + W), height: sheetHeight },\n });\n\n const rightPanel = (pageRef) => ({\n side: 'right',\n page: pageRef,\n trim: { x: rightTrimX, y: B, width: W, height: H },\n bleedBox: { x: rightTrimX, y: 0, width: round(W + B), height: sheetHeight },\n });\n\n const sheets = assignment.map((entry, index) => {\n const inner = entry.sheet === 'inner';\n const glueZones = inner && G > 0\n ? [\n { side: 'left', x: round(spineX - G), y: 0, width: G, height: sheetHeight },\n { side: 'right', x: rightTrimX, y: 0, width: G, height: sheetHeight },\n ]\n : [];\n\n return {\n sheet: entry.sheet,\n index,\n panels: [leftPanel(entry.left), rightPanel(entry.right)],\n spine: { x: spineX, y: 0, width: S, height: sheetHeight, blank: inner },\n glueZones,\n };\n });\n\n return {\n binding,\n page,\n sheet: { width: sheetWidth, height: sheetHeight, trimWidth: sheetTrimWidth, trimHeight: H },\n sheets,\n };\n}\n\n/**\n * CSS custom properties for the root element. Always returns the four sheet\n * variables so a previous spread never leaks into a plain render.\n *\n * @param {{ width?: number, height?: number, bleed?: number, binding?: BindingConfig | null }} input\n * @returns {Record<'--uhuu-sheet-width' | '--uhuu-sheet-height' | '--uhuu-spine-width' | '--uhuu-glue-width', string> | null}\n */\nexport function coverSpreadCssVars(input = {}) {\n const sheet = resolveSheetSize(input);\n if (!sheet) return null;\n\n const binding = resolveBinding(input.binding);\n return {\n '--uhuu-sheet-width': `${sheet.width}mm`,\n '--uhuu-sheet-height': `${sheet.height}mm`,\n '--uhuu-spine-width': `${binding ? binding.spine : 0}mm`,\n '--uhuu-glue-width': `${binding ? binding.glue : 0}mm`,\n };\n}\n\n/**\n * Developer-facing sanity checks. Returns human readable warnings; an empty\n * array means the configuration is printable as declared.\n *\n * @param {{\n * width?: number,\n * height?: number,\n * bleed?: number,\n * binding?: BindingConfig | null,\n * coverPageCount?: number,\n * coverPages?: unknown[],\n * preview?: string,\n * flowCoverPages?: number,\n * }} input\n * @returns {string[]}\n */\nexport function getCoverSpreadWarnings(input = {}) {\n const binding = resolveBinding(input.binding);\n if (!binding) return [];\n\n const warnings = [];\n const page = resolvePage(input);\n const coverPageCount = toFiniteNumber(input.coverPageCount);\n\n if (!page) {\n warnings.push('binding.spine is set but the page format has no valid width/height; cover spread skipped.');\n }\n\n if (coverPageCount !== null && coverPageCount !== 1 && coverPageCount !== 2) {\n warnings.push(\n `binding.spine is set but pageFilter.coverPageCount is ${coverPageCount}; a cover spread needs 1 (outer sheet only) or 2 (outer + inner). Rendering plain cover pages.`\n );\n }\n\n if (Array.isArray(input.coverPages) && !assignCoverPages(input.coverPages)) {\n warnings.push(\n `binding.spine is set but the cover filter produced ${input.coverPages.length} page(s); a cover spread needs 2 or 4. Rendering plain cover pages.`\n );\n }\n\n if (page && binding.glue > 0 && binding.glue >= page.width / 2) {\n warnings.push(\n `binding.glue (${binding.glue}mm) is at least half the page width (${page.width}mm); the glue mask would hide most of the inside covers.`\n );\n }\n\n if (page && page.bleed > 0 && binding.spine < page.bleed) {\n warnings.push(\n `binding.spine (${binding.spine}mm) is narrower than the bleed (${page.bleed}mm); panels are cut at the spine, so artwork will not run across it unless the spine component paints it.`\n );\n }\n\n if (input.preview === 'two_pages') {\n warnings.push('preview \"two_pages\" is ignored while a cover spread is active; each sheet is already a spread.');\n }\n\n if (toFiniteNumber(input.flowCoverPages) > 0) {\n warnings.push('a cover page has hasFlow: true; only its first chunk is placed on the cover sheet.');\n }\n\n return warnings;\n}\n","import { coverSpreadCssVars, resolveBinding, resolveSheetSize } from '../pagination-static/spread-core.js';\n\n/**\n * Standard page size calculations in millimeters\n */\nexport class PageSizeUtils {\n static PAGE_SIZES = {\n // A series\n 'A0': { width: 841, height: 1189 },\n 'A1': { width: 594, height: 841 },\n 'A2': { width: 420, height: 594 },\n 'A3': { width: 297, height: 420 },\n 'A4': { width: 210, height: 297 },\n 'A5': { width: 148, height: 210 },\n 'A6': { width: 105, height: 148 },\n \n // B series\n 'B0': { width: 1000, height: 1414 },\n 'B1': { width: 707, height: 1000 },\n 'B2': { width: 500, height: 707 },\n 'B3': { width: 353, height: 500 },\n 'B4': { width: 250, height: 353 },\n 'B5': { width: 176, height: 250 },\n 'B6': { width: 125, height: 176 },\n \n // C series (envelopes)\n 'C0': { width: 917, height: 1297 },\n 'C1': { width: 648, height: 917 },\n 'C2': { width: 458, height: 648 },\n 'C3': { width: 324, height: 458 },\n 'C4': { width: 229, height: 324 },\n 'C5': { width: 162, height: 229 },\n 'C6': { width: 114, height: 162 },\n \n // US Sizes\n 'LETTER': { width: 216, height: 279 },\n 'LEGAL': { width: 216, height: 356 },\n 'TABLOID': { width: 279, height: 432 },\n 'LEDGER': { width: 432, height: 279 }\n };\n /**\n * Get all available page size format names\n * @returns {string[]} Array of page size format names\n */\n static getStandardFormats() {\n return ['Custom', 'A3', 'A4', 'A5', 'LETTER', 'LEGAL'];\n }\n\n /**\n * Get dimensions for a specific page size\n * @param {Object} options - Configuration options\n * @param {string} options.format - Page size format (e.g., 'A4', 'LETTER')\n * @param {string} [options.orientation='portrait'] - Page orientation ('portrait' or 'landscape')\n * @returns {{ width: number, height: number } | null} Dimensions in millimeters\n */\n static getDimensions({ \n format, \n orientation = 'portrait'\n }) {\n const size = this.PAGE_SIZES[format.toUpperCase()];\n if (!size) return null;\n\n return orientation === 'landscape' ? \n { \n width: size.height, \n height: size.width\n } : \n { \n width: size.width, \n height: size.height\n };\n }\n\n /**\n * Convert millimeters to pixels at a given DPI\n * @param {number} mm - Value in millimeters\n * @param {number} dpi - Dots per inch (default: 72)\n * @returns {number} Value in pixels\n */\n static mmToPx(mm, dpi = 72) {\n return (mm * dpi) / 25.4;\n }\n\n /**\n * Get dimensions in pixels for a specific page size\n * @param {Object} options - Configuration options\n * @param {string} options.format - Page size format (e.g., 'A4', 'LETTER')\n * @param {string} [options.orientation='portrait'] - Page orientation ('portrait' or 'landscape')\n * @param {number} [options.dpi=72] - Dots per inch\n * @returns {{ width: number, height: number } | null} Dimensions in pixels\n */\n static getDimensionsInPx({ \n format, \n orientation = 'portrait', \n dpi = 72\n }) {\n const dimensions = this.getDimensions({ \n format, \n orientation\n });\n if (!dimensions) return null;\n\n return {\n width: this.mmToPx(dimensions.width, dpi),\n height: this.mmToPx(dimensions.height, dpi)\n };\n }\n\n /**\n * Check if a format exists\n * @param {string} format - Page size format to check\n * @returns {boolean} Whether the format exists\n */\n static hasFormat(format) {\n return format.toUpperCase() in this.PAGE_SIZES;\n }\n\n /**\n * Get all available formats\n * @returns {string[]} Array of available format names\n */\n static getAvailableFormats() {\n return Object.keys(this.PAGE_SIZES);\n }\n\n static toValidCustomDimension(value) {\n const numericValue = typeof value === 'string' && value.trim() !== ''\n ? Number(value)\n : value;\n\n return typeof numericValue === 'number' &&\n Number.isFinite(numericValue) &&\n numericValue > 10 &&\n numericValue < 4000\n ? numericValue\n : null;\n }\n\n static resolveDimensions(args = {}) {\n const { format, orientation, width, height } = args;\n const normalizedFormat = typeof format === 'string' ? format : '';\n const isCustom = !normalizedFormat || normalizedFormat.toLowerCase() === 'custom';\n const customWidth = this.toValidCustomDimension(width);\n const customHeight = this.toValidCustomDimension(height);\n\n if (isCustom && customWidth !== null && customHeight !== null) {\n return { width: customWidth, height: customHeight };\n }\n\n const fallbackFormat = isCustom ? 'A4' : normalizedFormat;\n return this.getDimensions({ format: fallbackFormat || 'A4', orientation }) ??\n this.getDimensions({ format: 'A4', orientation }) ??\n { width: 210, height: 297 };\n }\n\n static clampBleed(bleed) {\n return Math.min(Math.max(bleed ?? 0, 0), 400);\n }\n\n /**\n * Root CSS custom properties for a pagination setup. Pure (no DOM) so the\n * page/sheet contract can be unit-tested; `pageParams` applies the result.\n *\n * `--uhuu-page-*` describe ONE trim page and drive every `.uhuu-page-sheet`.\n * `--uhuu-sheet-*` describe the physical sheet `@page` prints: identical to\n * page + bleed normally, and the wide cover sheet (2·W + spine + 2·bleed)\n * when `setup.binding.spine > 0` (perfect binding, see spread-core.js).\n *\n * @param {Object} args - Pagination setup (format/orientation or width/height, bleed, binding)\n * @returns {Record<string, string>} CSS variable name → value (mm)\n */\n static resolveCssVars(args = {}) {\n const dimensions = this.resolveDimensions(args);\n const bleed = this.clampBleed(args.bleed);\n const vars = {\n '--uhuu-page-width': `${dimensions.width}mm`,\n '--uhuu-page-height': `${dimensions.height}mm`,\n '--uhuu-page-bleed': `${bleed}mm`,\n };\n\n const sheetVars = coverSpreadCssVars({ ...dimensions, bleed, binding: args.binding });\n return sheetVars ? { ...vars, ...sheetVars } : vars;\n }\n\n /**\n * Resolve the page config for a pagination setup and publish its CSS vars on\n * the root element. Without a DOM (SSR, node tests) the vars are skipped but\n * the config is still returned, so ConfigContext consumers (Sheet, CoverSpread,\n * ImageBlock) see the same `page` on the server as in the browser.\n */\n static pageParams(paginationType, args = {}) {\n const {format, orientation, bleed, showBleed, compatibility, printCssRaw, printCssUrl, preview, binding} = args;\n const dimensions = this.resolveDimensions(args);\n const cssVars = this.resolveCssVars(args);\n\n if (typeof document !== 'undefined') {\n for (const [name, value] of Object.entries(cssVars)) {\n document.documentElement.style.setProperty(name, value);\n }\n }\n\n const page = { \n paginationType,\n format, \n orientation, \n bleed, \n width: dimensions?.width, \n height: dimensions?.height, \n preview, \n showBleed,\n compatibility,\n printCssRaw,\n printCssUrl,\n // Perfect binding: normalised `{ type, spine, glue }` or null. Consumers\n // (CoverSpread, ImageBlock) read it from ConfigContext like `bleed`.\n binding: resolveBinding(binding),\n // Physical sheet incl. bleed — the `@page` size.\n sheet: resolveSheetSize({ ...dimensions, bleed: this.clampBleed(bleed), binding }),\n };\n\n return { page }; \n }\n}\n\nexport default PageSizeUtils;\n","import React, { createContext } from 'react';\n\n// Create the Context\nexport const ConfigContext = createContext(null);\n\n// ConfigProvider Component\nconst ConfigProvider = ({ config, children }) => {\n return (\n <ConfigContext.Provider value={config}>\n {children}\n </ConfigContext.Provider>\n );\n};\n\nexport default ConfigProvider;","import React, { useEffect } from 'react';\nimport CompatibilityUtils from './pagination/CompatibilityUtils';\nimport DocumentUtils from './pagination/DocumentUtils';\nimport PageSizeUtils from '../utility/PageSizeUtils';\nimport ConfigProvider from '../config/config-provider';\nimport './pagination/print.css';\nimport './pagination/pagination-static.css';\nimport './../styles/uhuu-indicators.css';\n\ninterface PaginationProps {\n children: React.ReactNode;\n className?: string;\n setup: any;\n}\n\nexport const Pagination: React.FC<PaginationProps> = ({ children, className, setup }) => {\n const config = PageSizeUtils.pageParams(\"static\", setup);\n\n useEffect(() => {\n if (config?.page?.compatibility) {\n CompatibilityUtils.handle();\n }\n\n const styleLink = DocumentUtils.setupPageStyles(config?.page?.printCssUrl);\n\n return () => {\n if (styleLink) {\n DocumentUtils.removePageStyles(styleLink as HTMLLinkElement);\n }\n };\n }, [setup, config?.page?.compatibility, config?.page?.printCssUrl]);\n\n const combinedClassName = [className, config?.page?.preview].filter(Boolean).join(' ');\n\n return (\n <ConfigProvider config={config}>\n <div className={combinedClassName}>\n {children}\n </div>\n </ConfigProvider>\n );\n};\n\nexport default Pagination;\n","import React, { ReactNode, useContext, CSSProperties, forwardRef } from \"react\";\nimport { ConfigContext } from '../config/config-provider'; // Import the ConfigContext\n\ninterface SheetProps {\n children: ReactNode;\n className?: string;\n style?: CSSProperties;\n pageNo: number;\n showBleed?: boolean;\n overlay?: (args: {pageNo: number}) => ReactNode;\n 'data-page-key'?: string;\n}\n\nconst Sheet = forwardRef<HTMLDivElement, SheetProps>(({\n children,\n className = \"\",\n style,\n pageNo,\n overlay,\n showBleed,\n 'data-page-key': dataPageKey,\n}, ref) => {\n const config = useContext(ConfigContext);\n const showBleedArea = showBleed ?? config?.page?.showBleed ?? false;\n\n return (\n <div \n className={`uhuu-page-sheet ${className}`} \n style={style} \n ref={ref}\n data-page-key={dataPageKey}\n >\n {children}\n {overlay && overlay({pageNo})}\n {showBleedArea && <div className=\"uhuu-bleed-area\"></div>}\n </div>\n );\n});\n\nexport default Sheet;","/**\n * Check if the code is running in development mode.\n * Checks if running on localhost or local development domains.\n * \n * @returns {boolean} True if running in development mode, false otherwise\n */\nexport function isDev(): boolean {\n // Only check runtime environment, not build-time variables\n if (typeof window !== 'undefined') {\n const hostname = window.location.hostname;\n return hostname === 'localhost' || \n hostname === '127.0.0.1' ||\n hostname.endsWith('.local') ||\n window.location.port !== ''; // Any port means dev server\n }\n \n return false;\n}\n","function finitePositive(value) {\n return typeof value === 'number' && Number.isFinite(value) && value > 0 ? value : 0;\n}\n\nfunction normalizeGroupKey(value) {\n return typeof value === 'string' && value ? value : null;\n}\n\nfunction getKeepWithNextCount(value) {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return Math.max(0, Math.floor(value));\n }\n\n return value ? 1 : 0;\n}\n\n/**\n * Return the visible-fragment state for one flow item. It stays in the small\n * dependency-free core so the measurement algorithm and React renderer use\n * exactly the same continuation rules.\n */\nexport function getFlowFragmentState({\n itemIndex = -1,\n fragmentIndexes = [],\n groupKeys = [],\n pageIndex = 0,\n pageCount = 1,\n itemCount = 0,\n previousSourceIndex,\n // Internal render fast path: the React renderer already knows this while\n // walking a fragment, so avoid re-running `indexOf` for every visible item.\n fragmentIndex: knownFragmentIndex,\n} = {}) {\n const fragmentIndex = Number.isInteger(knownFragmentIndex)\n ? knownFragmentIndex\n : fragmentIndexes.indexOf(itemIndex);\n const groupKey = normalizeGroupKey(groupKeys[itemIndex]);\n const previousFragmentItemIndex = fragmentIndex > 0\n ? fragmentIndexes[fragmentIndex - 1]\n : null;\n const previousFragmentGroupKey = previousFragmentItemIndex === null\n ? null\n : normalizeGroupKey(groupKeys[previousFragmentItemIndex]);\n const sourcePredecessorIndex = fragmentIndex > 0\n ? fragmentIndexes[fragmentIndex - 1]\n : previousSourceIndex ?? (itemIndex > 0 ? itemIndex - 1 : null);\n const previousSourceGroupKey = sourcePredecessorIndex !== null\n ? normalizeGroupKey(groupKeys[sourcePredecessorIndex])\n : null;\n const isFirstInGroup = Boolean(groupKey && previousSourceGroupKey !== groupKey);\n const isFirstInGroupOnPage = Boolean(groupKey && previousFragmentGroupKey !== groupKey);\n\n return {\n pageIndex,\n pageCount,\n itemIndex,\n fragmentIndex,\n groupKey: groupKey ?? undefined,\n isFirst: itemIndex === 0,\n isLast: itemCount > 0 && itemIndex === itemCount - 1,\n isFirstInFragment: fragmentIndex === 0,\n isLastInFragment: fragmentIndex >= 0 && fragmentIndex === fragmentIndexes.length - 1,\n isFirstInGroup,\n isFirstInGroupOnPage,\n // `isContinuation` refers to the virtual Flow page. `isGroupContinuation`\n // is the narrower signal for a repeated group header.\n isContinuation: pageIndex > 0,\n isGroupContinuation: Boolean(\n isFirstInGroupOnPage && !isFirstInGroup && previousSourceGroupKey === groupKey\n ),\n };\n}\n\n/**\n * Counters describing how much work one pagination pass cost. Purely\n * diagnostic — they never influence a pagination decision — but they make an\n * accidental quadratic regression fail a budget assertion instead of quietly\n * slowing every keystroke in the editor.\n */\nexport function createFlowPlanMetrics() {\n return {\n /** Leaf-item reads during chunking, keep lookahead, and avoid-break scans. */\n scannedItems: 0,\n /** Calls into the leaf chunker: one per page per track, plus retries. */\n chunkerCalls: 0,\n /**\n * Fresh-page retries computed, whether or not the retry was taken.\n * Unconstrained sequential content computes none: a retry is only reached\n * when a page already holds content and the next run either declares a\n * keep/avoid-break constraint or does not fit the remaining space.\n */\n freshPageAttempts: 0,\n /** Output pages produced. */\n pages: 0,\n };\n}\n\n/**\n * Split measured Flow items into virtual-page chunks. `headerGroupKeys` is\n * intentionally separate from item metadata's `groupKey`: existing callers\n * can keep using `groupKey` for avoid-break groups without opting into a\n * repeated measured header.\n */\nexport function distributeFlowItems({\n heights = [],\n keys = [],\n metas = [],\n availableHeight = 0,\n headerGroupKeys = [],\n headerGroupHeights = {},\n headerGroupRepeats = {},\n previousHeaderGroupKey,\n onUnplaceableItem,\n // Internal, used by distributeFlowColumns. `window` paginates a slice of the\n // caller's arrays without copying them, and `maxChunks` stops once that many\n // chunks are closed. Chunks are built strictly left to right and the group\n // header pass below only looks backwards, so a bounded run returns exactly\n // the chunks an unbounded run would have produced first.\n window: itemWindow,\n maxChunks = 0,\n metrics,\n} = {}) {\n const windowIndexes = itemWindow?.indexes;\n const windowOffset = itemWindow?.offset ?? 0;\n const itemCount = windowIndexes\n ? Math.max(0, windowIndexes.length - windowOffset)\n : heights.length;\n // Chunk indexes stay window-local; `at` resolves them onto the caller's arrays.\n const at = windowIndexes ? (index) => windowIndexes[windowOffset + index] : (index) => index;\n const normalizedAvailableHeight = finitePositive(availableHeight) || Number.POSITIVE_INFINITY;\n const chunks = [{ indexes: [], keys: [] }];\n let currentHeight = 0;\n\n const currentChunk = () => chunks[chunks.length - 1];\n const currentLastIndex = () => {\n const indexes = currentChunk().indexes;\n return indexes.length ? indexes[indexes.length - 1] : null;\n };\n const currentHasContent = () => (\n currentChunk().indexes.length > 0 || Boolean(currentChunk().unplaceable)\n );\n\n const getHeaderGroupKey = (index) => normalizeGroupKey(headerGroupKeys[at(index)]);\n const getHeaderHeight = (groupKey) => finitePositive(headerGroupHeights[groupKey] ?? 0);\n const shouldRepeatHeader = (groupKey) => headerGroupRepeats[groupKey] !== false;\n const needsGroupHeader = (index, previousIndex) => {\n const groupKey = getHeaderGroupKey(index);\n if (!groupKey) return false;\n\n if (previousIndex === null || previousIndex === undefined) {\n const previousSourceGroupKey = index > 0\n ? getHeaderGroupKey(index - 1)\n : normalizeGroupKey(previousHeaderGroupKey);\n return previousSourceGroupKey !== groupKey || shouldRepeatHeader(groupKey);\n }\n\n return getHeaderGroupKey(previousIndex) !== groupKey;\n };\n const getItemHeightWithHeader = (index, previousIndex) => {\n const groupKey = getHeaderGroupKey(index);\n return finitePositive(heights[at(index)]) + (\n groupKey && needsGroupHeader(index, previousIndex) ? getHeaderHeight(groupKey) : 0\n );\n };\n const getAvoidBreakGroupKey = (index) => {\n const meta = metas[at(index)] ?? {};\n return meta.avoidBreakInside && meta.groupKey ? meta.groupKey : null;\n };\n\n const getAvoidBreakGroupHeight = (startIndex, groupKey, previousIndex) => {\n let height = 0;\n let priorIndex = previousIndex;\n\n for (let index = startIndex; index < itemCount; index += 1) {\n if (getAvoidBreakGroupKey(index) !== groupKey) break;\n if (metrics) metrics.scannedItems += 1;\n height += getItemHeightWithHeader(index, priorIndex);\n priorIndex = index;\n }\n\n return height;\n };\n\n const getKeepWithNextHeight = (index, count, { currentHeight, ownHeight, stopEarly } = {}) => {\n let height = 0;\n let priorIndex = index;\n\n for (let offset = 1; offset <= count; offset += 1) {\n const nextIndex = index + offset;\n if (nextIndex >= itemCount) break;\n if (metrics) metrics.scannedItems += 1;\n height += getItemHeightWithHeader(nextIndex, priorIndex);\n\n // Preserve the baseline's left-to-right lookahead sum, but once that\n // exact placement expression is already over a finite page's capacity,\n // non-negative later measurements cannot make the move decision false.\n if (\n stopEarly &&\n currentHeight + (ownHeight + height) > normalizedAvailableHeight\n ) break;\n\n priorIndex = nextIndex;\n }\n\n return height;\n };\n\n const startNextChunk = () => {\n if (currentHasContent()) {\n chunks.push({ indexes: [], keys: [] });\n currentHeight = 0;\n }\n };\n\n const addUnplaceableItem = (index, height, requiredHeight) => {\n const key = keys[at(index)] ?? String(at(index));\n const groupKey = getHeaderGroupKey(index) ?? undefined;\n const headerHeight = groupKey && needsGroupHeader(index, null)\n ? getHeaderHeight(groupKey)\n : 0;\n const unplaceable = {\n index,\n key,\n height,\n headerHeight,\n requiredHeight,\n availableHeight: normalizedAvailableHeight,\n groupKey,\n reason: headerHeight > 0 ? 'item-with-header-too-tall' : 'item-too-tall',\n };\n\n // A discrete error chunk is deliberate: it keeps virtual-page expansion\n // finite and makes the failure visible instead of rendering clipped content.\n currentChunk().unplaceable = unplaceable;\n onUnplaceableItem?.(unplaceable);\n chunks.push({ indexes: [], keys: [] });\n currentHeight = 0;\n };\n\n for (let index = 0; index < itemCount; index += 1) {\n // `maxChunks` chunks are closed as soon as one more has been opened.\n if (maxChunks && chunks.length > maxChunks) break;\n if (metrics) metrics.scannedItems += 1;\n const meta = metas[at(index)] ?? {};\n const height = finitePositive(heights[at(index)]);\n const key = keys[at(index)] ?? String(at(index));\n\n if (meta.breakBefore) {\n startNextChunk();\n }\n\n const avoidBreakGroupKey = getAvoidBreakGroupKey(index);\n const previousAvoidBreakGroupKey = index > 0 ? getAvoidBreakGroupKey(index - 1) : null;\n if (\n avoidBreakGroupKey &&\n avoidBreakGroupKey !== previousAvoidBreakGroupKey &&\n currentHasContent() &&\n currentHeight + getAvoidBreakGroupHeight(index, avoidBreakGroupKey, currentLastIndex()) > normalizedAvailableHeight\n ) {\n // If the group cannot fit on an empty page we intentionally fall through\n // to normal row-level continuation below instead of creating a blank page.\n startNextChunk();\n }\n\n let previousIndex = currentLastIndex();\n let ownHeight = getItemHeightWithHeader(index, previousIndex);\n\n // A page boundary can add a repeated group header. Recalculate after moving\n // so a row is never admitted based on the previous page's header state.\n if (currentHasContent() && ownHeight > normalizedAvailableHeight - currentHeight) {\n startNextChunk();\n previousIndex = null;\n ownHeight = getItemHeightWithHeader(index, previousIndex);\n }\n\n if (ownHeight > normalizedAvailableHeight) {\n addUnplaceableItem(index, height, ownHeight);\n continue;\n }\n\n const hasCurrentContent = currentHasContent();\n // `keepWithNext` only decides whether to move an item away from an\n // existing fragment. On an empty fragment it cannot change the result, so\n // avoid scanning a potentially large lookahead range that is discarded.\n const keepWithNextHeight = hasCurrentContent\n ? getKeepWithNextHeight(index, getKeepWithNextCount(meta.keepWithNext), {\n currentHeight,\n ownHeight,\n stopEarly: Number.isFinite(normalizedAvailableHeight),\n })\n : 0;\n const requiredHeight = ownHeight + keepWithNextHeight;\n if (hasCurrentContent && currentHeight + requiredHeight > normalizedAvailableHeight) {\n startNextChunk();\n previousIndex = null;\n ownHeight = getItemHeightWithHeader(index, previousIndex);\n\n if (ownHeight > normalizedAvailableHeight) {\n addUnplaceableItem(index, height, ownHeight);\n continue;\n }\n }\n\n currentChunk().indexes.push(index);\n currentChunk().keys.push(key);\n currentHeight += ownHeight;\n\n if (meta.breakAfter && index < itemCount - 1) {\n startNextChunk();\n }\n }\n\n const allPopulatedChunks = chunks.filter((chunk) => (\n chunk.indexes.length > 0 || Boolean(chunk.unplaceable)\n ));\n if (!allPopulatedChunks.length) {\n if (metrics && !maxChunks) metrics.pages = 1;\n return [{ indexes: [], keys: [] }];\n }\n const populatedChunks = maxChunks\n ? allPopulatedChunks.slice(0, maxChunks)\n : allPopulatedChunks;\n if (metrics && !maxChunks) metrics.pages = populatedChunks.length;\n\n return populatedChunks.map((chunk) => {\n if (!chunk.indexes.length) return chunk;\n\n const groupHeaders = [];\n for (let position = 0; position < chunk.indexes.length; position += 1) {\n const itemIndex = chunk.indexes[position];\n const groupKey = getHeaderGroupKey(itemIndex);\n const previousIndex = position > 0 ? chunk.indexes[position - 1] : null;\n if (!groupKey || !needsGroupHeader(itemIndex, previousIndex)) continue;\n\n const previousSourceGroupKey = itemIndex > 0 ? getHeaderGroupKey(itemIndex - 1) : null;\n groupHeaders.push({\n groupKey,\n itemIndex,\n isContinuation: previousSourceGroupKey === groupKey,\n });\n }\n\n return groupHeaders.length ? { ...chunk, groupHeaders } : chunk;\n });\n}\n\nfunction layoutChunkHeight(chunk, heights, headerGroupHeights) {\n const itemHeight = (chunk.indexes ?? []).reduce(\n (sum, index) => sum + finitePositive(heights[index]),\n 0\n );\n const headerHeight = (chunk.groupHeaders ?? []).reduce(\n (sum, header) => sum + finitePositive(headerGroupHeights[header.groupKey]),\n 0\n );\n return itemHeight + headerHeight;\n}\n\nfunction trackFlowPlanInput(input, columnGroupId, columnId) {\n if (!columnGroupId || !columnId) return input;\n return {\n ...input,\n headerGroupHeights:\n input.columnHeaderGroupHeights?.[columnGroupId]?.[columnId] ??\n input.headerGroupHeights,\n headerGroupRepeats:\n input.columnHeaderGroupRepeats?.[columnGroupId]?.[columnId] ??\n input.headerGroupRepeats,\n };\n}\n\nfunction restoreGlobalChunk(\n chunk,\n indexes,\n offset,\n columnId,\n headerGroupKeys,\n previousSourceIndex\n) {\n const globalIndex = (localIndex) => indexes[offset + localIndex];\n const restored = {\n indexes: (chunk.indexes ?? []).map(globalIndex).filter(Number.isInteger),\n keys: [...(chunk.keys ?? [])],\n ...(previousSourceIndex !== undefined ? { previousSourceIndex } : {}),\n };\n if (chunk.groupHeaders?.length) {\n restored.groupHeaders = chunk.groupHeaders.map((header) => ({\n ...header,\n itemIndex: globalIndex(header.itemIndex),\n isContinuation:\n header.isContinuation ||\n (\n header.itemIndex === 0 &&\n previousSourceIndex !== undefined &&\n headerGroupKeys?.[previousSourceIndex] === header.groupKey\n ),\n }));\n }\n if (chunk.unplaceable) {\n restored.unplaceable = {\n ...chunk.unplaceable,\n index: globalIndex(chunk.unplaceable.index),\n ...(columnId ? { columnId } : {}),\n };\n }\n return restored;\n}\n\n/**\n * Paginate the first page's worth of `indexes` from `offset` onwards.\n *\n * The window is passed by reference: the leaf chunker reads the caller's arrays\n * through it and stops as soon as one chunk is closed, so laying out a page\n * costs what that page holds rather than what the rest of the document holds.\n */\nfunction firstChunkForIndexes(\n input,\n indexes,\n offset,\n availableHeight,\n columnGroupId,\n columnId,\n previousSourceIndex\n) {\n if (offset >= indexes.length) {\n return {\n chunk: { indexes: [], keys: [] },\n consumed: 0,\n height: 0,\n };\n }\n const trackInput = trackFlowPlanInput(input, columnGroupId, columnId);\n if (input.metrics) input.metrics.chunkerCalls += 1;\n const localChunks = distributeFlowItems({\n heights: input.heights,\n keys: input.keys,\n metas: input.metas,\n headerGroupKeys: input.headerGroupKeys,\n headerGroupHeights: trackInput.headerGroupHeights,\n headerGroupRepeats: trackInput.headerGroupRepeats,\n previousHeaderGroupKey: previousSourceIndex === undefined\n ? undefined\n : input.headerGroupKeys?.[previousSourceIndex],\n availableHeight,\n window: { indexes, offset },\n maxChunks: 1,\n metrics: input.metrics,\n });\n const localChunk = localChunks[0] ?? { indexes: [], keys: [] };\n const chunk = restoreGlobalChunk(\n localChunk,\n indexes,\n offset,\n columnId,\n trackInput.headerGroupKeys,\n previousSourceIndex\n );\n const consumed = chunk.unplaceable ? 1 : chunk.indexes.length;\n return {\n chunk,\n consumed,\n height: layoutChunkHeight(\n chunk,\n input.heights ?? [],\n trackInput.headerGroupHeights ?? {}\n ),\n };\n}\n\nexport function validateFlowColumnLayout({ nodes = [], itemCount = 0 } = {}) {\n const groupIds = new Set();\n const seenIndexes = new Set();\n const fail = (message) => {\n throw new TypeError(`[uhuu-components] Invalid Static.FlowColumns layout: ${message}`);\n };\n const claimIndex = (index, location) => {\n if (!Number.isInteger(index) || index < 0 || index >= itemCount) {\n fail(`${location} references out-of-range item index ${String(index)}.`);\n }\n if (seenIndexes.has(index)) fail(`item index ${index} occurs more than once.`);\n seenIndexes.add(index);\n };\n\n nodes.forEach((node, nodeIndex) => {\n if (!node || (node.kind !== 'item' && node.kind !== 'columns')) {\n fail(`node ${nodeIndex} has an unsupported kind.`);\n }\n if (node.kind === 'item') {\n claimIndex(node.index, `node ${nodeIndex}`);\n return;\n }\n if (typeof node.id !== 'string' || !node.id) fail(`column group ${nodeIndex} needs a stable id.`);\n if (groupIds.has(node.id)) fail(`column group id \"${node.id}\" occurs more than once.`);\n groupIds.add(node.id);\n const columnIds = new Set();\n (node.columns ?? []).forEach((column, columnIndex) => {\n if (!column || typeof column.id !== 'string' || !column.id) {\n fail(`column ${columnIndex} in group \"${node.id}\" needs a stable id.`);\n }\n if (columnIds.has(column.id)) {\n fail(`column id \"${column.id}\" occurs more than once in group \"${node.id}\".`);\n }\n columnIds.add(column.id);\n (column.indexes ?? []).forEach((index) => {\n claimIndex(index, `column \"${column.id}\" in group \"${node.id}\"`);\n });\n });\n });\n\n for (let index = 0; index < itemCount; index += 1) {\n if (!seenIndexes.has(index)) fail(`item index ${index} is omitted.`);\n }\n return true;\n}\n\n/**\n * Whether an in-page attempt should be retried on a fresh page:\n * `'no'` — keep it;\n * `'move'` — move unconditionally (a row a full page could still hold);\n * `'compare'` — move only if a fresh page consumes more.\n *\n * Only `'compare'` needs the fresh attempt to exist, so unconstrained content —\n * the overwhelming majority — never pays for a speculative second pagination.\n */\nfunction freshPageRetryVerdict(input, indexes, offset, attempt, fullPageHeight) {\n const unplaceableRequiredHeight = finitePositive(attempt.chunk.unplaceable?.requiredHeight);\n if (unplaceableRequiredHeight > 0 && unplaceableRequiredHeight <= fullPageHeight) return 'move';\n const firstIndex = indexes[offset];\n if (firstIndex === undefined) return 'no';\n const meta = input.metas?.[firstIndex] ?? {};\n const protectedStart = getKeepWithNextCount(meta.keepWithNext) > 0 ||\n Boolean(meta.avoidBreakInside && meta.groupKey);\n return protectedStart ? 'compare' : 'no';\n}\n\nfunction layoutPageHasContent(page) {\n return Boolean(page.layout?.length || page.unplaceable);\n}\n\n/**\n * Plan a one-level Flow layout: ordinary story items remain sequential, while a\n * `columns` node advances each of its columns independently. A column group may\n * begin in the remaining space on a page; if any leading item only fails because\n * that remainder is short, the whole group moves to a fresh page before retrying.\n *\n * The leaf chunking contract is still `distributeFlowItems`. This coordinator\n * owns only the bounded sequential/parallel relationship, so keep/break/header\n * behavior stays identical between normal Flow and FlowColumns.\n */\nexport function distributeFlowColumns({\n nodes = [],\n heights = [],\n keys = [],\n metas = [],\n availableHeight = 0,\n headerGroupKeys = [],\n headerGroupHeights = {},\n headerGroupRepeats = {},\n columnHeaderGroupHeights = {},\n columnHeaderGroupRepeats = {},\n onUnplaceableItem,\n /** Optional `createFlowPlanMetrics()` object, filled in as the plan is built. */\n metrics,\n} = {}) {\n validateFlowColumnLayout({ nodes, itemCount: heights.length });\n const normalizedAvailableHeight = finitePositive(availableHeight) || Number.POSITIVE_INFINITY;\n const input = {\n heights,\n keys,\n metas,\n headerGroupKeys,\n headerGroupHeights,\n headerGroupRepeats,\n columnHeaderGroupHeights,\n columnHeaderGroupRepeats,\n metrics,\n };\n const pages = [{ indexes: [], keys: [], layout: [] }];\n let usedHeight = 0;\n const currentPage = () => pages[pages.length - 1];\n const startPage = () => {\n if (!layoutPageHasContent(currentPage())) return;\n pages.push({ indexes: [], keys: [], layout: [] });\n usedHeight = 0;\n };\n const addChunkIndexes = (chunk) => {\n currentPage().indexes.push(...(chunk.indexes ?? []));\n currentPage().keys.push(...(chunk.keys ?? []));\n if (!currentPage().unplaceable && chunk.unplaceable) {\n currentPage().unplaceable = chunk.unplaceable;\n }\n if (chunk.unplaceable) onUnplaceableItem?.(chunk.unplaceable);\n };\n\n for (let nodeIndex = 0; nodeIndex < nodes.length; nodeIndex += 1) {\n const node = nodes[nodeIndex];\n if (!node || (node.kind !== 'item' && node.kind !== 'columns')) continue;\n\n if (node.kind === 'item') {\n const sequence = [];\n let sequenceNodeIndex = nodeIndex;\n while (sequenceNodeIndex < nodes.length && nodes[sequenceNodeIndex]?.kind === 'item') {\n const index = Number(nodes[sequenceNodeIndex].index);\n if (Number.isInteger(index) && index >= 0 && index < heights.length) sequence.push(index);\n sequenceNodeIndex += 1;\n }\n nodeIndex = sequenceNodeIndex - 1;\n let cursor = 0;\n while (cursor < sequence.length) {\n if (normalizedAvailableHeight - usedHeight <= 0 && layoutPageHasContent(currentPage())) {\n startPage();\n }\n const firstIndex = sequence[cursor];\n if (metas[firstIndex]?.breakBefore && layoutPageHasContent(currentPage())) startPage();\n\n const previousSourceIndex = cursor > 0 ? sequence[cursor - 1] : undefined;\n let result = firstChunkForIndexes(\n input,\n sequence,\n cursor,\n normalizedAvailableHeight - usedHeight,\n undefined,\n undefined,\n previousSourceIndex\n );\n if (layoutPageHasContent(currentPage())) {\n const verdict = freshPageRetryVerdict(\n input,\n sequence,\n cursor,\n result,\n normalizedAvailableHeight\n );\n if (verdict !== 'no') {\n if (metrics) metrics.freshPageAttempts += 1;\n const freshResult = firstChunkForIndexes(\n input,\n sequence,\n cursor,\n normalizedAvailableHeight,\n undefined,\n undefined,\n previousSourceIndex\n );\n if (verdict === 'move' || freshResult.consumed > result.consumed) {\n startPage();\n result = freshResult;\n }\n }\n }\n\n currentPage().layout.push({ kind: 'items', chunk: result.chunk });\n addChunkIndexes(result.chunk);\n usedHeight += result.height;\n cursor += result.consumed;\n if (result.consumed === 0) cursor += 1;\n\n const lastIndex = result.chunk.indexes?.at(-1) ?? result.chunk.unplaceable?.index;\n const hasRemaining = cursor < sequence.length;\n if (\n hasRemaining ||\n result.chunk.unplaceable ||\n (lastIndex !== undefined && metas[lastIndex]?.breakAfter)\n ) startPage();\n }\n continue;\n }\n\n const columns = (node.columns ?? [])\n .map((column) => ({\n id: String(column?.id ?? ''),\n indexes: (column?.indexes ?? []).filter(\n (index) => Number.isInteger(index) && index >= 0 && index < heights.length\n ),\n cursor: 0,\n }))\n .filter((column) => column.id && column.indexes.length);\n if (!columns.length) continue;\n\n while (columns.some((column) => column.cursor < column.indexes.length)) {\n if (normalizedAvailableHeight - usedHeight <= 0 && layoutPageHasContent(currentPage())) {\n startPage();\n }\n const startsWithForcedBreak = columns.some((column) => {\n const index = column.indexes[column.cursor];\n return index !== undefined && metas[index]?.breakBefore;\n });\n if (startsWithForcedBreak && layoutPageHasContent(currentPage())) startPage();\n\n const capacity = normalizedAvailableHeight - usedHeight;\n let attempts = columns.map((column) => firstChunkForIndexes(\n input,\n column.indexes,\n column.cursor,\n capacity,\n node.id,\n column.id,\n column.cursor > 0 ? column.indexes[column.cursor - 1] : undefined\n ));\n let freshAttempts;\n const ensureFreshAttempts = () => (freshAttempts ??= columns.map((candidate) => {\n if (metrics) metrics.freshPageAttempts += 1;\n return firstChunkForIndexes(\n input,\n candidate.indexes,\n candidate.cursor,\n normalizedAvailableHeight,\n node.id,\n candidate.id,\n candidate.cursor > 0 ? candidate.indexes[candidate.cursor - 1] : undefined\n );\n }));\n // `some` short-circuits exactly as before; the fresh attempts are now\n // materialised only once a column actually needs them to decide.\n const shouldMoveWholeGroup = layoutPageHasContent(currentPage()) && columns.some((column, columnIndex) => {\n const verdict = freshPageRetryVerdict(\n input,\n column.indexes,\n column.cursor,\n attempts[columnIndex],\n normalizedAvailableHeight\n );\n if (verdict === 'no') return false;\n if (verdict === 'move') return true;\n return ensureFreshAttempts()[columnIndex].consumed > attempts[columnIndex].consumed;\n });\n if (shouldMoveWholeGroup) {\n startPage();\n attempts = ensureFreshAttempts();\n }\n\n if (!attempts.some((attempt) => attempt.consumed > 0)) {\n const stalled = columns.find((column) => column.cursor < column.indexes.length);\n throw new TypeError(\n `[uhuu-components] Static.FlowColumns made no pagination progress` +\n `${stalled ? ` in column \"${stalled.id}\"` : ''}.`\n );\n }\n\n const columnChunks = columns.map((column, columnIndex) => ({\n id: column.id,\n chunk: attempts[columnIndex].chunk,\n }));\n currentPage().layout.push({\n kind: 'columns',\n id: String(node.id ?? 'columns'),\n columns: columnChunks,\n });\n for (const { chunk } of columnChunks) addChunkIndexes(chunk);\n\n const groupHeight = Math.max(0, ...attempts.map((attempt) => attempt.height));\n usedHeight += groupHeight;\n columns.forEach((column, columnIndex) => {\n column.cursor += attempts[columnIndex].consumed;\n });\n\n const hasRemaining = columns.some((column) => column.cursor < column.indexes.length);\n const forcedBreakAfter = attempts.some((attempt) => {\n const lastIndex = attempt.chunk.indexes?.at(-1) ?? attempt.chunk.unplaceable?.index;\n return lastIndex !== undefined && metas[lastIndex]?.breakAfter;\n });\n const hasUnplaceable = attempts.some((attempt) => Boolean(attempt.chunk.unplaceable));\n if (hasRemaining || forcedBreakAfter || hasUnplaceable) startPage();\n }\n }\n\n const populatedPages = pages.filter(layoutPageHasContent);\n if (!populatedPages.length) {\n if (metrics) metrics.pages = 1;\n return [{ indexes: [], keys: [], layout: [] }];\n }\n if (metrics) metrics.pages = populatedPages.length;\n return populatedPages;\n}\n","/**\n * The one implementation of \"read a laid-out Flow from the DOM\".\n *\n * `Static.FlowArea` uses it to measure the runtime document, and hosts that run\n * their own Flow canvas (Template Studio's Design surface) use it instead of\n * re-deriving the same reads. Two copies of this rounding is the one way a\n * shared chunk plan can still disagree between an editor and its delivery: the\n * planner is deterministic, so a half-pixel difference here is the only thing\n * that can move a page boundary.\n */\n\nexport type StaticFlowItemMeta = {\n breakBefore?: boolean;\n breakAfter?: boolean;\n keepWithNext?: boolean | number;\n avoidBreakInside?: boolean;\n groupKey?: string;\n};\n\n/**\n * The product of every ancestor CSS transform (preview fit-to-pane, host zoom), derived at read\n * time: offsetWidth is layout-space while the rect is visual-space. Chunking must run in layout\n * space — rects scale under a transform but computed margins do not, so an un-normalized\n * measurement pass silently paginates differently in a scaled preview than in the real document.\n */\nexport function getEffectiveScale(element: HTMLElement): number {\n const rectWidth = element.getBoundingClientRect().width;\n const layoutWidth = element.offsetWidth;\n if (!(rectWidth > 0) || !(layoutWidth > 0)) return 1;\n const scale = rectWidth / layoutWidth;\n // offsetWidth is integer-rounded; treat near-1 ratios as the untransformed common case.\n return Math.abs(scale - 1) < 0.002 ? 1 : scale;\n}\n\n/** Border-box height plus vertical margins, normalized out of `scale` into layout space. */\nexport function getOuterHeight(element: HTMLElement, scale = 1): number {\n const rect = element.getBoundingClientRect();\n const styles = window.getComputedStyle(element);\n const marginTop = Number.parseFloat(styles.marginTop || '0') || 0;\n const marginBottom = Number.parseFloat(styles.marginBottom || '0') || 0;\n return rect.height / scale + marginTop + marginBottom;\n}\n\nexport function readItemMeta(element: HTMLElement): StaticFlowItemMeta {\n return {\n breakBefore: element.dataset.uhuuFlowBreakBefore === 'true',\n breakAfter: element.dataset.uhuuFlowBreakAfter === 'true',\n keepWithNext: parseKeepWithNext(element.dataset.uhuuFlowKeepWithNext),\n avoidBreakInside: element.dataset.uhuuFlowAvoidBreakInside === 'true',\n groupKey: element.dataset.uhuuFlowGroupKey,\n };\n}\n\nexport function parseKeepWithNext(value: string | undefined): boolean | number {\n if (!value) return false;\n if (value === 'true') return true;\n\n const count = Number.parseInt(value, 10);\n return Number.isFinite(count) && count > 0 ? count : false;\n}\n\nexport function serializeKeepWithNext(value: StaticFlowItemMeta['keepWithNext']): string | undefined {\n if (typeof value === 'number' && Number.isFinite(value) && value > 0) {\n return String(Math.floor(value));\n }\n\n return value ? 'true' : undefined;\n}\n\nexport function readHeaderGroupKey(element: HTMLElement): string | undefined {\n const value = element.dataset.uhuuFlowHeaderGroupKey;\n return value || undefined;\n}\n\nexport function readHeaderGroupRepeats(itemElements: HTMLElement[]): Record<string, boolean> {\n const repeats: Record<string, boolean> = {};\n\n for (const item of itemElements) {\n const groupKey = readHeaderGroupKey(item);\n if (!groupKey) continue;\n if (item.dataset.uhuuFlowHeaderRepeat === 'false') {\n repeats[groupKey] = false;\n } else if (!(groupKey in repeats)) {\n repeats[groupKey] = true;\n }\n }\n\n return repeats;\n}\n\nexport function readHeaderGroupHeights(root: HTMLElement, scale = 1): Record<string, number> {\n const heights: Record<string, number> = {};\n\n for (const header of Array.from(\n root.querySelectorAll<HTMLElement>('[data-uhuu-flow-group-header=\"true\"]')\n )) {\n const groupKey = header.dataset.uhuuFlowHeaderGroupKey;\n if (!groupKey) continue;\n // A header can occur more than once in a measurement render when a group\n // is non-contiguous. Use the largest observed variant to avoid clipping.\n heights[groupKey] = Math.max(heights[groupKey] ?? 0, getOuterHeight(header, scale));\n }\n\n return heights;\n}\n\n/** Every measured leaf under `root`, in `data-uhuu-flow-index` order where present. */\nexport function readFlowItemElements(root: HTMLElement): HTMLElement[] {\n return Array.from(root.querySelectorAll<HTMLElement>('[data-uhuu-flow-item=\"true\"]'));\n}\n\n/**\n * Compact, allocation-light FNV-1a hash. Signatures are only ever compared for\n * equality, so a short hash beats keeping the full inputs as JSON — and beats\n * re-serializing a whole page config on every render just to detect a change.\n */\nexport function hashString(value: string): string {\n let hash = 0x811c9dc5;\n for (let index = 0; index < value.length; index += 1) {\n hash ^= value.charCodeAt(index);\n hash = Math.imul(hash, 0x01000193);\n }\n return (hash >>> 0).toString(36);\n}\n","import * as React from 'react';\nimport { isDev } from '../utility/is-dev';\nimport {\n distributeFlowColumns,\n distributeFlowItems,\n getFlowFragmentState,\n validateFlowColumnLayout,\n} from './flow-core';\nimport {\n getEffectiveScale,\n getOuterHeight,\n hashString,\n readFlowItemElements,\n readHeaderGroupHeights,\n readHeaderGroupKey,\n readHeaderGroupRepeats,\n readItemMeta,\n serializeKeepWithNext,\n type StaticFlowItemMeta,\n} from './flow-measure';\n\nexport type { StaticFlowItemMeta } from './flow-measure';\n\nexport type StaticFlowItemGroup = {\n /** A stable key for the repeatable header group. */\n key: string;\n /** Repeat the group header if this group resumes on a later virtual page. */\n repeatHeader?: boolean;\n};\n\nexport type StaticFlowFragmentContext<TItem = unknown> = {\n flowId: string;\n pageIndex: number;\n pageCount: number;\n itemIndex: number;\n itemKey: React.Key;\n item: TItem;\n groupKey?: string;\n isFirst: boolean;\n isLast: boolean;\n isFirstInFragment: boolean;\n isLastInFragment: boolean;\n isFirstInGroup: boolean;\n isFirstInGroupOnPage: boolean;\n /** This item is on a virtual continuation page of the Flow. */\n isContinuation: boolean;\n /** This group resumes from the preceding virtual page. */\n isGroupContinuation: boolean;\n};\n\nexport type StaticFlowUnplaceableItem = {\n index: number;\n key: string;\n height: number;\n headerHeight: number;\n requiredHeight: number;\n availableHeight: number;\n /** Present when the item belongs to a FlowColumns track. */\n columnId?: string;\n groupKey?: string;\n reason: 'item-too-tall' | 'item-with-header-too-tall';\n};\n\nexport type StaticFlowUnplaceableContext = {\n flowId: string;\n pageIndex: number;\n pageCount: number;\n};\n\nexport type StaticFlowGroupHeaderFragment = {\n groupKey: string;\n itemIndex: number;\n isContinuation: boolean;\n};\n\nexport type StaticFlowChunk = {\n /** Flattened visual reading order for this page; `layout` preserves parallel track identity. */\n indexes: number[];\n keys: string[];\n /** Track-local source predecessor for the first item in this continuation fragment. */\n previousSourceIndex?: number;\n /** Header insertion points for this exact measured virtual-page fragment. */\n groupHeaders?: StaticFlowGroupHeaderFragment[];\n /** A finite, renderable error page for a row that cannot fit on an empty page. */\n unplaceable?: StaticFlowUnplaceableItem;\n /** Authoritative one-level sequential/parallel fragment plan for FlowColumns. */\n layout?: StaticFlowLayoutFragment[];\n};\n\nexport type StaticFlowColumn = {\n id: string;\n indexes: number[];\n};\n\nexport type StaticFlowLayoutNode =\n | { kind: 'item'; index: number }\n | { kind: 'columns'; id: string; columns: StaticFlowColumn[] };\n\nexport type StaticFlowColumnFragment = {\n id: string;\n chunk: StaticFlowChunk;\n};\n\nexport type StaticFlowLayoutFragment =\n | { kind: 'items'; chunk: StaticFlowChunk }\n | { kind: 'columns'; id: string; columns: StaticFlowColumnFragment[] };\n\ntype StaticFlowPlanInput = {\n heights?: number[];\n keys?: string[];\n metas?: StaticFlowItemMeta[];\n availableHeight?: number;\n headerGroupKeys?: Array<string | undefined>;\n headerGroupHeights?: Record<string, number>;\n headerGroupRepeats?: Record<string, boolean>;\n columnHeaderGroupHeights?: Record<string, Record<string, Record<string, number>>>;\n columnHeaderGroupRepeats?: Record<string, Record<string, Record<string, boolean>>>;\n onUnplaceableItem?: (item: StaticFlowUnplaceableItem) => void;\n};\n\nconst planFlowChunks = distributeFlowItems as (\n input?: StaticFlowPlanInput\n) => StaticFlowChunk[];\nconst planFlowColumnChunks = distributeFlowColumns as (\n input: StaticFlowPlanInput & { nodes: StaticFlowLayoutNode[] }\n) => StaticFlowChunk[];\n\nexport type StaticFlowMeasurement = {\n flowId: string;\n chunks: StaticFlowChunk[];\n signature: string;\n unplaceableItems?: StaticFlowUnplaceableItem[];\n};\n\nexport type StaticFlowContextValue = {\n mode: 'measure' | 'visible';\n pageIndex: number;\n measurementVersion?: string;\n chunksByFlowId?: Record<string, StaticFlowChunk[]>;\n registerMeasurement?: (measurement: StaticFlowMeasurement) => void;\n};\n\nexport const StaticFlowContext = React.createContext<StaticFlowContextValue | null>(null);\n\ntype FlowAreaProps = {\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n /** Receives the same measured plan that drives virtual continuation pages. */\n onFlowMeasurement?: (measurement: StaticFlowMeasurement) => void;\n};\n\nconst useIsoLayoutEffect = typeof window === 'undefined' ? React.useEffect : React.useLayoutEffect;\nconst warnedMetaDefaultsWithoutType = new Set<string>();\n\ntype FlowItemType<TItem> = TItem extends { type?: infer TType }\n ? Extract<TType, string>\n : string;\n\ntype DefaultFlowItemType<TItem> = [FlowItemType<TItem>] extends [never]\n ? string\n : FlowItemType<TItem>;\n\nfunction getItemType(item: unknown): string | undefined {\n if (!item || typeof item !== 'object' || !('type' in item)) return undefined;\n const type = (item as { type?: unknown }).type;\n return typeof type === 'string' || typeof type === 'number' ? String(type) : undefined;\n}\n\nfunction mergeItemMeta(\n base: StaticFlowItemMeta | undefined,\n override: StaticFlowItemMeta | undefined\n): StaticFlowItemMeta {\n const merged: StaticFlowItemMeta = { ...(base ?? {}) };\n\n for (const [key, value] of Object.entries(override ?? {})) {\n if (value !== undefined) {\n (merged as Record<string, unknown>)[key] = value;\n }\n }\n\n return merged;\n}\n\nfunction numericStyle(value: string) {\n return Number.parseFloat(value || '0') || 0;\n}\n\nfunction assertSupportedFlowColumnGeometry(flow: HTMLElement, scale: number) {\n const verticalBox = (element: HTMLElement) => {\n const style = window.getComputedStyle(element);\n return numericStyle(style.paddingTop) +\n numericStyle(style.paddingBottom) +\n numericStyle(style.borderTopWidth) +\n numericStyle(style.borderBottomWidth);\n };\n for (const group of Array.from(\n flow.querySelectorAll<HTMLElement>(':scope > [data-uhuu-flow-layout-node=\"columns\"]')\n )) {\n const groupStyle = window.getComputedStyle(group);\n const groupVerticalMargins =\n numericStyle(groupStyle.marginTop) + numericStyle(groupStyle.marginBottom);\n if (verticalBox(group) > 0.01 || groupVerticalMargins > 0.01) {\n throw new TypeError(\n '[uhuu-components] Static.FlowColumns group vertical margin, padding, and borders are unsupported; ' +\n 'put measured vertical spacing on items with getColumnItemProps.'\n );\n }\n const naturalColumnHeights: number[] = [];\n for (const column of Array.from(\n group.querySelectorAll<HTMLElement>(':scope > [data-uhuu-flow-column]')\n )) {\n const style = window.getComputedStyle(column);\n const verticalMargins = numericStyle(style.marginTop) + numericStyle(style.marginBottom);\n if (\n verticalBox(column) > 0.01 ||\n verticalMargins > 0.01 ||\n numericStyle(style.rowGap) > 0.01 ||\n numericStyle(style.minHeight) > 0.01 ||\n style.maxHeight !== 'none'\n ) {\n throw new TypeError(\n '[uhuu-components] Static.FlowColumns column vertical margin, padding, borders, min/max height, and row-gap are unsupported; ' +\n 'put measured vertical spacing on items with getColumnItemProps.'\n );\n }\n const naturalHeight = Array.from(\n column.querySelectorAll<HTMLElement>(\n '[data-uhuu-flow-item=\"true\"], [data-uhuu-flow-group-header=\"true\"]'\n )\n ).reduce((sum, child) => sum + getOuterHeight(child, scale), 0);\n naturalColumnHeights.push(naturalHeight);\n }\n const naturalGroupHeight = Math.max(0, ...naturalColumnHeights);\n if (getOuterHeight(group, scale) > naturalGroupHeight + 1) {\n throw new TypeError(\n '[uhuu-components] Static.FlowColumns group/column fixed height or wrapping adds unmeasured vertical extent.'\n );\n }\n }\n}\n\ntype BuildChunksOptions = {\n onZeroHeight?: () => void;\n onUnplaceableItem?: (item: StaticFlowUnplaceableItem) => void;\n};\n\nfunction buildChunks(\n area: HTMLElement,\n flow: HTMLElement,\n options: BuildChunksOptions = {}\n): StaticFlowMeasurement | null {\n const flowId = flow.dataset.uhuuFlowId;\n if (!flowId) return null;\n\n if (flow.dataset.uhuuFlowLayout === 'columns') {\n return buildFlowColumnChunks(area, flow, options);\n }\n\n const itemElements = readFlowItemElements(flow);\n if (!itemElements.length) {\n return {\n flowId,\n chunks: [{ indexes: [], keys: [] }],\n signature: `${flowId}:empty`,\n unplaceableItems: [],\n };\n }\n\n const areaRect = area.getBoundingClientRect();\n // Normalize every rect read back to layout space so a scaled preview (fit-to-pane, host zoom)\n // measures the exact same chunk plan as the unscaled published document.\n const scale = getEffectiveScale(area);\n const measuredAvailableHeight = areaRect.height ? areaRect.height / scale : area.clientHeight;\n const hasAvailableHeight = Number.isFinite(measuredAvailableHeight) && measuredAvailableHeight > 0;\n const heights = itemElements.map((item) => getOuterHeight(item, scale));\n const metas = itemElements.map(readItemMeta);\n const keys = itemElements.map((item, index) => item.dataset.uhuuFlowKey || String(index));\n const headerGroupKeys = itemElements.map(readHeaderGroupKey);\n const headerGroupRepeats = readHeaderGroupRepeats(itemElements);\n const headerGroupHeights = readHeaderGroupHeights(flow, scale);\n const unplaceableItems: StaticFlowUnplaceableItem[] = [];\n const fallbackHeight = hasAvailableHeight\n ? measuredAvailableHeight\n : heights.reduce((sum, height) => sum + height, 0) +\n Object.values(headerGroupHeights).reduce((sum, height) => sum + height, 0);\n\n if (!hasAvailableHeight) {\n options.onZeroHeight?.();\n }\n\n const finalChunks = planFlowChunks({\n heights,\n keys,\n metas,\n availableHeight: fallbackHeight,\n headerGroupKeys,\n headerGroupHeights,\n headerGroupRepeats,\n onUnplaceableItem: (item: StaticFlowUnplaceableItem) => {\n unplaceableItems.push(item);\n options.onUnplaceableItem?.(item);\n },\n });\n const signature = hashString(JSON.stringify({\n version: 2,\n flowId,\n availableHeight: Math.round(fallbackHeight * 100) / 100,\n heights: heights.map((height) => Math.round(height * 100) / 100),\n keys,\n metas,\n headerGroupKeys,\n headerGroupHeights,\n headerGroupRepeats,\n unplaceableItems,\n }));\n\n return { flowId, chunks: finalChunks, signature, unplaceableItems };\n}\n\nfunction buildFlowColumnChunks(\n area: HTMLElement,\n flow: HTMLElement,\n options: BuildChunksOptions = {}\n): StaticFlowMeasurement | null {\n const flowId = flow.dataset.uhuuFlowId;\n if (!flowId) return null;\n const itemElements = readFlowItemElements(flow);\n if (!itemElements.length) {\n return {\n flowId,\n chunks: [{ indexes: [], keys: [], layout: [] }],\n signature: `${flowId}:columns:empty`,\n unplaceableItems: [],\n };\n }\n\n const areaRect = area.getBoundingClientRect();\n const scale = getEffectiveScale(area);\n assertSupportedFlowColumnGeometry(flow, scale);\n const measuredAvailableHeight = areaRect.height ? areaRect.height / scale : area.clientHeight;\n const hasAvailableHeight = Number.isFinite(measuredAvailableHeight) && measuredAvailableHeight > 0;\n const highestIndex = Math.max(\n -1,\n ...itemElements.map((item) => Number.parseInt(item.dataset.uhuuFlowIndex ?? '-1', 10))\n );\n const heights = Array.from({ length: highestIndex + 1 }, () => 0);\n const keys = Array.from({ length: highestIndex + 1 }, (_, index) => String(index));\n const metas = Array.from({ length: highestIndex + 1 }, () => ({} as StaticFlowItemMeta));\n const headerGroupKeys = Array.from(\n { length: highestIndex + 1 },\n () => undefined as string | undefined\n );\n for (const item of itemElements) {\n const index = Number.parseInt(item.dataset.uhuuFlowIndex ?? '-1', 10);\n if (!Number.isInteger(index) || index < 0) continue;\n heights[index] = getOuterHeight(item, scale);\n keys[index] = item.dataset.uhuuFlowKey || String(index);\n metas[index] = readItemMeta(item);\n headerGroupKeys[index] = readHeaderGroupKey(item);\n }\n const nodes = Array.from(flow.children).flatMap((node): StaticFlowLayoutNode[] => {\n if (!(node instanceof HTMLElement)) return [];\n if (node.dataset.uhuuFlowLayoutNode === 'item') {\n const item = node.matches('[data-uhuu-flow-item=\"true\"]')\n ? node\n : node.querySelector<HTMLElement>('[data-uhuu-flow-item=\"true\"]');\n const index = Number.parseInt(item?.dataset.uhuuFlowIndex ?? '-1', 10);\n return Number.isInteger(index) && index >= 0 ? [{ kind: 'item', index }] : [];\n }\n if (node.dataset.uhuuFlowLayoutNode !== 'columns') return [];\n const columns = Array.from(\n node.querySelectorAll<HTMLElement>(':scope > [data-uhuu-flow-column]')\n ).flatMap((column): StaticFlowColumn[] => {\n const id = column.dataset.uhuuFlowColumn;\n if (!id) return [];\n const indexes = Array.from(\n column.querySelectorAll<HTMLElement>('[data-uhuu-flow-item=\"true\"]')\n ).map((item) => Number.parseInt(item.dataset.uhuuFlowIndex ?? '-1', 10))\n .filter((index) => Number.isInteger(index) && index >= 0);\n return [{ id, indexes }];\n });\n return columns.length\n ? [{ kind: 'columns', id: node.dataset.uhuuFlowLayoutId || 'columns', columns }]\n : [];\n });\n const headerGroupRepeats = readHeaderGroupRepeats(itemElements);\n const headerGroupHeights = readHeaderGroupHeights(flow, scale);\n const columnHeaderGroupHeights: Record<string, Record<string, Record<string, number>>> = {};\n const columnHeaderGroupRepeats: Record<string, Record<string, Record<string, boolean>>> = {};\n for (const group of Array.from(\n flow.querySelectorAll<HTMLElement>(':scope > [data-uhuu-flow-layout-node=\"columns\"]')\n )) {\n const groupId = group.dataset.uhuuFlowLayoutId;\n if (!groupId) continue;\n columnHeaderGroupHeights[groupId] = {};\n columnHeaderGroupRepeats[groupId] = {};\n for (const column of Array.from(\n group.querySelectorAll<HTMLElement>(':scope > [data-uhuu-flow-column]')\n )) {\n const columnId = column.dataset.uhuuFlowColumn;\n if (!columnId) continue;\n const columnItems = Array.from(\n column.querySelectorAll<HTMLElement>('[data-uhuu-flow-item=\"true\"]')\n );\n columnHeaderGroupHeights[groupId][columnId] = readHeaderGroupHeights(column, scale);\n columnHeaderGroupRepeats[groupId][columnId] = readHeaderGroupRepeats(columnItems);\n }\n }\n const unplaceableItems: StaticFlowUnplaceableItem[] = [];\n const fallbackHeight = hasAvailableHeight\n ? measuredAvailableHeight\n : heights.reduce((sum, height) => sum + height, 0) +\n Object.values(headerGroupHeights).reduce((sum, height) => sum + height, 0);\n if (!hasAvailableHeight) options.onZeroHeight?.();\n\n const chunks = planFlowColumnChunks({\n nodes,\n heights,\n keys,\n metas,\n availableHeight: fallbackHeight,\n headerGroupKeys,\n headerGroupHeights,\n headerGroupRepeats,\n columnHeaderGroupHeights,\n columnHeaderGroupRepeats,\n onUnplaceableItem: (item: StaticFlowUnplaceableItem) => {\n unplaceableItems.push(item);\n options.onUnplaceableItem?.(item);\n },\n });\n const signature = hashString(JSON.stringify({\n version: 3,\n flowId,\n availableHeight: Math.round(fallbackHeight * 100) / 100,\n nodes,\n heights: heights.map((height) => Math.round(height * 100) / 100),\n keys,\n metas,\n headerGroupKeys,\n headerGroupHeights,\n headerGroupRepeats,\n columnHeaderGroupHeights,\n columnHeaderGroupRepeats,\n unplaceableItems,\n }));\n return { flowId, chunks, signature, unplaceableItems };\n}\n\nexport function FlowArea({\n children,\n className = '',\n style,\n onFlowMeasurement,\n}: FlowAreaProps) {\n const context = React.useContext(StaticFlowContext);\n const areaRef = React.useRef<HTMLDivElement>(null);\n const lastSignatureRef = React.useRef<string>('');\n const warnedMultipleFlowsRef = React.useRef(false);\n const warnedZeroHeightRef = React.useRef(false);\n const warnedUnplaceableItemsRef = React.useRef(new Set<string>());\n\n useIsoLayoutEffect(() => {\n if (context?.mode !== 'measure' || !context.registerMeasurement || !areaRef.current) {\n return;\n }\n\n const area = areaRef.current;\n let rafId: number | null = null;\n let resizeObserver: ResizeObserver | null = null;\n lastSignatureRef.current = '';\n\n const observedMeasurementElements = new Set<HTMLElement>();\n const observeMeasurementElements = () => {\n if (!resizeObserver) return;\n\n for (const element of Array.from(observedMeasurementElements)) {\n if (!area.contains(element)) {\n resizeObserver.unobserve(element);\n observedMeasurementElements.delete(element);\n }\n }\n\n area\n .querySelectorAll<HTMLElement>(\n '[data-uhuu-flow-item=\"true\"], [data-uhuu-flow-group-header=\"true\"]'\n )\n .forEach((element) => {\n if (observedMeasurementElements.has(element)) return;\n observedMeasurementElements.add(element);\n resizeObserver?.observe(element);\n });\n };\n\n function measure() {\n observeMeasurementElements();\n\n const flows = area.querySelectorAll<HTMLElement>('[data-uhuu-flow=\"true\"]');\n if (flows.length > 1 && !warnedMultipleFlowsRef.current && isDev()) {\n warnedMultipleFlowsRef.current = true;\n console.warn(\n '[uhuu-components] Static.FlowArea supports one Static.Flow child. ' +\n 'Additional Static.Flow elements in the same area are ignored. Use one FlowArea per flow region.'\n );\n }\n\n const flow = flows[0];\n if (!flow) return;\n\n const measurement = buildChunks(area, flow, {\n onZeroHeight: () => {\n if (warnedZeroHeightRef.current || !isDev()) return;\n warnedZeroHeightRef.current = true;\n console.warn(\n '[uhuu-components] Static.FlowArea has flow items but no measurable height. ' +\n 'Give the area an explicit height or use a constrained flex layout such as flex-1 min-h-0.'\n );\n },\n onUnplaceableItem: (item) => {\n if (warnedUnplaceableItemsRef.current.has(item.key) || !isDev()) return;\n warnedUnplaceableItemsRef.current.add(item.key);\n console.warn(\n `[uhuu-components] Static.Flow item \"${item.key}\" cannot fit in its FlowArea ` +\n `(${Math.round(item.requiredHeight)}px required > ${Math.round(item.availableHeight)}px available). ` +\n 'It is rendered as a controlled flow error instead of clipped content.'\n );\n },\n });\n if (!measurement || measurement.signature === lastSignatureRef.current) return;\n\n lastSignatureRef.current = measurement.signature;\n onFlowMeasurement?.(measurement);\n context?.registerMeasurement?.(measurement);\n }\n\n const scheduleMeasure = () => {\n // Coalesce all observer notifications arriving in one frame. Unlike\n // cancelling and re-queuing, this cannot postpone a remeasure forever\n // while an editable surface is continuously mutating.\n if (rafId !== null) return;\n rafId = window.requestAnimationFrame(() => {\n rafId = null;\n measure();\n });\n };\n\n resizeObserver = new ResizeObserver(scheduleMeasure);\n resizeObserver.observe(area);\n observeMeasurementElements();\n scheduleMeasure();\n\n const mutationObserver = new MutationObserver(() => {\n // Reconcile new/removed measured elements in the scheduled pass rather\n // than scanning the complete flow both here and again in `measure`.\n scheduleMeasure();\n });\n mutationObserver.observe(area, {\n attributes: true,\n attributeFilter: [\n 'class',\n 'style',\n 'data-uhuu-flow',\n 'data-uhuu-flow-id',\n 'data-uhuu-flow-item',\n 'data-uhuu-flow-key',\n 'data-uhuu-flow-break-before',\n 'data-uhuu-flow-break-after',\n 'data-uhuu-flow-keep-with-next',\n 'data-uhuu-flow-avoid-break-inside',\n 'data-uhuu-flow-group-key',\n 'data-uhuu-flow-header-group-key',\n 'data-uhuu-flow-header-repeat',\n 'data-uhuu-flow-group-header',\n ],\n characterData: true,\n childList: true,\n subtree: true,\n });\n\n return () => {\n if (rafId !== null) window.cancelAnimationFrame(rafId);\n resizeObserver?.disconnect();\n mutationObserver.disconnect();\n };\n }, [context, onFlowMeasurement]);\n\n return (\n <div ref={areaRef} className={className} style={style} data-uhuu-flow-area=\"true\">\n {children}\n </div>\n );\n}\n\ntype FlowPageProps = {\n children: React.ReactNode;\n header?: React.ReactNode;\n footer?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n flowAreaClassName?: string;\n flowAreaStyle?: React.CSSProperties;\n onFlowMeasurement?: (measurement: StaticFlowMeasurement) => void;\n};\n\nexport function FlowPage({\n children,\n header,\n footer,\n className = '',\n style,\n flowAreaClassName = '',\n flowAreaStyle,\n onFlowMeasurement,\n}: FlowPageProps) {\n return (\n <div\n className={`h-full w-full flex flex-col ${className}`}\n style={style}\n data-uhuu-flow-page=\"true\"\n >\n {header}\n <FlowArea\n className={`flex-1 min-h-0 ${flowAreaClassName}`}\n style={flowAreaStyle}\n onFlowMeasurement={onFlowMeasurement}\n >\n {children}\n </FlowArea>\n {footer}\n </div>\n );\n}\n\nfunction normalizeItemGroup(\n value: StaticFlowItemGroup | string | null | undefined\n): StaticFlowItemGroup | undefined {\n if (typeof value === 'string') {\n return value ? { key: value, repeatHeader: true } : undefined;\n }\n\n if (!value?.key) return undefined;\n return {\n key: value.key,\n repeatHeader: value.repeatHeader !== false,\n };\n}\n\n/**\n * `getFlowFragmentState` resolves the fragment position with `indexOf`. The\n * renderer already walks every visible index, so prepare the same first-match\n * lookup once instead. Keeping the first position deliberately preserves the\n * core helper's behavior for a stale chunk that happens to contain an index\n * more than once.\n */\nfunction getFirstFragmentPositions(fragmentIndexes: readonly number[]): Map<number, number> {\n const positions = new Map<number, number>();\n fragmentIndexes.forEach((itemIndex, position) => {\n if (!positions.has(itemIndex)) positions.set(itemIndex, position);\n });\n return positions;\n}\n\n/**\n * A planned header list is authoritative when it exists, including an empty\n * list. Index it once so a page with many groups does not scan it per item.\n */\nfunction getPlannedGroupHeadersByItemIndex(\n groupHeaders: StaticFlowGroupHeaderFragment[] | undefined\n): Map<number, Set<string>> | undefined {\n if (!groupHeaders) return undefined;\n\n const headersByItemIndex = new Map<number, Set<string>>();\n for (const header of groupHeaders) {\n let groupKeys = headersByItemIndex.get(header.itemIndex);\n if (!groupKeys) {\n groupKeys = new Set<string>();\n headersByItemIndex.set(header.itemIndex, groupKeys);\n }\n groupKeys.add(header.groupKey);\n }\n return headersByItemIndex;\n}\n\ntype FlowProps<TItem, TType extends string = DefaultFlowItemType<TItem>> = {\n id: string;\n items: TItem[];\n getKey: (item: TItem, index: number) => React.Key;\n /** The third argument describes this item's visible virtual-page fragment. */\n renderItem: (\n item: TItem,\n index: number,\n fragment: StaticFlowFragmentContext<TItem>\n ) => React.ReactNode;\n getItemMeta?: (item: TItem, index: number) => StaticFlowItemMeta | undefined;\n metaDefaults?: Partial<Record<TType, StaticFlowItemMeta>>;\n getItemType?: (item: TItem, index: number) => TType | undefined;\n /** Opt into a separately measured, repeatable group header. */\n getItemGroup?: (\n item: TItem,\n index: number\n ) => StaticFlowItemGroup | string | null | undefined;\n renderGroupHeader?: (\n group: StaticFlowItemGroup,\n fragment: StaticFlowFragmentContext<TItem>\n ) => React.ReactNode;\n className?: string;\n itemClassName?: string | ((item: TItem, index: number) => string | undefined);\n groupHeaderClassName?: string | ((\n group: StaticFlowItemGroup,\n fragment: StaticFlowFragmentContext<TItem>\n ) => string | undefined);\n renderUnplaceableItem?: (\n item: StaticFlowUnplaceableItem,\n context: StaticFlowUnplaceableContext\n ) => React.ReactNode;\n};\n\nexport type StaticFlowColumnsRenderContext = {\n /** Stable identity only: column geometry callbacks must return the same layout on every page. */\n flowId: string;\n};\n\nexport type StaticFlowColumnsContainerProps = {\n className?: string;\n style?: React.CSSProperties;\n};\n\ntype FlowColumnsProps<TItem, TType extends string = DefaultFlowItemType<TItem>> =\n FlowProps<TItem, TType> & {\n /** One-level story layout. Recursive columns are intentionally unsupported. */\n layout: StaticFlowLayoutNode[];\n getColumnGroupProps?: (\n node: Extract<StaticFlowLayoutNode, { kind: 'columns' }>,\n context: StaticFlowColumnsRenderContext\n ) => StaticFlowColumnsContainerProps | undefined;\n getColumnProps?: (\n node: Extract<StaticFlowLayoutNode, { kind: 'columns' }>,\n column: StaticFlowColumn,\n context: StaticFlowColumnsRenderContext\n ) => StaticFlowColumnsContainerProps | undefined;\n getColumnItemProps?: (\n node: Extract<StaticFlowLayoutNode, { kind: 'columns' }>,\n column: StaticFlowColumn,\n itemIndex: number,\n context: StaticFlowColumnsRenderContext\n ) => StaticFlowColumnsContainerProps | undefined;\n };\n\nexport function Flow<TItem, TType extends string = DefaultFlowItemType<TItem>>({\n id,\n items,\n getKey,\n renderItem,\n getItemMeta,\n metaDefaults,\n getItemType: resolveItemType,\n getItemGroup,\n renderGroupHeader,\n className = '',\n itemClassName,\n groupHeaderClassName,\n renderUnplaceableItem,\n}: FlowProps<TItem, TType>) {\n const context = React.useContext(StaticFlowContext);\n const chunks = context?.chunksByFlowId?.[id];\n const activeChunk = context?.mode === 'visible' && chunks\n ? chunks[context.pageIndex]\n : undefined;\n const rawVisibleIndexes =\n context?.mode === 'visible' && chunks\n ? (activeChunk?.indexes ?? [])\n : context?.mode === 'visible' && context.pageIndex > 0\n ? []\n : items.map((_, index) => index);\n\n // Guard against stale chunk indexes when items shrink (e.g. rowCount decreased before remeasure)\n const visibleIndexes = rawVisibleIndexes.filter((idx) => (\n Number.isInteger(idx) && idx >= 0 && idx < items.length\n ));\n const itemGroups = items.map((item, index) => normalizeItemGroup(getItemGroup?.(item, index)));\n const groupKeys = itemGroups.map((group) => group?.key);\n const fragmentPositions = getFirstFragmentPositions(visibleIndexes);\n const plannedGroupHeaders = renderGroupHeader\n ? getPlannedGroupHeadersByItemIndex(activeChunk?.groupHeaders)\n : undefined;\n const pageIndex = context?.mode === 'visible' ? context.pageIndex : 0;\n const pageCount = context?.mode === 'visible' && chunks ? chunks.length : 1;\n\n React.useEffect(() => {\n if (!isDev() || !metaDefaults || !Object.keys(metaDefaults).length || !items.length) {\n return;\n }\n\n const warningKey = `${id}:${Object.keys(metaDefaults).join('|')}`;\n if (warnedMetaDefaultsWithoutType.has(warningKey)) return;\n\n const hasResolvableType = items.some((item, index) => (\n Boolean(resolveItemType?.(item, index) ?? getItemType(item))\n ));\n if (hasResolvableType) return;\n\n warnedMetaDefaultsWithoutType.add(warningKey);\n console.warn(\n `[uhuu-components] Static.Flow \"${id}\" received metaDefaults, but no item type could be resolved. ` +\n 'Add a type field to each item or pass getItemType so defaults can be applied.'\n );\n }, [id, items, metaDefaults, resolveItemType]);\n\n return (\n <div\n className={className}\n data-uhuu-flow=\"true\"\n data-uhuu-flow-id={id}\n >\n {activeChunk?.unplaceable && (\n renderUnplaceableItem?.(activeChunk.unplaceable, { flowId: id, pageIndex, pageCount }) ?? (\n <div\n role=\"alert\"\n className=\"uhuu-flow-unplaceable\"\n data-uhuu-flow-unplaceable=\"true\"\n data-uhuu-flow-unplaceable-key={activeChunk.unplaceable.key}\n >\n Unable to fit “{activeChunk.unplaceable.key}” on a page. Reduce its height or split it.\n </div>\n )\n )}\n {visibleIndexes.map((itemIndex) => {\n const item = items[itemIndex];\n if (item === undefined) return null;\n\n const key = getKey(item, itemIndex);\n const group = itemGroups[itemIndex];\n const coreFragment = getFlowFragmentState({\n itemIndex,\n fragmentIndexes: visibleIndexes,\n fragmentIndex: fragmentPositions.get(itemIndex) ?? -1,\n groupKeys,\n pageIndex,\n pageCount,\n itemCount: items.length,\n });\n const fragment: StaticFlowFragmentContext<TItem> = {\n ...coreFragment,\n flowId: id,\n itemKey: key,\n item,\n };\n const type = resolveItemType?.(item, itemIndex) ?? (getItemType(item) as TType | undefined);\n const meta = mergeItemMeta(\n type ? metaDefaults?.[type] : undefined,\n getItemMeta?.(item, itemIndex)\n );\n const resolvedItemClassName =\n typeof itemClassName === 'function'\n ? itemClassName(item, itemIndex)\n : itemClassName;\n const hasPlannedGroupHeader = Boolean(\n group && plannedGroupHeaders?.get(itemIndex)?.has(group.key)\n );\n const shouldRenderGroupHeader = Boolean(\n group &&\n renderGroupHeader &&\n (\n hasPlannedGroupHeader || (\n !plannedGroupHeaders &&\n fragment.isFirstInGroupOnPage &&\n (fragment.isFirstInGroup || group.repeatHeader !== false)\n )\n )\n );\n const resolvedGroupHeaderClassName: string | undefined =\n typeof groupHeaderClassName === 'function'\n ? (group ? groupHeaderClassName(group, fragment) : undefined)\n : groupHeaderClassName;\n\n return (\n <React.Fragment key={key}>\n {shouldRenderGroupHeader && group && (\n <div\n className={resolvedGroupHeaderClassName}\n style={{ display: 'flow-root' }}\n data-uhuu-flow-group-header=\"true\"\n data-uhuu-flow-header-group-key={group.key}\n >\n {renderGroupHeader?.(group, fragment)}\n </div>\n )}\n <div\n className={resolvedItemClassName}\n style={{ display: 'flow-root' }}\n data-uhuu-flow-item=\"true\"\n data-uhuu-flow-key={String(key)}\n data-uhuu-flow-index={itemIndex}\n data-uhuu-flow-break-before={meta.breakBefore ? 'true' : undefined}\n data-uhuu-flow-break-after={meta.breakAfter ? 'true' : undefined}\n data-uhuu-flow-keep-with-next={serializeKeepWithNext(meta.keepWithNext)}\n data-uhuu-flow-avoid-break-inside={meta.avoidBreakInside ? 'true' : undefined}\n data-uhuu-flow-group-key={meta.groupKey}\n data-uhuu-flow-header-group-key={group?.key}\n data-uhuu-flow-header-repeat={group ? (group.repeatHeader === false ? 'false' : 'true') : undefined}\n >\n {renderItem(item, itemIndex, fragment)}\n </div>\n </React.Fragment>\n );\n })}\n </div>\n );\n}\n\nexport function FlowColumns<TItem, TType extends string = DefaultFlowItemType<TItem>>({\n id,\n items,\n layout,\n getKey,\n renderItem,\n getItemMeta,\n metaDefaults,\n getItemType: resolveItemType,\n getItemGroup,\n renderGroupHeader,\n className = '',\n itemClassName,\n groupHeaderClassName,\n renderUnplaceableItem,\n getColumnGroupProps,\n getColumnProps,\n getColumnItemProps,\n}: FlowColumnsProps<TItem, TType>) {\n validateFlowColumnLayout({ nodes: layout, itemCount: items.length });\n const context = React.useContext(StaticFlowContext);\n const chunks = context?.chunksByFlowId?.[id];\n const activeChunk = context?.mode === 'visible' && chunks\n ? chunks[context.pageIndex]\n : undefined;\n const isMeasurement = context?.mode !== 'visible';\n const pageIndex = context?.mode === 'visible' ? context.pageIndex : 0;\n const pageCount = context?.mode === 'visible' && chunks ? chunks.length : 1;\n const itemGroups = items.map((item, index) => normalizeItemGroup(getItemGroup?.(item, index)));\n const groupKeys = itemGroups.map((entry) => entry?.key);\n const columnsContext: StaticFlowColumnsRenderContext = {\n flowId: id,\n };\n\n React.useEffect(() => {\n if (!isDev() || !metaDefaults || !Object.keys(metaDefaults).length || !items.length) {\n return;\n }\n\n const warningKey = `${id}:columns:${Object.keys(metaDefaults).join('|')}`;\n if (warnedMetaDefaultsWithoutType.has(warningKey)) return;\n const hasResolvableType = items.some((item, index) => (\n Boolean(resolveItemType?.(item, index) ?? getItemType(item))\n ));\n if (hasResolvableType) return;\n\n warnedMetaDefaultsWithoutType.add(warningKey);\n console.warn(\n `[uhuu-components] Static.FlowColumns \"${id}\" received metaDefaults, but no item type could be resolved. ` +\n 'Add a type field to each item or pass getItemType so defaults can be applied.'\n );\n }, [id, items, metaDefaults, resolveItemType]);\n\n const renderUnplaceable = (\n unplaceable: StaticFlowUnplaceableItem | undefined\n ): React.ReactNode => {\n if (!unplaceable) return null;\n return renderUnplaceableItem?.(unplaceable, { flowId: id, pageIndex, pageCount }) ?? (\n <div\n role=\"alert\"\n className=\"uhuu-flow-unplaceable\"\n data-uhuu-flow-unplaceable=\"true\"\n data-uhuu-flow-unplaceable-key={unplaceable.key}\n data-uhuu-flow-column-id={unplaceable.columnId}\n >\n Unable to fit “{unplaceable.key}” on a page. Reduce its height or split it.\n </div>\n );\n };\n\n const renderIndexes = (\n rawIndexes: number[],\n plannedChunk?: StaticFlowChunk,\n resolveContainerProps?: (itemIndex: number) => StaticFlowColumnsContainerProps | undefined,\n markAsLayoutNode = false,\n sourceTrackIndexes?: number[]\n ): React.ReactNode[] => {\n const visibleIndexes = rawIndexes.filter((itemIndex) => (\n Number.isInteger(itemIndex) && itemIndex >= 0 && itemIndex < items.length\n ));\n const fragmentPositions = getFirstFragmentPositions(visibleIndexes);\n const sourceTrackPositions = sourceTrackIndexes\n ? getFirstFragmentPositions(sourceTrackIndexes)\n : undefined;\n const plannedGroupHeaders = renderGroupHeader\n ? getPlannedGroupHeadersByItemIndex(plannedChunk?.groupHeaders)\n : undefined;\n\n return visibleIndexes.map((itemIndex) => {\n const item = items[itemIndex];\n if (item === undefined) return null;\n const key = getKey(item, itemIndex);\n const group = itemGroups[itemIndex];\n const fragmentIndex = fragmentPositions.get(itemIndex) ?? -1;\n const sourceTrackPosition = sourceTrackPositions?.get(itemIndex) ?? -1;\n const coreFragment = getFlowFragmentState({\n itemIndex,\n fragmentIndexes: visibleIndexes,\n fragmentIndex,\n groupKeys,\n pageIndex,\n pageCount,\n itemCount: items.length,\n previousSourceIndex: plannedChunk?.previousSourceIndex ?? (\n sourceTrackPosition > 0 ? sourceTrackIndexes?.[sourceTrackPosition - 1] : undefined\n ),\n });\n const fragment: StaticFlowFragmentContext<TItem> = {\n ...coreFragment,\n flowId: id,\n itemKey: key,\n item,\n };\n const type = resolveItemType?.(item, itemIndex) ?? (getItemType(item) as TType | undefined);\n const meta = mergeItemMeta(\n type ? metaDefaults?.[type] : undefined,\n getItemMeta?.(item, itemIndex)\n );\n const resolvedItemClassName =\n typeof itemClassName === 'function'\n ? itemClassName(item, itemIndex)\n : itemClassName;\n const containerProps = resolveContainerProps?.(itemIndex);\n const hasPlannedGroupHeader = Boolean(\n group && plannedGroupHeaders?.get(itemIndex)?.has(group.key)\n );\n const shouldRenderGroupHeader = Boolean(\n group &&\n renderGroupHeader &&\n (\n hasPlannedGroupHeader || (\n !plannedGroupHeaders &&\n fragment.isFirstInGroupOnPage &&\n (fragment.isFirstInGroup || group.repeatHeader !== false)\n )\n )\n );\n const resolvedGroupHeaderClassName: string | undefined =\n typeof groupHeaderClassName === 'function'\n ? (group ? groupHeaderClassName(group, fragment) : undefined)\n : groupHeaderClassName;\n\n return (\n <React.Fragment key={key}>\n {shouldRenderGroupHeader && group && (\n <div\n className={resolvedGroupHeaderClassName}\n style={{ display: 'flow-root' }}\n data-uhuu-flow-group-header=\"true\"\n data-uhuu-flow-header-group-key={group.key}\n >\n {renderGroupHeader?.(group, fragment)}\n </div>\n )}\n <div\n className={[resolvedItemClassName, containerProps?.className].filter(Boolean).join(' ')}\n style={{ display: 'flow-root', ...containerProps?.style }}\n data-uhuu-flow-item=\"true\"\n data-uhuu-flow-layout-node={markAsLayoutNode ? 'item' : undefined}\n data-uhuu-flow-key={String(key)}\n data-uhuu-flow-index={itemIndex}\n data-uhuu-flow-break-before={meta.breakBefore ? 'true' : undefined}\n data-uhuu-flow-break-after={meta.breakAfter ? 'true' : undefined}\n data-uhuu-flow-keep-with-next={serializeKeepWithNext(meta.keepWithNext)}\n data-uhuu-flow-avoid-break-inside={meta.avoidBreakInside ? 'true' : undefined}\n data-uhuu-flow-group-key={meta.groupKey}\n data-uhuu-flow-header-group-key={group?.key}\n data-uhuu-flow-header-repeat={\n group ? (group.repeatHeader === false ? 'false' : 'true') : undefined\n }\n >\n {renderItem(item, itemIndex, fragment)}\n </div>\n </React.Fragment>\n );\n });\n };\n\n const sourceColumnNodes = new Map(\n layout\n .filter((node): node is Extract<StaticFlowLayoutNode, { kind: 'columns' }> => (\n node.kind === 'columns'\n ))\n .map((node) => [node.id, node])\n );\n const renderedLayout = isMeasurement\n ? layout\n : (activeChunk?.layout ?? []);\n\n return (\n <div\n className={className}\n data-uhuu-flow=\"true\"\n data-uhuu-flow-id={id}\n data-uhuu-flow-layout=\"columns\"\n >\n {renderedLayout.map((entry, layoutIndex) => {\n if (entry.kind === 'item') {\n return (\n <React.Fragment key={`item:${entry.index}:${layoutIndex}`}>\n {renderIndexes([entry.index], undefined, undefined, true)}\n </React.Fragment>\n );\n }\n if (entry.kind === 'items') {\n return (\n <React.Fragment key={`items:${layoutIndex}`}>\n {renderUnplaceable(entry.chunk.unplaceable)}\n {renderIndexes(entry.chunk.indexes, entry.chunk, undefined, true)}\n </React.Fragment>\n );\n }\n\n const sourceNode = isMeasurement\n ? (entry as Extract<StaticFlowLayoutNode, { kind: 'columns' }>)\n : sourceColumnNodes.get(entry.id);\n if (!sourceNode) return null;\n const sourceColumnsById = new Map(sourceNode.columns.map((column) => [column.id, column]));\n const renderedColumns: Array<{ id: string; chunk?: StaticFlowChunk }> = isMeasurement\n ? sourceNode.columns.map((column) => ({ id: column.id }))\n : (entry as Extract<StaticFlowLayoutFragment, { kind: 'columns' }>).columns;\n const groupProps = getColumnGroupProps?.(sourceNode, columnsContext);\n\n return (\n <div\n key={`columns:${sourceNode.id}:${layoutIndex}`}\n className={groupProps?.className}\n style={{\n display: 'flex',\n width: '100%',\n alignItems: 'flex-start',\n ...groupProps?.style,\n }}\n data-uhuu-flow-layout-node=\"columns\"\n data-uhuu-flow-layout-id={sourceNode.id}\n >\n {renderedColumns.map((renderedColumn) => {\n const sourceColumn = sourceColumnsById.get(renderedColumn.id);\n if (!sourceColumn) return null;\n const columnProps = getColumnProps?.(sourceNode, sourceColumn, columnsContext);\n const columnIndexes = renderedColumn.chunk?.indexes ?? sourceColumn.indexes;\n\n return (\n <div\n key={sourceColumn.id}\n className={columnProps?.className}\n style={{\n minWidth: 0,\n flex: '1 1 0%',\n display: 'flex',\n flexDirection: 'column',\n ...columnProps?.style,\n }}\n data-uhuu-flow-column={sourceColumn.id}\n >\n {renderUnplaceable(renderedColumn.chunk?.unplaceable)}\n {renderIndexes(\n columnIndexes,\n renderedColumn.chunk,\n (itemIndex) => getColumnItemProps?.(\n sourceNode,\n sourceColumn,\n itemIndex,\n columnsContext\n ),\n false,\n sourceColumn.indexes\n )}\n </div>\n );\n })}\n </div>\n );\n })}\n </div>\n );\n}\n","/**\n * Props that bind an element to a Uhuu edit dialog. Public API (`import { getDialogProps }\n * from 'uhuu-components'`): spread the result onto the element that renders the field, so\n * that element is the click target and the markup — and with it the print geometry — stays\n * the template's own.\n *\n * <p className=\"lead\" {...getDialogProps({ dialog: { path: 'listing.title', type: 'textarea', value } })}>\n * {title}\n * </p>\n *\n * - `data-uhuu` marks the element for the editor; `data-uhuu-type` carries `dialog.type`, so\n * CSS can tell an empty text binding from an empty image.\n * - Interactive editor: `onClick` stops propagation and opens the dialog through\n * `window.$uhuu.editDialog`.\n * - Renderer (`window.$uhuu_renderer`): the markers only, never a click handler.\n *\n * Without a dialog it returns `{}`, so spreading it for an optional binding is always safe.\n * It never returns `className`: spread props would silently replace the element's own.\n *\n * `config` is internal and not part of the public signature: the library's components pass their\n * ConfigContext for the legacy dynamic-pagination branch, which serialises the dialog into\n * `data-uhuu` for the host to reattach.\n */\nexport const getDialogProps = (props, config) => {\n const dialog = props?.dialog;\n\n if (!dialog) return {};\n\n const isRendererMode = typeof window !== 'undefined' && window.$uhuu_renderer;\n\n // Carry the dialog kind onto the element alongside `data-uhuu`. The editor keys off\n // `data-uhuu` alone, but a template has to tell an image binding from a text one to\n // style its empty state — otherwise it can only infer the kind from the absence of\n // an attribute, which is both fragile and wrong for anything that is merely blank.\n const typeMarker = dialog.type ? { 'data-uhuu-type': dialog.type } : {};\n\n if(config?.page?.paginationType === 'dynamic') return {\n ...typeMarker,\n 'data-uhuu': JSON.stringify(dialog)\n };\n\n if (isRendererMode) return {\n ...typeMarker,\n 'data-uhuu' : ''\n };\n\n return {\n onClick: (e) => {\n if (typeof window !== 'undefined' && window.$uhuu_renderer) return;\n e.stopPropagation();\n window.$uhuu?.editDialog?.(dialog);\n },\n ...typeMarker,\n 'data-uhuu' : ''\n };\n };\n","// The empty state of a text binding, shared by the components that render one (Editable,\n// Static.FlowDocument). Internal: templates address the class, not this module.\nimport type { ReactNode } from 'react';\n\n/**\n * Put on a bound text element that has nothing to show, so it stays addressable when it is\n * not literally `:empty` (a whitespace text node, an empty Flow inside it). The counterpart of\n * ImageBlock's `uhuu-image-empty`. `uhuu-indicators.css` gives it a one-line box in the editor\n * and applies no print layout rules.\n */\nexport const EMPTY_TEXT_CLASS = 'uhuu-text-empty';\n\nconst TEXT_DIALOG_TYPES = new Set(['text', 'textarea', 'markdown']);\n\nexport const isTextDialog = (dialog: unknown): boolean =>\n dialog !== null && typeof dialog === 'object' && 'type' in dialog &&\n typeof dialog.type === 'string' && TEXT_DIALOG_TYPES.has(dialog.type);\n\n/**\n * True when `node` renders nothing a reader would see: null/undefined, a boolean, a\n * whitespace-only string, or a list of those. Numbers and elements count as content —\n * an element may well render nothing, but only its caller can know that, so a wrapper\n * passes `null` rather than an element around an empty string.\n */\nexport const isEmptyContent = (node: ReactNode): boolean => {\n if (node === null || node === undefined || typeof node === 'boolean') return true;\n if (typeof node === 'string') return node.trim() === '';\n if (Array.isArray(node)) return node.every(isEmptyContent);\n return false;\n};\n","import { useContext } from \"react\";\nimport { ConfigContext } from '../config/config-provider'; // Import the ConfigContext\nimport { getDialogProps } from './dialog-props';\nimport { EMPTY_TEXT_CLASS, isEmptyContent, isTextDialog } from './empty-content';\nimport './../styles/uhuu-indicators.css';\n\n\ninterface EditableProps {\n className?: string;\n dialog?: object;\n children?: React.ReactNode;\n}\n\n/**\n * Binds its children to an edit dialog through `getDialogProps`.\n *\n * The element is rendered even when there is nothing to show: it is the only click target, so\n * a wrapper that returned null would leave an emptied field impossible to fill again. A text-bound\n * Editable whose children are empty (null, false, a whitespace-only string) is marked\n * `uhuu-text-empty`, which `uhuu-indicators.css` gives a one-line box in the editor. Templates\n * control print layout. Pass `null` rather than a renderer element around an empty string;\n * an element counts as content.\n */\nconst Editable = (props: EditableProps) => {\n const config = useContext(ConfigContext);\n // Only a text-bound element gets the marker, and the template's className is kept verbatim\n // (no class merging): a filled Editable renders exactly the markup it always did.\n const isEmpty = isTextDialog(props.dialog) && isEmptyContent(props.children);\n const className = isEmpty\n ? [props.className, EMPTY_TEXT_CLASS].filter(Boolean).join(' ')\n : props.className;\n\n return (\n <div\n className={className}\n {...getDialogProps(props, config)}\n >\n {props.children}\n </div>\n );\n};\n\nexport default Editable;\n","// Shared id/slug helpers for flow-item adapters (markdown-flow, html-flow).\n// Keeping these in one place guarantees markdownToFlowItems and htmlToFlowItems\n// produce identical, stable ids for equivalent content.\n\nexport function slugify(value) {\n return String(value ?? '')\n .replace(/[#*_`|>[\\]()]/g, '')\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '')\n .slice(0, 36);\n}\n\nexport function blockId(type, source, index, idPrefix = '') {\n const slug = slugify(source);\n return `${idPrefix}${type}-${index}-${slug || 'block'}`;\n}\n","import { blockId } from './flow-id.js';\n\nconst PAGE_BREAK_COMMENT_RE = /\\s*(page-break-before|break-before)\\s*/i;\n\n// Node type constants (avoids relying on the global Node in non-DOM contexts).\nconst ELEMENT_NODE = 1;\nconst TEXT_NODE = 3;\nconst COMMENT_NODE = 8;\n\nfunction escapeHtml(text) {\n return String(text ?? '')\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n}\n\n/**\n * Best-effort, dependency-free HTML sanitizer.\n *\n * Strips <script>/<style> elements, inline event-handler attributes (on*),\n * and javascript: URLs. This is intentionally lightweight so the library stays\n * renderer-free and adds no bundle weight. For untrusted input, pass a stronger\n * sanitizer (e.g. DOMPurify.sanitize) via FlowDocument's `sanitize` prop.\n */\nexport function sanitizeHtml(html) {\n return String(html ?? '')\n // Remove <script>/<style> blocks including their contents.\n .replace(/<(script|style)\\b[^>]*>[\\s\\S]*?<\\/\\1\\s*>/gi, '')\n // Remove any dangling/unclosed <script>/<style> open tags.\n .replace(/<\\/?(script|style)\\b[^>]*>/gi, '')\n // Remove inline event handlers: onclick=\"...\", onload='...', onerror=foo\n .replace(/\\son\\w+\\s*=\\s*\"[^\"]*\"/gi, '')\n .replace(/\\son\\w+\\s*=\\s*'[^']*'/gi, '')\n .replace(/\\son\\w+\\s*=\\s*[^\\s>]+/gi, '')\n // Remove javascript: URLs in href/src/xlink:href.\n .replace(/\\s(href|src|xlink:href)\\s*=\\s*\"javascript:[^\"]*\"/gi, '')\n .replace(/\\s(href|src|xlink:href)\\s*=\\s*'javascript:[^']*'/gi, '');\n}\n\n/**\n * Parse an HTML string into flat block tokens using the browser's native parser.\n *\n * Each top-level element becomes an `element` token; significant top-level text\n * becomes a `text` token; recognized page-break comments become `break` tokens.\n * Returns [] when no DOM is available (SSR / tests inject `parseHtml` instead).\n */\nfunction parseHtmlToTokens(html, breakComment) {\n if (typeof document === 'undefined') return [];\n\n const template = document.createElement('template');\n template.innerHTML = String(html ?? '');\n\n const tokens = [];\n\n template.content.childNodes.forEach((node) => {\n if (node.nodeType === COMMENT_NODE) {\n if (breakComment.test(node.textContent ?? '')) {\n tokens.push({ kind: 'break' });\n }\n return;\n }\n\n if (node.nodeType === TEXT_NODE) {\n const text = (node.textContent ?? '').trim();\n if (text) tokens.push({ kind: 'text', html: escapeHtml(text), text });\n return;\n }\n\n if (node.nodeType === ELEMENT_NODE) {\n const element = node;\n const breakBefore = element.hasAttribute('data-flow-break-before');\n const breakAfter = element.hasAttribute('data-flow-break-after');\n // The break markers are control hints, not output; strip them so they do\n // not leak into the rendered item html.\n element.removeAttribute('data-flow-break-before');\n element.removeAttribute('data-flow-break-after');\n\n tokens.push({\n kind: 'element',\n type: element.tagName.toLowerCase(),\n html: element.outerHTML,\n text: element.textContent ?? '',\n breakBefore,\n breakAfter,\n });\n }\n });\n\n return tokens;\n}\n\nfunction tokensToItems(tokens, options) {\n const idPrefix = options.idPrefix ?? '';\n const items = [];\n let breakBeforeNext = false;\n\n for (const token of tokens) {\n if (!token || token.kind === 'break') {\n breakBeforeNext = true;\n continue;\n }\n\n const type = token.type ?? 'text';\n const html = token.html ?? '';\n if (!html) continue;\n\n items.push({\n id: blockId(type, token.text ?? html, items.length, idPrefix),\n type,\n html,\n breakBefore: breakBeforeNext || Boolean(token.breakBefore),\n });\n\n // A break-after on this element is expressed as a break-before on the next\n // item, so the item shape stays parallel to markdownToFlowItems.\n breakBeforeNext = Boolean(token.breakAfter);\n }\n\n return items;\n}\n\n/**\n * Convert an HTML string into explicit Static.Flow items.\n *\n * Mirrors markdownToFlowItems: top-level blocks become items the flow algorithm\n * can move between pages. Splitting is block-level only — a single oversized\n * element (huge table, long list) is one item and will not split line-by-line.\n *\n * @param {string} html\n * @param {{ idPrefix?: string, breakComment?: RegExp, parseHtml?: (html: string) => Array }} [options]\n * @returns {Array<{ id: string, type: string, html: string, breakBefore: boolean }>}\n */\nexport function htmlToFlowItems(html = '', options = {}) {\n const breakComment = options.breakComment ?? PAGE_BREAK_COMMENT_RE;\n const parse = options.parseHtml ?? ((source) => parseHtmlToTokens(source, breakComment));\n const tokens = parse(html);\n return tokensToItems(Array.isArray(tokens) ? tokens : [], options);\n}\n","import * as React from 'react';\nimport { isDev } from '../utility/is-dev';\nimport Editable from '../editable/editable';\nimport { EMPTY_TEXT_CLASS, isTextDialog } from '../editable/empty-content';\nimport { FlowPage, Flow, type StaticFlowItemMeta } from './flow-static';\nimport { htmlToFlowItems, sanitizeHtml } from './html-flow';\n\nexport type HtmlFlowItem = {\n id: string;\n type: string;\n html: string;\n breakBefore: boolean;\n};\n\ntype FlowDocumentEditable = {\n path: string;\n type?: string;\n [key: string]: unknown;\n};\n\ntype FlowDocumentProps = {\n /** Rendered HTML to paginate. Convert markdown/Notion to HTML before passing. */\n html: string;\n header?: React.ReactNode;\n footer?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n flowAreaClassName?: string;\n flowAreaStyle?: React.CSSProperties;\n /** Stable flow id within the page. Defaults to \"flow-document\". */\n id?: string;\n idPrefix?: string;\n flowClassName?: string;\n itemClassName?: string | ((item: HtmlFlowItem, index: number) => string | undefined);\n /** Per-tag break metadata. Merged over the built-in defaults (shallow, by tag). */\n metaDefaults?: Partial<Record<string, StaticFlowItemMeta>>;\n getItemMeta?: (item: HtmlFlowItem, index: number) => StaticFlowItemMeta | undefined;\n /** Override the default sanitized-HTML renderer (e.g. to map HTML to React). */\n renderItem?: (item: HtmlFlowItem, index: number) => React.ReactNode;\n /**\n * HTML sanitizer applied by the default renderer. Defaults to the built-in\n * best-effort sanitizer. Pass DOMPurify.sanitize for stronger guarantees, or\n * `false` to opt out for trusted HTML (dev-warns once).\n */\n sanitize?: ((html: string) => string) | false;\n /** When set, wraps the flow body in <Editable dialog={editable}> for click-to-edit. */\n editable?: FlowDocumentEditable;\n /** Injectable parser (SSR/tests). Defaults to the DOM-based parser. */\n parseHtml?: (html: string) => unknown[];\n};\n\n// Block-level break defaults keyed by tag name. Headings stay with the block\n// that follows them; container elements try to move as a whole.\nconst DEFAULT_META_DEFAULTS: Record<string, StaticFlowItemMeta> = {\n h1: { keepWithNext: 1 },\n h2: { keepWithNext: 1 },\n h3: { keepWithNext: 1 },\n h4: { keepWithNext: 1 },\n h5: { keepWithNext: 1 },\n h6: { keepWithNext: 1 },\n table: { avoidBreakInside: true },\n ul: { avoidBreakInside: true },\n ol: { avoidBreakInside: true },\n pre: { avoidBreakInside: true },\n blockquote: { avoidBreakInside: true },\n figure: { avoidBreakInside: true },\n img: { avoidBreakInside: true },\n};\n\nlet warnedSanitizeDisabled = false;\n\nfunction useSanitizer(sanitize: FlowDocumentProps['sanitize']): (html: string) => string {\n return React.useMemo(() => {\n if (sanitize === false) {\n if (isDev() && !warnedSanitizeDisabled) {\n warnedSanitizeDisabled = true;\n console.warn(\n '[uhuu-components] Static.FlowDocument sanitize is disabled. ' +\n 'Only pass sanitize={false} for trusted HTML.'\n );\n }\n return (html: string) => html;\n }\n\n return typeof sanitize === 'function' ? sanitize : sanitizeHtml;\n }, [sanitize]);\n}\n\n/**\n * Batteries-included flow page for an HTML body.\n *\n * Splits `html` into block-level Static.Flow items, applies sensible break\n * metadata, and renders them inside a height-constrained FlowPage so PageEditor\n * can create render-only continuation pages. The page chrome (header/footer),\n * the optional Editable wrapper, pagination, numbering, and print filtering all\n * stay React-driven — only the variable body is injected as HTML.\n */\nexport function FlowDocument({\n html,\n header,\n footer,\n className = '',\n style,\n flowAreaClassName = '',\n flowAreaStyle,\n id = 'flow-document',\n idPrefix,\n flowClassName = 'w-full',\n itemClassName,\n metaDefaults,\n getItemMeta,\n renderItem,\n sanitize,\n editable,\n parseHtml,\n}: FlowDocumentProps) {\n const items = React.useMemo(\n () => htmlToFlowItems(html, { idPrefix, parseHtml }) as HtmlFlowItem[],\n [html, idPrefix, parseHtml]\n );\n\n const mergedMetaDefaults = React.useMemo(\n () => ({ ...DEFAULT_META_DEFAULTS, ...(metaDefaults ?? {}) }),\n [metaDefaults]\n );\n\n const sanitizer = useSanitizer(sanitize);\n\n const resolveItemMeta = React.useCallback(\n (item: HtmlFlowItem, index: number): StaticFlowItemMeta => ({\n breakBefore: item.breakBefore,\n ...(getItemMeta?.(item, index) ?? {}),\n }),\n [getItemMeta]\n );\n\n const resolveRenderItem = React.useCallback(\n (item: HtmlFlowItem, index: number): React.ReactNode => {\n if (renderItem) return renderItem(item, index);\n return (\n <div\n className=\"uhuu-flow-html-block\"\n dangerouslySetInnerHTML={{ __html: sanitizer(item.html) }}\n />\n );\n },\n [renderItem, sanitizer]\n );\n\n const flow = (\n <Flow\n id={id}\n items={items}\n getKey={(item) => item.id}\n className={flowClassName}\n itemClassName={itemClassName}\n metaDefaults={mergedMetaDefaults}\n getItemMeta={resolveItemMeta}\n renderItem={resolveRenderItem}\n />\n );\n\n // An empty body still renders its (empty) Flow, so Editable sees an element and cannot tell\n // the binding is blank. Mark it here, or an emptied document body is a zero-height region\n // that can no longer be clicked to fill it again.\n return (\n <FlowPage\n className={className}\n style={style}\n flowAreaClassName={flowAreaClassName}\n flowAreaStyle={flowAreaStyle}\n header={header}\n footer={footer}\n >\n {editable ? (\n <Editable dialog={editable} className={!items.length && isTextDialog(editable) ? EMPTY_TEXT_CLASS : undefined}>\n {flow}\n </Editable>\n ) : (\n flow\n )}\n </FlowPage>\n );\n}\n\nexport default FlowDocument;\n","import { blockId } from './flow-id.js';\n\nconst PAGE_BREAK_COMMENT_RE = /<!--\\s*(page-break-before|break-before)\\s*-->/i;\nconst REFERENCE_DEFINITION_RE = /^\\s*\\[[^\\]]+\\]:\\s+\\S+/;\nconst STANDALONE_IMAGE_RE = /^\\s*!\\[[^\\]]*]\\([^)]+\\)\\s*$/;\n\nfunction isBlank(line) {\n return line.trim() === '';\n}\n\nfunction isHeading(line) {\n return /^#{1,6}\\s+/.test(line.trim());\n}\n\nfunction isListStart(line) {\n return /^(\\s*)([-*+]|\\d+[.)])\\s+/.test(line);\n}\n\nfunction isFence(line) {\n return /^(```|~~~)/.test(line.trim());\n}\n\nfunction isRule(line) {\n return /^([-*_])(?:\\s*\\1){2,}\\s*$/.test(line.trim());\n}\n\nfunction isTableStart(lines, index) {\n const current = lines[index]?.trim() ?? '';\n const next = lines[index + 1]?.trim() ?? '';\n return current.includes('|') && /^\\|?\\s*:?-{3,}:?\\s*(\\|\\s*:?-{3,}:?\\s*)+\\|?$/.test(next);\n}\n\nfunction isPageBreakComment(line) {\n return PAGE_BREAK_COMMENT_RE.test(line.trim());\n}\n\nfunction isReferenceDefinition(line) {\n return REFERENCE_DEFINITION_RE.test(line);\n}\n\nfunction splitLongParagraph(markdown, maxLength) {\n if (!maxLength || markdown.length <= maxLength) return [markdown];\n\n const words = markdown.split(/\\s+/).filter(Boolean);\n const parts = [];\n let current = '';\n\n for (const word of words) {\n const next = current ? `${current} ${word}` : word;\n if (current && next.length > maxLength) {\n parts.push(current);\n current = word;\n } else {\n current = next;\n }\n }\n\n if (current) parts.push(current);\n return parts.length ? parts : [markdown];\n}\n\nfunction appendReferenceDefinitions(markdown, referenceDefinitions) {\n if (!referenceDefinitions.length) return markdown;\n return `${markdown}\\n\\n${referenceDefinitions.join('\\n')}`;\n}\n\nfunction pushBlock(blocks, type, lines, breakBefore, options, referenceDefinitions) {\n const rawMarkdown = lines.join('\\n').trim();\n if (!rawMarkdown) return false;\n\n const maxParagraphLength = Number.isFinite(options.maxParagraphLength)\n ? Math.max(0, Math.floor(options.maxParagraphLength))\n : 0;\n const parts = type === 'paragraph'\n ? splitLongParagraph(rawMarkdown, maxParagraphLength)\n : [rawMarkdown];\n\n for (let partIndex = 0; partIndex < parts.length; partIndex += 1) {\n const part = parts[partIndex];\n const markdown = appendReferenceDefinitions(part, referenceDefinitions);\n blocks.push({\n id: blockId(type, part, blocks.length, options.idPrefix ?? ''),\n type,\n markdown,\n breakBefore: partIndex === 0 ? breakBefore : false,\n });\n }\n\n return true;\n}\n\n/**\n * Convert markdown into explicit Static.Flow items.\n *\n * This is intentionally a lightweight block splitter, not a markdown parser.\n * Templates keep rendering markdown with their own renderer.\n */\nexport function markdownToFlowItems(markdown = '', options = {}) {\n const normalizedMarkdown = String(markdown ?? '').replace(/\\r\\n/g, '\\n');\n const allLines = normalizedMarkdown.split('\\n');\n const referenceDefinitions = [];\n const lines = [];\n\n for (const line of allLines) {\n if (isReferenceDefinition(line)) {\n referenceDefinitions.push(line);\n } else {\n lines.push(line);\n }\n }\n\n const blocks = [];\n let index = 0;\n let breakBeforeNext = false;\n\n while (index < lines.length) {\n if (isBlank(lines[index])) {\n index += 1;\n continue;\n }\n\n if (isPageBreakComment(lines[index])) {\n breakBeforeNext = true;\n index += 1;\n continue;\n }\n\n const start = index;\n let type = 'paragraph';\n\n if (isFence(lines[index])) {\n type = 'code';\n const fence = lines[index].trim().slice(0, 3);\n index += 1;\n while (index < lines.length && !lines[index].trim().startsWith(fence)) {\n index += 1;\n }\n if (index < lines.length) index += 1;\n } else if (isHeading(lines[index])) {\n type = 'heading';\n index += 1;\n } else if (isRule(lines[index])) {\n type = 'rule';\n index += 1;\n } else if (STANDALONE_IMAGE_RE.test(lines[index])) {\n type = 'image';\n index += 1;\n } else if (isTableStart(lines, index)) {\n type = 'table';\n index += 2;\n while (index < lines.length && lines[index].includes('|') && !isBlank(lines[index])) {\n index += 1;\n }\n } else if (isListStart(lines[index])) {\n type = 'list';\n index += 1;\n while (index < lines.length && !isBlank(lines[index])) {\n index += 1;\n }\n } else if (lines[index].trim().startsWith('>')) {\n type = 'quote';\n index += 1;\n while (index < lines.length && lines[index].trim().startsWith('>')) {\n index += 1;\n }\n } else {\n index += 1;\n while (\n index < lines.length &&\n !isBlank(lines[index]) &&\n !isHeading(lines[index]) &&\n !isFence(lines[index]) &&\n !isRule(lines[index]) &&\n !STANDALONE_IMAGE_RE.test(lines[index]) &&\n !isTableStart(lines, index) &&\n !isListStart(lines[index]) &&\n !lines[index].trim().startsWith('>') &&\n !isPageBreakComment(lines[index])\n ) {\n index += 1;\n }\n }\n\n if (pushBlock(blocks, type, lines.slice(start, index), breakBeforeNext, options, referenceDefinitions)) {\n breakBeforeNext = false;\n }\n }\n\n return blocks;\n}\n","import React, { CSSProperties, ReactNode, forwardRef, useContext, useEffect, useRef } from 'react';\nimport { ConfigContext } from '../config/config-provider';\nimport Sheet from './sheet-static';\nimport { resolveBinding } from './spread-core';\nimport type { BindingConfig, CoverPanelSide, CoverSheetKind, ResolvedBinding } from './spread-core';\nimport { isDev } from '../utility/is-dev';\n\nexport interface CoverSpreadOverlayArgs {\n pageNo: number;\n side: CoverPanelSide;\n sheet: CoverSheetKind;\n}\n\nexport interface CoverSpreadProps {\n /** `outer` = back cover · spine · front cover. `inner` = inside front · blank spine + glue · inside back. */\n sheet: CoverSheetKind;\n /** Left panel content (back cover on the outer sheet, inside front cover on the inner sheet). */\n left: ReactNode;\n /** Right panel content (front cover on the outer sheet, inside back cover on the inner sheet). */\n right: ReactNode;\n /** Spine artwork. Rendered on the outer sheet only; the inner spine is always blank paper. */\n spine?: ReactNode;\n /** Original document page numbers `[left, right]`, forwarded to `overlay`. */\n pageNo?: [number, number];\n overlay?: (args: CoverSpreadOverlayArgs) => ReactNode;\n /** Overrides `binding` from the surrounding `Static.Pagination` setup. */\n binding?: BindingConfig | null;\n /** Show the hatched spine/glue guides and each panel's bleed outline (screen only). Falls back to the Pagination setup. */\n showBleed?: boolean;\n className?: string;\n style?: CSSProperties;\n leftClassName?: string;\n rightClassName?: string;\n leftPageKey?: string;\n rightPageKey?: string;\n}\n\nconst formatMm = (value: number) => `${Number(value.toFixed(4))}mm`;\n\nfunction useMissingBindingWarning(sheet: CoverSheetKind, binding: ResolvedBinding | null) {\n const warned = useRef(false);\n useEffect(() => {\n if (binding || warned.current || !isDev()) return;\n warned.current = true;\n console.warn(\n `[uhuu-components] Static.CoverSpread sheet=\"${sheet}\" rendered without a perfect binding. ` +\n 'Pass binding={{ spine, glue }} on the Pagination setup (or the binding prop) to compose a cover spread. ' +\n 'Rendering the two panels as plain sheets instead.'\n );\n }, [sheet, binding]);\n}\n\n/**\n * One physical cover sheet of a perfect-bound product: two ordinary `Static.Sheet`\n * panels clipped at the spine, plus the spine strip and (inner sheet) the glue\n * masks. Geometry comes from `pageFormat.binding` via `Static.Pagination`; the\n * sheet size itself is driven by the `--uhuu-sheet-*` root vars so `@page`\n * prints it at the printer's size. See docs/printer-cover-spine-support.md §6.3.\n */\nexport const CoverSpread = forwardRef<HTMLDivElement, CoverSpreadProps>(function CoverSpread(\n {\n sheet,\n left,\n right,\n spine,\n pageNo,\n overlay,\n binding: bindingProp,\n showBleed,\n className = '',\n style,\n leftClassName = '',\n rightClassName = '',\n leftPageKey,\n rightPageKey,\n },\n ref\n) {\n const config = useContext(ConfigContext) as any;\n const binding: ResolvedBinding | null =\n bindingProp !== undefined ? resolveBinding(bindingProp) : (config?.page?.binding ?? null);\n const guides = showBleed ?? config?.page?.showBleed ?? false;\n const [leftNo, rightNo] = pageNo ?? [0, 0];\n\n useMissingBindingWarning(sheet, binding);\n\n const panelOverlay = (side: CoverPanelSide) =>\n overlay ? ({ pageNo: no }: { pageNo: number }) => overlay({ pageNo: no, side, sheet }) : undefined;\n\n const leftSheet = (\n <Sheet\n className={`uhuu-page-sheet--panel ${leftClassName}`.trim()}\n pageNo={leftNo}\n overlay={panelOverlay('left')}\n showBleed={guides}\n data-page-key={leftPageKey}\n >\n {left}\n </Sheet>\n );\n\n const rightSheet = (\n <Sheet\n className={`uhuu-page-sheet--panel ${rightClassName}`.trim()}\n pageNo={rightNo}\n overlay={panelOverlay('right')}\n showBleed={guides}\n data-page-key={rightPageKey}\n >\n {right}\n </Sheet>\n );\n\n // No spine to compose around: degrade to the two plain cover pages so the\n // document still renders (and prints) at the single-page size.\n if (!binding) {\n return (\n <>\n {leftSheet}\n {rightSheet}\n </>\n );\n }\n\n const blank = sheet === 'inner';\n const showGlue = blank && binding.glue > 0;\n\n return (\n <div\n ref={ref}\n className={`uhuu-page-sheet uhuu-cover-spread ${className}`.trim()}\n style={style}\n data-sheet={sheet}\n data-spine={binding.spine}\n data-glue={binding.glue}\n >\n <div className=\"uhuu-spread-panel\" data-side=\"left\">\n {leftSheet}\n </div>\n\n <div className=\"uhuu-spread-spine\" data-blank={blank ? 'true' : 'false'}>\n {!blank && spine}\n {guides && (\n <div\n className=\"uhuu-spread-guide\"\n data-label={`spine ${formatMm(binding.spine)}${blank ? ' · blank' : ''}`}\n />\n )}\n </div>\n\n <div className=\"uhuu-spread-panel\" data-side=\"right\">\n {rightSheet}\n </div>\n\n {showGlue &&\n (['left', 'right'] as const).map((side) => (\n <div key={side} className=\"uhuu-glue-zone\" data-side={side}>\n {guides && <div className=\"uhuu-spread-guide\" data-label={`glue ${formatMm(binding.glue)}`} />}\n </div>\n ))}\n </div>\n );\n});\n\nexport default CoverSpread;\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * Concatenates two arrays faster than the array spread operator.\n */\nconst concatArrays = (array1, array2) => {\n // Pre-allocate for better V8 optimization\n const combinedArray = new Array(array1.length + array2.length);\n for (let i = 0; i < array1.length; i++) {\n combinedArray[i] = array1[i];\n }\n for (let i = 0; i < array2.length; i++) {\n combinedArray[array1.length + i] = array2[i];\n }\n return combinedArray;\n};\n\n// Factory function ensures consistent object shapes\nconst createClassValidatorObject = (classGroupId, validator) => ({\n classGroupId,\n validator\n});\n// Factory ensures consistent ClassPartObject shape\nconst createClassPartObject = (nextPart = new Map(), validators = null, classGroupId) => ({\n nextPart,\n validators,\n classGroupId\n});\nconst CLASS_PART_SEPARATOR = '-';\nconst EMPTY_CONFLICTS = [];\n// I use two dots here because one dot is used as prefix for class groups in plugins\nconst ARBITRARY_PROPERTY_PREFIX = 'arbitrary..';\nconst createClassGroupUtils = config => {\n const classMap = createClassMap(config);\n const {\n conflictingClassGroups,\n conflictingClassGroupModifiers\n } = config;\n const getClassGroupId = className => {\n if (className.startsWith('[') && className.endsWith(']')) {\n return getGroupIdForArbitraryProperty(className);\n }\n const classParts = className.split(CLASS_PART_SEPARATOR);\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and skip it.\n const startIndex = classParts[0] === '' && classParts.length > 1 ? 1 : 0;\n return getGroupRecursive(classParts, startIndex, classMap);\n };\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n if (hasPostfixModifier) {\n const modifierConflicts = conflictingClassGroupModifiers[classGroupId];\n const baseConflicts = conflictingClassGroups[classGroupId];\n if (modifierConflicts) {\n if (baseConflicts) {\n // Merge base conflicts with modifier conflicts\n return concatArrays(baseConflicts, modifierConflicts);\n }\n // Only modifier conflicts\n return modifierConflicts;\n }\n // Fall back to without postfix if no modifier conflicts\n return baseConflicts || EMPTY_CONFLICTS;\n }\n return conflictingClassGroups[classGroupId] || EMPTY_CONFLICTS;\n };\n return {\n getClassGroupId,\n getConflictingClassGroupIds\n };\n};\nconst getGroupRecursive = (classParts, startIndex, classPartObject) => {\n const classPathsLength = classParts.length - startIndex;\n if (classPathsLength === 0) {\n return classPartObject.classGroupId;\n }\n const currentClassPart = classParts[startIndex];\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n if (nextClassPartObject) {\n const result = getGroupRecursive(classParts, startIndex + 1, nextClassPartObject);\n if (result) return result;\n }\n const validators = classPartObject.validators;\n if (validators === null) {\n return undefined;\n }\n // Build classRest string efficiently by joining from startIndex onwards\n const classRest = startIndex === 0 ? classParts.join(CLASS_PART_SEPARATOR) : classParts.slice(startIndex).join(CLASS_PART_SEPARATOR);\n const validatorsLength = validators.length;\n for (let i = 0; i < validatorsLength; i++) {\n const validatorObj = validators[i];\n if (validatorObj.validator(classRest)) {\n return validatorObj.classGroupId;\n }\n }\n return undefined;\n};\n/**\n * Get the class group ID for an arbitrary property.\n *\n * @param className - The class name to get the group ID for. Is expected to be string starting with `[` and ending with `]`.\n */\nconst getGroupIdForArbitraryProperty = className => className.slice(1, -1).indexOf(':') === -1 ? undefined : (() => {\n const content = className.slice(1, -1);\n const colonIndex = content.indexOf(':');\n const property = content.slice(0, colonIndex);\n return property ? ARBITRARY_PROPERTY_PREFIX + property : undefined;\n})();\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n const {\n theme,\n classGroups\n } = config;\n return processClassGroups(classGroups, theme);\n};\n// Split into separate functions to maintain monomorphic call sites\nconst processClassGroups = (classGroups, theme) => {\n const classMap = createClassPartObject();\n for (const classGroupId in classGroups) {\n const group = classGroups[classGroupId];\n processClassesRecursively(group, classMap, classGroupId, theme);\n }\n return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n const len = classGroup.length;\n for (let i = 0; i < len; i++) {\n const classDefinition = classGroup[i];\n processClassDefinition(classDefinition, classPartObject, classGroupId, theme);\n }\n};\n// Split into separate functions for each type to maintain monomorphic call sites\nconst processClassDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (typeof classDefinition === 'string') {\n processStringDefinition(classDefinition, classPartObject, classGroupId);\n return;\n }\n if (typeof classDefinition === 'function') {\n processFunctionDefinition(classDefinition, classPartObject, classGroupId, theme);\n return;\n }\n processObjectDefinition(classDefinition, classPartObject, classGroupId, theme);\n};\nconst processStringDefinition = (classDefinition, classPartObject, classGroupId) => {\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n};\nconst processFunctionDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n if (classPartObject.validators === null) {\n classPartObject.validators = [];\n }\n classPartObject.validators.push(createClassValidatorObject(classGroupId, classDefinition));\n};\nconst processObjectDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n const entries = Object.entries(classDefinition);\n const len = entries.length;\n for (let i = 0; i < len; i++) {\n const [key, value] = entries[i];\n processClassesRecursively(value, getPart(classPartObject, key), classGroupId, theme);\n }\n};\nconst getPart = (classPartObject, path) => {\n let current = classPartObject;\n const parts = path.split(CLASS_PART_SEPARATOR);\n const len = parts.length;\n for (let i = 0; i < len; i++) {\n const part = parts[i];\n let next = current.nextPart.get(part);\n if (!next) {\n next = createClassPartObject();\n current.nextPart.set(part, next);\n }\n current = next;\n }\n return current;\n};\n// Type guard maintains monomorphic check\nconst isThemeGetter = func => 'isThemeGetter' in func && func.isThemeGetter === true;\n\n// LRU cache implementation using plain objects for simplicity\nconst createLruCache = maxCacheSize => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {}\n };\n }\n let cacheSize = 0;\n let cache = Object.create(null);\n let previousCache = Object.create(null);\n const update = (key, value) => {\n cache[key] = value;\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = Object.create(null);\n }\n };\n return {\n get(key) {\n let value = cache[key];\n if (value !== undefined) {\n return value;\n }\n if ((value = previousCache[key]) !== undefined) {\n update(key, value);\n return value;\n }\n },\n set(key, value) {\n if (key in cache) {\n cache[key] = value;\n } else {\n update(key, value);\n }\n }\n };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst MODIFIER_SEPARATOR = ':';\nconst EMPTY_MODIFIERS = [];\n// Pre-allocated result object shape for consistency\nconst createResultObject = (modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition, isExternal) => ({\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n isExternal\n});\nconst createParseClassName = config => {\n const {\n prefix,\n experimentalParseClassName\n } = config;\n /**\n * Parse class name into parts.\n *\n * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n */\n let parseClassName = className => {\n // Use simple array with push for better performance\n const modifiers = [];\n let bracketDepth = 0;\n let parenDepth = 0;\n let modifierStart = 0;\n let postfixModifierPosition;\n const len = className.length;\n for (let index = 0; index < len; index++) {\n const currentCharacter = className[index];\n if (bracketDepth === 0 && parenDepth === 0) {\n if (currentCharacter === MODIFIER_SEPARATOR) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + 1;\n continue;\n }\n if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') bracketDepth++;else if (currentCharacter === ']') bracketDepth--;else if (currentCharacter === '(') parenDepth++;else if (currentCharacter === ')') parenDepth--;\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.slice(modifierStart);\n // Inline important modifier check\n let baseClassName = baseClassNameWithImportantModifier;\n let hasImportantModifier = false;\n if (baseClassNameWithImportantModifier.endsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(0, -1);\n hasImportantModifier = true;\n } else if (\n /**\n * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n */\n baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(1);\n hasImportantModifier = true;\n }\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return createResultObject(modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition);\n };\n if (prefix) {\n const fullPrefix = prefix + MODIFIER_SEPARATOR;\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => className.startsWith(fullPrefix) ? parseClassNameOriginal(className.slice(fullPrefix.length)) : createResultObject(EMPTY_MODIFIERS, false, className, undefined, true);\n }\n if (experimentalParseClassName) {\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => experimentalParseClassName({\n className,\n parseClassName: parseClassNameOriginal\n });\n }\n return parseClassName;\n};\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst createSortModifiers = config => {\n // Pre-compute weights for all known modifiers for O(1) comparison\n const modifierWeights = new Map();\n // Assign weights to sensitive modifiers (highest priority, but preserve order)\n config.orderSensitiveModifiers.forEach((mod, index) => {\n modifierWeights.set(mod, 1000000 + index); // High weights for sensitive mods\n });\n return modifiers => {\n const result = [];\n let currentSegment = [];\n // Process modifiers in one pass\n for (let i = 0; i < modifiers.length; i++) {\n const modifier = modifiers[i];\n // Check if modifier is sensitive (starts with '[' or in orderSensitiveModifiers)\n const isArbitrary = modifier[0] === '[';\n const isOrderSensitive = modifierWeights.has(modifier);\n if (isArbitrary || isOrderSensitive) {\n // Sort and flush current segment alphabetically\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n currentSegment = [];\n }\n result.push(modifier);\n } else {\n // Regular modifier - add to current segment for batch sorting\n currentSegment.push(modifier);\n }\n }\n // Sort and add any remaining segment items\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n }\n return result;\n };\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n sortModifiers: createSortModifiers(config),\n postfixLookupClassGroupIds: createPostfixLookupClassGroupIds(config),\n ...createClassGroupUtils(config)\n});\nconst createPostfixLookupClassGroupIds = config => {\n const lookup = Object.create(null);\n const classGroupIds = config.postfixLookupClassGroups;\n if (classGroupIds) {\n for (let i = 0; i < classGroupIds.length; i++) {\n lookup[classGroupIds[i]] = true;\n }\n }\n return lookup;\n};\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds,\n sortModifiers,\n postfixLookupClassGroupIds\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n isExternal,\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n if (isExternal) {\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n let hasPostfixModifier = !!maybePostfixModifierPosition;\n let classGroupId;\n if (hasPostfixModifier) {\n const baseClassNameWithoutPostfix = baseClassName.substring(0, maybePostfixModifierPosition);\n classGroupId = getClassGroupId(baseClassNameWithoutPostfix);\n const classGroupIdWithPostfix = classGroupId && postfixLookupClassGroupIds[classGroupId] ? getClassGroupId(baseClassName) : undefined;\n if (classGroupIdWithPostfix && classGroupIdWithPostfix !== classGroupId) {\n classGroupId = classGroupIdWithPostfix;\n hasPostfixModifier = false;\n }\n } else {\n classGroupId = getClassGroupId(baseClassName);\n }\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n hasPostfixModifier = false;\n }\n // Fast path: skip sorting for empty or single modifier\n const variantModifier = modifiers.length === 0 ? '' : modifiers.length === 1 ? modifiers[0] : sortModifiers(modifiers).join(':');\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n const classId = modifierId + classGroupId;\n if (classGroupsInConflict.indexOf(classId) > -1) {\n // Tailwind class omitted due to conflict\n continue;\n }\n classGroupsInConflict.push(classId);\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i];\n classGroupsInConflict.push(modifierId + group);\n }\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n }\n return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nconst twJoin = (...classLists) => {\n let index = 0;\n let argument;\n let resolvedValue;\n let string = '';\n while (index < classLists.length) {\n if (argument = classLists[index++]) {\n if (resolvedValue = toValue(argument)) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst toValue = mix => {\n // Fast path for strings\n if (typeof mix === 'string') {\n return mix;\n }\n let resolvedValue;\n let string = '';\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst createTailwindMerge = (createConfigFirst, ...createConfigRest) => {\n let configUtils;\n let cacheGet;\n let cacheSet;\n let functionToCall;\n const initTailwindMerge = classList => {\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n };\n const tailwindMerge = classList => {\n const cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n const result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n };\n functionToCall = initTailwindMerge;\n return (...args) => functionToCall(twJoin(...args));\n};\nconst fallbackThemeArr = [];\nconst fromTheme = key => {\n const themeGetter = theme => theme[key] || fallbackThemeArr;\n themeGetter.isThemeGetter = true;\n themeGetter.themeKey = key;\n return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i;\nconst arbitraryVariableRegex = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i;\nconst fractionRegex = /^\\d+(?:\\.\\d+)?\\/\\d+(?:\\.\\d+)?$/;\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix|color|light-dark)\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isFraction = value => fractionRegex.test(value);\nconst isNumber = value => !!value && !Number.isNaN(Number(value));\nconst isInteger = value => !!value && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst isAny = () => true;\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst isAnyNonArbitrary = value => !isArbitraryValue(value) && !isArbitraryVariable(value);\nconst isNamedContainerQuery = value => value.startsWith('@container') && (value[10] === '/' && value[11] !== undefined || value[11] === 's' && value[16] !== undefined && value.startsWith('-size/', 10) || value[11] === 'n' && value[18] !== undefined && value.startsWith('-normal/', 10));\nconst isArbitrarySize = value => getIsArbitraryValue(value, isLabelSize, isNever);\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, isLabelLength, isLengthOnly);\nconst isArbitraryNumber = value => getIsArbitraryValue(value, isLabelNumber, isNumber);\nconst isArbitraryWeight = value => getIsArbitraryValue(value, isLabelWeight, isAny);\nconst isArbitraryFamilyName = value => getIsArbitraryValue(value, isLabelFamilyName, isNever);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, isLabelPosition, isNever);\nconst isArbitraryImage = value => getIsArbitraryValue(value, isLabelImage, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, isLabelShadow, isShadow);\nconst isArbitraryVariable = value => arbitraryVariableRegex.test(value);\nconst isArbitraryVariableLength = value => getIsArbitraryVariable(value, isLabelLength);\nconst isArbitraryVariableFamilyName = value => getIsArbitraryVariable(value, isLabelFamilyName);\nconst isArbitraryVariablePosition = value => getIsArbitraryVariable(value, isLabelPosition);\nconst isArbitraryVariableSize = value => getIsArbitraryVariable(value, isLabelSize);\nconst isArbitraryVariableImage = value => getIsArbitraryVariable(value, isLabelImage);\nconst isArbitraryVariableShadow = value => getIsArbitraryVariable(value, isLabelShadow, true);\nconst isArbitraryVariableWeight = value => getIsArbitraryVariable(value, isLabelWeight, true);\n// Helpers\nconst getIsArbitraryValue = (value, testLabel, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) => {\n const result = arbitraryVariableRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return shouldMatchNoLabel;\n }\n return false;\n};\n// Labels\nconst isLabelPosition = label => label === 'position' || label === 'percentage';\nconst isLabelImage = label => label === 'image' || label === 'url';\nconst isLabelSize = label => label === 'length' || label === 'size' || label === 'bg-size';\nconst isLabelLength = label => label === 'length';\nconst isLabelNumber = label => label === 'number';\nconst isLabelFamilyName = label => label === 'family-name';\nconst isLabelWeight = label => label === 'number' || label === 'weight';\nconst isLabelShadow = label => label === 'shadow';\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isAnyNonArbitrary,\n isArbitraryFamilyName,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isArbitraryVariable,\n isArbitraryVariableFamilyName,\n isArbitraryVariableImage,\n isArbitraryVariableLength,\n isArbitraryVariablePosition,\n isArbitraryVariableShadow,\n isArbitraryVariableSize,\n isArbitraryVariableWeight,\n isArbitraryWeight,\n isFraction,\n isInteger,\n isNamedContainerQuery,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n /**\n * Theme getters for theme variable namespaces\n * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n */\n /***/\n const themeColor = fromTheme('color');\n const themeFont = fromTheme('font');\n const themeText = fromTheme('text');\n const themeFontWeight = fromTheme('font-weight');\n const themeTracking = fromTheme('tracking');\n const themeLeading = fromTheme('leading');\n const themeBreakpoint = fromTheme('breakpoint');\n const themeContainer = fromTheme('container');\n const themeSpacing = fromTheme('spacing');\n const themeRadius = fromTheme('radius');\n const themeShadow = fromTheme('shadow');\n const themeInsetShadow = fromTheme('inset-shadow');\n const themeTextShadow = fromTheme('text-shadow');\n const themeDropShadow = fromTheme('drop-shadow');\n const themeBlur = fromTheme('blur');\n const themePerspective = fromTheme('perspective');\n const themeAspect = fromTheme('aspect');\n const themeEase = fromTheme('ease');\n const themeAnimate = fromTheme('animate');\n /**\n * Helpers to avoid repeating the same scales\n *\n * We use functions that create a new array every time they're called instead of static arrays.\n * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.\n */\n /***/\n const scaleBreak = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const scalePosition = () => ['center', 'top', 'bottom', 'left', 'right', 'top-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-top', 'top-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-top', 'bottom-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-bottom', 'bottom-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-bottom'];\n const scalePositionWithArbitrary = () => [...scalePosition(), isArbitraryVariable, isArbitraryValue];\n const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const scaleOverscroll = () => ['auto', 'contain', 'none'];\n const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];\n const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()];\n const scaleGridTemplateColsRows = () => [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartAndEnd = () => ['auto', {\n span: ['full', isInteger, isArbitraryVariable, isArbitraryValue]\n }, isInteger, isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartOrEnd = () => [isInteger, 'auto', isArbitraryVariable, isArbitraryValue];\n const scaleGridAutoColsRows = () => ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue];\n const scaleAlignPrimaryAxis = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch', 'baseline', 'center-safe', 'end-safe'];\n const scaleAlignSecondaryAxis = () => ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'];\n const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()];\n const scaleSizing = () => [isFraction, 'auto', 'full', 'dvw', 'dvh', 'lvw', 'lvh', 'svw', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleSizingInline = () => [themeContainer, isFraction, 'screen', 'full', 'dvw', 'lvw', 'svw', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleSizingBlock = () => [isFraction, 'screen', 'full', 'lh', 'dvh', 'lvh', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];\n const scaleBgPosition = () => [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition, {\n position: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleBgRepeat = () => ['no-repeat', {\n repeat: ['', 'x', 'y', 'space', 'round']\n }];\n const scaleBgSize = () => ['auto', 'cover', 'contain', isArbitraryVariableSize, isArbitrarySize, {\n size: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleGradientStopPosition = () => [isPercent, isArbitraryVariableLength, isArbitraryLength];\n const scaleRadius = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', 'full', themeRadius, isArbitraryVariable, isArbitraryValue];\n const scaleBorderWidth = () => ['', isNumber, isArbitraryVariableLength, isArbitraryLength];\n const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'];\n const scaleBlendMode = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const scaleMaskImagePosition = () => [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition];\n const scaleBlur = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeBlur, isArbitraryVariable, isArbitraryValue];\n const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()];\n return {\n cacheSize: 500,\n theme: {\n animate: ['spin', 'ping', 'pulse', 'bounce'],\n aspect: ['video'],\n blur: [isTshirtSize],\n breakpoint: [isTshirtSize],\n color: [isAny],\n container: [isTshirtSize],\n 'drop-shadow': [isTshirtSize],\n ease: ['in', 'out', 'in-out'],\n font: [isAnyNonArbitrary],\n 'font-weight': ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black'],\n 'inset-shadow': [isTshirtSize],\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],\n perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],\n radius: [isTshirtSize],\n shadow: [isTshirtSize],\n spacing: ['px', isNumber],\n text: [isTshirtSize],\n 'text-shadow': [isTshirtSize],\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest']\n },\n classGroups: {\n // --------------\n // --- Layout ---\n // --------------\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', isFraction, isArbitraryValue, isArbitraryVariable, themeAspect]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n * @deprecated since Tailwind CSS v4.0.0\n */\n container: ['container'],\n /**\n * Container Type\n * @see https://tailwindcss.com/docs/responsive-design#container-queries\n */\n 'container-type': [{\n '@container': ['', 'normal', 'size', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Container Name\n * @see https://tailwindcss.com/docs/responsive-design#named-containers\n */\n 'container-named': [isNamedContainerQuery],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isNumber, 'auto', isArbitraryValue, isArbitraryVariable, themeContainer]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': scaleBreak()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': scaleBreak()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n /**\n * Screen Reader Only\n * @see https://tailwindcss.com/docs/display#screen-reader-only\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: scalePositionWithArbitrary()\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: scaleOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': scaleOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': scaleOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: scaleOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': scaleOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': scaleOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Inset\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: scaleInset()\n }],\n /**\n * Inset Inline\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': scaleInset()\n }],\n /**\n * Inset Block\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': scaleInset()\n }],\n /**\n * Inset Inline Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n * @todo class group will be renamed to `inset-s` in next major release\n */\n start: [{\n 'inset-s': scaleInset(),\n /**\n * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-s-*` utilities.\n * @see https://github.com/tailwindlabs/tailwindcss/pull/19613\n */\n start: scaleInset()\n }],\n /**\n * Inset Inline End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n * @todo class group will be renamed to `inset-e` in next major release\n */\n end: [{\n 'inset-e': scaleInset(),\n /**\n * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-e-*` utilities.\n * @see https://github.com/tailwindlabs/tailwindcss/pull/19613\n */\n end: scaleInset()\n }],\n /**\n * Inset Block Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-bs': [{\n 'inset-bs': scaleInset()\n }],\n /**\n * Inset Block End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-be': [{\n 'inset-be': scaleInset()\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: scaleInset()\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: scaleInset()\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: scaleInset()\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: scaleInset()\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------------\n // --- Flexbox and Grid ---\n // ------------------------\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: [isFraction, 'full', 'auto', themeContainer, ...scaleUnambiguousSpacing()]\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['nowrap', 'wrap', 'wrap-reverse']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: [isInteger, 'first', 'last', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': scaleGridAutoColsRows()\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': scaleGridAutoColsRows()\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: scaleUnambiguousSpacing()\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': scaleUnambiguousSpacing()\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': scaleUnambiguousSpacing()\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: [...scaleAlignPrimaryAxis(), 'normal']\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': [...scaleAlignSecondaryAxis(), 'normal']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...scaleAlignPrimaryAxis()]\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: [...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', ...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': scaleAlignPrimaryAxis()\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': [...scaleAlignSecondaryAxis(), 'baseline']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block Start\n * @see https://tailwindcss.com/docs/padding\n */\n pbs: [{\n pbs: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block End\n * @see https://tailwindcss.com/docs/padding\n */\n pbe: [{\n pbe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: scaleUnambiguousSpacing()\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: scaleMargin()\n }],\n /**\n * Margin Inline\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: scaleMargin()\n }],\n /**\n * Margin Block\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: scaleMargin()\n }],\n /**\n * Margin Inline Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: scaleMargin()\n }],\n /**\n * Margin Inline End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: scaleMargin()\n }],\n /**\n * Margin Block Start\n * @see https://tailwindcss.com/docs/margin\n */\n mbs: [{\n mbs: scaleMargin()\n }],\n /**\n * Margin Block End\n * @see https://tailwindcss.com/docs/margin\n */\n mbe: [{\n mbe: scaleMargin()\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: scaleMargin()\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: scaleMargin()\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: scaleMargin()\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: scaleMargin()\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x': [{\n 'space-x': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y': [{\n 'space-y': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y-reverse': ['space-y-reverse'],\n // --------------\n // --- Sizing ---\n // --------------\n /**\n * Size\n * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n */\n size: [{\n size: scaleSizing()\n }],\n /**\n * Inline Size\n * @see https://tailwindcss.com/docs/inline-size\n */\n 'inline-size': [{\n inline: ['auto', ...scaleSizingInline()]\n }],\n /**\n * Min-Inline Size\n * @see https://tailwindcss.com/docs/min-inline-size\n */\n 'min-inline-size': [{\n 'min-inline': ['auto', ...scaleSizingInline()]\n }],\n /**\n * Max-Inline Size\n * @see https://tailwindcss.com/docs/max-inline-size\n */\n 'max-inline-size': [{\n 'max-inline': ['none', ...scaleSizingInline()]\n }],\n /**\n * Block Size\n * @see https://tailwindcss.com/docs/block-size\n */\n 'block-size': [{\n block: ['auto', ...scaleSizingBlock()]\n }],\n /**\n * Min-Block Size\n * @see https://tailwindcss.com/docs/min-block-size\n */\n 'min-block-size': [{\n 'min-block': ['auto', ...scaleSizingBlock()]\n }],\n /**\n * Max-Block Size\n * @see https://tailwindcss.com/docs/max-block-size\n */\n 'max-block-size': [{\n 'max-block': ['none', ...scaleSizingBlock()]\n }],\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: [themeContainer, 'screen', ...scaleSizing()]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [themeContainer, 'screen', /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'none', ...scaleSizing()]\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [themeContainer, 'screen', 'none', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'prose', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n {\n screen: [themeBreakpoint]\n }, ...scaleSizing()]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: ['screen', 'lh', ...scaleSizing()]\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': ['screen', 'lh', 'none', ...scaleSizing()]\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': ['screen', 'lh', 'none', ...scaleSizing()]\n }],\n // ------------------\n // --- Typography ---\n // ------------------\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: [themeFontWeight, isArbitraryVariableWeight, isArbitraryWeight]\n }],\n /**\n * Font Stretch\n * @see https://tailwindcss.com/docs/font-stretch\n */\n 'font-stretch': [{\n 'font-stretch': ['ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded', isPercent, isArbitraryValue]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isArbitraryVariableFamilyName, isArbitraryFamilyName, themeFont]\n }],\n /**\n * Font Feature Settings\n * @see https://tailwindcss.com/docs/font-feature-settings\n */\n 'font-features': [{\n 'font-features': [isArbitraryValue]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: [themeTracking, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: ['none', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n themeLeading, ...scaleUnambiguousSpacing()]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://v3.tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: scaleColor()\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: scaleColor()\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...scaleLineStyle(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: [isNumber, 'from-font', 'auto', isArbitraryVariable, isArbitraryLength]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: scaleColor()\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: scaleUnambiguousSpacing()\n }],\n /**\n * Tab Size\n * @see https://tailwindcss.com/docs/tab-size\n */\n 'tab-size': [{\n tab: [isInteger, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Overflow Wrap\n * @see https://tailwindcss.com/docs/overflow-wrap\n */\n wrap: [{\n wrap: ['break-word', 'anywhere', 'normal']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // -------------------\n // --- Backgrounds ---\n // -------------------\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: scaleBgPosition()\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: scaleBgRepeat()\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: scaleBgSize()\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n linear: [{\n to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isInteger, isArbitraryVariable, isArbitraryValue],\n radial: ['', isArbitraryVariable, isArbitraryValue],\n conic: ['', isInteger, isArbitraryVariable, isArbitraryValue]\n }, isArbitraryVariableImage, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: scaleColor()\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: scaleColor()\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: scaleColor()\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: scaleColor()\n }],\n // ---------------\n // --- Borders ---\n // ---------------\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: scaleRadius()\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': scaleRadius()\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': scaleRadius()\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': scaleRadius()\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': scaleRadius()\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': scaleRadius()\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': scaleRadius()\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': scaleRadius()\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': scaleRadius()\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': scaleRadius()\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': scaleRadius()\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': scaleRadius()\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': scaleRadius()\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': scaleRadius()\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': scaleRadius()\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: scaleBorderWidth()\n }],\n /**\n * Border Width Inline\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': scaleBorderWidth()\n }],\n /**\n * Border Width Block\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': scaleBorderWidth()\n }],\n /**\n * Border Width Inline Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': scaleBorderWidth()\n }],\n /**\n * Border Width Inline End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': scaleBorderWidth()\n }],\n /**\n * Border Width Block Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-bs': [{\n 'border-bs': scaleBorderWidth()\n }],\n /**\n * Border Width Block End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-be': [{\n 'border-be': scaleBorderWidth()\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': scaleBorderWidth()\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': scaleBorderWidth()\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': scaleBorderWidth()\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': scaleBorderWidth()\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x': [{\n 'divide-x': scaleBorderWidth()\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y': [{\n 'divide-y': scaleBorderWidth()\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n */\n 'divide-style': [{\n divide: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: scaleColor()\n }],\n /**\n * Border Color Inline\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': scaleColor()\n }],\n /**\n * Border Color Block\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': scaleColor()\n }],\n /**\n * Border Color Inline Start\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': scaleColor()\n }],\n /**\n * Border Color Inline End\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': scaleColor()\n }],\n /**\n * Border Color Block Start\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-bs': [{\n 'border-bs': scaleColor()\n }],\n /**\n * Border Color Block End\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-be': [{\n 'border-be': scaleColor()\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': scaleColor()\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': scaleColor()\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': scaleColor()\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': scaleColor()\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: scaleColor()\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: [...scaleLineStyle(), 'none', 'hidden']\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: scaleColor()\n }],\n // ---------------\n // --- Effects ---\n // ---------------\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: [\n // Deprecated since Tailwind CSS v4.0.0\n '',\n // Deprecated since Tailwind CSS v4.0.0\n 'inner', 'none', themeShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n */\n 'shadow-color': [{\n shadow: scaleColor()\n }],\n /**\n * Inset Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n */\n 'inset-shadow': [{\n 'inset-shadow': ['none', themeInsetShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Inset Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n */\n 'inset-shadow-color': [{\n 'inset-shadow': scaleColor()\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n */\n 'ring-w': [{\n ring: scaleBorderWidth()\n }],\n /**\n * Ring Width Inset\n * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n */\n 'ring-color': [{\n ring: scaleColor()\n }],\n /**\n * Ring Offset Width\n * @see https://v3.tailwindcss.com/docs/ring-offset-width\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-w': [{\n 'ring-offset': [isNumber, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://v3.tailwindcss.com/docs/ring-offset-color\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-color': [{\n 'ring-offset': scaleColor()\n }],\n /**\n * Inset Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n */\n 'inset-ring-w': [{\n 'inset-ring': scaleBorderWidth()\n }],\n /**\n * Inset Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n */\n 'inset-ring-color': [{\n 'inset-ring': scaleColor()\n }],\n /**\n * Text Shadow\n * @see https://tailwindcss.com/docs/text-shadow\n */\n 'text-shadow': [{\n 'text-shadow': ['none', themeTextShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Text Shadow Color\n * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n */\n 'text-shadow-color': [{\n 'text-shadow': scaleColor()\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': scaleBlendMode()\n }],\n /**\n * Mask Clip\n * @see https://tailwindcss.com/docs/mask-clip\n */\n 'mask-clip': [{\n 'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }, 'mask-no-clip'],\n /**\n * Mask Composite\n * @see https://tailwindcss.com/docs/mask-composite\n */\n 'mask-composite': [{\n mask: ['add', 'subtract', 'intersect', 'exclude']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image-linear-pos': [{\n 'mask-linear': [isNumber]\n }],\n 'mask-image-linear-from-pos': [{\n 'mask-linear-from': scaleMaskImagePosition()\n }],\n 'mask-image-linear-to-pos': [{\n 'mask-linear-to': scaleMaskImagePosition()\n }],\n 'mask-image-linear-from-color': [{\n 'mask-linear-from': scaleColor()\n }],\n 'mask-image-linear-to-color': [{\n 'mask-linear-to': scaleColor()\n }],\n 'mask-image-t-from-pos': [{\n 'mask-t-from': scaleMaskImagePosition()\n }],\n 'mask-image-t-to-pos': [{\n 'mask-t-to': scaleMaskImagePosition()\n }],\n 'mask-image-t-from-color': [{\n 'mask-t-from': scaleColor()\n }],\n 'mask-image-t-to-color': [{\n 'mask-t-to': scaleColor()\n }],\n 'mask-image-r-from-pos': [{\n 'mask-r-from': scaleMaskImagePosition()\n }],\n 'mask-image-r-to-pos': [{\n 'mask-r-to': scaleMaskImagePosition()\n }],\n 'mask-image-r-from-color': [{\n 'mask-r-from': scaleColor()\n }],\n 'mask-image-r-to-color': [{\n 'mask-r-to': scaleColor()\n }],\n 'mask-image-b-from-pos': [{\n 'mask-b-from': scaleMaskImagePosition()\n }],\n 'mask-image-b-to-pos': [{\n 'mask-b-to': scaleMaskImagePosition()\n }],\n 'mask-image-b-from-color': [{\n 'mask-b-from': scaleColor()\n }],\n 'mask-image-b-to-color': [{\n 'mask-b-to': scaleColor()\n }],\n 'mask-image-l-from-pos': [{\n 'mask-l-from': scaleMaskImagePosition()\n }],\n 'mask-image-l-to-pos': [{\n 'mask-l-to': scaleMaskImagePosition()\n }],\n 'mask-image-l-from-color': [{\n 'mask-l-from': scaleColor()\n }],\n 'mask-image-l-to-color': [{\n 'mask-l-to': scaleColor()\n }],\n 'mask-image-x-from-pos': [{\n 'mask-x-from': scaleMaskImagePosition()\n }],\n 'mask-image-x-to-pos': [{\n 'mask-x-to': scaleMaskImagePosition()\n }],\n 'mask-image-x-from-color': [{\n 'mask-x-from': scaleColor()\n }],\n 'mask-image-x-to-color': [{\n 'mask-x-to': scaleColor()\n }],\n 'mask-image-y-from-pos': [{\n 'mask-y-from': scaleMaskImagePosition()\n }],\n 'mask-image-y-to-pos': [{\n 'mask-y-to': scaleMaskImagePosition()\n }],\n 'mask-image-y-from-color': [{\n 'mask-y-from': scaleColor()\n }],\n 'mask-image-y-to-color': [{\n 'mask-y-to': scaleColor()\n }],\n 'mask-image-radial': [{\n 'mask-radial': [isArbitraryVariable, isArbitraryValue]\n }],\n 'mask-image-radial-from-pos': [{\n 'mask-radial-from': scaleMaskImagePosition()\n }],\n 'mask-image-radial-to-pos': [{\n 'mask-radial-to': scaleMaskImagePosition()\n }],\n 'mask-image-radial-from-color': [{\n 'mask-radial-from': scaleColor()\n }],\n 'mask-image-radial-to-color': [{\n 'mask-radial-to': scaleColor()\n }],\n 'mask-image-radial-shape': [{\n 'mask-radial': ['circle', 'ellipse']\n }],\n 'mask-image-radial-size': [{\n 'mask-radial': [{\n closest: ['side', 'corner'],\n farthest: ['side', 'corner']\n }]\n }],\n 'mask-image-radial-pos': [{\n 'mask-radial-at': scalePosition()\n }],\n 'mask-image-conic-pos': [{\n 'mask-conic': [isNumber]\n }],\n 'mask-image-conic-from-pos': [{\n 'mask-conic-from': scaleMaskImagePosition()\n }],\n 'mask-image-conic-to-pos': [{\n 'mask-conic-to': scaleMaskImagePosition()\n }],\n 'mask-image-conic-from-color': [{\n 'mask-conic-from': scaleColor()\n }],\n 'mask-image-conic-to-color': [{\n 'mask-conic-to': scaleColor()\n }],\n /**\n * Mask Mode\n * @see https://tailwindcss.com/docs/mask-mode\n */\n 'mask-mode': [{\n mask: ['alpha', 'luminance', 'match']\n }],\n /**\n * Mask Origin\n * @see https://tailwindcss.com/docs/mask-origin\n */\n 'mask-origin': [{\n 'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }],\n /**\n * Mask Position\n * @see https://tailwindcss.com/docs/mask-position\n */\n 'mask-position': [{\n mask: scaleBgPosition()\n }],\n /**\n * Mask Repeat\n * @see https://tailwindcss.com/docs/mask-repeat\n */\n 'mask-repeat': [{\n mask: scaleBgRepeat()\n }],\n /**\n * Mask Size\n * @see https://tailwindcss.com/docs/mask-size\n */\n 'mask-size': [{\n mask: scaleBgSize()\n }],\n /**\n * Mask Type\n * @see https://tailwindcss.com/docs/mask-type\n */\n 'mask-type': [{\n 'mask-type': ['alpha', 'luminance']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image': [{\n mask: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // ---------------\n // --- Filters ---\n // ---------------\n /**\n * Filter\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: scaleBlur()\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeDropShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Drop Shadow Color\n * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n */\n 'drop-shadow-color': [{\n 'drop-shadow': scaleColor()\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Filter\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': scaleBlur()\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n // --------------\n // --- Tables ---\n // --------------\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': scaleUnambiguousSpacing()\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // ---------------------------------\n // --- Transitions and Animation ---\n // ---------------------------------\n /**\n * Transition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['', 'all', 'colors', 'opacity', 'shadow', 'transform', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Behavior\n * @see https://tailwindcss.com/docs/transition-behavior\n */\n 'transition-behavior': [{\n transition: ['normal', 'discrete']\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------\n // --- Transforms ---\n // ------------------\n /**\n * Backface Visibility\n * @see https://tailwindcss.com/docs/backface-visibility\n */\n backface: [{\n backface: ['hidden', 'visible']\n }],\n /**\n * Perspective\n * @see https://tailwindcss.com/docs/perspective\n */\n perspective: [{\n perspective: [themePerspective, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Perspective Origin\n * @see https://tailwindcss.com/docs/perspective-origin\n */\n 'perspective-origin': [{\n 'perspective-origin': scalePositionWithArbitrary()\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: scaleRotate()\n }],\n /**\n * Rotate X\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-x': [{\n 'rotate-x': scaleRotate()\n }],\n /**\n * Rotate Y\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-y': [{\n 'rotate-y': scaleRotate()\n }],\n /**\n * Rotate Z\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-z': [{\n 'rotate-z': scaleRotate()\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: scaleScale()\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': scaleScale()\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': scaleScale()\n }],\n /**\n * Scale Z\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-z': [{\n 'scale-z': scaleScale()\n }],\n /**\n * Scale 3D\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-3d': ['scale-3d'],\n /**\n * Skew\n * @see https://tailwindcss.com/docs/skew\n */\n skew: [{\n skew: scaleSkew()\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': scaleSkew()\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': scaleSkew()\n }],\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu']\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: scalePositionWithArbitrary()\n }],\n /**\n * Transform Style\n * @see https://tailwindcss.com/docs/transform-style\n */\n 'transform-style': [{\n transform: ['3d', 'flat']\n }],\n /**\n * Translate\n * @see https://tailwindcss.com/docs/translate\n */\n translate: [{\n translate: scaleTranslate()\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': scaleTranslate()\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': scaleTranslate()\n }],\n /**\n * Translate Z\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-z': [{\n 'translate-z': scaleTranslate()\n }],\n /**\n * Translate None\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-none': ['translate-none'],\n /**\n * Zoom\n * @see https://tailwindcss.com/docs/zoom\n */\n zoom: [{\n zoom: [isInteger, isArbitraryVariable, isArbitraryValue]\n }],\n // ---------------------\n // --- Interactivity ---\n // ---------------------\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: scaleColor()\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: scaleColor()\n }],\n /**\n * Color Scheme\n * @see https://tailwindcss.com/docs/color-scheme\n */\n 'color-scheme': [{\n scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Field Sizing\n * @see https://tailwindcss.com/docs/field-sizing\n */\n 'field-sizing': [{\n 'field-sizing': ['fixed', 'content']\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['auto', 'none']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', '', 'y', 'x']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scrollbar Thumb Color\n * @see https://tailwindcss.com/docs/scrollbar-color\n */\n 'scrollbar-thumb-color': [{\n 'scrollbar-thumb': scaleColor()\n }],\n /**\n * Scrollbar Track Color\n * @see https://tailwindcss.com/docs/scrollbar-color\n */\n 'scrollbar-track-color': [{\n 'scrollbar-track': scaleColor()\n }],\n /**\n * Scrollbar Gutter\n * @see https://tailwindcss.com/docs/scrollbar-gutter\n */\n 'scrollbar-gutter': [{\n 'scrollbar-gutter': ['auto', 'stable', 'both']\n }],\n /**\n * Scrollbar Width\n * @see https://tailwindcss.com/docs/scrollbar-width\n */\n 'scrollbar-w': [{\n scrollbar: ['auto', 'thin', 'none']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mbs': [{\n 'scroll-mbs': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mbe': [{\n 'scroll-mbe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pbs': [{\n 'scroll-pbs': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pbe': [{\n 'scroll-pbe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryVariable, isArbitraryValue]\n }],\n // -----------\n // --- SVG ---\n // -----------\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: ['none', ...scaleColor()]\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isNumber, isArbitraryVariableLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: ['none', ...scaleColor()]\n }],\n // ---------------------\n // --- Accessibility ---\n // ---------------------\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n 'container-named': ['container-type'],\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'inset-bs', 'inset-be', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['start', 'end', 'right', 'left'],\n 'inset-y': ['inset-bs', 'inset-be', 'top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pbs', 'pbe', 'pt', 'pr', 'pb', 'pl'],\n px: ['ps', 'pe', 'pr', 'pl'],\n py: ['pbs', 'pbe', 'pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mbs', 'mbe', 'mt', 'mr', 'mb', 'ml'],\n mx: ['ms', 'me', 'mr', 'ml'],\n my: ['mbs', 'mbe', 'mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': ['border-w-x', 'border-w-y', 'border-w-s', 'border-w-e', 'border-w-bs', 'border-w-be', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-s', 'border-w-e', 'border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-bs', 'border-w-be', 'border-w-t', 'border-w-b'],\n 'border-color': ['border-color-x', 'border-color-y', 'border-color-s', 'border-color-e', 'border-color-bs', 'border-color-be', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n 'border-color-x': ['border-color-s', 'border-color-e', 'border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-bs', 'border-color-be', 'border-color-t', 'border-color-b'],\n translate: ['translate-x', 'translate-y', 'translate-none'],\n 'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mbs', 'scroll-mbe', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-ms', 'scroll-me', 'scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mbs', 'scroll-mbe', 'scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pbs', 'scroll-pbe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n 'scroll-px': ['scroll-ps', 'scroll-pe', 'scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pbs', 'scroll-pbe', 'scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch']\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading']\n },\n postfixLookupClassGroups: ['container-type'],\n orderSensitiveModifiers: ['*', '**', 'after', 'backdrop', 'before', 'details-content', 'file', 'first-letter', 'first-line', 'marker', 'placeholder', 'selection']\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n overrideConfigProperties(baseConfig.theme, override.theme);\n overrideConfigProperties(baseConfig.classGroups, override.classGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroups, override.conflictingClassGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroupModifiers, override.conflictingClassGroupModifiers);\n overrideProperty(baseConfig, 'postfixLookupClassGroups', override.postfixLookupClassGroups);\n overrideProperty(baseConfig, 'orderSensitiveModifiers', override.orderSensitiveModifiers);\n mergeConfigProperties(baseConfig.theme, extend.theme);\n mergeConfigProperties(baseConfig.classGroups, extend.classGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroups, extend.conflictingClassGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroupModifiers, extend.conflictingClassGroupModifiers);\n mergeArrayProperties(baseConfig, extend, 'postfixLookupClassGroups');\n mergeArrayProperties(baseConfig, extend, 'orderSensitiveModifiers');\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n mergeArrayProperties(baseObject, mergeObject, key);\n }\n }\n};\nconst mergeArrayProperties = (baseObject, mergeObject, key) => {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = baseObject[key] ? baseObject[key].concat(mergeValue) : mergeValue;\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n\n","interface UseImageLoadFailureOptions {\n onError?: React.ReactEventHandler<HTMLImageElement>\n}\n\nexport const useImageLoadFailure = ({\n onError,\n}: UseImageLoadFailureOptions) => {\n const handleError: React.ReactEventHandler<HTMLImageElement> = (event) => {\n onError?.(event)\n }\n\n return handleError\n}\n","/**\n * Geometry shared by `ImageBleed` / `ImageSpread` and the editor chrome (\"…\" options\n * menu) that has to sit on top of them.\n *\n * Both components render their image into an absolutely positioned\n * `.uhuu-image-container` whose containing block is the page sheet's padding box — so a\n * trim-relative inset of `n` mm becomes `n + bleed` from the page edge, and an inset of 0\n * means \"run off the page edge\".\n *\n * The options button cannot live inside that container: for a spread the container is two\n * pages wide, so its top-right corner sits on the *other* page. It also cannot be wrapped\n * in a `relative` element, because that would break the container's page-relative\n * positioning. Instead it is rendered as a sibling inside a zero-cost anchor box that\n * reproduces the container's rect, clamped to the page the image is rendered on.\n */\n\nexport interface ImageAnchorInput {\n width?: number\n left?: number\n right?: number\n top?: number\n bottom?: number\n pageWidth?: number\n bleed?: number\n /** Set for spread mode; omit for bleed mode. */\n side?: 'start' | 'end'\n}\n\nexport interface ImageAnchorInsets {\n top: string\n right: string\n}\n\n/**\n * Trim-relative inset → page-relative inset. A positive inset is measured from the trim\n * edge so the bleed margin is added to it; 0 means the image bleeds off the page edge.\n */\nexport const toPageInset = (value: number | undefined, bleed: number): number =>\n value && value > 0 ? value + bleed : 0\n\n/**\n * Width of the image container, in mm. `pageSpan` is 1 for bleed images and 2 for\n * spreads. Kept here so `ImageBleed`, `ImageSpread` and the anchor can never disagree.\n */\nexport const resolveImageWidth = (\n { width, left = 0, right = 0 }: Pick<ImageAnchorInput, 'width' | 'left' | 'right'>,\n pageWidth: number,\n bleed: number,\n pageSpan: 1 | 2\n): number => {\n if (width) {\n return !left && !right ? width + bleed : width\n }\n\n let result = pageSpan * pageWidth\n if (!left) result += pageSpan * bleed\n if (!right) result += pageSpan * bleed\n if (left || right) result -= left + right\n return result\n}\n\n/**\n * Insets that place the options button at the top-right corner of the part of the image\n * that is visible on this page. `right` is derived from the container's real right edge\n * (left + width) rather than the `right` inset, because the container sets left, width and\n * right together and CSS drops `right` when a box is over-constrained.\n */\nexport const resolveImageAnchorInsets = (\n props: ImageAnchorInput,\n mode: 'bleed' | 'spread'\n): ImageAnchorInsets => {\n const bleed = props.bleed ?? 0\n const pageWidth = props.pageWidth ?? 210\n const pageSpan = mode === 'spread' ? 2 : 1\n const pageBoxWidth = pageWidth + 2 * bleed\n\n const width = resolveImageWidth(props, pageWidth, bleed, pageSpan)\n const leftInset = toPageInset(props.left, bleed)\n // A spread's `end` half starts a full page to the left of the page it renders on.\n const containerLeft = mode === 'spread' && props.side === 'end' ? -pageWidth + leftInset : leftInset\n const rightInset = pageBoxWidth - (containerLeft + width)\n\n return {\n top: `${Math.max(0, toPageInset(props.top, bleed))}mm`,\n right: `${Math.max(0, rightInset)}mm`,\n }\n}\n","import { useContext } from \"react\";\nimport { ConfigContext } from '../config/config-provider'; // Import the ConfigContext\nimport { getDialogProps } from '../editable/dialog-props';\nimport { cn } from '../ui/cn';\nimport { useImageLoadFailure } from './use-image-load-failure';\nimport { resolveImageWidth } from './image-anchor-geometry';\nimport './image.css';\n\ninterface ImageBleedProps { \n src?: string;\n onError?: React.ReactEventHandler<HTMLImageElement>;\n imageClassName?: string;\n backgroundColor?: string;\n width?: number;\n left?: number;\n right?: number;\n top?: number;\n bottom?: number;\n height?: number;\n pageWidth?: number;\n pageHeight?: number;\n bleed?: number;\n dialog?: object;\n children?: React.ReactNode;\n dataUhuu?: any;\n}\n\nconst ImageBleed = (props: ImageBleedProps) => {\n const config = useContext(ConfigContext); \n const imageLoadErrorHandler = useImageLoadFailure({\n onError: props.onError,\n });\n // Get page dimensions and bleed from props or use defaults (from context if not provided) \n const BLEED = props.bleed ?? config?.page?.bleed ?? 0; \n const PAGE_CONTENT_WIDTH = (props.pageWidth ?? config?.page?.width ?? 210); \n const PAGE_CONTENT_HEIGHT = (props.pageHeight ?? config?.page?.height ?? 297); \n\n const {\n src,\n imageClassName,\n backgroundColor,\n width: imageW,\n height: imageH,\n left: imageL = 0,\n right: imageR = 0,\n top: imageT = 0,\n bottom: imageB = 0, \n } = props;\n\n\n const unitFormat = (value) => `${value}mm`;\n\n\n const calculateImageWidth = (): number =>\n resolveImageWidth({ width: imageW, left: imageL, right: imageR }, PAGE_CONTENT_WIDTH, BLEED, 1);\n\n const calculateImageHeight = (): number => {\n let result = imageH; \n if(!imageH) {\n result = PAGE_CONTENT_HEIGHT;\n if(!imageT) result += BLEED;\n if(!imageB) result += BLEED;\n if(imageT || imageB) result -= (imageT ?? 0) + (imageB ?? 0);\n }\n else {\n if(!imageT && !imageB) result += BLEED; \n }\n return result;\n };\n\n\n const imageWidth = calculateImageWidth();\n const imageHeight = calculateImageHeight();\n\n const formatStyleValue = (value: number | undefined): string | undefined => \n value !== undefined ? unitFormat(value) : undefined;\n\n const createStyle = (styles: Record<string, string | undefined>) => {\n return Object.fromEntries(\n Object.entries(styles).filter(([_, value]) => value !== undefined)\n );\n };\n\n // Replace old style object with new createStyle implementation\n const style = createStyle({\n backgroundColor,\n width: formatStyleValue(imageWidth),\n height: formatStyleValue(imageHeight),\n left: formatStyleValue(imageL > 0 ? imageL + BLEED : imageL),\n right: formatStyleValue(imageR > 0 ? imageR + BLEED : imageR),\n top: formatStyleValue(imageT > 0 ? imageT + BLEED : imageT),\n bottom: formatStyleValue(imageB > 0 ? imageB + BLEED : imageB),\n });\n\n return (\n <div className=\"uhuu-image-container\" style={style} {...(props.dataUhuu !== undefined ? { 'data-uhuu': props.dataUhuu } : {})}>\n <div \n className=\"uhuu-image-inner\" \n {...getDialogProps(props, config)}\n >\n <img\n className={cn(\"cover-image object-cover object-center\", imageClassName)}\n src={src || null}\n onError={imageLoadErrorHandler}\n />\n {props.children}\n </div>\n </div>\n );\n};\n\nexport default ImageBleed;\n","/**\n * @license lucide-react v0.555.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.555.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.555.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.555.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.555.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.555.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 16-4 4-4-4\", key: \"f6ql7i\" }],\n [\"path\", { d: \"M17 20V4\", key: \"1ejh1v\" }],\n [\"path\", { d: \"m3 8 4-4 4 4\", key: \"11wl7u\" }],\n [\"path\", { d: \"M7 4v16\", key: \"1glfcx\" }]\n];\nconst ArrowUpDown = createLucideIcon(\"arrow-up-down\", __iconNode);\n\nexport { __iconNode, ArrowUpDown as default };\n//# sourceMappingURL=arrow-up-down.js.map\n","/**\n * @license lucide-react v0.555.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.555.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 17h1.5\", key: \"1gkc67\" }],\n [\"path\", { d: \"M12 22h1.5\", key: \"1my7sn\" }],\n [\"path\", { d: \"M12 2h1.5\", key: \"19tvb7\" }],\n [\"path\", { d: \"M17.5 22H19a1 1 0 0 0 1-1\", key: \"10akbh\" }],\n [\"path\", { d: \"M17.5 2H19a1 1 0 0 1 1 1v1.5\", key: \"1vrfjs\" }],\n [\"path\", { d: \"M20 14v3h-2.5\", key: \"1naeju\" }],\n [\"path\", { d: \"M20 8.5V10\", key: \"1ctpfu\" }],\n [\"path\", { d: \"M4 10V8.5\", key: \"1o3zg5\" }],\n [\"path\", { d: \"M4 19.5V14\", key: \"ob81pf\" }],\n [\"path\", { d: \"M4 4.5A2.5 2.5 0 0 1 6.5 2H8\", key: \"s8vcyb\" }],\n [\"path\", { d: \"M8 22H6.5a1 1 0 0 1 0-5H8\", key: \"1cu73q\" }]\n];\nconst BookDashed = createLucideIcon(\"book-dashed\", __iconNode);\n\nexport { __iconNode, BookDashed as default };\n//# sourceMappingURL=book-dashed.js.map\n","/**\n * @license lucide-react v0.555.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.555.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.555.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.555.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 [\"rect\", { width: \"8\", height: \"4\", x: \"8\", y: \"2\", rx: \"1\", ry: \"1\", key: \"tgr4d6\" }],\n [\n \"path\",\n {\n d: \"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\",\n key: \"116196\"\n }\n ],\n [\"path\", { d: \"M12 11h4\", key: \"1jrz19\" }],\n [\"path\", { d: \"M12 16h4\", key: \"n85exb\" }],\n [\"path\", { d: \"M8 11h.01\", key: \"1dfujw\" }],\n [\"path\", { d: \"M8 16h.01\", key: \"18s6g9\" }]\n];\nconst ClipboardList = createLucideIcon(\"clipboard-list\", __iconNode);\n\nexport { __iconNode, ClipboardList as default };\n//# sourceMappingURL=clipboard-list.js.map\n","/**\n * @license lucide-react v0.555.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 [\"rect\", { width: \"14\", height: \"14\", x: \"8\", y: \"8\", rx: \"2\", ry: \"2\", key: \"17jyea\" }],\n [\"path\", { d: \"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\", key: \"zix9uf\" }]\n];\nconst Copy = createLucideIcon(\"copy\", __iconNode);\n\nexport { __iconNode, Copy as default };\n//# sourceMappingURL=copy.js.map\n","/**\n * @license lucide-react v0.555.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 [\"circle\", { cx: \"12\", cy: \"12\", r: \"1\", key: \"41hilf\" }],\n [\"circle\", { cx: \"19\", cy: \"12\", r: \"1\", key: \"1wjl8i\" }],\n [\"circle\", { cx: \"5\", cy: \"12\", r: \"1\", key: \"1pcz8c\" }]\n];\nconst Ellipsis = createLucideIcon(\"ellipsis\", __iconNode);\n\nexport { __iconNode, Ellipsis as default };\n//# sourceMappingURL=ellipsis.js.map\n","/**\n * @license lucide-react v0.555.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 [\"circle\", { cx: \"9\", cy: \"12\", r: \"1\", key: \"1vctgf\" }],\n [\"circle\", { cx: \"9\", cy: \"5\", r: \"1\", key: \"hp0tcf\" }],\n [\"circle\", { cx: \"9\", cy: \"19\", r: \"1\", key: \"fkjjf6\" }],\n [\"circle\", { cx: \"15\", cy: \"12\", r: \"1\", key: \"1tmaij\" }],\n [\"circle\", { cx: \"15\", cy: \"5\", r: \"1\", key: \"19l28e\" }],\n [\"circle\", { cx: \"15\", cy: \"19\", r: \"1\", key: \"f4zoj3\" }]\n];\nconst GripVertical = createLucideIcon(\"grip-vertical\", __iconNode);\n\nexport { __iconNode, GripVertical as default };\n//# sourceMappingURL=grip-vertical.js.map\n","/**\n * @license lucide-react v0.555.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 [\"rect\", { width: \"18\", height: \"11\", x: \"3\", y: \"11\", rx: \"2\", ry: \"2\", key: \"1w4ew1\" }],\n [\"path\", { d: \"M7 11V7a5 5 0 0 1 10 0v4\", key: \"fwvmzm\" }]\n];\nconst Lock = createLucideIcon(\"lock\", __iconNode);\n\nexport { __iconNode, Lock as default };\n//# sourceMappingURL=lock.js.map\n","/**\n * @license lucide-react v0.555.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: \"M8 3H5a2 2 0 0 0-2 2v3\", key: \"1dcmit\" }],\n [\"path\", { d: \"M21 8V5a2 2 0 0 0-2-2h-3\", key: \"1e4gt3\" }],\n [\"path\", { d: \"M3 16v3a2 2 0 0 0 2 2h3\", key: \"wsl5sc\" }],\n [\"path\", { d: \"M16 21h3a2 2 0 0 0 2-2v-3\", key: \"18trek\" }]\n];\nconst Maximize = createLucideIcon(\"maximize\", __iconNode);\n\nexport { __iconNode, Maximize as default };\n//# sourceMappingURL=maximize.js.map\n","/**\n * @license lucide-react v0.555.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.555.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 [\n \"path\",\n {\n d: \"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\",\n key: \"1a8usu\"\n }\n ],\n [\"path\", { d: \"m15 5 4 4\", key: \"1mk7zo\" }]\n];\nconst Pencil = createLucideIcon(\"pencil\", __iconNode);\n\nexport { __iconNode, Pencil as default };\n//# sourceMappingURL=pencil.js.map\n","/**\n * @license lucide-react v0.555.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 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"M12 5v14\", key: \"s699le\" }]\n];\nconst Plus = createLucideIcon(\"plus\", __iconNode);\n\nexport { __iconNode, Plus as default };\n//# sourceMappingURL=plus.js.map\n","/**\n * @license lucide-react v0.555.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.555.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: \"M10 11v6\", key: \"nco0om\" }],\n [\"path\", { d: \"M14 11v6\", key: \"outv1u\" }],\n [\"path\", { d: \"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\", key: \"miytrc\" }],\n [\"path\", { d: \"M3 6h18\", key: \"d0wm0j\" }],\n [\"path\", { d: \"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\", key: \"e791ji\" }]\n];\nconst Trash2 = createLucideIcon(\"trash-2\", __iconNode);\n\nexport { __iconNode, Trash2 as default };\n//# sourceMappingURL=trash-2.js.map\n","/**\n * @license lucide-react v0.555.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: \"M16 12h6\", key: \"15xry1\" }],\n [\"path\", { d: \"M8 12H2\", key: \"1jqql6\" }],\n [\"path\", { d: \"M12 2v2\", key: \"tus03m\" }],\n [\"path\", { d: \"M12 8v2\", key: \"1woqiv\" }],\n [\"path\", { d: \"M12 14v2\", key: \"8jcxud\" }],\n [\"path\", { d: \"M12 20v2\", key: \"1lh1kg\" }],\n [\"path\", { d: \"m19 15 3-3-3-3\", key: \"wjy7rq\" }],\n [\"path\", { d: \"m5 9-3 3 3 3\", key: \"j64kie\" }]\n];\nconst UnfoldHorizontal = createLucideIcon(\"unfold-horizontal\", __iconNode);\n\nexport { __iconNode, UnfoldHorizontal as default };\n//# sourceMappingURL=unfold-horizontal.js.map\n","/**\n * @license lucide-react v0.555.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 22v-6\", key: \"6o8u61\" }],\n [\"path\", { d: \"M12 8V2\", key: \"1wkif3\" }],\n [\"path\", { d: \"M4 12H2\", key: \"rhcxmi\" }],\n [\"path\", { d: \"M10 12H8\", key: \"s88cx1\" }],\n [\"path\", { d: \"M16 12h-2\", key: \"10asgb\" }],\n [\"path\", { d: \"M22 12h-2\", key: \"14jgyd\" }],\n [\"path\", { d: \"m15 19-3 3-3-3\", key: \"11eu04\" }],\n [\"path\", { d: \"m15 5-3-3-3 3\", key: \"itvq4r\" }]\n];\nconst UnfoldVertical = createLucideIcon(\"unfold-vertical\", __iconNode);\n\nexport { __iconNode, UnfoldVertical as default };\n//# sourceMappingURL=unfold-vertical.js.map\n","/**\n * @license lucide-react v0.555.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","/**\n * @license lucide-react v0.555.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 [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }],\n [\"line\", { x1: \"21\", x2: \"16.65\", y1: \"21\", y2: \"16.65\", key: \"13gj7c\" }],\n [\"line\", { x1: \"11\", x2: \"11\", y1: \"8\", y2: \"14\", key: \"1vmskp\" }],\n [\"line\", { x1: \"8\", x2: \"14\", y1: \"11\", y2: \"11\", key: \"durymu\" }]\n];\nconst ZoomIn = createLucideIcon(\"zoom-in\", __iconNode);\n\nexport { __iconNode, ZoomIn as default };\n//# sourceMappingURL=zoom-in.js.map\n","/**\n * @license lucide-react v0.555.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 [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }],\n [\"line\", { x1: \"21\", x2: \"16.65\", y1: \"21\", y2: \"16.65\", key: \"13gj7c\" }],\n [\"line\", { x1: \"8\", x2: \"14\", y1: \"11\", y2: \"11\", key: \"durymu\" }]\n];\nconst ZoomOut = createLucideIcon(\"zoom-out\", __iconNode);\n\nexport { __iconNode, ZoomOut as default };\n//# sourceMappingURL=zoom-out.js.map\n","import * as React from \"react\"\n\ninterface PortalRootContextType {\n portalContainer: HTMLElement | null\n}\n\nconst PortalRootContext = React.createContext<PortalRootContextType>({\n portalContainer: null,\n})\n\nexport function usePortalRoot() {\n return React.useContext(PortalRootContext)\n}\n\ninterface PortalRootProviderProps {\n children: React.ReactNode\n}\n\nexport function PortalRootProvider({ children }: PortalRootProviderProps) {\n const [portalContainer, setPortalContainer] = React.useState<HTMLElement | null>(null)\n\n React.useEffect(() => {\n if (typeof document === 'undefined') return\n\n // Create portal container\n const container = document.createElement('div')\n container.setAttribute('data-uhuu-portal', '')\n container.style.cssText = 'position: fixed; top: 0; left: 0; z-index: 9999;'\n\n document.body.appendChild(container)\n setPortalContainer(container)\n\n return () => {\n document.body.removeChild(container)\n }\n }, [])\n\n return (\n <PortalRootContext.Provider value={{ portalContainer }}>\n {children}\n </PortalRootContext.Provider>\n )\n}\n","{\n \"toolbar\": {\n \"pages_one\": \"{{count}} Page\",\n \"pages_other\": \"{{count}} Pages\",\n \"add\": \"Add\",\n \"addHint\": \"Add page or group\",\n \"reorder\": \"Reorder\",\n \"reorderHint\": \"Reorder pages and groups using drag and drop\"\n },\n \"zoom\": {\n \"menu\": \"Zoom\",\n \"fitWidth\": \"Fit to Width\",\n \"fitHeight\": \"Fit to Height\",\n \"fitPage\": \"Fit to Page\",\n \"zoomIn\": \"Zoom in (25%)\",\n \"zoomOut\": \"Zoom out (25%)\"\n },\n \"page\": {\n \"count_one\": \"{{count}} page\",\n \"count_other\": \"{{count}} pages\",\n \"fallbackName\": \"Page {{number}}\",\n \"continued\": \"{{name}} continued\",\n \"options\": \"Page options\",\n \"groupOptions\": \"Group options\",\n \"optionsMenu\": \"Options\",\n \"rename\": \"Rename\",\n \"moveUp\": \"Move up\",\n \"moveDown\": \"Move down\",\n \"addPage\": \"Add page\",\n \"duplicate\": \"Duplicate\",\n \"delete\": \"Delete\"\n },\n \"addDialog\": {\n \"title\": \"Add Page or Group\",\n \"description\": \"Select a page or group to add to your document.\",\n \"filterLabel\": \"Filter pages and groups\",\n \"filterPlaceholder\": \"Filter…\",\n \"emptyTitle\": \"No items available\",\n \"emptyFiltered\": \"No pages or groups match your search.\",\n \"emptyAdded\": \"All pages and groups have been added.\",\n \"groupFallbackName\": \"Group {{number}}\",\n \"pageFallbackName\": \"Page {{id}}\",\n \"addItem\": \"Add {{name}}\",\n \"added\": \"{{name}} added\",\n \"addAnother\": \"Add another\",\n \"done\": \"Done\"\n },\n \"reorderDialog\": {\n \"title\": \"Reorder Pages and Groups\",\n \"description\": \"Drag and drop to reorder. Groups move as a single unit.\",\n \"emptyTitle\": \"No pages found\",\n \"emptyDescription\": \"Add some pages to get started with reordering.\",\n \"remove\": \"Remove\",\n \"cancel\": \"Cancel\",\n \"save\": \"Save Changes\"\n },\n \"thumbnail\": {\n \"groupBadge_one\": \"Group ({{count}} page)\",\n \"groupBadge_other\": \"Group ({{count}} pages)\",\n \"groupFallbackName\": \"Group {{id}}\",\n \"noPreview\": \"No preview\",\n \"start\": \"Start\",\n \"end\": \"End\",\n \"draggingGroup\": \"Dragging Group...\",\n \"draggingPage\": \"Dragging...\"\n },\n \"notice\": {\n \"cannotRemoveTitle\": \"Cannot remove item\",\n \"lastPage\": \"Cannot remove the last page. At least one page is required.\",\n \"ok\": \"OK\"\n },\n \"image\": {\n \"options\": \"Image options\",\n \"edit\": \"Edit image\",\n \"annotate\": \"Annotate\"\n },\n \"dialog\": {\n \"close\": \"Close\"\n }\n}\n","{\n \"toolbar\": {\n \"pages_one\": \"{{count}} Seite\",\n \"pages_other\": \"{{count}} Seiten\",\n \"add\": \"Hinzufügen\",\n \"addHint\": \"Seite oder Gruppe hinzufügen\",\n \"reorder\": \"Anordnen\",\n \"reorderHint\": \"Seiten und Gruppen per Drag-and-drop neu anordnen\"\n },\n \"zoom\": {\n \"menu\": \"Zoom\",\n \"fitWidth\": \"An Breite anpassen\",\n \"fitHeight\": \"An Höhe anpassen\",\n \"fitPage\": \"Ganze Seite\",\n \"zoomIn\": \"Vergrössern (25%)\",\n \"zoomOut\": \"Verkleinern (25%)\"\n },\n \"page\": {\n \"count_one\": \"{{count}} Seite\",\n \"count_other\": \"{{count}} Seiten\",\n \"fallbackName\": \"Seite {{number}}\",\n \"continued\": \"{{name}} (Fortsetzung)\",\n \"options\": \"Seitenoptionen\",\n \"groupOptions\": \"Gruppenoptionen\",\n \"optionsMenu\": \"Optionen\",\n \"rename\": \"Umbenennen\",\n \"moveUp\": \"Nach oben\",\n \"moveDown\": \"Nach unten\",\n \"addPage\": \"Seite hinzufügen\",\n \"duplicate\": \"Duplizieren\",\n \"delete\": \"Löschen\"\n },\n \"addDialog\": {\n \"title\": \"Seite oder Gruppe hinzufügen\",\n \"description\": \"Wählen Sie eine Seite oder Gruppe, die dem Dokument hinzugefügt wird.\",\n \"filterLabel\": \"Seiten und Gruppen filtern\",\n \"filterPlaceholder\": \"Filtern…\",\n \"emptyTitle\": \"Keine Einträge verfügbar\",\n \"emptyFiltered\": \"Keine Seiten oder Gruppen entsprechen Ihrer Suche.\",\n \"emptyAdded\": \"Alle Seiten und Gruppen wurden bereits hinzugefügt.\",\n \"groupFallbackName\": \"Gruppe {{number}}\",\n \"pageFallbackName\": \"Seite {{id}}\",\n \"addItem\": \"{{name}} hinzufügen\",\n \"added\": \"{{name}} hinzugefügt\",\n \"addAnother\": \"Weitere hinzufügen\",\n \"done\": \"Fertig\"\n },\n \"reorderDialog\": {\n \"title\": \"Seiten und Gruppen anordnen\",\n \"description\": \"Per Drag-and-drop neu anordnen. Gruppen werden als Einheit verschoben.\",\n \"emptyTitle\": \"Keine Seiten gefunden\",\n \"emptyDescription\": \"Fügen Sie Seiten hinzu, um sie anzuordnen.\",\n \"remove\": \"Entfernen\",\n \"cancel\": \"Abbrechen\",\n \"save\": \"Änderungen speichern\"\n },\n \"thumbnail\": {\n \"groupBadge_one\": \"Gruppe ({{count}} Seite)\",\n \"groupBadge_other\": \"Gruppe ({{count}} Seiten)\",\n \"groupFallbackName\": \"Gruppe {{id}}\",\n \"noPreview\": \"Keine Vorschau\",\n \"start\": \"Anfang\",\n \"end\": \"Ende\",\n \"draggingGroup\": \"Gruppe wird verschoben…\",\n \"draggingPage\": \"Wird verschoben…\"\n },\n \"notice\": {\n \"cannotRemoveTitle\": \"Eintrag kann nicht entfernt werden\",\n \"lastPage\": \"Die letzte Seite kann nicht entfernt werden. Mindestens eine Seite ist erforderlich.\",\n \"ok\": \"OK\"\n },\n \"image\": {\n \"options\": \"Bildoptionen\",\n \"edit\": \"Bild bearbeiten\",\n \"annotate\": \"Annotieren\"\n },\n \"dialog\": {\n \"close\": \"Schliessen\"\n }\n}\n","{\n \"toolbar\": {\n \"pages_one\": \"{{count}} page\",\n \"pages_many\": \"{{count}} pages\",\n \"pages_other\": \"{{count}} pages\",\n \"add\": \"Ajouter\",\n \"addHint\": \"Ajouter une page ou un groupe\",\n \"reorder\": \"Réorganiser\",\n \"reorderHint\": \"Réorganiser les pages et les groupes par glisser-déposer\"\n },\n \"zoom\": {\n \"menu\": \"Zoom\",\n \"fitWidth\": \"Ajuster à la largeur\",\n \"fitHeight\": \"Ajuster à la hauteur\",\n \"fitPage\": \"Page entière\",\n \"zoomIn\": \"Zoom avant (25%)\",\n \"zoomOut\": \"Zoom arrière (25%)\"\n },\n \"page\": {\n \"count_one\": \"{{count}} page\",\n \"count_many\": \"{{count}} pages\",\n \"count_other\": \"{{count}} pages\",\n \"fallbackName\": \"Page {{number}}\",\n \"continued\": \"{{name}} (suite)\",\n \"options\": \"Options de la page\",\n \"groupOptions\": \"Options du groupe\",\n \"optionsMenu\": \"Options\",\n \"rename\": \"Renommer\",\n \"moveUp\": \"Monter\",\n \"moveDown\": \"Descendre\",\n \"addPage\": \"Ajouter une page\",\n \"duplicate\": \"Dupliquer\",\n \"delete\": \"Supprimer\"\n },\n \"addDialog\": {\n \"title\": \"Ajouter une page ou un groupe\",\n \"description\": \"Sélectionnez une page ou un groupe à ajouter au document.\",\n \"filterLabel\": \"Filtrer les pages et les groupes\",\n \"filterPlaceholder\": \"Filtrer…\",\n \"emptyTitle\": \"Aucun élément disponible\",\n \"emptyFiltered\": \"Aucune page ni aucun groupe ne correspond à votre recherche.\",\n \"emptyAdded\": \"Toutes les pages et tous les groupes ont déjà été ajoutés.\",\n \"groupFallbackName\": \"Groupe {{number}}\",\n \"pageFallbackName\": \"Page {{id}}\",\n \"addItem\": \"Ajouter {{name}}\",\n \"added\": \"{{name}} ajouté\",\n \"addAnother\": \"En ajouter un autre\",\n \"done\": \"Terminé\"\n },\n \"reorderDialog\": {\n \"title\": \"Réorganiser les pages et les groupes\",\n \"description\": \"Réorganisez par glisser-déposer. Les groupes se déplacent d’un bloc.\",\n \"emptyTitle\": \"Aucune page trouvée\",\n \"emptyDescription\": \"Ajoutez des pages pour pouvoir les réorganiser.\",\n \"remove\": \"Retirer\",\n \"cancel\": \"Annuler\",\n \"save\": \"Enregistrer les modifications\"\n },\n \"thumbnail\": {\n \"groupBadge_one\": \"Groupe ({{count}} page)\",\n \"groupBadge_many\": \"Groupe ({{count}} pages)\",\n \"groupBadge_other\": \"Groupe ({{count}} pages)\",\n \"groupFallbackName\": \"Groupe {{id}}\",\n \"noPreview\": \"Aucun aperçu\",\n \"start\": \"Début\",\n \"end\": \"Fin\",\n \"draggingGroup\": \"Déplacement du groupe…\",\n \"draggingPage\": \"Déplacement…\"\n },\n \"notice\": {\n \"cannotRemoveTitle\": \"Impossible de retirer l’élément\",\n \"lastPage\": \"Impossible de retirer la dernière page. Au moins une page est requise.\",\n \"ok\": \"OK\"\n },\n \"image\": {\n \"options\": \"Options de l’image\",\n \"edit\": \"Modifier l’image\",\n \"annotate\": \"Annoter\"\n },\n \"dialog\": {\n \"close\": \"Fermer\"\n }\n}\n","{\n \"toolbar\": {\n \"pages_one\": \"{{count}} pagina\",\n \"pages_many\": \"{{count}} pagine\",\n \"pages_other\": \"{{count}} pagine\",\n \"add\": \"Aggiungi\",\n \"addHint\": \"Aggiungi una pagina o un gruppo\",\n \"reorder\": \"Riordina\",\n \"reorderHint\": \"Riordina pagine e gruppi trascinandoli\"\n },\n \"zoom\": {\n \"menu\": \"Zoom\",\n \"fitWidth\": \"Adatta alla larghezza\",\n \"fitHeight\": \"Adatta all’altezza\",\n \"fitPage\": \"Pagina intera\",\n \"zoomIn\": \"Ingrandisci (25%)\",\n \"zoomOut\": \"Riduci (25%)\"\n },\n \"page\": {\n \"count_one\": \"{{count}} pagina\",\n \"count_many\": \"{{count}} pagine\",\n \"count_other\": \"{{count}} pagine\",\n \"fallbackName\": \"Pagina {{number}}\",\n \"continued\": \"{{name}} (continua)\",\n \"options\": \"Opzioni pagina\",\n \"groupOptions\": \"Opzioni gruppo\",\n \"optionsMenu\": \"Opzioni\",\n \"rename\": \"Rinomina\",\n \"moveUp\": \"Sposta su\",\n \"moveDown\": \"Sposta giù\",\n \"addPage\": \"Aggiungi pagina\",\n \"duplicate\": \"Duplica\",\n \"delete\": \"Elimina\"\n },\n \"addDialog\": {\n \"title\": \"Aggiungi pagina o gruppo\",\n \"description\": \"Seleziona una pagina o un gruppo da aggiungere al documento.\",\n \"filterLabel\": \"Filtra pagine e gruppi\",\n \"filterPlaceholder\": \"Filtra…\",\n \"emptyTitle\": \"Nessun elemento disponibile\",\n \"emptyFiltered\": \"Nessuna pagina o gruppo corrisponde alla ricerca.\",\n \"emptyAdded\": \"Tutte le pagine e i gruppi sono già stati aggiunti.\",\n \"groupFallbackName\": \"Gruppo {{number}}\",\n \"pageFallbackName\": \"Pagina {{id}}\",\n \"addItem\": \"Aggiungi {{name}}\",\n \"added\": \"{{name}} aggiunto\",\n \"addAnother\": \"Aggiungi un altro\",\n \"done\": \"Fatto\"\n },\n \"reorderDialog\": {\n \"title\": \"Riordina pagine e gruppi\",\n \"description\": \"Trascina per riordinare. I gruppi si spostano come un unico blocco.\",\n \"emptyTitle\": \"Nessuna pagina trovata\",\n \"emptyDescription\": \"Aggiungi delle pagine per poterle riordinare.\",\n \"remove\": \"Rimuovi\",\n \"cancel\": \"Annulla\",\n \"save\": \"Salva modifiche\"\n },\n \"thumbnail\": {\n \"groupBadge_one\": \"Gruppo ({{count}} pagina)\",\n \"groupBadge_many\": \"Gruppo ({{count}} pagine)\",\n \"groupBadge_other\": \"Gruppo ({{count}} pagine)\",\n \"groupFallbackName\": \"Gruppo {{id}}\",\n \"noPreview\": \"Nessuna anteprima\",\n \"start\": \"Inizio\",\n \"end\": \"Fine\",\n \"draggingGroup\": \"Spostamento del gruppo…\",\n \"draggingPage\": \"Spostamento…\"\n },\n \"notice\": {\n \"cannotRemoveTitle\": \"Impossibile rimuovere l’elemento\",\n \"lastPage\": \"Impossibile rimuovere l’ultima pagina. È richiesta almeno una pagina.\",\n \"ok\": \"OK\"\n },\n \"image\": {\n \"options\": \"Opzioni immagine\",\n \"edit\": \"Modifica immagine\",\n \"annotate\": \"Annota\"\n },\n \"dialog\": {\n \"close\": \"Chiudi\"\n }\n}\n","// src/uhuu/i18n/i18n-core.js\n// Pure, DOM-free translation core for the editor shell. The React wiring is in\n// locale-context.tsx and the catalogs in ./locales. The catalog conventions are the Embed SPAs'\n// (uhuu-embed/docs/ui-translations.md): nested keys, `{{placeholders}}`, and i18next plural\n// suffixes (`_one`, `_many`, `_other`) selected through Intl.PluralRules, so one translator can\n// work on both.\n\nexport const DEFAULT_SHELL_LOCALE = 'en';\n\n/** Query parameters that pick the shell language on a standalone or dev page (`?lang=fr`). */\nexport const SHELL_LOCALE_QUERY_PARAMS = ['lang', 'locale'];\n\n/** `de-CH`, `fr_FR`, ` IT ` → `de`, `fr`, `it`; anything that is not a language tag → null. */\nexport function normalizeLanguageTag(value) {\n if (typeof value !== 'string') return null;\n const base = value.trim().toLowerCase().split(/[-_]/)[0];\n return /^[a-z]{2,3}$/.test(base) ? base : null;\n}\n\n/**\n * First candidate that is a language tag. With `supported`, the first candidate whose language\n * has a catalog (for preference lists such as `navigator.languages`). Null when none matches.\n */\nexport function pickLanguage(candidates, supported) {\n for (const candidate of candidates ?? []) {\n const language = normalizeLanguageTag(candidate);\n if (!language) continue;\n if (!supported || supported.includes(language)) return language;\n }\n return null;\n}\n\n/**\n * The shell language, from the first source that names one: the explicit `locale`, the host's\n * declaration (uhuu-app's resolved UI language), `?lang=` / `?locale=` on the page URL,\n * `<html lang>`, the browser's preference list (first language with a catalog), then `en`.\n * Explicit sources may name a language without a catalog; its words then fall back to English\n * while `locale` still reports it, so a template's own labels can follow it.\n */\nexport function resolveShellLocale(sources, supported) {\n const params = new URLSearchParams(sources?.search ?? '');\n return (\n pickLanguage([\n sources?.locale,\n sources?.host,\n ...SHELL_LOCALE_QUERY_PARAMS.map((name) => params.get(name)),\n sources?.documentLang,\n ]) ??\n pickLanguage(sources?.navigatorLanguages ?? [], supported) ??\n DEFAULT_SHELL_LOCALE\n );\n}\n\n/**\n * The language uhuu-app resolved for the user reaches a template frame in the host handshake\n * (`uhuuData.locale` in the `shaked` snapshot), which the SDK re-emits as its `loaded` event.\n * Reports the language it names, if any; returns the unsubscribe. No-op without the SDK.\n */\nexport function subscribeHostLocale(uhuu, onLocale) {\n if (typeof uhuu?.listen !== 'function') return () => {};\n const off = uhuu.listen('loaded', (data) => {\n const language = normalizeLanguageTag(data?.locale);\n if (language) onLocale(language);\n });\n return typeof off === 'function' ? off : () => {};\n}\n\nfunction isCatalogNode(value) {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction deepMergeCatalog(base, override) {\n if (!isCatalogNode(override)) return base;\n const merged = { ...(isCatalogNode(base) ? base : {}) };\n for (const [key, value] of Object.entries(override)) {\n if (value === undefined || value === null) continue;\n merged[key] = isCatalogNode(value) && isCatalogNode(merged[key]) ? deepMergeCatalog(merged[key], value) : value;\n }\n return merged;\n}\n\n/**\n * Built-in catalogs with a template's `translations` merged over them, per language. A language\n * the built-ins lack is added as given; its missing keys fall back to English at lookup time.\n */\nexport function mergeTranslations(builtIn, overrides) {\n const merged = { ...(builtIn ?? {}) };\n for (const [tag, catalog] of Object.entries(overrides ?? {})) {\n const language = normalizeLanguageTag(tag);\n if (!language || !isCatalogNode(catalog)) continue;\n merged[language] = deepMergeCatalog(merged[language], catalog);\n }\n return merged;\n}\n\n/**\n * A label that is one string, or one string per language (`{ en: 'Cover', de: 'Titelseite' }`):\n * the active language, then English, then the first language given. Undefined for no label.\n */\nexport function localizeText(value, locale, fallbackLocale = DEFAULT_SHELL_LOCALE) {\n if (value === null || value === undefined) return undefined;\n if (typeof value === 'string') return value;\n if (!isCatalogNode(value)) return String(value);\n const language = normalizeLanguageTag(locale);\n const candidates = [locale, language, fallbackLocale].filter(Boolean);\n for (const tag of candidates) {\n if (typeof value[tag] === 'string') return value[tag];\n }\n const first = Object.values(value).find((entry) => typeof entry === 'string');\n return typeof first === 'string' ? first : undefined;\n}\n\nconst pluralRules = new Map();\n\nfunction pluralCategory(locale, count) {\n if (!pluralRules.has(locale)) {\n let rules = null;\n try {\n rules = new Intl.PluralRules(locale);\n } catch {\n rules = null;\n }\n pluralRules.set(locale, rules);\n }\n const rules = pluralRules.get(locale);\n if (rules) return rules.select(count);\n return count === 1 ? 'one' : 'other';\n}\n\nfunction lookup(catalog, key) {\n let node = catalog;\n for (const part of key.split('.')) {\n if (!isCatalogNode(node)) return undefined;\n node = node[part];\n }\n return typeof node === 'string' ? node : undefined;\n}\n\nfunction interpolate(text, params) {\n if (!params) return text;\n return text.replace(/\\{\\{\\s*([\\w.]+)\\s*\\}\\}/g, (match, name) => {\n const value = params[name];\n return value === undefined || value === null ? match : String(value);\n });\n}\n\n/**\n * `t(key, params)` over merged catalogs: the active language first, then English. With a numeric\n * `params.count`, `key_<plural category>` is tried before `key_other` and `key`, within each\n * language in turn (a language's `_other` beats English's `_one`). A key no catalog has is\n * returned as written, so a missing word is visible instead of blank.\n */\nexport function createTranslator({ locale, catalogs, fallbackLocale = DEFAULT_SHELL_LOCALE }) {\n const language = normalizeLanguageTag(locale) ?? fallbackLocale;\n const chain = [...new Set([language, fallbackLocale])]\n .map((tag) => catalogs?.[tag])\n .filter(isCatalogNode);\n\n return function t(key, params) {\n const count = typeof params?.count === 'number' ? params.count : null;\n const variants = count === null ? [key] : [`${key}_${pluralCategory(language, count)}`, `${key}_other`, key];\n for (const catalog of chain) {\n for (const variant of variants) {\n const text = lookup(catalog, variant);\n if (text !== undefined) return interpolate(text, params);\n }\n }\n return key;\n };\n}\n\n/** `{ a: { b: 'x' } }` → Map { 'a.b' → 'x' }. */\nexport function flattenCatalog(catalog, prefix = '', out = new Map()) {\n for (const [key, value] of Object.entries(catalog ?? {})) {\n const path = prefix ? `${prefix}.${key}` : key;\n if (isCatalogNode(value)) flattenCatalog(value, path, out);\n else out.set(path, value);\n }\n return out;\n}\n\nconst PLURAL_SUFFIX = /_(zero|one|two|few|many|other)$/;\n\nfunction placeholders(text) {\n const found = text.match(/\\{\\{\\s*[^}]+?\\s*\\}\\}/g) ?? [];\n return [...new Set(found.map((p) => p.replace(/\\s+/g, '')))].sort().join(' ');\n}\n\nfunction groupByBase(entries) {\n const groups = new Map();\n for (const [key, value] of entries) {\n const base = key.replace(PLURAL_SUFFIX, '');\n if (!groups.has(base)) groups.set(base, new Map());\n groups.get(base).set(key, value);\n }\n return groups;\n}\n\n/**\n * Compares every catalog with the source (`en`): the same keys, every plural form the language's\n * Intl.PluralRules selects, non-empty strings, and the source's `{{placeholders}}`. The same\n * rules as the Embed SPAs' parity check, so a catalog that passes here passes there.\n */\nexport function checkCatalogParity(catalogs, source = DEFAULT_SHELL_LOCALE) {\n const issues = [];\n const reference = groupByBase(flattenCatalog(catalogs?.[source] ?? {}));\n\n for (const [locale, catalog] of Object.entries(catalogs ?? {})) {\n if (locale === source) continue;\n const groups = groupByBase(flattenCatalog(catalog));\n\n for (const [base, referenceGroup] of reference) {\n const group = groups.get(base);\n if (!group) {\n issues.push({ locale, key: base, problem: 'missing' });\n continue;\n }\n const plural = !referenceGroup.has(base);\n if (plural) {\n for (const category of new Intl.PluralRules(locale).resolvedOptions().pluralCategories) {\n if (!group.has(`${base}_${category}`)) issues.push({ locale, key: `${base}_${category}`, problem: 'missing' });\n }\n } else if (!group.has(base)) {\n issues.push({ locale, key: base, problem: 'missing' });\n }\n\n for (const [key, value] of group) {\n if (typeof value !== 'string') {\n issues.push({ locale, key, problem: 'not-a-string' });\n continue;\n }\n if (!value.trim()) {\n issues.push({ locale, key, problem: 'empty' });\n continue;\n }\n const expected = referenceGroup.get(key) ?? referenceGroup.get(`${base}_other`) ?? referenceGroup.get(base);\n if (typeof expected === 'string' && placeholders(value) !== placeholders(expected)) {\n issues.push({ locale, key, problem: 'placeholders', detail: `expected \"${placeholders(expected)}\", got \"${placeholders(value)}\"` });\n }\n }\n }\n for (const base of groups.keys()) {\n if (!reference.has(base)) issues.push({ locale, key: base, problem: 'extra' });\n }\n }\n return issues;\n}\n","import { createContext, useContext, useEffect, useMemo, useState, type ReactNode } from 'react';\nimport en from './locales/en.json';\nimport de from './locales/de.json';\nimport fr from './locales/fr.json';\nimport it from './locales/it.json';\nimport {\n DEFAULT_SHELL_LOCALE,\n createTranslator,\n localizeText,\n mergeTranslations,\n normalizeLanguageTag,\n resolveShellLocale,\n subscribeHostLocale,\n type LocalizedText,\n type TranslationCatalog,\n type Translator,\n} from './i18n-core.js';\n\n/** Switzerland's official languages plus English: the catalogs the package ships. */\nexport const SHELL_LOCALES = ['de', 'fr', 'it', 'en'] as const;\n\nconst BUILT_IN_CATALOGS: Record<string, TranslationCatalog> = { en, de, fr, it };\n\n/** `{ de: { toolbar: { add: 'Neu' } }, rm: { …a whole catalog… } }`: overrides or a new language. */\nexport type ShellTranslations = Record<string, TranslationCatalog>;\n\nexport interface ShellI18n {\n /** The resolved shell language (`de`, `fr`, `it`, `en`, or whatever a template passed). */\n locale: string;\n t: Translator;\n /** A `LocalizedText` label in the shell language. */\n localize: (value: LocalizedText | null | undefined) => string | undefined;\n}\n\nconst ShellLocaleContext = createContext<ShellI18n | null>(null);\n\nfunction supportedLocales(translations?: ShellTranslations | null): string[] {\n return [...SHELL_LOCALES, ...Object.keys(translations ?? {}).map((tag) => normalizeLanguageTag(tag) ?? tag)];\n}\n\n/**\n * The shell language a page resolves to without an explicit one: the host's declaration\n * (`uhuuData.locale` on a same-document host), `?lang=` / `?locale=`, `<html lang>`, then the\n * browser's preference list. `en` when nothing names a language, and always `en` without a window.\n */\nexport function detectShellLocale(translations?: ShellTranslations | null, explicit?: unknown): string {\n const supported = supportedLocales(translations);\n if (typeof window === 'undefined') return resolveShellLocale({ locale: explicit }, supported);\n const host = (window as any).uhuuData?.locale;\n return resolveShellLocale(\n {\n locale: explicit,\n host,\n search: window.location?.search,\n documentLang: window.document?.documentElement?.lang,\n navigatorLanguages: window.navigator?.languages ?? [window.navigator?.language],\n },\n supported,\n );\n}\n\nexport function createShellI18n(locale: string, translations?: ShellTranslations | null): ShellI18n {\n const catalogs = mergeTranslations(BUILT_IN_CATALOGS, translations);\n const t = createTranslator({ locale, catalogs, fallbackLocale: DEFAULT_SHELL_LOCALE });\n return {\n locale,\n t,\n localize: (value) => localizeText(value, locale, DEFAULT_SHELL_LOCALE),\n };\n}\n\nlet fallbackRuntime: ShellI18n | null = null;\n\n/** What shell components use outside any provider (a lone `ImageBlock`): detected once per page. */\nfunction getFallbackRuntime(): ShellI18n {\n if (!fallbackRuntime) fallbackRuntime = createShellI18n(detectShellLocale());\n return fallbackRuntime;\n}\n\n/**\n * The language uhuu-app resolved for the user reaches a template frame in the host handshake\n * (`uhuuData.locale` in the `shaked` snapshot), which the SDK re-emits as its `loaded` event.\n * Listening here is what makes the shell follow the user's interface language with no template code.\n */\nfunction useHostLocale(): string | null {\n const [hostLocale, setHostLocale] = useState<string | null>(null);\n\n useEffect(() => {\n if (typeof window === 'undefined') return undefined;\n return subscribeHostLocale((window as any).$uhuu, setHostLocale);\n }, []);\n\n return hostLocale;\n}\n\n/** The shell runtime for a provider: explicit `locale`, else the host's, else detection. */\nexport function useShellI18nRuntime({\n locale,\n translations,\n}: {\n locale?: string | null;\n translations?: ShellTranslations | null;\n}): ShellI18n {\n const hostLocale = useHostLocale();\n const resolved = useMemo(\n () => normalizeLanguageTag(locale) ?? hostLocale ?? detectShellLocale(translations),\n [locale, hostLocale, translations],\n );\n return useMemo(() => createShellI18n(resolved, translations), [resolved, translations]);\n}\n\nexport function ShellLocaleProvider({ value, children }: { value: ShellI18n; children: ReactNode }) {\n return <ShellLocaleContext.Provider value={value}>{children}</ShellLocaleContext.Provider>;\n}\n\n/** The shell's words and language. Falls back to a detected runtime outside a provider. */\nexport function useShellTranslation(): ShellI18n {\n return useContext(ShellLocaleContext) ?? getFallbackRuntime();\n}\n","import * as React from \"react\"\nimport { createContext, useContext, useMemo, useState } from \"react\"\nimport { PortalRootProvider } from \"./portal-root\"\nimport {\n ShellLocaleProvider,\n useShellI18nRuntime,\n useShellTranslation,\n type ShellTranslations,\n} from \"../i18n/locale-context\"\n\ninterface InteractiveModeContextType {\n interactive: boolean\n setInteractive: (value: boolean) => void\n enableDevTools?: boolean\n}\n\nconst InteractiveModeContext = createContext<InteractiveModeContextType>({\n interactive: true,\n setInteractive: () => {},\n enableDevTools: false,\n})\n\n/**\n * Hook to access interactive mode state\n * Returns true if UI should show interactive elements (default), false to hide them.\n * `locale` is the shell's resolved interface language, so template-owned chrome can follow it.\n */\nexport function useInteractive() {\n const context = useContext(InteractiveModeContext)\n const { locale } = useShellTranslation()\n return useMemo(() => ({ ...context, locale }), [context, locale])\n}\n\n/**\n * Hook to check if UI elements should be hidden\n * Returns true when interactive mode is OFF\n */\nexport function useShouldHideUI(): boolean {\n const { interactive } = useInteractive()\n return !interactive\n}\n\ninterface InteractiveModeProviderProps {\n children: React.ReactNode\n defaultInteractive?: boolean\n enableDevTools?: boolean\n /**\n * The shell's interface language (`de`, `fr`, `it`, `en`; region tags such as `de-CH` reduce\n * to the language). Without it the shell follows the host: uhuu-app's locale from the SDK\n * handshake, then `?lang=`, `<html lang>` and the browser. See docs/editor-shell-translations.md.\n */\n locale?: string\n /**\n * Per-language overrides of the shell's words, or a whole catalog for a language the package\n * does not ship (`{ de: { toolbar: { add: 'Neu' } }, rm: romanshCatalog }`). Pass a stable object.\n */\n translations?: ShellTranslations\n}\n\nfunction isRendererMode() {\n return typeof window !== 'undefined' && Boolean((window as any)?.$uhuu_renderer)\n}\n\nfunction isHostEditorShellDevToolsEnabled() {\n if (typeof window === 'undefined') return false\n\n const hostConfig = (window as any)?.__uhuuPreviewHost\n return Boolean(hostConfig?.enableEditorShellDevTools)\n}\n\n/**\n * InteractiveModeProvider - Global control for showing/hiding UI elements\n * \n * When interactive=true (default): Shows all controls (edit mode)\n * When interactive=false: Hides all UI elements (Print Mode)\n * \n * @param defaultInteractive - Initial interactive mode state (default: true)\n * @param enableDevTools - Force enable dev tools (print mode controls) even in production (default: false)\n * @param locale - Shell interface language; defaults to the host's language, then detection\n * @param translations - Word overrides per language, or catalogs for additional languages\n * \n * @example\n * ```tsx\n * <InteractiveModeProvider defaultInteractive={true} enableDevTools={true}>\n * <MyApp />\n * </InteractiveModeProvider>\n * \n * // Inside components:\n * const { interactive, setInteractive } = useInteractive()\n * <button onClick={() => setInteractive(!interactive)}>\n * {interactive ? 'Hide UI' : 'Show UI'}\n * </button>\n * ```\n */\nexport function InteractiveModeProvider({\n children,\n defaultInteractive = true,\n enableDevTools = false,\n locale,\n translations,\n}: InteractiveModeProviderProps) {\n const shouldDisableInteractive = isRendererMode()\n const effectiveEnableDevTools = enableDevTools || isHostEditorShellDevToolsEnabled()\n\n const effectiveDefaultInteractive = shouldDisableInteractive \n ? false \n : defaultInteractive\n \n const [interactive, setInteractive] = useState(effectiveDefaultInteractive)\n const shellI18n = useShellI18nRuntime({ locale, translations })\n const contextValue = useMemo(\n () => ({ interactive, setInteractive, enableDevTools: effectiveEnableDevTools }),\n [interactive, effectiveEnableDevTools]\n )\n\n return (\n <InteractiveModeContext.Provider value={contextValue}>\n <ShellLocaleProvider value={shellI18n}>\n <PortalRootProvider>\n <div data-uhuu-interactive={interactive ? '' : undefined} style={{ display: 'contents' }}>\n {children}\n </div>\n </PortalRootProvider>\n </ShellLocaleProvider>\n </InteractiveModeContext.Provider>\n )\n}\n\n\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\"\nimport { cn } from \"./cn\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n default: \"bg-gray-900 text-white hover:bg-gray-800\",\n outline: \"border border-gray-300 bg-white hover:bg-gray-50 text-gray-900\",\n ghost: \"hover:bg-gray-100 text-gray-900\",\n secondary: \"bg-gray-100 text-gray-900 hover:bg-gray-200\",\n },\n size: {\n default: \"h-10 px-4 py-2\",\n sm: \"h-9 px-3 text-sm\",\n lg: \"h-11 px-8\",\n icon: \"h-10 w-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, ...props }, ref) => {\n return (\n <button\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n\n","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/primitive.tsx\nvar canUseDOM = !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\nfunction composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) {\n return /* @__PURE__ */ __name(function handleEvent(event) {\n originalEventHandler?.(event);\n if (checkForDefaultPrevented === false || !event || !event.defaultPrevented) {\n return ourEventHandler?.(event);\n }\n }, \"handleEvent\");\n}\n__name(composeEventHandlers, \"composeEventHandlers\");\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}\n__name(getOwnerWindow, \"getOwnerWindow\");\nfunction getOwnerDocument(element) {\n if (!canUseDOM) {\n throw new Error(\"Cannot access document outside of the DOM\");\n }\n return element?.ownerDocument ?? document;\n}\n__name(getOwnerDocument, \"getOwnerDocument\");\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}\n__name(getActiveElement, \"getActiveElement\");\nfunction isFrame(element) {\n return element.tagName === \"IFRAME\";\n}\n__name(isFrame, \"isFrame\");\nexport {\n canUseDOM,\n composeEventHandlers,\n getActiveElement,\n getOwnerDocument,\n getOwnerWindow,\n isFrame\n};\n//# sourceMappingURL=index.mjs.map\n","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// 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}\n__name(setRef, \"setRef\");\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}\n__name(composeRefs, \"composeRefs\");\nfunction useComposedRefs(...refs) {\n return React.useCallback(composeRefs(...refs), refs);\n}\n__name(useComposedRefs, \"useComposedRefs\");\nexport {\n composeRefs,\n useComposedRefs\n};\n//# sourceMappingURL=index.mjs.map\n","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/create-context.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createContext2(rootComponentName, defaultContext) {\n const Context = React.createContext(defaultContext);\n Context.displayName = rootComponentName + \"Context\";\n const Provider = /* @__PURE__ */ __name((props) => {\n const { children, ...context } = props;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n }, \"Provider\");\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName, options = {}) {\n const { optional = false } = options;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n if (optional) return void 0;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n __name(useContext2, \"useContext\");\n return [Provider, useContext2];\n}\n__name(createContext2, \"createContext\");\n// @__NO_SIDE_EFFECTS__\nfunction createContextScope(scopeName, createContextScopeDeps = []) {\n let defaultContexts = [];\n function createContext3(rootComponentName, defaultContext) {\n const BaseContext = React.createContext(defaultContext);\n BaseContext.displayName = rootComponentName + \"Context\";\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n const Provider = /* @__PURE__ */ __name((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 }, \"Provider\");\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName, scope, options = {}) {\n const { optional = false } = options;\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 if (optional) return void 0;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n __name(useContext2, \"useContext\");\n return [Provider, useContext2];\n }\n __name(createContext3, \"createContext\");\n const createScope = /* @__PURE__ */ __name(() => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return /* @__PURE__ */ __name(function useScope(scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n }, \"useScope\");\n }, \"createScope\");\n createScope.scopeName = scopeName;\n return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)];\n}\n__name(createContextScope, \"createContextScope\");\nfunction composeContextScopes(...scopes) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n const createScope = /* @__PURE__ */ __name(() => {\n const scopeHooks = scopes.map((createScope2) => ({\n useScope: createScope2(),\n scopeName: createScope2.scopeName\n }));\n return /* @__PURE__ */ __name(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 }, \"useComposedScopes\");\n }, \"createScope\");\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\n__name(composeContextScopes, \"composeContextScopes\");\nexport {\n createContext2 as createContext,\n createContextScope\n};\n//# sourceMappingURL=index.mjs.map\n","// 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","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/use-effect-event.tsx\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport * as React from \"react\";\nvar useReactEffectEvent = React[\" useEffectEvent \".trim().toString()];\nvar useReactInsertionEffect = React[\" useInsertionEffect \".trim().toString()];\nfunction useEffectEvent(callback) {\n if (typeof useReactEffectEvent === \"function\") {\n return useReactEffectEvent(callback);\n }\n const ref = React.useRef(() => {\n throw new Error(\"Cannot call an event handler while rendering.\");\n });\n if (typeof useReactInsertionEffect === \"function\") {\n useReactInsertionEffect(() => {\n ref.current = callback;\n });\n } else {\n useLayoutEffect(() => {\n ref.current = callback;\n });\n }\n return React.useMemo(() => ((...args) => ref.current?.(...args)), []);\n}\n__name(useEffectEvent, \"useEffectEvent\");\nexport {\n useEffectEvent\n};\n//# sourceMappingURL=index.mjs.map\n","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/use-controllable-state.tsx\nimport * as React from \"react\";\nimport { IS_DEVELOPMENT } from \"@radix-ui/primitive/is-development\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useInsertionEffect = React[\" useInsertionEffect \".trim().toString()] || useLayoutEffect;\nfunction useControllableState({\n prop,\n defaultProp,\n onChange = /* @__PURE__ */ __name(() => {\n }, \"onChange\"),\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 (IS_DEVELOPMENT) {\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}\n__name(useControllableState, \"useControllableState\");\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}\n__name(useUncontrolledState, \"useUncontrolledState\");\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n__name(isFunction, \"isFunction\");\n\n// src/use-controllable-state-reducer.tsx\nimport * as React2 from \"react\";\nimport { IS_DEVELOPMENT as IS_DEVELOPMENT2 } from \"@radix-ui/primitive/is-development\";\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 (IS_DEVELOPMENT2) {\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 }, [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}\n__name(useControllableStateReducer, \"useControllableStateReducer\");\nexport {\n useControllableState,\n useControllableStateReducer\n};\n//# sourceMappingURL=index.mjs.map\n","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/slot.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n let { children, ...slotProps } = props;\n let slottableElement = null;\n let hasSlottable = false;\n const newChildren = [];\n if (isLazyComponent(children) && typeof use === \"function\") {\n children = use(children._payload);\n }\n React.Children.forEach(children, (maybeSlottable) => {\n if (isSlottable(maybeSlottable)) {\n hasSlottable = true;\n const slottable = maybeSlottable;\n let child = \"child\" in slottable.props ? slottable.props.child : slottable.props.children;\n if (isLazyComponent(child) && typeof use === \"function\") {\n child = use(child._payload);\n }\n slottableElement = getSlottableElementFromSlottable(slottable, child);\n newChildren.push(slottableElement?.props?.children);\n } else {\n newChildren.push(maybeSlottable);\n }\n });\n if (slottableElement) {\n slottableElement = React.cloneElement(slottableElement, void 0, newChildren);\n } else if (\n // A `Slottable` was found but it didn't resolve to a single element (e.g.\n // it wrapped multiple elements, text, or a render-prop `child` that\n // wasn't an element). Don't fall back to treating the `Slottable` wrapper\n // itself as the slot target — throw a descriptive error below instead.\n !hasSlottable && React.Children.count(children) === 1 && React.isValidElement(children)\n ) {\n slottableElement = children;\n }\n const slottableElementRef = slottableElement ? getElementRef(slottableElement) : void 0;\n const composedRef = useComposedRefs(forwardedRef, slottableElementRef);\n if (!slottableElement) {\n if (children || children === 0) {\n throw new Error(\n hasSlottable ? createSlottableError(ownerName) : createSlotError(ownerName)\n );\n }\n return children;\n }\n const mergedProps = mergeProps(slotProps, slottableElement.props ?? {});\n if (slottableElement.type !== React.Fragment) {\n mergedProps.ref = forwardedRef ? composedRef : slottableElementRef;\n }\n return React.cloneElement(slottableElement, mergedProps);\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\n__name(createSlot, \"createSlot\");\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\nvar SLOTTABLE_IDENTIFIER = Symbol.for(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = /* @__PURE__ */ __name((props) => \"child\" in props ? props.children(props.child) : props.children, \"Slottable\");\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\n__name(createSlottable, \"createSlottable\");\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nvar getSlottableElementFromSlottable = /* @__PURE__ */ __name((slottable, child) => {\n if (\"child\" in slottable.props) {\n const child2 = slottable.props.child;\n if (!React.isValidElement(child2)) return null;\n return React.cloneElement(child2, void 0, slottable.props.children(child2.props.children));\n }\n return React.isValidElement(child) ? child : null;\n}, \"getSlottableElementFromSlottable\");\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 } else if (propName === \"aria-describedby\") {\n overrideProps[propName] = concatAriaDescribedby(childPropValue, slotPropValue);\n }\n }\n return { ...slotProps, ...overrideProps };\n}\n__name(mergeProps, \"mergeProps\");\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}\n__name(getElementRef, \"getElementRef\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\n__name(isSlottable, \"isSlottable\");\nvar REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\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__name(isLazyComponent, \"isLazyComponent\");\nfunction isPromiseLike(value) {\n return typeof value === \"object\" && value !== null && \"then\" in value;\n}\n__name(isPromiseLike, \"isPromiseLike\");\nfunction concatAriaDescribedby(...values) {\n const ids = /* @__PURE__ */ new Set();\n for (const value of values) {\n if (typeof value !== \"string\") continue;\n for (const id of String(value).trim().split(/\\s+/)) {\n if (id) ids.add(id);\n }\n }\n return ids.size > 0 ? Array.from(ids).join(\" \") : void 0;\n}\n__name(concatAriaDescribedby, \"concatAriaDescribedby\");\nvar createSlotError = /* @__PURE__ */ __name((ownerName) => {\n return `${ownerName} failed to slot onto its children. Expected a single React element child or \\`Slottable\\`.`;\n}, \"createSlotError\");\nvar createSlottableError = /* @__PURE__ */ __name((ownerName) => {\n return `${ownerName} failed to slot onto its \\`Slottable\\`. Expected \\`Slottable\\` to receive a single React element child.`;\n}, \"createSlottableError\");\nvar use = React[\" use \".trim().toString()];\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\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}\n__name(dispatchDiscreteCustomEvent, \"dispatchDiscreteCustomEvent\");\nexport {\n Primitive,\n Primitive as Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/collection-legacy.tsx\nimport * as 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\";\n// @__NO_SIDE_EFFECTS__\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 = /* @__PURE__ */ __name((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 }, \"CollectionProvider\");\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 __name(useCollection, \"useCollection\");\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n useCollection,\n createCollectionScope\n ];\n}\n__name(createCollection, \"createCollection\");\n\n// src/collection.tsx\nimport * as 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 static {\n __name(this, \"OrderedDict\");\n }\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}\n__name(at, \"at\");\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}\n__name(toSafeIndex, \"toSafeIndex\");\nfunction toSafeInteger(number) {\n return number !== number || number === 0 ? 0 : Math.trunc(number);\n}\n__name(toSafeInteger, \"toSafeInteger\");\n\n// src/collection.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\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: /* @__PURE__ */ __name(() => void 0, \"setItemMap\")\n }\n );\n const CollectionProvider = /* @__PURE__ */ __name(({ state, ...props }) => {\n return state ? /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state }) : /* @__PURE__ */ jsx2(CollectionInit, { ...props });\n }, \"CollectionProvider\");\n CollectionProvider.displayName = PROVIDER_NAME;\n const CollectionInit = /* @__PURE__ */ __name((props) => {\n const state = useInitCollection();\n return /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state });\n }, \"CollectionInit\");\n CollectionInit.displayName = PROVIDER_NAME + \"Init\";\n const CollectionProviderImpl = /* @__PURE__ */ __name((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 }, \"CollectionProviderImpl\");\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 __name(useInitCollection, \"useInitCollection\");\n function useCollection(scope) {\n const { itemMap } = useCollectionContext(name + \"CollectionConsumer\", scope);\n return itemMap;\n }\n __name(useCollection, \"useCollection\");\n const functions = {\n createCollectionScope,\n useCollection,\n useInitCollection\n };\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n functions\n ];\n}\n__name(createCollection2, \"createCollection\");\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}\n__name(shallowEqual, \"shallowEqual\");\nfunction isElementPreceding(a, b) {\n return !!(b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING);\n}\n__name(isElementPreceding, \"isElementPreceding\");\nfunction sortByDocumentPosition(a, b) {\n return !a[1].element || !b[1].element ? 0 : isElementPreceding(a[1].element, b[1].element) ? -1 : 1;\n}\n__name(sortByDocumentPosition, \"sortByDocumentPosition\");\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}\n__name(getChildListObserver, \"getChildListObserver\");\nexport {\n createCollection,\n createCollection2 as unstable_createCollection\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/direction.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar Direction = {\n LTR: \"ltr\",\n RTL: \"rtl\"\n};\nvar DirectionContext = React.createContext(void 0);\nvar DirectionProvider = /* @__PURE__ */ __name((props) => {\n const { dir, children } = props;\n return /* @__PURE__ */ jsx(DirectionContext.Provider, { value: dir, children });\n}, \"DirectionProvider\");\nfunction useDirection(localDir) {\n const globalDir = React.useContext(DirectionContext);\n return localDir || globalDir || Direction.LTR;\n}\n__name(useDirection, \"useDirection\");\nexport {\n DirectionProvider,\n DirectionProvider as Provider,\n useDirection\n};\n//# sourceMappingURL=index.mjs.map\n","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// 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}\n__name(useCallbackRef, \"useCallbackRef\");\nexport {\n useCallbackRef\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\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 { jsx } from \"react/jsx-runtime\";\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 // Outside elements that belong to a layer's own dismiss affordance (eg, a\n // dialog overlay). Pressing them should dismiss the layer regardless of\n // whether or not they stop propagation.\n //\n // See https://github.com/radix-ui/primitives/issues/3346\n dismissableSurfaces: /* @__PURE__ */ new Set()\n});\nvar DismissableLayer = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function DismissableLayer2(props, forwardedRef) {\n const {\n disableOutsidePointerEvents = false,\n deferPointerDownOutside = 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, setNode);\n const layers = Array.from(context.layers);\n const [highestLayerWithOutsidePointerEventsDisabled] = [\n ...context.layersWithOutsidePointerEventsDisabled\n ].slice(-1);\n const highestLayerWithOutsidePointerEventsDisabledIndex = highestLayerWithOutsidePointerEventsDisabled ? layers.indexOf(highestLayerWithOutsidePointerEventsDisabled) : -1;\n const index = node ? layers.indexOf(node) : -1;\n const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;\n const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;\n const isDeferredPointerDownOutsideRef = React.useRef(false);\n const pointerDownOutside = usePointerDownOutside(\n (event) => {\n onPointerDownOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n },\n {\n ownerDocument,\n deferPointerDownOutside,\n isDeferredPointerDownOutsideRef,\n dismissableSurfaces: context.dismissableSurfaces,\n shouldHandlePointerDownOutside: React.useCallback(\n (target) => {\n if (!(target instanceof Node)) {\n return false;\n }\n const isPointerDownOnBranch = [...context.branches].some(\n (branch) => branch.contains(target)\n );\n return isPointerEventsEnabled && !isPointerDownOnBranch;\n },\n [context.branches, isPointerEventsEnabled]\n )\n }\n );\n const focusOutside = useFocusOutside((event) => {\n if (deferPointerDownOutside && isDeferredPointerDownOutsideRef.current) {\n return;\n }\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 const isHighestLayer = node ? index === layers.length - 1 : false;\n const handleKeyDown = useCallbackRef((event) => {\n if (event.key !== \"Escape\") {\n return;\n }\n onEscapeKeyDown?.(event);\n if (!event.defaultPrevented && onDismiss) {\n event.preventDefault();\n onDismiss();\n }\n });\n React.useEffect(() => {\n if (!isHighestLayer) {\n return;\n }\n ownerDocument.addEventListener(\"keydown\", handleKeyDown, { capture: true });\n return () => ownerDocument.removeEventListener(\"keydown\", handleKeyDown, { capture: true });\n }, [ownerDocument, isHighestLayer, handleKeyDown]);\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) {\n context.layersWithOutsidePointerEventsDisabled.delete(node);\n if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n }\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 = /* @__PURE__ */ __name(() => force({}), \"handleUpdate\");\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 }, \"DismissableLayer\")\n);\nvar DismissableLayerBranch = /* @__PURE__ */ React.forwardRef(/* @__PURE__ */ __name(function DismissableLayerBranch2(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}, \"DismissableLayerBranch\"));\nfunction useDismissableLayerSurface() {\n const context = React.useContext(DismissableLayerContext);\n const [node, setNode] = React.useState(null);\n React.useEffect(() => {\n if (!node) {\n return;\n }\n context.dismissableSurfaces.add(node);\n return () => {\n context.dismissableSurfaces.delete(node);\n };\n }, [node, context.dismissableSurfaces]);\n return setNode;\n}\n__name(useDismissableLayerSurface, \"useDismissableLayerSurface\");\nvar IS_TRUE = /* @__PURE__ */ __name(() => true, \"IS_TRUE\");\nfunction usePointerDownOutside(onPointerDownOutside, args) {\n const {\n ownerDocument = globalThis?.document,\n deferPointerDownOutside = false,\n isDeferredPointerDownOutsideRef,\n dismissableSurfaces,\n shouldHandlePointerDownOutside = IS_TRUE\n } = args;\n const handlePointerDownOutside = useCallbackRef(onPointerDownOutside);\n const isPointerInsideReactTreeRef = React.useRef(false);\n const isPointerDownOutsideRef = React.useRef(false);\n const interceptedOutsideInteractionEventsRef = React.useRef(/* @__PURE__ */ new Map());\n const handleClickRef = React.useRef(() => {\n });\n React.useEffect(() => {\n function resetOutsideInteraction() {\n isPointerDownOutsideRef.current = false;\n isDeferredPointerDownOutsideRef.current = false;\n interceptedOutsideInteractionEventsRef.current.clear();\n }\n __name(resetOutsideInteraction, \"resetOutsideInteraction\");\n function isOutsideInteractionIntercepted() {\n return Array.from(interceptedOutsideInteractionEventsRef.current.values()).some(Boolean);\n }\n __name(isOutsideInteractionIntercepted, \"isOutsideInteractionIntercepted\");\n function handleInteractionCapture(event) {\n if (!isPointerDownOutsideRef.current) {\n return;\n }\n const target = event.target;\n const isDismissableSurface = target instanceof Node && [...dismissableSurfaces].some((surface) => surface.contains(target));\n if (!isDismissableSurface) {\n interceptedOutsideInteractionEventsRef.current.set(event.type, true);\n }\n if (event.type === \"click\") {\n window.setTimeout(() => {\n if (isPointerDownOutsideRef.current) {\n handleClickRef.current();\n }\n }, 0);\n }\n }\n __name(handleInteractionCapture, \"handleInteractionCapture\");\n function handleInteractionBubble(event) {\n if (isPointerDownOutsideRef.current) {\n interceptedOutsideInteractionEventsRef.current.set(event.type, false);\n }\n }\n __name(handleInteractionBubble, \"handleInteractionBubble\");\n const handlePointerDown = /* @__PURE__ */ __name((event) => {\n if (event.target && !isPointerInsideReactTreeRef.current) {\n let handleAndDispatchPointerDownOutsideEvent2 = function() {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n const wasOutsideInteractionIntercepted = isOutsideInteractionIntercepted();\n resetOutsideInteraction();\n if (!wasOutsideInteractionIntercepted) {\n handleAndDispatchCustomEvent(\n POINTER_DOWN_OUTSIDE,\n handlePointerDownOutside,\n eventDetail,\n { discrete: true }\n );\n }\n };\n var handleAndDispatchPointerDownOutsideEvent = handleAndDispatchPointerDownOutsideEvent2;\n __name(handleAndDispatchPointerDownOutsideEvent2, \"handleAndDispatchPointerDownOutsideEvent\");\n if (!shouldHandlePointerDownOutside(event.target)) {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n resetOutsideInteraction();\n isPointerInsideReactTreeRef.current = false;\n return;\n }\n const eventDetail = { originalEvent: event };\n isPointerDownOutsideRef.current = true;\n isDeferredPointerDownOutsideRef.current = deferPointerDownOutside && event.button === 0;\n interceptedOutsideInteractionEventsRef.current.clear();\n if (!deferPointerDownOutside || event.button !== 0) {\n handleAndDispatchPointerDownOutsideEvent2();\n } else {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n handleClickRef.current = handleAndDispatchPointerDownOutsideEvent2;\n ownerDocument.addEventListener(\"click\", handleClickRef.current, { once: true });\n }\n } else {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n resetOutsideInteraction();\n }\n isPointerInsideReactTreeRef.current = false;\n }, \"handlePointerDown\");\n const outsideInteractionEvents = [\n \"pointerup\",\n \"mousedown\",\n \"mouseup\",\n \"touchstart\",\n \"touchend\",\n \"click\"\n ];\n for (const eventName of outsideInteractionEvents) {\n ownerDocument.addEventListener(eventName, handleInteractionCapture, true);\n ownerDocument.addEventListener(eventName, handleInteractionBubble);\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 for (const eventName of outsideInteractionEvents) {\n ownerDocument.removeEventListener(eventName, handleInteractionCapture, true);\n ownerDocument.removeEventListener(eventName, handleInteractionBubble);\n }\n };\n }, [\n ownerDocument,\n handlePointerDownOutside,\n deferPointerDownOutside,\n isDeferredPointerDownOutsideRef,\n dismissableSurfaces,\n shouldHandlePointerDownOutside\n ]);\n return {\n // ensures we check React component tree (not just DOM tree)\n onPointerDownCapture: /* @__PURE__ */ __name(() => isPointerInsideReactTreeRef.current = true, \"onPointerDownCapture\")\n };\n}\n__name(usePointerDownOutside, \"usePointerDownOutside\");\nfunction useFocusOutside(onFocusOutside, ownerDocument = globalThis?.document) {\n const handleFocusOutside = useCallbackRef(onFocusOutside);\n const isFocusInsideReactTreeRef = React.useRef(false);\n React.useEffect(() => {\n const handleFocus = /* @__PURE__ */ __name((event) => {\n if (event.target && !isFocusInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, {\n discrete: false\n });\n }\n }, \"handleFocus\");\n ownerDocument.addEventListener(\"focusin\", handleFocus);\n return () => ownerDocument.removeEventListener(\"focusin\", handleFocus);\n }, [ownerDocument, handleFocusOutside]);\n return {\n onFocusCapture: /* @__PURE__ */ __name(() => isFocusInsideReactTreeRef.current = true, \"onFocusCapture\"),\n onBlurCapture: /* @__PURE__ */ __name(() => isFocusInsideReactTreeRef.current = false, \"onBlurCapture\")\n };\n}\n__name(useFocusOutside, \"useFocusOutside\");\nfunction dispatchUpdate() {\n const event = new CustomEvent(CONTEXT_UPDATE);\n document.dispatchEvent(event);\n}\n__name(dispatchUpdate, \"dispatchUpdate\");\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}\n__name(handleAndDispatchCustomEvent, \"handleAndDispatchCustomEvent\");\nexport {\n DismissableLayerBranch as Branch,\n DismissableLayer,\n DismissableLayerBranch,\n DismissableLayer as Root,\n useDismissableLayerSurface\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/focus-guards.tsx\nimport * as React from \"react\";\nvar count = 0;\nvar guards = null;\nfunction FocusGuards(props) {\n useFocusGuards();\n return props.children;\n}\n__name(FocusGuards, \"FocusGuards\");\nfunction useFocusGuards() {\n React.useEffect(() => {\n if (!guards) {\n guards = { start: createFocusGuard(), end: createFocusGuard() };\n }\n const { start, end } = guards;\n if (document.body.firstElementChild !== start) {\n document.body.insertAdjacentElement(\"afterbegin\", start);\n }\n if (document.body.lastElementChild !== end) {\n document.body.insertAdjacentElement(\"beforeend\", end);\n }\n count++;\n return () => {\n if (count === 1) {\n guards?.start.remove();\n guards?.end.remove();\n guards = null;\n }\n count = Math.max(0, count - 1);\n };\n }, []);\n}\n__name(useFocusGuards, \"useFocusGuards\");\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}\n__name(createFocusGuard, \"createFocusGuard\");\nexport {\n FocusGuards,\n FocusGuards as Root,\n useFocusGuards\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\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 FocusScope = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function FocusScope2(props, forwardedRef) {\n const {\n loop = false,\n trapped = false,\n branches,\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, setContainer);\n const branchesRef = React.useRef(branches);\n React.useEffect(() => {\n branchesRef.current = branches;\n });\n const isTargetInScope = React.useCallback(\n (target) => {\n if (!target) return false;\n if (container?.contains(target)) return true;\n return Boolean(branchesRef.current?.some((branch) => branch.contains(target)));\n },\n [container]\n );\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 (isTargetInScope(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 (!isTargetInScope(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 __name(handleFocusIn2, \"handleFocusIn\");\n __name(handleFocusOut2, \"handleFocusOut\");\n __name(handleMutations2, \"handleMutations\");\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, isTargetInScope]);\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 }, \"FocusScope\")\n);\nvar FocusScopeBranchContext = React.createContext(null);\nfunction FocusScopeBranchProvider({ registry, children }) {\n if (!registry) {\n return children;\n }\n return /* @__PURE__ */ jsx(FocusScopeBranchContext.Provider, { value: registry, children });\n}\n__name(FocusScopeBranchProvider, \"FocusScopeBranchProvider\");\nfunction useFocusScopeBranchRegistry() {\n const [nodes, setNodes] = React.useState([]);\n const registry = React.useMemo(\n () => ({\n add: /* @__PURE__ */ __name((node) => setNodes((prev) => prev.includes(node) ? prev : [...prev, node]), \"add\"),\n remove: /* @__PURE__ */ __name((node) => setNodes((prev) => prev.filter((current) => current !== node)), \"remove\")\n }),\n []\n );\n return { nodes, registry };\n}\n__name(useFocusScopeBranchRegistry, \"useFocusScopeBranchRegistry\");\nfunction useFocusScopeBranch(node) {\n const registry = React.useContext(FocusScopeBranchContext);\n React.useEffect(() => {\n if (!node || !registry) return;\n registry.add(node);\n return () => registry.remove(node);\n }, [node, registry]);\n}\n__name(useFocusScopeBranch, \"useFocusScopeBranch\");\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}\n__name(focusFirst, \"focusFirst\");\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}\n__name(getTabbableEdges, \"getTabbableEdges\");\nfunction getTabbableCandidates(container) {\n const nodes = [];\n const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n acceptNode: /* @__PURE__ */ __name((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 }, \"acceptNode\")\n });\n while (walker.nextNode()) nodes.push(walker.currentNode);\n return nodes;\n}\n__name(getTabbableCandidates, \"getTabbableCandidates\");\nfunction findVisible(elements, container) {\n const canUseCheckVisibility = typeof container.checkVisibility === \"function\" && container.checkVisibility({ checkVisibilityCSS: true });\n for (const element of elements) {\n const hidden = canUseCheckVisibility ? !element.checkVisibility({ checkVisibilityCSS: true }) : isHidden(element, { upTo: container });\n if (!hidden) {\n return element;\n }\n }\n}\n__name(findVisible, \"findVisible\");\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}\n__name(isHidden, \"isHidden\");\nfunction isSelectableInput(element) {\n return element instanceof HTMLInputElement && \"select\" in element;\n}\n__name(isSelectableInput, \"isSelectableInput\");\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}\n__name(focus, \"focus\");\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}\n__name(createFocusScopesStack, \"createFocusScopesStack\");\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}\n__name(arrayRemove, \"arrayRemove\");\nfunction removeLinks(items) {\n return items.filter((item) => item.tagName !== \"A\");\n}\n__name(removeLinks, \"removeLinks\");\nexport {\n FocusScope,\n FocusScopeBranchProvider,\n FocusScope as Root,\n useFocusScopeBranch,\n useFocusScopeBranchRegistry\n};\n//# sourceMappingURL=index.mjs.map\n","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// 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}\n__name(useId, \"useId\");\nexport {\n useId\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 var _padding$top, _padding$right, _padding$bottom, _padding$left;\n return {\n top: (_padding$top = padding.top) != null ? _padding$top : 0,\n right: (_padding$right = padding.right) != null ? _padding$right : 0,\n bottom: (_padding$bottom = padding.bottom) != null ? _padding$bottom : 0,\n left: (_padding$left = padding.left) != null ? _padding$left : 0\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 const alignment = getAlignment(placement);\n if (alignment) {\n coords[alignmentAxis] += commonAlign * (alignment === 'end' ? 1 : -1) * (rtl && isVertical ? -1 : 1);\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 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 max = clientSize - arrowDimensions[length] - maxPadding;\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = clamp(minPadding, 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 < minPadding ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n const alignmentOffset = shouldAddOffset ? center < minPadding ? center - minPadding : 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 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\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 overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\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\n // No rects (e.g. a hidden or detached reference, or a collapsed range) —\n // keep the existing reference rect rather than resetting to an invalid\n // one with non-finite values.\n if (!nativeClientRects.length) {\n return {};\n }\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 || clientRects[1].left > clientRects[0].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 return rectToClientRect({\n x: left,\n y: top,\n width: right - left,\n height: bottom - 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 return rectToClientRect({\n x: minLeft,\n y: top,\n width: maxRight - minLeft,\n height: bottom - 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(placement);\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const clampCoord = (axis, coord) => clamp(coord + overflow[axis === 'y' ? 'top' : 'left'], coord, coord - overflow[axis === 'y' ? 'bottom' : 'right']);\n if (checkMainAxis) {\n mainAxisCoord = clampCoord(mainAxis, mainAxisCoord);\n }\n if (checkCrossAxis) {\n crossAxisCoord = clampCoord(crossAxis, crossAxisCoord);\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 var _rawOffset$mainAxis, _rawOffset$crossAxis;\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: (_rawOffset$mainAxis = rawOffset.mainAxis) != null ? _rawOffset$mainAxis : 0,\n crossAxis: (_rawOffset$crossAxis = rawOffset.crossAxis) != null ? _rawOffset$crossAxis : 0\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// Method syntax keeps callback parameters bivariant, but expressing the\n// explicit `| undefined` required by `exactOptionalPropertyTypes` needs\n// property syntax, which is contravariant under `strictFunctionTypes`.\n// Extracting the function from a method position restores that bivariance so\n// consumers can still assign callbacks with narrower parameter types.\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 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 shiftData = state.middlewareData.shift;\n const noShift = !shiftData;\n let availableHeight = overflowAvailableHeight;\n let availableWidth = overflowAvailableWidth;\n if (shiftData != null && shiftData.enabled.x) {\n availableWidth = maximumClippingWidth;\n }\n if (shiftData != null && shiftData.enabled.y) {\n availableHeight = maximumClippingHeight;\n }\n if (noShift && !alignment) {\n if (isYAxis) {\n availableWidth = width - 2 * max(overflow.left, overflow.right);\n } else {\n availableHeight = height - 2 * 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).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 return !!floatingOffsetParent && isFixed && floatingOffsetParent === getWindow(element);\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 && offsetParent) {\n const win = getWindow(domElement);\n const offsetWin = isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n let currentWin = win;\n let currentIFrame = getFrameElement(currentWin);\n while (currentIFrame && 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 || !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 element.getClientRects ? 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(html) {\n const scroll = getNodeScroll(html);\n const body = html.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(html);\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, rootBoundary) {\n if (rootBoundary === void 0) {\n rootBoundary = 'viewport';\n }\n const isLayoutViewport = rootBoundary === 'layoutViewport';\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 // Client coordinates are relative to the layout viewport, except in\n // WebKit with an `absolute` strategy, where they are relative to the\n // visual viewport.\n const layoutRelativeClientCoords = !isWebKit() || strategy === 'fixed';\n if (isLayoutViewport) {\n if (!layoutRelativeClientCoords) {\n x = -visualViewport.offsetLeft;\n y = -visualViewport.offsetTop;\n }\n } else {\n width = visualViewport.width;\n height = visualViewport.height;\n if (layoutRelativeClientCoords) {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n }\n const windowScrollbarX = getWindowScrollBarX(html);\n // `scrollbar-gutter: stable` on the <html> reserves gutter space that shrinks\n // the visual width but isn't reflected in `html.clientWidth`, so subtract it.\n // Only the inline-end (right) gutter can hold the scrollbar; `both-edges` also\n // reserves an empty inline-start gutter that clips nothing, so exclude just\n // the one scrollbar-side gutter — halve the measured (two-gutter) total. A\n // left-side scrollbar (`windowScrollbarX > 0`) is already handled by\n // `getHTMLOffset`/`visualViewport.width`; skip it here.\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 reservedWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n const gutter = getComputedStyle(html).scrollbarGutter === 'stable both-edges' ? reservedWidth / 2 : reservedWidth;\n if (gutter <= SCROLLBAR_MAX) {\n width -= gutter;\n }\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 = getScale(element);\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' || clippingAncestor === 'layoutViewport') {\n rect = getViewportRect(element, strategy, clippingAncestor);\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}\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 lastKeptComputedStyle = 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 // Position of the containing block chain below the current node. A fixed\n // element whose containing block hasn't been found yet is a fixed chain.\n const lastPosition = lastKeptComputedStyle ? lastKeptComputedStyle.position : elementIsFixed ? 'fixed' : '';\n\n // A non-containing ancestor does not clip the element when the chain\n // below it escapes it: a fixed chain escapes all ancestors up to the\n // next containing block, an absolute chain escapes static ancestors.\n const shouldDropCurrentNode = !currentNodeIsContaining && (lastPosition === 'fixed' || lastPosition === 'absolute' && computedStyle.position === 'static');\n if (shouldDropCurrentNode) {\n // Drop non-containing blocks.\n result = result.filter(ancestor => ancestor !== currentNode);\n } else {\n // The kept node carries the chain position for the next iteration.\n lastKeptComputedStyle = 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 if (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 }\n }\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 if (!isOffsetParentAnElement && documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\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, ancestorResize) {\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\n // The entry is a snapshot, so the reference may have moved since the\n // intersection was computed (under performance constraints, or between\n // consecutive frames of a multi-frame layout shift). The reported ratio\n // and the observed area are stale in that case and cannot be trusted to\n // detect subsequent movement, so refresh regardless of the ratio.\n if (!rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n return refresh();\n }\n if (ratio !== threshold) {\n if (!isFirstUpdate) {\n return refresh();\n }\n if (!ratio) {\n // If the reference is clipped in place, the ratio is 0. Throttle\n // the refresh 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 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 const win = getWindow(element);\n // The window is a resize ancestor, so when `ancestorResize` is enabled its\n // listener already runs the update on resize. Here we only need to rebuild\n // the `IntersectionObserver` for the new root size, skipping a redundant\n // update. When `ancestorResize` is disabled, this becomes the sole update.\n const handleResize = () => refresh(ancestorResize);\n win.addEventListener('resize', handleResize);\n refresh(true);\n return () => {\n win.removeEventListener('resize', handleResize);\n cleanup();\n };\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 ancestorResize && ancestor.addEventListener('resize', update);\n });\n const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update, ancestorResize) : 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 = options != null ? options : {};\n const platformWithCache = {\n ...platform,\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","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// 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 let rAF = 0;\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 window.cancelAnimationFrame(rAF);\n rAF = window.requestAnimationFrame(() => {\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 });\n resizeObserver.observe(element, { box: \"border-box\" });\n return () => {\n window.cancelAnimationFrame(rAF);\n resizeObserver.unobserve(element);\n };\n } else {\n setSize(void 0);\n }\n }, [element]);\n return size;\n}\n__name(useSize, \"useSize\");\nexport {\n useSize\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\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 Sticky = {\n Partial: \"partial\",\n Always: \"always\"\n};\nvar UpdatePositionStrategy = {\n Optimized: \"optimized\",\n Always: \"always\"\n};\nvar POPPER_NAME = \"Popper\";\nvar [createPopperContext, createPopperScope] = createContextScope(POPPER_NAME);\nvar [PopperProvider, usePopperContext] = createPopperContext(POPPER_NAME);\nvar Popper = /* @__PURE__ */ __name((props) => {\n const { __scopePopper, children } = props;\n const [anchor, setAnchor] = React.useState(null);\n const [placementState, setPlacementState] = React.useState(void 0);\n return /* @__PURE__ */ jsx(\n PopperProvider,\n {\n scope: __scopePopper,\n anchor,\n onAnchorChange: setAnchor,\n placementState,\n setPlacementState,\n children\n }\n );\n}, \"Popper\");\nvar ANCHOR_NAME = \"PopperAnchor\";\nvar PopperAnchor = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function PopperAnchor2(props, forwardedRef) {\n const { __scopePopper, virtualRef, ...anchorProps } = props;\n const context = usePopperContext(ANCHOR_NAME, __scopePopper);\n const ref = React.useRef(null);\n const onAnchorChange = context.onAnchorChange;\n const callbackRef = React.useCallback(\n (node) => {\n ref.current = node;\n if (node) {\n onAnchorChange(node);\n }\n },\n [onAnchorChange]\n );\n const composedRefs = useComposedRefs(forwardedRef, callbackRef);\n const anchorRef = React.useRef(null);\n React.useEffect(() => {\n if (!virtualRef) {\n return;\n }\n const previousAnchor = anchorRef.current;\n anchorRef.current = virtualRef.current;\n if (previousAnchor !== anchorRef.current) {\n onAnchorChange(anchorRef.current);\n }\n });\n const sideAndAlign = context.placementState && getSideAndAlignFromPlacement(context.placementState);\n const placedSide = sideAndAlign?.[0];\n const placedAlign = sideAndAlign?.[1];\n return virtualRef ? null : /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-radix-popper-side\": placedSide,\n \"data-radix-popper-align\": placedAlign,\n ...anchorProps,\n ref: composedRefs\n }\n );\n }, \"PopperAnchor\")\n);\nvar CONTENT_NAME = \"PopperContent\";\nvar [PopperContentProvider, useContentContext] = createPopperContext(CONTENT_NAME);\nvar PopperContent = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function PopperContent2(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 = Sticky.Partial,\n hideWhenDetached = false,\n updatePositionStrategy = 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, setContent);\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: /* @__PURE__ */ __name((...args) => {\n const cleanup = autoUpdate(...args, {\n animationFrame: updatePositionStrategy === UpdatePositionStrategy.Always\n });\n return cleanup;\n }, \"whileElementsMounted\"),\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 === Sticky.Partial ? limitShift() : void 0,\n ...detectOverflowOptions\n }),\n avoidCollisions && flip({ ...detectOverflowOptions }),\n size({\n ...detectOverflowOptions,\n apply: /* @__PURE__ */ __name(({ 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 }, \"apply\")\n }),\n arrow && floatingUIarrow({ element: arrow, padding: arrowPadding }),\n transformOrigin({ arrowWidth, arrowHeight }),\n hideWhenDetached && hide({\n strategy: \"referenceHidden\",\n ...detectOverflowOptions,\n // `hide` detects whether the anchor (reference) is clipped, so when\n // no explicit `collisionBoundary` is set we fall back to Floating\n // UI's default clipping ancestors (e.g. a scrollable menu). This\n // lets an occluded submenu hide once its anchor scrolls out of view\n // (#3237). The collision/size middlewares deliberately keep the\n // viewport-based default to avoid clamping content rendered inside\n // transformed or overflow-clipping portal containers.\n boundary: hasExplicitBoundaries ? detectOverflowOptions.boundary : void 0\n })\n ]\n });\n const setPlacementState = context.setPlacementState;\n useLayoutEffect(() => {\n setPlacementState(placement);\n return () => {\n setPlacementState(void 0);\n };\n }, [placement, setPlacementState]);\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 placedAlign,\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\n // measurements done) we prevent animations so that users'\n // animations don't kick in too early from the wrong sides.\n animation: !isPositioned ? \"none\" : contentProps.style?.animation\n }\n }\n )\n }\n )\n }\n );\n }, \"PopperContent\")\n);\nvar ARROW_NAME = \"PopperArrow\";\nvar OPPOSITE_SIDE = {\n top: \"bottom\",\n right: \"left\",\n bottom: \"top\",\n left: \"right\"\n};\nvar PopperArrow = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(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 }, \"PopperArrow\")\n);\nfunction isNotNull(value) {\n return value !== null;\n}\n__name(isNotNull, \"isNotNull\");\nvar transformOrigin = /* @__PURE__ */ __name((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}), \"transformOrigin\");\nfunction getSideAndAlignFromPlacement(placement) {\n const [side, align = \"center\"] = placement.split(\"-\");\n return [side, align];\n}\n__name(getSideAndAlignFromPlacement, \"getSideAndAlignFromPlacement\");\nexport {\n ALIGN_OPTIONS,\n PopperAnchor as Anchor,\n PopperArrow as Arrow,\n PopperContent as Content,\n Popper,\n PopperAnchor,\n PopperArrow,\n PopperContent,\n Popper as Root,\n SIDE_OPTIONS,\n createPopperScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/portal.tsx\nimport * as React from \"react\";\nimport * as 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 = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function Portal2(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 }, \"Portal\")\n);\nexport {\n Portal,\n Portal as Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/presence.tsx\nimport * as React2 from \"react\";\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__name(useStateMachine, \"useStateMachine\");\n\n// src/presence.tsx\nvar Presence = /* @__PURE__ */ __name((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 = useStableComposedRefs(presence.ref, getElementRef(child));\n const forceMount = typeof children === \"function\";\n return forceMount || presence.isPresent ? React2.cloneElement(child, { ref }) : null;\n}, \"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 mountAnimationNameRef = React2.useRef(void 0);\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 if (state === \"mounted\") {\n prevAnimationNameRef.current = mountAnimationNameRef.current ?? getAnimationName(stylesRef.current);\n mountAnimationNameRef.current = void 0;\n } else {\n prevAnimationNameRef.current = \"none\";\n }\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 mountAnimationNameRef.current = currentAnimationName;\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 = /* @__PURE__ */ __name((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 }, \"handleAnimationEnd\");\n const handleAnimationStart = /* @__PURE__ */ __name((event) => {\n if (event.target === node) {\n prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n }\n }, \"handleAnimationStart\");\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 if (node2) {\n const styles = getComputedStyle(node2);\n stylesRef.current = styles;\n mountAnimationNameRef.current = getAnimationName(styles);\n } else {\n stylesRef.current = null;\n }\n setNode(node2);\n }, [])\n };\n}\n__name(usePresence, \"usePresence\");\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}\n__name(setRef, \"setRef\");\nfunction useStableComposedRefs(...refs) {\n const refsRef = React2.useRef(refs);\n refsRef.current = refs;\n return React2.useCallback((node) => {\n const currentRefs = refsRef.current;\n let hasCleanup = false;\n const cleanups = currentRefs.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(currentRefs[i], null);\n }\n }\n };\n }\n }, []);\n}\n__name(useStableComposedRefs, \"useStableComposedRefs\");\nfunction getAnimationName(styles) {\n return styles?.animationName || \"none\";\n}\n__name(getAnimationName, \"getAnimationName\");\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}\n__name(getElementRef, \"getElementRef\");\nexport {\n Presence,\n Presence as Root\n};\n//# sourceMappingURL=index.mjs.map\n","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/use-is-hydrated.tsx\nimport * as React2 from \"react\";\n\n// src/use-is-hydrated-legacy.ts\nimport * as React from \"react\";\nvar _isHydrated = false;\nfunction useIsHydrated() {\n const [isHydrated, setIsHydrated] = React.useState(_isHydrated);\n React.useEffect(() => {\n if (!_isHydrated) {\n _isHydrated = true;\n setIsHydrated(true);\n }\n }, []);\n return isHydrated;\n}\n__name(useIsHydrated, \"useIsHydrated\");\n\n// src/use-is-hydrated.tsx\nvar useReactSyncExternalStore = React2[\" useSyncExternalStore \".trim().toString()];\nfunction subscribe() {\n return () => {\n };\n}\n__name(subscribe, \"subscribe\");\nfunction useIsHydratedModern() {\n return useReactSyncExternalStore(\n subscribe,\n () => true,\n () => false\n );\n}\n__name(useIsHydratedModern, \"useIsHydratedModern\");\nvar useIsHydrated2 = typeof useReactSyncExternalStore === \"function\" ? useIsHydratedModern : useIsHydrated;\nexport {\n useIsHydrated2 as useIsHydrated\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\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 { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { useIsHydrated } from \"@radix-ui/react-use-is-hydrated\";\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 Orientation = {\n Vertical: \"vertical\",\n Horizontal: \"horizontal\"\n};\nvar Direction = {\n LTR: \"ltr\",\n RTL: \"rtl\"\n};\nvar [RovingFocusProvider, useRovingFocusContext] = createRovingFocusGroupContext(GROUP_NAME);\nvar RovingFocusGroup = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function RovingFocusGroup2(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 }, \"RovingFocusGroup\")\n);\nvar RovingFocusGroupImpl = /* @__PURE__ */ React.forwardRef(/* @__PURE__ */ __name(function RovingFocusGroupImpl2(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}, \"RovingFocusGroupImpl\"));\nvar ITEM_NAME = \"RovingFocusGroupItem\";\nvar RovingFocusGroupItem = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function RovingFocusGroupItem2(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 const isHydrated = useIsHydrated();\n useLayoutEffect(() => {\n if (!isHydrated || !focusable) {\n return;\n }\n onFocusableItemAdd();\n return () => onFocusableItemRemove();\n }, [isHydrated, focusable, onFocusableItemAdd, onFocusableItemRemove]);\n React.useEffect(() => {\n if (isHydrated || !focusable) {\n return;\n }\n onFocusableItemAdd();\n return () => onFocusableItemRemove();\n }, [isHydrated, 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 }, \"RovingFocusGroupItem\")\n);\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 !== Direction.RTL) return key;\n return key === \"ArrowLeft\" ? \"ArrowRight\" : key === \"ArrowRight\" ? \"ArrowLeft\" : key;\n}\n__name(getDirectionAwareKey, \"getDirectionAwareKey\");\nfunction getFocusIntent(event, orientation, dir) {\n const key = getDirectionAwareKey(event.key, dir);\n if (orientation === Orientation.Vertical && [\"ArrowLeft\", \"ArrowRight\"].includes(key)) {\n return void 0;\n }\n if (orientation === Orientation.Horizontal && [\"ArrowUp\", \"ArrowDown\"].includes(key)) {\n return void 0;\n }\n return MAP_KEY_TO_FOCUS_INTENT[key];\n}\n__name(getFocusIntent, \"getFocusIntent\");\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}\n__name(focusFirst, \"focusFirst\");\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\n__name(wrapArray, \"wrapArray\");\nexport {\n RovingFocusGroupItem as Item,\n RovingFocusGroup as Root,\n RovingFocusGroup,\n RovingFocusGroupItem,\n createRovingFocusGroupScope\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\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\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 } 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 {\n FocusScope,\n FocusScopeBranchProvider,\n useFocusScopeBranch,\n useFocusScopeBranchRegistry\n} 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 Direction = {\n LTR: \"ltr\",\n RTL: \"rtl\"\n};\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 = /* @__PURE__ */ __name((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 = /* @__PURE__ */ __name(() => {\n isUsingKeyboardRef.current = true;\n document.addEventListener(\"pointerdown\", handlePointer, { capture: true, once: true });\n document.addEventListener(\"pointermove\", handlePointer, { capture: true, once: true });\n }, \"handleKeyDown\");\n const handlePointer = /* @__PURE__ */ __name(() => isUsingKeyboardRef.current = false, \"handlePointer\");\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 React.useEffect(() => {\n if (!open) {\n return;\n }\n const handleBlur = /* @__PURE__ */ __name(() => handleOpenChange(false), \"handleBlur\");\n window.addEventListener(\"blur\", handleBlur);\n return () => window.removeEventListener(\"blur\", handleBlur);\n }, [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 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}, \"Menu\");\nvar MenuAnchor = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function MenuAnchor2(props, forwardedRef) {\n const { __scopeMenu, ...anchorProps } = props;\n const popperScope = usePopperScope(__scopeMenu);\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { ...popperScope, ...anchorProps, ref: forwardedRef });\n }, \"MenuAnchor\")\n);\nvar PORTAL_NAME = \"MenuPortal\";\nvar [PortalProvider, usePortalContext] = createMenuContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar MenuPortal = /* @__PURE__ */ __name((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}, \"MenuPortal\");\nvar CONTENT_NAME = \"MenuContent\";\nvar [MenuContentProvider, useMenuContentContext] = createMenuContext(CONTENT_NAME);\nvar MenuContent = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function MenuContent2(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 }, \"MenuContent\")\n);\nvar MenuRootContentModal = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function MenuRootContentModal2(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 }, \"MenuRootContentModal\")\n);\nvar MenuRootContentNonModal = /* @__PURE__ */ React.forwardRef(/* @__PURE__ */ __name(function MenuRootContentNonModal2(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}, \"MenuRootContentNonModal\"));\nvar Slot = createSlot(\"MenuContent.ScrollLock\");\nvar MenuContentImpl = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function MenuContentImpl2(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 [branchNode, setBranchNode] = React.useState(null);\n useFocusScopeBranch(branchNode);\n const { nodes: branchNodes, registry: branchRegistry } = useFocusScopeBranchRegistry();\n const isModal = Boolean(trapFocus || disableOutsideScroll);\n const composedRefs = useComposedRefs(\n forwardedRef,\n contentRef,\n context.onContentChange,\n setBranchNode\n );\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 shards = React.useMemo(\n () => disableOutsideScroll ? [contentRef, ...branchNodes.map((node) => ({ current: node }))] : [],\n [contentRef, branchNodes, disableOutsideScroll]\n );\n const ScrollLockWrapper = disableOutsideScroll ? RemoveScroll : React.Fragment;\n const scrollLockWrapperProps = disableOutsideScroll ? {\n as: Slot,\n allowPinchZoom: true,\n shards\n } : void 0;\n const handleTypeaheadSearch = /* @__PURE__ */ __name((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 (/* @__PURE__ */ __name((function updateSearch(value) {\n searchRef.current = value;\n window.clearTimeout(timerRef.current);\n if (value !== \"\") timerRef.current = window.setTimeout(() => updateSearch(\"\"), 1e3);\n }), \"updateSearch\"))(search);\n if (newItem) {\n setTimeout(() => newItem.focus());\n }\n }, \"handleTypeaheadSearch\");\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(FocusScopeBranchProvider, { registry: isModal ? branchRegistry : null, children: /* @__PURE__ */ jsx(ScrollLockWrapper, { ...scrollLockWrapperProps, children: /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n trapped: trapFocus,\n branches: branchNodes,\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 }, \"MenuContentImpl\")\n);\nvar MenuGroup = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function MenuGroup2(props, forwardedRef) {\n const { __scopeMenu, ...groupProps } = props;\n return /* @__PURE__ */ jsx(Primitive.div, { role: \"group\", ...groupProps, ref: forwardedRef });\n }, \"MenuGroup\")\n);\nvar MenuLabel = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function MenuLabel2(props, forwardedRef) {\n const { __scopeMenu, ...labelProps } = props;\n return /* @__PURE__ */ jsx(Primitive.div, { ...labelProps, ref: forwardedRef });\n }, \"MenuLabel\")\n);\nvar ITEM_NAME = \"MenuItem\";\nvar ITEM_SELECT = \"menu.itemSelect\";\nvar MenuItem = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function MenuItem2(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 = /* @__PURE__ */ __name(() => {\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 }, \"handleSelect\");\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 if (disabled || event.target !== event.currentTarget) {\n return;\n }\n const isTypingAhead = contentContext.searchRef.current !== \"\";\n if (isTypingAhead && event.key === \" \") {\n return;\n }\n if (SELECTION_KEYS.includes(event.key)) {\n event.currentTarget.click();\n event.preventDefault();\n }\n })\n }\n );\n }, \"MenuItem\")\n);\nvar MenuItemImpl = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function MenuItemImpl2(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 }, \"MenuItemImpl\")\n);\nvar MenuCheckboxItem = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function MenuCheckboxItem2(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 }, \"MenuCheckboxItem\")\n);\nvar RADIO_GROUP_NAME = \"MenuRadioGroup\";\nvar [RadioGroupProvider, useRadioGroupContext] = createMenuContext(\n RADIO_GROUP_NAME,\n { value: void 0, onValueChange: /* @__PURE__ */ __name(() => {\n }, \"onValueChange\") }\n);\nvar MenuRadioGroup = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function MenuRadioGroup2(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 }, \"MenuRadioGroup\")\n);\nvar RADIO_ITEM_NAME = \"MenuRadioItem\";\nvar MenuRadioItem = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function MenuRadioItem2(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 }, \"MenuRadioItem\")\n);\nvar ITEM_INDICATOR_NAME = \"MenuItemIndicator\";\nvar [ItemIndicatorProvider, useItemIndicatorContext] = createMenuContext(\n ITEM_INDICATOR_NAME,\n { checked: false }\n);\nvar MenuItemIndicator = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function MenuItemIndicator2(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 }, \"MenuItemIndicator\")\n);\nvar MenuSeparator = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function MenuSeparator2(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 }, \"MenuSeparator\")\n);\nvar MenuArrow = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function MenuArrow2(props, forwardedRef) {\n const { __scopeMenu, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeMenu);\n return /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });\n }, \"MenuArrow\")\n);\nvar SUB_NAME = \"MenuSub\";\nvar [MenuSubProvider, useMenuSubContext] = createMenuContext(SUB_NAME);\nvar MenuSub = /* @__PURE__ */ __name((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}, \"MenuSub\");\nvar SUB_TRIGGER_NAME = \"MenuSubTrigger\";\nvar MenuSubTrigger = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function MenuSubTrigger2(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 const composedRefs = useComposedRefs(forwardedRef, subContext.onTriggerChange);\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\": context.open ? subContext.contentId : void 0,\n \"data-state\": getOpenState(context.open),\n ...props,\n ref: composedRefs,\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 if (props.disabled || event.target !== event.currentTarget) {\n return;\n }\n const isTypingAhead = contentContext.searchRef.current !== \"\";\n if (isTypingAhead && event.key === \" \") {\n return;\n }\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 }, \"MenuSubTrigger\")\n);\nvar SUB_CONTENT_NAME = \"MenuSubContent\";\nvar MenuSubContent = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function MenuSubContent2(props, forwardedRef) {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeMenu);\n const { forceMount = portalContext.forceMount, align = \"start\", ...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,\n side: rootContext.dir === Direction.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 }, \"MenuSubContent\")\n);\nfunction getOpenState(open) {\n return open ? \"open\" : \"closed\";\n}\n__name(getOpenState, \"getOpenState\");\nfunction isIndeterminate(checked) {\n return checked === \"indeterminate\";\n}\n__name(isIndeterminate, \"isIndeterminate\");\nfunction getCheckedState(checked) {\n return isIndeterminate(checked) ? \"indeterminate\" : checked ? \"checked\" : \"unchecked\";\n}\n__name(getCheckedState, \"getCheckedState\");\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}\n__name(focusFirst, \"focusFirst\");\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\n__name(wrapArray, \"wrapArray\");\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}\n__name(getNextMatch, \"getNextMatch\");\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}\n__name(isPointInPolygon, \"isPointInPolygon\");\nfunction isPointerInGraceArea(event, area) {\n if (!area) return false;\n const cursorPos = { x: event.clientX, y: event.clientY };\n return isPointInPolygon(cursorPos, area);\n}\n__name(isPointerInGraceArea, \"isPointerInGraceArea\");\nfunction whenMouse(handler) {\n return (event) => event.pointerType === \"mouse\" ? handler(event) : void 0;\n}\n__name(whenMouse, \"whenMouse\");\nexport {\n MenuAnchor as Anchor,\n MenuArrow as Arrow,\n MenuCheckboxItem as CheckboxItem,\n MenuContent as Content,\n MenuGroup as Group,\n MenuItem as Item,\n MenuItemIndicator as ItemIndicator,\n MenuLabel as 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 MenuPortal as Portal,\n MenuRadioGroup as RadioGroup,\n MenuRadioItem as RadioItem,\n Menu as Root,\n MenuSeparator as Separator,\n MenuSub as Sub,\n MenuSubContent as SubContent,\n MenuSubTrigger as SubTrigger,\n createMenuScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/dropdown-menu.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 { Primitive } from \"@radix-ui/react-primitive\";\nimport * as MenuPrimitive from \"@radix-ui/react-menu\";\nimport { createMenuScope } from \"@radix-ui/react-menu\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DROPDOWN_MENU_NAME = \"DropdownMenu\";\nvar [createDropdownMenuContext, createDropdownMenuScope] = createContextScope(\n DROPDOWN_MENU_NAME,\n [createMenuScope]\n);\nvar useMenuScope = createMenuScope();\nvar [DropdownMenuProvider, useDropdownMenuContext] = createDropdownMenuContext(DROPDOWN_MENU_NAME);\nvar DropdownMenu = /* @__PURE__ */ __name((props) => {\n const {\n __scopeDropdownMenu,\n children,\n dir,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true\n } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const triggerRef = React.useRef(null);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: DROPDOWN_MENU_NAME\n });\n return /* @__PURE__ */ jsx(\n DropdownMenuProvider,\n {\n scope: __scopeDropdownMenu,\n triggerId: useId(),\n triggerRef,\n contentId: useId(),\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n modal,\n children: /* @__PURE__ */ jsx(MenuPrimitive.Root, { ...menuScope, open, onOpenChange: setOpen, dir, modal, children })\n }\n );\n}, \"DropdownMenu\");\nvar TRIGGER_NAME = \"DropdownMenuTrigger\";\nvar DropdownMenuTrigger = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function DropdownMenuTrigger2(props, forwardedRef) {\n const { __scopeDropdownMenu, disabled = false, ...triggerProps } = props;\n const context = useDropdownMenuContext(TRIGGER_NAME, __scopeDropdownMenu);\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const composedRefs = useComposedRefs(forwardedRef, context.triggerRef);\n return /* @__PURE__ */ jsx(MenuPrimitive.Anchor, { asChild: true, ...menuScope, children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n id: context.triggerId,\n \"aria-haspopup\": \"menu\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.open ? context.contentId : void 0,\n \"data-state\": context.open ? \"open\" : \"closed\",\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n ...triggerProps,\n ref: composedRefs,\n onPointerDown: composeEventHandlers(props.onPointerDown, (event) => {\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onOpenToggle();\n if (!context.open) event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if (disabled) return;\n if ([\"Enter\", \" \"].includes(event.key)) context.onOpenToggle();\n if (event.key === \"ArrowDown\") context.onOpenChange(true);\n if ([\"Enter\", \" \", \"ArrowDown\"].includes(event.key)) event.preventDefault();\n })\n }\n ) });\n }, \"DropdownMenuTrigger\")\n);\nvar DropdownMenuPortal = /* @__PURE__ */ __name((props) => {\n const { __scopeDropdownMenu, ...portalProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Portal, { ...menuScope, ...portalProps });\n}, \"DropdownMenuPortal\");\nvar CONTENT_NAME = \"DropdownMenuContent\";\nvar DropdownMenuContent = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function DropdownMenuContent2(props, forwardedRef) {\n const { __scopeDropdownMenu, ...contentProps } = props;\n const context = useDropdownMenuContext(CONTENT_NAME, __scopeDropdownMenu);\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const hasInteractedOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n MenuPrimitive.Content,\n {\n id: context.contentId,\n \"aria-labelledby\": context.triggerId,\n ...menuScope,\n ...contentProps,\n ref: forwardedRef,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n hasInteractedOutsideRef.current = false;\n event.preventDefault();\n }),\n onInteractOutside: composeEventHandlers(props.onInteractOutside, (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 (!context.modal || isRightClick) hasInteractedOutsideRef.current = true;\n }),\n style: {\n ...props.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-dropdown-menu-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-dropdown-menu-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-dropdown-menu-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-dropdown-menu-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-dropdown-menu-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n );\n }, \"DropdownMenuContent\")\n);\nvar DropdownMenuGroup = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function DropdownMenuGroup2(props, forwardedRef) {\n const { __scopeDropdownMenu, ...groupProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Group, { ...menuScope, ...groupProps, ref: forwardedRef });\n }, \"DropdownMenuGroup\")\n);\nvar DropdownMenuLabel = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function DropdownMenuLabel2(props, forwardedRef) {\n const { __scopeDropdownMenu, ...labelProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Label, { ...menuScope, ...labelProps, ref: forwardedRef });\n }, \"DropdownMenuLabel\")\n);\nvar DropdownMenuItem = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function DropdownMenuItem2(props, forwardedRef) {\n const { __scopeDropdownMenu, ...itemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Item, { ...menuScope, ...itemProps, ref: forwardedRef });\n }, \"DropdownMenuItem\")\n);\nvar DropdownMenuCheckboxItem = /* @__PURE__ */ React.forwardRef(/* @__PURE__ */ __name(function DropdownMenuCheckboxItem2(props, forwardedRef) {\n const { __scopeDropdownMenu, ...checkboxItemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.CheckboxItem, { ...menuScope, ...checkboxItemProps, ref: forwardedRef });\n}, \"DropdownMenuCheckboxItem\"));\nvar DropdownMenuRadioGroup = /* @__PURE__ */ React.forwardRef(/* @__PURE__ */ __name(function DropdownMenuRadioGroup2(props, forwardedRef) {\n const { __scopeDropdownMenu, ...radioGroupProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.RadioGroup, { ...menuScope, ...radioGroupProps, ref: forwardedRef });\n}, \"DropdownMenuRadioGroup\"));\nvar DropdownMenuRadioItem = /* @__PURE__ */ React.forwardRef(/* @__PURE__ */ __name(function DropdownMenuRadioItem2(props, forwardedRef) {\n const { __scopeDropdownMenu, ...radioItemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.RadioItem, { ...menuScope, ...radioItemProps, ref: forwardedRef });\n}, \"DropdownMenuRadioItem\"));\nvar DropdownMenuItemIndicator = /* @__PURE__ */ React.forwardRef(/* @__PURE__ */ __name(function DropdownMenuItemIndicator2(props, forwardedRef) {\n const { __scopeDropdownMenu, ...itemIndicatorProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.ItemIndicator, { ...menuScope, ...itemIndicatorProps, ref: forwardedRef });\n}, \"DropdownMenuItemIndicator\"));\nvar DropdownMenuSeparator = /* @__PURE__ */ React.forwardRef(/* @__PURE__ */ __name(function DropdownMenuSeparator2(props, forwardedRef) {\n const { __scopeDropdownMenu, ...separatorProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Separator, { ...menuScope, ...separatorProps, ref: forwardedRef });\n}, \"DropdownMenuSeparator\"));\nvar DropdownMenuArrow = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function DropdownMenuArrow2(props, forwardedRef) {\n const { __scopeDropdownMenu, ...arrowProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Arrow, { ...menuScope, ...arrowProps, ref: forwardedRef });\n }, \"DropdownMenuArrow\")\n);\nvar DropdownMenuSub = /* @__PURE__ */ __name((props) => {\n const { __scopeDropdownMenu, children, open: openProp, onOpenChange, defaultOpen } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: \"DropdownMenuSub\"\n });\n return /* @__PURE__ */ jsx(MenuPrimitive.Sub, { ...menuScope, open, onOpenChange: setOpen, children });\n}, \"DropdownMenuSub\");\nvar DropdownMenuSubTrigger = /* @__PURE__ */ React.forwardRef(/* @__PURE__ */ __name(function DropdownMenuSubTrigger2(props, forwardedRef) {\n const { __scopeDropdownMenu, ...subTriggerProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.SubTrigger, { ...menuScope, ...subTriggerProps, ref: forwardedRef });\n}, \"DropdownMenuSubTrigger\"));\nvar DropdownMenuSubContent = /* @__PURE__ */ React.forwardRef(/* @__PURE__ */ __name(function DropdownMenuSubContent2(props, forwardedRef) {\n const { __scopeDropdownMenu, ...subContentProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\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-dropdown-menu-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-dropdown-menu-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-dropdown-menu-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-dropdown-menu-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-dropdown-menu-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n );\n}, \"DropdownMenuSubContent\"));\nexport {\n DropdownMenuArrow as Arrow,\n DropdownMenuCheckboxItem as CheckboxItem,\n DropdownMenuContent as Content,\n DropdownMenu,\n DropdownMenuArrow,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuItemIndicator,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n DropdownMenuGroup as Group,\n DropdownMenuItem as Item,\n DropdownMenuItemIndicator as ItemIndicator,\n DropdownMenuLabel as Label,\n DropdownMenuPortal as Portal,\n DropdownMenuRadioGroup as RadioGroup,\n DropdownMenuRadioItem as RadioItem,\n DropdownMenu as Root,\n DropdownMenuSeparator as Separator,\n DropdownMenuSub as Sub,\n DropdownMenuSubContent as SubContent,\n DropdownMenuSubTrigger as SubTrigger,\n DropdownMenuTrigger as Trigger,\n createDropdownMenuScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\"\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimport { cn } from \"./cn\"\nimport { usePortalRoot } from \"../editor-shell/portal-root\"\n\nconst DropdownMenu = DropdownMenuPrimitive.Root\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group\n\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-gray-100 data-[state=open]:bg-gray-100\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n >\n {children}\n </DropdownMenuPrimitive.SubTrigger>\n))\nDropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref} \n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border border-gray-200 bg-white p-1 text-gray-900 shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => {\n const { portalContainer } = usePortalRoot();\n\n return (\n <DropdownMenuPrimitive.Portal container={portalContainer || undefined}>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n data-uhuu-editor\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border border-gray-200 bg-white p-1 text-gray-900 shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n})\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-gray-100 focus:text-gray-900 data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-gray-100 focus:text-gray-900 data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n checked={checked}\n {...props}\n >\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n))\nDropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-gray-100 focus:text-gray-900 data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n {children}\n </DropdownMenuPrimitive.RadioItem>\n))\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n \"px-2 py-1.5 text-sm font-medium\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-gray-200\", className)}\n {...props}\n />\n))\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)}\n {...props}\n />\n )\n}\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\"\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuRadioGroup,\n}\n\n","import * as React from \"react\"\nimport { MoreHorizontal } from \"lucide-react\"\nimport type { ImageOption } from './image-with-options'\nimport type { ImageAnchorInsets } from './image-anchor-geometry'\nimport { useShouldHideUI } from \"../editor-shell/interactive-mode-context\"\nimport { Button } from \"../ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"../ui/dropdown-menu\"\nimport { cn } from \"../ui/cn\"\nimport { useShellTranslation } from \"../i18n/locale-context\"\n\ntype OptionSelectEvent = Event | React.SyntheticEvent\n\nexport const handleOptionSelect = (event: OptionSelectEvent, option: ImageOption) => {\n if (typeof window !== \"undefined\" && (window as any).$uhuu_renderer) return\n\n event.stopPropagation()\n\n if (option.onSelect) {\n option.onSelect(event)\n return\n }\n\n if (option.dialog && typeof window !== \"undefined\") {\n ;(window as any).$uhuu?.editDialog?.(option.dialog)\n }\n}\n\nexport const renderOverlay = (\n overlaySvg: string | undefined,\n overlayClassName: string | undefined\n): React.ReactNode => {\n if (!overlaySvg) return null\n \n const trimmed = overlaySvg.trim()\n const isInlineSvg = trimmed.startsWith(\"<\")\n\n if (isInlineSvg) {\n const normalizedSvg = trimmed.replace(/<svg\\b([^>]*)>/i, (match, attrs) => {\n let nextAttrs = attrs\n if (/\\bwidth=/.test(nextAttrs)) {\n nextAttrs = nextAttrs.replace(/\\bwidth=(\\\"[^\\\"]*\\\"|'[^']*'|[^\\s>]+)/i, 'width=\"100%\"')\n } else {\n nextAttrs += ' width=\"100%\"'\n }\n if (/\\bheight=/.test(nextAttrs)) {\n nextAttrs = nextAttrs.replace(/\\bheight=(\\\"[^\\\"]*\\\"|'[^']*'|[^\\s>]+)/i, 'height=\"100%\"')\n } else {\n nextAttrs += ' height=\"100%\"'\n }\n if (/\\bpreserveAspectRatio=/.test(nextAttrs)) {\n nextAttrs = nextAttrs.replace(\n /\\bpreserveAspectRatio=(\\\"[^\\\"]*\\\"|'[^']*'|[^\\s>]+)/i,\n 'preserveAspectRatio=\"xMidYMid slice\"'\n )\n } else {\n nextAttrs += ' preserveAspectRatio=\"xMidYMid slice\"'\n }\n return `<svg${nextAttrs}>`\n })\n return (\n <div\n className={cn(\"pointer-events-none absolute inset-0 z-10\", overlayClassName)}\n aria-hidden=\"true\"\n dangerouslySetInnerHTML={{ __html: normalizedSvg }}\n />\n )\n }\n\n return (\n <img\n src={overlaySvg}\n alt=\"\"\n aria-hidden=\"true\"\n className={cn(\n \"pointer-events-none absolute inset-0 z-10 h-full w-full object-cover\",\n overlayClassName\n )}\n />\n )\n}\n\nfunction ImageOptionsButton({ options, anchorInsets }: { options: ImageOption[]; anchorInsets?: ImageAnchorInsets }) {\n const { t } = useShellTranslation()\n\n const button = (\n <div className=\"pointer-events-auto absolute right-2 top-2 z-20\">\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"secondary\"\n size=\"icon\"\n title={t('image.options')}\n className=\"h-7 w-7 shadow-sm\"\n onPointerDown={(event) => event.stopPropagation()}\n onClick={(event) => event.stopPropagation()}\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent className=\"w-40 p-1.5\" align=\"end\">\n {options.map((option) => (\n <DropdownMenuItem\n key={option.id}\n onSelect={(event) => handleOptionSelect(event, option)}\n disabled={option.disabled}\n >\n {option.icon && <span className=\"mr-2 inline-flex\">{option.icon}</span>}\n <span>{option.label}</span>\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n )\n\n // Bleed/spread images are absolutely positioned siblings, so the button would otherwise\n // anchor to the page instead of the image. The anchor box restores that relationship.\n if (!anchorInsets) return button\n\n return (\n <div className=\"pointer-events-none absolute z-20\" style={anchorInsets}>\n {button}\n </div>\n )\n}\n\nexport const renderOptionsButton = (\n options: ImageOption[],\n showOptions: boolean,\n anchorInsets?: ImageAnchorInsets\n): React.ReactNode => {\n if (!showOptions) return null\n return <ImageOptionsButton options={options} anchorInsets={anchorInsets} />\n}\n\nexport const useShouldShowOptions = (\n options: ImageOption[] = []\n): boolean => {\n const shouldHideUI = useShouldHideUI()\n return options.length > 0 && !shouldHideUI\n}\n","import * as React from \"react\"\nimport { useContext } from \"react\"\nimport { ConfigContext } from \"../config/config-provider\"\nimport { getDialogProps } from \"../editable/dialog-props\"\nimport ImageBleed from './image-bleed'\nimport type { ImageOption } from './image-with-options'\nimport { resolveImageAnchorInsets } from './image-anchor-geometry'\nimport {\n renderOverlay,\n renderOptionsButton,\n useShouldShowOptions,\n} from './image-overlay-utils'\n\ninterface ImageBleedWithOverlayProps {\n className?: string\n style?: React.CSSProperties\n overlaySvg?: string\n overlayClassName?: string\n options?: ImageOption[]\n dialog?: Record<string, any> | null\n dialogProps?: Record<string, any>\n bleedProps: any\n children?: React.ReactNode\n}\n\nconst ImageBleedWithOverlay = ({\n className,\n style,\n overlaySvg,\n overlayClassName,\n options = [],\n dialog,\n dialogProps,\n bleedProps,\n children,\n}: ImageBleedWithOverlayProps) => {\n const config = useContext(ConfigContext)\n const showOptions = useShouldShowOptions(options)\n const anchorInsets = resolveImageAnchorInsets(\n {\n ...bleedProps,\n pageWidth: bleedProps?.pageWidth ?? config?.page?.width ?? 210,\n bleed: bleedProps?.bleed ?? config?.page?.bleed ?? 0,\n },\n 'bleed'\n )\n\n // Get dialog props for click-to-edit\n const baseDialogProps = dialog ? getDialogProps({ dialog }, config) : {}\n \n // Merge base dialog props with additional dialogProps\n const mergedDialogProps = React.useMemo(() => {\n if (!dialogProps) return baseDialogProps\n const merged: Record<string, any> = { ...baseDialogProps, ...dialogProps }\n if (baseDialogProps.className || dialogProps.className) {\n merged.className = `${baseDialogProps.className || ''} ${dialogProps.className || ''}`.trim()\n }\n Object.keys(baseDialogProps).forEach((key) => {\n const baseHandler = baseDialogProps[key]\n const extraHandler = dialogProps[key]\n if (key.startsWith(\"on\") && typeof baseHandler === \"function\" && typeof extraHandler === \"function\") {\n merged[key] = (event: any) => {\n baseHandler(event)\n extraHandler(event)\n }\n }\n })\n return merged\n }, [baseDialogProps, dialogProps])\n\n // Render bleed with overlay inside\n // Pass dialog prop to ImageBleed (it will call getDialogProps internally)\n // No relative wrapper - it breaks absolute positioning! The options button is anchored\n // to the image rect instead (see image-anchor-geometry).\n return (\n <>\n <ImageBleed {...bleedProps} dialog={dialog}>\n {renderOverlay(overlaySvg, overlayClassName)}\n {children}\n </ImageBleed>\n {renderOptionsButton(options, showOptions, anchorInsets)}\n </>\n )\n}\n\nexport default ImageBleedWithOverlay\n","import { useContext } from \"react\";\nimport { ConfigContext } from '../config/config-provider'; // Import the ConfigContext\nimport { getDialogProps } from '../editable/dialog-props';\nimport { cn } from '../ui/cn';\nimport { useImageLoadFailure } from './use-image-load-failure';\nimport { resolveImageWidth } from './image-anchor-geometry';\nimport './image.css';\n\ninterface ImageSpreadProps { \n src?: string;\n onError?: React.ReactEventHandler<HTMLImageElement>;\n imageClassName?: string;\n side?: \"start\" | \"end\";\n backgroundColor?: string;\n width?: number;\n left?: number;\n right?: number;\n top?: number;\n bottom?: number;\n height?: number;\n pageWidth?: number;\n pageHeight?: number;\n bleed?: number;\n dialog?: object;\n children?: React.ReactNode;\n dataUhuu?: any;\n}\n\n// Constants\nexport default function ImageSpread(props: ImageSpreadProps) {\n\n const config = useContext(ConfigContext);\n const imageLoadErrorHandler = useImageLoadFailure({\n onError: props.onError,\n });\n // Get page dimensions and bleed from props or use defaults (from context if not provided)\n const BLEED = props.bleed ?? config?.page?.bleed ?? 0; \n const PAGE_CONTENT_WIDTH = (props.pageWidth ?? config?.page?.width ?? 210);\n const PAGE_CONTENT_HEIGHT = (props.pageHeight ?? config?.page?.height ?? 297);\n \n const {\n src,\n imageClassName,\n side,\n backgroundColor,\n width: imageW,\n height: imageH,\n left: imageL = 0,\n right: imageR = 0,\n top: imageT = 0,\n bottom: imageB = 0, \n } = props;\n\n const unitFormat = (val: number): string => {\n return `${val}mm`;\n };\n\n const calculateImageWidth = (): number =>\n resolveImageWidth({ width: imageW, left: imageL, right: imageR }, PAGE_CONTENT_WIDTH, BLEED, 2);\n\n const calculateImageHeight = (): number => {\n let result = imageH; \n if(!imageH) {\n result = PAGE_CONTENT_HEIGHT;\n // Add top bleed if top is 0 (will be positioned with top: -BLEED)\n if(!imageT) result += BLEED;\n // Add bottom bleed if bottom is 0 (will be positioned with bottom: -BLEED)\n // When using bottom positioning, we add bleed to height so element extends below\n if(!imageB) result += BLEED;\n if(imageT || imageB) result -= (imageT ?? 0) + (imageB ?? 0);\n }\n else {\n if(!imageT && !imageB) result += BLEED;\n }\n return result;\n };\n\n // Calculate dimensions\n const imageWidth = calculateImageWidth();\n const imageHeight = calculateImageHeight();\n\n const formatStyleValue = (value: number | undefined): string | undefined => \n value !== undefined ? unitFormat(value) : undefined;\n\n const createStyle = (styles: Record<string, string | undefined>) => {\n return Object.fromEntries(\n Object.entries(styles).filter(([_, value]) => value !== undefined)\n );\n };\n\n // Calculate positioning values\n // Note: We only use 'left' in CSS; width calculation handles right side\n const imageLeft = imageL > 0 ? imageL + BLEED : 0;\n const imageRight = imageR > 0 ? imageR + BLEED : 0; // Calculated but not used in CSS (width handles it)\n const imageTop = imageT > 0 ? imageT + BLEED : 0;\n // Bottom: when imageB is 0, use -BLEED to extend into bleed area (matching top behavior)\n const imageBottom = imageB > 0 ? imageB + BLEED : 0;\n const rightPageOffset = -1 * PAGE_CONTENT_WIDTH + imageLeft; // Offset of right page\n \n // Only set explicit height when BOTH top and bottom have explicit values (both > 0)\n // Otherwise, let CSS calculate height from top and bottom positioning\n // This avoids conflicts when one side uses bleed positioning (-BLEED)\n const useExplicitHeight = imageT > 0 && imageB > 0;\n \n const leftStyle = createStyle({\n backgroundColor,\n width: formatStyleValue(imageWidth),\n ...(useExplicitHeight ? { height: formatStyleValue(imageHeight) } : {}),\n left: formatStyleValue(imageLeft),\n top: formatStyleValue(imageTop),\n bottom: formatStyleValue(imageBottom)\n });\n\n const rightStyle = createStyle({\n width: formatStyleValue(imageWidth),\n ...(useExplicitHeight ? { height: formatStyleValue(imageHeight) } : {}),\n left: formatStyleValue(rightPageOffset),\n top: formatStyleValue(imageTop),\n bottom: formatStyleValue(imageBottom)\n });\n\n return <div className={`uhuu-image-container`} style={side == \"end\" ? rightStyle : leftStyle} {...(props.dataUhuu !== undefined ? { 'data-uhuu': props.dataUhuu } : {})}>\n <div className=\"uhuu-image-inner\" {...getDialogProps(props, config)}>\n <img\n className={cn(\"cover-image object-cover object-center\", imageClassName)}\n src={src || null}\n onError={imageLoadErrorHandler}\n />\n {props.children}\n </div>\n </div>\n}\n","import * as React from \"react\"\nimport { useContext } from \"react\"\nimport { ConfigContext } from \"../config/config-provider\"\nimport ImageSpread from './image-spread'\nimport type { ImageOption } from './image-with-options'\nimport { resolveImageAnchorInsets } from './image-anchor-geometry'\nimport {\n renderOverlay,\n renderOptionsButton,\n useShouldShowOptions,\n} from './image-overlay-utils'\n\ninterface ImageSpreadWithOverlayProps {\n className?: string\n style?: React.CSSProperties\n overlaySvg?: string\n overlayClassName?: string\n options?: ImageOption[]\n dialog?: Record<string, any> | null\n dialogProps?: Record<string, any>\n spreadProps: any\n children?: React.ReactNode\n}\n\nconst ImageSpreadWithOverlay = ({\n overlaySvg,\n overlayClassName,\n options = [],\n dialog,\n spreadProps,\n children,\n}: ImageSpreadWithOverlayProps) => {\n const config = useContext(ConfigContext)\n const showOptions = useShouldShowOptions(options)\n const anchorInsets = resolveImageAnchorInsets(\n {\n ...spreadProps,\n pageWidth: spreadProps?.pageWidth ?? config?.page?.width ?? 210,\n bleed: spreadProps?.bleed ?? config?.page?.bleed ?? 0,\n },\n 'spread'\n )\n\n // Render spread with overlay inside the image container\n // Pass dialog prop to ImageSpread so click-to-edit targets the image area\n // No relative wrapper - it breaks absolute positioning! The options button is anchored\n // to the visible half of the spread instead (see image-anchor-geometry).\n return (\n <>\n <ImageSpread {...spreadProps} dialog={dialog}>\n {renderOverlay(overlaySvg, overlayClassName)}\n {children}\n </ImageSpread>\n {renderOptionsButton(options, showOptions, anchorInsets)}\n </>\n )\n}\n\nexport default ImageSpreadWithOverlay\n","import * as React from \"react\"\nimport { useContext } from \"react\"\nimport { ConfigContext } from \"../config/config-provider\"\nimport { getDialogProps } from \"../editable/dialog-props\"\nimport ImageSpread from \"./image-spread\"\nimport ImageBleed from \"./image-bleed\"\nimport { cn } from \"../ui/cn\"\nimport { useImageLoadFailure } from \"./use-image-load-failure\"\nimport {\n renderOverlay,\n renderOptionsButton,\n useShouldShowOptions,\n} from './image-overlay-utils'\n\ntype OptionSelectEvent = Event | React.SyntheticEvent\n\nexport type ImageOption = {\n id: string\n label: string\n icon?: React.ReactNode\n dialog?: Record<string, any> | null\n onSelect?: (event: OptionSelectEvent) => void\n disabled?: boolean\n}\n\ntype ImageRenderProps = React.ImgHTMLAttributes<HTMLImageElement>\n\ninterface ImageWithOptionsProps {\n src?: string\n alt?: string\n onError?: React.ReactEventHandler<HTMLImageElement>\n className?: string\n imageClassName?: string\n style?: React.CSSProperties\n imageStyle?: React.CSSProperties\n overlaySvg?: string\n overlayClassName?: string\n options?: ImageOption[]\n dialog?: Record<string, any> | null\n dialogProps?: Record<string, any>\n placeholder?: React.ReactNode\n children?: React.ReactNode\n imageProps?: React.ImgHTMLAttributes<HTMLImageElement>\n renderImage?: (props: ImageRenderProps) => React.ReactNode\n}\n\nconst ImageWithOptions = ({\n src,\n alt = \"\",\n className,\n imageClassName,\n style,\n imageStyle,\n overlaySvg,\n overlayClassName,\n options = [],\n dialog,\n dialogProps,\n placeholder,\n children,\n imageProps,\n renderImage,\n onError,\n}: ImageWithOptionsProps) => {\n const config = useContext(ConfigContext)\n const baseDialogProps = dialog ? getDialogProps({ dialog }, config) : {}\n const showOptions = useShouldShowOptions(options)\n const imageLoadErrorHandler = useImageLoadFailure({\n onError: (event) => {\n onError?.(event)\n imageProps?.onError?.(event)\n },\n })\n\n const mergedDialogProps = React.useMemo(() => {\n if (!dialogProps) return baseDialogProps\n const merged: Record<string, any> = { ...baseDialogProps, ...dialogProps }\n if (baseDialogProps.className || dialogProps.className) {\n merged.className = cn(baseDialogProps.className, dialogProps.className)\n }\n Object.keys(baseDialogProps).forEach((key) => {\n const baseHandler = baseDialogProps[key]\n const extraHandler = dialogProps[key]\n if (key.startsWith(\"on\") && typeof baseHandler === \"function\" && typeof extraHandler === \"function\") {\n merged[key] = (event: any) => {\n baseHandler(event)\n extraHandler(event)\n }\n }\n })\n return merged\n }, [baseDialogProps, dialogProps])\n\n const resolvedSrc = imageProps?.src ?? src\n\n // Nothing to draw and nothing supplied to stand in for it. Mark the node so a template\n // can render an empty-state placeholder: without a marker this is an invisible\n // full-size region whose only affordance is the indicator dot, which reads as a blank\n // page rather than an image waiting to be filled.\n const isEmptyImage = !resolvedSrc && !placeholder && !renderImage\n\n const renderImageContent = () => {\n const imagePropsClassName = imageProps?.className\n const imagePropsStyle = imageProps?.style\n const finalSrc = resolvedSrc\n const finalAlt = imageProps?.alt ?? alt\n const mergedImageProps: React.ImgHTMLAttributes<HTMLImageElement> = {\n ...imageProps,\n src: finalSrc,\n alt: finalAlt,\n className: cn(\"h-full w-full object-cover\", imageClassName, imagePropsClassName),\n style: { ...imageStyle, ...imagePropsStyle },\n }\n\n if (renderImage) {\n return renderImage(mergedImageProps)\n }\n\n if (finalSrc) {\n return <img {...mergedImageProps} onError={imageLoadErrorHandler} />\n }\n\n return placeholder ?? null\n }\n\n const hasDataUhuu = mergedDialogProps['data-uhuu'];\n\n // Check if the children contains ImageSpread or ImageBleed \n const hasImageSpreadOrBleed = React.Children.toArray(children).some((child: any) => {\n if (!React.isValidElement(child)) return false;\n return (child.type === ImageSpread || child.type === ImageBleed);\n });\n\n // If contains: delete the data-uhuu prop, pass the data-uhuu prop to the children\n if (hasImageSpreadOrBleed) delete mergedDialogProps['data-uhuu'];\n\n // Pass the data-uhuu prop to the children\n const childrenWithProps = React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, { 'dataUhuu': hasDataUhuu });\n }\n return child;\n });\n\n const defaultClassName = hasImageSpreadOrBleed ? \"relative h-full w-full\" : \"relative\";\n\n return (\n <div className={cn(defaultClassName, className)} style={style}>\n <div\n {...mergedDialogProps}\n className={cn(\n \"relative h-full w-full\",\n isEmptyImage && \"uhuu-image-empty\",\n mergedDialogProps.className,\n )}\n >\n {renderImageContent()}\n {childrenWithProps}\n {renderOverlay(overlaySvg, overlayClassName)}\n </div>\n {renderOptionsButton(options, showOptions)}\n </div>\n )\n}\n\nexport default ImageWithOptions\n","import * as React from \"react\"\nimport { useMemo } from \"react\"\nimport ImageBleed from './image-bleed'\nimport ImageBleedWithOverlay from './image-bleed-with-overlay'\nimport ImageSpread from './image-spread'\nimport ImageSpreadWithOverlay from './image-spread-with-overlay'\nimport ImageWithOptions from './image-with-options'\nimport type { ImageOption } from './image-with-options'\nimport { useShellTranslation } from '../i18n/locale-context'\n\ntype ImageBlockMode = \"bleed\" | \"spread\" | \"auto\"\n\ntype ImageRenderProps = React.ImgHTMLAttributes<HTMLImageElement>\n\n// Annotation data structure\ntype AnnotationValue = {\n annotationSvg?: string\n annotations?: unknown[]\n}\n\n// Simplified annotation config\ninterface ImageBlockAnnotation {\n path: string // where annotation data is stored\n value?: AnnotationValue // preloaded data (optional)\n [key: string]: any // any extra config (visualGallery, etc.)\n}\n\n// Dialog config with type\ninterface ImageBlockDialog {\n path: string // where data is stored\n type: 'image' | 'satellite' // dialog type\n [key: string]: any // any extra config (ratio, lat, lng, zoom, etc.)\n}\n\ninterface ImageBlockProps {\n // Image source\n src?: string\n alt?: string // Optional - not required for PDF rendering\n onError?: React.ReactEventHandler<HTMLImageElement>\n \n // Styling - className/style for container, imageClassName/imageStyle for <img>\n className?: string\n imageClassName?: string\n style?: React.CSSProperties\n imageStyle?: React.CSSProperties\n backgroundColor?: string\n \n // Print mode - only needed for full-bleed print images\n mode?: ImageBlockMode\n side?: \"start\" | \"end\" // For spread mode (left/right page)\n \n // Bleed dimensions (only used in bleed/spread modes)\n width?: number\n height?: number\n left?: number\n right?: number\n top?: number\n bottom?: number\n pageWidth?: number\n pageHeight?: number\n bleed?: number\n \n // Simplified dialog config (auto-generates edit dialog with type)\n dialog?: ImageBlockDialog\n \n // Simplified annotation config (auto-generates overlay + annotate option)\n annotation?: ImageBlockAnnotation\n \n // Manual interactive features (for advanced use cases)\n overlaySvg?: string\n overlayClassName?: string\n options?: ImageOption[]\n dialogProps?: Record<string, any>\n placeholder?: React.ReactNode\n children?: React.ReactNode\n imageProps?: React.ImgHTMLAttributes<HTMLImageElement>\n renderImage?: (props: ImageRenderProps) => React.ReactNode\n}\n\nconst ImageBlock = (props: ImageBlockProps) => {\n const { t } = useShellTranslation()\n // Auto-generate overlay and options from annotation/dialog config\n const { computedOverlaySvg, computedOptions, computedDirectDialog } = useMemo(() => {\n const { annotation, dialog, overlaySvg, options, src } = props\n \n // If no simplified props, use manual props as-is\n if (!annotation && !dialog) {\n return {\n computedOverlaySvg: overlaySvg,\n computedOptions: options,\n computedDirectDialog: undefined,\n }\n }\n \n // Extract annotation data\n const annotationValue = annotation?.value || {}\n \n // Auto-generate overlay from annotation\n const autoOverlaySvg = overlaySvg ?? annotationValue.annotationSvg ?? ''\n \n // Build options array\n const autoOptions: ImageOption[] = []\n \n // Only add options if annotation is enabled\n // (dialog alone doesn't show options dropdown)\n if (annotation) {\n // Add \"Edit image\" option if dialog config is provided\n if (dialog) {\n const dialogConfig: any = {\n ...dialog, // Spread everything (path, type, ratio, etc.)\n }\n \n // For satellite dialogs, wrap lat/lng/zoom in config.config\n if (dialog.type === 'satellite') {\n const { path, type, ...satelliteParams } = dialog\n dialogConfig.config = {\n ...satelliteParams,\n path: 'image',\n }\n dialogConfig.path = path\n dialogConfig.type = type\n }\n\n autoOptions.push({\n id: 'edit',\n label: t('image.edit'),\n dialog: dialogConfig,\n })\n }\n \n // Add \"Annotate\" option\n const annotations = Array.isArray(annotationValue.annotations) \n ? annotationValue.annotations \n : []\n \n const { path, value, annotations: _, ...annotationConfig } = annotation\n \n const annotateDialogConfig: any = {\n path: annotation.path,\n type: 'annotation',\n image: src,\n annotations,\n ...annotationConfig, // Spread extra config (visualGallery, etc.)\n }\n \n autoOptions.push({\n id: 'annotate',\n label: t('image.annotate'),\n dialog: annotateDialogConfig,\n })\n }\n \n // Merge auto-generated options with manual options\n const finalOptions = options ? [...autoOptions, ...options] : autoOptions\n \n // If dialog exists, always create directDialog for click-to-edit\n // This allows clicking the image to open edit dialog, even when dropdown exists\n let directDialog = undefined\n if (dialog) {\n const dialogConfig: any = {\n ...dialog, // Spread everything (path, type, ratio, etc.)\n }\n \n // For satellite dialogs, wrap lat/lng/zoom in config.config\n if (dialog.type === 'satellite') {\n const { path, type, ...satelliteParams } = dialog\n dialogConfig.config = {\n ...satelliteParams,\n path: 'image',\n }\n dialogConfig.path = path\n dialogConfig.type = type\n }\n\n directDialog = dialogConfig\n }\n \n return {\n computedOverlaySvg: autoOverlaySvg,\n computedOptions: finalOptions.length > 0 ? finalOptions : undefined,\n computedDirectDialog: directDialog,\n }\n }, [props.annotation, props.dialog, props.overlaySvg, props.options, props.src, t])\n \n // Determine mode: auto (default), bleed (for print), or spread (for print with sides)\n const mode: ImageBlockMode = useMemo(() => {\n if (props.mode) return props.mode\n if (props.side !== undefined) return \"spread\"\n \n // Auto-detect: if bleed dimensions are provided, use bleed mode\n const hasBleedDimensions = props.width !== undefined || props.height !== undefined || \n props.left !== undefined || props.right !== undefined ||\n props.top !== undefined || props.bottom !== undefined\n \n return hasBleedDimensions ? \"bleed\" : \"auto\"\n }, [props.mode, props.side, props.width, props.height, props.left, props.right, props.top, props.bottom])\n \n // Check if we need ImageWithOptions wrapper\n const needsImageWithOptions = \n mode === \"auto\" || // Auto mode always uses ImageWithOptions\n (computedOptions && computedOptions.length > 0) || \n computedOverlaySvg || \n computedDirectDialog || // Need wrapper for click-to-edit\n props.renderImage !== undefined ||\n props.placeholder !== undefined ||\n props.children !== undefined\n \n // Extract props\n const {\n mode: _mode,\n side,\n src,\n alt,\n className,\n imageClassName,\n style,\n imageStyle,\n backgroundColor,\n width,\n height,\n left,\n right,\n top,\n bottom,\n pageWidth,\n pageHeight,\n bleed,\n overlayClassName,\n dialogProps,\n placeholder,\n children,\n imageProps,\n renderImage,\n onError,\n } = props\n \n // Base component props (for bleed/spread modes)\n const baseProps = {\n src,\n backgroundColor,\n width,\n height,\n left,\n right,\n top,\n bottom,\n pageWidth,\n pageHeight,\n bleed,\n imageClassName,\n onError,\n }\n \n // Auto mode: Simple image with wrapper if needed\n if (mode === \"auto\") {\n return (\n <ImageWithOptions\n src={src}\n alt={alt}\n className={className}\n style={style}\n imageClassName={imageClassName}\n imageStyle={imageStyle}\n overlaySvg={computedOverlaySvg}\n overlayClassName={overlayClassName}\n options={computedOptions}\n dialog={computedDirectDialog}\n dialogProps={dialogProps}\n placeholder={placeholder}\n children={children}\n imageProps={imageProps}\n renderImage={renderImage}\n onError={onError}\n />\n )\n }\n \n // Spread mode: for print with left/right pages\n if (mode === \"spread\") {\n const spreadProps = { ...baseProps, side, imageClassName }\n\n // For spread mode with overlay/options, use ImageSpreadWithOverlay so the overlay\n // is rendered inside the image container (uhuu-image-inner) and correctly aligns\n // with the actual image area (not the full-page wrapper).\n if (needsImageWithOptions && (computedOverlaySvg || computedOptions?.length || computedDirectDialog)) {\n return (\n <ImageSpreadWithOverlay\n className={className}\n style={style}\n overlaySvg={computedOverlaySvg}\n overlayClassName={overlayClassName}\n options={computedOptions}\n dialog={computedDirectDialog}\n dialogProps={dialogProps}\n spreadProps={spreadProps}\n >\n {children}\n </ImageSpreadWithOverlay>\n )\n }\n\n return <ImageSpread {...spreadProps} />\n }\n \n // Bleed mode: for print with bleed calculations\n // For bleed mode with overlay/options, or with direct dialog, use ImageBleedWithOverlay\n if (needsImageWithOptions && (computedOverlaySvg || computedOptions?.length || computedDirectDialog)) {\n return (\n <ImageBleedWithOverlay\n className={className}\n style={style}\n overlaySvg={computedOverlaySvg}\n overlayClassName={overlayClassName}\n options={computedOptions}\n dialog={computedDirectDialog}\n dialogProps={dialogProps}\n bleedProps={baseProps}\n >\n {children}\n </ImageBleedWithOverlay>\n )\n }\n \n // Simple bleed without overlay/options\n return (\n <ImageBleed {...baseProps} />\n )\n}\n\nexport default ImageBlock\nexport type { ImageOption }\n","// Predicates for JSON-shaped values (payloads, brand kits). Internal.\n\nexport const isPlainObject = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);\n\nexport const hasOwn = (object, key) => Object.prototype.hasOwnProperty.call(object, key);\n\n/** A non-blank string, trimmed; `undefined` for anything else. */\nexport const textOf = (value) => (typeof value === 'string' && value.trim() !== '' ? value.trim() : undefined);\n","/**\n * The URL to render an image at, through the platform thumbnailer:\n *\n * <img src={imageUrl(data.cover.image)} alt=\"\" /> // ImageObject, URL string or nothing\n * imageUrl(data.hero, { size: '1200x1200' }) // screen size override\n *\n * Print-aware size, encoded source, SVG and non-http sources passed through, an already\n * thumbnailed URL rebuilt rather than nested, `undefined` (no `src` attribute) for no image.\n * Each rule is a bug a template copy has shipped: docs/image-url.md. Pure: no React, no DOM.\n */\nimport { isPlainObject, textOf } from '../utility/json.js';\n\nexport const THUMBNAIL_ENDPOINT = 'https://render.uhuu.io/media/thumb';\nexport const SCREEN_SIZE = '2000x2000';\nexport const PRINT_SIZE = '4000x4000';\n\nconst SVG_TYPE = 'image/svg+xml';\n\nfunction sourceOf(src) {\n if (typeof src === 'string') return { url: textOf(src) };\n if (!isPlainObject(src)) return { url: undefined };\n return {\n url: textOf(src.contentUrl) ?? textOf(src.url) ?? textOf(src.src),\n type: textOf(src.encodingFormat) ?? textOf(src.mimeType),\n };\n}\n\nfunction hostIsPrintProduct() {\n try {\n return Boolean(globalThis.$uhuu?.is?.printProduct?.());\n } catch {\n return false;\n }\n}\n\nfunction parse(url) {\n try {\n return new URL(url);\n } catch {\n return undefined;\n }\n}\n\nfunction isSvg(url, parsed, type) {\n if (type && type.toLowerCase().startsWith(SVG_TYPE)) return true;\n if (!parsed) return /\\.svgz?(?:[?#]|$)/i.test(url);\n if (/\\.svgz?$/i.test(parsed.pathname)) return true;\n for (const value of parsed.searchParams.values()) {\n const lower = value.toLowerCase();\n if (lower === 'svg' || lower === SVG_TYPE) return true;\n }\n return false;\n}\n\nconst isThumbnail = (parsed) =>\n Boolean(parsed) && `${parsed.origin}${parsed.pathname}` === THUMBNAIL_ENDPOINT && parsed.searchParams.has('url');\n\n/**\n * @param {string|{contentUrl?: string, url?: string, src?: string, encodingFormat?: string,\n * mimeType?: string}|null|undefined} src\n * @param {{ print?: boolean, size?: string, printSize?: string, format?: string }} [options]\n * @returns {string|undefined}\n */\nexport function imageUrl(src, options = {}) {\n const settings = isPlainObject(options) ? options : {};\n const { url, type } = sourceOf(src);\n if (!url) return undefined;\n if (/^(?:data|blob):/i.test(url)) return url;\n\n let original = url;\n let parsed = parse(url);\n let format = textOf(settings.format);\n if (isThumbnail(parsed)) {\n if (!format) format = textOf(parsed.searchParams.get('format'));\n original = textOf(parsed.searchParams.get('url')) ?? url;\n parsed = parse(original);\n }\n\n if (!/^https?:\\/\\//i.test(original)) return original;\n if (isSvg(original, parsed, type)) return original;\n\n const print = typeof settings.print === 'boolean' ? settings.print : hostIsPrintProduct();\n const size = print ? (textOf(settings.printSize) ?? PRINT_SIZE) : (textOf(settings.size) ?? SCREEN_SIZE);\n const formatParam = format ? `&format=${encodeURIComponent(format)}` : '';\n return `${THUMBNAIL_ENDPOINT}?blank=true&size=${encodeURIComponent(size)}${formatParam}&url=${encodeURIComponent(original)}`;\n}\n","/**\n * brandkit.json → CSS custom properties, the one mapping every template shares. The table, the\n * accepted kit shapes and the colour policy are in docs/brand-kit-runtime.md; keep that page and\n * the tables below in step.\n *\n * - A kit published by Brand Kit carries `runtime` (v2): the variables already mapped and converted\n * at publish, in shadcn/ui's names (`--primary`, `--color-primary`) plus the `--color-kit-*` /\n * `--font-kit-*` aliases. It is used as is, re-validated, and the chains below are skipped.\n * Template-bundled kits go through the chains.\n *\n * - Colours land on `--color-kit-<slot>`; each slot reads a chain of tokens and the first\n * print-safe value wins. `tokens.light.aliases` add `--color-kit-<key>` and win over a slot.\n * Brand Kit's semantic roles (`tokens.light.semantic`) also land on `--<role>` and `--color-<role>`.\n * - Fonts land on both `--font-<role>` and `--font-kit-<role>`, with the same value.\n * - Print safety: hex, `rgb()`/`rgba()`, `oklch()`/`oklab()` and colour keywords pass, HSL is\n * converted, anything else is skipped as if absent, so the template's own fallback (`@theme` or\n * `defaults`) renders.\n *\n * Pure, DOM-free and dependency-free: safe in the renderer, on the server and in Node tests.\n */\nimport { hasOwn, isPlainObject, textOf } from '../utility/json.js';\n\n/**\n * `--color-kit-<slot>` ← sources, first print-safe value wins. A bare name reads `tokens.<name>`,\n * `s:<name>` reads `tokens.light.semantic.<name>`, `hero:<name>` reads `tokens.light.aliases.hero`.\n * The chains are the go-expose runtime's (the skill's reference), with one deliberate change: an\n * explicit `colorHighlight` / `highlight` token wins over the accent highlight otherwise derives\n * from, and that accent is read like `--color-kit-accent` (legacy `colorAccent` included).\n */\nexport const COLOR_SLOTS = [\n ['primary', ['primary', 'colorPrimary', 's:primary']],\n ['primary-foreground', ['primaryForeground', 's:primaryForeground']],\n ['secondary', ['secondary', 'colorSecondary', 's:secondary']],\n ['secondary-foreground', ['secondaryForeground', 's:secondaryForeground']],\n ['secondary-soft', ['accent', 'colorAccent', 's:accent', 's:secondary']],\n ['secondary-muted', ['mutedForeground', 'colorMuted', 's:mutedForeground', 's:secondary']],\n ['accent', ['accent', 'colorAccent', 's:accent']],\n ['accent-foreground', ['accentForeground', 's:accentForeground']],\n ['text', ['foreground', 'colorForeground', 's:foreground']],\n ['muted', ['muted', 's:muted']],\n ['muted-foreground', ['mutedForeground', 'colorMuted', 's:mutedForeground', 's:foreground']],\n ['divider', ['border', 'colorBorder', 's:border']],\n ['surface', ['card', 'colorSurface', 's:card', 's:background']],\n ['surface-foreground', ['cardForeground', 's:cardForeground', 's:foreground']],\n ['placeholder', ['input', 's:input', 's:border']],\n ['highlight', ['colorHighlight', 'highlight', 'accent', 'colorAccent', 's:accent', 's:primary']],\n ['hero-from', ['heroFrom', 'hero:from']],\n ['hero-via', ['heroVia', 'hero:via']],\n ['hero-to', ['heroTo', 'hero:to']],\n ['hero-glow', ['heroGlow', 'hero:glow']],\n];\n\n/**\n * Font roles. A role's family comes from, in order: the font `assignments['font.<role>']` names\n * in `fonts`; a `fonts` entry keyed by the role (`sans`/`body`, `display`/`heading`, `serif`,\n * `mono`); `tokens.fontFamily<Role>`; `tokens.primitives.typography.font<Role>`.\n */\nexport const FONT_ROLES = [\n ['sans', { token: 'fontFamilySans', primitive: 'fontSans', keys: ['sans', 'body'], generic: 'sans-serif' }],\n ['serif', { token: 'fontFamilySerif', primitive: 'fontSerif', keys: ['serif'], generic: 'serif' }],\n ['display', { token: 'fontFamilyDisplay', primitive: 'fontDisplay', keys: ['display', 'heading'], generic: 'sans-serif' }],\n ['mono', { token: 'fontFamilyMono', primitive: 'fontMono', keys: ['mono'], generic: 'monospace' }],\n];\n\n/**\n * shadcn/ui colour roles, as Brand Kit's runtime and `tokens.light.semantic` name them. A role\n * reads the nested semantic token only: flat tokens in template-bundled kits use some of these\n * words with other meanings (`muted` is grey text there), so they feed the `kit-*` chains instead.\n */\nexport const ROLE_SLOTS = [\n ['background', 'background'],\n ['foreground', 'foreground'],\n ['card', 'card'],\n ['card-foreground', 'cardForeground'],\n ['popover', 'popover'],\n ['popover-foreground', 'popoverForeground'],\n ['primary', 'primary'],\n ['primary-foreground', 'primaryForeground'],\n ['secondary', 'secondary'],\n ['secondary-foreground', 'secondaryForeground'],\n ['muted', 'muted'],\n ['muted-foreground', 'mutedForeground'],\n ['accent', 'accent'],\n ['accent-foreground', 'accentForeground'],\n ['destructive', 'destructive'],\n ['destructive-foreground', 'destructiveForeground'],\n ['border', 'border'],\n ['input', 'input'],\n ['ring', 'ring'],\n];\n\n/** The `brandkit.json.runtime` contract this module reads. */\nexport const BRAND_KIT_RUNTIME_VERSION = 2;\nconst ROLE_NAMES = [...ROLE_SLOTS.map(([name]) => name), 'chart-1', 'chart-2', 'chart-3', 'chart-4', 'chart-5'];\n// A role as `--<role>` or `--color-<role>`, or a kit alias. Nothing else: a document from anywhere\n// must not be able to set `--radius` or `--spacing` on a template.\nconst RUNTIME_ROLE_NAME = new RegExp(`^--(?:color-)?(?:${ROLE_NAMES.join('|')})$`);\nconst RUNTIME_COLOR_NAME = /^--color-kit-[A-Za-z0-9_-]+$/;\nconst RUNTIME_FONT_NAME = /^--font-(?:kit-)?(?:sans|serif|display|mono)$/;\n\n/** The kit's `runtime` block when it is one this module understands, else `undefined`. */\nexport function brandKitRuntime(brandKit) {\n const runtime = isPlainObject(brandKit) ? brandKit.runtime : undefined;\n return isPlainObject(runtime) && runtime.version === BRAND_KIT_RUNTIME_VERSION && isPlainObject(runtime.light)\n ? runtime\n : undefined;\n}\n\nconst HEX = /^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;\nconst RGB = /^rgba?\\(\\s*[\\d.%\\s,/+-]+\\)$/i;\n// Brand Kit publishes oklch(); Chrome has printed it since 111. Plain components only: no\n// relative colour syntax, no nested functions.\nconst OK_COMPONENT = '(?:[+-]?(?:\\\\d+\\\\.?\\\\d*|\\\\.\\\\d+)(?:%|deg)?|none)';\nconst OKLAB = new RegExp(`^ok(?:lch|lab)\\\\(\\\\s*${OK_COMPONENT}\\\\s+${OK_COMPONENT}\\\\s+${OK_COMPONENT}(?:\\\\s*\\\\/\\\\s*${OK_COMPONENT})?\\\\s*\\\\)$`, 'i');\nconst KEYWORD = /^[a-z]+$/i;\nconst CSS_WIDE_KEYWORDS = new Set(['inherit', 'initial', 'unset', 'revert', 'none']);\nconst NUMBER = '[+-]?(?:\\\\d+\\\\.?\\\\d*|\\\\.\\\\d+)';\nconst HSL_TRIPLET = new RegExp(\n `^(${NUMBER})(deg|turn|rad|grad)?\\\\s+(${NUMBER})%\\\\s+(${NUMBER})%(?:\\\\s*\\\\/\\\\s*(${NUMBER})(%)?)?$`,\n 'i',\n);\nconst HSL_FUNCTION = new RegExp(\n `^hsla?\\\\(\\\\s*(${NUMBER})(deg|turn|rad|grad)?\\\\s*(?:,\\\\s*|\\\\s+)(${NUMBER})%\\\\s*(?:,\\\\s*|\\\\s+)(${NUMBER})%` +\n `\\\\s*(?:(?:,|\\\\/)\\\\s*(${NUMBER})(%)?\\\\s*)?\\\\)$`,\n 'i',\n);\n// A value that could close the declaration or the element it is written into.\nconst UNSAFE_VALUE = /[;{}<>\\\\\\n\\r]/;\nconst ALIAS_KEY = /^[A-Za-z0-9_-]+$/;\n\nconst clamp = (value, min, max) => Math.min(max, Math.max(min, value));\nconst hex2 = (value) => value.toString(16).padStart(2, '0');\n\nconst HUE_UNIT = { deg: 1, turn: 360, rad: 180 / Math.PI, grad: 0.9 };\n\nfunction hslToCss(hue, unit, saturation, lightness, alpha, alphaIsPercent) {\n const h = (((Number(hue) * HUE_UNIT[(unit || 'deg').toLowerCase()]) % 360) + 360) % 360;\n const s = clamp(Number(saturation) / 100, 0, 1);\n const l = clamp(Number(lightness) / 100, 0, 1);\n // CSS Color 4 `hslToRgb`.\n const a = s * Math.min(l, 1 - l);\n const channel = (n) => {\n const k = (n + h / 30) % 12;\n return Math.round((l - a * Math.max(-1, Math.min(k - 3, 9 - k, 1))) * 255);\n };\n const [r, g, b] = [channel(0), channel(8), channel(4)];\n const opacity = alpha === undefined ? 1 : clamp(Number(alpha) / (alphaIsPercent ? 100 : 1), 0, 1);\n if (opacity >= 1) return `#${hex2(r)}${hex2(g)}${hex2(b)}`;\n return `rgba(${r}, ${g}, ${b}, ${Number(opacity.toFixed(3))})`;\n}\n\n/**\n * The print-safe spelling of a colour, or `undefined` when there is none. Hex, `rgb()`/`rgba()`,\n * `oklch()`/`oklab()` and colour keywords pass through as written; HSL (a bare `H S% L%` triplet as\n * pre-2.0 brand kits store it, or `hsl()`/`hsla()` in comma or space syntax) is converted to\n * `#rrggbb`, or `rgba()` with alpha.\n */\nexport function toPrintSafeColor(value) {\n const color = textOf(value);\n if (!color) return undefined;\n if (HEX.test(color) || RGB.test(color) || OKLAB.test(color)) return color;\n if (KEYWORD.test(color)) return CSS_WIDE_KEYWORDS.has(color.toLowerCase()) ? undefined : color;\n const hsl = HSL_TRIPLET.exec(color) ?? HSL_FUNCTION.exec(color);\n if (hsl) return hslToCss(hsl[1], hsl[2], hsl[3], hsl[4], hsl[5], Boolean(hsl[6]));\n return undefined;\n}\n\nfunction readSource(tokens, source) {\n if (source.startsWith('s:')) {\n const semantic = tokens.light?.semantic;\n return isPlainObject(semantic) ? semantic[source.slice(2)] : undefined;\n }\n if (source.startsWith('hero:')) {\n const hero = tokens.light?.aliases?.hero;\n return isPlainObject(hero) ? hero[source.slice(5)] : undefined;\n }\n return tokens[source];\n}\n\n/** First source in the chain with a print-safe colour. */\nfunction firstPrintSafe(tokens, sources) {\n for (const source of sources) {\n const color = toPrintSafeColor(readSource(tokens, source));\n if (color !== undefined) return color;\n }\n return undefined;\n}\n\n/** Everything after a stack's first family, or `undefined` for a single family. */\nconst stackTail = (stack) => {\n if (typeof stack !== 'string' || !stack.includes(',')) return undefined;\n return textOf(stack.slice(stack.indexOf(',') + 1));\n};\n\n/**\n * A stack (anything with a comma) is used as written. A single family is quoted and given a tail\n * to fall back to, because these documents render to PDF, where a webfont that fails to load\n * otherwise falls back to whatever the renderer picks. Same rule as the platform's\n * `composeFontStack`.\n */\nfunction composeStack(family, tail) {\n if (family.includes(',')) return family;\n const quoted = /^([\"']).*\\1$/.test(family) ? family : `\"${family}\"`;\n return tail ? `${quoted}, ${tail}` : quoted;\n}\n\nfunction fontRecord(fonts, id) {\n if (typeof id !== 'string' || !id) return undefined;\n if (Array.isArray(fonts)) return fonts.find((font) => isPlainObject(font) && font.id === id);\n if (!isPlainObject(fonts)) return undefined;\n if (hasOwn(fonts, id) && isPlainObject(fonts[id])) return fonts[id];\n return Object.values(fonts).find((font) => isPlainObject(font) && font.id === id);\n}\n\n/** The CSS font stack for one role, or `undefined` when the kit names no family for it. */\nexport function resolveFontStack(brandKit, role) {\n const spec = FONT_ROLES.find(([name]) => name === role)?.[1];\n if (!spec || !isPlainObject(brandKit)) return undefined;\n const tokens = isPlainObject(brandKit.tokens) ? brandKit.tokens : {};\n const tokenStack = textOf(tokens[spec.token]);\n const primitiveStack = textOf(tokens.primitives?.typography?.[spec.primitive]);\n\n let record = fontRecord(brandKit.fonts, brandKit.assignments?.[`font.${role}`]);\n if (!textOf(record?.family) && isPlainObject(brandKit.fonts)) {\n record = spec.keys\n .map((key) => (hasOwn(brandKit.fonts, key) ? brandKit.fonts[key] : undefined))\n .find((font) => isPlainObject(font) && textOf(font.family));\n }\n\n const family = textOf(record?.family);\n if (family) {\n return composeStack(\n family,\n textOf(record.fallback) ?? stackTail(primitiveStack) ?? stackTail(tokenStack) ?? spec.generic,\n );\n }\n\n const stack = tokenStack ?? primitiveStack;\n return stack ? composeStack(stack, stackTail(primitiveStack) ?? spec.generic) : undefined;\n}\n\n/**\n * CSS custom properties for a brand kit, ready to spread onto `style`.\n *\n * @param {object|null|undefined} brandKit A brandkit.json document.\n * @param {{ defaults?: Record<string, string> }} [options] `defaults`: custom properties to emit\n * when the kit provides no value for them (the kit wins). Colour defaults (`--color-*`) follow\n * the same print policy.\n * @returns {Record<string, string>}\n */\nexport function brandKitCssVars(brandKit, options = {}) {\n const vars = {};\n\n if (isPlainObject(options?.defaults)) {\n for (const [name, raw] of Object.entries(options.defaults)) {\n if (!name.startsWith('--')) continue;\n const value = name.startsWith('--color-') ? toPrintSafeColor(raw) : textOf(raw);\n if (value !== undefined && !UNSAFE_VALUE.test(value)) vars[name] = value;\n }\n }\n\n if (!isPlainObject(brandKit)) return vars;\n\n // Precomputed at publish: re-validate each entry (the document may come from anywhere) and stop.\n // Unknown names are ignored, so a newer runtime with more variables still applies what it can.\n const runtime = brandKitRuntime(brandKit);\n if (runtime) {\n for (const [name, raw] of Object.entries(runtime.light)) {\n const value = RUNTIME_ROLE_NAME.test(name) || RUNTIME_COLOR_NAME.test(name)\n ? toPrintSafeColor(raw)\n : RUNTIME_FONT_NAME.test(name)\n ? textOf(raw)\n : undefined;\n if (value !== undefined && !UNSAFE_VALUE.test(value)) vars[name] = value;\n }\n return vars;\n }\n\n const tokens = isPlainObject(brandKit.tokens) ? brandKit.tokens : {};\n\n const semantic = isPlainObject(tokens.light?.semantic) ? tokens.light.semantic : {};\n for (const [name, key] of ROLE_SLOTS) {\n const value = toPrintSafeColor(semantic[key]);\n if (value === undefined) continue;\n vars[`--${name}`] = value;\n vars[`--color-${name}`] = value;\n }\n\n for (const [slot, sources] of COLOR_SLOTS) {\n const value = firstPrintSafe(tokens, sources);\n if (value !== undefined) vars[`--color-kit-${slot}`] = value;\n }\n\n const aliases = tokens.light?.aliases;\n if (isPlainObject(aliases)) {\n const alias = (key, raw) => {\n const value = ALIAS_KEY.test(key) ? toPrintSafeColor(raw) : undefined;\n if (value !== undefined) vars[`--color-kit-${key}`] = value;\n };\n // Groups first, flat keys last, so a flat alias wins whatever the key order in the file.\n // `template` is where the BrandKit app stores template-specific slots, which extracted kits\n // keep flat: both spell `--color-kit-<key>`, so the two kits converge on one name.\n for (const [key, raw] of Object.entries(aliases)) {\n if (key === 'hero' || !isPlainObject(raw)) continue;\n for (const [subKey, subRaw] of Object.entries(raw)) {\n alias(key === 'template' ? subKey : `${key}-${subKey}`, subRaw);\n }\n }\n for (const [key, raw] of Object.entries(aliases)) {\n if (!isPlainObject(raw)) alias(key, raw);\n }\n }\n\n for (const [role] of FONT_ROLES) {\n const stack = resolveFontStack(brandKit, role);\n if (stack === undefined || UNSAFE_VALUE.test(stack)) continue;\n vars[`--font-${role}`] = stack;\n vars[`--font-kit-${role}`] = stack;\n }\n\n return vars;\n}\n","/**\n * Where a template's kit comes from, and the assets it carries: logos, governed media\n * collections, map styles and config values. `BrandKitProvider` exposes these through\n * `useBrandKit()`; they are exported for code outside a provider.\n *\n * Relative asset paths in a published brandkit.json (`assets/logos/…`) resolve against the kit's\n * `baseUrl`, else the directory of the URL the kit was fetched from.\n *\n * Pure and DOM-free, apart from `loadBrandKit`, which takes a `fetch`.\n */\nimport { isPlainObject, textOf } from '../utility/json.js';\n\nconst ABSOLUTE = /^https?:\\/\\//i;\n\n/** Brand Kit's production location for published kits: `<base>/teams/<team>/kits/<kit>/brandkit.json`. */\nexport const BRAND_KIT_PUBLIC_BASE_URL = 'https://uhuu-brandkit.s3.eu-west-1.amazonaws.com/live';\n\n/** The directory relative asset URLs resolve against: the kit's `baseUrl`, else `sourceUrl`'s. */\nexport function brandKitBaseUrl(brandKit, sourceUrl) {\n const own = isPlainObject(brandKit) ? textOf(brandKit.baseUrl) : undefined;\n if (own) return own.replace(/\\/+$/, '');\n const source = textOf(sourceUrl);\n if (!source || !ABSOLUTE.test(source)) return undefined;\n try {\n return new URL('.', source).toString().replace(/\\/+$/, '');\n } catch {\n return undefined;\n }\n}\n\n/** Absolute against `base` when relative; `undefined` for anything that is not a plain URL. */\nexport function resolveBrandKitUrl(value, base) {\n const url = textOf(value);\n if (!url || /\\s/.test(url)) return undefined;\n if (ABSOLUTE.test(url) || /^data:/i.test(url)) return url;\n if (/^[a-z][a-z0-9+.-]*:/i.test(url) || url.startsWith('//')) return undefined;\n if (!base) return url;\n try {\n return new URL(url, `${base}/`).toString();\n } catch {\n return undefined;\n }\n}\n\nconst KIT_ID = /^kit-[\\w-]+$/i;\n\n/**\n * The brandkit.json URL a payload points at: `brandKitUrl` (absolute, relative to the template, or\n * a bare `kit-…` id), else `brandKitId`, else the embedded kit's `storage.publicUrl`. Ids resolve\n * under `publicBaseUrl` (default: Brand Kit production) and `brandKitTeamId` / `teamId`. `null`\n * when there is none: render the payload's `brandKit` or the bundled default.\n *\n * @param {object|null|undefined} payload\n * @param {{ publicBaseUrl?: string, teamId?: string|number }} [options]\n */\nexport function brandKitSourceUrl(payload, options = {}) {\n if (!isPlainObject(payload)) return null;\n const base = (textOf(options.publicBaseUrl) ?? BRAND_KIT_PUBLIC_BASE_URL).replace(/\\/+$/, '');\n const team = textOf(String(payload.brandKitTeamId ?? options.teamId ?? ''));\n const fromId = (id) => (team ? `${base}/teams/${encodeURIComponent(team)}/kits/${encodeURIComponent(id)}/brandkit.json` : null);\n\n const url = textOf(payload.brandKitUrl);\n if (url) return KIT_ID.test(url) ? fromId(url) : resolveBrandKitUrl(url) ?? null;\n const id = textOf(payload.brandKitId);\n if (id) return KIT_ID.test(id) ? fromId(id) : null;\n const stored = isPlainObject(payload.brandKit?.storage) ? textOf(payload.brandKit.storage.publicUrl) : undefined;\n return stored && ABSOLUTE.test(stored) ? stored : null;\n}\n\n/**\n * Fetches a brandkit.json. Rejects on a network error, a non-2xx response or a body that is not\n * a JSON object, so the caller can keep its fallback kit.\n *\n * @param {string} url\n * @param {{ fetch?: typeof fetch, signal?: AbortSignal }} [options]\n */\nexport async function loadBrandKit(url, options = {}) {\n const doFetch = options.fetch ?? globalThis.fetch;\n if (typeof doFetch !== 'function') throw new Error('loadBrandKit needs fetch');\n const response = await doFetch(url, { signal: options.signal, headers: { accept: 'application/json' } });\n if (!response.ok) throw new Error(`Brand kit ${url} answered ${response.status}`);\n const document = await response.json();\n if (!isPlainObject(document)) throw new Error(`Brand kit ${url} is not a JSON object`);\n return document;\n}\n\n// --- Logos ------------------------------------------------------------------------------------\n\nconst LOGO_KIND = { primary: 'primary', logo: 'primary', lockup: 'primary', mark: 'mark', icon: 'mark', symbol: 'mark', wordmark: 'wordmark' };\nconst LEGACY_SLOT = { primary: 'logo', mark: 'icon' };\nconst ASSIGNMENT = { primary: 'logo.primary', mark: 'logo.icon' };\n\nconst fileOf = (files) => (isPlainObject(files) ? textOf(files.svg) ?? textOf(files.png) : undefined);\n\n/**\n * A logo from the kit, resolved to an absolute `src`.\n *\n * `kind` is `primary` (alias `logo`), `mark` (alias `icon`) or `wordmark`; `background` is the\n * surface it sits on, `light` (default) or `dark`. Brand Kit's `logoSystem` is read first: the\n * variant of that kind for that background, else one marked `any`, else the other background.\n * Kits without a logo system fall back to `logos.logo` / `logos.icon` (`{ light, dark }`), then to\n * `logos[assignments['logo.primary']]` and `assets.primary` in template-bundled kits. `wordmark`\n * falls back to `primary`. Returns `null` when the kit has none.\n *\n * @param {object|null|undefined} brandKit\n * @param {{ kind?: string, background?: 'light'|'dark', sourceUrl?: string }} [options]\n * @returns {{ src: string, alt?: string, kind: string, background?: string, minWidth?: object, clearSpace?: object } | null}\n */\nexport function brandKitLogo(brandKit, options = {}) {\n if (!isPlainObject(brandKit)) return null;\n const kind = LOGO_KIND[String(options.kind ?? 'primary').toLowerCase()] ?? 'primary';\n const background = options.background === 'dark' ? 'dark' : 'light';\n const base = brandKitBaseUrl(brandKit, options.sourceUrl);\n const alt = textOf(brandKit.name);\n // Only a logo system names a wordmark; elsewhere it is the primary lockup.\n const found = logoFromSystem(brandKit, kind, background, base, alt) ?? (kind === 'wordmark' ? null : logoFromLegacy(brandKit, kind, background, base, alt));\n if (found || kind !== 'wordmark') return found;\n return brandKitLogo(brandKit, { ...options, kind: 'primary' });\n}\n\nfunction logoFromSystem(brandKit, kind, background, base, alt) {\n const variants = Array.isArray(brandKit.logoSystem?.variants) ? brandKit.logoSystem.variants.filter(isPlainObject) : [];\n const ofKind = variants.filter((variant) => variant.kind === kind && fileOf(variant.files));\n const variant =\n ofKind.find((item) => item.background === background) ??\n ofKind.find((item) => item.background === 'any') ??\n ofKind[0];\n if (!variant) return null;\n const src = resolveBrandKitUrl(fileOf(variant.files), base);\n if (!src) return null;\n return {\n src,\n alt: textOf(variant.name) ?? alt,\n kind,\n background: variant.background,\n ...(isPlainObject(variant.minWidth) ? { minWidth: variant.minWidth } : {}),\n ...(isPlainObject(variant.clearSpace) ? { clearSpace: variant.clearSpace } : {}),\n };\n}\n\nfunction logoFromLegacy(brandKit, kind, background, base, alt) {\n const logos = isPlainObject(brandKit.logos) ? brandKit.logos : {};\n const slot = logos[LEGACY_SLOT[kind]];\n if (isPlainObject(slot)) {\n const other = background === 'dark' ? 'light' : 'dark';\n for (const mode of [background, other]) {\n const value = slot[mode];\n const src = resolveBrandKitUrl(isPlainObject(value) ? value.src ?? value.url : value, base);\n if (src) return { src, alt: textOf(slot.alt) ?? alt, kind, background: mode };\n }\n }\n const assigned = textOf(brandKit.assignments?.[ASSIGNMENT[kind]]);\n const legacy = (assigned && logos[assigned]) || brandKit.assets?.[kind === 'mark' ? 'icon' : 'primary'];\n if (isPlainObject(legacy)) {\n const src = resolveBrandKitUrl(legacy.src ?? legacy.url, base);\n if (src) return { src, alt: textOf(legacy.alt) ?? textOf(legacy.name) ?? alt, kind };\n }\n return null;\n}\n\n// --- Collections ------------------------------------------------------------------------------\n\nconst COLLECTION_TYPE = { photos: 'photo', icons: 'icon', graphics: 'graphic', backgrounds: 'background', templates: 'template' };\n\n/**\n * The media collection assigned to `kind` (`photos`, `icons`, `graphics`, `backgrounds`,\n * `templates`): `assignments['media.<kind>']`, else the first collection of that type. Items come\n * from the promoted version (`defaultVersionId`, or `versionId` when given), in the collection's\n * key order, each with an absolute `src` and its `key`. Template-bundled kits with a flat\n * `items` array are read too. `null` when the kit has none.\n *\n * @param {object|null|undefined} brandKit\n * @param {string} kind\n * @param {{ sourceUrl?: string, versionId?: string }} [options]\n */\nexport function brandKitCollection(brandKit, kind, options = {}) {\n if (!isPlainObject(brandKit) || !isPlainObject(brandKit.collections)) return null;\n const collections = brandKit.collections;\n const type = COLLECTION_TYPE[kind] ?? kind;\n const assigned = textOf(brandKit.assignments?.[`media.${kind}`]);\n const id =\n (assigned && isPlainObject(collections[assigned]) ? assigned : undefined) ??\n Object.keys(collections).find((key) => isPlainObject(collections[key]) && collections[key].type === type);\n if (!id) return null;\n\n const collection = collections[id];\n const base = brandKitBaseUrl(brandKit, options.sourceUrl);\n const versions = isPlainObject(collection.versions) ? collection.versions : {};\n const versionId = [textOf(options.versionId), textOf(collection.defaultVersionId)].find((key) => key && isPlainObject(versions[key]));\n const version = versionId ? versions[versionId] : undefined;\n const schemaKeys = isPlainObject(collection.schema?.keys) ? collection.schema.keys : {};\n\n let entries = [];\n if (version && isPlainObject(version.items)) {\n const keys = [...Object.keys(schemaKeys).filter((key) => key in version.items), ...Object.keys(version.items).filter((key) => !(key in schemaKeys))];\n entries = keys.map((key) => [key, version.items[key]]);\n } else if (Array.isArray(collection.items)) {\n entries = collection.items.map((item, index) => [String(isPlainObject(item) && textOf(item.key) ? item.key : index), item]);\n }\n\n const items = entries.flatMap(([key, item]) => {\n if (!isPlainObject(item)) return [];\n const src = resolveBrandKitUrl(item.src ?? item.url, base);\n if (!src) return [];\n const label = textOf(item.label) ?? textOf(schemaKeys[key]?.label) ?? textOf(item.name);\n return [{ ...item, key, src, ...(label ? { label } : {}) }];\n });\n\n return {\n id,\n name: textOf(collection.name),\n type: textOf(collection.type),\n versionId: versionId ?? undefined,\n items,\n };\n}\n\n// --- Config -----------------------------------------------------------------------------------\n\nconst envKey = (value) => (typeof value === 'string' ? value.trim().toUpperCase().replace(/[^A-Z0-9]+/g, '_') : '');\n\n/**\n * A non-secret value from the kit's `config.env` rows. Keys compare case- and\n * punctuation-insensitively (`map-style-url` finds `MAP_STYLE_URL`); the first of `keys` present wins.\n *\n * @param {object|null|undefined} brandKit\n * @param {string|string[]} keys\n */\nexport function brandKitEnv(brandKit, keys) {\n const rows = Array.isArray(brandKit?.config?.env) ? brandKit.config.env : [];\n for (const wanted of (Array.isArray(keys) ? keys : [keys]).map(envKey)) {\n const row = rows.find((item) => isPlainObject(item) && envKey(item.key) === wanted && textOf(item.value));\n if (row) return row.value.trim();\n }\n return undefined;\n}\n\n/**\n * The map style for `mode` (`micro` or `macro`): `config.maps.styles[mode]`, else a\n * `MAP_<MODE>_STYLE_URL` / `MAP_STYLE_URL` env row. `null` when the kit sets none.\n *\n * @returns {{ url: string, name?: string, source: 'config.maps'|'config.env' } | null}\n */\nexport function brandKitMapStyle(brandKit, mode) {\n const which = mode === 'macro' ? 'macro' : 'micro';\n const style = brandKit?.config?.maps?.styles?.[which];\n const url = isPlainObject(style) ? textOf(style.url) : undefined;\n if (url) return { url, ...(textOf(style.name) ? { name: textOf(style.name) } : {}), source: 'config.maps' };\n const prefix = which.toUpperCase();\n const fromEnv = brandKitEnv(brandKit, [`MAP_${prefix}_STYLE_URL`, `MAP_STYLE_${prefix}_URL`, `${prefix}_MAP_STYLE_URL`, 'MAP_STYLE_URL']);\n return fromEnv ? { url: fromEnv, source: 'config.env' } : null;\n}\n","/**\n * What a brand kit declares for loading its fonts: stylesheet links (Google Fonts or a CSS\n * provider) and `@font-face` rules for self-hosted files. `BrandKitProvider` renders both.\n *\n * Only what the kit declares is loaded — `provider`/`source` (`google`, `css`), `cssUrl`, `files`\n * and `faces[].cssUrl` / `faces[].files` from the brandkit.json schema. A family with none is assumed to be\n * loaded by the template (an `@import` in its CSS) and is not guessed at. Relative URLs resolve\n * against the kit's `baseUrl`, else the directory of `sourceUrl` (where the kit was fetched from).\n *\n * Pure and DOM-free.\n */\nimport { isPlainObject, textOf } from '../utility/json.js';\nimport { brandKitRuntime } from './brand-kit-css-vars.js';\nimport { brandKitBaseUrl as baseUrlOf, resolveBrandKitUrl as resolveUrl } from './brand-kit-assets.js';\n\n// Characters that could end the quoted CSS string (or the <style> element) a value is written into.\nconst UNSAFE_IN_CSS_STRING = /[\"\\\\\\n\\r\\f<>]/;\n\nconst listFonts = (fonts) =>\n (Array.isArray(fonts) ? fonts : isPlainObject(fonts) ? Object.values(fonts) : []).filter(isPlainObject);\n\nfunction providerOf(font) {\n if (font.provider === 'google' || font.provider === 'css') return font.provider;\n if (font.source === 'google' || font.source === 'css') return font.source;\n return textOf(font.cssUrl) ? 'css' : undefined;\n}\n\n/** `@font-face` takes one family name: the first of a stack, unquoted. */\nconst singleFamily = (family) => textOf(family.split(',')[0]?.replace(/^\\s*([\"'])(.*)\\1\\s*$/, '$2'));\n\nfunction weightsOf(font) {\n const declared = Array.isArray(font.weights) ? font.weights : (font.faces ?? []).map((face) => face?.weight);\n const valid = declared.map(Number).filter((weight) => Number.isInteger(weight) && weight >= 1 && weight <= 1000);\n return [...new Set(valid)].sort((a, b) => a - b);\n}\n\nfunction googleFontsUrl(family, font) {\n const name = encodeURIComponent(family).replace(/%20/g, '+');\n const weights = weightsOf(font);\n const faces = Array.isArray(font.faces) ? font.faces : [];\n const styles = Array.isArray(font.styles) ? font.styles : faces.map((face) => face?.style);\n let axis = weights.length > 0 ? `:wght@${weights.join(';')}` : '';\n if (styles.includes('italic')) {\n const pairs = Array.isArray(font.styles)\n ? (styles.includes('normal') ? [0, 1] : [1]).flatMap((italic) =>\n (weights.length ? weights : [400]).map((weight) => [italic, weight]))\n : faces.filter((face) => face?.style === 'normal' || face?.style === 'italic')\n .map((face) => [face.style === 'italic' ? 1 : 0, Number(face.weight)])\n .filter(([, weight]) => Number.isInteger(weight) && weight >= 1 && weight <= 1000);\n const tuples = pairs.sort(([a, x], [b, y]) => a - b || x - y).map((pair) => pair.join(','));\n axis = `:ital,wght@${[...new Set(tuples)].join(';')}`;\n }\n return `https://fonts.googleapis.com/css2?family=${name}${axis}&display=swap`;\n}\n\nfunction fontFiles(font) {\n if (Array.isArray(font.files) && font.files.length > 0) {\n return font.files.filter(isPlainObject).map((file) => ({ ...file }));\n }\n if (!Array.isArray(font.faces)) return [];\n return font.faces.filter(isPlainObject).flatMap((face) => {\n if (Array.isArray(face.files)) {\n return face.files.filter(isPlainObject).map((file) => ({\n ...file,\n weight: file.weight ?? face.weight,\n style: file.style ?? face.style,\n }));\n }\n // `{ woff2: url, woff: url }`, the authoring shape.\n return Object.entries(isPlainObject(face.files) ? face.files : {}).map(([format, src]) => ({\n src,\n format,\n weight: face.weight,\n style: face.style,\n }));\n });\n}\n\nfunction cssFormat(file) {\n const hint = String(file.format ?? file.src ?? '').toLowerCase();\n if (hint.includes('woff2')) return 'woff2';\n if (hint.includes('woff')) return 'woff';\n if (hint.includes('otf') || hint.includes('opentype')) return 'opentype';\n return 'truetype';\n}\n\nfunction cssWeight(weight) {\n const value = String(weight ?? '').trim();\n return /^\\d{1,4}(?:\\s+\\d{1,4})?$/.test(value) ? value : '400';\n}\n\nfunction fontFaceRule(family, file, base) {\n const src = resolveUrl(file.src, base);\n if (!src || UNSAFE_IN_CSS_STRING.test(src)) return undefined;\n return [\n '@font-face {',\n ` font-family: \"${family}\";`,\n ` src: url(\"${src}\") format(\"${cssFormat(file)}\");`,\n ` font-style: ${file.style === 'italic' ? 'italic' : 'normal'};`,\n ` font-weight: ${cssWeight(file.weight)};`,\n ' font-display: swap;',\n '}',\n ].join('\\n');\n}\n\n/**\n * @param {object|null|undefined} brandKit\n * @param {{ sourceUrl?: string }} [options]\n * @returns {{ fontFaceCss: string, stylesheetUrls: string[] }}\n */\nexport function brandKitFontAssets(brandKit, options = {}) {\n if (!isPlainObject(brandKit)) return { fontFaceCss: '', stylesheetUrls: [] };\n const base = baseUrlOf(brandKit, options?.sourceUrl);\n const stylesheetUrls = [];\n const rules = [];\n const addStylesheet = (src) => {\n const url = resolveUrl(src, base);\n if (url && !/^data:/i.test(url) && !stylesheetUrls.includes(url)) stylesheetUrls.push(url);\n };\n\n // A kit published with `runtime` lists exactly what its four font roles need: stylesheet URLs,\n // and uploaded faces as data that goes through the same `@font-face` builder as everything else.\n const runtime = brandKitRuntime(brandKit);\n if (runtime) {\n for (const url of Array.isArray(runtime.fontStylesheets) ? runtime.fontStylesheets : []) addStylesheet(url);\n for (const face of Array.isArray(runtime.fontFaces) ? runtime.fontFaces : []) {\n if (!isPlainObject(face)) continue;\n const declared = textOf(face.family);\n const family = declared ? singleFamily(declared) : undefined;\n if (!family || UNSAFE_IN_CSS_STRING.test(family)) continue;\n const rule = fontFaceRule(family, face, base);\n if (rule && !rules.includes(rule)) rules.push(rule);\n }\n return { fontFaceCss: rules.join('\\n'), stylesheetUrls };\n }\n\n for (const font of listFonts(brandKit.fonts)) {\n const declared = textOf(font.family);\n const family = declared ? singleFamily(declared) : undefined;\n if (!family || UNSAFE_IN_CSS_STRING.test(family)) continue;\n\n const provider = providerOf(font);\n if (provider) {\n const url = textOf(font.cssUrl)\n ? font.cssUrl\n : provider === 'google'\n ? googleFontsUrl(family, font)\n : undefined;\n addStylesheet(url);\n }\n\n for (const face of Array.isArray(font.faces) ? font.faces : []) addStylesheet(face?.cssUrl);\n if (provider) continue;\n\n for (const file of fontFiles(font)) {\n const rule = fontFaceRule(family, file, base);\n if (rule && !rules.includes(rule)) rules.push(rule);\n }\n }\n\n return { fontFaceCss: rules.join('\\n'), stylesheetUrls };\n}\n","import { createContext, useContext, useEffect, useMemo, useState, type CSSProperties, type ReactNode } from 'react';\nimport { brandKitCssVars } from './brand-kit-css-vars.js';\nimport { brandKitFontAssets } from './brand-kit-fonts.js';\nimport {\n brandKitBaseUrl,\n brandKitCollection,\n brandKitEnv,\n brandKitLogo,\n brandKitMapStyle,\n loadBrandKit,\n resolveBrandKitUrl,\n} from './brand-kit-assets.js';\n\ntype BrandKitDocument = Record<string, unknown>;\ntype BrandKitStatus = 'idle' | 'loading' | 'ready' | 'error';\n\ninterface BrandKitRuntime {\n brandKit: BrandKitDocument | null;\n cssVars: Record<string, string>;\n sourceUrl: string | undefined;\n status: BrandKitStatus;\n logo: (options?: { kind?: string; background?: 'light' | 'dark' }) => ReturnType<typeof brandKitLogo>;\n collection: (kind: string, options?: { versionId?: string }) => ReturnType<typeof brandKitCollection>;\n mapStyle: (mode: 'micro' | 'macro') => ReturnType<typeof brandKitMapStyle>;\n env: (keys: string | string[]) => string | undefined;\n resolveUrl: (path: unknown) => string | undefined;\n}\n\ninterface BrandKitProviderProps {\n /**\n * The kit to render: the payload's kit or the template's bundled default. With `src`, it is\n * what renders until the fetched kit arrives, and what stays when the fetch fails.\n */\n brandKit?: BrandKitDocument | null;\n /** A brandkit.json URL to fetch (see `brandKitSourceUrl`). Relative asset URLs resolve against it. */\n src?: string | null;\n /** Custom properties for whatever the kit leaves out; the kit wins. Pass a stable object. */\n defaults?: Record<string, string>;\n /** Where a `brandKit` passed in came from, so its relative URLs resolve when it has no `baseUrl`. */\n sourceUrl?: string;\n /** Called with each fetched kit. */\n onLoad?: (brandKit: BrandKitDocument) => void;\n /** Called when a fetch fails (the `brandKit` prop keeps rendering). Default: `console.error`. */\n onError?: (error: unknown) => void;\n /** For the scope element. `style` is applied last, so `{ display: 'block' }` gives it a box. */\n className?: string;\n style?: CSSProperties;\n children?: ReactNode;\n}\n\ninterface Loaded {\n src: string;\n brandKit: BrandKitDocument | null;\n}\n\nconst BrandKitContext = createContext<BrandKitRuntime | null>(null);\n\n/** A template-relative `src` (`/kits/brandkit.json`) made absolute, so the kit's asset paths resolve. */\nfunction absoluteUrl(url: string) {\n try {\n return typeof location === 'undefined' ? url : new URL(url, location.href).toString();\n } catch {\n return url;\n }\n}\n\n/**\n * Scopes a brand kit around its children: the kit's CSS variables on a `display: contents`\n * element, so every `kit-*` and shadcn utility inside resolves and the layout gets no extra box,\n * plus the font stylesheets and `@font-face` rules the kit declares.\n *\n * <BrandKitProvider src={brandKitSourceUrl(payload)} brandKit={payload?.brandKit ?? defaultBrandKit}>\n * <PageEditor … />\n * </BrandKitProvider>\n *\n * The mapping and the colour policy are in docs/brand-kit-runtime.md.\n */\nexport function BrandKitProvider({\n brandKit,\n src,\n defaults,\n sourceUrl,\n onLoad,\n onError,\n className,\n style,\n children,\n}: BrandKitProviderProps) {\n const url = typeof src === 'string' && src.trim() !== '' ? src.trim() : undefined;\n const [loaded, setLoaded] = useState<Loaded | null>(null);\n\n useEffect(() => {\n if (!url) return undefined;\n const controller = new AbortController();\n loadBrandKit(url, { signal: controller.signal }).then(\n (document: BrandKitDocument) => {\n if (controller.signal.aborted) return;\n setLoaded({ src: url, brandKit: document });\n onLoad?.(document);\n },\n (error: unknown) => {\n if (controller.signal.aborted) return;\n setLoaded({ src: url, brandKit: null });\n if (onError) onError(error);\n else console.error(error);\n },\n );\n return () => controller.abort();\n // onLoad / onError are notifications: a new function identity must not refetch.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [url]);\n\n const current = url && loaded?.src === url ? loaded : null;\n const kit = current?.brandKit ?? brandKit ?? null;\n const kitSource = current?.brandKit && url ? absoluteUrl(url) : sourceUrl;\n const status: BrandKitStatus = !url ? 'idle' : !current ? 'loading' : current.brandKit ? 'ready' : 'error';\n\n const runtime = useMemo<BrandKitRuntime>(() => {\n const base = brandKitBaseUrl(kit, kitSource);\n return {\n brandKit: kit,\n cssVars: brandKitCssVars(kit, { defaults }),\n sourceUrl: kitSource,\n status,\n logo: (options = {}) => brandKitLogo(kit, { ...options, sourceUrl: kitSource }),\n collection: (kind, options = {}) => brandKitCollection(kit, kind, { ...options, sourceUrl: kitSource }),\n mapStyle: (mode) => brandKitMapStyle(kit, mode),\n env: (keys) => brandKitEnv(kit, keys),\n resolveUrl: (path) => resolveBrandKitUrl(path, base),\n };\n }, [kit, kitSource, defaults, status]);\n const fonts = useMemo(() => brandKitFontAssets(kit, { sourceUrl: kitSource }), [kit, kitSource]);\n\n return (\n <BrandKitContext.Provider value={runtime}>\n {fonts.stylesheetUrls.map((href) => (\n <link key={href} rel=\"stylesheet\" href={href} data-uhuu-brand-kit-font=\"\" />\n ))}\n {fonts.fontFaceCss ? <style data-uhuu-brand-kit-font=\"\">{fonts.fontFaceCss}</style> : null}\n <div\n data-uhuu-brand-kit={typeof kit?.id === 'string' ? kit.id : ''}\n data-uhuu-brand-kit-status={status}\n className={className}\n style={{ display: 'contents', ...runtime.cssVars, ...style }}\n >\n {children}\n </div>\n </BrandKitContext.Provider>\n );\n}\n\n/** The nearest `BrandKitProvider`'s runtime, or `null` outside one. */\nexport function useBrandKit() {\n return useContext(BrandKitContext);\n}\n","/**\n * Page Group Utilities\n * \n * Locked schema with explicit types and kind discriminator.\n * All helpers and reducers use these types for consistency.\n */\n\nimport type { ComponentType } from 'react';\nimport type { LocalizedText } from '../../i18n/i18n-core.js';\nimport type { PageDataBinding } from './data-binding';\n\nexport type IntegrationRequirement = 'required' | 'optional' | 'none';\n\nexport type IntegrationConfig = {\n mode?: IntegrationRequirement;\n};\n\n/**\n * Where a cover page sits when PageEditor composes a perfect-binding cover\n * spread (`pageFormat.binding` + `pageFilter.mode === 'cover'`). Absent for\n * plain single-page renders. mm. See docs/printer-cover-spine-support.md §6.5.\n */\nexport type SpreadInfo = {\n sheet: 'outer' | 'inner';\n side: 'left' | 'right';\n spine: number;\n glue: number;\n bleed: number;\n};\n\n/** Props for `templateConfig.spine.component`, rendered on the OUTER cover sheet's spine strip. */\nexport type SpineComponentProps = {\n payload?: any;\n sheet: 'outer';\n /** Spine width (mm) — the strip is exactly this wide. */\n spine: number;\n glue: number;\n bleed: number;\n /** Trim height of the page (mm); the strip is `height + 2 × bleed` tall. */\n height: number;\n totalPages?: number;\n /** The pages on either side of the spine (back cover left, front cover right). */\n pages: { left?: StandalonePage; right?: StandalonePage };\n};\n\nexport type SpineComponent = ComponentType<SpineComponentProps>;\n\nexport type PageComponentProps = {\n integration?: any;\n spread?: SpreadInfo;\n payload?: any;\n pageId?: string;\n templateId?: string;\n pageNum?: number;\n totalPages?: number;\n componentKey?: string;\n page?: StandalonePage;\n pagePayload?: any;\n parentGroup?: PageGroup;\n dataBinding?: PageDataBinding;\n};\n\nexport type PageComponent = ComponentType<PageComponentProps>;\n\nexport type StandalonePage = {\n kind: 'page';\n id: string; // Instance ID (unique)\n componentKey?: string; // Template key for component resolution\n dataKey?: string; // Optional payload data key — pages with the same dataKey share a payload slot across layout variants\n templateId?: string; // Reference to template (for repeatable pages)\n label?: LocalizedText; // One string, or one per language; a rename stores a string\n className?: string; // CSS classes for page-sheet container (e.g., background colors for bleed)\n hasFlow?: boolean; // Opt-in to Static.Flow hidden measurement and virtual continuation pages\n repeatable?: boolean; // Template metadata: whether it can be added again\n maxInstances?: number | null; // Template metadata: max allowed instances\n integration?: IntegrationRequirement | IntegrationConfig;\n pageNum?: number; // Derived, not stored in state\n component?: PageComponent; // Optional component for this page\n [key: string]: any; // Allow additional props\n};\n\nexport type PageGroup = {\n kind: 'group';\n id: string; // Instance ID (unique)\n templateId?: string; // Reference to template blueprint\n repeatable?: boolean; // Can this be added multiple times?\n maxInstances?: number | null; // Max instances allowed (null = unlimited)\n integration?: IntegrationRequirement | IntegrationConfig;\n label?: LocalizedText;\n pages: Omit<StandalonePage, 'pageNum' | 'kind'>[]; // Internal pages (no pageNum, no kind, but can have renderer)\n pageNum?: never; // Groups don't have pageNum\n [key: string]: any; // Allow integration metadata and custom fields\n};\n\nexport type PageItem = StandalonePage | PageGroup;\n\n// Payload persistence helpers\nexport const DEFAULT_PAGE_EDITOR_STATE_KEY = 'uhuu_page_editor';\n\nexport type PageEditorState = {\n key: string;\n items: PageItem[];\n totalPages: number;\n updatedAt: string;\n};\n\n// Page filtering types for conditional rendering\nexport type RenderMode = 'all' | 'cover' | 'text' | 'custom';\n\nexport type PageRange = {\n start: number; // 1-based index, supports negative indices (-1 = last page, -2 = second to last)\n end: number; // Inclusive\n};\n\nexport type PageFilterConfig = {\n mode?: RenderMode;\n ranges?: PageRange[]; // Used with 'custom' mode\n coverPageCount?: number; // Number of pages at start/end for 'cover' mode (default: 2)\n};\n\nexport type InsertPosition =\n | { mode: 'end' }\n | { mode: 'before'; anchorId: string }\n | { mode: 'after'; anchorId: string };\n\n// Type guards (using kind discriminator - much safer than checking for pages property)\nexport function isPageGroup(item: PageItem): item is PageGroup {\n return item.kind === 'group';\n}\n\n/**\n * Flatten items to get all pages with derived pageNum\n * Internal function used by getTotalPageCount\n */\nfunction flattenPages(items: PageItem[]): Array<StandalonePage & { pageNum: number }> {\n const result: Array<StandalonePage & { pageNum: number }> = [];\n let pageNum = 1;\n \n for (const item of items) {\n if (isPageGroup(item)) {\n // Group: add all pages from the group\n for (const page of item.pages) {\n result.push({ \n ...page, \n kind: 'page' as const,\n pageNum: pageNum++ \n } as StandalonePage & { pageNum: number });\n }\n } else {\n // Standalone page\n result.push({ \n ...item, \n pageNum: pageNum++ \n });\n }\n }\n \n return result;\n}\n\n/**\n * Calculate and assign pageNum to all pages (central source of truth)\n * Returns items with pageNum derived\n */\nexport function updatePageNumbers(items: PageItem[]): Array<PageItem & { pageNum?: number }> {\n const result: Array<PageItem & { pageNum?: number }> = [];\n let pageNum = 1;\n \n for (const item of items) {\n if (isPageGroup(item)) {\n // Group: update pages within the group\n const updatedPages = item.pages.map(page => ({\n ...page,\n kind: 'page' as const,\n pageNum: pageNum++,\n }));\n result.push({\n ...item,\n pages: updatedPages\n });\n } else {\n // Standalone page\n result.push({\n ...item,\n pageNum: pageNum++\n });\n }\n }\n \n return result;\n}\n\n/**\n * Count all pages including those in groups\n */\nexport function getTotalPageCount(items: PageItem[]): number {\n return flattenPages(items).length;\n}\n\n// Reorder utilities\nexport type ReorderItem = {\n kind: 'page' | 'group';\n id: string;\n label?: LocalizedText;\n pageComponent?: PageComponent; // Component for standalone pages\n pageComponentKey?: string; // Component key for standalone pages\n firstPageComponent?: PageComponent; // Component for first page in groups\n firstPageComponentKey?: string; // Component key for first page in groups\n [key: string]: any;\n}\n\n/**\n * Transform items for reorder dialog (groups appear as single units)\n */\nexport function transformItemsForReorder(items: PageItem[]): ReorderItem[] {\n return items.map(item => {\n const strictPosition = (item as any).strictPosition;\n if (isPageGroup(item)) {\n // For groups, create a representation with first page info\n const firstPage = item.pages[0];\n const firstPageComponentKey = firstPage?.componentKey ?? firstPage?.id;\n return {\n kind: 'group' as const,\n id: item.id,\n groupId: item.id,\n firstPageId: firstPage?.id,\n firstPageComponentKey,\n firstPageComponent: firstPage?.component, // Pass component from first page\n pageCount: item.pages.length,\n label: item.label,\n strictPosition // Preserve strictPosition\n };\n } else {\n // Standalone page\n const pageComponentKey = item.componentKey ?? item.id;\n return {\n kind: 'page' as const,\n id: item.id,\n label: item.label,\n pageId: item.id,\n pageComponentKey,\n pageLabel: item.label,\n pageNum: item.pageNum,\n pageComponent: item.component, // Pass component from page\n strictPosition // Preserve strictPosition\n };\n }\n });\n}\n\n/**\n * Restore group structure after reorder\n */\nexport function restoreItemsFromReorder(reorderedItems: ReorderItem[], originalItems: PageItem[]): PageItem[] {\n // Create a map of original items by ID\n const originalItemsMap = new Map<string, PageItem>();\n originalItems.forEach(item => {\n originalItemsMap.set(item.id, item);\n });\n \n // Reconstruct items array in the new order\n const restored: PageItem[] = [];\n for (const reorderedItem of reorderedItems) {\n const original = originalItemsMap.get(reorderedItem.id);\n if (original) {\n restored.push(original);\n }\n }\n \n return restored;\n}\n\n/**\n * Normalize items to ensure they carry a `kind` discriminator.\n * Safely converts legacy shapes that lack `kind` into the locked schema.\n */\nexport function normalizePageItems(items: Array<PageItem | Omit<PageItem, 'kind'> & { pages?: any[] }>): PageItem[] {\n return items.map((item) => {\n if ('kind' in item && (item as any).kind) {\n return item as PageItem;\n }\n\n const maybeGroup = (item as any).pages && Array.isArray((item as any).pages);\n if (maybeGroup) {\n return {\n kind: 'group' as const,\n ...(item as any),\n pages: ((item as any).pages ?? []).map((page: any) => {\n const { kind: _ignored, ...rest } = page || {};\n return {\n kind: 'page' as const,\n ...rest,\n };\n }),\n };\n }\n\n const { kind: _ignored, ...rest } = item as any;\n return {\n kind: 'page' as const,\n ...rest,\n };\n });\n}\n\n/**\n * Build a persistable state object for embedding into payloads.\n * Page numbers are derived and therefore omitted from persisted state.\n */\nexport function buildPageEditorState(\n items: PageItem[],\n key: string = DEFAULT_PAGE_EDITOR_STATE_KEY\n): PageEditorState {\n const normalized = normalizePageItems(items);\n return {\n key,\n items: normalized,\n totalPages: getTotalPageCount(normalized),\n updatedAt: new Date().toISOString(),\n };\n}\n\n/**\n * Read persisted state from a payload object.\n * Returns normalized items or null when not present.\n */\nexport function readPageEditorState(\n payload: any,\n key: string = DEFAULT_PAGE_EDITOR_STATE_KEY\n): PageEditorState | null {\n const maybeState = payload?.[key];\n if (!maybeState?.items) return null;\n const normalizedItems = normalizePageItems(maybeState.items as PageItem[]);\n return {\n key,\n items: normalizedItems,\n totalPages: getTotalPageCount(normalizedItems),\n updatedAt: maybeState.updatedAt || new Date().toISOString(),\n };\n}\n\n/**\n * Helper to produce a new payload object with the page editor state embedded.\n * Does not mutate the provided payload object.\n */\nexport function mergePageEditorStateIntoPayload(\n payload: any,\n items: PageItem[],\n key: string = DEFAULT_PAGE_EDITOR_STATE_KEY\n) {\n const state = buildPageEditorState(items, key);\n return { ...(payload ?? {}), [key]: state };\n}\n\n/**\n * Generate a unique ID for instances\n */\nexport function generateUID(): string {\n return Math.random()\n .toString(36)\n .slice(2, 11);\n}\n\n/**\n * Instantiate a standalone page from a template\n */\nexport function instantiatePage(\n templateId: string,\n componentKey: string,\n overrides?: { \n label?: LocalizedText; \n repeatable?: boolean;\n maxInstances?: number | null;\n integration?: IntegrationRequirement | IntegrationConfig;\n [key: string]: any;\n }\n): StandalonePage {\n const instanceId = overrides?.repeatable ? generateUID() : templateId;\n\n return {\n kind: 'page',\n id: instanceId,\n componentKey,\n templateId,\n label: overrides?.label,\n repeatable: overrides?.repeatable,\n maxInstances: overrides?.maxInstances,\n ...overrides,\n };\n}\n\nexport type ComponentKeyEntry = string | { key: string; dataKey?: string; hasFlow?: boolean };\n\n/**\n * Instantiate a group from a template.\n *\n * `componentKeys` accepts either plain strings or `{ key, dataKey }` objects.\n * When `dataKey` is provided the page's data is stored under that key instead\n * of the component key — pages across different layout variants that share the same\n * `dataKey` will read and write the same data slot, preserving data on layout switch.\n */\nexport function instantiateGroup(\n templateId: string,\n componentKeys: ComponentKeyEntry[],\n overrides?: {\n label?: LocalizedText;\n repeatable?: boolean;\n maxInstances?: number | null;\n integration?: IntegrationRequirement | IntegrationConfig;\n [key: string]: any;\n }\n): PageGroup {\n const instanceId = overrides?.repeatable ? generateUID() : templateId;\n\n return {\n kind: 'group',\n id: instanceId,\n templateId,\n label: overrides?.label,\n repeatable: overrides?.repeatable ?? false,\n maxInstances: overrides?.maxInstances ?? null,\n pages: componentKeys.map((entry, idx) => {\n const key = typeof entry === 'string' ? entry : entry.key;\n const dataKey = typeof entry === 'string' ? undefined : entry.dataKey;\n const hasFlow = typeof entry === 'string' ? undefined : entry.hasFlow;\n return {\n id: `${instanceId}__${dataKey ?? key}__${idx}`,\n componentKey: key,\n templateId: key,\n ...(dataKey ? { dataKey } : {}),\n ...(hasFlow ? { hasFlow } : {}),\n };\n }),\n ...overrides,\n };\n}\n\n/**\n * Resolve a page index (supports negative indices)\n * @param index - Page index (1-based, negative from end)\n * @param totalPages - Total number of pages\n * @returns Resolved 1-based page number\n */\nfunction resolvePageIndex(index: number, totalPages: number): number {\n if (index < 0) {\n // Negative index: -1 = last page, -2 = second to last\n return totalPages + index + 1;\n }\n return index;\n}\n\n/**\n * Check if a page number is in any of the specified ranges\n * @param pageNum - 1-based page number\n * @param ranges - Array of page ranges\n * @param totalPages - Total number of pages\n */\nfunction isPageInRanges(pageNum: number, ranges: PageRange[], totalPages: number): boolean {\n for (const range of ranges) {\n const start = resolvePageIndex(range.start, totalPages);\n const end = resolvePageIndex(range.end, totalPages);\n \n if (pageNum >= start && pageNum <= end) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Get page ranges based on render mode\n * @param mode - Render mode\n * @param totalPages - Total number of pages\n * @param coverPageCount - Number of pages at start/end for cover mode\n */\nfunction getRangesForMode(mode: RenderMode, totalPages: number, coverPageCount: number = 2): PageRange[] {\n switch (mode) {\n case 'all':\n return [{ start: 1, end: totalPages }];\n \n case 'cover':\n // First N pages and last N pages\n return [\n { start: 1, end: coverPageCount },\n { start: -coverPageCount, end: -1 }\n ];\n \n case 'text':\n // Everything except first N and last N pages\n if (totalPages <= coverPageCount * 2) {\n // Not enough pages for text mode\n return [];\n }\n return [{ start: coverPageCount + 1, end: -(coverPageCount + 1) }];\n \n case 'custom':\n default:\n return [];\n }\n}\n\n/**\n * Filter items based on page filter configuration\n * @param items - Page items to filter\n * @param filterConfig - Filter configuration\n * @returns Filtered items maintaining structure (groups with filtered pages)\n */\nexport function filterPageItems(items: PageItem[], filterConfig?: PageFilterConfig): PageItem[] {\n // No filter or 'all' mode: return all items\n if (!filterConfig || filterConfig.mode === 'all') {\n return items;\n }\n\n const totalPages = getTotalPageCount(items);\n const mode = filterConfig.mode ?? 'all';\n const coverPageCount = filterConfig.coverPageCount ?? 2;\n \n // Get ranges to include\n const ranges = mode === 'custom' && filterConfig.ranges \n ? filterConfig.ranges \n : getRangesForMode(mode, totalPages, coverPageCount);\n\n if (ranges.length === 0) {\n return [];\n }\n\n // Filter items based on their existing page numbers\n const filtered: PageItem[] = [];\n\n for (const item of items) {\n if (isPageGroup(item)) {\n // Filter pages within the group based on their page numbers\n const filteredPages = item.pages.filter((page) => {\n return page.pageNum && isPageInRanges(page.pageNum, ranges, totalPages);\n });\n\n // Only include group if it has pages after filtering\n if (filteredPages.length > 0) {\n filtered.push({\n ...item,\n pages: filteredPages\n });\n }\n } else {\n // Standalone page - check if it should be included\n if (item.pageNum && isPageInRanges(item.pageNum, ranges, totalPages)) {\n filtered.push(item);\n }\n }\n }\n\n return filtered;\n}\n\nexport function isPageNumberIncludedInFilter(\n pageNum: number,\n totalPages: number,\n filterConfig?: PageFilterConfig\n): boolean {\n if (!filterConfig || filterConfig.mode === 'all') return true;\n\n const mode = filterConfig.mode ?? 'all';\n const coverPageCount = filterConfig.coverPageCount ?? 2;\n const ranges = mode === 'custom' && filterConfig.ranges\n ? filterConfig.ranges\n : getRangesForMode(mode, totalPages, coverPageCount);\n\n if (ranges.length === 0) return false;\n return isPageInRanges(pageNum, ranges, totalPages);\n}\n","/**\n * Integration Data Utilities\n * \n * Essential utilities for working with integration data in multi-instance templates.\n */\n\nimport type { PageItem } from './page-group-utils';\nimport { isPageGroup } from './page-group-utils';\n\n/**\n * Get integration data for a specific page/group instance\n */\nfunction getIntegrationData(payload: any, instanceId: string): any {\n if (!payload?.integrations) return undefined;\n return payload.integrations[instanceId];\n}\n\nexport function resolveIntegrationInstanceId(\n page: { id: string },\n parentGroup?: PageItem\n): string | null {\n if (parentGroup && isPageGroup(parentGroup)) {\n return parentGroup.id;\n }\n return page?.id ?? null;\n}\n\nexport function resolveIntegrationBinding(\n payload: any,\n page: { id: string },\n parentGroup?: PageItem\n): { instanceId: string | null; integration?: any } {\n const instanceId = resolveIntegrationInstanceId(page, parentGroup);\n if (!instanceId) return { instanceId: null, integration: undefined };\n return {\n instanceId,\n integration: getIntegrationData(payload, instanceId),\n };\n}\n\n/**\n * Resolve integration data for a page component\n * For group pages, prefer parent group's integration data\n */\nexport function resolveIntegrationForPage(\n payload: any,\n page: { id: string },\n parentGroup?: PageItem\n): any {\n const binding = resolveIntegrationBinding(payload, page, parentGroup);\n return binding.integration;\n}\n\nexport function buildIntegrationPath(\n instanceId?: string | null,\n fieldPath?: string\n) {\n if (!instanceId) return null;\n const base = `integrations.${instanceId}`;\n if (!fieldPath) return base;\n return `${base}.${fieldPath}`;\n}\n\n/**\n * Parse a dialog path to determine if it targets integration data\n * Returns the instance ID if the path targets integrations, null otherwise\n */\nexport function parseIntegrationPath(path: string): {\n instanceId: string | null;\n fieldPath: string;\n isIntegrationPath: boolean;\n} {\n if (!path) {\n return { instanceId: null, fieldPath: path, isIntegrationPath: false };\n }\n \n // Check if path starts with \"integrations.\"\n const integrationPrefix = 'integrations.';\n if (path.startsWith(integrationPrefix)) {\n const afterPrefix = path.slice(integrationPrefix.length);\n const dotIndex = afterPrefix.indexOf('.');\n \n if (dotIndex > 0) {\n // Path like \"integrations.group_1__123.field.subfield\"\n const instanceId = afterPrefix.slice(0, dotIndex);\n const fieldPath = afterPrefix.slice(dotIndex + 1);\n return { instanceId, fieldPath, isIntegrationPath: true };\n } else {\n // Path like \"integrations.group_1__123\" (targets entire integration)\n const instanceId = afterPrefix;\n return { instanceId, fieldPath: '', isIntegrationPath: true };\n }\n }\n \n return { instanceId: null, fieldPath: path, isIntegrationPath: false };\n}\n\n/**\n * Set a nested value in an object using dot notation path\n */\nfunction setNestedValue(obj: any, path: string, value: any): any {\n if (!path) return value;\n \n const keys = path.split('.');\n const result = { ...obj };\n let current: any = result;\n \n for (let i = 0; i < keys.length - 1; i++) {\n const key = keys[i];\n if (!(key in current) || typeof current[key] !== 'object' || current[key] === null) {\n current[key] = {};\n } else {\n current[key] = { ...current[key] };\n }\n current = current[key];\n }\n \n const lastKey = keys[keys.length - 1];\n current[lastKey] = value;\n \n return result;\n}\n\n/**\n * Update integration data in payload using a path-based update\n * Handles nested field updates (e.g., \"integrations.id.overrides.heroImage.url\")\n */\nexport function updateIntegrationByPath(\n payload: any,\n path: string,\n value: any\n): any {\n const parsed = parseIntegrationPath(path);\n \n if (!parsed.isIntegrationPath || !parsed.instanceId) {\n // Not an integration path, return payload as-is\n return payload;\n }\n \n const { instanceId, fieldPath } = parsed;\n const currentIntegration = getIntegrationData(payload, instanceId) || {};\n \n // Update nested field using dot notation\n const updatedIntegration = setNestedValue(\n currentIntegration,\n fieldPath,\n value\n );\n \n return {\n ...payload,\n integrations: {\n ...(payload?.integrations || {}),\n [instanceId]: updatedIntegration,\n },\n };\n}\n","import * as React from 'react';\nimport type { PageOption } from './page-editor';\nimport { mergePageEditorStateIntoPayload, PageItem, DEFAULT_PAGE_EDITOR_STATE_KEY } from './page-group-utils';\nimport { updateIntegrationByPath } from './integration-utils';\n\ntype PagePayloadTarget = string | { id?: string; templateId?: string; componentKey?: string } | PageItem | null | undefined;\n\nexport function getPagePayload(payload: any, target: PagePayloadTarget) {\n if (!payload || !target) return undefined;\n \n const targetId = typeof target === 'string' ? target : target?.id;\n const templateId = typeof target === 'string' ? undefined : (target as any)?.templateId ?? (target as any)?.componentKey;\n const fallbackId = typeof target === 'string' ? undefined : (target as any)?.componentKey;\n const candidateKeys = Array.from(\n new Set(\n [targetId, templateId, fallbackId].filter(Boolean) as string[]\n )\n );\n\n for (const key of candidateKeys) {\n if (payload?.pages?.[key] !== undefined) return payload.pages[key];\n }\n\n // Allow group-level payloads\n for (const key of candidateKeys) {\n if (payload?.groups?.[key] !== undefined) return payload.groups[key];\n }\n\n // Legacy fallback: top-level keys keyed by id/templateId\n for (const key of candidateKeys) {\n if ((payload as any)[key] !== undefined) return (payload as any)[key];\n }\n\n return undefined;\n}\n\ntype TemplateDataContextValue = {\n payload: any;\n setPayload: (next: any | ((prev: any) => any)) => void;\n setPageOptionValue: (pageOrGroupId: string, key: string, value: any) => void;\n setIntegrationPayload: (instanceId: string, next: any | ((prev: any) => any)) => void;\n setIntegrationPayloadValue: (instanceId: string, key: string, value: any) => void;\n removeIntegrationPayload: (instanceId: string) => void;\n updateIntegrationByDialogPath: (path: string, value: any) => void;\n mergePageEditorState: (items: PageItem[], key?: string) => void;\n getPagePayload: (target: PagePayloadTarget) => any;\n};\n\nexport const TemplateDataContext = React.createContext<TemplateDataContextValue | null>(null);\n\n/**\n * Get the list of reserved keys that the page editor manages.\n * These keys are isolated from external payload updates.\n */\nfunction getReservedKeys(stateKey: string = DEFAULT_PAGE_EDITOR_STATE_KEY): string[] {\n return [stateKey];\n}\n\n/**\n * Merge external payload while preserving reserved keys managed by page editor.\n * External payload is the source of truth for all keys except reserved ones.\n */\nfunction mergeExternalPayload(\n currentPayload: any,\n externalPayload: any,\n reservedKeys: string[]\n): any {\n if (!externalPayload) return currentPayload;\n if (!currentPayload) return externalPayload;\n\n // Start with external payload (source of truth for non-reserved keys)\n const merged = { ...externalPayload };\n \n // Overlay reserved keys from current payload (page editor owns these)\n reservedKeys.forEach(key => {\n if (currentPayload[key] !== undefined) {\n merged[key] = currentPayload[key];\n }\n });\n\n return merged;\n}\n\nexport function TemplateDataProvider({\n payload,\n onPayloadChange,\n children,\n stateKey = DEFAULT_PAGE_EDITOR_STATE_KEY,\n}: {\n payload?: any;\n onPayloadChange?: (nextPayload: any) => void;\n children: React.ReactNode;\n stateKey?: string;\n}) {\n const [currentPayload, setCurrentPayload] = React.useState(payload ?? {});\n const lastExternalPayloadRef = React.useRef<any>(null);\n const isInternalUpdateRef = React.useRef(false);\n const lastInternalPayloadRef = React.useRef<any>(null);\n const lastInternalTimestampRef = React.useRef<number>(0);\n const isInitialMountRef = React.useRef(true);\n\n // Serialize payload for comparison (simple deep equality check)\n const serializePayload = React.useCallback((p: any) => {\n try {\n return JSON.stringify(p);\n } catch {\n return String(p);\n }\n }, []);\n\n // Get reserved keys for this provider instance\n const reservedKeys = React.useMemo(() => getReservedKeys(stateKey), [stateKey]);\n\n // Helper to create payload without reserved keys for comparison\n const payloadWithoutReservedKeys = React.useCallback((p: any, keys: string[]) => {\n if (!p) return null;\n const filtered = { ...p };\n keys.forEach(key => {\n delete filtered[key];\n });\n return filtered;\n }, []);\n\n // When external payload changes, merge it while preserving reserved keys\n React.useEffect(() => {\n // Handle initial mount - set initial payload\n if (isInitialMountRef.current) {\n isInitialMountRef.current = false;\n if (payload) {\n lastExternalPayloadRef.current = payload;\n setCurrentPayload(payload);\n }\n return;\n }\n\n // Consume the internal-update flag (set by setPayload)\n if (isInternalUpdateRef.current) {\n isInternalUpdateRef.current = false;\n\n // Compare the incoming payload against what we set internally.\n // If they match it is a genuine round-trip echo from the host — skip it.\n // If they differ the host has injected new data (e.g. an image selection from\n // the editor's image-gallery-field) while our flag was still pending consumption\n // (because the debounced re-render was suppressed by skipNextRenderRef).\n // In that case we must NOT skip — fall through to merge the external payload.\n const internalSerialized = lastInternalPayloadRef.current !== null\n ? serializePayload(payloadWithoutReservedKeys(lastInternalPayloadRef.current, reservedKeys))\n : null;\n const externalSerialized = serializePayload(payloadWithoutReservedKeys(payload, reservedKeys));\n\n if (internalSerialized !== null && internalSerialized === externalSerialized) {\n // True round-trip — skip to avoid infinite update loop\n lastExternalPayloadRef.current = payload;\n return;\n }\n // Not a round-trip — fall through to merge the genuine external update below\n }\n\n // Skip if payload hasn't actually changed (same object reference)\n if (payload === lastExternalPayloadRef.current) {\n return;\n }\n\n // Check if this is a round-trip by comparing non-reserved keys only\n // Only check for round-trips within a short time window (500ms) to avoid blocking legitimate updates\n const timeSinceLastInternal = Date.now() - lastInternalTimestampRef.current;\n const isRecentInternalUpdate = timeSinceLastInternal < 500;\n \n if (isRecentInternalUpdate && lastInternalPayloadRef.current !== null) {\n const currentWithoutReserved = payloadWithoutReservedKeys(payload, reservedKeys);\n const lastInternalWithoutReserved = payloadWithoutReservedKeys(lastInternalPayloadRef.current, reservedKeys);\n \n const currentSerialized = currentWithoutReserved ? serializePayload(currentWithoutReserved) : null;\n const lastInternalSerialized = lastInternalWithoutReserved ? serializePayload(lastInternalWithoutReserved) : null;\n \n if (currentSerialized && currentSerialized === lastInternalSerialized) {\n // This is likely a round-trip - skip it but update the ref\n lastInternalPayloadRef.current = null; // Clear after one check\n lastExternalPayloadRef.current = payload;\n return;\n }\n }\n\n // This is a genuine external update from $uhuu.listen or other external source - merge it\n lastExternalPayloadRef.current = payload;\n setCurrentPayload((prev) => {\n if (!payload) return prev;\n const merged = mergeExternalPayload(prev, payload, reservedKeys);\n return merged;\n });\n }, [payload, reservedKeys, serializePayload, payloadWithoutReservedKeys]);\n\n const notifyHost = React.useCallback(\n (next: any) => {\n onPayloadChange?.(next);\n if (typeof window === 'undefined') return;\n const uhuu = (window as any).$uhuu;\n if (uhuu?.emitPayload) {\n uhuu.emitPayload(next);\n }\n },\n [onPayloadChange]\n );\n\n /**\n * Handle payload updates, including integration path updates from dialogs\n * When external payload updates come in with integration paths, route them correctly\n */\n const setPayload = React.useCallback(\n (next: any | ((prev: any) => any)) => {\n isInternalUpdateRef.current = true;\n setCurrentPayload((prev) => {\n const resolved = typeof next === 'function' ? (next as (prev: any) => any)(prev) : next;\n \n // Check if this update contains integration path updates from dialogs\n // The SDK/document editor may send updates with paths like \"integrations.id.field\"\n // We need to ensure these are properly structured\n let finalPayload = resolved;\n \n // If the payload has a _dialogUpdate flag or similar, process integration paths\n // This handles cases where dialogs update integration data via path-based updates\n if (resolved && typeof resolved === 'object') {\n // Check for any top-level keys that might be integration paths (from dialog updates)\n // The document editor might send updates that need to be routed to integrations\n const integrationKeys = Object.keys(resolved).filter(key => \n key.startsWith('integrations.') || key === 'integrations'\n );\n \n if (integrationKeys.length > 0 && resolved.integrations) {\n // Integration data is already properly structured, use as-is\n finalPayload = resolved;\n }\n }\n \n // Store the resolved payload to detect round-trips\n lastInternalPayloadRef.current = finalPayload;\n lastInternalTimestampRef.current = Date.now();\n // Defer parent notification to avoid \"Cannot update component while rendering another\"\n queueMicrotask(() => notifyHost(finalPayload));\n return finalPayload;\n });\n },\n [notifyHost]\n );\n\n const setPageOptionValue = React.useCallback(\n (pageOrGroupId: string, key: string, value: any) => {\n setPayload((prev: any) => ({\n ...(prev ?? {}),\n pages: {\n ...(prev?.pages ?? {}),\n [pageOrGroupId]: {\n ...(prev?.pages?.[pageOrGroupId] ?? {}),\n [key]: value,\n },\n },\n }));\n },\n [setPayload]\n );\n\n const setIntegrationPayload = React.useCallback(\n (instanceId: string, next: any | ((prev: any) => any)) => {\n setPayload((prev: any) => {\n const prevIntegrations = prev?.integrations ?? {};\n const current = prevIntegrations[instanceId];\n const resolved = typeof next === 'function' ? (next as (prev: any) => any)(current) : next;\n return {\n ...(prev ?? {}),\n integrations: {\n ...prevIntegrations,\n [instanceId]: resolved,\n },\n };\n });\n },\n [setPayload]\n );\n\n const setIntegrationPayloadValue = React.useCallback(\n (instanceId: string, key: string, value: any) => {\n setIntegrationPayload(instanceId, (prevIntegration: any) => ({\n ...(prevIntegration ?? {}),\n [key]: value,\n }));\n },\n [setIntegrationPayload]\n );\n\n const removeIntegrationPayload = React.useCallback(\n (instanceId: string) => {\n setPayload((prev: any) => {\n if (!prev?.integrations || !prev.integrations[instanceId]) {\n return prev;\n }\n const { [instanceId]: removed, ...remainingIntegrations } = prev.integrations;\n return {\n ...prev,\n integrations: Object.keys(remainingIntegrations).length > 0 ? remainingIntegrations : undefined,\n };\n });\n },\n [setPayload]\n );\n\n /**\n * Update integration data using a path-based update (for dialog compatibility)\n * Handles paths like \"integrations.instanceId.field.subfield\"\n */\n const updateIntegrationByDialogPath = React.useCallback(\n (path: string, value: any) => {\n setPayload((prev: any) => updateIntegrationByPath(prev, path, value));\n },\n [setPayload]\n );\n\n const mergePageEditorState = React.useCallback(\n (items: PageItem[], key?: string) => {\n const effectiveKey = key ?? stateKey;\n setPayload((prev: any) => mergePageEditorStateIntoPayload(prev, items, effectiveKey));\n },\n [setPayload, stateKey]\n );\n\n const resolvePagePayload = React.useCallback(\n (target: PagePayloadTarget) => getPagePayload(currentPayload, target),\n [currentPayload]\n );\n\n const value = React.useMemo(\n () => ({\n payload: currentPayload,\n setPayload,\n setPageOptionValue,\n setIntegrationPayload,\n setIntegrationPayloadValue,\n removeIntegrationPayload,\n updateIntegrationByDialogPath,\n mergePageEditorState,\n getPagePayload: resolvePagePayload,\n }),\n [\n currentPayload,\n setPayload,\n setPageOptionValue,\n setIntegrationPayload,\n setIntegrationPayloadValue,\n removeIntegrationPayload,\n updateIntegrationByDialogPath,\n mergePageEditorState,\n resolvePagePayload,\n ]\n );\n\n return <TemplateDataContext.Provider value={value}>{children}</TemplateDataContext.Provider>;\n}\n\nexport function useTemplateData() {\n const ctx = React.useContext(TemplateDataContext);\n if (!ctx) {\n throw new Error('useTemplateData must be used within a TemplateDataProvider');\n }\n return ctx;\n}\n\n// JSON-friendly option builder: definitions → PageOption[] bound to payload.pages\nexport type PayloadOptionDefinition = Omit<PageOption, 'getValue' | 'onChange' | 'applyPatch'> & {\n defaultValue?: any;\n field?: string;\n};\n\nfunction toDefault(def: PayloadOptionDefinition) {\n if (def.defaultValue !== undefined) return def.defaultValue;\n if (def.type === 'toggle') return false;\n if (def.type === 'slider' || def.type === 'counter') return 0;\n return '';\n}\n\nfunction parseValue(def: PayloadOptionDefinition, raw: string | number | boolean) {\n if (def.type === 'toggle') return raw === true || raw === 'true';\n if (def.type === 'slider' || def.type === 'counter') return Number(raw);\n return raw;\n}\n\nexport function buildPayloadPageOption(\n def: PayloadOptionDefinition,\n payload: any,\n setPageOptionValue: (pageOrGroupId: string, key: string, value: any) => void\n): PageOption {\n const field = def.field ?? def.id;\n const base = def as Omit<PageOption, 'getValue' | 'onChange' | 'applyPatch'>;\n return {\n ...base,\n getValue: (item: PageItem) => {\n const stored = payload?.pages?.[item.id]?.[field];\n if (stored === undefined) return toDefault(def);\n if (def.type === 'toggle') return !!stored;\n return stored;\n },\n onChange: (pageOrGroupId: string, value: string) => {\n setPageOptionValue(pageOrGroupId, field, parseValue(def, value));\n },\n } as PageOption;\n}\n\nexport function buildPayloadPageOptions(\n definitions: PayloadOptionDefinition[],\n payload: any,\n setPageOptionValue: (pageOrGroupId: string, key: string, value: any) => void\n): PageOption[] {\n return definitions.map((def) =>\n buildPayloadPageOption(def, payload, setPageOptionValue)\n );\n}\n\nexport function usePayloadPageOptions(definitions: PayloadOptionDefinition[]): PageOption[] {\n const { payload, setPageOptionValue } = useTemplateData();\n\n return React.useMemo(\n () => buildPayloadPageOptions(definitions, payload, setPageOptionValue),\n [definitions, payload, setPageOptionValue]\n );\n}\n","/** @typedef {'none' | 'width' | 'height' | 'both'} FitMode */\n/** @typedef {'manual' | 'fit-width' | 'fit-height' | 'fit-page'} DefaultZoomMode */\n\n/**\n * Convert the public PageEditor preference into the resizer's internal fit state.\n * `manual` deliberately maps to `none`: callers retain the existing numeric\n * `defaultZoom` behavior until they choose a fit mode from the toolbar.\n *\n * @param {DefaultZoomMode | undefined} mode\n * @returns {FitMode}\n */\nexport function fitModeFromDefaultZoomMode(mode) {\n switch (mode) {\n case 'fit-width':\n return 'width';\n case 'fit-height':\n return 'height';\n case 'fit-page':\n return 'both';\n default:\n return 'none';\n }\n}\n\n/**\n * Combine one page or a facing pair into the dimensions that must fit.\n * Widths add across a spread while the tallest sheet determines its height.\n *\n * @param {Array<{ width: number, height: number }>} dimensions\n * @returns {{ width: number, height: number } | null}\n */\nexport function combineFitDimensions(dimensions) {\n const valid = dimensions.filter(({ width, height }) => width > 0 && height > 0);\n if (!valid.length) return null;\n\n return {\n width: valid.reduce((total, section) => total + section.width, 0),\n height: Math.max(...valid.map((section) => section.height)),\n };\n}\n\n/**\n * Resolve the sheet unit that fit-to-page/width/height should target.\n *\n * - `two_pages`: combine every sheet in the provided unit (one facing pair).\n * - `single_page`: use only the first sheet. Stacked pages share one viewport\n * unit; summing every sheet width would under-zoom multi-page documents.\n *\n * @param {'single_page' | 'two_pages'} preview\n * @param {Array<{ width: number, height: number }>} dimensions\n * @returns {{ width: number, height: number } | null}\n */\nexport function resolveFitUnitDimensions(preview, dimensions) {\n if (preview === 'two_pages') {\n return combineFitDimensions(dimensions);\n }\n\n const first = dimensions.find(({ width, height }) => width > 0 && height > 0);\n return first ? { width: first.width, height: first.height } : null;\n}\n\n/**\n * Height of the zoom pane that fit may actually rely on.\n *\n * `paneClientHeight` alone is not trustworthy: if the pane's geometry fails to apply — a host\n * that never loads the component stylesheet, for instance — the element falls back to being a\n * plain block and reports its whole content height. Fit would then divide by a viewport many\n * times too tall, making fit-to-height overshoot wildly and fit-to-page silently collapse to\n * fit-to-width. Clamping to the space actually visible below the pane's top keeps fit honest\n * no matter how the pane ends up sized.\n *\n * @param {{ paneClientHeight: number, paneTop: number, viewportHeight: number }} input\n * @returns {number}\n */\nexport function resolveFitPaneHeight({ paneClientHeight, paneTop, viewportHeight }) {\n const visibleHeight = viewportHeight - Math.max(paneTop, 0);\n const candidates = [paneClientHeight, visibleHeight].filter((value) => value > 0);\n if (!candidates.length) return 0;\n return Math.min(...candidates);\n}\n\n/**\n * Space a sheet may actually occupy inside the zoom pane.\n *\n * Kept explicit (and DOM-free) so the insets are auditable instead of hardcoded magic\n * numbers: `paddingX`/`paddingY` are the pane content gutters, and `chromeHeight` is the\n * per-section header plus the spacer `Section` reserves above the scaled sheet.\n *\n * @param {{\n * paneWidth: number,\n * paneHeight: number,\n * paddingX?: number,\n * paddingY?: number,\n * chromeHeight?: number,\n * }} input\n * @returns {{ availableWidth: number, availableHeight: number }}\n */\nexport function resolveFitAvailableSpace({\n paneWidth,\n paneHeight,\n paddingX = 0,\n paddingY = 0,\n chromeHeight = 0,\n}) {\n return {\n availableWidth: Math.max(paneWidth - paddingX, 0),\n availableHeight: Math.max(paneHeight - paddingY - chromeHeight, 0),\n };\n}\n\n/**\n * Calculate a clamped percentage zoom from already-measured dimensions.\n * Keeping this DOM-free makes the fit contract testable independently of\n * React, ResizeObserver, and an embedding iframe.\n *\n * @param {{\n * mode: FitMode,\n * contentWidth: number,\n * contentHeight: number,\n * availableWidth: number,\n * availableHeight: number,\n * minZoom: number,\n * maxZoom: number,\n * }} input\n * @returns {number | null}\n */\nexport function calculateFitZoom({\n mode,\n contentWidth,\n contentHeight,\n availableWidth,\n availableHeight,\n minZoom,\n maxZoom,\n}) {\n if (\n mode === 'none' ||\n contentWidth <= 0 ||\n contentHeight <= 0 ||\n availableWidth <= 0 ||\n availableHeight <= 0\n ) {\n return null;\n }\n\n const scaleX = (availableWidth / contentWidth) * 100;\n const scaleY = (availableHeight / contentHeight) * 100;\n const zoom = mode === 'width'\n ? scaleX\n : mode === 'height'\n ? scaleY\n : Math.min(scaleX, scaleY);\n\n return Math.min(Math.max(zoom, minZoom), maxZoom);\n}\n","/**\n * Axis-aligned rect used for measure-based zoom-to-cursor scroll correction.\n * @typedef {{ left: number, top: number, width: number, height: number }} ZoomFocalRect\n */\n\n/**\n * @typedef {{ clientX: number, clientY: number, before: ZoomFocalRect }} ZoomFocalPending\n */\n\n/**\n * Prefer the pointer when it sits on the content rect; otherwise zoom around its center.\n *\n * @param {ZoomFocalRect} canvas\n * @param {number} clientX\n * @param {number} clientY\n * @returns {{ clientX: number, clientY: number }}\n */\nexport function resolveZoomFocalPoint(canvas, clientX, clientY) {\n const inside =\n clientX >= canvas.left &&\n clientX <= canvas.left + canvas.width &&\n clientY >= canvas.top &&\n clientY <= canvas.top + canvas.height;\n if (inside) return { clientX, clientY };\n return {\n clientX: canvas.left + canvas.width / 2,\n clientY: canvas.top + canvas.height / 2,\n };\n}\n\n/**\n * Scroll deltas that keep the content point under (clientX, clientY) fixed after a zoom that\n * moved `before` → `after`. Apply with `scrollLeft += deltaLeft`, `scrollTop += deltaTop`.\n *\n * @param {ZoomFocalRect} before\n * @param {ZoomFocalRect} after\n * @param {number} clientX\n * @param {number} clientY\n * @returns {{ deltaLeft: number, deltaTop: number }}\n */\nexport function zoomFocalScrollDelta(before, after, clientX, clientY) {\n if (before.width <= 0 || before.height <= 0) return { deltaLeft: 0, deltaTop: 0 };\n const relX = clientX - before.left;\n const relY = clientY - before.top;\n const newScreenX = after.left + relX * (after.width / before.width);\n const newScreenY = after.top + relY * (after.height / before.height);\n return {\n deltaLeft: newScreenX - clientX,\n deltaTop: newScreenY - clientY,\n };\n}\n\n/**\n * @param {DOMRectReadOnly | ZoomFocalRect} rect\n * @returns {ZoomFocalRect}\n */\nexport function snapshotZoomFocalRect(rect) {\n return { left: rect.left, top: rect.top, width: rect.width, height: rect.height };\n}\n\n/**\n * Choose which rect the focal correction should anchor on.\n *\n * Anchoring on the whole page stack is wrong: its height is *affine* in zoom, not\n * proportional. Every section contributes a header and spacer that stay a fixed pixel size,\n * so the stack measures `H(z) = naturalTotal * z + chromeTotal`. `zoomFocalScrollDelta` maps a\n * point by the ratio of before/after heights, which only holds for a uniformly scaled box —\n * against the stack it drifts by the accumulated chrome (measured: ~64px going 122% → 200%,\n * and worse the deeper the target sits).\n *\n * An individual sheet *is* uniformly scaled (`transform: scale()`), so anchoring on the sheet\n * under the pointer makes the mapping exact. Falls back to the nearest sheet when the pointer\n * sits in the gutter between them.\n *\n * @param {ZoomFocalRect[]} rects\n * @param {number} clientX\n * @param {number} clientY\n * @returns {number} index into `rects`, or -1 when there is nothing to anchor on\n */\nexport function pickZoomFocalAnchor(rects, clientX, clientY) {\n let nearest = -1;\n let nearestDistance = Infinity;\n for (let index = 0; index < rects.length; index += 1) {\n const rect = rects[index];\n if (rect.width <= 0 || rect.height <= 0) continue;\n const inside =\n clientX >= rect.left &&\n clientX <= rect.left + rect.width &&\n clientY >= rect.top &&\n clientY <= rect.top + rect.height;\n if (inside) return index;\n const dx = clientX - (rect.left + rect.width / 2);\n const dy = clientY - (rect.top + rect.height / 2);\n const distance = dx * dx + dy * dy;\n if (distance < nearestDistance) {\n nearestDistance = distance;\n nearest = index;\n }\n }\n return nearest;\n}\n\n/**\n * Whether a computed `overflow-x` / `overflow-y` value declares a scroll container.\n *\n * Keyed off the *declared* value rather than `scrollHeight > clientHeight`: an element that\n * is not scrollable yet still becomes the scroller once zoom grows the content, so probing\n * current scrollability picks the wrong element and the focal correction lands nowhere.\n *\n * @param {string} value\n * @returns {boolean}\n */\nexport function isScrollableOverflow(value) {\n return value === 'auto' || value === 'scroll' || value === 'overlay';\n}\n","import * as React from \"react\"\nimport { useState, useRef, useEffect, useCallback, createContext, useContext } from \"react\"\nimport { flushSync } from \"react-dom\"\nimport { Button } from \"../../ui/button\"\nimport { ZoomIn, ZoomOut, ChevronDown, UnfoldVertical, UnfoldHorizontal, Maximize } from \"lucide-react\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n DropdownMenuSeparator,\n} from \"../../ui/dropdown-menu\"\nimport { useShouldHideUI } from \"../interactive-mode-context\"\nimport { useShellTranslation } from \"../../i18n/locale-context\"\nimport {\n calculateFitZoom,\n fitModeFromDefaultZoomMode,\n resolveFitAvailableSpace,\n resolveFitPaneHeight,\n resolveFitUnitDimensions,\n} from \"./zoom-fit-core\"\nimport {\n isScrollableOverflow,\n pickZoomFocalAnchor,\n resolveZoomFocalPoint,\n snapshotZoomFocalRect,\n zoomFocalScrollDelta,\n} from \"./zoom-focal-core\"\nimport \"./section-page-resizer.css\"\n\n/** The element scrolled on each axis when correcting a focal zoom. */\ninterface ScrollTargets {\n x: Element | null\n y: Element | null\n}\n\n/**\n * Pan-viewport geometry is applied inline rather than from `section-page-resizer.css`.\n *\n * These declarations are load-bearing, not cosmetic: without the pane's `height`/`overflow`\n * the element becomes a plain block that reports its entire content height, and fit-to-height\n * then divides by a viewport many times too tall. Consumers do not always end up with the\n * component stylesheet — Template Studio renders the editor in an iframe whose document never\n * received it — so correctness cannot depend on it. The matching CSS rules remain for styling\n * parity; inline styles win over them either way.\n */\nconst PANE_GUTTER_X = 24\nconst PANE_GUTTER_BOTTOM = 64\n\n/** Upper bound on how long the initial fit may keep the sheets hidden. */\nconst INITIAL_FIT_REVEAL_TIMEOUT_MS = 1000\n\nconst PANE_CONTENT_STYLE: React.CSSProperties = {\n // Auto margins centre the stack while it fits and collapse to 0 once it overflows, which is\n // what keeps both edges reachable. Padding sits on the content box so `scrollWidth` counts\n // the right-hand gutter.\n width: \"max-content\",\n margin: \"auto\",\n padding: `0 ${PANE_GUTTER_X}px ${PANE_GUTTER_BOTTOM}px`,\n overflowAnchor: \"none\",\n}\n\n/**\n * Resolve the scroller per axis, keyed off declared overflow.\n *\n * Only used in `scrollMode=\"document\"`. Testing `scrollHeight > clientHeight` instead would\n * skip an `overflow: auto` ancestor that is not scrollable *yet* but becomes the scroller as\n * soon as zoom grows the content — sending the correction to the wrong element. Axes resolve\n * independently because a host may scroll X and Y on different ancestors.\n */\nfunction resolveScrollTargets(from: HTMLElement | null): ScrollTargets {\n let node: HTMLElement | null = from\n let x: Element | null = null\n let y: Element | null = null\n while (node && node !== document.documentElement) {\n const style = window.getComputedStyle(node)\n if (!x && isScrollableOverflow(style.overflowX)) x = node\n if (!y && isScrollableOverflow(style.overflowY)) y = node\n if (x && y) return { x, y }\n node = node.parentElement\n }\n const root = document.scrollingElement\n return { x: x ?? root, y: y ?? root }\n}\n\n/**\n * Vertical space the host reserves around the editor, so the pane can fill exactly the rest\n * of the viewport.\n *\n * The top inset is just the container's offset. The bottom inset has to be summed from the\n * ancestors' own bottom insets rather than measured directly: a host sized with `h-full`\n * against an auto-height root (Storybook's fullscreen wrapper) is circular — its height is\n * whatever the pane makes it — so reading its box would just echo the pane back. Padding and\n * borders, unlike heights, are stable under that loop, which makes this converge.\n */\nfunction measureHostInset(container: HTMLElement): number {\n const top = Math.max(container.getBoundingClientRect().top, 0)\n let bottom = 0\n let node: HTMLElement | null = container.parentElement\n while (node && node !== document.documentElement) {\n const style = window.getComputedStyle(node)\n if (style.display !== \"contents\") {\n bottom +=\n (Number.parseFloat(style.paddingBottom) || 0) +\n (Number.parseFloat(style.borderBottomWidth) || 0) +\n Math.max(Number.parseFloat(style.marginBottom) || 0, 0)\n }\n node = node.parentElement\n }\n return top + bottom\n}\n\n/**\n * Vertical space `Section` adds around the scaled sheet (header + reserved spacer).\n *\n * Both heights are read from rendered rects — the sheet's rect already includes its\n * `scale()` — so this never needs the current zoom. Deriving the scaled height from state\n * instead would read a zoom that the ResizeObserver/rAF path can observe before React's\n * passive effects have committed it, making the subtraction go negative and silently\n * report zero chrome.\n */\nfunction measureSectionChrome(content: HTMLElement): number {\n const section = content.querySelector(\"[data-section-content]\")\n const wrapper = section?.closest<HTMLElement>('[class*=\"group/section\"]')\n if (!section || !wrapper) return 0\n const scaledSheetHeight = section.getBoundingClientRect().height\n if (!(scaledSheetHeight > 0)) return 0\n return Math.max(wrapper.getBoundingClientRect().height - scaledSheetHeight, 0)\n}\n\n// Context for sharing zoom state across all sections\ninterface ZoomContextType {\n zoom: number\n scaleValue: number\n hideUI: boolean\n}\n\nconst ZoomContext = createContext<ZoomContextType>({ zoom: 100, scaleValue: 1, hideUI: false })\n\ninterface SectionPageResizerProps {\n children: React.ReactNode\n className?: string\n defaultZoom?: number\n minZoom?: number\n maxZoom?: number\n onAddPage?: () => void\n menuItems?: React.ReactNode\n hideUI?: boolean\n preview?: PreviewMode\n /** Initial fit preference. Subsequent prop changes do not override user zoom input. */\n defaultZoomMode?: DefaultZoomMode\n /**\n * Where the editor scrolls. `\"pane\"` (default) gives the editor its own pan viewport so a\n * zoomed-in page is reachable on both axes. `\"document\"` restores the legacy behavior of\n * riding the nearest ancestor scroller — use it when the host already provides one.\n */\n scrollMode?: ScrollMode\n}\n\nexport type PreviewMode = \"single_page\" | \"two_pages\"\nexport type DefaultZoomMode = \"manual\" | \"fit-width\" | \"fit-height\" | \"fit-page\"\nexport type ScrollMode = \"pane\" | \"document\"\n\ninterface TwoPageSectionProps {\n children: React.ReactNode\n /** \"spread\" = two pages side by side, \"left\" = single page on left, \"right\" = single page on right */\n layout?: \"spread\" | \"left\" | \"right\"\n pageItemId?: string\n}\n\nexport function TwoPageSection({ children, layout = \"spread\", pageItemId }: TwoPageSectionProps) {\n const { scaleValue } = useContext(ZoomContext)\n const pairRef = useRef<HTMLDivElement>(null)\n\n // Update pair width based on scaled content dimensions\n useEffect(() => {\n if (!pairRef.current) return\n\n const updatePairWidth = () => {\n const sections = pairRef.current?.querySelectorAll('[data-section-content]')\n if (!sections?.length) return\n\n // Sum natural widths of all pages in this pair\n const totalNaturalWidth = Array.from(sections).reduce((sum, section) => {\n const width = Number.parseInt(section.getAttribute('data-natural-width') || '0')\n return sum + width\n }, 0)\n\n if (totalNaturalWidth > 0) {\n const scaledWidth = totalNaturalWidth * scaleValue\n pairRef.current?.style.setProperty('--uhuu-group-pair-width', `${scaledWidth}px`)\n }\n }\n\n updatePairWidth()\n\n const resizeObserver = new ResizeObserver(updatePairWidth)\n const sections = pairRef.current.querySelectorAll('[data-section-content]')\n sections.forEach((section) => resizeObserver.observe(section))\n\n return () => resizeObserver.disconnect()\n }, [children, scaleValue])\n\n return (\n <div\n ref={pairRef}\n className={`two-pages-pair two-pages-pair--${layout}`}\n data-page-item-id={pageItemId}\n >\n {children}\n </div>\n )\n}\n\ninterface SectionProps {\n children: React.ReactNode\n title: string\n className?: string\n controls?: React.ReactNode\n origin?: \"left\" | \"right\" | \"center\"\n}\n\ntype FitMode = \"none\" | \"width\" | \"height\" | \"both\"\n\ntype FitDimensions = { width: number; height: number }\n\nfunction naturalDimensions(section: Element): FitDimensions | null {\n const width = Number.parseFloat(section.getAttribute(\"data-natural-width\") || \"0\")\n const height = Number.parseFloat(section.getAttribute(\"data-natural-height\") || \"0\")\n return width > 0 && height > 0 ? { width, height } : null\n}\n\n/**\n * Fit targets the visible unit users expect on load:\n * - facing mode → first `.two-pages-pair`\n * - single-page mode → first sheet only (not the sum of every stacked page)\n */\nfunction getFitDimensions(content: HTMLElement, preview: PreviewMode): FitDimensions | null {\n const scope = preview === \"two_pages\"\n ? content.querySelector(\".two-pages-pair\")\n : content\n if (!scope) return null\n\n const sections = preview === \"two_pages\"\n ? Array.from(scope.querySelectorAll(\"[data-section-content]\"))\n : (() => {\n const first = scope.querySelector(\"[data-section-content]\")\n return first ? [first] : []\n })()\n if (!sections.length) return null\n\n const dimensions = sections\n .map(naturalDimensions)\n .filter((value): value is FitDimensions => value !== null)\n return resolveFitUnitDimensions(preview, dimensions)\n}\n\n// Individual Section Component\nexport function Section({ children, title, className = \"\", controls, origin = \"center\" }: SectionProps) {\n const { scaleValue, hideUI } = useContext(ZoomContext)\n const contentRef = useRef<HTMLDivElement>(null)\n const [contentHeight, setContentHeight] = useState<number>(0)\n const [contentWidth, setContentWidth] = useState<number>(0)\n\n // Calculate and update content dimensions\n useEffect(() => {\n if (contentRef.current) {\n const updateDimensions = () => {\n const element = contentRef.current\n if (element) {\n const originalTransform = element.style.transform\n element.style.transform = \"scale(1)\"\n\n const naturalHeight = element.scrollHeight\n const naturalWidth = element.scrollWidth\n\n element.style.transform = originalTransform\n\n setContentHeight(naturalHeight)\n setContentWidth(naturalWidth)\n }\n }\n\n updateDimensions()\n\n const resizeObserver = new ResizeObserver(updateDimensions)\n resizeObserver.observe(contentRef.current)\n\n return () => {\n resizeObserver.disconnect()\n }\n }\n }, [children])\n\n const scaledHeight = contentHeight * scaleValue\n const scaledWidth = Math.max(contentWidth * scaleValue, 150)\n \n // Align content based on transform origin (left/right for spreads, center for single pages)\n const alignmentMap = {\n left: { justify: \"justify-start\", origin: \"top left\" },\n right: { justify: \"justify-end\", origin: \"top right\" },\n center: { justify: \"justify-center\", origin: \"top center\" },\n }\n const { justify: contentAlignClass, origin: transformOrigin } = alignmentMap[origin]\n\n // If hiding UI, render children directly without controls or scaling\n if (hideUI) {\n return <div className={className}>{children}</div>\n }\n\n return (\n <div \n className={`group/section ${className}`}\n style={{\n width: `${scaledWidth}px`,\n minWidth: \"150px\",\n }}\n >\n {/* Section Header */}\n <div>\n {controls ?? (\n <div className=\"px-4 py-2 border-b border-gray-200\">\n <div className=\"text-sm font-medium text-gray-700\">{title} Controls</div>\n </div>\n )}\n </div>\n\n {/* Section Content - Scaled with dynamic height */}\n <div\n className=\"pt-1\"\n style={{\n height: scaledHeight > 0 ? `${scaledHeight + 32}px` : \"auto\",\n minHeight: \"100px\",\n }}\n >\n <div className={`flex items-start ${contentAlignClass}`}>\n <div\n ref={contentRef}\n data-section-content\n data-natural-width={contentWidth}\n data-natural-height={contentHeight}\n style={{\n transform: `scale(${scaleValue})`,\n transformOrigin,\n }}\n >\n {children}\n </div>\n </div>\n </div>\n </div>\n )\n}\n\n// Main Container with Controls\nexport default function SectionPageResizer({\n children,\n className = \"\",\n defaultZoom = 100,\n minZoom = 25,\n maxZoom = 200,\n onAddPage,\n menuItems,\n hideUI: hideUIProp,\n preview = \"single_page\",\n defaultZoomMode = \"manual\",\n scrollMode = \"pane\",\n}: SectionPageResizerProps) {\n const shouldHideUI = useShouldHideUI()\n const hideUI = hideUIProp ?? shouldHideUI\n const { t } = useShellTranslation()\n\n const [zoom, setZoom] = useState(defaultZoom)\n const [fitMode, setFitMode] = useState<FitMode>(() => fitModeFromDefaultZoomMode(defaultZoomMode))\n /**\n * Whether the sheets are still waiting for the *initial* fit.\n *\n * A starting fit mode cannot resolve during the first commit: `Section` publishes its natural\n * size from an effect, so the sheets are unmeasured until a later frame and fit has nothing to\n * divide by. Painting `defaultZoom` in the meantime shows a wrong — usually cropped — page for\n * a frame or two before it snaps to the fitted size. Holding the stack at `visibility: hidden`\n * (which still lays out, so the measurements fit depends on keep arriving) until the first fit\n * lands makes the document open at its fitted zoom instead of flashing.\n */\n const [awaitingInitialFit, setAwaitingInitialFit] = useState(\n () => fitModeFromDefaultZoomMode(defaultZoomMode) !== \"none\",\n )\n const [paneInset, setPaneInset] = useState(0)\n const containerRef = useRef<HTMLDivElement>(null)\n const paneRef = useRef<HTMLDivElement>(null)\n const paneContentRef = useRef<HTMLDivElement>(null)\n const contentRef = useRef<HTMLDivElement>(null)\n const zoomRef = useRef(zoom)\n\n useEffect(() => {\n zoomRef.current = zoom\n }, [zoom])\n\n /** The scrollers the focal correction drives. In pane mode both axes are the pane itself. */\n const resolveScrollers = useCallback((): ScrollTargets => {\n if (scrollMode === \"pane\" && paneRef.current) {\n return { x: paneRef.current, y: paneRef.current }\n }\n return resolveScrollTargets(containerRef.current)\n }, [scrollMode])\n\n /**\n * Single entry point for every zoom change — wheel, ± buttons and the % input all route\n * here so the content point at (focalClientX, focalClientY) stays put. Previously only the\n * wheel path corrected scroll, so the toolbar controls drifted the viewport.\n */\n const applyZoom = useCallback((nextZoom: number, focalClientX: number, focalClientY: number) => {\n const clamped = Math.min(Math.max(nextZoom, minZoom), maxZoom)\n const content = contentRef.current\n if (!content) {\n setZoom(clamped)\n setFitMode(\"none\")\n return\n }\n\n const scrollers = resolveScrollers()\n // Anchor on the sheet under the pointer, not the whole stack: only the sheet is uniformly\n // scaled, so mapping a point by the before/after rect ratio is exact for it.\n const sheets = Array.from(content.querySelectorAll<HTMLElement>(\"[data-section-content]\"))\n const anchorIndex = pickZoomFocalAnchor(\n sheets.map((sheet) => snapshotZoomFocalRect(sheet.getBoundingClientRect())),\n focalClientX,\n focalClientY,\n )\n const anchor: HTMLElement = anchorIndex >= 0 ? sheets[anchorIndex] : content\n\n const before = snapshotZoomFocalRect(anchor.getBoundingClientRect())\n const focal = resolveZoomFocalPoint(before, focalClientX, focalClientY)\n\n // flushSync so section layout heights commit before we measure the post-zoom rect.\n flushSync(() => {\n setZoom(clamped)\n setFitMode(\"none\")\n })\n\n // Re-measuring `after` each pass makes this idempotent: once the point is anchored the\n // delta is zero, so the follow-up frame only catches layout that settled late.\n const correct = () => {\n const after = snapshotZoomFocalRect(anchor.getBoundingClientRect())\n const { deltaLeft, deltaTop } = zoomFocalScrollDelta(before, after, focal.clientX, focal.clientY)\n if (deltaLeft !== 0 && scrollers.x) scrollers.x.scrollLeft += deltaLeft\n if (deltaTop !== 0 && scrollers.y) scrollers.y.scrollTop += deltaTop\n }\n correct()\n window.requestAnimationFrame(correct)\n }, [maxZoom, minZoom, resolveScrollers])\n\n /** Toolbar zoom anchors on the middle of the visible pane. */\n const viewportFocalPoint = useCallback(() => {\n const host = (scrollMode === \"pane\" ? paneRef.current : containerRef.current)\n const rect = host?.getBoundingClientRect()\n if (!rect) return { clientX: 0, clientY: 0 }\n return { clientX: rect.left + rect.width / 2, clientY: rect.top + rect.height / 2 }\n }, [scrollMode])\n\n const recalculateFit = useCallback(() => {\n const content = contentRef.current\n if (fitMode === \"none\" || !content) return\n\n const dimensions = getFitDimensions(content, preview)\n if (!dimensions) return\n\n // Measure the pane the sheets actually live in, and read the gutters off the rendered\n // content box, so fit stays exact instead of guessing fixed insets.\n const pane = scrollMode === \"pane\" ? paneRef.current : containerRef.current\n if (!pane) return\n const paneBox = pane.getBoundingClientRect()\n // Measure against the pane's own document: the editor is often iframed, and the host\n // window's viewport says nothing about the space the sheets actually have.\n const paneView = pane.ownerDocument.defaultView ?? window\n const viewportHeight =\n paneView.visualViewport?.height\n ?? pane.ownerDocument.documentElement.clientHeight\n ?? paneView.innerHeight\n const paneWidth = pane.clientWidth || paneBox.width\n // In document mode the container is as tall as its content, so fall back to the viewport.\n const paneHeight = scrollMode === \"pane\"\n ? resolveFitPaneHeight({\n paneClientHeight: pane.clientHeight || paneBox.height,\n paneTop: paneBox.top,\n viewportHeight,\n })\n : viewportHeight - Math.max(paneBox.top, 0)\n\n const paneContentStyle = paneContentRef.current ? window.getComputedStyle(paneContentRef.current) : null\n const paddingX = paneContentStyle\n ? Number.parseFloat(paneContentStyle.paddingLeft) + Number.parseFloat(paneContentStyle.paddingRight)\n : 0\n const paddingY = paneContentStyle\n ? Number.parseFloat(paneContentStyle.paddingTop) + Number.parseFloat(paneContentStyle.paddingBottom)\n : 0\n\n const { availableWidth, availableHeight } = resolveFitAvailableSpace({\n paneWidth,\n paneHeight,\n paddingX,\n paddingY,\n chromeHeight: measureSectionChrome(content),\n })\n\n const nextZoom = calculateFitZoom({\n mode: fitMode,\n contentWidth: dimensions.width,\n contentHeight: dimensions.height,\n availableWidth,\n availableHeight,\n minZoom,\n maxZoom,\n })\n\n if (nextZoom === null) return\n setZoom((currentZoom) => Math.abs(currentZoom - nextZoom) < 0.01 ? currentZoom : nextZoom)\n setAwaitingInitialFit(false)\n }, [fitMode, maxZoom, minZoom, preview, scrollMode])\n\n // Handle fit mode changes\n const handleFitMode = (mode: FitMode) => {\n setFitMode(mode)\n }\n\n // Never let a fit that cannot resolve hide the document: reveal on the next macrotask if the\n // sheets are still unmeasured (an empty editor, or a host that renders it detached), and as\n // soon as any manual zoom clears fit mode.\n useEffect(() => {\n if (!awaitingInitialFit) return\n if (fitMode === \"none\") {\n setAwaitingInitialFit(false)\n return\n }\n const timer = window.setTimeout(() => setAwaitingInitialFit(false), INITIAL_FIT_REVEAL_TIMEOUT_MS)\n return () => window.clearTimeout(timer)\n }, [awaitingInitialFit, fitMode])\n\n // Zoom in/out buttons with 25% steps\n const zoomIn = () => {\n const focal = viewportFocalPoint()\n applyZoom(zoom + 25, focal.clientX, focal.clientY)\n }\n\n const zoomOut = () => {\n const focal = viewportFocalPoint()\n applyZoom(zoom - 25, focal.clientX, focal.clientY)\n }\n\n // Fit starts as soon as dimensions exist, then follows the active document's\n // viewport and natural sheet size until a manual zoom choice clears fitMode.\n useEffect(() => {\n if (fitMode === \"none\" || !containerRef.current || !contentRef.current) return\n\n let frame = 0\n const scheduleFit = () => {\n window.cancelAnimationFrame(frame)\n frame = window.requestAnimationFrame(recalculateFit)\n }\n const resizeObserver = new ResizeObserver(scheduleFit)\n resizeObserver.observe(containerRef.current)\n if (paneRef.current) resizeObserver.observe(paneRef.current)\n // The content stack has to be observed explicitly: sheets report their natural size a\n // frame after mount, and in pane mode the container/pane are fixed height, so neither\n // resizes when that measurement lands. Without this, fit never runs on first paint.\n resizeObserver.observe(contentRef.current)\n const observeSections = () => {\n contentRef.current?.querySelectorAll(\"[data-section-content]\").forEach((section) => {\n resizeObserver.observe(section)\n })\n }\n observeSections()\n const mutationObserver = new MutationObserver(() => {\n observeSections()\n scheduleFit()\n })\n mutationObserver.observe(contentRef.current, { childList: true, subtree: true })\n\n window.addEventListener(\"resize\", scheduleFit)\n window.visualViewport?.addEventListener(\"resize\", scheduleFit)\n scheduleFit()\n return () => {\n window.cancelAnimationFrame(frame)\n resizeObserver.disconnect()\n mutationObserver.disconnect()\n window.removeEventListener(\"resize\", scheduleFit)\n window.visualViewport?.removeEventListener(\"resize\", scheduleFit)\n }\n }, [fitMode, recalculateFit])\n\n // The pane fills the viewport minus whatever the host reserves above and below it, so the\n // editor never pushes a second (document-level) scrollbar behind its own.\n useEffect(() => {\n if (hideUI || scrollMode !== \"pane\") return\n const container = containerRef.current\n if (!container) return\n\n const syncPaneInset = () => {\n const inset = measureHostInset(container)\n setPaneInset((current) => (Math.abs(current - inset) < 0.5 ? current : inset))\n }\n\n syncPaneInset()\n const resizeObserver = new ResizeObserver(syncPaneInset)\n resizeObserver.observe(container)\n window.addEventListener(\"resize\", syncPaneInset)\n window.visualViewport?.addEventListener(\"resize\", syncPaneInset)\n return () => {\n resizeObserver.disconnect()\n window.removeEventListener(\"resize\", syncPaneInset)\n window.visualViewport?.removeEventListener(\"resize\", syncPaneInset)\n }\n }, [hideUI, scrollMode])\n\n // Ctrl/Cmd-wheel and trackpad pinch (wheel + ctrlKey) zoom; plain wheel still scrolls the pane.\n // Match Design canvas: proportional ~0.3%/px, rAF-batched, clears fit mode, zoom-to-cursor.\n useEffect(() => {\n if (hideUI) return\n\n let zoomFrameId: number | null = null\n let attachFrameId: number | null = null\n let pendingZoom: number | null = null\n let pendingFocal = { clientX: 0, clientY: 0 }\n let target: HTMLDivElement | null = null\n let cancelled = false\n\n const applyPendingZoom = () => {\n zoomFrameId = null\n const next = pendingZoom\n pendingZoom = null\n if (next === null) return\n applyZoom(next, pendingFocal.clientX, pendingFocal.clientY)\n }\n\n const handleWheel = (event: WheelEvent) => {\n if (!event.ctrlKey && !event.metaKey) return\n event.preventDefault()\n\n const lineSize = 16\n const pixelDelta =\n event.deltaMode === 1 ? event.deltaY * lineSize :\n event.deltaMode === 2 ? event.deltaY * lineSize * 32 :\n event.deltaY\n const base = pendingZoom ?? zoomRef.current\n const next = Math.min(Math.max(base * Math.pow(1.003, -pixelDelta), minZoom), maxZoom)\n pendingFocal = { clientX: event.clientX, clientY: event.clientY }\n if (next === base && pendingZoom === null) return\n pendingZoom = next\n if (zoomFrameId === null) zoomFrameId = window.requestAnimationFrame(applyPendingZoom)\n }\n\n const attach = () => {\n attachFrameId = null\n if (cancelled) return\n target = (scrollMode === \"pane\" ? paneRef.current : containerRef.current)\n if (!target) {\n attachFrameId = window.requestAnimationFrame(attach)\n return\n }\n target.addEventListener(\"wheel\", handleWheel, { passive: false })\n }\n attach()\n\n return () => {\n cancelled = true\n if (zoomFrameId !== null) window.cancelAnimationFrame(zoomFrameId)\n if (attachFrameId !== null) window.cancelAnimationFrame(attachFrameId)\n target?.removeEventListener(\"wheel\", handleWheel)\n }\n }, [applyZoom, hideUI, maxZoom, minZoom, scrollMode])\n\n const scaleValue = zoom / 100\n\n // If hiding UI, render children directly without any wrapper or controls\n if (hideUI) {\n return (\n <ZoomContext.Provider value={{ zoom: 100, scaleValue: 1, hideUI: true }}>\n <div className={className}>{children}</div>\n </ZoomContext.Provider>\n )\n }\n\n return (\n <ZoomContext.Provider value={{ zoom, scaleValue, hideUI: false }}>\n {/* `flex-1 min-h-0` so a host that is itself a flex column hands the editor a definite\n height — that is what lets the pane's `max-height: 100%` clamp to the host box\n (including its padding) instead of overflowing it by the bottom inset. Inert when\n the host is a plain block, where the pane falls back to viewport height. */}\n <div ref={containerRef} className={`flex flex-col flex-1 min-h-0 ${className}`}>\n {/* Global Controls - Unscaled */}\n <div data-uhuu-editor className=\"fixed right-4 bottom-4 z-50 flex items-center gap-1.5 px-2.5 py-1.5 bg-white/90 backdrop-blur-md border border-gray-200/60 rounded-lg shadow-sm\">\n {menuItems}\n <div className=\"h-4 w-px bg-gray-200 mx-0.5\" />\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"sm\" title={t('zoom.menu')} className=\"text-xs font-medium text-gray-700 hover:bg-gray-100/80 h-7 px-2.5\">\n {Math.round(zoom)}%\n <ChevronDown className=\"w-3 h-3 ml-1 opacity-60\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent className=\"w-52 p-1.5\" align=\"end\">\n <DropdownMenuItem\n onClick={() => handleFitMode(\"width\")}\n className={`cursor-pointer flex items-center ${fitMode === \"width\" ? \"bg-gray-100\" : \"\"}`}\n >\n <UnfoldHorizontal className=\"w-4 h-4 mr-2\" />\n <span>{t('zoom.fitWidth')}</span>\n </DropdownMenuItem>\n <DropdownMenuItem\n onClick={() => handleFitMode(\"height\")}\n className={`cursor-pointer flex items-center ${fitMode === \"height\" ? \"bg-gray-100\" : \"\"}`}\n >\n <UnfoldVertical className=\"w-4 h-4 mr-2\" />\n <span>{t('zoom.fitHeight')}</span>\n </DropdownMenuItem>\n <DropdownMenuItem\n onClick={() => handleFitMode(\"both\")}\n className={`cursor-pointer flex items-center ${fitMode === \"both\" ? \"bg-gray-100\" : \"\"}`}\n >\n <Maximize className=\"w-4 h-4 mr-2\" />\n <span>{t('zoom.fitPage')}</span>\n </DropdownMenuItem>\n <DropdownMenuSeparator className=\"my-1.5\" />\n \n {/* Zoom Controls - Compact inline layout */}\n <div className=\"flex items-center justify-center gap-2 px-3 py-2.5\" onClick={(e) => e.stopPropagation()}>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation()\n zoomOut()\n }}\n disabled={zoom <= minZoom}\n className=\"h-8 w-8 p-0 hover:bg-gray-100 disabled:opacity-40\"\n title={t('zoom.zoomOut')}\n >\n <ZoomOut className=\"w-4 h-4\" />\n </Button>\n \n <div className=\"relative\">\n <input\n type=\"number\"\n value={Math.round(zoom)}\n onChange={(e) => {\n const value = Number.parseInt(e.target.value)\n if (!isNaN(value)) {\n const focal = viewportFocalPoint()\n applyZoom(value, focal.clientX, focal.clientY)\n }\n }}\n onFocus={(e) => e.target.select()}\n className=\"w-20 pr-6 text-center text-sm text-gray-700 bg-white border border-gray-300 rounded px-2 py-1.5 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all\"\n min={minZoom}\n max={maxZoom}\n />\n <span className=\"absolute right-2 top-1/2 -translate-y-1/2 text-xs text-gray-400 pointer-events-none\">%</span>\n </div>\n \n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation()\n zoomIn()\n }}\n disabled={zoom >= maxZoom}\n className=\"h-8 w-8 p-0 hover:bg-gray-100 disabled:opacity-40\"\n title={t('zoom.zoomIn')}\n >\n <ZoomIn className=\"w-4 h-4\" />\n </Button>\n </div>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n\n {/* Pan viewport. Owning the scroller is what makes a zoomed-in page reachable on\n both axes — centering against the document split overflow to both sides and\n `scrollLeft` cannot go negative, so the left half was unreachable. */}\n <div\n ref={paneRef}\n className={scrollMode === \"pane\" ? \"uhuu-zoom-pane\" : undefined}\n style={scrollMode === \"pane\" ? {\n height: `calc(100dvh - ${paneInset}px)`,\n maxHeight: \"100%\",\n overflow: \"auto\",\n overscrollBehavior: \"contain\",\n } : undefined}\n >\n <div\n ref={paneContentRef}\n className=\"uhuu-zoom-pane-content\"\n style={awaitingInitialFit\n ? { ...PANE_CONTENT_STYLE, visibility: \"hidden\" }\n : PANE_CONTENT_STYLE}\n >\n <div ref={contentRef} className={preview === \"two_pages\" ? \"group_two_pages\" : \"flex flex-col items-center\"}>\n {children}\n </div>\n </div>\n </div>\n </div>\n </ZoomContext.Provider>\n )\n}\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\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 { createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { DismissableLayer, useDismissableLayerSurface } from \"@radix-ui/react-dismissable-layer\";\nimport {\n FocusScope,\n FocusScopeBranchProvider,\n useFocusScopeBranchRegistry\n} 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 { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { hideOthers } from \"aria-hidden\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DIALOG_NAME = \"Dialog\";\nvar [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME);\nvar [DialogProvider, useDialogContext] = createDialogContext(DIALOG_NAME);\nvar Dialog = /* @__PURE__ */ __name((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 { nodes: branchNodes, registry: branchRegistry } = useFocusScopeBranchRegistry();\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: DIALOG_NAME\n });\n const [titleCount, setTitleCount] = React.useState(0);\n const [descriptionCount, setDescriptionCount] = React.useState(0);\n return /* @__PURE__ */ jsx(\n DialogProvider,\n {\n scope: __scopeDialog,\n triggerRef,\n contentRef,\n contentId: useId(),\n titleId: useId(),\n descriptionId: useId(),\n titlePresent: titleCount > 0,\n descriptionPresent: descriptionCount > 0,\n setTitleCount,\n setDescriptionCount,\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n modal,\n branchNodes,\n branchRegistry,\n children\n }\n );\n}, \"Dialog\");\nvar TRIGGER_NAME = \"DialogTrigger\";\nvar DialogTrigger = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function DialogTrigger2(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.open ? context.contentId : void 0,\n \"data-state\": getState(context.open),\n ...triggerProps,\n ref: composedTriggerRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n }, \"DialogTrigger\")\n);\nvar PORTAL_NAME = \"DialogPortal\";\nvar [PortalProvider, usePortalContext] = createDialogContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar DialogPortal = /* @__PURE__ */ __name((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}, \"DialogPortal\");\nvar OVERLAY_NAME = \"DialogOverlay\";\nvar DialogOverlay = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function DialogOverlay2(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 }, \"DialogOverlay\")\n);\nvar Slot = createSlot(\"DialogOverlay.RemoveScroll\");\nvar DialogOverlayImpl = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function DialogOverlayImpl2(props, forwardedRef) {\n const { __scopeDialog, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, __scopeDialog);\n const registerDismissableSurface = useDismissableLayerSurface();\n const composedRefs = useComposedRefs(forwardedRef, registerDismissableSurface);\n return (\n // Make sure `Content` is scrollable even when it doesn't live inside\n // `RemoveScroll` (eg. when `Overlay` and `Content` are siblings). Nested\n // layers are registered as branches and added as shards so they remain\n // scrollable too. See https://github.com/radix-ui/primitives/issues/3423\n /* @__PURE__ */ jsx(\n RemoveScroll,\n {\n as: Slot,\n allowPinchZoom: true,\n shards: React.useMemo(\n () => [context.contentRef, ...context.branchNodes.map((node) => ({ current: node }))],\n [context.contentRef, context.branchNodes]\n ),\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(context.open),\n ...overlayProps,\n ref: composedRefs,\n style: { pointerEvents: \"auto\", ...overlayProps.style }\n }\n )\n }\n )\n );\n }, \"DialogOverlayImpl\")\n);\nvar CONTENT_NAME = \"DialogContent\";\nvar DialogContent = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function DialogContent2(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 }, \"DialogContent\")\n);\nvar DialogContentModal = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function DialogContentModal2(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: context.open,\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 }, \"DialogContentModal\")\n);\nvar DialogContentNonModal = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function DialogContentNonModal2(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 }, \"DialogContentNonModal\")\n);\nvar DialogContentImpl = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function DialogContentImpl2(props, forwardedRef) {\n const {\n __scopeDialog,\n trapFocus,\n onOpenAutoFocus,\n onCloseAutoFocus,\n \"aria-describedby\": ariaDescribedby,\n children,\n ...contentProps\n } = props;\n const context = useDialogContext(CONTENT_NAME, __scopeDialog);\n useFocusGuards();\n return /* @__PURE__ */ jsx(FocusScopeBranchProvider, { registry: context.branchRegistry, children: /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n loop: true,\n trapped: trapFocus,\n branches: context.branchNodes,\n onMountAutoFocus: onOpenAutoFocus,\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n role: \"dialog\",\n id: context.contentId,\n \"aria-labelledby\": context.titlePresent ? context.titleId : void 0,\n \"aria-describedby\": context.descriptionPresent ? concatAriaDescribedby(ariaDescribedby, context.descriptionId) : ariaDescribedby,\n \"data-state\": getState(context.open),\n ...contentProps,\n ref: forwardedRef,\n deferPointerDownOutside: true,\n onDismiss: () => context.onOpenChange(false),\n children\n }\n )\n }\n ) });\n }, \"DialogContentImpl\")\n);\nvar DialogTitle = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function DialogTitle2(props, forwardedRef) {\n const { __scopeDialog, ...titleProps } = props;\n const context = useDialogContext(\"DialogTitle\", __scopeDialog);\n const { setTitleCount } = context;\n useLayoutEffect(() => {\n setTitleCount((count) => count + 1);\n return () => setTitleCount((count) => count - 1);\n }, [setTitleCount]);\n return /* @__PURE__ */ jsx(Primitive.h2, { id: context.titleId, ...titleProps, ref: forwardedRef });\n }, \"DialogTitle\")\n);\nvar DialogDescription = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function DialogDescription2(props, forwardedRef) {\n const { __scopeDialog, ...descriptionProps } = props;\n const context = useDialogContext(\"DialogDescription\", __scopeDialog);\n const { setDescriptionCount } = context;\n useLayoutEffect(() => {\n setDescriptionCount((count) => count + 1);\n return () => setDescriptionCount((count) => count - 1);\n }, [setDescriptionCount]);\n return /* @__PURE__ */ jsx(Primitive.p, { id: context.descriptionId, ...descriptionProps, ref: forwardedRef });\n }, \"DialogDescription\")\n);\nvar CLOSE_NAME = \"DialogClose\";\nvar DialogClose = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function DialogClose2(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 }, \"DialogClose\")\n);\nvar WarningProvider = /* @__PURE__ */ __name((props) => {\n return props.children;\n}, \"WarningProvider\");\nfunction concatAriaDescribedby(...values) {\n const ids = /* @__PURE__ */ new Set();\n for (const value of values) {\n if (typeof value !== \"string\") continue;\n for (const id of String(value).trim().split(/\\s+/)) {\n if (id) ids.add(id);\n }\n }\n return ids.size > 0 ? Array.from(ids).join(\" \") : void 0;\n}\n__name(concatAriaDescribedby, \"concatAriaDescribedby\");\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\n__name(getState, \"getState\");\nexport {\n DialogClose as Close,\n DialogContent as Content,\n DialogDescription as Description,\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n DialogOverlay as Overlay,\n DialogPortal as Portal,\n Dialog as Root,\n DialogTitle as Title,\n DialogTrigger as Trigger,\n WarningProvider,\n createDialogScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\"\nimport * as SheetPrimitive from \"@radix-ui/react-dialog\"\nimport { XIcon } from \"lucide-react\"\nimport { cn } from \"./cn\"\nimport { usePortalRoot } from \"../editor-shell/portal-root\"\nimport { useShellTranslation } from \"../i18n/locale-context\"\n\nconst Sheet = SheetPrimitive.Root\n\nconst SheetTrigger = SheetPrimitive.Trigger\n\nconst SheetClose = SheetPrimitive.Close\n\nconst SheetPortal = SheetPrimitive.Portal\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 className={cn(\n \"fixed inset-0 z-50 bg-black/50 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 ref={ref}\n />\n))\nSheetOverlay.displayName = SheetPrimitive.Overlay.displayName\n\ninterface SheetContentProps\n extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content> {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n}\n\nconst SheetContent = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Content>,\n SheetContentProps\n>(({ side = \"right\", className, children, ...props }, ref) => {\n const { portalContainer } = usePortalRoot();\n const closeLabel = useShellTranslation().t('dialog.close');\n\n return (\n <SheetPortal container={portalContainer || undefined}>\n <SheetOverlay />\n <SheetPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed z-50 gap-4 bg-white p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500\",\n side === \"top\" &&\n \"inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top\",\n side === \"bottom\" &&\n \"inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom\",\n side === \"left\" &&\n \"inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm\",\n side === \"right\" &&\n \"inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm\",\n className\n )}\n {...props}\n >\n {children}\n <SheetPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-white transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-gray-400 focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-gray-100\">\n <XIcon className=\"h-4 w-4\" />\n <span className=\"sr-only\">{closeLabel}</span>\n </SheetPrimitive.Close>\n </SheetPrimitive.Content>\n </SheetPortal>\n );\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-2 text-center sm: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 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-lg font-medium text-gray-900\", 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-sm text-gray-500\", 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\n","import * as React from 'react';\nimport { Lock } from 'lucide-react';\nimport { ReorderItem } from './page-group-utils';\nimport type { PageComponent } from './page-group-utils';\nimport { getPagePayload } from './template-data-provider';\nimport { resolveIntegrationForPage } from './integration-utils';\nimport PageSizeUtils from '../../utility/PageSizeUtils';\nimport type { ShellI18n } from '../../i18n/locale-context';\n\ninterface DefaultRenderThumbnailOptions {\n // PageComponent registry: map of pageId to React component\n pageComponents: { [pageId: string]: PageComponent };\n \n // Payload to pass to PageComponents\n payload?: any;\n \n // Page setup (same as Pagination setup prop) - supports format/orientation or explicit width/height in mm\n setup?: { width?: number; height?: number; [key: string]: any };\n \n // Optional: Custom thumbnail dimensions (height auto-derives from page aspect if omitted)\n thumbnailWidth?: number;\n thumbnailHeight?: number;\n\n // The shell's words and language (from useShellTranslation in the calling component)\n i18n: ShellI18n;\n}\n\n/**\n * Creates a default renderThumbnail function that renders actual PageComponents\n * instead of reference images. This ensures thumbnails accurately represent\n * the rendered page content.\n * \n * @internal - This is an internal utility, not part of the public API\n */\nexport function createDefaultRenderThumbnail(\n options: DefaultRenderThumbnailOptions\n): (item: ReorderItem, index: number, isDragging?: boolean) => React.ReactNode {\n const { \n pageComponents, \n payload, \n setup = { width: 210, height: 297 }, // Default A4 size in mm\n thumbnailWidth = 200, \n thumbnailHeight, \n i18n,\n } = options;\n const { t, localize } = i18n;\n\n // Resolve actual dimensions using PageSizeUtils so format/orientation are respected\n // (e.g. { format: 'A4', orientation: 'landscape' } correctly yields 297×210)\n const resolvedDimensions = PageSizeUtils.resolveDimensions(setup);\n const pageWidthMm = resolvedDimensions.width;\n const pageHeightMm = resolvedDimensions.height;\n const pageAspectRatio = pageWidthMm / pageHeightMm;\n\n // Derive thumbnail height from page aspect ratio if not provided\n const finalThumbnailWidth = thumbnailWidth;\n const finalThumbnailHeight = thumbnailHeight ?? Math.round(finalThumbnailWidth / pageAspectRatio);\n\n // Convert mm to pixels at 96dpi (1mm = 3.779527559px) for accurate scaling\n const pageWidthPx = pageWidthMm * 3.779527559;\n const pageHeightPx = pageHeightMm * 3.779527559;\n\n \n return (item: ReorderItem, index: number, isDragging?: boolean) => {\n const strictPosition = (item as any).strictPosition;\n const isLocked = strictPosition === 'start' || strictPosition === 'end';\n \n if (item.kind === 'group') {\n // Group thumbnail: show first page with group indicator\n const firstPageId = item.firstPageId as string | undefined;\n const firstPageComponentKey = item.firstPageComponentKey ?? firstPageId;\n const firstPagePayload = getPagePayload(payload, { id: firstPageId, componentKey: firstPageComponentKey });\n // Use component from item if available, otherwise fall back to pageComponents registry\n const FirstPageComponent = item.firstPageComponent || (firstPageComponentKey ? pageComponents[firstPageComponentKey] : null);\n \n // Resolve integration data for group (group pages use the group's integration)\n // For groups, instanceId is the group ID, so we can directly access it\n const integration = payload?.integrations?.[item.id]; \n \n return (\n <div \n className={`relative bg-white border transition-all ${\n isDragging \n ? 'border-blue-400 shadow-2xl scale-105' \n : isLocked\n ? 'border-gray-300 bg-gray-50'\n : 'border-gray-200 hover:border-gray-300 hover:shadow-lg'\n }`}\n style={{ width: `${finalThumbnailWidth}px`, height: `${finalThumbnailHeight}px` }}\n title={item.id}\n >\n {/* Render actual PageComponent */}\n {FirstPageComponent ? (\n <div \n className=\"w-full h-full flex items-center justify-center bg-gray-50 overflow-hidden relative pointer-events-none\"\n >\n <div \n style={{\n transform: `scale(${Math.min(finalThumbnailWidth / pageWidthPx, finalThumbnailHeight / pageHeightPx)})`,\n transformOrigin: 'center',\n }}\n >\n <div className=\"!shrink-0\" style={{ width: `${pageWidthPx}px`, height: `${pageHeightPx}px`, backgroundColor: 'white', pointerEvents: 'none' }}>\n <FirstPageComponent\n payload={payload}\n pageId={firstPageId}\n templateId={firstPageComponentKey}\n pagePayload={firstPagePayload}\n componentKey={firstPageComponentKey}\n integration={integration}\n parentGroup={item}\n />\n </div>\n </div>\n </div>\n ) : (\n <div className=\"w-full h-full flex items-center justify-center bg-gray-50 pointer-events-none\">\n <div className=\"text-center p-4\">\n <div className=\"text-sm font-medium text-gray-700\">{t('thumbnail.groupFallbackName', { id: item.id })}</div>\n <div className=\"text-xs text-gray-500 mt-1\">{firstPageId || t('thumbnail.noPreview')}</div>\n </div>\n </div>\n )}\n \n {/* Group indicator badge */}\n <div className=\"absolute top-2 right-2 px-2 py-1 bg-blue-600/80 backdrop-blur-sm text-white text-xs font-medium rounded shadow-lg pointer-events-none\">\n {t('thumbnail.groupBadge', { count: item.pageCount })}\n </div>\n \n {/* Lock indicator for strict position */}\n {isLocked && (\n <div className=\"absolute top-2 left-2 px-2 py-1 bg-gray-600/80 backdrop-blur-sm text-white text-xs font-medium rounded shadow-lg pointer-events-none flex items-center gap-1\">\n <Lock className=\"size-3\" />\n <span>{strictPosition === 'start' ? t('thumbnail.start') : t('thumbnail.end')}</span>\n </div>\n )}\n \n {/* Group info overlay */}\n <div className=\"absolute bottom-0 left-0 right-0 bg-black/40 backdrop-blur-sm p-3 pointer-events-none\">\n <div className=\"flex items-center justify-between gap-2 text-white\">\n <div className=\"flex-1 min-w-0\">\n <div className=\"text-sm font-medium truncate\">\n {localize(item.label) || item.id}\n </div>\n </div>\n </div>\n </div>\n \n {/* Drag indicator */}\n {isDragging && (\n <div className=\"absolute inset-0 flex items-center justify-center bg-blue-500/10 pointer-events-none\">\n <div className=\"text-blue-600 font-medium text-sm bg-white/90 px-3 py-1 rounded-full shadow-lg\">\n {t('thumbnail.draggingGroup')}\n </div>\n </div>\n )}\n </div>\n );\n } else {\n // Standalone page thumbnail\n const pageId = item.pageId as string | undefined;\n const pageComponentKey = item.pageComponentKey ?? pageId;\n const pagePayload = getPagePayload(payload, { id: pageId, componentKey: pageComponentKey });\n // Use component from item if available, otherwise fall back to pageComponents registry\n const PageComponent = item.pageComponent || (pageComponentKey ? pageComponents[pageComponentKey] : null);\n \n // Resolve integration data for standalone page\n const integration = pageId ? resolveIntegrationForPage(payload, { id: pageId }) : undefined;\n return (\n <div \n className={`relative bg-white border transition-all ${\n isDragging \n ? 'border-blue-400 shadow-2xl scale-105' \n : isLocked\n ? 'border-gray-300 bg-gray-50'\n : 'border-gray-200 hover:border-gray-300 hover:shadow-lg'\n }`}\n style={{ width: `${finalThumbnailWidth}px`, height: `${finalThumbnailHeight}px` }}\n title={item.pageId}\n >\n {/* Render actual PageComponent */}\n {PageComponent ? (\n <div \n className=\"w-full h-full flex items-center justify-center bg-gray-50 overflow-hidden relative pointer-events-none\"\n >\n <div \n className=\"flex items-center justify-center pointer-events-none\"\n style={{\n transform: `scale(${Math.min(finalThumbnailWidth / pageWidthPx, finalThumbnailHeight / pageHeightPx)})`,\n transformOrigin: 'center',\n }}\n >\n <div className=\"!shrink-0\" style={{ width: `${pageWidthPx}px`, height: `${pageHeightPx}px`, backgroundColor: 'white', pointerEvents: 'none' }}>\n <PageComponent \n payload={payload}\n pageId={pageId}\n templateId={pageComponentKey}\n pagePayload={pagePayload}\n componentKey={pageComponentKey}\n integration={integration}\n />\n </div>\n </div>\n </div>\n ) : (\n <div className=\"w-full h-full flex items-center justify-center bg-gray-50 pointer-events-none\">\n <div className=\"text-center p-4\">\n <div className=\"text-sm font-medium text-gray-700\">{t('page.fallbackName', { number: item.pageNum })}</div>\n <div className=\"text-xs text-gray-500 mt-1\">{pageId || t('thumbnail.noPreview')}</div>\n </div>\n </div>\n )}\n \n {/* Lock indicator for strict position */}\n {isLocked && (\n <div className=\"absolute top-2 left-2 px-2 py-1 bg-gray-600/80 backdrop-blur-sm text-white text-xs font-medium rounded shadow-lg pointer-events-none flex items-center gap-1\">\n <Lock className=\"size-3\" />\n <span>{strictPosition === 'start' ? t('thumbnail.start') : t('thumbnail.end')}</span>\n </div>\n )}\n \n {/* Page info overlay */}\n <div className=\"absolute bottom-0 left-0 right-0 bg-black/40 backdrop-blur-sm p-3 pointer-events-none\">\n <div className=\"flex items-center justify-between gap-2 text-white\">\n <div className=\"flex-1 min-w-0\">\n <div className=\"text-sm font-medium truncate\">\n {localize(item.pageLabel) || t('page.fallbackName', { number: item.pageNum })}\n </div>\n </div>\n </div>\n </div>\n \n {/* Drag indicator */}\n {isDragging && (\n <div className=\"absolute inset-0 flex items-center justify-center bg-blue-500/10 pointer-events-none\">\n <div className=\"text-blue-600 font-medium text-sm bg-white/90 px-3 py-1 rounded-full shadow-lg\">\n {t('thumbnail.draggingPage')}\n </div>\n </div>\n )}\n </div>\n );\n }\n };\n}\n","import { Plus, Search } from 'lucide-react';\nimport { Sheet, SheetContent, SheetHeader, SheetTitle, SheetDescription } from '../../ui/sheet';\nimport { AvailableItem, AvailableGroupItem, AvailablePageItem } from './use-page-groups';\nimport type { PageComponent, ReorderItem } from './page-group-utils';\nimport { createDefaultRenderThumbnail } from './default-render-thumbnail';\nimport PageSizeUtils from '../../utility/PageSizeUtils';\nimport * as React from 'react';\nimport { useShellTranslation } from '../../i18n/locale-context';\n\ninterface AddPageDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n availableItems: AvailableItem[];\n onSelectItem: (item: AvailableItem) => Promise<void> | void;\n pageComponents?: { [pageId: string]: PageComponent };\n payload?: any;\n setup?: { width: number; height: number };\n gridColsClass?: string;\n}\n\nexport function AddPageDialog({\n open,\n onOpenChange,\n availableItems,\n onSelectItem,\n pageComponents,\n payload,\n setup = { width: 210, height: 297 },\n gridColsClass = \"page-order-grid-cols\",\n}: AddPageDialogProps) {\n const shellI18n = useShellTranslation();\n const { t, localize } = shellI18n;\n const [searchQuery, setSearchQuery] = React.useState('');\n\n const filteredItems = React.useMemo(() => {\n if (!searchQuery.trim()) return availableItems;\n const q = searchQuery.toLowerCase();\n return availableItems.filter(item =>\n (localize(item.label) || '').toLowerCase().includes(q) ||\n item.id.toLowerCase().includes(q)\n );\n }, [availableItems, searchQuery, localize]);\n\n const handleSelect = (item: AvailableItem) => {\n onOpenChange(false);\n void onSelectItem(item);\n };\n\n const resolvedDimensions = PageSizeUtils.resolveDimensions(setup);\n const pageWidthMm = resolvedDimensions.width;\n const pageHeightMm = resolvedDimensions.height;\n const pageAspectRatio = pageWidthMm / pageHeightMm;\n const thumbnailWidth = 200;\n const thumbnailHeight = Math.round(thumbnailWidth / pageAspectRatio);\n const thumbnailStyle = {\n width: `${thumbnailWidth}px`,\n height: `${thumbnailHeight}px`,\n };\n\n const defaultRenderThumbnail = React.useMemo(() => {\n if (!pageComponents) return null;\n return createDefaultRenderThumbnail({\n pageComponents,\n payload,\n setup,\n thumbnailWidth,\n thumbnailHeight,\n i18n: shellI18n,\n });\n }, [pageComponents, payload, setup, thumbnailWidth, thumbnailHeight, shellI18n]);\n\n // Helper to evaluate pageComponentKeys (static array or function)\n const evaluatePageComponentKeys = (\n keys: string[] | ((context: { payload: any; item?: any; parent?: any }) => string[]) | undefined,\n context: { payload: any; item?: any; parent?: any }\n ): string[] => {\n if (!keys) return [];\n if (Array.isArray(keys)) return keys;\n \n // Evaluate function with error handling\n try {\n const result = keys(context);\n \n // Validate result is an array\n if (!Array.isArray(result)) {\n console.error('[uhuu-components] pageComponentKeys function must return an array, got:', typeof result);\n return [];\n }\n \n // Filter to ensure all items are strings\n const filtered = result.filter(key => typeof key === 'string');\n if (filtered.length !== result.length) {\n console.warn('[uhuu-components] pageComponentKeys returned non-string values, filtering them out');\n }\n \n return filtered;\n } catch (err) {\n console.error('[uhuu-components] Error evaluating pageComponentKeys function:', err);\n return [];\n }\n };\n\n const toReorderItem = (item: AvailableItem, index: number): ReorderItem => {\n if (item.kind === 'group') {\n const group = item as AvailableGroupItem;\n const context = { payload, item: undefined, parent: undefined };\n const componentKeys = evaluatePageComponentKeys(group.pageComponentKeys, context);\n const firstPageComponentKey = componentKeys[0];\n return {\n kind: 'group',\n id: item.id,\n label: item.label,\n pageCount: componentKeys.length,\n firstPageId: firstPageComponentKey,\n firstPageComponentKey,\n } as ReorderItem;\n }\n\n const pageItem = item as AvailablePageItem;\n const componentKey = pageItem.componentKey ?? pageItem.id;\n return {\n kind: 'page',\n id: pageItem.id,\n pageId: pageItem.id,\n pageComponentKey: componentKey,\n pageLabel: pageItem.label,\n pageNum: index + 1,\n } as ReorderItem;\n };\n\n return (\n <Sheet open={open} onOpenChange={onOpenChange}>\n <SheetContent\n side=\"bottom\"\n className=\"h-[90vh] w-full max-w-none flex flex-col gap-0 bg-gray-50 p-0\"\n data-uhuu-editor\n >\n <SheetHeader className=\"border-b border-gray-200 p-4 bg-white\">\n <div className=\"flex items-end gap-3\">\n <div className=\"w-8 h-8 bg-gray-100 rounded-full flex items-center justify-center shrink-0 mb-0.5\">\n <Plus className=\"w-4 h-4\" />\n </div>\n <div className=\"flex-1\">\n <SheetTitle className=\"text-base font-medium text-gray-900 leading-tight\">\n {t('addDialog.title')}\n </SheetTitle>\n <SheetDescription className=\"text-xs text-gray-400 mt-0.5\">\n {t('addDialog.description')}\n </SheetDescription>\n </div>\n <div className=\"mb-0.5 mr-8 flex items-center gap-1.5 rounded-md border border-gray-200 bg-white px-2 py-1 text-gray-400 focus-within:border-gray-400 focus-within:ring-2 focus-within:ring-gray-200\">\n <Search className=\"w-3.5 h-3.5 shrink-0\" />\n <label className=\"sr-only\" htmlFor=\"uhuu-add-page-filter\">{t('addDialog.filterLabel')}</label>\n <input\n id=\"uhuu-add-page-filter\"\n type=\"text\"\n placeholder={t('addDialog.filterPlaceholder')}\n value={searchQuery}\n onChange={e => setSearchQuery(e.target.value)}\n className=\"w-24 border-0 bg-transparent text-sm text-gray-600 placeholder:text-gray-400 outline-none transition-all duration-150 focus:w-40\"\n />\n </div>\n </div>\n </SheetHeader>\n\n <div className=\"min-h-0 flex-1 overflow-auto bg-gray-50 p-6\">\n {filteredItems.length === 0 ? (\n <div className=\"text-center py-16\">\n <div className=\"w-16 h-16 bg-gray-100 rounded-full flex items-center justify-center mx-auto mb-4\">\n <Plus className=\"w-8 h-8 text-gray-400\" />\n </div>\n <div className=\"text-lg font-medium text-gray-900 mb-2\">{t('addDialog.emptyTitle')}</div>\n <p className=\"text-gray-500 mb-4\">{searchQuery.trim() ? t('addDialog.emptyFiltered') : t('addDialog.emptyAdded')}</p>\n </div>\n ) : (\n <div className={gridColsClass}>\n {filteredItems.map((item, index) => {\n const isGroup = item.kind === 'group';\n const id = item.id;\n const label = isGroup\n ? (localize(item.label) || t('addDialog.groupFallbackName', { number: index + 1 }))\n : (localize(item.label) || t('addDialog.pageFallbackName', { id: item.id }));\n const context = { payload, item: undefined, parent: undefined };\n const pageCount = isGroup \n ? evaluatePageComponentKeys((item as AvailableGroupItem).pageComponentKeys, context).length\n : 1;\n const hasDefaultThumbnail = !!defaultRenderThumbnail;\n return (\n <div\n key={id}\n onClick={() => handleSelect(item)}\n onKeyDown={(event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n handleSelect(item);\n }\n }}\n role=\"button\"\n tabIndex={0}\n aria-label={t('addDialog.addItem', { name: label })}\n className={[\n \"group relative block cursor-pointer border-0 bg-transparent p-0 text-left transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-gray-900 focus-visible:ring-offset-2\",\n !hasDefaultThumbnail && \"bg-white border-2 border-gray-200\",\n ].filter(Boolean).join(' ')}\n style={thumbnailStyle}\n >\n {/* Thumbnail area */}\n <div className=\"w-full h-full relative\">\n {(item as any).thumbnail ? (\n <div className=\"absolute inset-0 bg-gray-100 hover:bg-white\">\n <img\n src={(item as any).thumbnail}\n className=\"w-full h-full object-contain pointer-events-none object-top border border-gray-200 p-4\"\n alt={label}\n />\n </div>\n ) : defaultRenderThumbnail ? (\n <div className=\"absolute inset-0 flex items-center pointer-events-none\">\n {defaultRenderThumbnail(toReorderItem(item, index), index, false)}\n </div>\n ) : (\n <>\n {isGroup ? (\n <div className=\"flex h-full flex-col items-center justify-center p-4 text-center\">\n <div className=\"w-16 h-16 bg-blue-100 rounded-full flex items-center justify-center mx-auto mb-3\">\n <Plus className=\"w-8 h-8 text-blue-600\" />\n </div>\n <div className=\"text-sm font-medium text-gray-700\">{label}</div>\n <div className=\"text-xs text-gray-500 mt-1\">\n {t('page.count', { count: pageCount })}\n </div>\n </div>\n ) : (\n <div className=\"flex h-full flex-col items-center justify-center p-4 text-center\">\n <div className=\"w-16 h-16 bg-gray-100 rounded-full flex items-center justify-center mx-auto mb-3\">\n <Plus className=\"w-8 h-8 text-gray-400\" />\n </div>\n <div className=\"text-sm font-medium text-gray-700\">{label}</div>\n <div className=\"text-xs text-gray-500 mt-1\">{id}</div>\n </div>\n )}\n </>\n )}\n </div>\n\n {(!defaultRenderThumbnail || item?.thumbnail) && (\n <>\n {isGroup && (\n <div className=\"absolute top-2 right-2 px-2 py-1 bg-blue-600/80 backdrop-blur-sm text-white text-xs font-medium rounded shadow-lg pointer-events-none\">\n {t('thumbnail.groupBadge', { count: pageCount })}\n </div>\n )}\n\n {/* Item info overlay - positioned at bottom to match reorder dialog */}\n <div className=\"absolute bottom-0 left-0 right-0 bg-black/40 backdrop-blur-sm p-3 pointer-events-none\" data-item-id={id}>\n <div className=\"flex items-center justify-between gap-2 text-white\">\n <div className=\"flex-1 min-w-0\">\n <div className=\"text-sm font-medium truncate\">{label}</div> \n </div> \n </div>\n </div>\n </>\n )}\n\n {/* Small hover indicator */}\n <div className=\"absolute top-3 left-3 w-8 h-8 bg-black rounded-full flex items-center justify-center shadow-lg opacity-0 group-hover:opacity-100 transition-opacity pointer-events-none z-10\">\n <Plus className=\"w-4 h-4 text-white\" />\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n </SheetContent>\n </Sheet>\n );\n}\n","import { useMemo, useLayoutEffect, useEffect, useRef, useCallback } from 'react';\n\nfunction useCombinedRefs() {\n for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {\n refs[_key] = arguments[_key];\n }\n\n return useMemo(() => node => {\n refs.forEach(ref => ref(node));\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n refs);\n}\n\n// https://github.com/facebook/react/blob/master/packages/shared/ExecutionEnvironment.js\nconst canUseDOM = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined';\n\nfunction isWindow(element) {\n const elementString = Object.prototype.toString.call(element);\n return elementString === '[object Window]' || // In Electron context the Window object serializes to [object global]\n elementString === '[object global]';\n}\n\nfunction isNode(node) {\n return 'nodeType' in node;\n}\n\nfunction getWindow(target) {\n var _target$ownerDocument, _target$ownerDocument2;\n\n if (!target) {\n return window;\n }\n\n if (isWindow(target)) {\n return target;\n }\n\n if (!isNode(target)) {\n return window;\n }\n\n return (_target$ownerDocument = (_target$ownerDocument2 = target.ownerDocument) == null ? void 0 : _target$ownerDocument2.defaultView) != null ? _target$ownerDocument : window;\n}\n\nfunction isDocument(node) {\n const {\n Document\n } = getWindow(node);\n return node instanceof Document;\n}\n\nfunction isHTMLElement(node) {\n if (isWindow(node)) {\n return false;\n }\n\n return node instanceof getWindow(node).HTMLElement;\n}\n\nfunction isSVGElement(node) {\n return node instanceof getWindow(node).SVGElement;\n}\n\nfunction getOwnerDocument(target) {\n if (!target) {\n return document;\n }\n\n if (isWindow(target)) {\n return target.document;\n }\n\n if (!isNode(target)) {\n return document;\n }\n\n if (isDocument(target)) {\n return target;\n }\n\n if (isHTMLElement(target) || isSVGElement(target)) {\n return target.ownerDocument;\n }\n\n return document;\n}\n\n/**\r\n * A hook that resolves to useEffect on the server and useLayoutEffect on the client\r\n * @param callback {function} Callback function that is invoked when the dependencies of the hook change\r\n */\n\nconst useIsomorphicLayoutEffect = canUseDOM ? useLayoutEffect : useEffect;\n\nfunction useEvent(handler) {\n const handlerRef = useRef(handler);\n useIsomorphicLayoutEffect(() => {\n handlerRef.current = handler;\n });\n return useCallback(function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return handlerRef.current == null ? void 0 : handlerRef.current(...args);\n }, []);\n}\n\nfunction useInterval() {\n const intervalRef = useRef(null);\n const set = useCallback((listener, duration) => {\n intervalRef.current = setInterval(listener, duration);\n }, []);\n const clear = useCallback(() => {\n if (intervalRef.current !== null) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n }, []);\n return [set, clear];\n}\n\nfunction useLatestValue(value, dependencies) {\n if (dependencies === void 0) {\n dependencies = [value];\n }\n\n const valueRef = useRef(value);\n useIsomorphicLayoutEffect(() => {\n if (valueRef.current !== value) {\n valueRef.current = value;\n }\n }, dependencies);\n return valueRef;\n}\n\nfunction useLazyMemo(callback, dependencies) {\n const valueRef = useRef();\n return useMemo(() => {\n const newValue = callback(valueRef.current);\n valueRef.current = newValue;\n return newValue;\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [...dependencies]);\n}\n\nfunction useNodeRef(onChange) {\n const onChangeHandler = useEvent(onChange);\n const node = useRef(null);\n const setNodeRef = useCallback(element => {\n if (element !== node.current) {\n onChangeHandler == null ? void 0 : onChangeHandler(element, node.current);\n }\n\n node.current = element;\n }, //eslint-disable-next-line\n []);\n return [node, setNodeRef];\n}\n\nfunction usePrevious(value) {\n const ref = useRef();\n useEffect(() => {\n ref.current = value;\n }, [value]);\n return ref.current;\n}\n\nlet ids = {};\nfunction useUniqueId(prefix, value) {\n return useMemo(() => {\n if (value) {\n return value;\n }\n\n const id = ids[prefix] == null ? 0 : ids[prefix] + 1;\n ids[prefix] = id;\n return prefix + \"-\" + id;\n }, [prefix, value]);\n}\n\nfunction createAdjustmentFn(modifier) {\n return function (object) {\n for (var _len = arguments.length, adjustments = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n adjustments[_key - 1] = arguments[_key];\n }\n\n return adjustments.reduce((accumulator, adjustment) => {\n const entries = Object.entries(adjustment);\n\n for (const [key, valueAdjustment] of entries) {\n const value = accumulator[key];\n\n if (value != null) {\n accumulator[key] = value + modifier * valueAdjustment;\n }\n }\n\n return accumulator;\n }, { ...object\n });\n };\n}\n\nconst add = /*#__PURE__*/createAdjustmentFn(1);\nconst subtract = /*#__PURE__*/createAdjustmentFn(-1);\n\nfunction hasViewportRelativeCoordinates(event) {\n return 'clientX' in event && 'clientY' in event;\n}\n\nfunction isKeyboardEvent(event) {\n if (!event) {\n return false;\n }\n\n const {\n KeyboardEvent\n } = getWindow(event.target);\n return KeyboardEvent && event instanceof KeyboardEvent;\n}\n\nfunction isTouchEvent(event) {\n if (!event) {\n return false;\n }\n\n const {\n TouchEvent\n } = getWindow(event.target);\n return TouchEvent && event instanceof TouchEvent;\n}\n\n/**\r\n * Returns the normalized x and y coordinates for mouse and touch events.\r\n */\n\nfunction getEventCoordinates(event) {\n if (isTouchEvent(event)) {\n if (event.touches && event.touches.length) {\n const {\n clientX: x,\n clientY: y\n } = event.touches[0];\n return {\n x,\n y\n };\n } else if (event.changedTouches && event.changedTouches.length) {\n const {\n clientX: x,\n clientY: y\n } = event.changedTouches[0];\n return {\n x,\n y\n };\n }\n }\n\n if (hasViewportRelativeCoordinates(event)) {\n return {\n x: event.clientX,\n y: event.clientY\n };\n }\n\n return null;\n}\n\nconst CSS = /*#__PURE__*/Object.freeze({\n Translate: {\n toString(transform) {\n if (!transform) {\n return;\n }\n\n const {\n x,\n y\n } = transform;\n return \"translate3d(\" + (x ? Math.round(x) : 0) + \"px, \" + (y ? Math.round(y) : 0) + \"px, 0)\";\n }\n\n },\n Scale: {\n toString(transform) {\n if (!transform) {\n return;\n }\n\n const {\n scaleX,\n scaleY\n } = transform;\n return \"scaleX(\" + scaleX + \") scaleY(\" + scaleY + \")\";\n }\n\n },\n Transform: {\n toString(transform) {\n if (!transform) {\n return;\n }\n\n return [CSS.Translate.toString(transform), CSS.Scale.toString(transform)].join(' ');\n }\n\n },\n Transition: {\n toString(_ref) {\n let {\n property,\n duration,\n easing\n } = _ref;\n return property + \" \" + duration + \"ms \" + easing;\n }\n\n }\n});\n\nconst SELECTOR = 'a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled),*[tabindex]';\nfunction findFirstFocusableNode(element) {\n if (element.matches(SELECTOR)) {\n return element;\n }\n\n return element.querySelector(SELECTOR);\n}\n\nexport { CSS, add, canUseDOM, findFirstFocusableNode, getEventCoordinates, getOwnerDocument, getWindow, hasViewportRelativeCoordinates, isDocument, isHTMLElement, isKeyboardEvent, isNode, isSVGElement, isTouchEvent, isWindow, subtract, useCombinedRefs, useEvent, useInterval, useIsomorphicLayoutEffect, useLatestValue, useLazyMemo, useNodeRef, usePrevious, useUniqueId };\n//# sourceMappingURL=utilities.esm.js.map\n","import React, { useState, useCallback } from 'react';\n\nconst hiddenStyles = {\n display: 'none'\n};\nfunction HiddenText(_ref) {\n let {\n id,\n value\n } = _ref;\n return React.createElement(\"div\", {\n id: id,\n style: hiddenStyles\n }, value);\n}\n\nfunction LiveRegion(_ref) {\n let {\n id,\n announcement,\n ariaLiveType = \"assertive\"\n } = _ref;\n // Hide element visually but keep it readable by screen readers\n const visuallyHidden = {\n position: 'fixed',\n top: 0,\n left: 0,\n width: 1,\n height: 1,\n margin: -1,\n border: 0,\n padding: 0,\n overflow: 'hidden',\n clip: 'rect(0 0 0 0)',\n clipPath: 'inset(100%)',\n whiteSpace: 'nowrap'\n };\n return React.createElement(\"div\", {\n id: id,\n style: visuallyHidden,\n role: \"status\",\n \"aria-live\": ariaLiveType,\n \"aria-atomic\": true\n }, announcement);\n}\n\nfunction useAnnouncement() {\n const [announcement, setAnnouncement] = useState('');\n const announce = useCallback(value => {\n if (value != null) {\n setAnnouncement(value);\n }\n }, []);\n return {\n announce,\n announcement\n };\n}\n\nexport { HiddenText, LiveRegion, useAnnouncement };\n//# sourceMappingURL=accessibility.esm.js.map\n","import React, { createContext, useContext, useEffect, useState, useCallback, useMemo, useRef, memo, useReducer, cloneElement, forwardRef } from 'react';\nimport { createPortal, unstable_batchedUpdates } from 'react-dom';\nimport { useUniqueId, getEventCoordinates, getWindow, isDocument, isHTMLElement, isSVGElement, canUseDOM, isWindow, isNode, getOwnerDocument, add, isKeyboardEvent, subtract, useLazyMemo, useInterval, usePrevious, useLatestValue, useEvent, useIsomorphicLayoutEffect, useNodeRef, findFirstFocusableNode, CSS } from '@dnd-kit/utilities';\nimport { useAnnouncement, HiddenText, LiveRegion } from '@dnd-kit/accessibility';\n\nconst DndMonitorContext = /*#__PURE__*/createContext(null);\n\nfunction useDndMonitor(listener) {\n const registerListener = useContext(DndMonitorContext);\n useEffect(() => {\n if (!registerListener) {\n throw new Error('useDndMonitor must be used within a children of <DndContext>');\n }\n\n const unsubscribe = registerListener(listener);\n return unsubscribe;\n }, [listener, registerListener]);\n}\n\nfunction useDndMonitorProvider() {\n const [listeners] = useState(() => new Set());\n const registerListener = useCallback(listener => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n }, [listeners]);\n const dispatch = useCallback(_ref => {\n let {\n type,\n event\n } = _ref;\n listeners.forEach(listener => {\n var _listener$type;\n\n return (_listener$type = listener[type]) == null ? void 0 : _listener$type.call(listener, event);\n });\n }, [listeners]);\n return [dispatch, registerListener];\n}\n\nconst defaultScreenReaderInstructions = {\n draggable: \"\\n To pick up a draggable item, press the space bar.\\n While dragging, use the arrow keys to move the item.\\n Press space again to drop the item in its new position, or press escape to cancel.\\n \"\n};\nconst defaultAnnouncements = {\n onDragStart(_ref) {\n let {\n active\n } = _ref;\n return \"Picked up draggable item \" + active.id + \".\";\n },\n\n onDragOver(_ref2) {\n let {\n active,\n over\n } = _ref2;\n\n if (over) {\n return \"Draggable item \" + active.id + \" was moved over droppable area \" + over.id + \".\";\n }\n\n return \"Draggable item \" + active.id + \" is no longer over a droppable area.\";\n },\n\n onDragEnd(_ref3) {\n let {\n active,\n over\n } = _ref3;\n\n if (over) {\n return \"Draggable item \" + active.id + \" was dropped over droppable area \" + over.id;\n }\n\n return \"Draggable item \" + active.id + \" was dropped.\";\n },\n\n onDragCancel(_ref4) {\n let {\n active\n } = _ref4;\n return \"Dragging was cancelled. Draggable item \" + active.id + \" was dropped.\";\n }\n\n};\n\nfunction Accessibility(_ref) {\n let {\n announcements = defaultAnnouncements,\n container,\n hiddenTextDescribedById,\n screenReaderInstructions = defaultScreenReaderInstructions\n } = _ref;\n const {\n announce,\n announcement\n } = useAnnouncement();\n const liveRegionId = useUniqueId(\"DndLiveRegion\");\n const [mounted, setMounted] = useState(false);\n useEffect(() => {\n setMounted(true);\n }, []);\n useDndMonitor(useMemo(() => ({\n onDragStart(_ref2) {\n let {\n active\n } = _ref2;\n announce(announcements.onDragStart({\n active\n }));\n },\n\n onDragMove(_ref3) {\n let {\n active,\n over\n } = _ref3;\n\n if (announcements.onDragMove) {\n announce(announcements.onDragMove({\n active,\n over\n }));\n }\n },\n\n onDragOver(_ref4) {\n let {\n active,\n over\n } = _ref4;\n announce(announcements.onDragOver({\n active,\n over\n }));\n },\n\n onDragEnd(_ref5) {\n let {\n active,\n over\n } = _ref5;\n announce(announcements.onDragEnd({\n active,\n over\n }));\n },\n\n onDragCancel(_ref6) {\n let {\n active,\n over\n } = _ref6;\n announce(announcements.onDragCancel({\n active,\n over\n }));\n }\n\n }), [announce, announcements]));\n\n if (!mounted) {\n return null;\n }\n\n const markup = React.createElement(React.Fragment, null, React.createElement(HiddenText, {\n id: hiddenTextDescribedById,\n value: screenReaderInstructions.draggable\n }), React.createElement(LiveRegion, {\n id: liveRegionId,\n announcement: announcement\n }));\n return container ? createPortal(markup, container) : markup;\n}\n\nvar Action;\n\n(function (Action) {\n Action[\"DragStart\"] = \"dragStart\";\n Action[\"DragMove\"] = \"dragMove\";\n Action[\"DragEnd\"] = \"dragEnd\";\n Action[\"DragCancel\"] = \"dragCancel\";\n Action[\"DragOver\"] = \"dragOver\";\n Action[\"RegisterDroppable\"] = \"registerDroppable\";\n Action[\"SetDroppableDisabled\"] = \"setDroppableDisabled\";\n Action[\"UnregisterDroppable\"] = \"unregisterDroppable\";\n})(Action || (Action = {}));\n\nfunction noop() {}\n\nfunction useSensor(sensor, options) {\n return useMemo(() => ({\n sensor,\n options: options != null ? options : {}\n }), // eslint-disable-next-line react-hooks/exhaustive-deps\n [sensor, options]);\n}\n\nfunction useSensors() {\n for (var _len = arguments.length, sensors = new Array(_len), _key = 0; _key < _len; _key++) {\n sensors[_key] = arguments[_key];\n }\n\n return useMemo(() => [...sensors].filter(sensor => sensor != null), // eslint-disable-next-line react-hooks/exhaustive-deps\n [...sensors]);\n}\n\nconst defaultCoordinates = /*#__PURE__*/Object.freeze({\n x: 0,\n y: 0\n});\n\n/**\r\n * Returns the distance between two points\r\n */\nfunction distanceBetween(p1, p2) {\n return Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2));\n}\n\nfunction getRelativeTransformOrigin(event, rect) {\n const eventCoordinates = getEventCoordinates(event);\n\n if (!eventCoordinates) {\n return '0 0';\n }\n\n const transformOrigin = {\n x: (eventCoordinates.x - rect.left) / rect.width * 100,\n y: (eventCoordinates.y - rect.top) / rect.height * 100\n };\n return transformOrigin.x + \"% \" + transformOrigin.y + \"%\";\n}\n\n/**\r\n * Sort collisions from smallest to greatest value\r\n */\nfunction sortCollisionsAsc(_ref, _ref2) {\n let {\n data: {\n value: a\n }\n } = _ref;\n let {\n data: {\n value: b\n }\n } = _ref2;\n return a - b;\n}\n/**\r\n * Sort collisions from greatest to smallest value\r\n */\n\nfunction sortCollisionsDesc(_ref3, _ref4) {\n let {\n data: {\n value: a\n }\n } = _ref3;\n let {\n data: {\n value: b\n }\n } = _ref4;\n return b - a;\n}\n/**\r\n * Returns the coordinates of the corners of a given rectangle:\r\n * [TopLeft {x, y}, TopRight {x, y}, BottomLeft {x, y}, BottomRight {x, y}]\r\n */\n\nfunction cornersOfRectangle(_ref5) {\n let {\n left,\n top,\n height,\n width\n } = _ref5;\n return [{\n x: left,\n y: top\n }, {\n x: left + width,\n y: top\n }, {\n x: left,\n y: top + height\n }, {\n x: left + width,\n y: top + height\n }];\n}\nfunction getFirstCollision(collisions, property) {\n if (!collisions || collisions.length === 0) {\n return null;\n }\n\n const [firstCollision] = collisions;\n return property ? firstCollision[property] : firstCollision;\n}\n\n/**\r\n * Returns the coordinates of the center of a given ClientRect\r\n */\n\nfunction centerOfRectangle(rect, left, top) {\n if (left === void 0) {\n left = rect.left;\n }\n\n if (top === void 0) {\n top = rect.top;\n }\n\n return {\n x: left + rect.width * 0.5,\n y: top + rect.height * 0.5\n };\n}\n/**\r\n * Returns the closest rectangles from an array of rectangles to the center of a given\r\n * rectangle.\r\n */\n\n\nconst closestCenter = _ref => {\n let {\n collisionRect,\n droppableRects,\n droppableContainers\n } = _ref;\n const centerRect = centerOfRectangle(collisionRect, collisionRect.left, collisionRect.top);\n const collisions = [];\n\n for (const droppableContainer of droppableContainers) {\n const {\n id\n } = droppableContainer;\n const rect = droppableRects.get(id);\n\n if (rect) {\n const distBetween = distanceBetween(centerOfRectangle(rect), centerRect);\n collisions.push({\n id,\n data: {\n droppableContainer,\n value: distBetween\n }\n });\n }\n }\n\n return collisions.sort(sortCollisionsAsc);\n};\n\n/**\r\n * Returns the closest rectangles from an array of rectangles to the corners of\r\n * another rectangle.\r\n */\n\nconst closestCorners = _ref => {\n let {\n collisionRect,\n droppableRects,\n droppableContainers\n } = _ref;\n const corners = cornersOfRectangle(collisionRect);\n const collisions = [];\n\n for (const droppableContainer of droppableContainers) {\n const {\n id\n } = droppableContainer;\n const rect = droppableRects.get(id);\n\n if (rect) {\n const rectCorners = cornersOfRectangle(rect);\n const distances = corners.reduce((accumulator, corner, index) => {\n return accumulator + distanceBetween(rectCorners[index], corner);\n }, 0);\n const effectiveDistance = Number((distances / 4).toFixed(4));\n collisions.push({\n id,\n data: {\n droppableContainer,\n value: effectiveDistance\n }\n });\n }\n }\n\n return collisions.sort(sortCollisionsAsc);\n};\n\n/**\r\n * Returns the intersecting rectangle area between two rectangles\r\n */\n\nfunction getIntersectionRatio(entry, target) {\n const top = Math.max(target.top, entry.top);\n const left = Math.max(target.left, entry.left);\n const right = Math.min(target.left + target.width, entry.left + entry.width);\n const bottom = Math.min(target.top + target.height, entry.top + entry.height);\n const width = right - left;\n const height = bottom - top;\n\n if (left < right && top < bottom) {\n const targetArea = target.width * target.height;\n const entryArea = entry.width * entry.height;\n const intersectionArea = width * height;\n const intersectionRatio = intersectionArea / (targetArea + entryArea - intersectionArea);\n return Number(intersectionRatio.toFixed(4));\n } // Rectangles do not overlap, or overlap has an area of zero (edge/corner overlap)\n\n\n return 0;\n}\n/**\r\n * Returns the rectangles that has the greatest intersection area with a given\r\n * rectangle in an array of rectangles.\r\n */\n\nconst rectIntersection = _ref => {\n let {\n collisionRect,\n droppableRects,\n droppableContainers\n } = _ref;\n const collisions = [];\n\n for (const droppableContainer of droppableContainers) {\n const {\n id\n } = droppableContainer;\n const rect = droppableRects.get(id);\n\n if (rect) {\n const intersectionRatio = getIntersectionRatio(rect, collisionRect);\n\n if (intersectionRatio > 0) {\n collisions.push({\n id,\n data: {\n droppableContainer,\n value: intersectionRatio\n }\n });\n }\n }\n }\n\n return collisions.sort(sortCollisionsDesc);\n};\n\n/**\r\n * Check if a given point is contained within a bounding rectangle\r\n */\n\nfunction isPointWithinRect(point, rect) {\n const {\n top,\n left,\n bottom,\n right\n } = rect;\n return top <= point.y && point.y <= bottom && left <= point.x && point.x <= right;\n}\n/**\r\n * Returns the rectangles that the pointer is hovering over\r\n */\n\n\nconst pointerWithin = _ref => {\n let {\n droppableContainers,\n droppableRects,\n pointerCoordinates\n } = _ref;\n\n if (!pointerCoordinates) {\n return [];\n }\n\n const collisions = [];\n\n for (const droppableContainer of droppableContainers) {\n const {\n id\n } = droppableContainer;\n const rect = droppableRects.get(id);\n\n if (rect && isPointWithinRect(pointerCoordinates, rect)) {\n /* There may be more than a single rectangle intersecting\r\n * with the pointer coordinates. In order to sort the\r\n * colliding rectangles, we measure the distance between\r\n * the pointer and the corners of the intersecting rectangle\r\n */\n const corners = cornersOfRectangle(rect);\n const distances = corners.reduce((accumulator, corner) => {\n return accumulator + distanceBetween(pointerCoordinates, corner);\n }, 0);\n const effectiveDistance = Number((distances / 4).toFixed(4));\n collisions.push({\n id,\n data: {\n droppableContainer,\n value: effectiveDistance\n }\n });\n }\n }\n\n return collisions.sort(sortCollisionsAsc);\n};\n\nfunction adjustScale(transform, rect1, rect2) {\n return { ...transform,\n scaleX: rect1 && rect2 ? rect1.width / rect2.width : 1,\n scaleY: rect1 && rect2 ? rect1.height / rect2.height : 1\n };\n}\n\nfunction getRectDelta(rect1, rect2) {\n return rect1 && rect2 ? {\n x: rect1.left - rect2.left,\n y: rect1.top - rect2.top\n } : defaultCoordinates;\n}\n\nfunction createRectAdjustmentFn(modifier) {\n return function adjustClientRect(rect) {\n for (var _len = arguments.length, adjustments = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n adjustments[_key - 1] = arguments[_key];\n }\n\n return adjustments.reduce((acc, adjustment) => ({ ...acc,\n top: acc.top + modifier * adjustment.y,\n bottom: acc.bottom + modifier * adjustment.y,\n left: acc.left + modifier * adjustment.x,\n right: acc.right + modifier * adjustment.x\n }), { ...rect\n });\n };\n}\nconst getAdjustedRect = /*#__PURE__*/createRectAdjustmentFn(1);\n\nfunction parseTransform(transform) {\n if (transform.startsWith('matrix3d(')) {\n const transformArray = transform.slice(9, -1).split(/, /);\n return {\n x: +transformArray[12],\n y: +transformArray[13],\n scaleX: +transformArray[0],\n scaleY: +transformArray[5]\n };\n } else if (transform.startsWith('matrix(')) {\n const transformArray = transform.slice(7, -1).split(/, /);\n return {\n x: +transformArray[4],\n y: +transformArray[5],\n scaleX: +transformArray[0],\n scaleY: +transformArray[3]\n };\n }\n\n return null;\n}\n\nfunction inverseTransform(rect, transform, transformOrigin) {\n const parsedTransform = parseTransform(transform);\n\n if (!parsedTransform) {\n return rect;\n }\n\n const {\n scaleX,\n scaleY,\n x: translateX,\n y: translateY\n } = parsedTransform;\n const x = rect.left - translateX - (1 - scaleX) * parseFloat(transformOrigin);\n const y = rect.top - translateY - (1 - scaleY) * parseFloat(transformOrigin.slice(transformOrigin.indexOf(' ') + 1));\n const w = scaleX ? rect.width / scaleX : rect.width;\n const h = scaleY ? rect.height / scaleY : rect.height;\n return {\n width: w,\n height: h,\n top: y,\n right: x + w,\n bottom: y + h,\n left: x\n };\n}\n\nconst defaultOptions = {\n ignoreTransform: false\n};\n/**\r\n * Returns the bounding client rect of an element relative to the viewport.\r\n */\n\nfunction getClientRect(element, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n let rect = element.getBoundingClientRect();\n\n if (options.ignoreTransform) {\n const {\n transform,\n transformOrigin\n } = getWindow(element).getComputedStyle(element);\n\n if (transform) {\n rect = inverseTransform(rect, transform, transformOrigin);\n }\n }\n\n const {\n top,\n left,\n width,\n height,\n bottom,\n right\n } = rect;\n return {\n top,\n left,\n width,\n height,\n bottom,\n right\n };\n}\n/**\r\n * Returns the bounding client rect of an element relative to the viewport.\r\n *\r\n * @remarks\r\n * The ClientRect returned by this method does not take into account transforms\r\n * applied to the element it measures.\r\n *\r\n */\n\nfunction getTransformAgnosticClientRect(element) {\n return getClientRect(element, {\n ignoreTransform: true\n });\n}\n\nfunction getWindowClientRect(element) {\n const width = element.innerWidth;\n const height = element.innerHeight;\n return {\n top: 0,\n left: 0,\n right: width,\n bottom: height,\n width,\n height\n };\n}\n\nfunction isFixed(node, computedStyle) {\n if (computedStyle === void 0) {\n computedStyle = getWindow(node).getComputedStyle(node);\n }\n\n return computedStyle.position === 'fixed';\n}\n\nfunction isScrollable(element, computedStyle) {\n if (computedStyle === void 0) {\n computedStyle = getWindow(element).getComputedStyle(element);\n }\n\n const overflowRegex = /(auto|scroll|overlay)/;\n const properties = ['overflow', 'overflowX', 'overflowY'];\n return properties.some(property => {\n const value = computedStyle[property];\n return typeof value === 'string' ? overflowRegex.test(value) : false;\n });\n}\n\nfunction getScrollableAncestors(element, limit) {\n const scrollParents = [];\n\n function findScrollableAncestors(node) {\n if (limit != null && scrollParents.length >= limit) {\n return scrollParents;\n }\n\n if (!node) {\n return scrollParents;\n }\n\n if (isDocument(node) && node.scrollingElement != null && !scrollParents.includes(node.scrollingElement)) {\n scrollParents.push(node.scrollingElement);\n return scrollParents;\n }\n\n if (!isHTMLElement(node) || isSVGElement(node)) {\n return scrollParents;\n }\n\n if (scrollParents.includes(node)) {\n return scrollParents;\n }\n\n const computedStyle = getWindow(element).getComputedStyle(node);\n\n if (node !== element) {\n if (isScrollable(node, computedStyle)) {\n scrollParents.push(node);\n }\n }\n\n if (isFixed(node, computedStyle)) {\n return scrollParents;\n }\n\n return findScrollableAncestors(node.parentNode);\n }\n\n if (!element) {\n return scrollParents;\n }\n\n return findScrollableAncestors(element);\n}\nfunction getFirstScrollableAncestor(node) {\n const [firstScrollableAncestor] = getScrollableAncestors(node, 1);\n return firstScrollableAncestor != null ? firstScrollableAncestor : null;\n}\n\nfunction getScrollableElement(element) {\n if (!canUseDOM || !element) {\n return null;\n }\n\n if (isWindow(element)) {\n return element;\n }\n\n if (!isNode(element)) {\n return null;\n }\n\n if (isDocument(element) || element === getOwnerDocument(element).scrollingElement) {\n return window;\n }\n\n if (isHTMLElement(element)) {\n return element;\n }\n\n return null;\n}\n\nfunction getScrollXCoordinate(element) {\n if (isWindow(element)) {\n return element.scrollX;\n }\n\n return element.scrollLeft;\n}\nfunction getScrollYCoordinate(element) {\n if (isWindow(element)) {\n return element.scrollY;\n }\n\n return element.scrollTop;\n}\nfunction getScrollCoordinates(element) {\n return {\n x: getScrollXCoordinate(element),\n y: getScrollYCoordinate(element)\n };\n}\n\nvar Direction;\n\n(function (Direction) {\n Direction[Direction[\"Forward\"] = 1] = \"Forward\";\n Direction[Direction[\"Backward\"] = -1] = \"Backward\";\n})(Direction || (Direction = {}));\n\nfunction isDocumentScrollingElement(element) {\n if (!canUseDOM || !element) {\n return false;\n }\n\n return element === document.scrollingElement;\n}\n\nfunction getScrollPosition(scrollingContainer) {\n const minScroll = {\n x: 0,\n y: 0\n };\n const dimensions = isDocumentScrollingElement(scrollingContainer) ? {\n height: window.innerHeight,\n width: window.innerWidth\n } : {\n height: scrollingContainer.clientHeight,\n width: scrollingContainer.clientWidth\n };\n const maxScroll = {\n x: scrollingContainer.scrollWidth - dimensions.width,\n y: scrollingContainer.scrollHeight - dimensions.height\n };\n const isTop = scrollingContainer.scrollTop <= minScroll.y;\n const isLeft = scrollingContainer.scrollLeft <= minScroll.x;\n const isBottom = scrollingContainer.scrollTop >= maxScroll.y;\n const isRight = scrollingContainer.scrollLeft >= maxScroll.x;\n return {\n isTop,\n isLeft,\n isBottom,\n isRight,\n maxScroll,\n minScroll\n };\n}\n\nconst defaultThreshold = {\n x: 0.2,\n y: 0.2\n};\nfunction getScrollDirectionAndSpeed(scrollContainer, scrollContainerRect, _ref, acceleration, thresholdPercentage) {\n let {\n top,\n left,\n right,\n bottom\n } = _ref;\n\n if (acceleration === void 0) {\n acceleration = 10;\n }\n\n if (thresholdPercentage === void 0) {\n thresholdPercentage = defaultThreshold;\n }\n\n const {\n isTop,\n isBottom,\n isLeft,\n isRight\n } = getScrollPosition(scrollContainer);\n const direction = {\n x: 0,\n y: 0\n };\n const speed = {\n x: 0,\n y: 0\n };\n const threshold = {\n height: scrollContainerRect.height * thresholdPercentage.y,\n width: scrollContainerRect.width * thresholdPercentage.x\n };\n\n if (!isTop && top <= scrollContainerRect.top + threshold.height) {\n // Scroll Up\n direction.y = Direction.Backward;\n speed.y = acceleration * Math.abs((scrollContainerRect.top + threshold.height - top) / threshold.height);\n } else if (!isBottom && bottom >= scrollContainerRect.bottom - threshold.height) {\n // Scroll Down\n direction.y = Direction.Forward;\n speed.y = acceleration * Math.abs((scrollContainerRect.bottom - threshold.height - bottom) / threshold.height);\n }\n\n if (!isRight && right >= scrollContainerRect.right - threshold.width) {\n // Scroll Right\n direction.x = Direction.Forward;\n speed.x = acceleration * Math.abs((scrollContainerRect.right - threshold.width - right) / threshold.width);\n } else if (!isLeft && left <= scrollContainerRect.left + threshold.width) {\n // Scroll Left\n direction.x = Direction.Backward;\n speed.x = acceleration * Math.abs((scrollContainerRect.left + threshold.width - left) / threshold.width);\n }\n\n return {\n direction,\n speed\n };\n}\n\nfunction getScrollElementRect(element) {\n if (element === document.scrollingElement) {\n const {\n innerWidth,\n innerHeight\n } = window;\n return {\n top: 0,\n left: 0,\n right: innerWidth,\n bottom: innerHeight,\n width: innerWidth,\n height: innerHeight\n };\n }\n\n const {\n top,\n left,\n right,\n bottom\n } = element.getBoundingClientRect();\n return {\n top,\n left,\n right,\n bottom,\n width: element.clientWidth,\n height: element.clientHeight\n };\n}\n\nfunction getScrollOffsets(scrollableAncestors) {\n return scrollableAncestors.reduce((acc, node) => {\n return add(acc, getScrollCoordinates(node));\n }, defaultCoordinates);\n}\nfunction getScrollXOffset(scrollableAncestors) {\n return scrollableAncestors.reduce((acc, node) => {\n return acc + getScrollXCoordinate(node);\n }, 0);\n}\nfunction getScrollYOffset(scrollableAncestors) {\n return scrollableAncestors.reduce((acc, node) => {\n return acc + getScrollYCoordinate(node);\n }, 0);\n}\n\nfunction scrollIntoViewIfNeeded(element, measure) {\n if (measure === void 0) {\n measure = getClientRect;\n }\n\n if (!element) {\n return;\n }\n\n const {\n top,\n left,\n bottom,\n right\n } = measure(element);\n const firstScrollableAncestor = getFirstScrollableAncestor(element);\n\n if (!firstScrollableAncestor) {\n return;\n }\n\n if (bottom <= 0 || right <= 0 || top >= window.innerHeight || left >= window.innerWidth) {\n element.scrollIntoView({\n block: 'center',\n inline: 'center'\n });\n }\n}\n\nconst properties = [['x', ['left', 'right'], getScrollXOffset], ['y', ['top', 'bottom'], getScrollYOffset]];\nclass Rect {\n constructor(rect, element) {\n this.rect = void 0;\n this.width = void 0;\n this.height = void 0;\n this.top = void 0;\n this.bottom = void 0;\n this.right = void 0;\n this.left = void 0;\n const scrollableAncestors = getScrollableAncestors(element);\n const scrollOffsets = getScrollOffsets(scrollableAncestors);\n this.rect = { ...rect\n };\n this.width = rect.width;\n this.height = rect.height;\n\n for (const [axis, keys, getScrollOffset] of properties) {\n for (const key of keys) {\n Object.defineProperty(this, key, {\n get: () => {\n const currentOffsets = getScrollOffset(scrollableAncestors);\n const scrollOffsetsDeltla = scrollOffsets[axis] - currentOffsets;\n return this.rect[key] + scrollOffsetsDeltla;\n },\n enumerable: true\n });\n }\n }\n\n Object.defineProperty(this, 'rect', {\n enumerable: false\n });\n }\n\n}\n\nclass Listeners {\n constructor(target) {\n this.target = void 0;\n this.listeners = [];\n\n this.removeAll = () => {\n this.listeners.forEach(listener => {\n var _this$target;\n\n return (_this$target = this.target) == null ? void 0 : _this$target.removeEventListener(...listener);\n });\n };\n\n this.target = target;\n }\n\n add(eventName, handler, options) {\n var _this$target2;\n\n (_this$target2 = this.target) == null ? void 0 : _this$target2.addEventListener(eventName, handler, options);\n this.listeners.push([eventName, handler, options]);\n }\n\n}\n\nfunction getEventListenerTarget(target) {\n // If the `event.target` element is removed from the document events will still be targeted\n // at it, and hence won't always bubble up to the window or document anymore.\n // If there is any risk of an element being removed while it is being dragged,\n // the best practice is to attach the event listeners directly to the target.\n // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget\n const {\n EventTarget\n } = getWindow(target);\n return target instanceof EventTarget ? target : getOwnerDocument(target);\n}\n\nfunction hasExceededDistance(delta, measurement) {\n const dx = Math.abs(delta.x);\n const dy = Math.abs(delta.y);\n\n if (typeof measurement === 'number') {\n return Math.sqrt(dx ** 2 + dy ** 2) > measurement;\n }\n\n if ('x' in measurement && 'y' in measurement) {\n return dx > measurement.x && dy > measurement.y;\n }\n\n if ('x' in measurement) {\n return dx > measurement.x;\n }\n\n if ('y' in measurement) {\n return dy > measurement.y;\n }\n\n return false;\n}\n\nvar EventName;\n\n(function (EventName) {\n EventName[\"Click\"] = \"click\";\n EventName[\"DragStart\"] = \"dragstart\";\n EventName[\"Keydown\"] = \"keydown\";\n EventName[\"ContextMenu\"] = \"contextmenu\";\n EventName[\"Resize\"] = \"resize\";\n EventName[\"SelectionChange\"] = \"selectionchange\";\n EventName[\"VisibilityChange\"] = \"visibilitychange\";\n})(EventName || (EventName = {}));\n\nfunction preventDefault(event) {\n event.preventDefault();\n}\nfunction stopPropagation(event) {\n event.stopPropagation();\n}\n\nvar KeyboardCode;\n\n(function (KeyboardCode) {\n KeyboardCode[\"Space\"] = \"Space\";\n KeyboardCode[\"Down\"] = \"ArrowDown\";\n KeyboardCode[\"Right\"] = \"ArrowRight\";\n KeyboardCode[\"Left\"] = \"ArrowLeft\";\n KeyboardCode[\"Up\"] = \"ArrowUp\";\n KeyboardCode[\"Esc\"] = \"Escape\";\n KeyboardCode[\"Enter\"] = \"Enter\";\n KeyboardCode[\"Tab\"] = \"Tab\";\n})(KeyboardCode || (KeyboardCode = {}));\n\nconst defaultKeyboardCodes = {\n start: [KeyboardCode.Space, KeyboardCode.Enter],\n cancel: [KeyboardCode.Esc],\n end: [KeyboardCode.Space, KeyboardCode.Enter, KeyboardCode.Tab]\n};\nconst defaultKeyboardCoordinateGetter = (event, _ref) => {\n let {\n currentCoordinates\n } = _ref;\n\n switch (event.code) {\n case KeyboardCode.Right:\n return { ...currentCoordinates,\n x: currentCoordinates.x + 25\n };\n\n case KeyboardCode.Left:\n return { ...currentCoordinates,\n x: currentCoordinates.x - 25\n };\n\n case KeyboardCode.Down:\n return { ...currentCoordinates,\n y: currentCoordinates.y + 25\n };\n\n case KeyboardCode.Up:\n return { ...currentCoordinates,\n y: currentCoordinates.y - 25\n };\n }\n\n return undefined;\n};\n\nclass KeyboardSensor {\n constructor(props) {\n this.props = void 0;\n this.autoScrollEnabled = false;\n this.referenceCoordinates = void 0;\n this.listeners = void 0;\n this.windowListeners = void 0;\n this.props = props;\n const {\n event: {\n target\n }\n } = props;\n this.props = props;\n this.listeners = new Listeners(getOwnerDocument(target));\n this.windowListeners = new Listeners(getWindow(target));\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n this.attach();\n }\n\n attach() {\n this.handleStart();\n this.windowListeners.add(EventName.Resize, this.handleCancel);\n this.windowListeners.add(EventName.VisibilityChange, this.handleCancel);\n setTimeout(() => this.listeners.add(EventName.Keydown, this.handleKeyDown));\n }\n\n handleStart() {\n const {\n activeNode,\n onStart\n } = this.props;\n const node = activeNode.node.current;\n\n if (node) {\n scrollIntoViewIfNeeded(node);\n }\n\n onStart(defaultCoordinates);\n }\n\n handleKeyDown(event) {\n if (isKeyboardEvent(event)) {\n const {\n active,\n context,\n options\n } = this.props;\n const {\n keyboardCodes = defaultKeyboardCodes,\n coordinateGetter = defaultKeyboardCoordinateGetter,\n scrollBehavior = 'smooth'\n } = options;\n const {\n code\n } = event;\n\n if (keyboardCodes.end.includes(code)) {\n this.handleEnd(event);\n return;\n }\n\n if (keyboardCodes.cancel.includes(code)) {\n this.handleCancel(event);\n return;\n }\n\n const {\n collisionRect\n } = context.current;\n const currentCoordinates = collisionRect ? {\n x: collisionRect.left,\n y: collisionRect.top\n } : defaultCoordinates;\n\n if (!this.referenceCoordinates) {\n this.referenceCoordinates = currentCoordinates;\n }\n\n const newCoordinates = coordinateGetter(event, {\n active,\n context: context.current,\n currentCoordinates\n });\n\n if (newCoordinates) {\n const coordinatesDelta = subtract(newCoordinates, currentCoordinates);\n const scrollDelta = {\n x: 0,\n y: 0\n };\n const {\n scrollableAncestors\n } = context.current;\n\n for (const scrollContainer of scrollableAncestors) {\n const direction = event.code;\n const {\n isTop,\n isRight,\n isLeft,\n isBottom,\n maxScroll,\n minScroll\n } = getScrollPosition(scrollContainer);\n const scrollElementRect = getScrollElementRect(scrollContainer);\n const clampedCoordinates = {\n x: Math.min(direction === KeyboardCode.Right ? scrollElementRect.right - scrollElementRect.width / 2 : scrollElementRect.right, Math.max(direction === KeyboardCode.Right ? scrollElementRect.left : scrollElementRect.left + scrollElementRect.width / 2, newCoordinates.x)),\n y: Math.min(direction === KeyboardCode.Down ? scrollElementRect.bottom - scrollElementRect.height / 2 : scrollElementRect.bottom, Math.max(direction === KeyboardCode.Down ? scrollElementRect.top : scrollElementRect.top + scrollElementRect.height / 2, newCoordinates.y))\n };\n const canScrollX = direction === KeyboardCode.Right && !isRight || direction === KeyboardCode.Left && !isLeft;\n const canScrollY = direction === KeyboardCode.Down && !isBottom || direction === KeyboardCode.Up && !isTop;\n\n if (canScrollX && clampedCoordinates.x !== newCoordinates.x) {\n const newScrollCoordinates = scrollContainer.scrollLeft + coordinatesDelta.x;\n const canScrollToNewCoordinates = direction === KeyboardCode.Right && newScrollCoordinates <= maxScroll.x || direction === KeyboardCode.Left && newScrollCoordinates >= minScroll.x;\n\n if (canScrollToNewCoordinates && !coordinatesDelta.y) {\n // We don't need to update coordinates, the scroll adjustment alone will trigger\n // logic to auto-detect the new container we are over\n scrollContainer.scrollTo({\n left: newScrollCoordinates,\n behavior: scrollBehavior\n });\n return;\n }\n\n if (canScrollToNewCoordinates) {\n scrollDelta.x = scrollContainer.scrollLeft - newScrollCoordinates;\n } else {\n scrollDelta.x = direction === KeyboardCode.Right ? scrollContainer.scrollLeft - maxScroll.x : scrollContainer.scrollLeft - minScroll.x;\n }\n\n if (scrollDelta.x) {\n scrollContainer.scrollBy({\n left: -scrollDelta.x,\n behavior: scrollBehavior\n });\n }\n\n break;\n } else if (canScrollY && clampedCoordinates.y !== newCoordinates.y) {\n const newScrollCoordinates = scrollContainer.scrollTop + coordinatesDelta.y;\n const canScrollToNewCoordinates = direction === KeyboardCode.Down && newScrollCoordinates <= maxScroll.y || direction === KeyboardCode.Up && newScrollCoordinates >= minScroll.y;\n\n if (canScrollToNewCoordinates && !coordinatesDelta.x) {\n // We don't need to update coordinates, the scroll adjustment alone will trigger\n // logic to auto-detect the new container we are over\n scrollContainer.scrollTo({\n top: newScrollCoordinates,\n behavior: scrollBehavior\n });\n return;\n }\n\n if (canScrollToNewCoordinates) {\n scrollDelta.y = scrollContainer.scrollTop - newScrollCoordinates;\n } else {\n scrollDelta.y = direction === KeyboardCode.Down ? scrollContainer.scrollTop - maxScroll.y : scrollContainer.scrollTop - minScroll.y;\n }\n\n if (scrollDelta.y) {\n scrollContainer.scrollBy({\n top: -scrollDelta.y,\n behavior: scrollBehavior\n });\n }\n\n break;\n }\n }\n\n this.handleMove(event, add(subtract(newCoordinates, this.referenceCoordinates), scrollDelta));\n }\n }\n }\n\n handleMove(event, coordinates) {\n const {\n onMove\n } = this.props;\n event.preventDefault();\n onMove(coordinates);\n }\n\n handleEnd(event) {\n const {\n onEnd\n } = this.props;\n event.preventDefault();\n this.detach();\n onEnd();\n }\n\n handleCancel(event) {\n const {\n onCancel\n } = this.props;\n event.preventDefault();\n this.detach();\n onCancel();\n }\n\n detach() {\n this.listeners.removeAll();\n this.windowListeners.removeAll();\n }\n\n}\nKeyboardSensor.activators = [{\n eventName: 'onKeyDown',\n handler: (event, _ref, _ref2) => {\n let {\n keyboardCodes = defaultKeyboardCodes,\n onActivation\n } = _ref;\n let {\n active\n } = _ref2;\n const {\n code\n } = event.nativeEvent;\n\n if (keyboardCodes.start.includes(code)) {\n const activator = active.activatorNode.current;\n\n if (activator && event.target !== activator) {\n return false;\n }\n\n event.preventDefault();\n onActivation == null ? void 0 : onActivation({\n event: event.nativeEvent\n });\n return true;\n }\n\n return false;\n }\n}];\n\nfunction isDistanceConstraint(constraint) {\n return Boolean(constraint && 'distance' in constraint);\n}\n\nfunction isDelayConstraint(constraint) {\n return Boolean(constraint && 'delay' in constraint);\n}\n\nclass AbstractPointerSensor {\n constructor(props, events, listenerTarget) {\n var _getEventCoordinates;\n\n if (listenerTarget === void 0) {\n listenerTarget = getEventListenerTarget(props.event.target);\n }\n\n this.props = void 0;\n this.events = void 0;\n this.autoScrollEnabled = true;\n this.document = void 0;\n this.activated = false;\n this.initialCoordinates = void 0;\n this.timeoutId = null;\n this.listeners = void 0;\n this.documentListeners = void 0;\n this.windowListeners = void 0;\n this.props = props;\n this.events = events;\n const {\n event\n } = props;\n const {\n target\n } = event;\n this.props = props;\n this.events = events;\n this.document = getOwnerDocument(target);\n this.documentListeners = new Listeners(this.document);\n this.listeners = new Listeners(listenerTarget);\n this.windowListeners = new Listeners(getWindow(target));\n this.initialCoordinates = (_getEventCoordinates = getEventCoordinates(event)) != null ? _getEventCoordinates : defaultCoordinates;\n this.handleStart = this.handleStart.bind(this);\n this.handleMove = this.handleMove.bind(this);\n this.handleEnd = this.handleEnd.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleKeydown = this.handleKeydown.bind(this);\n this.removeTextSelection = this.removeTextSelection.bind(this);\n this.attach();\n }\n\n attach() {\n const {\n events,\n props: {\n options: {\n activationConstraint,\n bypassActivationConstraint\n }\n }\n } = this;\n this.listeners.add(events.move.name, this.handleMove, {\n passive: false\n });\n this.listeners.add(events.end.name, this.handleEnd);\n\n if (events.cancel) {\n this.listeners.add(events.cancel.name, this.handleCancel);\n }\n\n this.windowListeners.add(EventName.Resize, this.handleCancel);\n this.windowListeners.add(EventName.DragStart, preventDefault);\n this.windowListeners.add(EventName.VisibilityChange, this.handleCancel);\n this.windowListeners.add(EventName.ContextMenu, preventDefault);\n this.documentListeners.add(EventName.Keydown, this.handleKeydown);\n\n if (activationConstraint) {\n if (bypassActivationConstraint != null && bypassActivationConstraint({\n event: this.props.event,\n activeNode: this.props.activeNode,\n options: this.props.options\n })) {\n return this.handleStart();\n }\n\n if (isDelayConstraint(activationConstraint)) {\n this.timeoutId = setTimeout(this.handleStart, activationConstraint.delay);\n this.handlePending(activationConstraint);\n return;\n }\n\n if (isDistanceConstraint(activationConstraint)) {\n this.handlePending(activationConstraint);\n return;\n }\n }\n\n this.handleStart();\n }\n\n detach() {\n this.listeners.removeAll();\n this.windowListeners.removeAll(); // Wait until the next event loop before removing document listeners\n // This is necessary because we listen for `click` and `selection` events on the document\n\n setTimeout(this.documentListeners.removeAll, 50);\n\n if (this.timeoutId !== null) {\n clearTimeout(this.timeoutId);\n this.timeoutId = null;\n }\n }\n\n handlePending(constraint, offset) {\n const {\n active,\n onPending\n } = this.props;\n onPending(active, constraint, this.initialCoordinates, offset);\n }\n\n handleStart() {\n const {\n initialCoordinates\n } = this;\n const {\n onStart\n } = this.props;\n\n if (initialCoordinates) {\n this.activated = true; // Stop propagation of click events once activation constraints are met\n\n this.documentListeners.add(EventName.Click, stopPropagation, {\n capture: true\n }); // Remove any text selection from the document\n\n this.removeTextSelection(); // Prevent further text selection while dragging\n\n this.documentListeners.add(EventName.SelectionChange, this.removeTextSelection);\n onStart(initialCoordinates);\n }\n }\n\n handleMove(event) {\n var _getEventCoordinates2;\n\n const {\n activated,\n initialCoordinates,\n props\n } = this;\n const {\n onMove,\n options: {\n activationConstraint\n }\n } = props;\n\n if (!initialCoordinates) {\n return;\n }\n\n const coordinates = (_getEventCoordinates2 = getEventCoordinates(event)) != null ? _getEventCoordinates2 : defaultCoordinates;\n const delta = subtract(initialCoordinates, coordinates); // Constraint validation\n\n if (!activated && activationConstraint) {\n if (isDistanceConstraint(activationConstraint)) {\n if (activationConstraint.tolerance != null && hasExceededDistance(delta, activationConstraint.tolerance)) {\n return this.handleCancel();\n }\n\n if (hasExceededDistance(delta, activationConstraint.distance)) {\n return this.handleStart();\n }\n }\n\n if (isDelayConstraint(activationConstraint)) {\n if (hasExceededDistance(delta, activationConstraint.tolerance)) {\n return this.handleCancel();\n }\n }\n\n this.handlePending(activationConstraint, delta);\n return;\n }\n\n if (event.cancelable) {\n event.preventDefault();\n }\n\n onMove(coordinates);\n }\n\n handleEnd() {\n const {\n onAbort,\n onEnd\n } = this.props;\n this.detach();\n\n if (!this.activated) {\n onAbort(this.props.active);\n }\n\n onEnd();\n }\n\n handleCancel() {\n const {\n onAbort,\n onCancel\n } = this.props;\n this.detach();\n\n if (!this.activated) {\n onAbort(this.props.active);\n }\n\n onCancel();\n }\n\n handleKeydown(event) {\n if (event.code === KeyboardCode.Esc) {\n this.handleCancel();\n }\n }\n\n removeTextSelection() {\n var _this$document$getSel;\n\n (_this$document$getSel = this.document.getSelection()) == null ? void 0 : _this$document$getSel.removeAllRanges();\n }\n\n}\n\nconst events = {\n cancel: {\n name: 'pointercancel'\n },\n move: {\n name: 'pointermove'\n },\n end: {\n name: 'pointerup'\n }\n};\nclass PointerSensor extends AbstractPointerSensor {\n constructor(props) {\n const {\n event\n } = props; // Pointer events stop firing if the target is unmounted while dragging\n // Therefore we attach listeners to the owner document instead\n\n const listenerTarget = getOwnerDocument(event.target);\n super(props, events, listenerTarget);\n }\n\n}\nPointerSensor.activators = [{\n eventName: 'onPointerDown',\n handler: (_ref, _ref2) => {\n let {\n nativeEvent: event\n } = _ref;\n let {\n onActivation\n } = _ref2;\n\n if (!event.isPrimary || event.button !== 0) {\n return false;\n }\n\n onActivation == null ? void 0 : onActivation({\n event\n });\n return true;\n }\n}];\n\nconst events$1 = {\n move: {\n name: 'mousemove'\n },\n end: {\n name: 'mouseup'\n }\n};\nvar MouseButton;\n\n(function (MouseButton) {\n MouseButton[MouseButton[\"RightClick\"] = 2] = \"RightClick\";\n})(MouseButton || (MouseButton = {}));\n\nclass MouseSensor extends AbstractPointerSensor {\n constructor(props) {\n super(props, events$1, getOwnerDocument(props.event.target));\n }\n\n}\nMouseSensor.activators = [{\n eventName: 'onMouseDown',\n handler: (_ref, _ref2) => {\n let {\n nativeEvent: event\n } = _ref;\n let {\n onActivation\n } = _ref2;\n\n if (event.button === MouseButton.RightClick) {\n return false;\n }\n\n onActivation == null ? void 0 : onActivation({\n event\n });\n return true;\n }\n}];\n\nconst events$2 = {\n cancel: {\n name: 'touchcancel'\n },\n move: {\n name: 'touchmove'\n },\n end: {\n name: 'touchend'\n }\n};\nclass TouchSensor extends AbstractPointerSensor {\n constructor(props) {\n super(props, events$2);\n }\n\n static setup() {\n // Adding a non-capture and non-passive `touchmove` listener in order\n // to force `event.preventDefault()` calls to work in dynamically added\n // touchmove event handlers. This is required for iOS Safari.\n window.addEventListener(events$2.move.name, noop, {\n capture: false,\n passive: false\n });\n return function teardown() {\n window.removeEventListener(events$2.move.name, noop);\n }; // We create a new handler because the teardown function of another sensor\n // could remove our event listener if we use a referentially equal listener.\n\n function noop() {}\n }\n\n}\nTouchSensor.activators = [{\n eventName: 'onTouchStart',\n handler: (_ref, _ref2) => {\n let {\n nativeEvent: event\n } = _ref;\n let {\n onActivation\n } = _ref2;\n const {\n touches\n } = event;\n\n if (touches.length > 1) {\n return false;\n }\n\n onActivation == null ? void 0 : onActivation({\n event\n });\n return true;\n }\n}];\n\nvar AutoScrollActivator;\n\n(function (AutoScrollActivator) {\n AutoScrollActivator[AutoScrollActivator[\"Pointer\"] = 0] = \"Pointer\";\n AutoScrollActivator[AutoScrollActivator[\"DraggableRect\"] = 1] = \"DraggableRect\";\n})(AutoScrollActivator || (AutoScrollActivator = {}));\n\nvar TraversalOrder;\n\n(function (TraversalOrder) {\n TraversalOrder[TraversalOrder[\"TreeOrder\"] = 0] = \"TreeOrder\";\n TraversalOrder[TraversalOrder[\"ReversedTreeOrder\"] = 1] = \"ReversedTreeOrder\";\n})(TraversalOrder || (TraversalOrder = {}));\n\nfunction useAutoScroller(_ref) {\n let {\n acceleration,\n activator = AutoScrollActivator.Pointer,\n canScroll,\n draggingRect,\n enabled,\n interval = 5,\n order = TraversalOrder.TreeOrder,\n pointerCoordinates,\n scrollableAncestors,\n scrollableAncestorRects,\n delta,\n threshold\n } = _ref;\n const scrollIntent = useScrollIntent({\n delta,\n disabled: !enabled\n });\n const [setAutoScrollInterval, clearAutoScrollInterval] = useInterval();\n const scrollSpeed = useRef({\n x: 0,\n y: 0\n });\n const scrollDirection = useRef({\n x: 0,\n y: 0\n });\n const rect = useMemo(() => {\n switch (activator) {\n case AutoScrollActivator.Pointer:\n return pointerCoordinates ? {\n top: pointerCoordinates.y,\n bottom: pointerCoordinates.y,\n left: pointerCoordinates.x,\n right: pointerCoordinates.x\n } : null;\n\n case AutoScrollActivator.DraggableRect:\n return draggingRect;\n }\n }, [activator, draggingRect, pointerCoordinates]);\n const scrollContainerRef = useRef(null);\n const autoScroll = useCallback(() => {\n const scrollContainer = scrollContainerRef.current;\n\n if (!scrollContainer) {\n return;\n }\n\n const scrollLeft = scrollSpeed.current.x * scrollDirection.current.x;\n const scrollTop = scrollSpeed.current.y * scrollDirection.current.y;\n scrollContainer.scrollBy(scrollLeft, scrollTop);\n }, []);\n const sortedScrollableAncestors = useMemo(() => order === TraversalOrder.TreeOrder ? [...scrollableAncestors].reverse() : scrollableAncestors, [order, scrollableAncestors]);\n useEffect(() => {\n if (!enabled || !scrollableAncestors.length || !rect) {\n clearAutoScrollInterval();\n return;\n }\n\n for (const scrollContainer of sortedScrollableAncestors) {\n if ((canScroll == null ? void 0 : canScroll(scrollContainer)) === false) {\n continue;\n }\n\n const index = scrollableAncestors.indexOf(scrollContainer);\n const scrollContainerRect = scrollableAncestorRects[index];\n\n if (!scrollContainerRect) {\n continue;\n }\n\n const {\n direction,\n speed\n } = getScrollDirectionAndSpeed(scrollContainer, scrollContainerRect, rect, acceleration, threshold);\n\n for (const axis of ['x', 'y']) {\n if (!scrollIntent[axis][direction[axis]]) {\n speed[axis] = 0;\n direction[axis] = 0;\n }\n }\n\n if (speed.x > 0 || speed.y > 0) {\n clearAutoScrollInterval();\n scrollContainerRef.current = scrollContainer;\n setAutoScrollInterval(autoScroll, interval);\n scrollSpeed.current = speed;\n scrollDirection.current = direction;\n return;\n }\n }\n\n scrollSpeed.current = {\n x: 0,\n y: 0\n };\n scrollDirection.current = {\n x: 0,\n y: 0\n };\n clearAutoScrollInterval();\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [acceleration, autoScroll, canScroll, clearAutoScrollInterval, enabled, interval, // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(rect), // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(scrollIntent), setAutoScrollInterval, scrollableAncestors, sortedScrollableAncestors, scrollableAncestorRects, // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(threshold)]);\n}\nconst defaultScrollIntent = {\n x: {\n [Direction.Backward]: false,\n [Direction.Forward]: false\n },\n y: {\n [Direction.Backward]: false,\n [Direction.Forward]: false\n }\n};\n\nfunction useScrollIntent(_ref2) {\n let {\n delta,\n disabled\n } = _ref2;\n const previousDelta = usePrevious(delta);\n return useLazyMemo(previousIntent => {\n if (disabled || !previousDelta || !previousIntent) {\n // Reset scroll intent tracking when auto-scrolling is disabled\n return defaultScrollIntent;\n }\n\n const direction = {\n x: Math.sign(delta.x - previousDelta.x),\n y: Math.sign(delta.y - previousDelta.y)\n }; // Keep track of the user intent to scroll in each direction for both axis\n\n return {\n x: {\n [Direction.Backward]: previousIntent.x[Direction.Backward] || direction.x === -1,\n [Direction.Forward]: previousIntent.x[Direction.Forward] || direction.x === 1\n },\n y: {\n [Direction.Backward]: previousIntent.y[Direction.Backward] || direction.y === -1,\n [Direction.Forward]: previousIntent.y[Direction.Forward] || direction.y === 1\n }\n };\n }, [disabled, delta, previousDelta]);\n}\n\nfunction useCachedNode(draggableNodes, id) {\n const draggableNode = id != null ? draggableNodes.get(id) : undefined;\n const node = draggableNode ? draggableNode.node.current : null;\n return useLazyMemo(cachedNode => {\n var _ref;\n\n if (id == null) {\n return null;\n } // In some cases, the draggable node can unmount while dragging\n // This is the case for virtualized lists. In those situations,\n // we fall back to the last known value for that node.\n\n\n return (_ref = node != null ? node : cachedNode) != null ? _ref : null;\n }, [node, id]);\n}\n\nfunction useCombineActivators(sensors, getSyntheticHandler) {\n return useMemo(() => sensors.reduce((accumulator, sensor) => {\n const {\n sensor: Sensor\n } = sensor;\n const sensorActivators = Sensor.activators.map(activator => ({\n eventName: activator.eventName,\n handler: getSyntheticHandler(activator.handler, sensor)\n }));\n return [...accumulator, ...sensorActivators];\n }, []), [sensors, getSyntheticHandler]);\n}\n\nvar MeasuringStrategy;\n\n(function (MeasuringStrategy) {\n MeasuringStrategy[MeasuringStrategy[\"Always\"] = 0] = \"Always\";\n MeasuringStrategy[MeasuringStrategy[\"BeforeDragging\"] = 1] = \"BeforeDragging\";\n MeasuringStrategy[MeasuringStrategy[\"WhileDragging\"] = 2] = \"WhileDragging\";\n})(MeasuringStrategy || (MeasuringStrategy = {}));\n\nvar MeasuringFrequency;\n\n(function (MeasuringFrequency) {\n MeasuringFrequency[\"Optimized\"] = \"optimized\";\n})(MeasuringFrequency || (MeasuringFrequency = {}));\n\nconst defaultValue = /*#__PURE__*/new Map();\nfunction useDroppableMeasuring(containers, _ref) {\n let {\n dragging,\n dependencies,\n config\n } = _ref;\n const [queue, setQueue] = useState(null);\n const {\n frequency,\n measure,\n strategy\n } = config;\n const containersRef = useRef(containers);\n const disabled = isDisabled();\n const disabledRef = useLatestValue(disabled);\n const measureDroppableContainers = useCallback(function (ids) {\n if (ids === void 0) {\n ids = [];\n }\n\n if (disabledRef.current) {\n return;\n }\n\n setQueue(value => {\n if (value === null) {\n return ids;\n }\n\n return value.concat(ids.filter(id => !value.includes(id)));\n });\n }, [disabledRef]);\n const timeoutId = useRef(null);\n const droppableRects = useLazyMemo(previousValue => {\n if (disabled && !dragging) {\n return defaultValue;\n }\n\n if (!previousValue || previousValue === defaultValue || containersRef.current !== containers || queue != null) {\n const map = new Map();\n\n for (let container of containers) {\n if (!container) {\n continue;\n }\n\n if (queue && queue.length > 0 && !queue.includes(container.id) && container.rect.current) {\n // This container does not need to be re-measured\n map.set(container.id, container.rect.current);\n continue;\n }\n\n const node = container.node.current;\n const rect = node ? new Rect(measure(node), node) : null;\n container.rect.current = rect;\n\n if (rect) {\n map.set(container.id, rect);\n }\n }\n\n return map;\n }\n\n return previousValue;\n }, [containers, queue, dragging, disabled, measure]);\n useEffect(() => {\n containersRef.current = containers;\n }, [containers]);\n useEffect(() => {\n if (disabled) {\n return;\n }\n\n measureDroppableContainers();\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [dragging, disabled]);\n useEffect(() => {\n if (queue && queue.length > 0) {\n setQueue(null);\n }\n }, //eslint-disable-next-line react-hooks/exhaustive-deps\n [JSON.stringify(queue)]);\n useEffect(() => {\n if (disabled || typeof frequency !== 'number' || timeoutId.current !== null) {\n return;\n }\n\n timeoutId.current = setTimeout(() => {\n measureDroppableContainers();\n timeoutId.current = null;\n }, frequency);\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [frequency, disabled, measureDroppableContainers, ...dependencies]);\n return {\n droppableRects,\n measureDroppableContainers,\n measuringScheduled: queue != null\n };\n\n function isDisabled() {\n switch (strategy) {\n case MeasuringStrategy.Always:\n return false;\n\n case MeasuringStrategy.BeforeDragging:\n return dragging;\n\n default:\n return !dragging;\n }\n }\n}\n\nfunction useInitialValue(value, computeFn) {\n return useLazyMemo(previousValue => {\n if (!value) {\n return null;\n }\n\n if (previousValue) {\n return previousValue;\n }\n\n return typeof computeFn === 'function' ? computeFn(value) : value;\n }, [computeFn, value]);\n}\n\nfunction useInitialRect(node, measure) {\n return useInitialValue(node, measure);\n}\n\n/**\r\n * Returns a new MutationObserver instance.\r\n * If `MutationObserver` is undefined in the execution environment, returns `undefined`.\r\n */\n\nfunction useMutationObserver(_ref) {\n let {\n callback,\n disabled\n } = _ref;\n const handleMutations = useEvent(callback);\n const mutationObserver = useMemo(() => {\n if (disabled || typeof window === 'undefined' || typeof window.MutationObserver === 'undefined') {\n return undefined;\n }\n\n const {\n MutationObserver\n } = window;\n return new MutationObserver(handleMutations);\n }, [handleMutations, disabled]);\n useEffect(() => {\n return () => mutationObserver == null ? void 0 : mutationObserver.disconnect();\n }, [mutationObserver]);\n return mutationObserver;\n}\n\n/**\r\n * Returns a new ResizeObserver instance bound to the `onResize` callback.\r\n * If `ResizeObserver` is undefined in the execution environment, returns `undefined`.\r\n */\n\nfunction useResizeObserver(_ref) {\n let {\n callback,\n disabled\n } = _ref;\n const handleResize = useEvent(callback);\n const resizeObserver = useMemo(() => {\n if (disabled || typeof window === 'undefined' || typeof window.ResizeObserver === 'undefined') {\n return undefined;\n }\n\n const {\n ResizeObserver\n } = window;\n return new ResizeObserver(handleResize);\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [disabled]);\n useEffect(() => {\n return () => resizeObserver == null ? void 0 : resizeObserver.disconnect();\n }, [resizeObserver]);\n return resizeObserver;\n}\n\nfunction defaultMeasure(element) {\n return new Rect(getClientRect(element), element);\n}\n\nfunction useRect(element, measure, fallbackRect) {\n if (measure === void 0) {\n measure = defaultMeasure;\n }\n\n const [rect, setRect] = useState(null);\n\n function measureRect() {\n setRect(currentRect => {\n if (!element) {\n return null;\n }\n\n if (element.isConnected === false) {\n var _ref;\n\n // Fall back to last rect we measured if the element is\n // no longer connected to the DOM.\n return (_ref = currentRect != null ? currentRect : fallbackRect) != null ? _ref : null;\n }\n\n const newRect = measure(element);\n\n if (JSON.stringify(currentRect) === JSON.stringify(newRect)) {\n return currentRect;\n }\n\n return newRect;\n });\n }\n\n const mutationObserver = useMutationObserver({\n callback(records) {\n if (!element) {\n return;\n }\n\n for (const record of records) {\n const {\n type,\n target\n } = record;\n\n if (type === 'childList' && target instanceof HTMLElement && target.contains(element)) {\n measureRect();\n break;\n }\n }\n }\n\n });\n const resizeObserver = useResizeObserver({\n callback: measureRect\n });\n useIsomorphicLayoutEffect(() => {\n measureRect();\n\n if (element) {\n resizeObserver == null ? void 0 : resizeObserver.observe(element);\n mutationObserver == null ? void 0 : mutationObserver.observe(document.body, {\n childList: true,\n subtree: true\n });\n } else {\n resizeObserver == null ? void 0 : resizeObserver.disconnect();\n mutationObserver == null ? void 0 : mutationObserver.disconnect();\n }\n }, [element]);\n return rect;\n}\n\nfunction useRectDelta(rect) {\n const initialRect = useInitialValue(rect);\n return getRectDelta(rect, initialRect);\n}\n\nconst defaultValue$1 = [];\nfunction useScrollableAncestors(node) {\n const previousNode = useRef(node);\n const ancestors = useLazyMemo(previousValue => {\n if (!node) {\n return defaultValue$1;\n }\n\n if (previousValue && previousValue !== defaultValue$1 && node && previousNode.current && node.parentNode === previousNode.current.parentNode) {\n return previousValue;\n }\n\n return getScrollableAncestors(node);\n }, [node]);\n useEffect(() => {\n previousNode.current = node;\n }, [node]);\n return ancestors;\n}\n\nfunction useScrollOffsets(elements) {\n const [scrollCoordinates, setScrollCoordinates] = useState(null);\n const prevElements = useRef(elements); // To-do: Throttle the handleScroll callback\n\n const handleScroll = useCallback(event => {\n const scrollingElement = getScrollableElement(event.target);\n\n if (!scrollingElement) {\n return;\n }\n\n setScrollCoordinates(scrollCoordinates => {\n if (!scrollCoordinates) {\n return null;\n }\n\n scrollCoordinates.set(scrollingElement, getScrollCoordinates(scrollingElement));\n return new Map(scrollCoordinates);\n });\n }, []);\n useEffect(() => {\n const previousElements = prevElements.current;\n\n if (elements !== previousElements) {\n cleanup(previousElements);\n const entries = elements.map(element => {\n const scrollableElement = getScrollableElement(element);\n\n if (scrollableElement) {\n scrollableElement.addEventListener('scroll', handleScroll, {\n passive: true\n });\n return [scrollableElement, getScrollCoordinates(scrollableElement)];\n }\n\n return null;\n }).filter(entry => entry != null);\n setScrollCoordinates(entries.length ? new Map(entries) : null);\n prevElements.current = elements;\n }\n\n return () => {\n cleanup(elements);\n cleanup(previousElements);\n };\n\n function cleanup(elements) {\n elements.forEach(element => {\n const scrollableElement = getScrollableElement(element);\n scrollableElement == null ? void 0 : scrollableElement.removeEventListener('scroll', handleScroll);\n });\n }\n }, [handleScroll, elements]);\n return useMemo(() => {\n if (elements.length) {\n return scrollCoordinates ? Array.from(scrollCoordinates.values()).reduce((acc, coordinates) => add(acc, coordinates), defaultCoordinates) : getScrollOffsets(elements);\n }\n\n return defaultCoordinates;\n }, [elements, scrollCoordinates]);\n}\n\nfunction useScrollOffsetsDelta(scrollOffsets, dependencies) {\n if (dependencies === void 0) {\n dependencies = [];\n }\n\n const initialScrollOffsets = useRef(null);\n useEffect(() => {\n initialScrollOffsets.current = null;\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n dependencies);\n useEffect(() => {\n const hasScrollOffsets = scrollOffsets !== defaultCoordinates;\n\n if (hasScrollOffsets && !initialScrollOffsets.current) {\n initialScrollOffsets.current = scrollOffsets;\n }\n\n if (!hasScrollOffsets && initialScrollOffsets.current) {\n initialScrollOffsets.current = null;\n }\n }, [scrollOffsets]);\n return initialScrollOffsets.current ? subtract(scrollOffsets, initialScrollOffsets.current) : defaultCoordinates;\n}\n\nfunction useSensorSetup(sensors) {\n useEffect(() => {\n if (!canUseDOM) {\n return;\n }\n\n const teardownFns = sensors.map(_ref => {\n let {\n sensor\n } = _ref;\n return sensor.setup == null ? void 0 : sensor.setup();\n });\n return () => {\n for (const teardown of teardownFns) {\n teardown == null ? void 0 : teardown();\n }\n };\n }, // TO-DO: Sensors length could theoretically change which would not be a valid dependency\n // eslint-disable-next-line react-hooks/exhaustive-deps\n sensors.map(_ref2 => {\n let {\n sensor\n } = _ref2;\n return sensor;\n }));\n}\n\nfunction useSyntheticListeners(listeners, id) {\n return useMemo(() => {\n return listeners.reduce((acc, _ref) => {\n let {\n eventName,\n handler\n } = _ref;\n\n acc[eventName] = event => {\n handler(event, id);\n };\n\n return acc;\n }, {});\n }, [listeners, id]);\n}\n\nfunction useWindowRect(element) {\n return useMemo(() => element ? getWindowClientRect(element) : null, [element]);\n}\n\nconst defaultValue$2 = [];\nfunction useRects(elements, measure) {\n if (measure === void 0) {\n measure = getClientRect;\n }\n\n const [firstElement] = elements;\n const windowRect = useWindowRect(firstElement ? getWindow(firstElement) : null);\n const [rects, setRects] = useState(defaultValue$2);\n\n function measureRects() {\n setRects(() => {\n if (!elements.length) {\n return defaultValue$2;\n }\n\n return elements.map(element => isDocumentScrollingElement(element) ? windowRect : new Rect(measure(element), element));\n });\n }\n\n const resizeObserver = useResizeObserver({\n callback: measureRects\n });\n useIsomorphicLayoutEffect(() => {\n resizeObserver == null ? void 0 : resizeObserver.disconnect();\n measureRects();\n elements.forEach(element => resizeObserver == null ? void 0 : resizeObserver.observe(element));\n }, [elements]);\n return rects;\n}\n\nfunction getMeasurableNode(node) {\n if (!node) {\n return null;\n }\n\n if (node.children.length > 1) {\n return node;\n }\n\n const firstChild = node.children[0];\n return isHTMLElement(firstChild) ? firstChild : node;\n}\n\nfunction useDragOverlayMeasuring(_ref) {\n let {\n measure\n } = _ref;\n const [rect, setRect] = useState(null);\n const handleResize = useCallback(entries => {\n for (const {\n target\n } of entries) {\n if (isHTMLElement(target)) {\n setRect(rect => {\n const newRect = measure(target);\n return rect ? { ...rect,\n width: newRect.width,\n height: newRect.height\n } : newRect;\n });\n break;\n }\n }\n }, [measure]);\n const resizeObserver = useResizeObserver({\n callback: handleResize\n });\n const handleNodeChange = useCallback(element => {\n const node = getMeasurableNode(element);\n resizeObserver == null ? void 0 : resizeObserver.disconnect();\n\n if (node) {\n resizeObserver == null ? void 0 : resizeObserver.observe(node);\n }\n\n setRect(node ? measure(node) : null);\n }, [measure, resizeObserver]);\n const [nodeRef, setRef] = useNodeRef(handleNodeChange);\n return useMemo(() => ({\n nodeRef,\n rect,\n setRef\n }), [rect, nodeRef, setRef]);\n}\n\nconst defaultSensors = [{\n sensor: PointerSensor,\n options: {}\n}, {\n sensor: KeyboardSensor,\n options: {}\n}];\nconst defaultData = {\n current: {}\n};\nconst defaultMeasuringConfiguration = {\n draggable: {\n measure: getTransformAgnosticClientRect\n },\n droppable: {\n measure: getTransformAgnosticClientRect,\n strategy: MeasuringStrategy.WhileDragging,\n frequency: MeasuringFrequency.Optimized\n },\n dragOverlay: {\n measure: getClientRect\n }\n};\n\nclass DroppableContainersMap extends Map {\n get(id) {\n var _super$get;\n\n return id != null ? (_super$get = super.get(id)) != null ? _super$get : undefined : undefined;\n }\n\n toArray() {\n return Array.from(this.values());\n }\n\n getEnabled() {\n return this.toArray().filter(_ref => {\n let {\n disabled\n } = _ref;\n return !disabled;\n });\n }\n\n getNodeFor(id) {\n var _this$get$node$curren, _this$get;\n\n return (_this$get$node$curren = (_this$get = this.get(id)) == null ? void 0 : _this$get.node.current) != null ? _this$get$node$curren : undefined;\n }\n\n}\n\nconst defaultPublicContext = {\n activatorEvent: null,\n active: null,\n activeNode: null,\n activeNodeRect: null,\n collisions: null,\n containerNodeRect: null,\n draggableNodes: /*#__PURE__*/new Map(),\n droppableRects: /*#__PURE__*/new Map(),\n droppableContainers: /*#__PURE__*/new DroppableContainersMap(),\n over: null,\n dragOverlay: {\n nodeRef: {\n current: null\n },\n rect: null,\n setRef: noop\n },\n scrollableAncestors: [],\n scrollableAncestorRects: [],\n measuringConfiguration: defaultMeasuringConfiguration,\n measureDroppableContainers: noop,\n windowRect: null,\n measuringScheduled: false\n};\nconst defaultInternalContext = {\n activatorEvent: null,\n activators: [],\n active: null,\n activeNodeRect: null,\n ariaDescribedById: {\n draggable: ''\n },\n dispatch: noop,\n draggableNodes: /*#__PURE__*/new Map(),\n over: null,\n measureDroppableContainers: noop\n};\nconst InternalContext = /*#__PURE__*/createContext(defaultInternalContext);\nconst PublicContext = /*#__PURE__*/createContext(defaultPublicContext);\n\nfunction getInitialState() {\n return {\n draggable: {\n active: null,\n initialCoordinates: {\n x: 0,\n y: 0\n },\n nodes: new Map(),\n translate: {\n x: 0,\n y: 0\n }\n },\n droppable: {\n containers: new DroppableContainersMap()\n }\n };\n}\nfunction reducer(state, action) {\n switch (action.type) {\n case Action.DragStart:\n return { ...state,\n draggable: { ...state.draggable,\n initialCoordinates: action.initialCoordinates,\n active: action.active\n }\n };\n\n case Action.DragMove:\n if (state.draggable.active == null) {\n return state;\n }\n\n return { ...state,\n draggable: { ...state.draggable,\n translate: {\n x: action.coordinates.x - state.draggable.initialCoordinates.x,\n y: action.coordinates.y - state.draggable.initialCoordinates.y\n }\n }\n };\n\n case Action.DragEnd:\n case Action.DragCancel:\n return { ...state,\n draggable: { ...state.draggable,\n active: null,\n initialCoordinates: {\n x: 0,\n y: 0\n },\n translate: {\n x: 0,\n y: 0\n }\n }\n };\n\n case Action.RegisterDroppable:\n {\n const {\n element\n } = action;\n const {\n id\n } = element;\n const containers = new DroppableContainersMap(state.droppable.containers);\n containers.set(id, element);\n return { ...state,\n droppable: { ...state.droppable,\n containers\n }\n };\n }\n\n case Action.SetDroppableDisabled:\n {\n const {\n id,\n key,\n disabled\n } = action;\n const element = state.droppable.containers.get(id);\n\n if (!element || key !== element.key) {\n return state;\n }\n\n const containers = new DroppableContainersMap(state.droppable.containers);\n containers.set(id, { ...element,\n disabled\n });\n return { ...state,\n droppable: { ...state.droppable,\n containers\n }\n };\n }\n\n case Action.UnregisterDroppable:\n {\n const {\n id,\n key\n } = action;\n const element = state.droppable.containers.get(id);\n\n if (!element || key !== element.key) {\n return state;\n }\n\n const containers = new DroppableContainersMap(state.droppable.containers);\n containers.delete(id);\n return { ...state,\n droppable: { ...state.droppable,\n containers\n }\n };\n }\n\n default:\n {\n return state;\n }\n }\n}\n\nfunction RestoreFocus(_ref) {\n let {\n disabled\n } = _ref;\n const {\n active,\n activatorEvent,\n draggableNodes\n } = useContext(InternalContext);\n const previousActivatorEvent = usePrevious(activatorEvent);\n const previousActiveId = usePrevious(active == null ? void 0 : active.id); // Restore keyboard focus on the activator node\n\n useEffect(() => {\n if (disabled) {\n return;\n }\n\n if (!activatorEvent && previousActivatorEvent && previousActiveId != null) {\n if (!isKeyboardEvent(previousActivatorEvent)) {\n return;\n }\n\n if (document.activeElement === previousActivatorEvent.target) {\n // No need to restore focus\n return;\n }\n\n const draggableNode = draggableNodes.get(previousActiveId);\n\n if (!draggableNode) {\n return;\n }\n\n const {\n activatorNode,\n node\n } = draggableNode;\n\n if (!activatorNode.current && !node.current) {\n return;\n }\n\n requestAnimationFrame(() => {\n for (const element of [activatorNode.current, node.current]) {\n if (!element) {\n continue;\n }\n\n const focusableNode = findFirstFocusableNode(element);\n\n if (focusableNode) {\n focusableNode.focus();\n break;\n }\n }\n });\n }\n }, [activatorEvent, disabled, draggableNodes, previousActiveId, previousActivatorEvent]);\n return null;\n}\n\nfunction applyModifiers(modifiers, _ref) {\n let {\n transform,\n ...args\n } = _ref;\n return modifiers != null && modifiers.length ? modifiers.reduce((accumulator, modifier) => {\n return modifier({\n transform: accumulator,\n ...args\n });\n }, transform) : transform;\n}\n\nfunction useMeasuringConfiguration(config) {\n return useMemo(() => ({\n draggable: { ...defaultMeasuringConfiguration.draggable,\n ...(config == null ? void 0 : config.draggable)\n },\n droppable: { ...defaultMeasuringConfiguration.droppable,\n ...(config == null ? void 0 : config.droppable)\n },\n dragOverlay: { ...defaultMeasuringConfiguration.dragOverlay,\n ...(config == null ? void 0 : config.dragOverlay)\n }\n }), // eslint-disable-next-line react-hooks/exhaustive-deps\n [config == null ? void 0 : config.draggable, config == null ? void 0 : config.droppable, config == null ? void 0 : config.dragOverlay]);\n}\n\nfunction useLayoutShiftScrollCompensation(_ref) {\n let {\n activeNode,\n measure,\n initialRect,\n config = true\n } = _ref;\n const initialized = useRef(false);\n const {\n x,\n y\n } = typeof config === 'boolean' ? {\n x: config,\n y: config\n } : config;\n useIsomorphicLayoutEffect(() => {\n const disabled = !x && !y;\n\n if (disabled || !activeNode) {\n initialized.current = false;\n return;\n }\n\n if (initialized.current || !initialRect) {\n // Return early if layout shift scroll compensation was already attempted\n // or if there is no initialRect to compare to.\n return;\n } // Get the most up to date node ref for the active draggable\n\n\n const node = activeNode == null ? void 0 : activeNode.node.current;\n\n if (!node || node.isConnected === false) {\n // Return early if there is no attached node ref or if the node is\n // disconnected from the document.\n return;\n }\n\n const rect = measure(node);\n const rectDelta = getRectDelta(rect, initialRect);\n\n if (!x) {\n rectDelta.x = 0;\n }\n\n if (!y) {\n rectDelta.y = 0;\n } // Only perform layout shift scroll compensation once\n\n\n initialized.current = true;\n\n if (Math.abs(rectDelta.x) > 0 || Math.abs(rectDelta.y) > 0) {\n const firstScrollableAncestor = getFirstScrollableAncestor(node);\n\n if (firstScrollableAncestor) {\n firstScrollableAncestor.scrollBy({\n top: rectDelta.y,\n left: rectDelta.x\n });\n }\n }\n }, [activeNode, x, y, initialRect, measure]);\n}\n\nconst ActiveDraggableContext = /*#__PURE__*/createContext({ ...defaultCoordinates,\n scaleX: 1,\n scaleY: 1\n});\nvar Status;\n\n(function (Status) {\n Status[Status[\"Uninitialized\"] = 0] = \"Uninitialized\";\n Status[Status[\"Initializing\"] = 1] = \"Initializing\";\n Status[Status[\"Initialized\"] = 2] = \"Initialized\";\n})(Status || (Status = {}));\n\nconst DndContext = /*#__PURE__*/memo(function DndContext(_ref) {\n var _sensorContext$curren, _dragOverlay$nodeRef$, _dragOverlay$rect, _over$rect;\n\n let {\n id,\n accessibility,\n autoScroll = true,\n children,\n sensors = defaultSensors,\n collisionDetection = rectIntersection,\n measuring,\n modifiers,\n ...props\n } = _ref;\n const store = useReducer(reducer, undefined, getInitialState);\n const [state, dispatch] = store;\n const [dispatchMonitorEvent, registerMonitorListener] = useDndMonitorProvider();\n const [status, setStatus] = useState(Status.Uninitialized);\n const isInitialized = status === Status.Initialized;\n const {\n draggable: {\n active: activeId,\n nodes: draggableNodes,\n translate\n },\n droppable: {\n containers: droppableContainers\n }\n } = state;\n const node = activeId != null ? draggableNodes.get(activeId) : null;\n const activeRects = useRef({\n initial: null,\n translated: null\n });\n const active = useMemo(() => {\n var _node$data;\n\n return activeId != null ? {\n id: activeId,\n // It's possible for the active node to unmount while dragging\n data: (_node$data = node == null ? void 0 : node.data) != null ? _node$data : defaultData,\n rect: activeRects\n } : null;\n }, [activeId, node]);\n const activeRef = useRef(null);\n const [activeSensor, setActiveSensor] = useState(null);\n const [activatorEvent, setActivatorEvent] = useState(null);\n const latestProps = useLatestValue(props, Object.values(props));\n const draggableDescribedById = useUniqueId(\"DndDescribedBy\", id);\n const enabledDroppableContainers = useMemo(() => droppableContainers.getEnabled(), [droppableContainers]);\n const measuringConfiguration = useMeasuringConfiguration(measuring);\n const {\n droppableRects,\n measureDroppableContainers,\n measuringScheduled\n } = useDroppableMeasuring(enabledDroppableContainers, {\n dragging: isInitialized,\n dependencies: [translate.x, translate.y],\n config: measuringConfiguration.droppable\n });\n const activeNode = useCachedNode(draggableNodes, activeId);\n const activationCoordinates = useMemo(() => activatorEvent ? getEventCoordinates(activatorEvent) : null, [activatorEvent]);\n const autoScrollOptions = getAutoScrollerOptions();\n const initialActiveNodeRect = useInitialRect(activeNode, measuringConfiguration.draggable.measure);\n useLayoutShiftScrollCompensation({\n activeNode: activeId != null ? draggableNodes.get(activeId) : null,\n config: autoScrollOptions.layoutShiftCompensation,\n initialRect: initialActiveNodeRect,\n measure: measuringConfiguration.draggable.measure\n });\n const activeNodeRect = useRect(activeNode, measuringConfiguration.draggable.measure, initialActiveNodeRect);\n const containerNodeRect = useRect(activeNode ? activeNode.parentElement : null);\n const sensorContext = useRef({\n activatorEvent: null,\n active: null,\n activeNode,\n collisionRect: null,\n collisions: null,\n droppableRects,\n draggableNodes,\n draggingNode: null,\n draggingNodeRect: null,\n droppableContainers,\n over: null,\n scrollableAncestors: [],\n scrollAdjustedTranslate: null\n });\n const overNode = droppableContainers.getNodeFor((_sensorContext$curren = sensorContext.current.over) == null ? void 0 : _sensorContext$curren.id);\n const dragOverlay = useDragOverlayMeasuring({\n measure: measuringConfiguration.dragOverlay.measure\n }); // Use the rect of the drag overlay if it is mounted\n\n const draggingNode = (_dragOverlay$nodeRef$ = dragOverlay.nodeRef.current) != null ? _dragOverlay$nodeRef$ : activeNode;\n const draggingNodeRect = isInitialized ? (_dragOverlay$rect = dragOverlay.rect) != null ? _dragOverlay$rect : activeNodeRect : null;\n const usesDragOverlay = Boolean(dragOverlay.nodeRef.current && dragOverlay.rect); // The delta between the previous and new position of the draggable node\n // is only relevant when there is no drag overlay\n\n const nodeRectDelta = useRectDelta(usesDragOverlay ? null : activeNodeRect); // Get the window rect of the dragging node\n\n const windowRect = useWindowRect(draggingNode ? getWindow(draggingNode) : null); // Get scrollable ancestors of the dragging node\n\n const scrollableAncestors = useScrollableAncestors(isInitialized ? overNode != null ? overNode : activeNode : null);\n const scrollableAncestorRects = useRects(scrollableAncestors); // Apply modifiers\n\n const modifiedTranslate = applyModifiers(modifiers, {\n transform: {\n x: translate.x - nodeRectDelta.x,\n y: translate.y - nodeRectDelta.y,\n scaleX: 1,\n scaleY: 1\n },\n activatorEvent,\n active,\n activeNodeRect,\n containerNodeRect,\n draggingNodeRect,\n over: sensorContext.current.over,\n overlayNodeRect: dragOverlay.rect,\n scrollableAncestors,\n scrollableAncestorRects,\n windowRect\n });\n const pointerCoordinates = activationCoordinates ? add(activationCoordinates, translate) : null;\n const scrollOffsets = useScrollOffsets(scrollableAncestors); // Represents the scroll delta since dragging was initiated\n\n const scrollAdjustment = useScrollOffsetsDelta(scrollOffsets); // Represents the scroll delta since the last time the active node rect was measured\n\n const activeNodeScrollDelta = useScrollOffsetsDelta(scrollOffsets, [activeNodeRect]);\n const scrollAdjustedTranslate = add(modifiedTranslate, scrollAdjustment);\n const collisionRect = draggingNodeRect ? getAdjustedRect(draggingNodeRect, modifiedTranslate) : null;\n const collisions = active && collisionRect ? collisionDetection({\n active,\n collisionRect,\n droppableRects,\n droppableContainers: enabledDroppableContainers,\n pointerCoordinates\n }) : null;\n const overId = getFirstCollision(collisions, 'id');\n const [over, setOver] = useState(null); // When there is no drag overlay used, we need to account for the\n // window scroll delta\n\n const appliedTranslate = usesDragOverlay ? modifiedTranslate : add(modifiedTranslate, activeNodeScrollDelta);\n const transform = adjustScale(appliedTranslate, (_over$rect = over == null ? void 0 : over.rect) != null ? _over$rect : null, activeNodeRect);\n const activeSensorRef = useRef(null);\n const instantiateSensor = useCallback((event, _ref2) => {\n let {\n sensor: Sensor,\n options\n } = _ref2;\n\n if (activeRef.current == null) {\n return;\n }\n\n const activeNode = draggableNodes.get(activeRef.current);\n\n if (!activeNode) {\n return;\n }\n\n const activatorEvent = event.nativeEvent;\n const sensorInstance = new Sensor({\n active: activeRef.current,\n activeNode,\n event: activatorEvent,\n options,\n // Sensors need to be instantiated with refs for arguments that change over time\n // otherwise they are frozen in time with the stale arguments\n context: sensorContext,\n\n onAbort(id) {\n const draggableNode = draggableNodes.get(id);\n\n if (!draggableNode) {\n return;\n }\n\n const {\n onDragAbort\n } = latestProps.current;\n const event = {\n id\n };\n onDragAbort == null ? void 0 : onDragAbort(event);\n dispatchMonitorEvent({\n type: 'onDragAbort',\n event\n });\n },\n\n onPending(id, constraint, initialCoordinates, offset) {\n const draggableNode = draggableNodes.get(id);\n\n if (!draggableNode) {\n return;\n }\n\n const {\n onDragPending\n } = latestProps.current;\n const event = {\n id,\n constraint,\n initialCoordinates,\n offset\n };\n onDragPending == null ? void 0 : onDragPending(event);\n dispatchMonitorEvent({\n type: 'onDragPending',\n event\n });\n },\n\n onStart(initialCoordinates) {\n const id = activeRef.current;\n\n if (id == null) {\n return;\n }\n\n const draggableNode = draggableNodes.get(id);\n\n if (!draggableNode) {\n return;\n }\n\n const {\n onDragStart\n } = latestProps.current;\n const event = {\n activatorEvent,\n active: {\n id,\n data: draggableNode.data,\n rect: activeRects\n }\n };\n unstable_batchedUpdates(() => {\n onDragStart == null ? void 0 : onDragStart(event);\n setStatus(Status.Initializing);\n dispatch({\n type: Action.DragStart,\n initialCoordinates,\n active: id\n });\n dispatchMonitorEvent({\n type: 'onDragStart',\n event\n });\n setActiveSensor(activeSensorRef.current);\n setActivatorEvent(activatorEvent);\n });\n },\n\n onMove(coordinates) {\n dispatch({\n type: Action.DragMove,\n coordinates\n });\n },\n\n onEnd: createHandler(Action.DragEnd),\n onCancel: createHandler(Action.DragCancel)\n });\n activeSensorRef.current = sensorInstance;\n\n function createHandler(type) {\n return async function handler() {\n const {\n active,\n collisions,\n over,\n scrollAdjustedTranslate\n } = sensorContext.current;\n let event = null;\n\n if (active && scrollAdjustedTranslate) {\n const {\n cancelDrop\n } = latestProps.current;\n event = {\n activatorEvent,\n active: active,\n collisions,\n delta: scrollAdjustedTranslate,\n over\n };\n\n if (type === Action.DragEnd && typeof cancelDrop === 'function') {\n const shouldCancel = await Promise.resolve(cancelDrop(event));\n\n if (shouldCancel) {\n type = Action.DragCancel;\n }\n }\n }\n\n activeRef.current = null;\n unstable_batchedUpdates(() => {\n dispatch({\n type\n });\n setStatus(Status.Uninitialized);\n setOver(null);\n setActiveSensor(null);\n setActivatorEvent(null);\n activeSensorRef.current = null;\n const eventName = type === Action.DragEnd ? 'onDragEnd' : 'onDragCancel';\n\n if (event) {\n const handler = latestProps.current[eventName];\n handler == null ? void 0 : handler(event);\n dispatchMonitorEvent({\n type: eventName,\n event\n });\n }\n });\n };\n }\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [draggableNodes]);\n const bindActivatorToSensorInstantiator = useCallback((handler, sensor) => {\n return (event, active) => {\n const nativeEvent = event.nativeEvent;\n const activeDraggableNode = draggableNodes.get(active);\n\n if ( // Another sensor is already instantiating\n activeRef.current !== null || // No active draggable\n !activeDraggableNode || // Event has already been captured\n nativeEvent.dndKit || nativeEvent.defaultPrevented) {\n return;\n }\n\n const activationContext = {\n active: activeDraggableNode\n };\n const shouldActivate = handler(event, sensor.options, activationContext);\n\n if (shouldActivate === true) {\n nativeEvent.dndKit = {\n capturedBy: sensor.sensor\n };\n activeRef.current = active;\n instantiateSensor(event, sensor);\n }\n };\n }, [draggableNodes, instantiateSensor]);\n const activators = useCombineActivators(sensors, bindActivatorToSensorInstantiator);\n useSensorSetup(sensors);\n useIsomorphicLayoutEffect(() => {\n if (activeNodeRect && status === Status.Initializing) {\n setStatus(Status.Initialized);\n }\n }, [activeNodeRect, status]);\n useEffect(() => {\n const {\n onDragMove\n } = latestProps.current;\n const {\n active,\n activatorEvent,\n collisions,\n over\n } = sensorContext.current;\n\n if (!active || !activatorEvent) {\n return;\n }\n\n const event = {\n active,\n activatorEvent,\n collisions,\n delta: {\n x: scrollAdjustedTranslate.x,\n y: scrollAdjustedTranslate.y\n },\n over\n };\n unstable_batchedUpdates(() => {\n onDragMove == null ? void 0 : onDragMove(event);\n dispatchMonitorEvent({\n type: 'onDragMove',\n event\n });\n });\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [scrollAdjustedTranslate.x, scrollAdjustedTranslate.y]);\n useEffect(() => {\n const {\n active,\n activatorEvent,\n collisions,\n droppableContainers,\n scrollAdjustedTranslate\n } = sensorContext.current;\n\n if (!active || activeRef.current == null || !activatorEvent || !scrollAdjustedTranslate) {\n return;\n }\n\n const {\n onDragOver\n } = latestProps.current;\n const overContainer = droppableContainers.get(overId);\n const over = overContainer && overContainer.rect.current ? {\n id: overContainer.id,\n rect: overContainer.rect.current,\n data: overContainer.data,\n disabled: overContainer.disabled\n } : null;\n const event = {\n active,\n activatorEvent,\n collisions,\n delta: {\n x: scrollAdjustedTranslate.x,\n y: scrollAdjustedTranslate.y\n },\n over\n };\n unstable_batchedUpdates(() => {\n setOver(over);\n onDragOver == null ? void 0 : onDragOver(event);\n dispatchMonitorEvent({\n type: 'onDragOver',\n event\n });\n });\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [overId]);\n useIsomorphicLayoutEffect(() => {\n sensorContext.current = {\n activatorEvent,\n active,\n activeNode,\n collisionRect,\n collisions,\n droppableRects,\n draggableNodes,\n draggingNode,\n draggingNodeRect,\n droppableContainers,\n over,\n scrollableAncestors,\n scrollAdjustedTranslate\n };\n activeRects.current = {\n initial: draggingNodeRect,\n translated: collisionRect\n };\n }, [active, activeNode, collisions, collisionRect, draggableNodes, draggingNode, draggingNodeRect, droppableRects, droppableContainers, over, scrollableAncestors, scrollAdjustedTranslate]);\n useAutoScroller({ ...autoScrollOptions,\n delta: translate,\n draggingRect: collisionRect,\n pointerCoordinates,\n scrollableAncestors,\n scrollableAncestorRects\n });\n const publicContext = useMemo(() => {\n const context = {\n active,\n activeNode,\n activeNodeRect,\n activatorEvent,\n collisions,\n containerNodeRect,\n dragOverlay,\n draggableNodes,\n droppableContainers,\n droppableRects,\n over,\n measureDroppableContainers,\n scrollableAncestors,\n scrollableAncestorRects,\n measuringConfiguration,\n measuringScheduled,\n windowRect\n };\n return context;\n }, [active, activeNode, activeNodeRect, activatorEvent, collisions, containerNodeRect, dragOverlay, draggableNodes, droppableContainers, droppableRects, over, measureDroppableContainers, scrollableAncestors, scrollableAncestorRects, measuringConfiguration, measuringScheduled, windowRect]);\n const internalContext = useMemo(() => {\n const context = {\n activatorEvent,\n activators,\n active,\n activeNodeRect,\n ariaDescribedById: {\n draggable: draggableDescribedById\n },\n dispatch,\n draggableNodes,\n over,\n measureDroppableContainers\n };\n return context;\n }, [activatorEvent, activators, active, activeNodeRect, dispatch, draggableDescribedById, draggableNodes, over, measureDroppableContainers]);\n return React.createElement(DndMonitorContext.Provider, {\n value: registerMonitorListener\n }, React.createElement(InternalContext.Provider, {\n value: internalContext\n }, React.createElement(PublicContext.Provider, {\n value: publicContext\n }, React.createElement(ActiveDraggableContext.Provider, {\n value: transform\n }, children)), React.createElement(RestoreFocus, {\n disabled: (accessibility == null ? void 0 : accessibility.restoreFocus) === false\n })), React.createElement(Accessibility, { ...accessibility,\n hiddenTextDescribedById: draggableDescribedById\n }));\n\n function getAutoScrollerOptions() {\n const activeSensorDisablesAutoscroll = (activeSensor == null ? void 0 : activeSensor.autoScrollEnabled) === false;\n const autoScrollGloballyDisabled = typeof autoScroll === 'object' ? autoScroll.enabled === false : autoScroll === false;\n const enabled = isInitialized && !activeSensorDisablesAutoscroll && !autoScrollGloballyDisabled;\n\n if (typeof autoScroll === 'object') {\n return { ...autoScroll,\n enabled\n };\n }\n\n return {\n enabled\n };\n }\n});\n\nconst NullContext = /*#__PURE__*/createContext(null);\nconst defaultRole = 'button';\nconst ID_PREFIX = 'Draggable';\nfunction useDraggable(_ref) {\n let {\n id,\n data,\n disabled = false,\n attributes\n } = _ref;\n const key = useUniqueId(ID_PREFIX);\n const {\n activators,\n activatorEvent,\n active,\n activeNodeRect,\n ariaDescribedById,\n draggableNodes,\n over\n } = useContext(InternalContext);\n const {\n role = defaultRole,\n roleDescription = 'draggable',\n tabIndex = 0\n } = attributes != null ? attributes : {};\n const isDragging = (active == null ? void 0 : active.id) === id;\n const transform = useContext(isDragging ? ActiveDraggableContext : NullContext);\n const [node, setNodeRef] = useNodeRef();\n const [activatorNode, setActivatorNodeRef] = useNodeRef();\n const listeners = useSyntheticListeners(activators, id);\n const dataRef = useLatestValue(data);\n useIsomorphicLayoutEffect(() => {\n draggableNodes.set(id, {\n id,\n key,\n node,\n activatorNode,\n data: dataRef\n });\n return () => {\n const node = draggableNodes.get(id);\n\n if (node && node.key === key) {\n draggableNodes.delete(id);\n }\n };\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [draggableNodes, id]);\n const memoizedAttributes = useMemo(() => ({\n role,\n tabIndex,\n 'aria-disabled': disabled,\n 'aria-pressed': isDragging && role === defaultRole ? true : undefined,\n 'aria-roledescription': roleDescription,\n 'aria-describedby': ariaDescribedById.draggable\n }), [disabled, role, tabIndex, isDragging, roleDescription, ariaDescribedById.draggable]);\n return {\n active,\n activatorEvent,\n activeNodeRect,\n attributes: memoizedAttributes,\n isDragging,\n listeners: disabled ? undefined : listeners,\n node,\n over,\n setNodeRef,\n setActivatorNodeRef,\n transform\n };\n}\n\nfunction useDndContext() {\n return useContext(PublicContext);\n}\n\nconst ID_PREFIX$1 = 'Droppable';\nconst defaultResizeObserverConfig = {\n timeout: 25\n};\nfunction useDroppable(_ref) {\n let {\n data,\n disabled = false,\n id,\n resizeObserverConfig\n } = _ref;\n const key = useUniqueId(ID_PREFIX$1);\n const {\n active,\n dispatch,\n over,\n measureDroppableContainers\n } = useContext(InternalContext);\n const previous = useRef({\n disabled\n });\n const resizeObserverConnected = useRef(false);\n const rect = useRef(null);\n const callbackId = useRef(null);\n const {\n disabled: resizeObserverDisabled,\n updateMeasurementsFor,\n timeout: resizeObserverTimeout\n } = { ...defaultResizeObserverConfig,\n ...resizeObserverConfig\n };\n const ids = useLatestValue(updateMeasurementsFor != null ? updateMeasurementsFor : id);\n const handleResize = useCallback(() => {\n if (!resizeObserverConnected.current) {\n // ResizeObserver invokes the `handleResize` callback as soon as `observe` is called,\n // assuming the element is rendered and displayed.\n resizeObserverConnected.current = true;\n return;\n }\n\n if (callbackId.current != null) {\n clearTimeout(callbackId.current);\n }\n\n callbackId.current = setTimeout(() => {\n measureDroppableContainers(Array.isArray(ids.current) ? ids.current : [ids.current]);\n callbackId.current = null;\n }, resizeObserverTimeout);\n }, //eslint-disable-next-line react-hooks/exhaustive-deps\n [resizeObserverTimeout]);\n const resizeObserver = useResizeObserver({\n callback: handleResize,\n disabled: resizeObserverDisabled || !active\n });\n const handleNodeChange = useCallback((newElement, previousElement) => {\n if (!resizeObserver) {\n return;\n }\n\n if (previousElement) {\n resizeObserver.unobserve(previousElement);\n resizeObserverConnected.current = false;\n }\n\n if (newElement) {\n resizeObserver.observe(newElement);\n }\n }, [resizeObserver]);\n const [nodeRef, setNodeRef] = useNodeRef(handleNodeChange);\n const dataRef = useLatestValue(data);\n useEffect(() => {\n if (!resizeObserver || !nodeRef.current) {\n return;\n }\n\n resizeObserver.disconnect();\n resizeObserverConnected.current = false;\n resizeObserver.observe(nodeRef.current);\n }, [nodeRef, resizeObserver]);\n useEffect(() => {\n dispatch({\n type: Action.RegisterDroppable,\n element: {\n id,\n key,\n disabled,\n node: nodeRef,\n rect,\n data: dataRef\n }\n });\n return () => dispatch({\n type: Action.UnregisterDroppable,\n key,\n id\n });\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [id]);\n useEffect(() => {\n if (disabled !== previous.current.disabled) {\n dispatch({\n type: Action.SetDroppableDisabled,\n id,\n key,\n disabled\n });\n previous.current.disabled = disabled;\n }\n }, [id, key, disabled, dispatch]);\n return {\n active,\n rect,\n isOver: (over == null ? void 0 : over.id) === id,\n node: nodeRef,\n over,\n setNodeRef\n };\n}\n\nfunction AnimationManager(_ref) {\n let {\n animation,\n children\n } = _ref;\n const [clonedChildren, setClonedChildren] = useState(null);\n const [element, setElement] = useState(null);\n const previousChildren = usePrevious(children);\n\n if (!children && !clonedChildren && previousChildren) {\n setClonedChildren(previousChildren);\n }\n\n useIsomorphicLayoutEffect(() => {\n if (!element) {\n return;\n }\n\n const key = clonedChildren == null ? void 0 : clonedChildren.key;\n const id = clonedChildren == null ? void 0 : clonedChildren.props.id;\n\n if (key == null || id == null) {\n setClonedChildren(null);\n return;\n }\n\n Promise.resolve(animation(id, element)).then(() => {\n setClonedChildren(null);\n });\n }, [animation, clonedChildren, element]);\n return React.createElement(React.Fragment, null, children, clonedChildren ? cloneElement(clonedChildren, {\n ref: setElement\n }) : null);\n}\n\nconst defaultTransform = {\n x: 0,\n y: 0,\n scaleX: 1,\n scaleY: 1\n};\nfunction NullifiedContextProvider(_ref) {\n let {\n children\n } = _ref;\n return React.createElement(InternalContext.Provider, {\n value: defaultInternalContext\n }, React.createElement(ActiveDraggableContext.Provider, {\n value: defaultTransform\n }, children));\n}\n\nconst baseStyles = {\n position: 'fixed',\n touchAction: 'none'\n};\n\nconst defaultTransition = activatorEvent => {\n const isKeyboardActivator = isKeyboardEvent(activatorEvent);\n return isKeyboardActivator ? 'transform 250ms ease' : undefined;\n};\n\nconst PositionedOverlay = /*#__PURE__*/forwardRef((_ref, ref) => {\n let {\n as,\n activatorEvent,\n adjustScale,\n children,\n className,\n rect,\n style,\n transform,\n transition = defaultTransition\n } = _ref;\n\n if (!rect) {\n return null;\n }\n\n const scaleAdjustedTransform = adjustScale ? transform : { ...transform,\n scaleX: 1,\n scaleY: 1\n };\n const styles = { ...baseStyles,\n width: rect.width,\n height: rect.height,\n top: rect.top,\n left: rect.left,\n transform: CSS.Transform.toString(scaleAdjustedTransform),\n transformOrigin: adjustScale && activatorEvent ? getRelativeTransformOrigin(activatorEvent, rect) : undefined,\n transition: typeof transition === 'function' ? transition(activatorEvent) : transition,\n ...style\n };\n return React.createElement(as, {\n className,\n style: styles,\n ref\n }, children);\n});\n\nconst defaultDropAnimationSideEffects = options => _ref => {\n let {\n active,\n dragOverlay\n } = _ref;\n const originalStyles = {};\n const {\n styles,\n className\n } = options;\n\n if (styles != null && styles.active) {\n for (const [key, value] of Object.entries(styles.active)) {\n if (value === undefined) {\n continue;\n }\n\n originalStyles[key] = active.node.style.getPropertyValue(key);\n active.node.style.setProperty(key, value);\n }\n }\n\n if (styles != null && styles.dragOverlay) {\n for (const [key, value] of Object.entries(styles.dragOverlay)) {\n if (value === undefined) {\n continue;\n }\n\n dragOverlay.node.style.setProperty(key, value);\n }\n }\n\n if (className != null && className.active) {\n active.node.classList.add(className.active);\n }\n\n if (className != null && className.dragOverlay) {\n dragOverlay.node.classList.add(className.dragOverlay);\n }\n\n return function cleanup() {\n for (const [key, value] of Object.entries(originalStyles)) {\n active.node.style.setProperty(key, value);\n }\n\n if (className != null && className.active) {\n active.node.classList.remove(className.active);\n }\n };\n};\n\nconst defaultKeyframeResolver = _ref2 => {\n let {\n transform: {\n initial,\n final\n }\n } = _ref2;\n return [{\n transform: CSS.Transform.toString(initial)\n }, {\n transform: CSS.Transform.toString(final)\n }];\n};\n\nconst defaultDropAnimationConfiguration = {\n duration: 250,\n easing: 'ease',\n keyframes: defaultKeyframeResolver,\n sideEffects: /*#__PURE__*/defaultDropAnimationSideEffects({\n styles: {\n active: {\n opacity: '0'\n }\n }\n })\n};\nfunction useDropAnimation(_ref3) {\n let {\n config,\n draggableNodes,\n droppableContainers,\n measuringConfiguration\n } = _ref3;\n return useEvent((id, node) => {\n if (config === null) {\n return;\n }\n\n const activeDraggable = draggableNodes.get(id);\n\n if (!activeDraggable) {\n return;\n }\n\n const activeNode = activeDraggable.node.current;\n\n if (!activeNode) {\n return;\n }\n\n const measurableNode = getMeasurableNode(node);\n\n if (!measurableNode) {\n return;\n }\n\n const {\n transform\n } = getWindow(node).getComputedStyle(node);\n const parsedTransform = parseTransform(transform);\n\n if (!parsedTransform) {\n return;\n }\n\n const animation = typeof config === 'function' ? config : createDefaultDropAnimation(config);\n scrollIntoViewIfNeeded(activeNode, measuringConfiguration.draggable.measure);\n return animation({\n active: {\n id,\n data: activeDraggable.data,\n node: activeNode,\n rect: measuringConfiguration.draggable.measure(activeNode)\n },\n draggableNodes,\n dragOverlay: {\n node,\n rect: measuringConfiguration.dragOverlay.measure(measurableNode)\n },\n droppableContainers,\n measuringConfiguration,\n transform: parsedTransform\n });\n });\n}\n\nfunction createDefaultDropAnimation(options) {\n const {\n duration,\n easing,\n sideEffects,\n keyframes\n } = { ...defaultDropAnimationConfiguration,\n ...options\n };\n return _ref4 => {\n let {\n active,\n dragOverlay,\n transform,\n ...rest\n } = _ref4;\n\n if (!duration) {\n // Do not animate if animation duration is zero.\n return;\n }\n\n const delta = {\n x: dragOverlay.rect.left - active.rect.left,\n y: dragOverlay.rect.top - active.rect.top\n };\n const scale = {\n scaleX: transform.scaleX !== 1 ? active.rect.width * transform.scaleX / dragOverlay.rect.width : 1,\n scaleY: transform.scaleY !== 1 ? active.rect.height * transform.scaleY / dragOverlay.rect.height : 1\n };\n const finalTransform = {\n x: transform.x - delta.x,\n y: transform.y - delta.y,\n ...scale\n };\n const animationKeyframes = keyframes({ ...rest,\n active,\n dragOverlay,\n transform: {\n initial: transform,\n final: finalTransform\n }\n });\n const [firstKeyframe] = animationKeyframes;\n const lastKeyframe = animationKeyframes[animationKeyframes.length - 1];\n\n if (JSON.stringify(firstKeyframe) === JSON.stringify(lastKeyframe)) {\n // The start and end keyframes are the same, infer that there is no animation needed.\n return;\n }\n\n const cleanup = sideEffects == null ? void 0 : sideEffects({\n active,\n dragOverlay,\n ...rest\n });\n const animation = dragOverlay.node.animate(animationKeyframes, {\n duration,\n easing,\n fill: 'forwards'\n });\n return new Promise(resolve => {\n animation.onfinish = () => {\n cleanup == null ? void 0 : cleanup();\n resolve();\n };\n });\n };\n}\n\nlet key = 0;\nfunction useKey(id) {\n return useMemo(() => {\n if (id == null) {\n return;\n }\n\n key++;\n return key;\n }, [id]);\n}\n\nconst DragOverlay = /*#__PURE__*/React.memo(_ref => {\n let {\n adjustScale = false,\n children,\n dropAnimation: dropAnimationConfig,\n style,\n transition,\n modifiers,\n wrapperElement = 'div',\n className,\n zIndex = 999\n } = _ref;\n const {\n activatorEvent,\n active,\n activeNodeRect,\n containerNodeRect,\n draggableNodes,\n droppableContainers,\n dragOverlay,\n over,\n measuringConfiguration,\n scrollableAncestors,\n scrollableAncestorRects,\n windowRect\n } = useDndContext();\n const transform = useContext(ActiveDraggableContext);\n const key = useKey(active == null ? void 0 : active.id);\n const modifiedTransform = applyModifiers(modifiers, {\n activatorEvent,\n active,\n activeNodeRect,\n containerNodeRect,\n draggingNodeRect: dragOverlay.rect,\n over,\n overlayNodeRect: dragOverlay.rect,\n scrollableAncestors,\n scrollableAncestorRects,\n transform,\n windowRect\n });\n const initialRect = useInitialValue(activeNodeRect);\n const dropAnimation = useDropAnimation({\n config: dropAnimationConfig,\n draggableNodes,\n droppableContainers,\n measuringConfiguration\n }); // We need to wait for the active node to be measured before connecting the drag overlay ref\n // otherwise collisions can be computed against a mispositioned drag overlay\n\n const ref = initialRect ? dragOverlay.setRef : undefined;\n return React.createElement(NullifiedContextProvider, null, React.createElement(AnimationManager, {\n animation: dropAnimation\n }, active && key ? React.createElement(PositionedOverlay, {\n key: key,\n id: active.id,\n ref: ref,\n as: wrapperElement,\n activatorEvent: activatorEvent,\n adjustScale: adjustScale,\n className: className,\n transition: transition,\n rect: initialRect,\n style: {\n zIndex,\n ...style\n },\n transform: modifiedTransform\n }, children) : null));\n});\n\nexport { AutoScrollActivator, DndContext, DragOverlay, KeyboardCode, KeyboardSensor, MeasuringFrequency, MeasuringStrategy, MouseSensor, PointerSensor, TouchSensor, TraversalOrder, applyModifiers, closestCenter, closestCorners, defaultAnnouncements, defaultCoordinates, defaultDropAnimationConfiguration as defaultDropAnimation, defaultDropAnimationSideEffects, defaultKeyboardCoordinateGetter, defaultScreenReaderInstructions, getClientRect, getFirstCollision, getScrollableAncestors, pointerWithin, rectIntersection, useDndContext, useDndMonitor, useDraggable, useDroppable, useSensor, useSensors };\n//# sourceMappingURL=core.esm.js.map\n","import React, { useMemo, useRef, useEffect, useState, useContext } from 'react';\nimport { useDndContext, getClientRect, useDroppable, useDraggable, closestCorners, getFirstCollision, getScrollableAncestors, KeyboardCode } from '@dnd-kit/core';\nimport { useUniqueId, useIsomorphicLayoutEffect, CSS, useCombinedRefs, isKeyboardEvent, subtract } from '@dnd-kit/utilities';\n\n/**\r\n * Move an array item to a different position. Returns a new array with the item moved to the new position.\r\n */\nfunction arrayMove(array, from, to) {\n const newArray = array.slice();\n newArray.splice(to < 0 ? newArray.length + to : to, 0, newArray.splice(from, 1)[0]);\n return newArray;\n}\n\n/**\r\n * Swap an array item to a different position. Returns a new array with the item swapped to the new position.\r\n */\nfunction arraySwap(array, from, to) {\n const newArray = array.slice();\n newArray[from] = array[to];\n newArray[to] = array[from];\n return newArray;\n}\n\nfunction getSortedRects(items, rects) {\n return items.reduce((accumulator, id, index) => {\n const rect = rects.get(id);\n\n if (rect) {\n accumulator[index] = rect;\n }\n\n return accumulator;\n }, Array(items.length));\n}\n\nfunction isValidIndex(index) {\n return index !== null && index >= 0;\n}\n\nfunction itemsEqual(a, b) {\n if (a === b) {\n return true;\n }\n\n if (a.length !== b.length) {\n return false;\n }\n\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction normalizeDisabled(disabled) {\n if (typeof disabled === 'boolean') {\n return {\n draggable: disabled,\n droppable: disabled\n };\n }\n\n return disabled;\n}\n\n// To-do: We should be calculating scale transformation\nconst defaultScale = {\n scaleX: 1,\n scaleY: 1\n};\nconst horizontalListSortingStrategy = _ref => {\n var _rects$activeIndex;\n\n let {\n rects,\n activeNodeRect: fallbackActiveRect,\n activeIndex,\n overIndex,\n index\n } = _ref;\n const activeNodeRect = (_rects$activeIndex = rects[activeIndex]) != null ? _rects$activeIndex : fallbackActiveRect;\n\n if (!activeNodeRect) {\n return null;\n }\n\n const itemGap = getItemGap(rects, index, activeIndex);\n\n if (index === activeIndex) {\n const newIndexRect = rects[overIndex];\n\n if (!newIndexRect) {\n return null;\n }\n\n return {\n x: activeIndex < overIndex ? newIndexRect.left + newIndexRect.width - (activeNodeRect.left + activeNodeRect.width) : newIndexRect.left - activeNodeRect.left,\n y: 0,\n ...defaultScale\n };\n }\n\n if (index > activeIndex && index <= overIndex) {\n return {\n x: -activeNodeRect.width - itemGap,\n y: 0,\n ...defaultScale\n };\n }\n\n if (index < activeIndex && index >= overIndex) {\n return {\n x: activeNodeRect.width + itemGap,\n y: 0,\n ...defaultScale\n };\n }\n\n return {\n x: 0,\n y: 0,\n ...defaultScale\n };\n};\n\nfunction getItemGap(rects, index, activeIndex) {\n const currentRect = rects[index];\n const previousRect = rects[index - 1];\n const nextRect = rects[index + 1];\n\n if (!currentRect || !previousRect && !nextRect) {\n return 0;\n }\n\n if (activeIndex < index) {\n return previousRect ? currentRect.left - (previousRect.left + previousRect.width) : nextRect.left - (currentRect.left + currentRect.width);\n }\n\n return nextRect ? nextRect.left - (currentRect.left + currentRect.width) : currentRect.left - (previousRect.left + previousRect.width);\n}\n\nconst rectSortingStrategy = _ref => {\n let {\n rects,\n activeIndex,\n overIndex,\n index\n } = _ref;\n const newRects = arrayMove(rects, overIndex, activeIndex);\n const oldRect = rects[index];\n const newRect = newRects[index];\n\n if (!newRect || !oldRect) {\n return null;\n }\n\n return {\n x: newRect.left - oldRect.left,\n y: newRect.top - oldRect.top,\n scaleX: newRect.width / oldRect.width,\n scaleY: newRect.height / oldRect.height\n };\n};\n\nconst rectSwappingStrategy = _ref => {\n let {\n activeIndex,\n index,\n rects,\n overIndex\n } = _ref;\n let oldRect;\n let newRect;\n\n if (index === activeIndex) {\n oldRect = rects[index];\n newRect = rects[overIndex];\n }\n\n if (index === overIndex) {\n oldRect = rects[index];\n newRect = rects[activeIndex];\n }\n\n if (!newRect || !oldRect) {\n return null;\n }\n\n return {\n x: newRect.left - oldRect.left,\n y: newRect.top - oldRect.top,\n scaleX: newRect.width / oldRect.width,\n scaleY: newRect.height / oldRect.height\n };\n};\n\n// To-do: We should be calculating scale transformation\nconst defaultScale$1 = {\n scaleX: 1,\n scaleY: 1\n};\nconst verticalListSortingStrategy = _ref => {\n var _rects$activeIndex;\n\n let {\n activeIndex,\n activeNodeRect: fallbackActiveRect,\n index,\n rects,\n overIndex\n } = _ref;\n const activeNodeRect = (_rects$activeIndex = rects[activeIndex]) != null ? _rects$activeIndex : fallbackActiveRect;\n\n if (!activeNodeRect) {\n return null;\n }\n\n if (index === activeIndex) {\n const overIndexRect = rects[overIndex];\n\n if (!overIndexRect) {\n return null;\n }\n\n return {\n x: 0,\n y: activeIndex < overIndex ? overIndexRect.top + overIndexRect.height - (activeNodeRect.top + activeNodeRect.height) : overIndexRect.top - activeNodeRect.top,\n ...defaultScale$1\n };\n }\n\n const itemGap = getItemGap$1(rects, index, activeIndex);\n\n if (index > activeIndex && index <= overIndex) {\n return {\n x: 0,\n y: -activeNodeRect.height - itemGap,\n ...defaultScale$1\n };\n }\n\n if (index < activeIndex && index >= overIndex) {\n return {\n x: 0,\n y: activeNodeRect.height + itemGap,\n ...defaultScale$1\n };\n }\n\n return {\n x: 0,\n y: 0,\n ...defaultScale$1\n };\n};\n\nfunction getItemGap$1(clientRects, index, activeIndex) {\n const currentRect = clientRects[index];\n const previousRect = clientRects[index - 1];\n const nextRect = clientRects[index + 1];\n\n if (!currentRect) {\n return 0;\n }\n\n if (activeIndex < index) {\n return previousRect ? currentRect.top - (previousRect.top + previousRect.height) : nextRect ? nextRect.top - (currentRect.top + currentRect.height) : 0;\n }\n\n return nextRect ? nextRect.top - (currentRect.top + currentRect.height) : previousRect ? currentRect.top - (previousRect.top + previousRect.height) : 0;\n}\n\nconst ID_PREFIX = 'Sortable';\nconst Context = /*#__PURE__*/React.createContext({\n activeIndex: -1,\n containerId: ID_PREFIX,\n disableTransforms: false,\n items: [],\n overIndex: -1,\n useDragOverlay: false,\n sortedRects: [],\n strategy: rectSortingStrategy,\n disabled: {\n draggable: false,\n droppable: false\n }\n});\nfunction SortableContext(_ref) {\n let {\n children,\n id,\n items: userDefinedItems,\n strategy = rectSortingStrategy,\n disabled: disabledProp = false\n } = _ref;\n const {\n active,\n dragOverlay,\n droppableRects,\n over,\n measureDroppableContainers\n } = useDndContext();\n const containerId = useUniqueId(ID_PREFIX, id);\n const useDragOverlay = Boolean(dragOverlay.rect !== null);\n const items = useMemo(() => userDefinedItems.map(item => typeof item === 'object' && 'id' in item ? item.id : item), [userDefinedItems]);\n const isDragging = active != null;\n const activeIndex = active ? items.indexOf(active.id) : -1;\n const overIndex = over ? items.indexOf(over.id) : -1;\n const previousItemsRef = useRef(items);\n const itemsHaveChanged = !itemsEqual(items, previousItemsRef.current);\n const disableTransforms = overIndex !== -1 && activeIndex === -1 || itemsHaveChanged;\n const disabled = normalizeDisabled(disabledProp);\n useIsomorphicLayoutEffect(() => {\n if (itemsHaveChanged && isDragging) {\n measureDroppableContainers(items);\n }\n }, [itemsHaveChanged, items, isDragging, measureDroppableContainers]);\n useEffect(() => {\n previousItemsRef.current = items;\n }, [items]);\n const contextValue = useMemo(() => ({\n activeIndex,\n containerId,\n disabled,\n disableTransforms,\n items,\n overIndex,\n useDragOverlay,\n sortedRects: getSortedRects(items, droppableRects),\n strategy\n }), // eslint-disable-next-line react-hooks/exhaustive-deps\n [activeIndex, containerId, disabled.draggable, disabled.droppable, disableTransforms, items, overIndex, droppableRects, useDragOverlay, strategy]);\n return React.createElement(Context.Provider, {\n value: contextValue\n }, children);\n}\n\nconst defaultNewIndexGetter = _ref => {\n let {\n id,\n items,\n activeIndex,\n overIndex\n } = _ref;\n return arrayMove(items, activeIndex, overIndex).indexOf(id);\n};\nconst defaultAnimateLayoutChanges = _ref2 => {\n let {\n containerId,\n isSorting,\n wasDragging,\n index,\n items,\n newIndex,\n previousItems,\n previousContainerId,\n transition\n } = _ref2;\n\n if (!transition || !wasDragging) {\n return false;\n }\n\n if (previousItems !== items && index === newIndex) {\n return false;\n }\n\n if (isSorting) {\n return true;\n }\n\n return newIndex !== index && containerId === previousContainerId;\n};\nconst defaultTransition = {\n duration: 200,\n easing: 'ease'\n};\nconst transitionProperty = 'transform';\nconst disabledTransition = /*#__PURE__*/CSS.Transition.toString({\n property: transitionProperty,\n duration: 0,\n easing: 'linear'\n});\nconst defaultAttributes = {\n roleDescription: 'sortable'\n};\n\n/*\r\n * When the index of an item changes while sorting,\r\n * we need to temporarily disable the transforms\r\n */\n\nfunction useDerivedTransform(_ref) {\n let {\n disabled,\n index,\n node,\n rect\n } = _ref;\n const [derivedTransform, setDerivedtransform] = useState(null);\n const previousIndex = useRef(index);\n useIsomorphicLayoutEffect(() => {\n if (!disabled && index !== previousIndex.current && node.current) {\n const initial = rect.current;\n\n if (initial) {\n const current = getClientRect(node.current, {\n ignoreTransform: true\n });\n const delta = {\n x: initial.left - current.left,\n y: initial.top - current.top,\n scaleX: initial.width / current.width,\n scaleY: initial.height / current.height\n };\n\n if (delta.x || delta.y) {\n setDerivedtransform(delta);\n }\n }\n }\n\n if (index !== previousIndex.current) {\n previousIndex.current = index;\n }\n }, [disabled, index, node, rect]);\n useEffect(() => {\n if (derivedTransform) {\n setDerivedtransform(null);\n }\n }, [derivedTransform]);\n return derivedTransform;\n}\n\nfunction useSortable(_ref) {\n let {\n animateLayoutChanges = defaultAnimateLayoutChanges,\n attributes: userDefinedAttributes,\n disabled: localDisabled,\n data: customData,\n getNewIndex = defaultNewIndexGetter,\n id,\n strategy: localStrategy,\n resizeObserverConfig,\n transition = defaultTransition\n } = _ref;\n const {\n items,\n containerId,\n activeIndex,\n disabled: globalDisabled,\n disableTransforms,\n sortedRects,\n overIndex,\n useDragOverlay,\n strategy: globalStrategy\n } = useContext(Context);\n const disabled = normalizeLocalDisabled(localDisabled, globalDisabled);\n const index = items.indexOf(id);\n const data = useMemo(() => ({\n sortable: {\n containerId,\n index,\n items\n },\n ...customData\n }), [containerId, customData, index, items]);\n const itemsAfterCurrentSortable = useMemo(() => items.slice(items.indexOf(id)), [items, id]);\n const {\n rect,\n node,\n isOver,\n setNodeRef: setDroppableNodeRef\n } = useDroppable({\n id,\n data,\n disabled: disabled.droppable,\n resizeObserverConfig: {\n updateMeasurementsFor: itemsAfterCurrentSortable,\n ...resizeObserverConfig\n }\n });\n const {\n active,\n activatorEvent,\n activeNodeRect,\n attributes,\n setNodeRef: setDraggableNodeRef,\n listeners,\n isDragging,\n over,\n setActivatorNodeRef,\n transform\n } = useDraggable({\n id,\n data,\n attributes: { ...defaultAttributes,\n ...userDefinedAttributes\n },\n disabled: disabled.draggable\n });\n const setNodeRef = useCombinedRefs(setDroppableNodeRef, setDraggableNodeRef);\n const isSorting = Boolean(active);\n const displaceItem = isSorting && !disableTransforms && isValidIndex(activeIndex) && isValidIndex(overIndex);\n const shouldDisplaceDragSource = !useDragOverlay && isDragging;\n const dragSourceDisplacement = shouldDisplaceDragSource && displaceItem ? transform : null;\n const strategy = localStrategy != null ? localStrategy : globalStrategy;\n const finalTransform = displaceItem ? dragSourceDisplacement != null ? dragSourceDisplacement : strategy({\n rects: sortedRects,\n activeNodeRect,\n activeIndex,\n overIndex,\n index\n }) : null;\n const newIndex = isValidIndex(activeIndex) && isValidIndex(overIndex) ? getNewIndex({\n id,\n items,\n activeIndex,\n overIndex\n }) : index;\n const activeId = active == null ? void 0 : active.id;\n const previous = useRef({\n activeId,\n items,\n newIndex,\n containerId\n });\n const itemsHaveChanged = items !== previous.current.items;\n const shouldAnimateLayoutChanges = animateLayoutChanges({\n active,\n containerId,\n isDragging,\n isSorting,\n id,\n index,\n items,\n newIndex: previous.current.newIndex,\n previousItems: previous.current.items,\n previousContainerId: previous.current.containerId,\n transition,\n wasDragging: previous.current.activeId != null\n });\n const derivedTransform = useDerivedTransform({\n disabled: !shouldAnimateLayoutChanges,\n index,\n node,\n rect\n });\n useEffect(() => {\n if (isSorting && previous.current.newIndex !== newIndex) {\n previous.current.newIndex = newIndex;\n }\n\n if (containerId !== previous.current.containerId) {\n previous.current.containerId = containerId;\n }\n\n if (items !== previous.current.items) {\n previous.current.items = items;\n }\n }, [isSorting, newIndex, containerId, items]);\n useEffect(() => {\n if (activeId === previous.current.activeId) {\n return;\n }\n\n if (activeId != null && previous.current.activeId == null) {\n previous.current.activeId = activeId;\n return;\n }\n\n const timeoutId = setTimeout(() => {\n previous.current.activeId = activeId;\n }, 50);\n return () => clearTimeout(timeoutId);\n }, [activeId]);\n return {\n active,\n activeIndex,\n attributes,\n data,\n rect,\n index,\n newIndex,\n items,\n isOver,\n isSorting,\n isDragging,\n listeners,\n node,\n overIndex,\n over,\n setNodeRef,\n setActivatorNodeRef,\n setDroppableNodeRef,\n setDraggableNodeRef,\n transform: derivedTransform != null ? derivedTransform : finalTransform,\n transition: getTransition()\n };\n\n function getTransition() {\n if ( // Temporarily disable transitions for a single frame to set up derived transforms\n derivedTransform || // Or to prevent items jumping to back to their \"new\" position when items change\n itemsHaveChanged && previous.current.newIndex === index) {\n return disabledTransition;\n }\n\n if (shouldDisplaceDragSource && !isKeyboardEvent(activatorEvent) || !transition) {\n return undefined;\n }\n\n if (isSorting || shouldAnimateLayoutChanges) {\n return CSS.Transition.toString({ ...transition,\n property: transitionProperty\n });\n }\n\n return undefined;\n }\n}\n\nfunction normalizeLocalDisabled(localDisabled, globalDisabled) {\n var _localDisabled$dragga, _localDisabled$droppa;\n\n if (typeof localDisabled === 'boolean') {\n return {\n draggable: localDisabled,\n // Backwards compatibility\n droppable: false\n };\n }\n\n return {\n draggable: (_localDisabled$dragga = localDisabled == null ? void 0 : localDisabled.draggable) != null ? _localDisabled$dragga : globalDisabled.draggable,\n droppable: (_localDisabled$droppa = localDisabled == null ? void 0 : localDisabled.droppable) != null ? _localDisabled$droppa : globalDisabled.droppable\n };\n}\n\nfunction hasSortableData(entry) {\n if (!entry) {\n return false;\n }\n\n const data = entry.data.current;\n\n if (data && 'sortable' in data && typeof data.sortable === 'object' && 'containerId' in data.sortable && 'items' in data.sortable && 'index' in data.sortable) {\n return true;\n }\n\n return false;\n}\n\nconst directions = [KeyboardCode.Down, KeyboardCode.Right, KeyboardCode.Up, KeyboardCode.Left];\nconst sortableKeyboardCoordinates = (event, _ref) => {\n let {\n context: {\n active,\n collisionRect,\n droppableRects,\n droppableContainers,\n over,\n scrollableAncestors\n }\n } = _ref;\n\n if (directions.includes(event.code)) {\n event.preventDefault();\n\n if (!active || !collisionRect) {\n return;\n }\n\n const filteredContainers = [];\n droppableContainers.getEnabled().forEach(entry => {\n if (!entry || entry != null && entry.disabled) {\n return;\n }\n\n const rect = droppableRects.get(entry.id);\n\n if (!rect) {\n return;\n }\n\n switch (event.code) {\n case KeyboardCode.Down:\n if (collisionRect.top < rect.top) {\n filteredContainers.push(entry);\n }\n\n break;\n\n case KeyboardCode.Up:\n if (collisionRect.top > rect.top) {\n filteredContainers.push(entry);\n }\n\n break;\n\n case KeyboardCode.Left:\n if (collisionRect.left > rect.left) {\n filteredContainers.push(entry);\n }\n\n break;\n\n case KeyboardCode.Right:\n if (collisionRect.left < rect.left) {\n filteredContainers.push(entry);\n }\n\n break;\n }\n });\n const collisions = closestCorners({\n active,\n collisionRect: collisionRect,\n droppableRects,\n droppableContainers: filteredContainers,\n pointerCoordinates: null\n });\n let closestId = getFirstCollision(collisions, 'id');\n\n if (closestId === (over == null ? void 0 : over.id) && collisions.length > 1) {\n closestId = collisions[1].id;\n }\n\n if (closestId != null) {\n const activeDroppable = droppableContainers.get(active.id);\n const newDroppable = droppableContainers.get(closestId);\n const newRect = newDroppable ? droppableRects.get(newDroppable.id) : null;\n const newNode = newDroppable == null ? void 0 : newDroppable.node.current;\n\n if (newNode && newRect && activeDroppable && newDroppable) {\n const newScrollAncestors = getScrollableAncestors(newNode);\n const hasDifferentScrollAncestors = newScrollAncestors.some((element, index) => scrollableAncestors[index] !== element);\n const hasSameContainer = isSameContainer(activeDroppable, newDroppable);\n const isAfterActive = isAfter(activeDroppable, newDroppable);\n const offset = hasDifferentScrollAncestors || !hasSameContainer ? {\n x: 0,\n y: 0\n } : {\n x: isAfterActive ? collisionRect.width - newRect.width : 0,\n y: isAfterActive ? collisionRect.height - newRect.height : 0\n };\n const rectCoordinates = {\n x: newRect.left,\n y: newRect.top\n };\n const newCoordinates = offset.x && offset.y ? rectCoordinates : subtract(rectCoordinates, offset);\n return newCoordinates;\n }\n }\n }\n\n return undefined;\n};\n\nfunction isSameContainer(a, b) {\n if (!hasSortableData(a) || !hasSortableData(b)) {\n return false;\n }\n\n return a.data.current.sortable.containerId === b.data.current.sortable.containerId;\n}\n\nfunction isAfter(a, b) {\n if (!hasSortableData(a) || !hasSortableData(b)) {\n return false;\n }\n\n if (!isSameContainer(a, b)) {\n return false;\n }\n\n return a.data.current.sortable.index < b.data.current.sortable.index;\n}\n\nexport { SortableContext, arrayMove, arraySwap, defaultAnimateLayoutChanges, defaultNewIndexGetter, hasSortableData, horizontalListSortingStrategy, rectSortingStrategy, rectSwappingStrategy, sortableKeyboardCoordinates, useSortable, verticalListSortingStrategy };\n//# sourceMappingURL=sortable.esm.js.map\n","import * as React from \"react\"\nimport { useState, useEffect } from \"react\"\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n type DragEndEvent,\n type DragStartEvent,\n DragOverlay,\n} from \"@dnd-kit/core\"\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n rectSortingStrategy,\n} from \"@dnd-kit/sortable\"\nimport { useSortable } from \"@dnd-kit/sortable\"\nimport { CSS } from \"@dnd-kit/utilities\"\n\ninterface SortableItemProps<T> {\n item: T\n index: number\n renderItem: (item: T, index: number, isDragging?: boolean) => React.ReactNode\n renderDragIndicator?: (item: T, index: number) => React.ReactNode\n keyExtractor: (item: T) => string\n disabled?: boolean\n}\n\nfunction SortableItem<T>({\n item,\n index,\n renderItem,\n renderDragIndicator,\n keyExtractor,\n disabled = false,\n}: SortableItemProps<T>) {\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({\n id: keyExtractor(item),\n disabled,\n })\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n }\n\n return (\n <div ref={setNodeRef} style={style} className={`relative group/drag-item ${isDragging ? \"opacity-50\" : \"\"} ${disabled ? \"opacity-60\" : \"\"}`}>\n {/* Main item content */}\n {renderItem(item, index, isDragging)}\n\n {/* Drag indicator overlay */}\n {!disabled && (\n renderDragIndicator ? (\n <div {...attributes} {...listeners}>\n {renderDragIndicator(item, index)}\n </div>\n ) : (\n /* If no drag indicator, make entire item draggable */\n <div\n {...attributes}\n {...listeners}\n className=\"absolute inset-0 cursor-grab active:cursor-grabbing outline-none touch-none\"\n />\n )\n )}\n </div>\n )\n}\n\nfunction DragOverlayItem<T>({\n item,\n index,\n renderItem,\n}: {\n item: T\n index: number\n renderItem: (item: T, index: number, isDragging?: boolean) => React.ReactNode\n}) {\n return <div className=\"rotate-2\">{renderItem(item, index, true)}</div>\n}\n\nexport interface DragDropGridProps<T> {\n items: T[]\n onChange: (reorderedItems: T[]) => void\n renderItem: (item: T, index: number, isDragging?: boolean) => React.ReactNode\n renderDragIndicator?: (item: T, index: number) => React.ReactNode\n keyExtractor: (item: T) => string\n gridColsClass?: string\n className?: string\n renderToolbar?: () => React.ReactNode\n renderEmptyState?: () => React.ReactNode\n showDebugInfo?: boolean\n renderDragOverlay?: (item: T, index: number) => React.ReactNode\n isItemDisabled?: (item: T) => boolean\n canDropAt?: (draggedItem: T, targetIndex: number, items: T[]) => boolean\n}\n\nexport default function DragDropGrid<T>({\n items: initialItems,\n onChange,\n renderItem,\n renderDragIndicator,\n keyExtractor,\n gridColsClass = \"page-drag-drop-grid-cols\",\n className = \"\",\n renderToolbar,\n renderEmptyState,\n showDebugInfo = false,\n renderDragOverlay,\n isItemDisabled,\n canDropAt,\n}: DragDropGridProps<T>) {\n const [items, setItems] = useState<T[]>(initialItems)\n\n // Sync with parent state when initialItems changes\n useEffect(() => {\n setItems(initialItems)\n }, [initialItems])\n\n const [activeId, setActiveId] = useState<string | null>(null)\n\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n )\n\n const handleDragStart = (event: DragStartEvent) => {\n const draggedItem = items.find((item) => keyExtractor(item) === event.active.id)\n // Prevent dragging disabled items\n if (draggedItem && isItemDisabled && isItemDisabled(draggedItem)) {\n return\n }\n setActiveId(event.active.id as string)\n }\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event\n\n if (!over || active.id === over.id) {\n setActiveId(null)\n return\n }\n\n const draggedItem = items.find((item) => keyExtractor(item) === active.id)\n const oldIndex = items.findIndex((item) => keyExtractor(item) === active.id)\n const newIndex = items.findIndex((item) => keyExtractor(item) === over.id)\n\n // Prevent dragging disabled items\n if (draggedItem && isItemDisabled && isItemDisabled(draggedItem)) {\n setActiveId(null)\n return\n }\n\n // Check if drop is allowed at target position\n if (canDropAt && !canDropAt(draggedItem!, newIndex, items)) {\n setActiveId(null)\n return\n }\n\n if (oldIndex !== -1 && newIndex !== -1) {\n const newItems = arrayMove(items, oldIndex, newIndex)\n setItems(newItems)\n onChange(newItems)\n }\n\n setActiveId(null)\n }\n\n const activeItem = items.find((item) => keyExtractor(item) === activeId)\n const activeIndex = activeItem ? items.findIndex((item) => keyExtractor(item) === activeId) : -1\n\n return (\n <div className={`w-full ${className}`}>\n {renderToolbar && <div className=\"mb-6\">{renderToolbar()}</div>}\n\n {items.length === 0 && renderEmptyState ? (\n renderEmptyState()\n ) : (\n <div className=\"mb-6\">\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n >\n <SortableContext items={items.map(keyExtractor)} strategy={rectSortingStrategy}>\n <div className={gridColsClass}>\n {items.map((item, index) => (\n <SortableItem\n key={keyExtractor(item)}\n item={item}\n index={index}\n renderItem={renderItem}\n renderDragIndicator={renderDragIndicator}\n keyExtractor={keyExtractor}\n disabled={isItemDisabled ? isItemDisabled(item) : false}\n />\n ))}\n </div>\n </SortableContext>\n <DragOverlay>\n {activeItem ? (\n renderDragOverlay ? (\n <div className=\"rotate-2 shadow-lg\">{renderDragOverlay(activeItem, activeIndex)}</div>\n ) : (\n <DragOverlayItem item={activeItem} index={activeIndex} renderItem={renderItem} />\n )\n ) : null}\n </DragOverlay>\n </DndContext>\n </div>\n )}\n\n {/* Debug info */}\n {showDebugInfo && (\n <div className=\"fixed top-4 left-4 bg-white rounded-lg border shadow-lg p-3 text-sm max-w-xs\">\n <div className=\"font-medium mb-1\">Debug Info</div>\n <div className=\"text-gray-600 text-xs\">\n Items: {items.length} | Active: {activeId || \"none\"}\n </div>\n <div className=\"text-xs text-gray-500 mt-1 break-all\">\n Order: {items.map((item, i) => `${i + 1}:${keyExtractor(item).slice(0, 3)}`).join(\" → \")}\n </div>\n </div>\n )}\n </div>\n )\n}\n\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"./cn\"\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-offset-2\",\n {\n variants: {\n variant: {\n default: \"border-transparent bg-gray-900 text-white\",\n secondary: \"border-transparent bg-gray-100 text-gray-900\",\n outline: \"border-gray-300 text-gray-900 bg-white\",\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\n","import * as React from \"react\"\nimport { GripVertical, ArrowUpDown, Lock, Plus } from \"lucide-react\"\nimport DragDropGrid from \"../../utility/drag-drop-grid\"\nimport { Sheet, SheetContent, SheetHeader, SheetTitle, SheetDescription, SheetFooter } from \"../../ui/sheet\"\nimport { Badge } from \"../../ui/badge\"\nimport { Button } from \"../../ui/button\"\nimport { createDefaultRenderThumbnail } from \"./default-render-thumbnail\"\nimport type { PageComponent } from \"./page-group-utils\"\nimport { useShellTranslation } from \"../../i18n/locale-context\"\nimport type { LocalizedText } from \"../../i18n/i18n-core.js\"\n\nexport interface PageItem {\n id: string\n [key: string]: any\n}\n\nexport interface PageOrderDialogProps<T extends PageItem> {\n open: boolean\n onOpenChange: (open: boolean) => void\n pages: T[]\n onReorder: (newOrder: T[]) => void\n onRemove?: (item: T) => void\n renderThumbnail?: (page: T, index: number, isDragging?: boolean) => React.ReactNode\n \n // NEW: For automatic thumbnail rendering\n pageComponents?: { [pageId: string]: PageComponent }\n payload?: any\n \n // Page setup (same as Pagination setup prop) - supports format/orientation or explicit width/height in mm\n setup?: { width?: number; height?: number; [key: string]: any }\n \n title?: LocalizedText\n description?: LocalizedText\n gridColsClass?: string\n}\n\n// Default page thumbnail component with simple preview\nfunction DefaultPageThumbnail<T extends PageItem>({\n page,\n index,\n isDragging,\n}: {\n page: T\n index: number\n isDragging?: boolean\n}) {\n const { t, localize } = useShellTranslation()\n const thumbnailWidth = 200\n const thumbnailHeight = 280\n const strictPosition = (page as any).strictPosition\n const isLocked = strictPosition === 'start' || strictPosition === 'end'\n\n return (\n <div\n className={`flex items-center justify-center border relative rounded-lg bg-white overflow-hidden transition-all ${\n isDragging\n ? \"opacity-50 border-gray-400 shadow-xl scale-105\"\n : isLocked\n ? \"border-gray-300 bg-gray-50\"\n : \"border-gray-200 group-hover/drag-item:border-gray-300 group-hover/drag-item:shadow-md\"\n }`}\n > \n <div\n className=\"flex items-center justify-center\"\n style={{\n width: `${thumbnailWidth}px`,\n height: `${thumbnailHeight}px`,\n }}\n >\n {/* Default content rendering */}\n {page.content || (\n <div className=\"text-center p-4\">\n <div className=\"text-sm font-medium text-gray-700\">{localize(page.label) || t('page.fallbackName', { number: index + 1 })}</div>\n <div className=\"text-xs text-gray-400 mt-1 font-mono\">{page.id}</div>\n </div>\n )}\n </div>\n\n {/* Page number badge */}\n <div className=\"absolute top-2 left-2 z-20\">\n <Badge variant=\"secondary\" className={`text-xs min-w-[24px] h-6 font-medium bg-white/95 backdrop-blur-sm flex items-center justify-center shadow-sm border border-gray-200 ${isLocked ? 'opacity-75' : ''}`}>\n {isLocked ? (\n <Lock className=\"size-3 text-gray-500\" />\n ) : (\n <>\n <span className=\"group-hover/drag-item:hidden\">{index + 1}</span>\n <GripVertical className=\"size-4 text-gray-400 hidden group-hover/drag-item:block\" />\n </>\n )}\n </Badge>\n </div>\n </div>\n )\n}\n\nexport function PageOrderDialog<T extends PageItem>({\n open,\n onOpenChange,\n pages,\n onReorder,\n onRemove,\n renderThumbnail,\n pageComponents,\n payload,\n setup,\n title,\n description,\n gridColsClass = \"page-order-grid-cols\",\n}: PageOrderDialogProps<T>) {\n const shellI18n = useShellTranslation()\n const { t, localize } = shellI18n\n const resolvedTitle = localize(title) ?? t('reorderDialog.title')\n const resolvedDescription = localize(description) ?? t('reorderDialog.description')\n // Track local order changes - only apply on save\n const [localPages, setLocalPages] = React.useState<T[]>(pages)\n const [hasChanges, setHasChanges] = React.useState(false)\n const keyExtractor = (page: T) => page.id\n\n // Sync local state when pages prop changes (but only if dialog is closed or no local changes)\n React.useEffect(() => {\n if (!open) {\n setLocalPages(pages)\n setHasChanges(false)\n } else if (!hasChanges) {\n setLocalPages(pages)\n } else {\n const localIds = new Set(localPages.map(keyExtractor))\n const shouldSync = localIds.size !== pages.length || pages.some((page) => !localIds.has(keyExtractor(page)))\n if (shouldSync) {\n setLocalPages(pages)\n }\n }\n }, [pages, open, hasChanges, localPages])\n\n const handleLocalReorder = (newOrder: T[]) => {\n setLocalPages(newOrder)\n setHasChanges(true)\n }\n\n const handleSave = () => {\n onReorder(localPages)\n setHasChanges(false)\n onOpenChange(false)\n }\n\n const handleCancel = () => {\n setLocalPages(pages)\n setHasChanges(false)\n onOpenChange(false)\n }\n\n // Auto-create default renderThumbnail if pageComponents provided and no valid custom renderThumbnail\n const defaultRenderThumbnail = React.useMemo(() => { \n // Only auto-create if renderThumbnail is not provided or is not a function\n if ((!renderThumbnail || typeof renderThumbnail !== 'function') && pageComponents) {\n return createDefaultRenderThumbnail({ pageComponents, payload, setup, i18n: shellI18n })\n }\n return null\n }, [renderThumbnail, pageComponents, payload, setup, shellI18n])\n \n const renderPageThumbnail = (page: T, index: number, isDragging?: boolean) => {\n const strictPosition = (page as any).strictPosition\n const isLocked = strictPosition === 'start' || strictPosition === 'end'\n const showRemove = !!onRemove && !isLocked\n\n const handleRemove = (event: React.MouseEvent<HTMLButtonElement>) => {\n event.preventDefault()\n event.stopPropagation()\n if (!onRemove) return\n onRemove(page)\n setLocalPages((prev) => prev.filter((item) => keyExtractor(item) !== keyExtractor(page)))\n setHasChanges(true)\n }\n\n // Priority: 1. Custom renderThumbnail (if it's a function), 2. Auto-created defaultRenderThumbnail, 3. DefaultPageThumbnail\n const content = renderThumbnail && typeof renderThumbnail === 'function'\n ? renderThumbnail(page, index, isDragging)\n : defaultRenderThumbnail\n ? defaultRenderThumbnail(page as any, index, isDragging)\n : <DefaultPageThumbnail page={page} index={index} isDragging={isDragging} />\n\n return (\n <div className=\"relative inline-block align-top\">\n {content}\n {showRemove && (\n <button\n type=\"button\"\n title={t('reorderDialog.remove')}\n onClick={handleRemove}\n onPointerDown={(event) => event.stopPropagation()}\n className=\"group/remove-btn absolute -top-3 -right-3 z-30 hidden h-6 w-6 items-center justify-center rounded-full bg-white/50 hover:bg-white text-gray-900 backdrop-blur-md group-hover/drag-item:flex border border-gray-200\"\n >\n <GripVertical className=\"size-3.5 opacity-60 group-hover/remove-btn:hidden\" />\n <Plus className=\"size-3.5 rotate-45 hidden group-hover/remove-btn:block\" />\n </button>\n )}\n </div>\n )\n }\n\n const renderEmptyState = () => (\n <div className=\"text-center py-20\">\n <div className=\"w-12 h-12 bg-gray-50 rounded-lg flex items-center justify-center mx-auto mb-3\">\n <ArrowUpDown className=\"w-6 h-6 text-gray-400\" />\n </div>\n <div className=\"text-base font-medium text-gray-900 mb-1\">{t('reorderDialog.emptyTitle')}</div>\n <p className=\"text-sm text-gray-500\">{t('reorderDialog.emptyDescription')}</p>\n </div>\n )\n\n // Check if an item has strictPosition and should be disabled from dragging\n const isItemDisabled = React.useCallback((page: T) => {\n const strictPosition = (page as any).strictPosition;\n return strictPosition === 'start' || strictPosition === 'end';\n }, []);\n\n // Check if an item can be dropped at a specific position\n const canDropAt = React.useCallback((draggedItem: T, targetIndex: number, items: T[]) => {\n const draggedPosition = (draggedItem as any).strictPosition;\n \n // Items with strictPosition cannot be dragged (should be caught by isItemDisabled, but double-check)\n if (draggedPosition === 'start' || draggedPosition === 'end') {\n return false;\n }\n\n // Find the boundaries of start, middle, and end sections\n let startEndIndex = -1;\n let endStartIndex = items.length;\n \n for (let i = 0; i < items.length; i++) {\n const position = (items[i] as any).strictPosition;\n if (position === 'start') {\n startEndIndex = i;\n } else if (position === 'end' && endStartIndex === items.length) {\n endStartIndex = i;\n // Don't break - continue to find all end items\n }\n }\n\n // Regular items can only be dropped in the middle section\n // (after all start items and before all end items)\n if (targetIndex <= startEndIndex) {\n return false;\n }\n\n if (targetIndex >= endStartIndex) {\n return false;\n }\n\n return true;\n }, []);\n\n return (\n <Sheet open={open} onOpenChange={(newOpen) => {\n // Only allow closing via explicit cancel/save buttons\n if (!newOpen) {\n handleCancel()\n }\n }}>\n <SheetContent \n side=\"bottom\" \n className=\"h-[90vh] p-0 gap-0 w-full max-w-none flex flex-col [&>button]:hidden\"\n onPointerDownOutside={(e) => {\n // Prevent closing when clicking outside - use cancel/save buttons instead\n e.preventDefault()\n }}\n onEscapeKeyDown={(e) => {\n // Prevent escape from closing - use cancel button instead\n e.preventDefault()\n }}\n data-uhuu-editor\n >\n <SheetHeader className=\"border-b border-gray-200 p-4\">\n <div className=\"flex items-end gap-3\">\n <div className=\"w-8 h-8 bg-gray-100 rounded-full flex items-center justify-center shrink-0 mb-0.5\">\n <ArrowUpDown className=\"w-4 h-4\" />\n </div>\n <div className=\"flex-1\">\n <SheetTitle className=\"text-base font-medium text-gray-900 leading-tight\">{resolvedTitle}</SheetTitle>\n <SheetDescription className=\"text-xs text-gray-400 mt-0.5\">{resolvedDescription}</SheetDescription>\n </div>\n <Badge variant=\"outline\" className=\"text-xs mb-0.5 mr-8\">\n {t('page.count', { count: localPages.length })}\n </Badge>\n </div>\n </SheetHeader>\n\n <div className=\"flex-1 overflow-hidden flex flex-col\">\n <div className=\"flex-1 overflow-auto p-6 bg-gray-50\">\n <DragDropGrid\n items={localPages}\n onChange={handleLocalReorder}\n renderItem={renderPageThumbnail}\n keyExtractor={keyExtractor}\n renderEmptyState={renderEmptyState}\n gridColsClass={gridColsClass}\n className=\"pb-4\"\n isItemDisabled={isItemDisabled}\n canDropAt={canDropAt}\n />\n </div>\n </div>\n\n <SheetFooter className=\"border-t border-gray-200 px-4 py-3 gap-3\">\n <Button\n variant=\"outline\"\n onClick={handleCancel}\n >\n {t('reorderDialog.cancel')}\n </Button>\n <Button\n variant=\"default\"\n onClick={handleSave}\n disabled={!hasChanges}\n >\n {t('reorderDialog.save')}\n </Button>\n </SheetFooter>\n </SheetContent>\n </Sheet>\n )\n}\n","import * as React from 'react';\nimport Pagination from '../../pagination-static/pagination-static';\nimport Sheet from '../../pagination-static/sheet-static';\nimport {\n StaticFlowContext,\n type StaticFlowChunk,\n type StaticFlowMeasurement,\n} from '../../pagination-static/flow-static';\nimport type { PageComponent, PageGroup, PageItem, SpreadInfo, StandalonePage } from './page-group-utils';\nimport type { PageDataBinding } from './data-binding';\n\ninterface PageCanvasProps {\n pageId: string;\n templateId?: string;\n componentKey?: string;\n component?: PageComponent;\n payload?: any;\n pagePayload?: any;\n integration?: any;\n page?: StandalonePage;\n parentGroup?: PageItem;\n setup?: { width: number; height: number; [key: string]: any };\n reference?: React.ReactNode;\n overlay?: React.ReactNode | ((args: { pageNo: number; pageId: string }) => React.ReactNode);\n className?: string;\n pageNo?: number;\n totalPages?: number;\n measurementPageNo?: number;\n measurementTotalPages?: number;\n dataBinding?: PageDataBinding;\n flowPageIndex?: number;\n flowChunksByFlowId?: Record<string, StaticFlowChunk[]>;\n measureFlow?: boolean;\n flowMeasurementKey?: string;\n flowMeasurementVersion?: string;\n onFlowMeasurement?: (pageKey: string, measurement: StaticFlowMeasurement) => void;\n renderVisible?: boolean;\n /**\n * `sheet` (default) wraps the page in Pagination + Sheet. `content` returns only the\n * page component (plus reference overlay) for a host that provides the sheet itself —\n * the cover spread panels. No hidden measurement pass runs in `content` mode.\n */\n renderMode?: 'sheet' | 'content';\n /** Cover spread placement, forwarded to the page component as `spread`. */\n spread?: SpreadInfo;\n}\n\n/**\n * Small helper that renders a single page with Pagination + Sheet\n * and optional reference/overlay. Keeps templates from duplicating\n * the same scaffold for every page render.\n */\nexport function PageCanvas({\n pageId,\n templateId,\n componentKey,\n component: PageComponent,\n payload,\n pagePayload,\n integration,\n page,\n parentGroup,\n setup,\n reference,\n overlay,\n className,\n pageNo = 0,\n totalPages,\n measurementPageNo,\n measurementTotalPages,\n dataBinding,\n flowPageIndex = 0,\n flowChunksByFlowId,\n measureFlow = false,\n flowMeasurementKey,\n flowMeasurementVersion,\n onFlowMeasurement,\n renderVisible = true,\n renderMode = 'sheet',\n spread,\n}: PageCanvasProps) {\n const renderOverlay = typeof overlay === 'function'\n ? (pageNo: number) => overlay({ pageNo, pageId })\n : () => overlay;\n\n // Build automatic class for page key targeting\n const pageKey = componentKey || templateId || pageId;\n const pageKeyClass = pageKey ? `uhuu-page--${pageKey}` : '';\n const combinedClassName = [pageKeyClass, className].filter(Boolean).join(' ');\n\n const renderComponent = (\n componentPageNo: number = pageNo,\n componentTotalPages: number | undefined = totalPages\n ) => PageComponent ? (\n <PageComponent\n payload={payload}\n pagePayload={pagePayload}\n integration={integration}\n pageId={pageId}\n templateId={templateId ?? componentKey ?? pageId}\n pageNum={componentPageNo}\n totalPages={componentTotalPages}\n page={page}\n parentGroup={parentGroup as PageGroup}\n componentKey={componentKey}\n dataBinding={dataBinding}\n spread={spread}\n />\n ) : null;\n\n const visibleFlowContext = React.useMemo(\n () => ({\n mode: 'visible' as const,\n pageIndex: flowPageIndex,\n chunksByFlowId: flowChunksByFlowId,\n }),\n [flowPageIndex, flowChunksByFlowId]\n );\n\n const registerFlowMeasurement = React.useCallback((measurement: StaticFlowMeasurement) => {\n if (!flowMeasurementKey) return;\n onFlowMeasurement?.(flowMeasurementKey, measurement);\n }, [flowMeasurementKey, onFlowMeasurement]);\n\n const measureFlowContext = React.useMemo(\n () => ({\n mode: 'measure' as const,\n pageIndex: 0,\n measurementVersion: flowMeasurementVersion,\n registerMeasurement: registerFlowMeasurement,\n }),\n [flowMeasurementVersion, registerFlowMeasurement]\n );\n\n if (renderMode === 'content') {\n return (\n <>\n {reference}\n <StaticFlowContext.Provider value={visibleFlowContext}>\n {renderComponent(pageNo, totalPages)}\n </StaticFlowContext.Provider>\n </>\n );\n }\n\n return (\n <>\n {measureFlow && onFlowMeasurement && flowMeasurementKey && (\n <div\n style={{\n position: 'fixed',\n visibility: 'hidden',\n pointerEvents: 'none',\n left: '-100000px',\n top: 0,\n // FlowArea measures its own bounded page body. A 0×0 host makes\n // that body fall back to the total item height, which in turn\n // produces a one-page viewer/runtime chunk despite a correct\n // interactive Review measurement. Keep this offscreen surface at\n // the real Sheet dimensions while hiding it from the user.\n width: 'calc(var(--uhuu-page-width) + 2 * var(--uhuu-page-bleed))',\n height: 'calc(var(--uhuu-page-height) + 2 * var(--uhuu-page-bleed))',\n minWidth: 'calc(var(--uhuu-page-width) + 2 * var(--uhuu-page-bleed))',\n minHeight: 'calc(var(--uhuu-page-height) + 2 * var(--uhuu-page-bleed))',\n overflow: 'hidden',\n zIndex: -1,\n }}\n aria-hidden=\"true\"\n data-uhuu-flow-measurement=\"true\"\n >\n <Pagination setup={setup}>\n <Sheet className={combinedClassName} pageNo={pageNo} data-page-key={pageKey}>\n <StaticFlowContext.Provider value={measureFlowContext}>\n {renderComponent(\n measurementPageNo ?? pageNo,\n measurementTotalPages ?? totalPages\n )}\n </StaticFlowContext.Provider>\n </Sheet>\n </Pagination>\n </div>\n )}\n\n {renderVisible && (\n <Pagination setup={setup}>\n <Sheet\n className={combinedClassName}\n pageNo={pageNo}\n overlay={({ pageNo }) => renderOverlay(pageNo)}\n data-page-key={pageKey}\n >\n {reference}\n <StaticFlowContext.Provider value={visibleFlowContext}>\n {renderComponent(pageNo, totalPages)}\n </StaticFlowContext.Provider>\n </Sheet>\n </Pagination>\n )}\n </>\n );\n}\n\nexport default PageCanvas;\n","import * as React from \"react\"\nimport { cn } from \"./cn\"\n\nexport interface SelectProps extends React.SelectHTMLAttributes<HTMLSelectElement> {}\n\nconst Select = React.forwardRef<HTMLSelectElement, SelectProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <select\n className={cn(\n \"flex h-8 w-full rounded-md border border-gray-200 bg-white px-2.5 py-1 text-sm text-gray-900 outline-none transition-colors focus:border-gray-400 focus:ring-2 focus:ring-gray-200 focus:ring-offset-0 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n >\n {children}\n </select>\n )\n }\n)\nSelect.displayName = \"Select\"\n\nexport { Select }\n\n\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\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 { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar SWITCH_NAME = \"Switch\";\nvar [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\nvar [SwitchProviderImpl, useSwitchContext] = createSwitchContext(SWITCH_NAME);\nfunction SwitchProvider(props) {\n const {\n __scopeSwitch,\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: SWITCH_NAME\n });\n const [control, setControl] = React.useState(null);\n const [bubbleInput, setBubbleInput] = React.useState(null);\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const [userInteractionCount, onUserInteraction] = React.useReducer(\n (count) => count + 1,\n 0\n );\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 setChecked,\n disabled,\n control,\n setControl,\n name,\n form,\n value,\n hasConsumerStoppedPropagationRef,\n userInteractionCount,\n onUserInteraction,\n required,\n defaultChecked,\n isFormControl,\n bubbleInput,\n setBubbleInput\n };\n return /* @__PURE__ */ jsx(SwitchProviderImpl, { scope: __scopeSwitch, ...context, children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children });\n}\n__name(SwitchProvider, \"SwitchProvider\");\nvar TRIGGER_NAME = \"SwitchTrigger\";\nvar SwitchTrigger = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function SwitchTrigger2({ __scopeSwitch, onClick, ...switchProps }, forwardedRef) {\n const {\n control,\n form,\n value,\n disabled,\n checked,\n required,\n setControl,\n setChecked,\n hasConsumerStoppedPropagationRef,\n onUserInteraction,\n isFormControl,\n bubbleInput\n } = useSwitchContext(TRIGGER_NAME, __scopeSwitch);\n const composedRefs = useComposedRefs(forwardedRef, setControl);\n const initialCheckedStateRef = React.useRef(checked);\n React.useEffect(() => {\n const associatedForm = form ? control?.ownerDocument.getElementById(form) : control?.form;\n if (associatedForm instanceof HTMLFormElement) {\n const reset = /* @__PURE__ */ __name(() => setChecked(initialCheckedStateRef.current), \"reset\");\n associatedForm.addEventListener(\"reset\", reset);\n return () => associatedForm.removeEventListener(\"reset\", reset);\n }\n }, [control, form, setChecked]);\n return /* @__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(onClick, (event) => {\n onUserInteraction();\n setChecked((prevChecked) => !prevChecked);\n if (bubbleInput && isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n );\n }, \"SwitchTrigger\")\n);\nvar Switch = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function Switch2(props, forwardedRef) {\n const {\n __scopeSwitch,\n name,\n checked,\n defaultChecked,\n required,\n disabled,\n value,\n onCheckedChange,\n form,\n ...switchProps\n } = props;\n return /* @__PURE__ */ jsx(\n SwitchProvider,\n {\n __scopeSwitch,\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 SwitchTrigger,\n {\n ...switchProps,\n ref: forwardedRef,\n __scopeSwitch\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n SwitchBubbleInput,\n {\n __scopeSwitch\n }\n )\n ] })\n }\n );\n }, \"Switch\")\n);\nvar THUMB_NAME = \"SwitchThumb\";\nvar SwitchThumb = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function SwitchThumb2(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 }, \"SwitchThumb\")\n);\nvar BUBBLE_INPUT_NAME = \"SwitchBubbleInput\";\nvar SwitchBubbleInput = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function SwitchBubbleInput2({ __scopeSwitch, onClick, ...props }, forwardedRef) {\n const {\n control,\n hasConsumerStoppedPropagationRef,\n userInteractionCount,\n checked,\n defaultChecked,\n required,\n disabled,\n name,\n value,\n form,\n bubbleInput,\n setBubbleInput\n } = useSwitchContext(BUBBLE_INPUT_NAME, __scopeSwitch);\n const composedRefs = useComposedRefs(forwardedRef, setBubbleInput);\n const controlSize = useSize(control);\n const shouldStopClickPropagationRef = React.useRef(false);\n const prevCheckedRef = React.useRef(checked);\n const prevUserInteractionCountRef = React.useRef(userInteractionCount);\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 isUserInteraction = userInteractionCount !== prevUserInteractionCountRef.current;\n prevUserInteractionCountRef.current = userInteractionCount;\n const checkedChanged = prevCheckedRef.current !== checked;\n prevCheckedRef.current = checked;\n const bubbles = !(isUserInteraction && hasConsumerStoppedPropagationRef.current);\n if (checkedChanged && setChecked) {\n shouldStopClickPropagationRef.current = !isUserInteraction;\n const event = new Event(\"click\", { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n shouldStopClickPropagationRef.current = false;\n }\n }, [bubbleInput, checked, hasConsumerStoppedPropagationRef, userInteractionCount]);\n const defaultCheckedRef = React.useRef(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 onClick: composeEventHandlers(onClick, (event) => {\n if (shouldStopClickPropagationRef.current) {\n event.stopPropagation();\n }\n }),\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 }, \"SwitchBubbleInput\")\n);\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n__name(isFunction, \"isFunction\");\nfunction getState(checked) {\n return checked ? \"checked\" : \"unchecked\";\n}\n__name(getState, \"getState\");\nexport {\n Switch as Root,\n Switch,\n SwitchThumb,\n SwitchThumb as Thumb,\n createSwitchScope,\n SwitchBubbleInput as unstable_BubbleInput,\n SwitchProvider as unstable_Provider,\n SwitchBubbleInput as unstable_SwitchBubbleInput,\n SwitchProvider as unstable_SwitchProvider,\n SwitchTrigger as unstable_SwitchTrigger,\n SwitchTrigger as unstable_Trigger\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from 'react'\nimport * as SwitchPrimitive from '@radix-ui/react-switch'\nimport { cn } from './cn'\n\nexport interface SwitchProps extends React.ComponentProps<typeof SwitchPrimitive.Root> {}\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitive.Root>,\n SwitchProps\n>(({ className, ...props }, ref) => {\n return (\n <SwitchPrimitive.Root\n ref={ref}\n className={cn(\n 'peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent bg-gray-200 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-gray-400 focus-visible:ring-offset-2 focus-visible:ring-offset-white disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-gray-900 data-[state=unchecked]:bg-gray-200',\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n className={cn(\n 'pointer-events-none block h-4 w-4 rounded-full bg-white shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0'\n )}\n />\n </SwitchPrimitive.Root>\n )\n})\nSwitch.displayName = SwitchPrimitive.Root.displayName\n\nexport { Switch }\n","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/number.ts\nfunction clamp(value, [min, max]) {\n return Math.min(max, Math.max(min, value));\n}\n__name(clamp, \"clamp\");\nexport {\n clamp\n};\n//# sourceMappingURL=index.mjs.map\n","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// 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}\n__name(usePrevious, \"usePrevious\");\nexport {\n usePrevious\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/slider.tsx\nimport * as React from \"react\";\nimport { clamp } from \"@radix-ui/number\";\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 { useDirection } from \"@radix-ui/react-direction\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar Orientation = {\n Vertical: \"vertical\",\n Horizontal: \"horizontal\"\n};\nvar Direction = {\n LTR: \"ltr\",\n RTL: \"rtl\"\n};\nvar PAGE_KEYS = [\"PageUp\", \"PageDown\"];\nvar ARROW_KEYS = [\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"];\nvar BACK_KEYS = {\n \"from-left\": [\"Home\", \"PageDown\", \"ArrowDown\", \"ArrowLeft\"],\n \"from-right\": [\"Home\", \"PageDown\", \"ArrowDown\", \"ArrowRight\"],\n \"from-bottom\": [\"Home\", \"PageDown\", \"ArrowDown\", \"ArrowLeft\"],\n \"from-top\": [\"Home\", \"PageDown\", \"ArrowUp\", \"ArrowLeft\"]\n};\nvar SLIDER_NAME = \"Slider\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(SLIDER_NAME);\nvar [createSliderContext, createSliderScope] = createContextScope(SLIDER_NAME, [\n createCollectionScope\n]);\nvar [SliderProvider, useSliderContext] = createSliderContext(SLIDER_NAME);\nvar Slider = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function Slider2(props, forwardedRef) {\n const {\n name,\n min = 0,\n max = 100,\n step = 1,\n orientation = Orientation.Horizontal,\n disabled = false,\n minStepsBetweenThumbs = 0,\n preserveThumbOrder = false,\n defaultValue = [min],\n value,\n onValueChange = /* @__PURE__ */ __name(() => {\n }, \"onValueChange\"),\n onValueCommit = /* @__PURE__ */ __name(() => {\n }, \"onValueCommit\"),\n inverted = false,\n form,\n ...sliderProps\n } = props;\n const thumbRefs = React.useRef(/* @__PURE__ */ new Set());\n const valueIndexToChangeRef = React.useRef(0);\n const isKeyboardInteractionRef = React.useRef(false);\n const isHorizontal = orientation === Orientation.Horizontal;\n const SliderOrientation = isHorizontal ? SliderHorizontal : SliderVertical;\n const [control, setControl] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, setControl);\n const [values = [], setValues] = useControllableState({\n prop: value,\n defaultProp: defaultValue,\n onChange: /* @__PURE__ */ __name((value2) => {\n const thumbs = [...thumbRefs.current];\n thumbs[valueIndexToChangeRef.current]?.focus({\n preventScroll: true,\n focusVisible: isKeyboardInteractionRef.current\n });\n isKeyboardInteractionRef.current = false;\n onValueChange(value2);\n }, \"onChange\")\n });\n const valuesBeforeSlideStartRef = React.useRef(values);\n const initialValuesRef = React.useRef(values);\n React.useEffect(() => {\n const associatedForm = form ? control?.ownerDocument.getElementById(form) : control?.closest(\"form\");\n if (associatedForm instanceof HTMLFormElement) {\n const reset = /* @__PURE__ */ __name(() => setValues(initialValuesRef.current), \"reset\");\n associatedForm.addEventListener(\"reset\", reset);\n return () => associatedForm.removeEventListener(\"reset\", reset);\n }\n }, [control, form, setValues]);\n function handleSlideStart(value2) {\n const closestIndex = getClosestValueIndex(values, value2);\n updateValues(value2, closestIndex);\n }\n __name(handleSlideStart, \"handleSlideStart\");\n function handleSlideMove(value2) {\n updateValues(value2, valueIndexToChangeRef.current);\n }\n __name(handleSlideMove, \"handleSlideMove\");\n function handleSlideEnd() {\n const hasChanged = String(values) !== String(valuesBeforeSlideStartRef.current);\n if (hasChanged) onValueCommit(values);\n }\n __name(handleSlideEnd, \"handleSlideEnd\");\n function updateValues(value2, atIndex, { commit } = { commit: false }) {\n const decimalCount = getDecimalCount(step);\n const snapToStep = roundValue(Math.round((value2 - min) / step) * step + min, decimalCount);\n const nextValue = clamp(snapToStep, [min, max]);\n setValues((prevValues = []) => {\n const minStepsDistance = minStepsBetweenThumbs * step;\n const constrainedValue = preserveThumbOrder ? clamp(nextValue, [\n prevValues[atIndex - 1] === void 0 ? min : prevValues[atIndex - 1] + minStepsDistance,\n prevValues[atIndex + 1] === void 0 ? max : prevValues[atIndex + 1] - minStepsDistance\n ]) : nextValue;\n const nextValues = getNextSortedValues(prevValues, constrainedValue, atIndex);\n if (hasMinStepsBetweenValues(nextValues, minStepsDistance)) {\n valueIndexToChangeRef.current = preserveThumbOrder ? atIndex : nextValues.indexOf(constrainedValue);\n const hasChanged = String(nextValues) !== String(prevValues);\n if (hasChanged && commit) onValueCommit(nextValues);\n return hasChanged ? nextValues : prevValues;\n } else {\n return prevValues;\n }\n });\n }\n __name(updateValues, \"updateValues\");\n return /* @__PURE__ */ jsx(\n SliderProvider,\n {\n scope: props.__scopeSlider,\n name,\n disabled,\n min,\n max,\n valueIndexToChangeRef,\n thumbs: thumbRefs.current,\n values,\n orientation,\n form,\n children: /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeSlider, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeSlider, children: /* @__PURE__ */ jsx(\n SliderOrientation,\n {\n \"aria-disabled\": disabled,\n \"data-disabled\": disabled ? \"\" : void 0,\n ...sliderProps,\n ref: composedRefs,\n onPointerDown: composeEventHandlers(sliderProps.onPointerDown, () => {\n if (!disabled) {\n valuesBeforeSlideStartRef.current = values;\n isKeyboardInteractionRef.current = false;\n }\n }),\n min,\n max,\n inverted,\n onSlideStart: disabled ? void 0 : handleSlideStart,\n onSlideMove: disabled ? void 0 : handleSlideMove,\n onSlideEnd: disabled ? void 0 : handleSlideEnd,\n onHomeKeyDown: () => {\n if (!disabled) {\n isKeyboardInteractionRef.current = true;\n updateValues(min, 0, { commit: true });\n }\n },\n onEndKeyDown: () => {\n if (!disabled) {\n isKeyboardInteractionRef.current = true;\n updateValues(max, values.length - 1, { commit: true });\n }\n },\n onStepKeyDown: ({ event, direction: stepDirection }) => {\n if (!disabled) {\n isKeyboardInteractionRef.current = true;\n const isPageKey = PAGE_KEYS.includes(event.key);\n const isSkipKey = isPageKey || event.shiftKey && ARROW_KEYS.includes(event.key);\n const multiplier = isSkipKey ? 10 : 1;\n const atIndex = valueIndexToChangeRef.current;\n const value2 = values[atIndex];\n const nextValue = getNextStepValue(value2, {\n min,\n step,\n direction: stepDirection,\n multiplier\n });\n updateValues(nextValue, atIndex, { commit: true });\n }\n }\n }\n ) }) })\n }\n );\n }, \"Slider\")\n);\nvar [SliderOrientationProvider, useSliderOrientationContext] = createSliderContext(SLIDER_NAME, {\n startEdge: \"left\",\n endEdge: \"right\",\n size: \"width\",\n direction: 1\n});\nvar SliderHorizontal = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function SliderHorizontal2(props, forwardedRef) {\n const {\n min,\n max,\n dir,\n inverted,\n onSlideStart,\n onSlideMove,\n onSlideEnd,\n onStepKeyDown,\n ...sliderProps\n } = props;\n const [slider, setSlider] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, setSlider);\n const rectRef = React.useRef(void 0);\n const direction = useDirection(dir);\n const isDirectionLTR = direction === Direction.LTR;\n const isSlidingFromLeft = isDirectionLTR && !inverted || !isDirectionLTR && inverted;\n function getValueFromPointer(pointerPosition) {\n const rect = rectRef.current || slider.getBoundingClientRect();\n const input = [0, rect.width];\n const output = isSlidingFromLeft ? [min, max] : [max, min];\n const value = linearScale(input, output);\n rectRef.current = rect;\n return value(pointerPosition - rect.left);\n }\n __name(getValueFromPointer, \"getValueFromPointer\");\n return /* @__PURE__ */ jsx(\n SliderOrientationProvider,\n {\n scope: props.__scopeSlider,\n startEdge: isSlidingFromLeft ? \"left\" : \"right\",\n endEdge: isSlidingFromLeft ? \"right\" : \"left\",\n direction: isSlidingFromLeft ? 1 : -1,\n size: \"width\",\n children: /* @__PURE__ */ jsx(\n SliderImpl,\n {\n dir: direction,\n \"data-orientation\": \"horizontal\",\n ...sliderProps,\n ref: composedRefs,\n style: {\n ...sliderProps.style,\n \"--radix-slider-thumb-transform\": \"translateX(-50%)\"\n },\n onSlideStart: (event) => {\n const value = getValueFromPointer(event.clientX);\n onSlideStart?.(value);\n },\n onSlideMove: (event) => {\n const value = getValueFromPointer(event.clientX);\n onSlideMove?.(value);\n },\n onSlideEnd: () => {\n rectRef.current = void 0;\n onSlideEnd?.();\n },\n onStepKeyDown: (event) => {\n const slideDirection = isSlidingFromLeft ? \"from-left\" : \"from-right\";\n const isBackKey = BACK_KEYS[slideDirection].includes(event.key);\n onStepKeyDown?.({ event, direction: isBackKey ? -1 : 1 });\n }\n }\n )\n }\n );\n }, \"SliderHorizontal\")\n);\nvar SliderVertical = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function SliderVertical2(props, forwardedRef) {\n const {\n min,\n max,\n inverted,\n onSlideStart,\n onSlideMove,\n onSlideEnd,\n onStepKeyDown,\n ...sliderProps\n } = props;\n const sliderRef = React.useRef(null);\n const ref = useComposedRefs(forwardedRef, sliderRef);\n const rectRef = React.useRef(void 0);\n const isSlidingFromBottom = !inverted;\n function getValueFromPointer(pointerPosition) {\n const rect = rectRef.current || sliderRef.current.getBoundingClientRect();\n const input = [0, rect.height];\n const output = isSlidingFromBottom ? [max, min] : [min, max];\n const value = linearScale(input, output);\n rectRef.current = rect;\n return value(pointerPosition - rect.top);\n }\n __name(getValueFromPointer, \"getValueFromPointer\");\n return /* @__PURE__ */ jsx(\n SliderOrientationProvider,\n {\n scope: props.__scopeSlider,\n startEdge: isSlidingFromBottom ? \"bottom\" : \"top\",\n endEdge: isSlidingFromBottom ? \"top\" : \"bottom\",\n size: \"height\",\n direction: isSlidingFromBottom ? 1 : -1,\n children: /* @__PURE__ */ jsx(\n SliderImpl,\n {\n \"data-orientation\": \"vertical\",\n ...sliderProps,\n ref,\n style: {\n ...sliderProps.style,\n \"--radix-slider-thumb-transform\": \"translateY(50%)\"\n },\n onSlideStart: (event) => {\n const value = getValueFromPointer(event.clientY);\n onSlideStart?.(value);\n },\n onSlideMove: (event) => {\n const value = getValueFromPointer(event.clientY);\n onSlideMove?.(value);\n },\n onSlideEnd: () => {\n rectRef.current = void 0;\n onSlideEnd?.();\n },\n onStepKeyDown: (event) => {\n const slideDirection = isSlidingFromBottom ? \"from-bottom\" : \"from-top\";\n const isBackKey = BACK_KEYS[slideDirection].includes(event.key);\n onStepKeyDown?.({ event, direction: isBackKey ? -1 : 1 });\n }\n }\n )\n }\n );\n }, \"SliderVertical\")\n);\nvar SliderImpl = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function SliderImpl2(props, forwardedRef) {\n const {\n __scopeSlider,\n onSlideStart,\n onSlideMove,\n onSlideEnd,\n onHomeKeyDown,\n onEndKeyDown,\n onStepKeyDown,\n ...sliderProps\n } = props;\n const context = useSliderContext(SLIDER_NAME, __scopeSlider);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n ...sliderProps,\n ref: forwardedRef,\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if (event.key === \"Home\") {\n onHomeKeyDown(event);\n event.preventDefault();\n } else if (event.key === \"End\") {\n onEndKeyDown(event);\n event.preventDefault();\n } else if (PAGE_KEYS.concat(ARROW_KEYS).includes(event.key)) {\n onStepKeyDown(event);\n event.preventDefault();\n }\n }),\n onPointerDown: composeEventHandlers(props.onPointerDown, (event) => {\n const target = event.target;\n target.setPointerCapture(event.pointerId);\n event.preventDefault();\n if (context.thumbs.has(target)) {\n target.focus({ preventScroll: true, focusVisible: false });\n } else {\n onSlideStart(event);\n }\n }),\n onPointerMove: composeEventHandlers(props.onPointerMove, (event) => {\n const target = event.target;\n if (target.hasPointerCapture(event.pointerId)) onSlideMove(event);\n }),\n onPointerUp: composeEventHandlers(props.onPointerUp, (event) => {\n const target = event.target;\n if (target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n onSlideEnd(event);\n }\n })\n }\n );\n }, \"SliderImpl\")\n);\nvar TRACK_NAME = \"SliderTrack\";\nvar SliderTrack = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function SliderTrack2(props, forwardedRef) {\n const { __scopeSlider, ...trackProps } = props;\n const context = useSliderContext(TRACK_NAME, __scopeSlider);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-disabled\": context.disabled ? \"\" : void 0,\n \"data-orientation\": context.orientation,\n ...trackProps,\n ref: forwardedRef\n }\n );\n }, \"SliderTrack\")\n);\nvar RANGE_NAME = \"SliderRange\";\nvar SliderRange = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function SliderRange2(props, forwardedRef) {\n const { __scopeSlider, ...rangeProps } = props;\n const context = useSliderContext(RANGE_NAME, __scopeSlider);\n const orientation = useSliderOrientationContext(RANGE_NAME, __scopeSlider);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const valuesCount = context.values.length;\n const percentages = context.values.map(\n (value) => convertValueToPercentage(value, context.min, context.max)\n );\n const offsetStart = valuesCount > 1 ? Math.min(...percentages) : 0;\n const offsetEnd = 100 - Math.max(...percentages);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-orientation\": context.orientation,\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...rangeProps,\n ref: composedRefs,\n style: {\n ...props.style,\n [orientation.startEdge]: offsetStart + \"%\",\n [orientation.endEdge]: offsetEnd + \"%\"\n }\n }\n );\n }, \"SliderRange\")\n);\nvar THUMB_NAME = \"SliderThumb\";\nvar [SliderThumbContextProvider, useSliderThumbContext] = createSliderContext(THUMB_NAME);\nvar THUMB_PROVIDER_NAME = \"SliderThumbProvider\";\nfunction SliderThumbProvider(props) {\n const {\n __scopeSlider,\n name,\n children,\n // @ts-expect-error internal render prop\n internal_do_not_use_render\n } = props;\n const context = useSliderContext(THUMB_PROVIDER_NAME, __scopeSlider);\n const getItems = useCollection(__scopeSlider);\n const [thumb, setThumb] = React.useState(null);\n const index = React.useMemo(\n () => thumb ? getItems().findIndex((item) => item.ref.current === thumb) : -1,\n [getItems, thumb]\n );\n const size = useSize(thumb);\n const isFormControl = thumb ? !!context.form || !!thumb.closest(\"form\") : true;\n const value = context.values[index];\n const resolvedName = name ?? (context.name ? context.name + (context.values.length > 1 ? \"[]\" : \"\") : void 0);\n const percent = value === void 0 ? 0 : convertValueToPercentage(value, context.min, context.max);\n React.useEffect(() => {\n if (thumb) {\n context.thumbs.add(thumb);\n return () => {\n context.thumbs.delete(thumb);\n };\n }\n }, [thumb, context.thumbs]);\n const thumbContext = {\n value,\n name: resolvedName,\n form: context.form,\n isFormControl,\n index,\n thumb,\n onThumbChange: setThumb,\n percent,\n size\n };\n return /* @__PURE__ */ jsx(SliderThumbContextProvider, { scope: __scopeSlider, ...thumbContext, children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(thumbContext) : children });\n}\n__name(SliderThumbProvider, \"SliderThumbProvider\");\nvar THUMB_TRIGGER_NAME = \"SliderThumbTrigger\";\nvar SliderThumbTrigger = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function SliderThumbTrigger2(props, forwardedRef) {\n const { __scopeSlider, ...thumbProps } = props;\n const context = useSliderContext(THUMB_TRIGGER_NAME, __scopeSlider);\n const orientation = useSliderOrientationContext(THUMB_TRIGGER_NAME, __scopeSlider);\n const { index, value, percent, size, onThumbChange } = useSliderThumbContext(\n THUMB_TRIGGER_NAME,\n __scopeSlider\n );\n const composedRefs = useComposedRefs(forwardedRef, onThumbChange);\n const label = getLabel(index, context.values.length);\n const orientationSize = size?.[orientation.size];\n const thumbInBoundsOffset = orientationSize ? getThumbInBoundsOffset(orientationSize, percent, orientation.direction) : 0;\n return /* @__PURE__ */ jsx(\n \"span\",\n {\n style: {\n transform: \"var(--radix-slider-thumb-transform)\",\n position: \"absolute\",\n [orientation.startEdge]: `calc(${percent}% + ${thumbInBoundsOffset}px)`\n },\n children: /* @__PURE__ */ jsx(Collection.ItemSlot, { scope: __scopeSlider, children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n role: \"slider\",\n \"aria-label\": props[\"aria-label\"] || label,\n \"aria-valuemin\": context.min,\n \"aria-valuenow\": value,\n \"aria-valuemax\": context.max,\n \"aria-orientation\": context.orientation,\n \"data-orientation\": context.orientation,\n \"data-disabled\": context.disabled ? \"\" : void 0,\n tabIndex: context.disabled ? void 0 : 0,\n ...thumbProps,\n ref: composedRefs,\n style: value === void 0 ? { display: \"none\" } : props.style,\n onFocus: composeEventHandlers(props.onFocus, () => {\n context.valueIndexToChangeRef.current = index;\n })\n }\n ) })\n }\n );\n }, \"SliderThumbTrigger\")\n);\nvar SliderThumb = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function SliderThumb2(props, forwardedRef) {\n const { __scopeSlider, name, ...thumbProps } = props;\n return /* @__PURE__ */ jsx(\n SliderThumbProvider,\n {\n __scopeSlider,\n name,\n internal_do_not_use_render: ({ index, isFormControl }) => /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n SliderThumbTrigger,\n {\n ...thumbProps,\n ref: forwardedRef,\n __scopeSlider\n }\n ),\n isFormControl ? /* @__PURE__ */ jsx(\n SliderBubbleInput,\n {\n __scopeSlider\n },\n index\n ) : null\n ] })\n }\n );\n }, \"SliderThumb\")\n);\nvar BUBBLE_INPUT_NAME = \"SliderBubbleInput\";\nvar SliderBubbleInput = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function SliderBubbleInput2({ __scopeSlider, ...props }, forwardedRef) {\n const { value, name, form } = useSliderThumbContext(BUBBLE_INPUT_NAME, __scopeSlider);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(ref, forwardedRef);\n const prevValue = usePrevious(value);\n React.useEffect(() => {\n const input = ref.current;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(inputProto, \"value\");\n const setValue = descriptor.set;\n if (prevValue !== value && setValue) {\n const event = new Event(\"input\", { bubbles: true });\n setValue.call(input, value);\n input.dispatchEvent(event);\n }\n }, [prevValue, value]);\n return /* @__PURE__ */ jsx(\n Primitive.input,\n {\n style: { display: \"none\" },\n name,\n form,\n ...props,\n ref: composedRefs,\n defaultValue: value\n }\n );\n }, \"SliderBubbleInput\")\n);\nfunction getNextSortedValues(prevValues = [], nextValue, atIndex) {\n const nextValues = [...prevValues];\n nextValues[atIndex] = nextValue;\n return nextValues.sort((a, b) => a - b);\n}\n__name(getNextSortedValues, \"getNextSortedValues\");\nfunction convertValueToPercentage(value, min, max) {\n const maxSteps = max - min;\n const percentPerStep = 100 / maxSteps;\n const percentage = percentPerStep * (value - min);\n return clamp(percentage, [0, 100]);\n}\n__name(convertValueToPercentage, \"convertValueToPercentage\");\nfunction getLabel(index, totalValues) {\n if (totalValues > 2) {\n return `Value ${index + 1} of ${totalValues}`;\n } else if (totalValues === 2) {\n return [\"Minimum\", \"Maximum\"][index];\n } else {\n return void 0;\n }\n}\n__name(getLabel, \"getLabel\");\nfunction getClosestValueIndex(values, nextValue) {\n if (values.length === 1) return 0;\n const distances = values.map((value) => Math.abs(value - nextValue));\n const closestDistance = Math.min(...distances);\n return distances.indexOf(closestDistance);\n}\n__name(getClosestValueIndex, \"getClosestValueIndex\");\nfunction getThumbInBoundsOffset(width, left, direction) {\n const halfWidth = width / 2;\n const halfPercent = 50;\n const offset = linearScale([0, halfPercent], [0, halfWidth]);\n return (halfWidth - offset(left) * direction) * direction;\n}\n__name(getThumbInBoundsOffset, \"getThumbInBoundsOffset\");\nfunction getStepsBetweenValues(values) {\n return values.slice(0, -1).map((value, index) => values[index + 1] - value);\n}\n__name(getStepsBetweenValues, \"getStepsBetweenValues\");\nfunction hasMinStepsBetweenValues(values, minStepsBetweenValues) {\n if (minStepsBetweenValues > 0) {\n const stepsBetweenValues = getStepsBetweenValues(values);\n const actualMinStepsBetweenValues = Math.min(...stepsBetweenValues);\n return actualMinStepsBetweenValues >= minStepsBetweenValues;\n }\n return true;\n}\n__name(hasMinStepsBetweenValues, \"hasMinStepsBetweenValues\");\nfunction linearScale(input, output) {\n return (value) => {\n if (input[0] === input[1] || output[0] === output[1]) return output[0];\n const ratio = (output[1] - output[0]) / (input[1] - input[0]);\n return output[0] + ratio * (value - input[0]);\n };\n}\n__name(linearScale, \"linearScale\");\nfunction getDecimalCount(value) {\n if (!Number.isFinite(value)) return 0;\n const str = value.toString();\n if (str.includes(\"e\")) {\n const [coefficient, exponent] = str.split(\"e\");\n const decimalPart2 = coefficient.split(\".\")[1] || \"\";\n const exponentNum = Number(exponent);\n return Math.max(0, decimalPart2.length - exponentNum);\n }\n const decimalPart = str.split(\".\")[1];\n return decimalPart ? decimalPart.length : 0;\n}\n__name(getDecimalCount, \"getDecimalCount\");\nfunction roundValue(value, decimalCount) {\n const rounder = Math.pow(10, decimalCount);\n return Math.round(value * rounder) / rounder;\n}\n__name(roundValue, \"roundValue\");\nfunction getNextStepValue(value, {\n min,\n step,\n direction,\n multiplier\n}) {\n const decimalCount = getDecimalCount(step);\n const stepsFromMin = (value - min) / step;\n const nearestSteps = Math.round(stepsFromMin);\n const isAligned = roundValue(nearestSteps * step + min, decimalCount) === roundValue(value, decimalCount);\n let nextSteps;\n if (isAligned) {\n nextSteps = nearestSteps + multiplier * direction;\n } else if (direction > 0) {\n nextSteps = Math.ceil(stepsFromMin);\n } else {\n nextSteps = Math.floor(stepsFromMin);\n }\n return roundValue(nextSteps * step + min, decimalCount);\n}\n__name(getNextStepValue, \"getNextStepValue\");\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n__name(isFunction, \"isFunction\");\nexport {\n SliderRange as Range,\n Slider as Root,\n Slider,\n SliderRange,\n SliderThumb,\n SliderTrack,\n SliderThumb as Thumb,\n SliderTrack as Track,\n createSliderScope,\n SliderBubbleInput as unstable_BubbleInput,\n SliderBubbleInput as unstable_SliderBubbleInput,\n SliderThumbProvider as unstable_SliderThumbProvider,\n SliderThumbTrigger as unstable_SliderThumbTrigger,\n SliderThumbProvider as unstable_ThumbProvider,\n SliderThumbTrigger as unstable_ThumbTrigger\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from 'react'\nimport * as SliderPrimitive from '@radix-ui/react-slider'\nimport { cn } from './cn'\n\nexport interface SliderProps extends React.ComponentProps<typeof SliderPrimitive.Root> {}\n\nconst Slider = React.forwardRef<\n React.ElementRef<typeof SliderPrimitive.Root>,\n SliderProps\n>(({ className, ...props }, ref) => {\n return (\n <SliderPrimitive.Root\n ref={ref}\n className={cn(\n 'relative flex w-full touch-none select-none items-center data-[disabled]:opacity-50',\n className\n )}\n {...props}\n >\n <SliderPrimitive.Track className=\"relative h-1.5 w-full grow overflow-hidden rounded-full bg-gray-200\">\n <SliderPrimitive.Range className=\"absolute h-full bg-gray-900\" />\n </SliderPrimitive.Track>\n <SliderPrimitive.Thumb className=\"block h-4 w-4 rounded-full border-2 border-gray-900 bg-white shadow transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-gray-400 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\" />\n </SliderPrimitive.Root>\n )\n})\nSlider.displayName = SliderPrimitive.Root.displayName\n\nexport { Slider }\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/label.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar Label = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function Label2(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 }, \"Label\")\n);\nexport {\n Label,\n Label as Root\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from 'react'\nimport * as LabelPrimitive from '@radix-ui/react-label'\nimport { cn } from './cn'\n\nexport interface LabelProps extends React.ComponentProps<typeof LabelPrimitive.Root> {}\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n LabelProps\n>(({ className, ...props }, ref) => {\n return (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(\n 'text-sm font-medium leading-none text-gray-700 peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\n className\n )}\n {...props}\n />\n )\n})\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n","import { Check, Minus, Plus } from 'lucide-react';\nimport { Select } from '../../ui/select';\nimport { Switch } from '../../ui/switch';\nimport { Slider } from '../../ui/slider';\nimport { Label } from '../../ui/label';\nimport { Button } from '../../ui/button';\nimport { PageOption } from './page-editor';\nimport { PageItem } from './page-group-utils';\nimport { useShellTranslation } from '../../i18n/locale-context';\n\ntype PageOptionsRendererProps = {\n pageOptions: PageOption[];\n targetItem: PageItem;\n onChange: (pageOption: PageOption, targetItem: PageItem, value: string) => void;\n};\n\nexport function getApplicablePageOptions(pageOptions: PageOption[], targetItem: PageItem): PageOption[] {\n const matchesTarget = (option: PageOption, item: PageItem) => {\n if (!option.appliesTo) return true;\n const targets = Array.isArray(option.appliesTo) ? option.appliesTo : [option.appliesTo];\n return targets.some(target => {\n if (typeof target === 'function') return target(item);\n return target === item.id || target === item.templateId || (item as any).componentKey === target;\n });\n };\n\n return pageOptions.filter(option => {\n if (!matchesTarget(option, targetItem)) return false;\n const value = option.getValue(targetItem);\n if (option.type === 'select' || option.type === 'color-series') {\n return value !== '';\n }\n return true;\n });\n}\n\nexport function PageOptionsRenderer({\n pageOptions,\n targetItem,\n onChange,\n}: PageOptionsRendererProps) {\n const { localize } = useShellTranslation();\n const applicableOptions = getApplicablePageOptions(pageOptions, targetItem);\n\n const renderOption = (option: PageOption) => {\n const currentValue = option.getValue(targetItem);\n const label = localize(option.label);\n\n switch (option.type) {\n case 'select': {\n return (\n <div key={option.id} className=\"space-y-1.5\">\n <Label htmlFor={option.id} className=\"text-xs font-medium text-gray-500\">\n {label}\n </Label>\n <Select\n id={option.id}\n value={String(currentValue)}\n onChange={(e) => onChange(option, targetItem, e.target.value)}\n className=\"w-full text-sm\"\n >\n {option.options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {localize(opt.label)}\n </option>\n ))}\n </Select>\n </div>\n );\n }\n\n case 'toggle': {\n const boolValue = typeof currentValue === 'boolean' ? currentValue : currentValue === 'true';\n return (\n <div key={option.id} className=\"flex items-center justify-between py-1.5\">\n <Label htmlFor={option.id} className=\"text-xs font-medium text-gray-500\">\n {label}\n </Label>\n <Switch\n id={option.id}\n checked={boolValue}\n onCheckedChange={(checked) => onChange(option, targetItem, String(checked))}\n />\n </div>\n );\n }\n\n case 'slider': {\n const numValue = typeof currentValue === 'number' ? currentValue : Number(currentValue) || option.min;\n return (\n <div key={option.id} className=\"space-y-1.5\">\n <div className=\"flex items-center justify-between\">\n <Label htmlFor={option.id} className=\"text-xs font-medium text-gray-500\">\n {label}\n </Label>\n <span className=\"text-xs font-mono tabular-nums text-gray-700\">{numValue}</span>\n </div>\n <Slider\n id={option.id}\n min={option.min}\n max={option.max}\n step={option.step}\n value={[numValue]}\n onValueChange={(values) => onChange(option, targetItem, String(values[0]))}\n />\n </div>\n );\n }\n\n case 'counter': {\n const numValue = typeof currentValue === 'number' ? currentValue : Number(currentValue) || option.min;\n return (\n <div key={option.id} className=\"space-y-1.5\">\n <Label className=\"text-xs font-medium text-gray-500\">{label}</Label>\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"h-8 w-8 shrink-0 p-0\"\n onClick={() => {\n const newValue = Math.max(option.min, numValue - option.step);\n onChange(option, targetItem, String(newValue));\n }}\n disabled={numValue <= option.min}\n type=\"button\"\n >\n <Minus className=\"h-3.5 w-3.5\" />\n </Button>\n <div className=\"flex-1 text-center px-3 py-1.5 bg-gray-50 rounded-md border border-gray-200\">\n <span className=\"text-sm font-mono tabular-nums font-medium text-gray-900\">{numValue}</span>\n </div>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"h-8 w-8 shrink-0 p-0\"\n onClick={() => {\n const newValue = Math.min(option.max, numValue + option.step);\n onChange(option, targetItem, String(newValue));\n }}\n disabled={numValue >= option.max}\n type=\"button\"\n >\n <Plus className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n </div>\n );\n }\n\n case 'color-series': {\n const stringValue = String(currentValue);\n return (\n <div key={option.id} className=\"space-y-1.5\">\n <Label className=\"text-xs font-medium text-gray-500\">{label}</Label>\n <div className=\"flex flex-wrap gap-1.5\">\n {option.options.map((color) => {\n const isSelected = stringValue === color.value;\n const colorLabel = localize(color.label) ?? color.value;\n return (\n <button\n key={color.value}\n onClick={() => onChange(option, targetItem, color.value)}\n className={`h-7 w-7 rounded-md border-2 transition-all flex items-center justify-center ${\n isSelected\n ? 'border-gray-900 scale-110'\n : 'border-gray-200 hover:border-gray-400 hover:scale-105'\n }`}\n style={{ backgroundColor: color.hex || color.value }}\n type=\"button\"\n title={`${colorLabel}${color.hex ? ` (${color.hex})` : ''}`}\n >\n {isSelected && (\n <Check className=\"h-4 w-4 text-white drop-shadow-[0_1px_2px_rgba(0,0,0,0.8)]\" strokeWidth={3} />\n )}\n </button>\n );\n })}\n </div>\n </div>\n );\n }\n\n default:\n console.warn(`Unknown option type: ${(option as any).type}`);\n return null;\n }\n };\n\n return <div className=\"space-y-3\">{applicableOptions.map((option) => renderOption(option))}</div>;\n}\n","import { MoreHorizontal } from 'lucide-react';\nimport { Button } from '../../ui/button';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuTrigger,\n} from '../../ui/dropdown-menu';\nimport { PageOption } from './page-editor';\nimport { PageItem } from './page-group-utils';\nimport { PageOptionsRenderer, getApplicablePageOptions } from './page-options-renderer';\nimport { useShellTranslation } from '../../i18n/locale-context';\n\nexport interface PageOptionsDropdownProps {\n pageOptions: PageOption[];\n targetItem: PageItem | undefined;\n onChange: (pageOption: PageOption, targetItem: PageItem, value: string) => void;\n title?: string;\n triggerClassName?: string;\n}\n\nexport function PageOptionsDropdown({\n pageOptions,\n targetItem,\n onChange,\n title,\n triggerClassName,\n}: PageOptionsDropdownProps) {\n const { t } = useShellTranslation();\n const resolvedTitle = title ?? t('page.optionsMenu');\n if (!targetItem) return null;\n if (getApplicablePageOptions(pageOptions, targetItem).length === 0) return null;\n\n return (\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild className={triggerClassName || 'page-options-trigger'}>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 w-7 text-gray-400 hover:text-gray-600 border border-transparent hover:border-gray-200 rounded-md\"\n title={resolvedTitle}\n >\n <MoreHorizontal className=\"w-3.5 h-3.5\" />\n <span className=\"sr-only\">{resolvedTitle}</span>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent className=\"min-w-48 p-3\" align=\"center\">\n <PageOptionsRenderer\n pageOptions={pageOptions}\n targetItem={targetItem}\n onChange={onChange}\n />\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\n","import { useState, useRef, useEffect } from 'react';\nimport { ChevronDown, ArrowUp, ArrowDown, Plus, Copy, Trash2, Pencil } from 'lucide-react';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../../ui/dropdown-menu';\nimport { useShellTranslation } from '../../i18n/locale-context';\n\nexport interface PageNameDropdownProps {\n name: string;\n canRename?: boolean;\n canMoveUp?: boolean;\n canMoveDown?: boolean;\n canAddPage?: boolean;\n canDuplicate?: boolean;\n canDelete?: boolean;\n onRename?: (name: string) => void;\n onMoveUp?: () => void;\n onMoveDown?: () => void;\n onAddPage?: () => void;\n onDuplicate?: () => void;\n onDelete?: () => void;\n}\n\nexport function PageNameDropdown({\n name,\n canRename,\n canMoveUp,\n canMoveDown,\n canAddPage,\n canDuplicate,\n canDelete,\n onRename,\n onMoveUp,\n onMoveDown,\n onAddPage,\n onDuplicate,\n onDelete,\n}: PageNameDropdownProps) {\n const { t } = useShellTranslation();\n const [open, setOpen] = useState(false);\n const [isEditing, setIsEditing] = useState(false);\n const [renameValue, setRenameValue] = useState(name);\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n setRenameValue(name);\n }, [name]);\n\n useEffect(() => {\n if (isEditing) {\n setTimeout(() => {\n inputRef.current?.focus();\n inputRef.current?.select();\n }, 10);\n }\n }, [isEditing]);\n\n const commitRename = () => {\n const trimmed = renameValue.trim();\n if (trimmed && trimmed !== name) onRename?.(trimmed);\n setIsEditing(false);\n };\n\n const hasActions = canMoveUp || canMoveDown || canAddPage || canDuplicate || canDelete;\n const hasAnyContent = canRename || hasActions;\n\n if (isEditing) {\n return (\n <input\n ref={inputRef}\n value={renameValue}\n onChange={(e) => setRenameValue(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') commitRename();\n if (e.key === 'Escape') { setRenameValue(name); setIsEditing(false); }\n e.stopPropagation();\n }}\n onBlur={commitRename}\n className=\"text-xs font-medium text-gray-800 bg-white border border-blue-400 rounded-md px-2 py-1 focus:outline-none focus:ring-2 focus:ring-blue-400/30 max-w-[140px] h-7\"\n data-uhuu-editor\n />\n );\n }\n\n if (!hasAnyContent) {\n return (\n <span className=\"text-xs font-medium text-gray-600 truncate max-w-[120px]\">\n {name}\n </span>\n );\n }\n\n return (\n <DropdownMenu open={open} onOpenChange={setOpen} modal={false}>\n <DropdownMenuTrigger asChild>\n <button\n className=\"flex items-center gap-1 text-xs font-medium text-gray-700 hover:text-gray-900 rounded-md px-2 h-7 hover:bg-gray-100 transition-colors border border-transparent hover:border-gray-200\"\n data-uhuu-editor\n >\n <span className=\"truncate max-w-[120px]\">{name}</span>\n <ChevronDown className=\"w-3.5 h-3.5 text-gray-500 shrink-0\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent className=\"min-w-44 p-1\" align=\"start\">\n {canRename && (\n <DropdownMenuItem onSelect={(e) => { e.preventDefault(); setOpen(false); setIsEditing(true); }}>\n <Pencil className=\"w-3.5 h-3.5 mr-2\" />\n {t('page.rename')}\n </DropdownMenuItem>\n )}\n {canRename && hasActions && <DropdownMenuSeparator />}\n {canMoveUp && (\n <DropdownMenuItem onClick={onMoveUp}>\n <ArrowUp className=\"w-3.5 h-3.5 mr-2\" />\n {t('page.moveUp')}\n </DropdownMenuItem>\n )}\n {canMoveDown && (\n <DropdownMenuItem onClick={onMoveDown}>\n <ArrowDown className=\"w-3.5 h-3.5 mr-2\" />\n {t('page.moveDown')}\n </DropdownMenuItem>\n )}\n {canAddPage && (canMoveUp || canMoveDown) && <DropdownMenuSeparator />}\n {canAddPage && (\n <DropdownMenuItem onClick={onAddPage}>\n <Plus className=\"w-3.5 h-3.5 mr-2\" />\n {t('page.addPage')}\n </DropdownMenuItem>\n )}\n {canDuplicate && (\n <DropdownMenuItem onClick={onDuplicate}>\n <Copy className=\"w-3.5 h-3.5 mr-2\" />\n {t('page.duplicate')}\n </DropdownMenuItem>\n )}\n {canDelete && <DropdownMenuSeparator />}\n {canDelete && (\n <DropdownMenuItem onClick={onDelete} className=\"text-red-600 focus:text-red-700 focus:bg-red-50\">\n <Trash2 className=\"w-3.5 h-3.5 mr-2\" />\n {t('page.delete')}\n </DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n","import PageSizeUtils from '../../utility/PageSizeUtils.js';\nimport {\n getCoverSpreadWarnings,\n planCoverSpread,\n resolveBinding,\n} from '../../pagination-static/spread-core.js';\n\n/**\n * Drop `binding` from a page format. Everything that renders ONE page (flow\n * measurement, thumbnails, add/reorder dialogs, non-cover filters) must use a\n * binding-less setup, otherwise Pagination would publish the wide cover sheet\n * as the `@page` size for plain pages.\n *\n * @template T\n * @param {T} pageFormat\n * @returns {T}\n */\nexport function omitBinding(pageFormat) {\n if (!pageFormat || typeof pageFormat !== 'object' || !('binding' in pageFormat)) return pageFormat;\n // eslint-disable-next-line no-unused-vars\n const { binding, ...rest } = pageFormat;\n return rest;\n}\n\n/**\n * Is a cover spread even a candidate? True when the page format declares a\n * perfect binding AND the active filter is `cover`. Needs no page list, so it\n * can be decided before flow measurement.\n *\n * @param {{ binding?: import('../../pagination-static/spread-core.js').BindingConfig | null } | undefined} pageFormat\n * @param {{ mode?: string } | undefined} pageFilter\n */\nexport function isCoverSpreadCandidate(pageFormat, pageFilter) {\n return !!resolveBinding(pageFormat?.binding) && pageFilter?.mode === 'cover';\n}\n\n/**\n * Decide how PageEditor renders the current filter result.\n *\n * - not a candidate → `{ active: false }`, plain pages, binding stripped from the setup\n * - candidate but unplannable (e.g. coverPageCount 3) → `{ active: false }` plus\n * developer warnings, plain pages\n * - candidate and plannable → `{ active: true, plan, setup }` where `setup`\n * carries the binding (so `@page` becomes the cover sheet) and forces the\n * single-page preview (a spread is already two pages side by side)\n *\n * @template TPage\n * @param {{\n * pageFormat?: Record<string, any>,\n * pageFilter?: { mode?: string, coverPageCount?: number },\n * pages?: TPage[],\n * }} input\n */\nexport function resolveCoverSpreadLayout({ pageFormat = {}, pageFilter, pages = [] } = {}) {\n const plain = { active: false, plan: null, setup: omitBinding(pageFormat), warnings: [] };\n if (!isCoverSpreadCandidate(pageFormat, pageFilter)) return plain;\n\n const binding = resolveBinding(pageFormat.binding);\n const dimensions = PageSizeUtils.resolveDimensions(pageFormat);\n const geometry = { ...dimensions, bleed: PageSizeUtils.clampBleed(pageFormat.bleed), binding };\n\n const plan = planCoverSpread({ ...geometry, coverPages: pages });\n const warnings = getCoverSpreadWarnings({\n ...geometry,\n coverPageCount: pageFilter.coverPageCount ?? 2,\n coverPages: pages,\n flowCoverPages: pages.filter((page) => page && page.hasFlow).length,\n });\n\n if (!plan) return { ...plain, warnings };\n\n return {\n active: true,\n plan,\n setup: { ...pageFormat, binding, preview: 'single_page' },\n warnings,\n };\n}\n","import { useState, useMemo, useCallback, useContext, useEffect, useRef } from 'react';\nimport {\n PageItem,\n StandalonePage,\n PageComponent,\n IntegrationRequirement,\n IntegrationConfig,\n isPageGroup,\n updatePageNumbers,\n getTotalPageCount,\n transformItemsForReorder,\n restoreItemsFromReorder,\n ReorderItem,\n PageEditorState,\n DEFAULT_PAGE_EDITOR_STATE_KEY,\n buildPageEditorState,\n instantiateGroup,\n instantiatePage,\n PageFilterConfig,\n filterPageItems,\n InsertPosition,\n} from './page-group-utils';\nimport { createDefaultRenderThumbnail } from './default-render-thumbnail';\nimport { TemplateDataContext } from './template-data-provider';\nimport { useShellTranslation } from '../../i18n/locale-context';\nimport type { LocalizedText } from '../../i18n/i18n-core.js';\n\nexport type AvailablePageItem = {\n kind: 'page';\n id: string; // Template ID\n templateId?: string; // Reference to template\n componentKey?: string; // Component key for resolution\n label?: LocalizedText;\n component?: PageComponent;\n meta?: Record<string, any>;\n repeatable?: boolean;\n maxInstances?: number | null;\n integration?: IntegrationRequirement | IntegrationConfig;\n [key: string]: any;\n};\n\nexport type AvailableGroupItem = {\n kind: 'group';\n id: string; // Template ID\n templateId?: string; // Reference to template\n repeatable?: boolean; // Can be added multiple times\n maxInstances?: number | null; // Max instances allowed\n pageComponentKeys?: string[] | ((context: { payload: any; item?: any; parent?: any }) => string[]); // Component keys (not instance IDs) - can be static array or function\n label?: LocalizedText;\n integration?: IntegrationRequirement | IntegrationConfig;\n meta?: Record<string, any>;\n [key: string]: any;\n};\n\nexport type AvailableItem = AvailablePageItem | AvailableGroupItem;\n\ntype PageItemWithNumbers = PageItem & {\n pageNum?: number;\n pages?: Array<StandalonePage & { pageNum: number }>;\n};\n\ninterface UsePageGroupsOptions {\n // Initial state - what pages/groups come when template first loads\n initialItems: PageItem[];\n \n // Available items that can be added (simple: array of page IDs or group configs)\n availableItems?: AvailableItem[];\n \n // Callbacks (optional for MVP)\n onItemsChange?: (items: PageItem[], state: PageEditorState) => void;\n onStateChange?: (state: PageEditorState) => void;\n \n // NEW: For automatic thumbnail rendering\n pageComponents?: { [pageId: string]: PageComponent };\n payload?: any;\n \n // Page setup (same as Pagination setup prop) - supports format/orientation or explicit width/height in mm\n setup?: { width?: number; height?: number; [key: string]: any };\n\n // Payload state key (for persistence helpers)\n stateKey?: string;\n\n // Hook for resolving a draft item before it is committed (integration fetch, async defaults, etc.)\n resolveNewItem?: (draft: PageItem) => Promise<PageItem | null | void> | PageItem | null | void;\n\n notifyError?: (message: string) => void;\n \n // Page filter for conditional rendering\n pageFilter?: PageFilterConfig;\n}\n\ninterface UsePageGroupsReturn {\n // State\n items: PageItem[];\n itemsWithPageNum: PageItemWithNumbers[];\n totalPageCount: number;\n \n // Available items (filtered - excludes already used)\n availableItemsToAdd: AvailableItem[];\n \n // CRUD operations (MVP - minimal surface)\n addItem: (item: AvailableItem, insertPosition?: InsertPosition) => Promise<{ success: false } | { success: true; insertedId: string }>;\n removeItem: (itemId: string) => void;\n updateItemFields: (itemId: string, patch: Partial<PageItem>) => void;\n reorderItems: (newOrder: PageItem[]) => void;\n \n // Add page dialog state\n addDialogOpen: boolean;\n setAddDialogOpen: (open: boolean) => void;\n openAddDialog: () => void;\n \n // Render helper (simple - just pages)\n renderItems: (\n renderPage: (\n page: StandalonePage & { pageNum: number },\n parentItem?: PageItem\n ) => React.ReactNode\n ) => React.ReactNode[];\n \n // Reorder helpers (for PageOrderDialog)\n itemsForReorder: ReorderItem[];\n handleReorder: (reorderedItems: ReorderItem[]) => void;\n \n // Default renderThumbnail (if pageComponents provided)\n defaultRenderThumbnail?: (item: ReorderItem, index: number, isDragging?: boolean) => React.ReactNode;\n}\n\nexport function usePageGroups(options: UsePageGroupsOptions): UsePageGroupsReturn {\n const {\n initialItems,\n availableItems = [],\n onItemsChange,\n onStateChange,\n pageComponents,\n payload,\n setup,\n stateKey = DEFAULT_PAGE_EDITOR_STATE_KEY,\n resolveNewItem,\n notifyError,\n pageFilter,\n } = options;\n \n const [items, setItems] = useState<PageItem[]>(initialItems);\n const [addDialogOpen, setAddDialogOpen] = useState(false);\n const shellI18n = useShellTranslation();\n const { t } = shellI18n;\n \n // Track the last initialItems value to detect real changes\n const prevInitialItemsRef = useRef(initialItems);\n \n // Sync items when initialItems changes (for dynamic pageComponentKeys)\n // Only update if the content actually changed, not just the reference\n useEffect(() => {\n // Compare by serialization (simple but effective for this use case)\n // Use try-catch to handle potential circular references\n try {\n const prev = JSON.stringify(prevInitialItemsRef.current);\n const current = JSON.stringify(initialItems);\n \n if (prev !== current) {\n prevInitialItemsRef.current = initialItems;\n setItems(initialItems);\n }\n } catch (err) {\n // If stringify fails (e.g., circular refs), fall back to reference comparison\n if (prevInitialItemsRef.current !== initialItems) {\n prevInitialItemsRef.current = initialItems;\n setItems(initialItems);\n }\n }\n }, [initialItems]);\n \n // Get TemplateDataProvider context (optional - returns null if not available)\n const templateDataContext = useContext(TemplateDataContext);\n \n // Update items and notify parent\n const updateItems = useCallback((newItems: PageItem[]) => {\n setItems(newItems);\n const state = buildPageEditorState(newItems, stateKey);\n \n // If TemplateDataProvider is available, use it as single source of truth for payload updates\n // This ensures all payload modifications (including reordering) go through the provider\n if (templateDataContext?.mergePageEditorState) {\n templateDataContext.mergePageEditorState(newItems, stateKey);\n }\n \n onStateChange?.(state);\n onItemsChange?.(newItems, state);\n }, [onItemsChange, onStateChange, stateKey, templateDataContext]);\n \n // Count instances by templateId\n const instanceCountsByTemplate = useMemo(() => {\n const counts = new Map<string, number>();\n items.forEach(item => {\n const templateId = item.templateId ?? item.id;\n counts.set(templateId, (counts.get(templateId) ?? 0) + 1);\n if (isPageGroup(item)) {\n item.pages?.forEach((page) => {\n const pageTemplateId = (page as any).templateId ?? page.id;\n counts.set(pageTemplateId, (counts.get(pageTemplateId) ?? 0) + 1);\n });\n }\n });\n return counts;\n }, [items]);\n \n // Filter available items based on repeatability and maxInstances\n const availableItemsToAdd = useMemo(() => {\n return availableItems.filter(item => {\n // Handle page items\n if ((item as AvailablePageItem).kind === 'page') {\n const pageItem = item as AvailablePageItem;\n const templateId = pageItem.templateId ?? pageItem.id;\n const count = instanceCountsByTemplate.get(templateId) ?? 0;\n const isRepeatable = pageItem.repeatable ?? false;\n const maxInstances = pageItem.maxInstances ?? null;\n\n if (!isRepeatable && count > 0) {\n return false;\n }\n\n if (maxInstances !== null && count >= maxInstances) {\n return false;\n }\n\n return true;\n }\n\n // Handle group items\n const groupItem = item as AvailableGroupItem;\n const templateId = groupItem.templateId ?? groupItem.id;\n const count = instanceCountsByTemplate.get(templateId) ?? 0;\n const isRepeatable = groupItem.repeatable ?? false;\n const maxInstances = groupItem.maxInstances ?? null;\n\n // If not repeatable and already has an instance, hide it\n if (!isRepeatable && count > 0) {\n return false;\n }\n\n // If repeatable, check maxInstances limit\n if (isRepeatable && maxInstances !== null && count >= maxInstances) {\n return false;\n }\n\n return true;\n });\n }, [availableItems, instanceCountsByTemplate]);\n \n // Calculate total page count\n const totalPageCount = useMemo(() => getTotalPageCount(items), [items]);\n \n // Add item (page or group) - creates instance from template\n const addItem = useCallback(async (item: AvailableItem, insertPosition?: InsertPosition): Promise<{ success: false } | { success: true; insertedId: string }> => {\n const resolveIntegrationMode = (\n integration?: IntegrationRequirement | IntegrationConfig\n ): IntegrationRequirement => {\n if (!integration) return 'none';\n if (typeof integration === 'string') return integration;\n return integration.mode ?? 'optional';\n };\n\n // Helper to evaluate pageComponentKeys (static array or function)\n const evaluatePageComponentKeys = (\n keys: string[] | ((context: { payload: any; item?: any; parent?: any }) => string[]) | undefined,\n context: { payload: any; item?: any; parent?: any }\n ): string[] => {\n if (!keys) return [];\n if (Array.isArray(keys)) return keys;\n \n // Evaluate function with error handling\n try {\n const result = keys(context);\n \n // Validate result is an array\n if (!Array.isArray(result)) {\n console.error('[uhuu-components] pageComponentKeys function must return an array, got:', typeof result);\n return [];\n }\n \n // Filter to ensure all items are strings\n const filtered = result.filter(key => typeof key === 'string');\n if (filtered.length !== result.length) {\n console.warn('[uhuu-components] pageComponentKeys returned non-string values, filtering them out');\n }\n \n return filtered;\n } catch (err) {\n console.error('[uhuu-components] Error evaluating pageComponentKeys function:', err);\n return [];\n }\n };\n\n const createDraftFromAvailable = (available: AvailableItem): PageItem => {\n // Handle page items\n if ((available as AvailablePageItem).kind === 'page') {\n const pageItem = available as AvailablePageItem;\n const templateId = pageItem.templateId ?? pageItem.id;\n const componentKey = pageItem.componentKey ?? pageItem.id;\n return instantiatePage(templateId, componentKey, {\n label: pageItem.label,\n className: pageItem.className,\n repeatable: pageItem.repeatable,\n maxInstances: pageItem.maxInstances,\n integration: pageItem.integration,\n strictPosition: pageItem.strictPosition,\n });\n }\n\n // Handle group items\n const groupConfig = available as AvailableGroupItem;\n const templateId = groupConfig.templateId ?? groupConfig.id;\n \n // Evaluate pageComponentKeys with context\n const context = {\n payload,\n item: undefined, // Will be set after construction\n parent: undefined,\n };\n const componentKeys = evaluatePageComponentKeys(groupConfig.pageComponentKeys, context);\n\n return instantiateGroup(templateId, componentKeys, {\n label: groupConfig.label,\n repeatable: groupConfig.repeatable ?? false,\n maxInstances: groupConfig.maxInstances ?? null,\n integration: groupConfig.integration,\n strictPosition: groupConfig.strictPosition,\n });\n };\n\n const draft = createDraftFromAvailable(item);\n const debugIntegration = typeof window !== 'undefined'\n && (window as any).$uhuu?.debug;\n let integrationData: any = undefined;\n\n let resolved: PageItem | null | void = draft;\n if (resolveNewItem) {\n resolved = await resolveNewItem(draft);\n } else {\n const integrationMode = resolveIntegrationMode((draft as any).integration);\n let shouldAbort = false;\n\n if (integrationMode !== 'none' && typeof window !== 'undefined') {\n const requestIntegration = (window as any).$uhuu?.requestIntegration?.bind((window as any).$uhuu);\n if (requestIntegration) {\n integrationData = await requestIntegration({ item: draft, mode: integrationMode });\n if (integrationData == null && integrationMode === 'required') {\n shouldAbort = true;\n }\n }\n // If requestIntegration is unavailable, proceed without integration data\n // (allows testing in environments like Storybook without the integration bridge)\n }\n\n if (shouldAbort) return { success: false };\n\n }\n\n if (resolved === null) return { success: false };\n const finalItem = (resolved ?? draft) as PageItem;\n \n // Store integration data using the instance ID\n // For groups, this is the group ID; for pages, it's the page ID\n if (integrationData !== undefined && templateDataContext?.setIntegrationPayload) {\n const instanceId = finalItem.id;\n templateDataContext.setIntegrationPayload(instanceId, integrationData);\n }\n \n // Insert item in correct position based on strictPosition flags and insertPosition anchor\n const insertItemInPosition = (newItems: PageItem[], itemToInsert: PageItem, pos?: InsertPosition): PageItem[] => {\n const itemPosition = (itemToInsert as any).strictPosition;\n\n if (itemPosition === 'start') return [itemToInsert, ...newItems];\n if (itemPosition === 'end') return [...newItems, itemToInsert];\n\n const startItems: PageItem[] = [];\n const middleItems: PageItem[] = [];\n const endItems: PageItem[] = [];\n\n newItems.forEach(item => {\n const position = (item as any).strictPosition;\n if (position === 'start') startItems.push(item);\n else if (position === 'end') endItems.push(item);\n else middleItems.push(item);\n });\n\n if (!pos || pos.mode === 'end') {\n return [...startItems, ...middleItems, itemToInsert, ...endItems];\n }\n\n const anchorIdx = middleItems.findIndex(i => i.id === pos.anchorId);\n if (anchorIdx === -1) {\n // Anchor is a strict-positioned item — insert at the appropriate boundary\n const anchorItem = newItems.find(i => i.id === pos.anchorId);\n const anchorPos = (anchorItem as any)?.strictPosition;\n if (anchorPos === 'start') {\n // After a strict-start item → first available middle position\n return [...startItems, itemToInsert, ...middleItems, ...endItems];\n }\n // After a strict-end item, or not found → last available middle position\n return [...startItems, ...middleItems, itemToInsert, ...endItems];\n }\n\n if (pos.mode === 'before') {\n middleItems.splice(anchorIdx, 0, itemToInsert);\n } else {\n middleItems.splice(anchorIdx + 1, 0, itemToInsert);\n }\n return [...startItems, ...middleItems, ...endItems];\n };\n\n updateItems(insertItemInPosition(items, finalItem, insertPosition));\n return { success: true, insertedId: finalItem.id };\n }, [items, updateItems, resolveNewItem, templateDataContext]);\n \n // Remove item or page from group\n const removeItem = useCallback((itemId: string) => {\n const showError = (message: string) => {\n if (notifyError) {\n notifyError(message);\n } else {\n alert(message);\n }\n };\n\n // First, try to find an item with this ID (standalone page or group)\n const targetItem = items.find(i => i.id === itemId);\n \n // If found as a direct item (group or standalone page), remove it entirely\n if (targetItem) {\n const totalCount = getTotalPageCount(items);\n if (totalCount <= 1) {\n showError(t('notice.lastPage'));\n return;\n }\n \n // Remove integration data if it exists for this instance\n if (templateDataContext?.removeIntegrationPayload) {\n const instanceId = targetItem.id;\n const hasIntegrationData = templateDataContext.payload?.integrations?.[instanceId] !== undefined;\n if (hasIntegrationData) {\n templateDataContext.removeIntegrationPayload(instanceId);\n }\n }\n updateItems(items.filter(item => item.id !== itemId));\n return;\n }\n \n // If not found as direct item, it might be a page ID within a group\n for (const item of items) {\n if (isPageGroup(item) && item.pages.some(p => p.id === itemId)) {\n const totalCount = getTotalPageCount(items);\n if (totalCount <= 1) {\n showError(t('notice.lastPage'));\n return;\n }\n \n if (item.pages.length === 1) {\n // Last page in group - remove the entire group\n // Remove integration data if it exists for this group instance\n if (templateDataContext?.removeIntegrationPayload) {\n const instanceId = item.id;\n const hasIntegrationData = templateDataContext.payload?.integrations?.[instanceId] !== undefined;\n if (hasIntegrationData) {\n templateDataContext.removeIntegrationPayload(instanceId);\n }\n }\n updateItems(items.filter(i => i.id !== item.id));\n } else {\n // Multiple pages in group - remove just this page from the group\n // Note: We don't remove integration data here because the group still exists\n // and other pages in the group may still use the integration data\n updateItems(items.map(i => {\n if (i.id === item.id && isPageGroup(i)) {\n return {\n ...i,\n pages: i.pages.filter(p => p.id !== itemId),\n };\n }\n return i;\n }));\n }\n return;\n }\n }\n }, [items, notifyError, updateItems, templateDataContext, t]);\n \n const updateItemFields = useCallback((itemId: string, patch: Partial<PageItem>) => {\n updateItems(items.map(item => {\n if (item.id === itemId) {\n if (isPageGroup(item)) {\n return {\n ...item,\n ...patch,\n };\n }\n return { ...item, ...patch };\n }\n return item;\n }));\n }, [items, updateItems]);\n \n // Reorder items\n const reorderItems = useCallback((newOrder: PageItem[]) => {\n updateItems(newOrder);\n }, [updateItems]);\n \n // Items with derived pageNum for rendering\n // Apply page filtering if configured\n const itemsWithPageNum = useMemo(() => {\n const itemsWithNumbers = updatePageNumbers(items) as PageItemWithNumbers[];\n \n // Apply page filter if configured (preserves original page numbers)\n if (pageFilter) {\n return filterPageItems(itemsWithNumbers as PageItem[], pageFilter) as PageItemWithNumbers[];\n }\n \n return itemsWithNumbers;\n }, [items, pageFilter]);\n \n // Render helper - automatically handles pages vs groups\n const renderItems = useCallback((\n renderPage: (\n page: StandalonePage & { pageNum: number },\n parentItem?: PageItem\n ) => React.ReactNode\n ): React.ReactNode[] => {\n const rendered: React.ReactNode[] = [];\n itemsWithPageNum.forEach(item => {\n if (isPageGroup(item)) {\n const groupPages = (item.pages ?? []) as Array<StandalonePage & { pageNum: number }>;\n groupPages.forEach(page => {\n rendered.push(renderPage(page, item));\n });\n } else {\n rendered.push(renderPage(item as StandalonePage & { pageNum: number }, item));\n }\n });\n return rendered;\n }, [itemsWithPageNum]);\n \n // Reorder helpers\n const itemsForReorder = useMemo(\n () => transformItemsForReorder(itemsWithPageNum as PageItem[]),\n [itemsWithPageNum]\n );\n \n const handleReorder = useCallback((reorderedItems: ReorderItem[]) => {\n const restored = restoreItemsFromReorder(reorderedItems, items);\n \n // Enforce strictPosition constraints: items with strictPosition: 'start' stay at start,\n // items with strictPosition: 'end' stay at end\n const enforcePositions = (itemsToOrder: PageItem[]): PageItem[] => {\n const startItems: PageItem[] = [];\n const middleItems: PageItem[] = [];\n const endItems: PageItem[] = [];\n \n itemsToOrder.forEach(item => {\n const position = (item as any).strictPosition;\n if (position === 'start') {\n startItems.push(item);\n } else if (position === 'end') {\n endItems.push(item);\n } else {\n middleItems.push(item);\n }\n });\n \n return [...startItems, ...middleItems, ...endItems];\n };\n \n updateItems(enforcePositions(restored));\n }, [items, updateItems]);\n \n const openAddDialog = useCallback(() => {\n setAddDialogOpen(true);\n }, []);\n \n // Generate defaultRenderThumbnail if pageComponents provided\n const defaultRenderThumbnail = useMemo(() => {\n if (pageComponents) {\n return createDefaultRenderThumbnail({ pageComponents, payload, setup, i18n: shellI18n });\n }\n return undefined;\n }, [pageComponents, payload, setup, shellI18n]);\n \n return {\n items,\n itemsWithPageNum,\n totalPageCount,\n availableItemsToAdd,\n addItem,\n removeItem,\n updateItemFields,\n reorderItems,\n addDialogOpen,\n setAddDialogOpen,\n openAddDialog,\n renderItems,\n itemsForReorder,\n handleReorder,\n defaultRenderThumbnail,\n };\n}\n","import { useMemo, useCallback } from 'react';\nimport { PageItem, InsertPosition } from './page-group-utils';\nimport { AvailableItem } from './use-page-groups';\n\nexport interface PageItemActionHandlers {\n onAddPage?: () => void;\n onMoveUp?: () => void;\n onMoveDown?: () => void;\n onDuplicate?: () => void;\n}\n\ninterface UsePageItemActionsOptions {\n items: PageItem[];\n reorderItems: (newOrder: PageItem[]) => void;\n availableItemsToAdd: AvailableItem[];\n setPendingInsertPosition: (pos: InsertPosition) => void;\n openAddDialog: () => void;\n}\n\n/**\n * Returns a stable `buildHandlers` factory that computes per-item action handlers\n * (move up, move down, duplicate, add page). Call once at component level; invoke\n * the returned factory per item inside render loops — no hook rules violated.\n *\n * middleItems (items without strictPosition) is computed once via useMemo so the\n * factory is O(1) per item after the initial filter.\n */\nexport function usePageItemActions({\n items,\n reorderItems,\n availableItemsToAdd,\n setPendingInsertPosition,\n openAddDialog,\n}: UsePageItemActionsOptions) {\n const middleItems = useMemo(\n () => items.filter(i => !(i as any).strictPosition),\n [items]\n );\n\n const buildHandlers = useCallback(\n (topItem: PageItem | undefined, anchorId: string | null): PageItemActionHandlers => {\n if (!topItem) return {};\n\n const topId = topItem.id;\n const topMiddleIndex = middleItems.findIndex(i => i.id === topId);\n const isMiddle = topMiddleIndex !== -1;\n\n const onMoveUp = isMiddle && topMiddleIndex > 0 ? () => {\n const next = [...items];\n const i = next.findIndex(x => x.id === topId);\n if (i < 1) return;\n [next[i - 1], next[i]] = [next[i], next[i - 1]];\n reorderItems(next);\n } : undefined;\n\n const onMoveDown = isMiddle && topMiddleIndex < middleItems.length - 1 ? () => {\n const next = [...items];\n const i = next.findIndex(x => x.id === topId);\n if (i < 0 || i >= next.length - 1) return;\n [next[i], next[i + 1]] = [next[i + 1], next[i]];\n reorderItems(next);\n } : undefined;\n\n const onDuplicate = isMiddle && !!(topItem as any).repeatable ? () => {\n const source = (items.find(x => x.id === topId) ?? topItem) as PageItem;\n const clone = { ...source, id: `${topId}_copy_${Date.now()}` } as PageItem;\n const next = [...items];\n const i = next.findIndex(x => x.id === topId);\n next.splice(i < 0 ? next.length : i + 1, 0, clone);\n reorderItems(next);\n } : undefined;\n\n const onAddPage = anchorId && availableItemsToAdd.length > 0 ? () => {\n setPendingInsertPosition({ mode: 'before', anchorId });\n openAddDialog();\n } : undefined;\n\n return { onAddPage, onMoveUp, onMoveDown, onDuplicate };\n },\n [items, middleItems, reorderItems, availableItemsToAdd, setPendingInsertPosition, openAddDialog]\n );\n\n return buildHandlers;\n}\n","export function createVirtualFlowPages(logicalPages = [], flowLayoutsByPageKey = {}) {\n const pages = [];\n let nextPageNum = 1;\n\n for (const page of logicalPages) {\n const flowLayout = page.hasFlow ? flowLayoutsByPageKey[page.flowKey] : undefined;\n const flowChunkSets = Object.values(flowLayout?.flows ?? {});\n const virtualPageCount = Math.max(1, ...flowChunkSets.map((chunks) => chunks.length));\n\n for (let virtualPageIndex = 0; virtualPageIndex < virtualPageCount; virtualPageIndex += 1) {\n pages.push({\n ...page,\n pageNum: nextPageNum++,\n virtualPageId: virtualPageIndex === 0\n ? page.id\n : `${page.id}__flow_${virtualPageIndex + 1}`,\n virtualPageIndex,\n virtualPageCount,\n flowChunksByFlowId: flowLayout?.flows,\n });\n }\n }\n\n return pages;\n}\n","import { useCallback, useMemo, useState } from 'react';\nimport type { StaticFlowChunk, StaticFlowMeasurement } from '../../pagination-static/flow-static';\nimport type { PageFilterConfig, PageItem, StandalonePage } from './page-group-utils';\nimport { isPageNumberIncludedInFilter } from './page-group-utils';\nimport { createVirtualFlowPages } from './flow-layout-core';\n\ntype PageFlowLayout = {\n flows: Record<string, StaticFlowChunk[]>;\n /**\n * Per-flow input signature from the measurement that produced `flows`. The\n * planners are pure functions of their measured input, so comparing these is\n * equivalent to comparing the chunk arrays — without serializing both of them\n * on every measurement of every flow page.\n */\n signatures: Record<string, string>;\n};\n\ntype FlowLayoutsByPageKey = Record<string, PageFlowLayout>;\n\ntype FlowLayoutState = {\n layoutKey: string;\n layouts: FlowLayoutsByPageKey;\n};\n\nexport type LogicalFlowPage = (StandalonePage & { pageNum: number }) & {\n parentGroup?: PageItem;\n flowKey: string;\n basePageNum: number;\n};\n\nexport type VirtualFlowPage<TPage extends LogicalFlowPage = LogicalFlowPage> = TPage & {\n pageNum: number;\n virtualPageId: string;\n virtualPageIndex: number;\n virtualPageCount: number;\n flowChunksByFlowId?: Record<string, StaticFlowChunk[]>;\n};\n\ntype UseFlowLayoutsArgs<TPage extends LogicalFlowPage> = {\n logicalPages: TPage[];\n pageFilter?: PageFilterConfig | null;\n layoutKey?: string;\n};\n\nexport function useFlowLayouts<TPage extends LogicalFlowPage>({\n logicalPages,\n pageFilter,\n layoutKey = '',\n}: UseFlowLayoutsArgs<TPage>) {\n const [flowLayoutState, setFlowLayoutState] = useState<FlowLayoutState>({\n layoutKey,\n layouts: {},\n });\n const flowLayoutsByPageKey = flowLayoutState.layoutKey === layoutKey\n ? flowLayoutState.layouts\n : {};\n\n const currentFlowPageKeySignature = useMemo(\n () => logicalPages\n .filter((page) => page.hasFlow)\n .map((page) => page.flowKey)\n .join('|'),\n [logicalPages]\n );\n\n const currentFlowPageKeys = useMemo(\n () => new Set(currentFlowPageKeySignature ? currentFlowPageKeySignature.split('|') : []),\n [currentFlowPageKeySignature]\n );\n\n const activeFlowLayoutsByPageKey = useMemo(() => {\n const activeLayouts: FlowLayoutsByPageKey = {};\n\n for (const page of logicalPages) {\n if (!page.hasFlow) continue;\n const layout = flowLayoutsByPageKey[page.flowKey];\n if (layout) activeLayouts[page.flowKey] = layout;\n }\n\n return activeLayouts;\n }, [flowLayoutsByPageKey, logicalPages]);\n\n const registerMeasurement = useCallback((\n pageKey: string,\n measurement: StaticFlowMeasurement\n ) => {\n if (!currentFlowPageKeys.has(pageKey)) return;\n\n setFlowLayoutState((current) => {\n const sourceLayouts = current.layoutKey === layoutKey ? current.layouts : {};\n const currentLayouts: FlowLayoutsByPageKey = {};\n let prunedStaleLayouts = false;\n\n for (const [key, layout] of Object.entries(sourceLayouts)) {\n if (currentFlowPageKeys.has(key)) {\n currentLayouts[key] = layout;\n } else {\n prunedStaleLayouts = true;\n }\n }\n\n const currentLayout = currentLayouts[pageKey] ?? { flows: {}, signatures: {} };\n const currentSignature = currentLayout.signatures?.[measurement.flowId];\n\n if (\n current.layoutKey === layoutKey &&\n currentSignature === measurement.signature &&\n !prunedStaleLayouts\n ) {\n return current;\n }\n\n return {\n layoutKey,\n layouts: {\n ...currentLayouts,\n [pageKey]: {\n flows: {\n ...currentLayout.flows,\n [measurement.flowId]: measurement.chunks,\n },\n signatures: {\n ...currentLayout.signatures,\n [measurement.flowId]: measurement.signature,\n },\n },\n },\n };\n });\n }, [currentFlowPageKeys, layoutKey]);\n\n const allVirtualPages = useMemo<Array<VirtualFlowPage<TPage>>>(\n () => createVirtualFlowPages(logicalPages, activeFlowLayoutsByPageKey) as Array<VirtualFlowPage<TPage>>,\n [logicalPages, activeFlowLayoutsByPageKey]\n );\n\n const virtualTotalPageCount = allVirtualPages.length;\n\n const renderedVirtualPages = useMemo(\n () => allVirtualPages.filter((page) => (\n isPageNumberIncludedInFilter(page.pageNum, virtualTotalPageCount, pageFilter)\n )),\n [allVirtualPages, virtualTotalPageCount, pageFilter]\n );\n\n return {\n allVirtualPages,\n renderedVirtualPages,\n virtualTotalPageCount,\n registerMeasurement,\n };\n}\n","import { isPageGroup, PageItem, StandalonePage } from './page-group-utils';\nimport {\n buildIntegrationPath,\n resolveIntegrationBinding,\n resolveIntegrationInstanceId,\n} from './integration-utils';\n\ntype PathBuilder = (subPath?: string) => string | null;\n\nexport type IntegrationBinding = {\n instanceId: string | null;\n data?: any;\n path: PathBuilder;\n};\n\nexport type PageDataBinding = {\n payload: any;\n pageId: string;\n pagePayload?: any;\n parentGroupId?: string;\n integration: IntegrationBinding;\n paths: {\n integration: PathBuilder;\n page: PathBuilder;\n group: PathBuilder;\n document: PathBuilder;\n };\n defaults: {\n imageGalleryPath?: string | null;\n };\n};\n\ntype BuildPageDataBindingOptions = {\n payload: any;\n page: StandalonePage;\n parentGroup?: PageItem;\n pagePayload?: any;\n defaults?: {\n imageGalleryPath?: string;\n };\n};\n\nfunction buildPath(base: string | null, subPath?: string) {\n if (!base) return null;\n if (!subPath) return base;\n return `${base}.${subPath}`;\n}\n\nfunction resolveGalleryPath(\n payload: any,\n integrationData: any,\n defaults?: { imageGalleryPath?: string }\n): string | null | undefined {\n return (\n integrationData?.meta?.imageGalleryPath ??\n integrationData?.config?.imageGalleryPath ??\n integrationData?.imageGalleryPath ??\n payload?.options?.imageGalleryPath ??\n payload?.templateSetup?.options?.imageGalleryPath ??\n defaults?.imageGalleryPath\n );\n}\n\nexport function buildPageDataBinding({\n payload,\n page,\n parentGroup,\n pagePayload,\n defaults,\n}: BuildPageDataBindingOptions): PageDataBinding {\n const integrationBinding = resolveIntegrationBinding(payload, page, parentGroup);\n const groupId = parentGroup && isPageGroup(parentGroup) ? parentGroup.id : undefined;\n const pageBase = `pages.${page.id}`;\n const groupBase = groupId ? `pages.${groupId}` : null;\n\n return {\n payload,\n pageId: page.id,\n pagePayload,\n parentGroupId: groupId,\n integration: {\n instanceId: integrationBinding.instanceId,\n data: integrationBinding.integration,\n path: (subPath?: string) =>\n buildIntegrationPath(integrationBinding.instanceId, subPath),\n },\n paths: {\n integration: (subPath?: string) =>\n buildIntegrationPath(integrationBinding.instanceId, subPath),\n page: (subPath?: string) => buildPath(pageBase, subPath),\n group: (subPath?: string) => buildPath(groupBase, subPath),\n document: (subPath?: string) => subPath ?? null,\n },\n defaults: {\n imageGalleryPath: resolveGalleryPath(\n payload,\n integrationBinding.integration,\n defaults\n ),\n },\n };\n}\n\nexport function buildIntegrationDialogPath(\n page: StandalonePage,\n parentGroup?: PageItem,\n subPath?: string\n) {\n const instanceId = resolveIntegrationInstanceId(page, parentGroup);\n return buildIntegrationPath(instanceId, subPath);\n}\n","import {\n PageItem,\n PageGroup,\n StandalonePage,\n instantiateGroup,\n instantiatePage,\n PageComponent,\n IntegrationRequirement,\n IntegrationConfig,\n} from './page-group-utils';\nimport { AvailableItem } from './use-page-groups';\nimport type { LocalizedText } from '../../i18n/i18n-core.js';\n\ntype SimplePageRef = string | (Partial<StandalonePage> & { id: string; componentKey?: string });\n\n// Context passed to dynamic pageComponentKeys function\nexport type PageComponentKeysContext = {\n payload: any; // Current template payload\n item?: PageGroup; // Group item being created/evaluated (may be partially constructed)\n parent?: PageItem; // Parent context if nested (future use)\n};\n\ntype PageTemplateDefinition = {\n label?: LocalizedText; // 'Cover' or { en: 'Cover', de: 'Titelseite' }: shown in the shell's language\n className?: string;\n componentKey?: string;\n dataKey?: string; // Shared payload slot — pages with the same dataKey share storage across layout variants\n component?: PageComponent;\n hasFlow?: boolean; // Opt in to Static.Flow measurement/virtual pages in PageEditor\n repeatable?: boolean;\n maxInstances?: number | null;\n thumbnail?: string; // Custom thumbnail URL shown in AddPageDialog\n integration?: IntegrationRequirement | IntegrationConfig;\n allowAsSinglePage?: boolean; // If false, page can only be added as part of a group (default: true)\n strictPosition?: 'start' | 'end'; // If set, page should always stay at the start or end of the document\n};\n\ntype SimpleGroupDefinition = {\n id: string; // Template ID\n label?: LocalizedText;\n thumbnail?: string; // Custom thumbnail URL shown in AddPageDialog\n repeatable?: boolean; // Can be added multiple times\n maxInstances?: number | null; // Max instances (null = unlimited)\n pageComponentKeys?: string[] | ((context: PageComponentKeysContext) => string[]); // Template keys - can be static array or function\n integration?: IntegrationRequirement | IntegrationConfig;\n strictPosition?: 'start' | 'end'; // If set, group should always stay at the start or end of the document\n};\n\ntype BuildPageGroupsConfigArgs = {\n initial: Array<SimplePageRef | SimpleGroupDefinition | string>;\n groups?: SimpleGroupDefinition[] | Record<string, SimpleGroupDefinition>;\n pageComponentKeys?: string[];\n pages?: Record<string, PageTemplateDefinition>;\n pageComponents?: Record<string, PageComponent>;\n payload?: any; // Payload for evaluating dynamic pageComponentKeys\n};\n\ntype BuildPageGroupsConfigResult = {\n initialItems: PageItem[];\n availableItems: AvailableItem[];\n pageComponents: Record<string, PageComponent>;\n};\n\nconst asPage = (\n page: SimplePageRef, \n templateId?: string, \n isInitial: boolean = false,\n templateLookup?: Record<string, PageTemplateDefinition>\n): StandalonePage => {\n const pageId = typeof page === 'string' ? page : page.id;\n const templateConfig = templateLookup?.[pageId];\n const componentKey = typeof page === 'string'\n ? (templateConfig?.componentKey ?? pageId)\n : (page.componentKey ?? templateConfig?.componentKey ?? page.id);\n const pageTemplateId = templateId ?? pageId;\n const repeatable = (typeof page === 'string' ? undefined : (page as any).repeatable) ?? templateConfig?.repeatable ?? false;\n const maxInstances = (typeof page === 'string' ? undefined : (page as any).maxInstances) ?? templateConfig?.maxInstances ?? null;\n const label = (typeof page === 'string' ? undefined : page.label) ?? templateConfig?.label;\n const className = (typeof page === 'string' ? undefined : (page as any).className) ?? templateConfig?.className;\n const component = (typeof page === 'string' ? undefined : (page as any).component) ?? templateConfig?.component;\n const integration = (typeof page === 'string' ? undefined : (page as any).integration) ?? templateConfig?.integration;\n const strictPosition = (typeof page === 'string' ? undefined : (page as any).strictPosition) ?? templateConfig?.strictPosition;\n const hasFlow = (typeof page === 'string' ? undefined : (page as any).hasFlow) ?? templateConfig?.hasFlow;\n\n if (isInitial) {\n // For initial items with explicit IDs, use the ID directly (don't instantiate)\n return {\n kind: 'page',\n id: pageId,\n componentKey,\n templateId: pageTemplateId,\n label,\n className,\n repeatable,\n maxInstances,\n integration,\n component,\n strictPosition,\n hasFlow,\n ...(typeof page === 'string' ? {} : page),\n };\n }\n\n // For items added later, instantiate with unique ID\n return instantiatePage(pageTemplateId, componentKey, {\n label,\n className,\n repeatable,\n maxInstances,\n integration,\n component,\n strictPosition,\n hasFlow,\n ...(typeof page === 'string' ? {} : page),\n });\n};\n\nconst asGroup = (\n group: SimpleGroupDefinition,\n isInitial: boolean = false,\n payload?: any,\n pagesConfig?: Record<string, PageTemplateDefinition>\n): PageGroup => {\n // Create a minimal context for evaluation\n const context: PageComponentKeysContext = {\n payload,\n item: undefined, // Not available during initial construction\n parent: undefined,\n };\n\n const componentKeys = evaluatePageComponentKeys(group.pageComponentKeys, context);\n\n // Resolve ComponentKeyEntry array: attach page metadata from page config when defined\n const entries = componentKeys.map(key => {\n const pageConfig = pagesConfig?.[key];\n const dataKey = pageConfig?.dataKey;\n const hasFlow = pageConfig?.hasFlow;\n return dataKey || hasFlow ? { key, ...(dataKey ? { dataKey } : {}), ...(hasFlow ? { hasFlow } : {}) } : key;\n });\n\n // For initial items, use the template ID directly (don't instantiate)\n // For items added later, instantiate with unique IDs\n if (isInitial) {\n const instanceId = group.id; // Use template ID as instance ID for initial items\n const result: PageGroup = {\n kind: 'group',\n id: instanceId,\n templateId: group.id,\n label: group.label,\n repeatable: group.repeatable ?? false,\n maxInstances: group.maxInstances ?? null,\n integration: group.integration,\n strictPosition: group.strictPosition,\n pages: entries.map((entry, idx) => {\n const key = typeof entry === 'string' ? entry : entry.key;\n const dataKey = typeof entry === 'string' ? undefined : entry.dataKey;\n return {\n id: `${instanceId}__${dataKey ?? key}__${idx}`,\n componentKey: key,\n templateId: key,\n ...(dataKey ? { dataKey } : {}),\n ...(pagesConfig?.[key]?.hasFlow ? { hasFlow: true } : {}),\n };\n }),\n };\n return result;\n }\n\n return instantiateGroup(group.id, entries, {\n label: group.label,\n repeatable: group.repeatable ?? false,\n maxInstances: group.maxInstances ?? null,\n integration: group.integration,\n strictPosition: group.strictPosition,\n });\n};\n\nconst normalizeGroups = (groups?: SimpleGroupDefinition[] | Record<string, SimpleGroupDefinition>): SimpleGroupDefinition[] => {\n if (!groups) return [];\n if (Array.isArray(groups)) return groups;\n return Object.entries(groups).map(([id, def]) => ({ ...def, id }));\n};\n\n// Helper to evaluate pageComponentKeys (static array or function)\nconst evaluatePageComponentKeys = (\n keys: string[] | ((context: PageComponentKeysContext) => string[]) | undefined,\n context: PageComponentKeysContext\n): string[] => {\n if (!keys) return [];\n if (Array.isArray(keys)) return keys;\n \n // Evaluate function with error handling\n try {\n const result = keys(context);\n \n // Validate result is an array\n if (!Array.isArray(result)) {\n console.error('[uhuu-components] pageComponentKeys function must return an array, got:', typeof result);\n return [];\n }\n \n // Filter to ensure all items are strings\n const filtered = result.filter(key => typeof key === 'string');\n if (filtered.length !== result.length) {\n console.warn('[uhuu-components] pageComponentKeys returned non-string values, filtering them out');\n }\n \n return filtered;\n } catch (err) {\n console.error('[uhuu-components] Error evaluating pageComponentKeys function:', err);\n return [];\n }\n};\n\nexport const buildPageGroupsConfig = (args: BuildPageGroupsConfigArgs): BuildPageGroupsConfigResult => {\n const {\n initial,\n groups,\n pageComponentKeys = [],\n pages = {},\n pageComponents: explicitPageComponents = {},\n payload,\n } = args;\n\n const normalizedGroups = normalizeGroups(groups);\n const groupMap = new Map<string, SimpleGroupDefinition>();\n normalizedGroups.forEach((group) => groupMap.set(group.id, group));\n const inferredPageComponentKeys = pageComponentKeys.length ? pageComponentKeys : Object.keys(pages);\n const mergedPageComponents: Record<string, PageComponent> = { ...explicitPageComponents };\n Object.entries(pages).forEach(([key, def]) => {\n if (def.component) mergedPageComponents[key] = def.component;\n });\n\n const initialItems: PageItem[] = initial.map((item) => {\n if (typeof item === 'string') {\n const maybeGroup = groupMap.get(item);\n if (maybeGroup) {\n return asGroup(maybeGroup, true, payload, pages); // Pass payload + pages for dataKey lookup\n }\n return asPage(item, undefined, true, pages); // isInitial = true\n }\n\n const maybeGroup = (item as any).pageComponentKeys !== undefined;\n if (maybeGroup) {\n return asGroup(item as SimpleGroupDefinition, true, payload, pages); // Pass payload + pages for dataKey lookup\n }\n\n return asPage(item as SimplePageRef, undefined, true, pages); // isInitial = true\n });\n\n const availableGroupItems: AvailableItem[] = normalizedGroups.map((group) => {\n // For available items, keep the original definition (function or array)\n // The function will be evaluated when the item is actually added\n return {\n kind: 'group',\n id: group.id, // Template ID\n templateId: group.id,\n label: group.label,\n thumbnail: group.thumbnail,\n pageComponentKeys: group.pageComponentKeys, // Keep original (function or array)\n repeatable: group.repeatable ?? false,\n maxInstances: group.maxInstances ?? null,\n integration: group.integration,\n strictPosition: group.strictPosition,\n };\n });\n\n // For standalone pages, create template items\n // Filter out pages that are not allowed as single pages (allowAsSinglePage === false)\n const availablePageItems: AvailableItem[] = inferredPageComponentKeys\n .filter(key => {\n const templateConfig = pages?.[key];\n // Default to true if not specified\n return templateConfig?.allowAsSinglePage !== false;\n })\n .map(key => {\n const templateConfig = pages?.[key];\n return {\n kind: 'page',\n id: key, // Template ID\n templateId: key,\n componentKey: templateConfig?.componentKey ?? key,\n label: templateConfig?.label,\n className: templateConfig?.className,\n repeatable: templateConfig?.repeatable ?? false,\n maxInstances: templateConfig?.maxInstances ?? null,\n thumbnail: templateConfig?.thumbnail,\n integration: templateConfig?.integration,\n strictPosition: templateConfig?.strictPosition,\n hasFlow: templateConfig?.hasFlow,\n };\n });\n\n const availableItems: AvailableItem[] = [\n ...availablePageItems,\n ...availableGroupItems,\n ];\n\n return { initialItems, availableItems, pageComponents: mergedPageComponents };\n};\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\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 { jsx } from \"react/jsx-runtime\";\nvar ROOT_NAME = \"AlertDialog\";\nvar [createAlertDialogContext, createAlertDialogScope] = createContextScope(ROOT_NAME, [\n createDialogScope\n]);\nvar useDialogScope = createDialogScope();\nvar AlertDialog = /* @__PURE__ */ __name((props) => {\n const { __scopeAlertDialog, ...alertDialogProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Root, { ...dialogScope, ...alertDialogProps, modal: true });\n}, \"AlertDialog\");\nvar AlertDialogTrigger = React.forwardRef(\n /* @__PURE__ */ __name(function AlertDialogTrigger2(props, forwardedRef) {\n const { __scopeAlertDialog, ...triggerProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Trigger, { ...dialogScope, ...triggerProps, ref: forwardedRef });\n }, \"AlertDialogTrigger\")\n);\nvar AlertDialogPortal = /* @__PURE__ */ __name((props) => {\n const { __scopeAlertDialog, ...portalProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Portal, { ...dialogScope, ...portalProps });\n}, \"AlertDialogPortal\");\nvar AlertDialogOverlay = React.forwardRef(\n /* @__PURE__ */ __name(function AlertDialogOverlay2(props, forwardedRef) {\n const { __scopeAlertDialog, ...overlayProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Overlay, { ...dialogScope, ...overlayProps, ref: forwardedRef });\n }, \"AlertDialogOverlay\")\n);\nvar CONTENT_NAME = \"AlertDialogContent\";\nvar [AlertDialogContentProvider, useAlertDialogContentContext] = createAlertDialogContext(CONTENT_NAME);\nvar AlertDialogContent = React.forwardRef(\n /* @__PURE__ */ __name(function AlertDialogContent2(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(AlertDialogContentProvider, { scope: __scopeAlertDialog, cancelRef, children: /* @__PURE__ */ jsx(\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 }\n ) });\n }, \"AlertDialogContent\")\n);\nvar AlertDialogTitle = React.forwardRef(\n /* @__PURE__ */ __name(function AlertDialogTitle2(props, forwardedRef) {\n const { __scopeAlertDialog, ...titleProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Title, { ...dialogScope, ...titleProps, ref: forwardedRef });\n }, \"AlertDialogTitle\")\n);\nvar AlertDialogDescription = React.forwardRef(/* @__PURE__ */ __name(function AlertDialogDescription2(props, forwardedRef) {\n const { __scopeAlertDialog, ...descriptionProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Description, { ...dialogScope, ...descriptionProps, ref: forwardedRef });\n}, \"AlertDialogDescription\"));\nvar AlertDialogAction = React.forwardRef(\n /* @__PURE__ */ __name(function AlertDialogAction2(props, forwardedRef) {\n const { __scopeAlertDialog, ...actionProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Close, { ...dialogScope, ...actionProps, ref: forwardedRef });\n }, \"AlertDialogAction\")\n);\nvar CANCEL_NAME = \"AlertDialogCancel\";\nvar AlertDialogCancel = React.forwardRef(\n /* @__PURE__ */ __name(function AlertDialogCancel2(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 }, \"AlertDialogCancel\")\n);\nexport {\n AlertDialogAction as Action,\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n AlertDialogCancel as Cancel,\n AlertDialogContent as Content,\n AlertDialogDescription as Description,\n AlertDialogOverlay as Overlay,\n AlertDialogPortal as Portal,\n AlertDialog as Root,\n AlertDialogTitle as Title,\n AlertDialogTrigger as Trigger,\n createAlertDialogScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\";\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\";\nimport { cn } from \"./cn\";\nimport { usePortalRoot } from \"../editor-shell/portal-root\";\n\nconst AlertDialog = AlertDialogPrimitive.Root;\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger;\nconst AlertDialogPortal = AlertDialogPrimitive.Portal;\n\nconst AlertDialogOverlay = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/40 backdrop-blur-[1px] 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 const { portalContainer } = usePortalRoot();\n\n return (\n <AlertDialogPortal container={portalContainer || undefined}>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n ref={ref} data-uhuu-editor\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 w-full max-w-md translate-x-[-50%] translate-y-[-50%] rounded-md border border-gray-200 bg-white p-6 shadow-lg outline-none 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 </AlertDialogPortal>\n );\n});\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;\n\nconst AlertDialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"flex flex-col gap-2 text-left\", className)} {...props} />\n);\nAlertDialogHeader.displayName = \"AlertDialogHeader\";\n\nconst AlertDialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\"mt-6 flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\", className)}\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-base font-semibold text-gray-900\", 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-gray-600\", className)}\n {...props}\n />\n));\nAlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;\n\nconst AlertDialogAction = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Action\n ref={ref}\n className={cn(\n \"inline-flex h-9 items-center justify-center rounded-md bg-gray-900 px-4 text-sm font-medium text-white transition-colors hover:bg-gray-800\",\n className\n )}\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(\n \"inline-flex h-9 items-center justify-center rounded-md border border-gray-200 bg-white px-4 text-sm font-medium text-gray-900 transition-colors hover:bg-gray-50\",\n className\n )}\n {...props}\n />\n));\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;\n\nexport {\n AlertDialog,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n};\n","import { BookDashed, Check, ChevronRight, Plus } from 'lucide-react';\nimport { PageFilterConfig } from './page-group-utils';\nimport { Button } from '../../ui/button';\nimport { Slider } from '../../ui/slider';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from '../../ui/dropdown-menu';\n\nexport interface PrintConfig {\n label: string;\n filter: PageFilterConfig | null;\n pageFormat?: { bleed?: number; [key: string]: any }; // PageFormat overrides to merge\n}\n\nexport interface PrintConfigMap {\n [key: string]: PrintConfig;\n}\n\n/** A selectable brand kit for the dev switcher. The host owns the kit data + apply logic. */\nexport interface BrandKitOption {\n id: string;\n name: string;\n}\n\nexport interface DevPrintControlsProps {\n modes?: PrintConfigMap;\n selectedMode?: string; // Current mode from parent\n onModeChange?: (mode: string, config: PrintConfig) => void;\n interactive: boolean;\n onInteractiveChange: (interactive: boolean) => void;\n hasReferenceRenderer?: boolean;\n referenceOpacity?: number;\n onReferenceOpacityChange?: (opacity: number) => void;\n // Brand kit switcher (dev only) — provided by the host (template/story). When `brandKits` is\n // empty/omitted the section is hidden, so the generic editor stays brand-kit agnostic.\n brandKits?: BrandKitOption[];\n activeBrandKitId?: string;\n onSelectBrandKit?: (id: string) => void;\n // Load an arbitrary published kit for testing (a brandkit.json URL, a kit id, or raw JSON). The\n // host fetches/parses + applies it; when omitted the \"Add published kit…\" action is hidden.\n onAddBrandKit?: (input: string) => void;\n}\n\n// Sentinel mode values for the unified Print Preview list.\nconst EDIT_VALUE = '__edit__';\nconst PRINT_VALUE = '__print__';\n\n/** One checkable row. `keepOpen` keeps the menu open on select (handy for rapid brand-kit compares). */\nfunction OptionRow({\n checked,\n label,\n onSelect,\n keepOpen = false,\n}: {\n checked: boolean;\n label: string;\n onSelect: () => void;\n keepOpen?: boolean;\n}) {\n return (\n <DropdownMenuItem\n onSelect={(event) => {\n if (keepOpen) event.preventDefault();\n onSelect();\n }}\n className=\"flex items-center gap-2\"\n >\n {checked ? <Check className=\"w-3 h-3 text-gray-400\" /> : <span className=\"w-3 h-3\" />}\n <span className=\"flex-1 truncate\">{label}</span>\n </DropdownMenuItem>\n );\n}\n\n/** A submenu trigger showing the section name + the current value, with a chevron affordance. */\nfunction SubTriggerRow({ label, value }: { label: string; value?: string }) {\n return (\n <DropdownMenuSubTrigger className=\"flex items-center justify-between gap-4 text-xs\">\n <span className=\"text-gray-700\">{label}</span>\n <span className=\"flex items-center gap-1 text-gray-400\">\n {value ? <span className=\"max-w-[110px] truncate\">{value}</span> : null}\n <ChevronRight className=\"w-3.5 h-3.5\" />\n </span>\n </DropdownMenuSubTrigger>\n );\n}\n\n/**\n * Developer controls — Print Preview and Brand Kit open as submenus; the Reference Overlay slider is\n * pinned to the bottom. Rendered only when devtools are enabled.\n */\nexport function DevPrintControls({\n modes,\n selectedMode: selectedModeProp,\n onModeChange,\n interactive,\n onInteractiveChange,\n hasReferenceRenderer = false,\n referenceOpacity = 50,\n onReferenceOpacityChange,\n brandKits,\n activeBrandKitId,\n onSelectBrandKit,\n onAddBrandKit,\n}: DevPrintControlsProps) {\n const modeKeys = modes ? Object.keys(modes) : [];\n\n // One coherent Print Preview list: \"Edit\" on top, then the template's print modes (or a single\n // \"Print\" when none are defined).\n const printOptions: Array<{ value: string; label: string }> = [\n { value: EDIT_VALUE, label: 'Edit' },\n ...(modeKeys.length > 0\n ? modeKeys.map((key) => ({ value: key, label: modes![key].label }))\n : [{ value: PRINT_VALUE, label: 'Print' }]),\n ];\n const selectedPrint = interactive ? EDIT_VALUE : selectedModeProp || modeKeys[0] || PRINT_VALUE;\n const selectedPrintLabel = printOptions.find((o) => o.value === selectedPrint)?.label ?? 'Edit';\n\n const handlePrintSelect = (value: string) => {\n if (value === EDIT_VALUE) {\n onInteractiveChange(true);\n return;\n }\n onInteractiveChange(false);\n if (value !== PRINT_VALUE && modes && modes[value]) {\n onModeChange?.(value, modes[value]);\n }\n };\n\n const hasBrandKits = !!brandKits && brandKits.length > 0;\n const activeKitName = brandKits?.find((k) => k.id === activeBrandKitId)?.name;\n\n const handleAddPublished = () => {\n const input = window.prompt(\n 'Add a published brand kit to test — paste a brandkit.json URL, a kit id, or raw JSON:',\n );\n if (input && input.trim()) onAddBrandKit?.(input.trim());\n };\n\n return (\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={`text-xs font-medium text-gray-700 hover:bg-gray-100/80 h-7 px-2.5 ${!interactive ? 'bg-gray-100/80' : ''}`}\n >\n <BookDashed className=\"w-3.5 h-3.5\" />\n <span className=\"text-[10px] uppercase tracking-wide\">Dev</span>\n </Button>\n </DropdownMenuTrigger>\n\n <DropdownMenuContent align=\"end\" className=\"min-w-[200px]\">\n {/* Print Preview — submenu */}\n <DropdownMenuSub>\n <SubTriggerRow label=\"Print Preview\" value={selectedPrintLabel} />\n <DropdownMenuSubContent className=\"min-w-[180px]\">\n {printOptions.map((opt) => (\n <OptionRow\n key={opt.value}\n checked={selectedPrint === opt.value}\n label={opt.label}\n onSelect={() => handlePrintSelect(opt.value)}\n />\n ))}\n </DropdownMenuSubContent>\n </DropdownMenuSub>\n\n {/* Brand Kit — submenu */}\n {hasBrandKits && (\n <DropdownMenuSub>\n <SubTriggerRow label=\"Brand Kit\" value={activeKitName} />\n <DropdownMenuSubContent className=\"min-w-[200px]\">\n {brandKits!.map((kit) => (\n <OptionRow\n key={kit.id}\n checked={activeBrandKitId === kit.id}\n label={kit.name}\n keepOpen\n onSelect={() => onSelectBrandKit?.(kit.id)}\n />\n ))}\n {onAddBrandKit && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n onSelect={(event) => {\n event.preventDefault();\n handleAddPublished();\n }}\n className=\"flex items-center gap-2\"\n >\n <Plus className=\"w-3 h-3 text-gray-400\" />\n <span className=\"flex-1\">Add published kit…</span>\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuSubContent>\n </DropdownMenuSub>\n )}\n\n {/* Reference Overlay — always pinned to the bottom */}\n {hasReferenceRenderer && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuLabel className=\"text-xs text-gray-500\">Reference Overlay</DropdownMenuLabel>\n <div className=\"px-2 py-2\">\n <div className=\"flex items-center justify-between text-xs text-gray-600\">\n <span>Opacity</span>\n <span>{referenceOpacity}%</span>\n </div>\n <div className=\"pt-2\">\n <Slider\n value={[referenceOpacity]}\n min={0}\n max={100}\n step={5}\n onValueChange={(value) => {\n const next = value[0] ?? referenceOpacity;\n onReferenceOpacityChange?.(next);\n }}\n />\n </div>\n <div className=\"pt-2 flex items-center justify-between text-xs text-gray-500\">\n <span>Hidden</span>\n <span>Solid</span>\n </div>\n </div>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n","import * as React from 'react';\nimport { useMemo, useState, useRef, useContext, useCallback } from 'react';\nimport { Plus, ClipboardList, X, Check } from 'lucide-react';\nimport { useInteractive, useShouldHideUI } from '../interactive-mode-context';\nimport SectionPageResizer, { Section, TwoPageSection } from '../resizers/section-page-resizer';\nimport type { DefaultZoomMode } from '../resizers/section-page-resizer';\nimport { AddPageDialog } from './add-page-dialog';\nimport { PageOrderDialog } from './page-order-dialog';\nimport { PageCanvas } from './page-canvas';\nimport { PageOptionsDropdown } from './page-options-dropdown';\nimport { PageNameDropdown } from './page-name-dropdown';\n\nimport {\n isPageGroup,\n normalizePageItems,\n PageItem,\n StandalonePage,\n PageEditorState,\n DEFAULT_PAGE_EDITOR_STATE_KEY,\n PageComponent,\n readPageEditorState,\n PageFilterConfig,\n getTotalPageCount,\n InsertPosition,\n SpineComponent,\n SpreadInfo,\n} from './page-group-utils';\nimport Pagination from '../../pagination-static/pagination-static';\nimport { CoverSpread } from '../../pagination-static/cover-spread';\nimport { isCoverSpreadCandidate, omitBinding, resolveCoverSpreadLayout } from './cover-spread-layout';\nimport { usePageGroups, AvailableItem } from './use-page-groups';\nimport { usePageItemActions } from './use-page-item-actions';\nimport {\n useFlowLayouts,\n type LogicalFlowPage,\n type VirtualFlowPage,\n} from './use-flow-layouts';\nimport {\n TemplateDataProvider,\n TemplateDataContext,\n getPagePayload as resolvePagePayload,\n buildPayloadPageOption,\n type PayloadOptionDefinition,\n} from './template-data-provider';\nimport { resolveIntegrationForPage } from './integration-utils';\nimport { buildPageDataBinding } from './data-binding';\nimport { buildPageGroupsConfig } from './page-group-presets';\nimport { Button } from '../../ui/button';\nimport { Badge } from '../../ui/badge';\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from '../../ui/alert-dialog';\nimport { DevPrintControls, type PrintConfigMap, type BrandKitOption } from './dev-print-controls';\nimport { isDev } from '../../utility/is-dev';\nimport { useShellTranslation } from '../../i18n/locale-context';\nimport type { LocalizedText } from '../../i18n/i18n-core.js';\n\ntype ReferenceRenderer = (page: StandalonePage & { pageNum: number }) => React.ReactNode;\nconst DEFAULT_PAGE_FORMAT = { width: 210, height: 297 };\n\nfunction getPageFlowKey(page: StandalonePage, parent?: PageItem) {\n return parent ? `${parent.id}/${page.id}` : page.id;\n}\n\n// Schema-based page option types\nexport type PageOptionSelectValue = {\n label: LocalizedText;\n value: string;\n hex?: string; // For color-series options\n};\n\ntype PageOptionTarget = string | ((pageOrGroup: PageItem) => boolean);\n\ntype BasePageOption = {\n id: string;\n label: LocalizedText;\n description?: LocalizedText;\n appliesTo?: PageOptionTarget | PageOptionTarget[];\n};\n\nexport type SelectPageOption = BasePageOption & {\n type: 'select';\n options: PageOptionSelectValue[];\n getValue: (pageOrGroup: PageItem) => string | number | boolean;\n onChange?: (\n pageOrGroupId: string,\n value: string,\n context: { item?: PageItem; updateItem: (patch: Partial<PageItem>) => void }\n ) => void;\n applyPatch?: (value: string, item?: PageItem) => Partial<PageItem> | void;\n};\n\nexport type TogglePageOption = BasePageOption & {\n type: 'toggle';\n getValue: (pageOrGroup: PageItem) => boolean;\n onChange?: (\n pageOrGroupId: string,\n value: string,\n context: { item?: PageItem; updateItem: (patch: Partial<PageItem>) => void }\n ) => void;\n applyPatch?: (value: string, item?: PageItem) => Partial<PageItem> | void;\n};\n\nexport type SliderPageOption = BasePageOption & {\n type: 'slider';\n min: number;\n max: number;\n step: number;\n getValue: (pageOrGroup: PageItem) => number;\n onChange?: (\n pageOrGroupId: string,\n value: string,\n context: { item?: PageItem; updateItem: (patch: Partial<PageItem>) => void }\n ) => void;\n applyPatch?: (value: string, item?: PageItem) => Partial<PageItem> | void;\n};\n\nexport type CounterPageOption = BasePageOption & {\n type: 'counter';\n min: number;\n max: number;\n step: number;\n getValue: (pageOrGroup: PageItem) => number;\n onChange?: (\n pageOrGroupId: string,\n value: string,\n context: { item?: PageItem; updateItem: (patch: Partial<PageItem>) => void }\n ) => void;\n applyPatch?: (value: string, item?: PageItem) => Partial<PageItem> | void;\n};\n\nexport type ColorSeriesPageOption = BasePageOption & {\n type: 'color-series';\n options: PageOptionSelectValue[]; // Must include hex property\n getValue: (pageOrGroup: PageItem) => string;\n onChange?: (\n pageOrGroupId: string,\n value: string,\n context: { item?: PageItem; updateItem: (patch: Partial<PageItem>) => void }\n ) => void;\n applyPatch?: (value: string, item?: PageItem) => Partial<PageItem> | void;\n};\n\nexport type PageOption = SelectPageOption | TogglePageOption | SliderPageOption | CounterPageOption | ColorSeriesPageOption;\n\ntype PreviewMode = 'single_page' | 'two_pages';\n\ninterface PageEditorProps {\n templateConfig: Parameters<typeof buildPageGroupsConfig>[0];\n payload?: any;\n onPayloadChange?: (nextPayload: any) => void;\n pageFormat?: { width: number; height: number; preview?: PreviewMode; bleed?: number; [key: string]: any };\n pageOptions?: Array<PageOption | PayloadOptionDefinition>;\n notifyError?: (message: string) => void;\n referenceRenderer?: ReferenceRenderer;\n renderOverlay?: (args: { pageNo: number; total: number; pageId: string; parent?: PageItem }) => React.ReactNode;\n renderPage?: (args: { page: StandalonePage & { pageNum: number }; parent?: PageItem }) => React.ReactNode;\n menuItems?: React.ReactNode;\n gridColsClass?: string;\n /** Reorder dialog heading; default: the shell's own, in its language. */\n reorderTitle?: LocalizedText;\n reorderDescription?: LocalizedText;\n stateKey?: string;\n onItemsChange?: (items: PageItem[], state: PageEditorState) => void;\n onStateChange?: (state: PageEditorState) => void;\n resolveNewItem?: (draft: PageItem) => Promise<PageItem | null | void> | PageItem | null | void;\n pageFilter?: PageFilterConfig; // Filter which pages to render\n printConfigs?: PrintConfigMap; // Unified print configurations (includes filter + pageFormat)\n /**\n * Initial preview zoom preference. Defaults to `fit-page` so a document opens with a whole\n * sheet visible; fit keeps following layout until the author picks a manual zoom.\n */\n defaultZoomMode?: DefaultZoomMode;\n // Dev-only brand-kit switcher (rendered in the DEV dropdown when devtools are enabled). The host\n // supplies the kit list + apply handler; PageEditor stays brand-kit agnostic.\n brandKits?: BrandKitOption[];\n activeBrandKitId?: string;\n onSelectBrandKit?: (id: string) => void;\n onAddBrandKit?: (input: string) => void;\n}\n\nfunction ItemAddedDialog({ label, onDone, onAddAnother }: { label: string | null; onDone: () => void; onAddAnother: () => void }) {\n const { t } = useShellTranslation();\n if (!label) return null;\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/30\">\n <div className=\"bg-white rounded-lg border border-gray-200/80 shadow-xl p-6 w-full max-w-sm mx-4 flex flex-col items-center text-center\">\n <div className=\"rounded-full bg-emerald-100 p-3 mb-4\">\n <Check className=\"h-6 w-6 text-emerald-600\" strokeWidth={2.5} />\n </div>\n <h2 className=\"text-base font-medium text-gray-900 mb-5\">\n {t('addDialog.added', { name: label })}\n </h2>\n <div className=\"flex gap-2 w-full\">\n <Button variant=\"outline\" size=\"sm\" onClick={onAddAnother} className=\"flex-1\">\n {t('addDialog.addAnother')}\n </Button>\n <Button variant=\"default\" size=\"sm\" onClick={onDone} className=\"flex-1\">\n {t('addDialog.done')}\n </Button>\n </div>\n </div>\n </div>\n );\n}\n\ntype PageEditorInnerProps = Omit<PageEditorProps, 'templateConfig'> & {\n initialItems?: PageItem[];\n availableItems?: AvailableItem[];\n pageComponents?: { [pageId: string]: PageComponent };\n /** `templateConfig.spine.component` — artwork for the outer cover sheet's spine strip. */\n spineComponent?: SpineComponent;\n};\n\n// Cover spread developer warnings are emitted once per message per session.\nconst warnedCoverSpread = new Set<string>();\n\nfunction PageEditorInner({\n initialItems = [],\n availableItems = [],\n pageComponents = {},\n spineComponent: SpineComponent,\n payload,\n pageFormat,\n pageOptions = [],\n notifyError,\n referenceRenderer,\n renderOverlay,\n renderPage,\n menuItems,\n gridColsClass,\n reorderTitle,\n reorderDescription,\n stateKey = DEFAULT_PAGE_EDITOR_STATE_KEY,\n onItemsChange,\n onStateChange,\n resolveNewItem,\n pageFilter,\n printConfigs,\n defaultZoomMode = 'fit-page',\n brandKits,\n activeBrandKitId,\n onSelectBrandKit,\n onAddBrandKit,\n}: PageEditorInnerProps) {\n const setup = pageFormat ?? DEFAULT_PAGE_FORMAT;\n const { interactive, setInteractive, enableDevTools } = useInteractive();\n const shouldHideUI = useShouldHideUI();\n const { t, localize } = useShellTranslation();\n \n // Dev print mode state\n const [devFilter, setDevFilter] = useState<PageFilterConfig | null>(null);\n const [devPageFormat, setDevPageFormat] = useState<any>(null);\n const [devSelectedMode, setDevSelectedMode] = useState<string | undefined>(undefined);\n const [devModeTick, setDevModeTick] = useState(0);\n const [devReferenceOpacity, setDevReferenceOpacity] = useState(0);\n \n // Use devFilter if set, otherwise use pageFilter prop\n const effectiveFilter = devFilter ?? pageFilter;\n \n // Apply dev pageFormat overrides if set, otherwise use original pageFormat\n const effectivePageFormat = useMemo(() => {\n if (devPageFormat) {\n return { ...setup, ...devPageFormat };\n }\n return setup;\n }, [setup, devPageFormat]);\n \n // Get payload from context if available (preferred), otherwise use prop\n const templateDataContext = useContext(TemplateDataContext);\n const effectivePayload = templateDataContext?.payload ?? payload;\n const [orderDialogOpen, setOrderDialogOpen] = useState(false);\n\n // Perfect-binding cover spread: only a candidate while the cover filter is active AND\n // the editor is in export mode — a spread is a printer layout, not an editing surface\n // (page controls, thumbnails and reorder stay single-page). Decided before flow\n // measurement (needs no page list) so the flow layout key and every single-page render\n // can use a binding-less setup. The final plan is resolved from the rendered pages below.\n const coverSpreadCandidate = !interactive && isCoverSpreadCandidate(effectivePageFormat, effectiveFilter);\n const requestedPreview: PreviewMode = effectivePageFormat?.preview ?? 'single_page';\n const preview: PreviewMode = coverSpreadCandidate ? 'single_page' : requestedPreview;\n // Single-page setup: what every ordinary sheet renders with (never carries `binding`).\n const pageSetup = useMemo(() => {\n const base = omitBinding(effectivePageFormat);\n return requestedPreview === 'two_pages' || coverSpreadCandidate ? { ...base, preview: 'single_page' } : base;\n }, [requestedPreview, coverSpreadCandidate, effectivePageFormat]);\n const plainSetup = useMemo(() => omitBinding(setup), [setup]);\n\n const normalizedItems = useMemo(() => normalizePageItems(initialItems), [initialItems]);\n const resolvedPageOptions = useMemo(() => {\n if (!pageOptions?.length) return [];\n\n return pageOptions\n .map((option) => {\n if ('getValue' in option) return option;\n\n if (!templateDataContext?.setPageOptionValue) {\n if (isDev() || enableDevTools) {\n console.warn(\n 'PageEditor: payload-backed pageOptions require TemplateDataProvider or payload/onPayloadChange.'\n );\n }\n return null;\n }\n\n return buildPayloadPageOption(\n option,\n templateDataContext.payload,\n templateDataContext.setPageOptionValue\n );\n })\n .filter(Boolean) as PageOption[];\n }, [pageOptions, templateDataContext]);\n\n const [lastAddedItem, setLastAddedItem] = useState<AvailableItem | null>(null);\n const [pendingInsertPosition, setPendingInsertPosition] = useState<InsertPosition>({ mode: 'end' });\n const [lastInsertedId, setLastInsertedId] = useState<string | null>(null);\n const highlightTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const {\n items,\n itemsWithPageNum,\n availableItemsToAdd,\n addItem,\n removeItem,\n reorderItems,\n updateItemFields,\n addDialogOpen,\n setAddDialogOpen,\n openAddDialog,\n itemsForReorder,\n handleReorder,\n defaultRenderThumbnail,\n } = usePageGroups({\n initialItems: normalizedItems,\n availableItems,\n pageComponents,\n payload: effectivePayload,\n setup: pageSetup,\n stateKey,\n onItemsChange,\n onStateChange,\n resolveNewItem,\n notifyError,\n });\n\n type LogicalPageWithParent = LogicalFlowPage;\n type VirtualPageWithParent = VirtualFlowPage<LogicalPageWithParent>;\n\n const logicalPages = useMemo<LogicalPageWithParent[]>(() => {\n const pages: LogicalPageWithParent[] = [];\n\n for (const item of itemsWithPageNum) {\n const itemPages = isPageGroup(item)\n ? (item.pages ?? []) as Array<StandalonePage & { pageNum: number }>\n : [item as StandalonePage & { pageNum: number }];\n\n for (const page of itemPages) {\n if (!page?.id) continue;\n const parentGroup = isPageGroup(item) ? item : undefined;\n pages.push({\n ...page,\n kind: 'page' as const,\n id: page.id,\n pageNum: page.pageNum ?? pages.length + 1,\n basePageNum: page.pageNum ?? pages.length + 1,\n parentGroup,\n flowKey: getPageFlowKey(page, parentGroup),\n });\n }\n }\n\n return pages.sort((a, b) => (a.basePageNum ?? 0) - (b.basePageNum ?? 0));\n }, [itemsWithPageNum]);\n\n const flowLayoutKey = useMemo(() => JSON.stringify({\n format: pageSetup?.format,\n orientation: pageSetup?.orientation,\n width: pageSetup?.width,\n height: pageSetup?.height,\n bleed: pageSetup?.bleed,\n showBleed: pageSetup?.showBleed,\n preview: pageSetup?.preview,\n flowPages: logicalPages\n .filter((page) => page.hasFlow)\n .map((page) => page.flowKey)\n .join('|'),\n }), [pageSetup, logicalPages]);\n\n const logicalTotalPageCount = useMemo(() => getTotalPageCount(items), [items]);\n\n const {\n allVirtualPages,\n renderedVirtualPages,\n virtualTotalPageCount,\n registerMeasurement: handleFlowMeasurement,\n } = useFlowLayouts<LogicalPageWithParent>({\n logicalPages,\n pageFilter: effectiveFilter,\n layoutKey: flowLayoutKey,\n });\n\n const renderedVirtualPageIds = useMemo(\n () => new Set(renderedVirtualPages.map((page) => page.virtualPageId)),\n [renderedVirtualPages]\n );\n\n // Resolve the cover spread from the rendered (filtered, flow-expanded) pages.\n const coverSpread = useMemo(\n () => resolveCoverSpreadLayout({\n pageFormat: coverSpreadCandidate ? effectivePageFormat : omitBinding(effectivePageFormat),\n pageFilter: effectiveFilter,\n pages: renderedVirtualPages,\n }),\n [coverSpreadCandidate, effectivePageFormat, effectiveFilter, renderedVirtualPages]\n );\n const coverPlan = coverSpread.active ? coverSpread.plan : null;\n // Setup for the cover sheets: carries the binding so Pagination publishes the wide\n // sheet as the `@page` size. Every rendered sheet uses it while a spread is active,\n // so the root vars never flip between sizes.\n const spreadSetup = useMemo(\n () => (coverPlan ? { ...pageSetup, binding: coverSpread.setup.binding } : pageSetup),\n [coverPlan, pageSetup, coverSpread.setup]\n );\n\n React.useEffect(() => {\n if (!isDev() || !coverSpread.warnings.length) return;\n for (const warning of coverSpread.warnings) {\n if (warnedCoverSpread.has(warning)) continue;\n warnedCoverSpread.add(warning);\n console.warn(`[uhuu-components] PageEditor cover spread: ${warning}`);\n }\n }, [coverSpread.warnings]);\n\n const measurementOnlyPages = useMemo(\n () => allVirtualPages.filter((page) => (\n page.hasFlow &&\n page.virtualPageIndex === 0 &&\n // Cover spread panels render in `content` mode without their own measurement pass.\n (renderPage || !!coverPlan || !renderedVirtualPageIds.has(page.virtualPageId))\n )),\n [allVirtualPages, renderedVirtualPageIds, renderPage, coverPlan]\n );\n\n // Scroll to newly inserted page after layout settles (Section uses ResizeObserver\n // to calculate scaled height, so the DOM exists immediately but has correct\n // dimensions only after a short delay).\n React.useEffect(() => {\n if (!lastInsertedId) return;\n const timer = setTimeout(() => {\n const el = document.querySelector(`[data-page-item-id=\"${lastInsertedId}\"]`);\n el?.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }, 300);\n return () => clearTimeout(timer);\n }, [lastInsertedId]);\n\n const buildItemActionHandlers = usePageItemActions({\n items,\n reorderItems,\n availableItemsToAdd,\n setPendingInsertPosition,\n openAddDialog,\n });\n\n const handleAddItem = useCallback(async (item: AvailableItem) => {\n const result = await addItem(item, pendingInsertPosition);\n if (!result.success) return;\n\n setLastInsertedId(result.insertedId);\n if (highlightTimerRef.current) clearTimeout(highlightTimerRef.current);\n highlightTimerRef.current = setTimeout(() => setLastInsertedId(null), 1200);\n\n setPendingInsertPosition({ mode: 'end' });\n\n if (item.repeatable && item.integration) {\n setLastAddedItem(item);\n }\n }, [addItem, pendingInsertPosition]);\n\n const getMostVisiblePage = useCallback((): InsertPosition => {\n const pageEls = Array.from(document.querySelectorAll<HTMLElement>('[data-page-item-id]'));\n if (!pageEls.length) return { mode: 'end' };\n const viewportCenter = window.innerHeight / 2;\n let closest: HTMLElement | null = null;\n let closestDist = Infinity;\n for (const el of pageEls) {\n const rect = el.getBoundingClientRect();\n const dist = Math.abs((rect.top + rect.height / 2) - viewportCenter);\n if (dist < closestDist) { closestDist = dist; closest = el; }\n }\n const itemId = closest?.getAttribute('data-page-item-id');\n return itemId ? { mode: 'after', anchorId: itemId } : { mode: 'end' };\n }, []);\n\n const handleOpenAddDialogFromToolbar = useCallback(() => {\n setPendingInsertPosition(getMostVisiblePage());\n openAddDialog();\n }, [getMostVisiblePage, openAddDialog]);\n\n const handlePageOptionChange = React.useCallback(\n (pageOption: PageOption, targetItem: PageItem | undefined, value: string) => {\n if (!targetItem) return;\n\n const patch = pageOption.applyPatch?.(value, targetItem);\n if (patch) {\n updateItemFields(targetItem.id, patch);\n }\n\n pageOption.onChange?.(targetItem.id, value, {\n item: targetItem,\n updateItem: (patch) => updateItemFields(targetItem.id, patch),\n });\n },\n [updateItemFields]\n );\n\n const defaultOverlay = (info: { pageNo: number; total: number }) => (\n <div className=\"absolute bottom-[10mm] left-[15mm] right-[15mm] text-[7pt] text-gray-600 flex items-center justify-between pointer-events-none\">\n <span>Page</span>\n <span>\n {info.pageNo} / {info.total}\n </span>\n </div>\n );\n\n const buildOverlay = (pageNo: number, pageId: string, parent?: PageItem) => {\n if (renderOverlay) {\n return renderOverlay({ pageNo, total: virtualTotalPageCount, pageId, parent });\n }\n return defaultOverlay({ pageNo, total: virtualTotalPageCount });\n };\n\n const renderPageContent = (\n page: VirtualPageWithParent,\n options: { renderVisible?: boolean; measureFlow?: boolean; renderMode?: 'sheet' | 'content'; spread?: SpreadInfo } = {}\n ) => {\n const parent = page.parentGroup;\n\n // A custom `renderPage` produces whole sheets; cover spread panels need bare content.\n if (renderPage && options.renderVisible !== false && options.renderMode !== 'content') {\n return renderPage({ page, parent });\n }\n\n const componentKey = page.componentKey ?? page.id;\n const reference = enableDevTools && referenceRenderer ? referenceRenderer(page) : null;\n const effectiveReference =\n enableDevTools && referenceRenderer\n ? (\n React.isValidElement(reference)\n ? React.cloneElement(reference as React.ReactElement<any>, {\n opacity: devReferenceOpacity,\n })\n : reference\n )\n : null;\n const templateId = page.templateId ?? componentKey;\n const PageComponent = pageComponents[componentKey];\n const pagePayload = templateDataContext?.getPagePayload\n ? templateDataContext.getPagePayload(page)\n : resolvePagePayload(effectivePayload, { id: page.id, templateId, componentKey });\n \n // Resolve integration data using utility function\n // For group pages, prefer parent group's integration; fallback to page's own integration\n const integration = resolveIntegrationForPage(\n effectivePayload,\n page,\n parent\n );\n\n const dataBinding = buildPageDataBinding({\n payload: effectivePayload,\n page,\n parentGroup: parent,\n pagePayload,\n });\n\n return (\n <PageCanvas\n key={`${options.renderVisible === false ? 'measure-only' : 'page'}-${page.virtualPageId}`}\n pageId={page.id}\n templateId={templateId}\n pageNo={page.pageNum}\n measurementPageNo={page.basePageNum}\n component={PageComponent}\n payload={effectivePayload}\n pagePayload={pagePayload}\n integration={integration}\n page={page}\n parentGroup={parent}\n componentKey={componentKey}\n setup={spreadSetup}\n reference={effectiveReference}\n overlay={({ pageNo }) => buildOverlay(pageNo, page.id, parent)}\n className={page.className}\n dataBinding={dataBinding}\n totalPages={virtualTotalPageCount}\n measurementTotalPages={logicalTotalPageCount}\n flowPageIndex={page.virtualPageIndex}\n flowChunksByFlowId={page.flowChunksByFlowId}\n measureFlow={options.measureFlow ?? (!!page.hasFlow && page.virtualPageIndex === 0)}\n flowMeasurementKey={page.flowKey}\n flowMeasurementVersion={flowLayoutKey}\n onFlowMeasurement={page.hasFlow ? handleFlowMeasurement : undefined}\n renderVisible={options.renderVisible ?? true}\n renderMode={options.renderMode}\n spread={options.spread}\n />\n );\n };\n\n const panelClassName = (page: VirtualPageWithParent) => {\n const key = page.componentKey ?? page.templateId ?? page.id;\n return [key ? `uhuu-page--${key}` : '', page.className].filter(Boolean).join(' ');\n };\n\n /** One physical cover sheet: two page panels around the spine (see docs/printer-cover-spine-support.md §6). */\n const renderCoverSheet = (sheet: NonNullable<typeof coverPlan>['sheets'][number]) => {\n if (!coverPlan) return null;\n const { binding, page: pageGeometry } = coverPlan;\n const [leftPanel, rightPanel] = sheet.panels;\n const left = leftPanel.page as VirtualPageWithParent;\n const right = rightPanel.page as VirtualPageWithParent;\n const spreadFor = (side: 'left' | 'right'): SpreadInfo => ({\n sheet: sheet.sheet,\n side,\n spine: binding.spine,\n glue: binding.glue,\n bleed: pageGeometry.bleed,\n });\n const title = `Cover sheet ${sheet.index + 1} · ${sheet.sheet} (pages ${left.pageNum} + ${right.pageNum})`;\n\n return (\n <div key={`cover-sheet-${sheet.sheet}`} data-page-item-id={right.parentGroup?.id ?? right.id}>\n <Section\n title={title}\n controls={(\n <div data-uhuu-editor className=\"pl-0 pr-3 py-1.5 flex items-center gap-2 h-9\">\n <span className=\"page-number\">{left.pageNum} + {right.pageNum}</span>\n <span className=\"text-xs text-gray-500\">{title}</span>\n </div>\n )}\n >\n <Pagination setup={spreadSetup}>\n <CoverSpread\n sheet={sheet.sheet}\n pageNo={[left.pageNum, right.pageNum]}\n left={renderPageContent(left, { renderMode: 'content', spread: spreadFor('left') })}\n right={renderPageContent(right, { renderMode: 'content', spread: spreadFor('right') })}\n spine={SpineComponent && sheet.sheet === 'outer' ? (\n <SpineComponent\n payload={effectivePayload}\n sheet=\"outer\"\n spine={binding.spine}\n glue={binding.glue}\n bleed={pageGeometry.bleed}\n height={pageGeometry.height}\n totalPages={virtualTotalPageCount}\n pages={{ left, right }}\n />\n ) : undefined}\n overlay={({ pageNo, side }) => {\n const target = side === 'left' ? left : right;\n return buildOverlay(pageNo, target.id, target.parentGroup);\n }}\n leftClassName={panelClassName(left)}\n rightClassName={panelClassName(right)}\n leftPageKey={left.componentKey ?? left.templateId ?? left.id}\n rightPageKey={right.componentKey ?? right.templateId ?? right.id}\n />\n </Pagination>\n </Section>\n </div>\n );\n };\n\n // Render controls for standalone pages or group pages\n const renderPageControls = (\n page: VirtualPageWithParent,\n parentGroup?: PageItem,\n actionHandlers?: {\n onAddPage?: () => void;\n onMoveUp?: () => void;\n onMoveDown?: () => void;\n onDuplicate?: () => void;\n }\n ) => {\n const isGroupPage = !!parentGroup && isPageGroup(parentGroup);\n const isFirstPageInGroup = isGroupPage && parentGroup.pages[0]?.id === page.id;\n\n if (page.virtualPageIndex > 0) {\n return (\n <div data-uhuu-editor className=\"pl-0 pr-3 py-1.5 flex items-center gap-2 h-9\">\n <span className=\"page-number\">{page.pageNum}</span>\n <span className=\"text-xs text-gray-500\">\n {t('page.continued', { name: localize(page.label) || page.componentKey || page.id })}\n </span>\n </div>\n );\n }\n\n // For group pages, only show controls on the first page (group-level controls)\n if (isGroupPage && !isFirstPageInGroup) {\n return (\n <div data-uhuu-editor className=\"pl-0 pr-3 py-1.5 flex justify-between items-center h-9\">\n <div className=\"flex items-center gap-2\">\n <span className=\"page-number\">\n {page.pageNum}\n </span>\n {page.label && (\n <span className=\"text-xs text-gray-500\">\n {localize(page.label)}\n </span>\n )}\n <span className=\"text-xs text-gray-400\">·</span>\n </div>\n </div>\n );\n }\n\n const targetItem = isGroupPage ? parentGroup : page;\n const displayName = isGroupPage\n ? (localize(parentGroup.label) || parentGroup.id)\n : (localize(page.label) || t('page.fallbackName', { number: page.pageNum }));\n\n // Group-level controls (for first page in group) or standalone page controls\n return (\n <div data-uhuu-editor className=\"pl-0 flex items-center h-9\">\n <span className=\"page-number shrink-0 text-xs tabular-nums text-gray-400 font-medium pr-1\">{page.pageNum}</span>\n <PageNameDropdown\n name={displayName}\n canRename={true}\n canMoveUp={!!actionHandlers?.onMoveUp}\n canMoveDown={!!actionHandlers?.onMoveDown}\n canAddPage={!!actionHandlers?.onAddPage}\n canDuplicate={!!actionHandlers?.onDuplicate}\n canDelete={logicalTotalPageCount > 1}\n onRename={(val) => updateItemFields(targetItem.id, { label: val || undefined })}\n onMoveUp={actionHandlers?.onMoveUp}\n onMoveDown={actionHandlers?.onMoveDown}\n onAddPage={actionHandlers?.onAddPage}\n onDuplicate={actionHandlers?.onDuplicate}\n onDelete={() => removeItem(targetItem.id)}\n />\n <span className=\"pl-1\">\n {resolvedPageOptions.length > 0 && (\n <PageOptionsDropdown\n pageOptions={resolvedPageOptions}\n targetItem={targetItem}\n onChange={handlePageOptionChange}\n title={isGroupPage ? t('page.groupOptions') : t('page.options')}\n />\n )}\n </span>\n </div>\n );\n };\n\n type PagePair = {\n left?: VirtualPageWithParent;\n right?: VirtualPageWithParent;\n layout: \"spread\" | \"left\" | \"right\";\n };\n\n /**\n * Transform origin logic for two-page spreads:\n * - Even pages (2,4,6...) appear on LEFT side → scale from RIGHT edge (gutter)\n * - Odd pages (1,3,5...) appear on RIGHT side → scale from LEFT edge (gutter)\n * This ensures pages meet precisely at center when zoomed\n */\n const pagePairs = useMemo<PagePair[]>(() => {\n if (preview !== 'two_pages') return [];\n\n const pages = renderedVirtualPages;\n if (!pages.length) return [];\n \n // Page 1 is always alone on the right (cover)\n const pairs: PagePair[] = [{ left: undefined, right: pages[0], layout: \"right\" }];\n \n // Subsequent pages are paired: 2-3, 4-5, 6-7, etc.\n for (let i = 1; i < pages.length; i += 2) {\n const leftPage = pages[i];\n const rightPage = pages[i + 1];\n \n if (rightPage) {\n pairs.push({ left: leftPage, right: rightPage, layout: \"spread\" });\n } else {\n // Single page at end: even pages go left, odd pages go right\n const isEven = leftPage.pageNum % 2 === 0;\n pairs.push({\n left: isEven ? leftPage : undefined,\n right: isEven ? undefined : leftPage,\n layout: isEven ? \"left\" : \"right\",\n });\n }\n }\n \n return pairs;\n }, [preview, renderedVirtualPages]);\n\n const defaultMenu = (\n <div className=\"flex items-center gap-1\">\n <Badge variant=\"secondary\" className=\"font-normal text-xs bg-gray-100/80 text-gray-700 border-0\">\n {t('toolbar.pages', { count: virtualTotalPageCount })}\n </Badge>\n { enableDevTools && (\n <DevPrintControls\n modes={printConfigs}\n selectedMode={devSelectedMode}\n onModeChange={(mode, config) => {\n setDevSelectedMode(mode);\n setDevFilter(config.filter ?? null);\n setDevPageFormat(config.pageFormat ?? null);\n setDevModeTick((v) => v + 1);\n }}\n interactive={interactive}\n onInteractiveChange={(newInteractive) => {\n setInteractive(newInteractive);\n // Reset pageFormat overrides when going back to edit mode\n if (newInteractive) {\n setDevPageFormat(null);\n }\n }}\n hasReferenceRenderer={!!referenceRenderer}\n referenceOpacity={devReferenceOpacity}\n onReferenceOpacityChange={setDevReferenceOpacity}\n brandKits={brandKits}\n activeBrandKitId={activeBrandKitId}\n onSelectBrandKit={onSelectBrandKit}\n onAddBrandKit={onAddBrandKit}\n />\n )} \n {interactive && (\n <>\n {availableItemsToAdd.length > 0 && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleOpenAddDialogFromToolbar}\n title={t('toolbar.addHint')}\n className=\"text-xs font-medium text-gray-700 hover:bg-gray-100/80 h-7 px-2.5\"\n >\n <Plus className=\"w-3.5 h-3.5\" />\n {t('toolbar.add')}\n </Button>\n )}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setOrderDialogOpen(true)}\n title={t('toolbar.reorderHint')}\n className=\"text-xs font-medium text-gray-700 hover:bg-gray-100/80 h-7 px-2.5\"\n >\n <ClipboardList className=\"w-3.5 h-3.5\" />\n {t('toolbar.reorder')}\n </Button>\n </>\n )}\n </div>\n );\n\n return (\n <>\n {measurementOnlyPages.map((page) => (\n renderPageContent(page, {\n renderVisible: false,\n measureFlow: true,\n })\n ))}\n\n {/* Back button when in print mode - always rendered, hidden in print output */}\n {enableDevTools && !interactive && (\n <Button\n onClick={() => {\n setInteractive(true);\n // Same reset as the dev dropdown's \"Edit\" entry: print-mode page format\n // overrides (bleed, binding) must not leak into the editing surface.\n setDevPageFormat(null);\n }}\n data-uhuu-editor\n size=\"sm\"\n className=\"screen-only fixed top-4 right-4 z-50 flex items-center gap-1.5 !text-xs rounded-full\"\n title=\"Back to Edit Mode\"\n >\n <X className=\"w-4 h-4\" />\n Back to Editor\n </Button>\n )}\n \n <SectionPageResizer\n key={`dev-mode-${devModeTick}-${devSelectedMode ?? 'default'}`}\n defaultZoom={80}\n defaultZoomMode={defaultZoomMode}\n minZoom={25}\n maxZoom={200}\n menuItems={menuItems ?? defaultMenu}\n onAddPage={handleOpenAddDialogFromToolbar}\n preview={preview}\n >\n {coverPlan ? (\n coverPlan.sheets.map(renderCoverSheet)\n ) : preview === 'two_pages' ? (\n pagePairs.map((pair, index) => {\n // Anchor IDs for insert position (before = first item in pair, after = last item)\n const firstPage = pair.left ?? pair.right;\n const lastPage = pair.right ?? pair.left;\n const firstAnchorId = (firstPage?.parentGroup as any)?.id ?? firstPage?.id ?? null;\n const lastAnchorId = (lastPage?.parentGroup as any)?.id ?? lastPage?.id ?? null;\n\n // Highlight if either page in the pair was just inserted\n const leftTopId = (pair.left?.parentGroup as any)?.id ?? pair.left?.id;\n const rightTopId = (pair.right?.parentGroup as any)?.id ?? pair.right?.id;\n const isLeftHighlighted = leftTopId === lastInsertedId;\n const isRightHighlighted = rightTopId === lastInsertedId;\n\n const getPageHandlers = (page: VirtualPageWithParent | undefined, anchorId: string | null) =>\n buildItemActionHandlers(page ? (page.parentGroup ?? page) as PageItem : undefined, anchorId);\n\n return (\n <TwoPageSection key={`pair-${index}`} layout={pair.layout} pageItemId={lastAnchorId ?? undefined}>\n {pair.left && (\n <div\n data-page-item-id={pair.left.virtualPageIndex === 0 ? leftTopId : undefined}\n className={isLeftHighlighted ? 'outline outline-2 outline-offset-2 outline-blue-100 bg-blue-50' : undefined}\n >\n <Section\n key={pair.left.virtualPageId}\n title={`Sheet ${pair.left.pageNum}`}\n controls={renderPageControls(pair.left, pair.left.parentGroup, getPageHandlers(pair.left, firstAnchorId))}\n origin={pair.left.pageNum % 2 === 0 ? 'right' : 'left'}\n >\n {renderPageContent(pair.left)}\n </Section>\n </div>\n )}\n {pair.right && (\n <div\n data-page-item-id={pair.right.virtualPageIndex === 0 ? rightTopId : undefined}\n className={isRightHighlighted ? 'outline outline-2 outline-offset-2 outline-blue-100 bg-blue-50' : undefined}\n >\n <Section\n key={pair.right.virtualPageId}\n title={`Sheet ${pair.right.pageNum}`}\n controls={renderPageControls(pair.right, pair.right.parentGroup, getPageHandlers(pair.right, lastAnchorId))}\n origin={pair.right.pageNum % 2 === 0 ? 'right' : 'left'}\n >\n {renderPageContent(pair.right)}\n </Section>\n </div>\n )}\n </TwoPageSection>\n );\n })\n ) : (\n renderedVirtualPages.map((page) => {\n const targetItem = (page.parentGroup ?? page) as PageItem;\n const anchorId = page.parentGroup?.id ?? page.id;\n const actionHandlers = buildItemActionHandlers(targetItem, anchorId);\n const topId = page.parentGroup?.id ?? page.id;\n const isHighlighted = lastInsertedId === topId;\n\n return (\n <div\n key={page.virtualPageId}\n data-page-item-id={page.virtualPageIndex === 0 ? topId : undefined}\n className={isHighlighted ? 'outline outline-2 outline-offset-2 outline-blue-100 bg-blue-50' : undefined}\n >\n <Section\n title={`Sheet ${page.pageNum}`}\n controls={renderPageControls(page, page.parentGroup, actionHandlers)}\n >\n {renderPageContent(page)}\n </Section>\n </div>\n );\n })\n )}\n </SectionPageResizer>\n\n {interactive && !shouldHideUI && (\n <>\n <AddPageDialog\n open={addDialogOpen}\n onOpenChange={setAddDialogOpen}\n availableItems={availableItemsToAdd}\n onSelectItem={handleAddItem}\n pageComponents={pageComponents}\n payload={effectivePayload}\n setup={plainSetup}\n gridColsClass={gridColsClass}\n data-uhuu-editor\n />\n\n <PageOrderDialog\n open={orderDialogOpen}\n onOpenChange={setOrderDialogOpen}\n pages={itemsForReorder}\n onReorder={(newOrder) => {\n handleReorder(newOrder);\n setOrderDialogOpen(false);\n }}\n onRemove={(item) => removeItem(item.id)}\n pageComponents={pageComponents}\n payload={effectivePayload}\n setup={plainSetup}\n renderThumbnail={defaultRenderThumbnail}\n title={localize(reorderTitle) ?? t('reorderDialog.title')}\n description={localize(reorderDescription) ?? t('reorderDialog.description')}\n gridColsClass={gridColsClass}\n data-uhuu-editor\n />\n </>\n )}\n\n <ItemAddedDialog\n label={lastAddedItem ? (localize(lastAddedItem.label) ?? lastAddedItem.id) : null}\n onDone={() => setLastAddedItem(null)}\n onAddAnother={() => {\n const item = lastAddedItem;\n setLastAddedItem(null);\n if (item) handleAddItem(item);\n }}\n />\n </>\n );\n}\n\nfunction PageEditorView(props: PageEditorProps) {\n const { templateConfig, ...rest } = props;\n // Check if TemplateDataProvider already exists in the tree\n const existingContext = useContext(TemplateDataContext);\n \n // If context exists, or if no payload/onPayloadChange is provided, render directly\n // Otherwise, wrap with TemplateDataProvider for automatic payload management\n if (existingContext || (!props.payload && !props.onPayloadChange)) {\n return <PageEditorInner {...rest} />;\n }\n \n // Wrap with TemplateDataProvider to enable automatic payload updates\n // Pass stateKey so it can preserve page editor state correctly\n return (\n <TemplateDataProvider \n payload={props.payload} \n onPayloadChange={props.onPayloadChange}\n stateKey={props.stateKey}\n >\n <PageEditorInner {...rest} />\n </TemplateDataProvider>\n );\n}\n\nexport function PageEditor(props: PageEditorProps) {\n const templateDataContext = useContext(TemplateDataContext);\n const { t } = useShellTranslation();\n const effectivePayload = templateDataContext?.payload ?? props.payload;\n \n // Evaluate config with current payload - this re-runs when payload changes\n const resolvedConfig = React.useMemo(\n () => buildPageGroupsConfig({ ...props.templateConfig, payload: effectivePayload }),\n [props.templateConfig, effectivePayload]\n );\n const spineComponent = (props.templateConfig as any)?.spine?.component as SpineComponent | undefined;\n \n const [noticeState, setNoticeState] = React.useState<{ open: boolean; message: string }>({\n open: false,\n message: '',\n });\n\n const notifyError = React.useCallback((message: string) => {\n setNoticeState({ open: true, message });\n }, []);\n\n // Read persisted state\n const restoredState = React.useMemo(\n () => readPageEditorState(effectivePayload),\n [effectivePayload]\n );\n \n // Smart state restoration: re-evaluate dynamic groups and preserve user additions\n const restoredItems = React.useMemo(() => {\n if (!restoredState?.items) {\n return resolvedConfig.initialItems;\n }\n\n // Build a lookup of group definitions (with their original pageComponentKeys functions)\n const rawGroups = props.templateConfig.groups ?? {};\n const groupDefs: any[] = Array.isArray(rawGroups)\n ? rawGroups\n : Object.entries(rawGroups).map(([id, g]: [string, any]) => ({ id, ...g }));\n const groupDefMap = new Map<string, any>(groupDefs.map((g: any) => [g.id, g]));\n\n // Re-evaluate dynamic pageComponentKeys for every group in persisted state.\n // This keeps user-added groups alive while updating their pages to match\n // the current payload (e.g. sectionLayout change).\n const pagesConfig: Record<string, any> = props.templateConfig.pages ?? {};\n const applyPageTemplateMetadata = (page: any) => {\n const key = page?.componentKey ?? page?.templateId ?? page?.id;\n const template = pagesConfig[key] ?? pagesConfig[page?.templateId] ?? pagesConfig[page?.id];\n if (!template?.hasFlow || page?.hasFlow) return page;\n return { ...page, hasFlow: true };\n };\n\n const rehydrated = restoredState.items.map((item: PageItem) => {\n if (item.kind !== 'group') return applyPageTemplateMetadata(item);\n const templateId = (item as any).templateId ?? item.id;\n const groupDef = groupDefMap.get(templateId);\n // Re-apply strictPosition from group definition if missing on the persisted item\n const baseItem: PageItem = (groupDef?.strictPosition !== undefined && !(item as any).strictPosition)\n ? { ...item, strictPosition: groupDef.strictPosition } as PageItem\n : item;\n const baseGroupItem = {\n ...(baseItem as any),\n pages: ((baseItem as any).pages ?? []).map(applyPageTemplateMetadata),\n } as PageItem;\n\n if (!groupDef || typeof groupDef.pageComponentKeys !== 'function') return baseGroupItem;\n try {\n const newKeys: string[] = groupDef.pageComponentKeys({ payload: effectivePayload, item: undefined, parent: undefined });\n\n // Handle invalid return values\n if (!Array.isArray(newKeys)) {\n console.error(`[PageEditor] pageComponentKeys for group ${baseItem.id} must return an array, got:`, typeof newKeys);\n return baseItem;\n }\n\n // Handle empty arrays - update to zero pages (intentional hide)\n if (newKeys.length === 0) {\n return {\n ...baseGroupItem,\n pages: [],\n };\n }\n\n return {\n ...baseGroupItem,\n pages: newKeys.map((key: string, idx: number) => {\n const pageConfig = pagesConfig[key];\n const dataKey = pageConfig?.dataKey;\n return {\n id: `${baseGroupItem.id}__${dataKey ?? key}__${idx}`,\n componentKey: key,\n templateId: key,\n ...(dataKey ? { dataKey } : {}),\n ...(pageConfig?.hasFlow ? { hasFlow: true } : {}),\n };\n }),\n };\n } catch (err) {\n console.error(`[PageEditor] Error evaluating pageComponentKeys for group ${baseGroupItem.id}:`, err);\n return baseGroupItem;\n }\n });\n\n // Safety check: if the initial-item page counts still differ after rehydration\n // (e.g. a static initial group was added/removed from config), use fresh initial\n // items but preserve any user-added groups at the end.\n const initialItemIds = new Set(resolvedConfig.initialItems.map((i: PageItem) => i.id));\n const rehydratedInitialItems = rehydrated.filter((i: PageItem) => initialItemIds.has(i.id));\n const rehydratedInitialCount = getTotalPageCount(rehydratedInitialItems);\n const freshInitialCount = getTotalPageCount(resolvedConfig.initialItems);\n\n // If any initial items are missing from persisted state, assume user removed them\n // and preserve the user's edits (do not reintroduce missing initial items).\n const hasMissingInitialItems = Array.from(initialItemIds).some(\n (id) => !rehydratedInitialItems.some((item) => item.id === id)\n );\n\n if (!hasMissingInitialItems && rehydratedInitialCount !== freshInitialCount) {\n // Only preserve truly user-added groups (where id !== templateId).\n // Initial groups have id === templateId, so they should be re-created from fresh config.\n const addedItems = rehydrated.filter((i: PageItem) => {\n if (i.kind !== 'group') return !initialItemIds.has(i.id);\n const templateId = (i as any).templateId ?? i.id;\n // If id matches templateId, it's an initial group (not user-added)\n return i.id !== templateId && !initialItemIds.has(i.id);\n });\n\n if (addedItems.length === 0) return resolvedConfig.initialItems;\n\n // BUG FIX: naively spreading [...initialItems, ...addedItems] places items with\n // strictPosition:'end' (e.g. end_group) before user-added middle items (e.g. listings)\n // because they appear in initialItems first. Re-enforce strictPosition after merging,\n // the same way handleReorder does via enforcePositions in use-page-groups.ts.\n const combined = [...resolvedConfig.initialItems, ...addedItems];\n const startItems = combined.filter((i) => (i as any).strictPosition === 'start');\n const endItems = combined.filter((i) => (i as any).strictPosition === 'end');\n const middleItems = combined.filter((i) => !(i as any).strictPosition);\n return [...startItems, ...middleItems, ...endItems];\n }\n\n return rehydrated;\n }, [restoredState?.items, resolvedConfig.initialItems, effectivePayload, props.templateConfig.groups, props.templateConfig.pages]);\n\n return (\n <>\n <PageEditorView\n {...props}\n payload={effectivePayload}\n initialItems={restoredItems}\n availableItems={resolvedConfig.availableItems}\n pageComponents={resolvedConfig.pageComponents}\n spineComponent={spineComponent}\n notifyError={notifyError}\n />\n\n <AlertDialog\n open={noticeState.open}\n onOpenChange={(open) => {\n if (!open) {\n setNoticeState({ open: false, message: '' });\n }\n }}\n >\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>{t('notice.cannotRemoveTitle')}</AlertDialogTitle>\n <AlertDialogDescription>\n {noticeState.message}\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogAction onClick={() => setNoticeState({ open: false, message: '' })}>\n {t('notice.ok')}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </>\n );\n}\n\nexport default PageEditor;\n","import * as React from 'react';\nimport type { PageDataBinding } from './data-binding';\nimport { getDialogProps } from '../../editable/dialog-props';\n\n/**\n * Dialog configuration options\n */\nexport type DialogOptions = {\n type?: 'image' | 'text' | 'assistant' | 'markdown' | 'spreadsheet' | 'map';\n imagePath?: string;\n imageGalleryPath?: string;\n ratio?: number;\n rows?: number;\n value?: any;\n payload?: any;\n [key: string]: any;\n};\n\n/**\n * Dialog configuration returned by dialog builders\n */\nexport type DialogConfig = {\n path: string;\n subPath?: string | null;\n imageGalleryPath?: string;\n type?: string;\n imagePath?: string;\n ratio?: number;\n rows?: number;\n value?: any;\n payload?: any;\n [key: string]: any;\n};\n\n/**\n * Config-based resolver: map of keys to path strings or functions\n * Path strings support optional chaining (e.g., 'integration.listing ?? integration.pba_listing')\n */\nexport type IntegrationResolverConfig = {\n [key: string]: string | ((integration: any) => any);\n};\n\n/**\n * Function-based resolver: complex extraction logic\n */\nexport type IntegrationResolverFunction = (\n integration: any,\n payload?: any\n) => any;\n\n/**\n * Union type for resolver\n */\nexport type IntegrationResolver = IntegrationResolverConfig | IntegrationResolverFunction;\n\n/**\n * Gallery path resolver: string path or function\n */\nexport type GalleryPathResolver = string | ((integration: any) => string | null);\n\n/**\n * Integration adapter configuration\n */\nexport type IntegrationAdapterConfig = {\n dataBinding: PageDataBinding;\n integration: any;\n resolver: IntegrationResolver;\n galleryPath?: GalleryPathResolver;\n defaults?: Record<string, any>;\n};\n\n/**\n * Integration adapter API returned by useIntegrationAdapter\n */\nexport type IntegrationAdapter = {\n // Resolved data (e.g., { listing, property, media })\n data: any;\n \n // Dialog builder that automatically uses dataBinding\n dialog: (subPath: string, options?: DialogOptions, value?: any) => DialogConfig | null;\n \n // Dialog props helper (combines dialog + getDialogProps)\n dialogProps: (subPath: string, options?: DialogOptions, value?: any) => Record<string, any>;\n \n // Gallery path (resolved from config or integration structure)\n galleryPath: string | null;\n \n // Integration instance info\n instanceId: string | null;\n integration: any;\n};\n\n/**\n * Evaluate a path string with optional chaining support\n * Supports patterns like: 'integration.listing ?? integration.pba_listing'\n */\nfunction evaluatePathString(path: string, integration: any): any {\n if (!path || !integration) return undefined;\n \n // Handle nullish coalescing operator (??)\n if (path.includes('??')) {\n const parts = path.split('??').map(p => p.trim());\n for (const part of parts) {\n const value = getNestedValue(integration, part);\n if (value !== undefined && value !== null) {\n return value;\n }\n }\n return undefined;\n }\n \n return getNestedValue(integration, path);\n}\n\n/**\n * Get nested value from object using dot notation\n */\nfunction getNestedValue(obj: any, path: string): any {\n if (!path) return obj;\n const keys = path.split('.');\n let current = obj;\n for (const key of keys) {\n if (current == null) return undefined;\n current = current[key];\n }\n return current;\n}\n\n/**\n * Resolve integration data using config-based resolver\n */\nfunction resolveWithConfig(\n config: IntegrationResolverConfig,\n integration: any,\n payload?: any\n): any {\n const result: any = {};\n \n for (const [key, resolver] of Object.entries(config)) {\n if (typeof resolver === 'function') {\n result[key] = resolver(integration);\n } else if (typeof resolver === 'string') {\n // Remove 'integration.' prefix if present (it's implicit)\n const path = resolver.startsWith('integration.') \n ? resolver.slice('integration.'.length)\n : resolver;\n result[key] = evaluatePathString(path, integration);\n }\n }\n \n return result;\n}\n\n/**\n * Resolve integration data using function-based resolver\n */\nfunction resolveWithFunction(\n resolver: IntegrationResolverFunction,\n integration: any,\n payload?: any\n): any {\n return resolver(integration, payload);\n}\n\n/**\n * Resolve integration data using the configured resolver\n */\nfunction resolveIntegrationData(\n resolver: IntegrationResolver,\n integration: any,\n payload?: any\n): any {\n if (typeof resolver === 'function') {\n return resolveWithFunction(resolver, integration, payload);\n } else {\n return resolveWithConfig(resolver, integration, payload);\n }\n}\n\n/**\n * Resolve gallery path from various sources\n */\nfunction resolveGalleryPath(\n dataBinding: PageDataBinding,\n integration: any,\n configGalleryPath?: GalleryPathResolver\n): string | null {\n // Priority 1: dataBinding.defaults.imageGalleryPath (from integration meta/config)\n if (dataBinding?.defaults?.imageGalleryPath) {\n return dataBinding.defaults.imageGalleryPath;\n }\n \n // Priority 2: Config-provided gallery path resolver\n if (configGalleryPath) {\n if (typeof configGalleryPath === 'function') {\n const resolved = configGalleryPath(integration);\n if (resolved) return resolved;\n } else if (typeof configGalleryPath === 'string') {\n return configGalleryPath;\n }\n }\n \n // Priority 3: Try to infer from integration structure\n if (integration?.media?.images) return 'media.images';\n if (integration?.listing?.media?.images) return 'listing.media.images';\n if (integration?.pba_listing?.media?.images) return 'pba_listing.media.images';\n if (integration?.property?.media?.images) return 'property.media.images';\n \n return null;\n}\n\n/**\n * Build integration dialog path using dataBinding\n */\nfunction buildDialogPath(\n dataBinding: PageDataBinding,\n subPath: string,\n isAssistant: boolean\n): string | null {\n if (!dataBinding?.integration?.path) return null;\n \n if (isAssistant) {\n // For assistant dialogs, include subPath in the main path\n return dataBinding.integration.path(subPath);\n } else {\n // For other dialogs, get base path and subPath is handled separately\n return dataBinding.integration.path();\n }\n}\n\n/**\n * Build dialog configuration\n */\nfunction buildDialogConfig(\n dataBinding: PageDataBinding,\n subPath: string,\n options: DialogOptions = {},\n value?: any,\n galleryPath: string | null = null\n): DialogConfig | null {\n const integrationPath = dataBinding?.integration?.path?.();\n if (!integrationPath) return null;\n \n const isAssistant = options.type === 'assistant';\n const isImage = options.type === 'image' || options.imagePath;\n \n // Build the full path\n const fullPath = isAssistant\n ? dataBinding.integration.path(subPath) ?? [integrationPath, subPath].filter(Boolean).join('.')\n : [integrationPath, subPath].filter(Boolean).join('.');\n \n // For image dialogs, resolve gallery path\n if (isImage) {\n const resolvedGalleryPath = options.imageGalleryPath \n ?? (galleryPath ? `${integrationPath}.${galleryPath}` : null)\n ?? dataBinding.defaults.imageGalleryPath;\n \n return {\n path: fullPath,\n imagePath: options.imagePath || 'url',\n imageGalleryPath: resolvedGalleryPath,\n type: options.type || 'image',\n ratio: options.ratio,\n value,\n payload: options.payload ?? dataBinding.payload,\n ...options,\n };\n }\n \n // For assistant dialogs, path includes subPath\n if (isAssistant) {\n return {\n path: fullPath,\n type: 'assistant',\n rows: options.rows,\n value,\n payload: options.payload ?? dataBinding.payload,\n ...options,\n };\n }\n \n // For other dialogs\n return {\n path: integrationPath,\n subPath,\n type: options.type || 'text',\n rows: options.rows,\n value,\n payload: options.payload ?? dataBinding.payload,\n ...options,\n };\n}\n\n/**\n * Hook to create an integration adapter for easy data resolution and dialog building\n * \n * @example\n * ```tsx\n * const adapter = useIntegrationAdapter({\n * dataBinding,\n * integration,\n * resolver: {\n * listing: 'listing ?? pba_listing',\n * property: 'property',\n * media: 'media',\n * },\n * galleryPath: (integration) => {\n * if (integration?.media?.images) return 'media.images';\n * return 'listing.media.images';\n * },\n * });\n * \n * // Use resolved data\n * const { listing, property, media } = adapter.data;\n * \n * // Use dialog props\n * <div {...adapter.dialogProps('overrides.heroImage', { type: 'image', imagePath: 'url' }, heroImage)}>\n * ```\n */\nexport function useIntegrationAdapter(\n config: IntegrationAdapterConfig\n): IntegrationAdapter {\n const { dataBinding, integration, resolver, galleryPath: configGalleryPath, defaults } = config;\n \n // Resolve integration data\n const resolvedData = React.useMemo(() => {\n return resolveIntegrationData(resolver, integration, dataBinding?.payload);\n }, [resolver, integration, dataBinding?.payload]);\n \n // Resolve gallery path\n const galleryPath = React.useMemo(() => {\n return resolveGalleryPath(dataBinding, integration, configGalleryPath);\n }, [dataBinding, integration, configGalleryPath]);\n \n // Dialog builder\n const dialog = React.useCallback(\n (subPath: string, options: DialogOptions = {}, value?: any): DialogConfig | null => {\n return buildDialogConfig(\n dataBinding,\n subPath,\n options,\n value,\n galleryPath\n );\n },\n [dataBinding, galleryPath]\n );\n \n // Dialog props builder (combines dialog + getDialogProps)\n const dialogProps = React.useCallback(\n (subPath: string, options: DialogOptions = {}, value?: any): Record<string, any> => {\n const dialogConfig = dialog(subPath, options, value);\n if (!dialogConfig) return {};\n \n // Use the getDialogProps utility from editable\n // getDialogProps expects { dialog } and optional config\n const props = getDialogProps({ dialog: dialogConfig }, { page: { paginationType: 'static' } });\n \n // Ensure stopPropagation is called on click\n if (props.onClick) {\n const originalOnClick = props.onClick;\n props.onClick = (e: any) => {\n e.stopPropagation();\n originalOnClick(e);\n };\n }\n \n return props;\n },\n [dialog]\n );\n \n return React.useMemo(\n () => ({\n data: resolvedData,\n dialog,\n dialogProps,\n galleryPath,\n instanceId: dataBinding?.integration?.instanceId ?? null,\n integration,\n }),\n [resolvedData, dialog, dialogProps, galleryPath, dataBinding, integration]\n );\n}\n\n","// src/index.js\nimport './uhuu/styles/uhuu-editor-theme.css';\n\nimport PaginationStatic from './uhuu/pagination-static/pagination-static';\nimport SheetStatic from './uhuu/pagination-static/sheet-static';\nimport { FlowArea, FlowPage, Flow, FlowColumns } from './uhuu/pagination-static/flow-static';\nimport * as flowMeasure from './uhuu/pagination-static/flow-measure';\nimport {\n createFlowPlanMetrics,\n distributeFlowColumns,\n distributeFlowItems,\n} from './uhuu/pagination-static/flow-core';\nimport { FlowDocument } from './uhuu/pagination-static/flow-document';\nimport { markdownToFlowItems } from './uhuu/pagination-static/markdown-flow';\nimport { htmlToFlowItems } from './uhuu/pagination-static/html-flow';\nimport { planCoverSpread, resolveSheetSize } from './uhuu/pagination-static/spread-core';\nimport { CoverSpread } from './uhuu/pagination-static/cover-spread';\n\n// Group Static components\nexport const Static = {\n Pagination: PaginationStatic,\n Sheet: SheetStatic,\n FlowArea,\n FlowPage,\n Flow,\n FlowColumns,\n // Exposes the same deterministic chunking algorithm used by FlowArea\n // measurements for consumers that already have measured item heights.\n planFlowChunks: distributeFlowItems,\n planFlowColumnChunks: distributeFlowColumns,\n // Optional cost counters for the two planners above. Diagnostic only.\n createFlowPlanMetrics,\n // The DOM reads FlowArea measures with. Hosts that run their own Flow canvas\n // must use these rather than re-deriving them, or their page boundaries can\n // drift from the delivered document by a rounding step.\n flowMeasure,\n FlowDocument,\n markdownToFlowItems,\n htmlToFlowItems,\n // Perfect-binding cover geometry (outer/inner sheet, spine, glue zones). Pure,\n // DOM-free; used by CoverSpread/PageEditor and by hosts that run their own\n // canvas. See docs/printer-cover-spine-support.md.\n planCoverSpread,\n resolveSheetSize,\n // One physical cover sheet (outer/inner) for the Static-only template path.\n CoverSpread,\n};\n\nexport { default as ImageBlock } from './uhuu/image/image-block';\nexport { default as Editable } from './uhuu/editable/editable';\n// The props Editable/ImageBlock attach, for templates that bind their own element instead of\n// wrapping it: renderer guard and `data-uhuu-type` included.\nexport { getDialogProps } from './uhuu/editable/dialog-props';\n// Print-aware thumbnail URL for an ImageObject or URL (encoded, SVG passed through).\nexport { imageUrl } from './uhuu/image/image-url';\n// One canonical brandkit.json → --color-kit-* / --font-* mapping with print-safe colours,\n// scoped (with the kit's fonts) around the pages.\nexport { BrandKitProvider, useBrandKit } from './uhuu/brand-kit/brand-kit-provider';\n// Where a payload's kit lives, and the assets a kit carries (logos, collections, map styles), for\n// code outside a provider; inside one, `useBrandKit()` has the same helpers bound to the kit.\nexport {\n BRAND_KIT_PUBLIC_BASE_URL,\n brandKitSourceUrl,\n loadBrandKit,\n brandKitLogo,\n brandKitCollection,\n brandKitMapStyle,\n brandKitEnv,\n} from './uhuu/brand-kit/brand-kit-assets';\n\n// EditorShell components - grouped export only\nimport { TemplateDataProvider } from './uhuu/editor-shell/document/template-data-provider';\nimport { PageEditor } from './uhuu/editor-shell/document/page-editor';\nimport { InteractiveModeProvider, useInteractive } from './uhuu/editor-shell/interactive-mode-context';\nimport { useIntegrationAdapter } from './uhuu/editor-shell/document/integration-adapter';\n\nexport const EditorShell = {\n TemplateDataProvider,\n PageEditor,\n InteractiveModeProvider,\n useInteractive,\n useIntegrationAdapter,\n};\n"],"ignoreList":[19,20,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,60,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,130,134,135,136,137,143,145,146,147,149,161],"mappings":"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"}