{"version":3,"sources":["../node_modules/.pnpm/lucide-react@0.560.0_react@19.2.8/node_modules/shared/src/utils.ts","../node_modules/.pnpm/lucide-react@0.560.0_react@19.2.8/node_modules/lucide-react/src/defaultAttributes.ts","../node_modules/.pnpm/lucide-react@0.560.0_react@19.2.8/node_modules/lucide-react/src/Icon.ts","../node_modules/.pnpm/lucide-react@0.560.0_react@19.2.8/node_modules/lucide-react/src/createLucideIcon.ts","../node_modules/.pnpm/lucide-react@0.560.0_react@19.2.8/node_modules/lucide-react/src/icons/captions.ts","../node_modules/.pnpm/lucide-react@0.560.0_react@19.2.8/node_modules/lucide-react/src/icons/cast.ts","../node_modules/.pnpm/lucide-react@0.560.0_react@19.2.8/node_modules/lucide-react/src/icons/check.ts","../node_modules/.pnpm/lucide-react@0.560.0_react@19.2.8/node_modules/lucide-react/src/icons/chevron-left.ts","../node_modules/.pnpm/lucide-react@0.560.0_react@19.2.8/node_modules/lucide-react/src/icons/chevron-right.ts","../node_modules/.pnpm/lucide-react@0.560.0_react@19.2.8/node_modules/lucide-react/src/icons/circle-alert.ts","../node_modules/.pnpm/lucide-react@0.560.0_react@19.2.8/node_modules/lucide-react/src/icons/circle-question-mark.ts","../node_modules/.pnpm/lucide-react@0.560.0_react@19.2.8/node_modules/lucide-react/src/icons/ellipsis-vertical.ts","../node_modules/.pnpm/lucide-react@0.560.0_react@19.2.8/node_modules/lucide-react/src/icons/gauge.ts","../node_modules/.pnpm/lucide-react@0.560.0_react@19.2.8/node_modules/lucide-react/src/icons/loader-circle.ts","../node_modules/.pnpm/lucide-react@0.560.0_react@19.2.8/node_modules/lucide-react/src/icons/maximize.ts","../node_modules/.pnpm/lucide-react@0.560.0_react@19.2.8/node_modules/lucide-react/src/icons/message-circle.ts","../node_modules/.pnpm/lucide-react@0.560.0_react@19.2.8/node_modules/lucide-react/src/icons/minimize.ts","../node_modules/.pnpm/lucide-react@0.560.0_react@19.2.8/node_modules/lucide-react/src/icons/pause.ts","../node_modules/.pnpm/lucide-react@0.560.0_react@19.2.8/node_modules/lucide-react/src/icons/picture-in-picture-2.ts","../node_modules/.pnpm/lucide-react@0.560.0_react@19.2.8/node_modules/lucide-react/src/icons/play.ts","../node_modules/.pnpm/lucide-react@0.560.0_react@19.2.8/node_modules/lucide-react/src/icons/rotate-cw.ts","../node_modules/.pnpm/lucide-react@0.560.0_react@19.2.8/node_modules/lucide-react/src/icons/settings.ts","../node_modules/.pnpm/lucide-react@0.560.0_react@19.2.8/node_modules/lucide-react/src/icons/volume-1.ts","../node_modules/.pnpm/lucide-react@0.560.0_react@19.2.8/node_modules/lucide-react/src/icons/volume-2.ts","../node_modules/.pnpm/lucide-react@0.560.0_react@19.2.8/node_modules/lucide-react/src/icons/volume-x.ts","../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/src/lib/utils.ts","../node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/src/lib/class-group-utils.ts","../node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/src/lib/lru-cache.ts","../node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/src/lib/parse-class-name.ts","../node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/src/lib/sort-modifiers.ts","../node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/src/lib/config-utils.ts","../node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/src/lib/merge-classlist.ts","../node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/src/lib/tw-join.ts","../node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/src/lib/create-tailwind-merge.ts","../node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/src/lib/from-theme.ts","../node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/src/lib/validators.ts","../node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/src/lib/default-config.ts","../node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/src/lib/tw-merge.ts","../node_modules/.pnpm/class-variance-authority@0.7.1/node_modules/class-variance-authority/dist/index.mjs","../node_modules/.pnpm/@radix-ui+react-compose-refs@1.1.5_@types+react@19.2.18_react@19.2.8/node_modules/@radix-ui/react-compose-refs/src/compose-refs.tsx","../node_modules/.pnpm/@radix-ui+react-slot@1.3.3_@types+react@19.2.18_react@19.2.8/node_modules/@radix-ui/react-slot/src/slot.tsx","../node_modules/.pnpm/@radix-ui+number@1.1.3/node_modules/@radix-ui/number/src/number.ts","../node_modules/.pnpm/@radix-ui+primitive@1.1.7/node_modules/@radix-ui/primitive/src/primitive.tsx","../node_modules/.pnpm/@radix-ui+react-context@1.2.2_@types+react@19.2.18_react@19.2.8/node_modules/@radix-ui/react-context/src/create-context.tsx","../node_modules/.pnpm/@radix-ui+react-use-layout-effect@1.1.4_@types+react@19.2.18_react@19.2.8/node_modules/@radix-ui/react-use-layout-effect/src/use-layout-effect.tsx","../node_modules/.pnpm/@radix-ui+react-use-effect-event@0.0.5_@types+react@19.2.18_react@19.2.8/node_modules/@radix-ui/react-use-effect-event/src/use-effect-event.tsx","../node_modules/.pnpm/@radix-ui+react-use-controllable-state@1.2.6_@types+react@19.2.18_react@19.2.8/node_modules/@radix-ui/react-use-controllable-state/src/use-controllable-state.tsx","../node_modules/.pnpm/@radix-ui+react-use-controllable-state@1.2.6_@types+react@19.2.18_react@19.2.8/node_modules/@radix-ui/react-use-controllable-state/src/use-controllable-state-reducer.tsx","../node_modules/.pnpm/@radix-ui+react-direction@1.1.4_@types+react@19.2.18_react@19.2.8/node_modules/@radix-ui/react-direction/src/direction.tsx","../node_modules/.pnpm/@radix-ui+react-use-previous@1.1.4_@types+react@19.2.18_react@19.2.8/node_modules/@radix-ui/react-use-previous/src/use-previous.tsx","../node_modules/.pnpm/@radix-ui+react-use-size@1.1.4_@types+react@19.2.18_react@19.2.8/node_modules/@radix-ui/react-use-size/src/use-size.tsx","../node_modules/.pnpm/@radix-ui+react-primitive@2.1.10_@types+react-dom@19.2.5_@types+react@19.2.18__@types+r_d19867fc387953d271fdd2da1e5dbcc6/node_modules/@radix-ui/react-primitive/src/primitive.tsx","../node_modules/.pnpm/@radix-ui+react-collection@1.1.15_@types+react-dom@19.2.5_@types+react@19.2.18__@types+_2b422f2da1932ba49f89d7cf7e5b28ff/node_modules/@radix-ui/react-collection/src/collection-legacy.tsx","../node_modules/.pnpm/@radix-ui+react-collection@1.1.15_@types+react-dom@19.2.5_@types+react@19.2.18__@types+_2b422f2da1932ba49f89d7cf7e5b28ff/node_modules/@radix-ui/react-collection/src/ordered-dictionary.ts","../node_modules/.pnpm/@radix-ui+react-collection@1.1.15_@types+react-dom@19.2.5_@types+react@19.2.18__@types+_2b422f2da1932ba49f89d7cf7e5b28ff/node_modules/@radix-ui/react-collection/src/collection.tsx","../node_modules/.pnpm/@radix-ui+react-slider@1.4.7_@types+react-dom@19.2.5_@types+react@19.2.18__@types+react_59f7fda31838ac95a57bc4d7dbe91ed2/node_modules/@radix-ui/react-slider/src/slider.tsx","../node_modules/.pnpm/@livo-tv+blocks@1.38.0_@types+react-dom@19.2.5_@types+react@19.2.18__@types+react@19.2._aee236ee70a5f1e77ccde12178a0538a/node_modules/@livo-tv/blocks/src/lib/utils.ts","../node_modules/.pnpm/@livo-tv+blocks@1.38.0_@types+react-dom@19.2.5_@types+react@19.2.18__@types+react@19.2._aee236ee70a5f1e77ccde12178a0538a/node_modules/@livo-tv/blocks/src/components/video/shader-config.ts","../node_modules/.pnpm/@livo-tv+blocks@1.38.0_@types+react-dom@19.2.5_@types+react@19.2.18__@types+react@19.2._aee236ee70a5f1e77ccde12178a0538a/node_modules/@livo-tv/blocks/src/components/video/ShaderCurtain.tsx","../node_modules/.pnpm/@livo-tv+blocks@1.38.0_@types+react-dom@19.2.5_@types+react@19.2.18__@types+react@19.2._aee236ee70a5f1e77ccde12178a0538a/node_modules/@livo-tv/blocks/src/components/video/CurtainStage.tsx","../node_modules/.pnpm/@livo-tv+blocks@1.38.0_@types+react-dom@19.2.5_@types+react@19.2.18__@types+react@19.2._aee236ee70a5f1e77ccde12178a0538a/node_modules/@livo-tv/blocks/src/hooks/useMediaQuery.ts","../node_modules/.pnpm/@livo-tv+blocks@1.38.0_@types+react-dom@19.2.5_@types+react@19.2.18__@types+react@19.2._aee236ee70a5f1e77ccde12178a0538a/node_modules/@livo-tv/blocks/src/components/ui/button.tsx","../node_modules/.pnpm/@livo-tv+blocks@1.38.0_@types+react-dom@19.2.5_@types+react@19.2.18__@types+react@19.2._aee236ee70a5f1e77ccde12178a0538a/node_modules/@livo-tv/blocks/src/components/video/CurtainPicker.tsx","../node_modules/.pnpm/@livo-tv+blocks@1.38.0_@types+react-dom@19.2.5_@types+react@19.2.18__@types+react@19.2._aee236ee70a5f1e77ccde12178a0538a/node_modules/@livo-tv/blocks/src/components/video/captureShaderPoster.ts","../node_modules/.pnpm/@livo-tv+blocks@1.38.0_@types+react-dom@19.2.5_@types+react@19.2.18__@types+react@19.2._aee236ee70a5f1e77ccde12178a0538a/node_modules/@livo-tv/blocks/src/components/video/ShaderCurtainEditor.tsx","../node_modules/.pnpm/@livo-tv+blocks@1.38.0_@types+react-dom@19.2.5_@types+react@19.2.18__@types+react@19.2._aee236ee70a5f1e77ccde12178a0538a/node_modules/@livo-tv/blocks/src/components/video/castHls.ts","../node_modules/.pnpm/@livo-tv+blocks@1.38.0_@types+react-dom@19.2.5_@types+react@19.2.18__@types+react@19.2._aee236ee70a5f1e77ccde12178a0538a/node_modules/@livo-tv/blocks/src/components/ui/slider.tsx","../node_modules/.pnpm/@livo-tv+blocks@1.38.0_@types+react-dom@19.2.5_@types+react@19.2.18__@types+react@19.2._aee236ee70a5f1e77ccde12178a0538a/node_modules/@livo-tv/blocks/src/components/video/seekPreview.ts","../node_modules/.pnpm/@livo-tv+blocks@1.38.0_@types+react-dom@19.2.5_@types+react@19.2.18__@types+react@19.2._aee236ee70a5f1e77ccde12178a0538a/node_modules/@livo-tv/blocks/src/components/video/SeekBar.tsx","../node_modules/.pnpm/@livo-tv+blocks@1.38.0_@types+react-dom@19.2.5_@types+react@19.2.18__@types+react@19.2._aee236ee70a5f1e77ccde12178a0538a/node_modules/@livo-tv/blocks/src/components/video/captions.ts","../node_modules/.pnpm/@livo-tv+blocks@1.38.0_@types+react-dom@19.2.5_@types+react@19.2.18__@types+react@19.2._aee236ee70a5f1e77ccde12178a0538a/node_modules/@livo-tv/blocks/src/components/video/hls-config.ts","../node_modules/.pnpm/@livo-tv+blocks@1.38.0_@types+react-dom@19.2.5_@types+react@19.2.18__@types+react@19.2._aee236ee70a5f1e77ccde12178a0538a/node_modules/@livo-tv/blocks/src/components/video/hls-errors.ts","../node_modules/.pnpm/@livo-tv+blocks@1.38.0_@types+react-dom@19.2.5_@types+react@19.2.18__@types+react@19.2._aee236ee70a5f1e77ccde12178a0538a/node_modules/@livo-tv/blocks/src/components/video/useHlsPlayback.ts","../node_modules/.pnpm/@livo-tv+blocks@1.38.0_@types+react-dom@19.2.5_@types+react@19.2.18__@types+react@19.2._aee236ee70a5f1e77ccde12178a0538a/node_modules/@livo-tv/blocks/src/components/video/fullscreen.ts","../node_modules/.pnpm/@livo-tv+blocks@1.38.0_@types+react-dom@19.2.5_@types+react@19.2.18__@types+react@19.2._aee236ee70a5f1e77ccde12178a0538a/node_modules/@livo-tv/blocks/src/components/video/CaptionOverlay.tsx","../node_modules/.pnpm/@livo-tv+blocks@1.38.0_@types+react-dom@19.2.5_@types+react@19.2.18__@types+react@19.2._aee236ee70a5f1e77ccde12178a0538a/node_modules/@livo-tv/blocks/src/components/video/nativeCaptionTrack.ts","../node_modules/.pnpm/@livo-tv+blocks@1.38.0_@types+react-dom@19.2.5_@types+react@19.2.18__@types+react@19.2._aee236ee70a5f1e77ccde12178a0538a/node_modules/@livo-tv/blocks/src/components/video/VideoPlayer.tsx","../node_modules/.pnpm/@livo-tv+blocks@1.38.0_@types+react-dom@19.2.5_@types+react@19.2.18__@types+react@19.2._aee236ee70a5f1e77ccde12178a0538a/node_modules/@livo-tv/blocks/src/lib/playbackBeacon.ts","../src/condo/types.ts","../src/condo/api.ts","../src/condo/avatar.tsx","../src/condo/scroller.tsx","../src/condo/gates.ts","../src/condo/identity.ts","../src/condo/labels.ts","../src/condo/community.tsx","../src/condo/overlay.tsx","../src/public-api.ts","../src/theme.ts","../src/waiting-room.tsx","../src/waiting-status.ts","../src/player.tsx","../src/urls.ts","../src/iframe-studio.tsx"],"names":["forwardRef","createElement","__iconNode","concatArrays","array1","array2","combinedArray","Array","length","i","createClassValidatorObject","classGroupId","validator","createClassPartObject","nextPart","Map","validators","CLASS_PART_SEPARATOR","EMPTY_CONFLICTS","ARBITRARY_PROPERTY_PREFIX","createClassGroupUtils","config","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","getClassGroupId","className","startsWith","endsWith","getGroupIdForArbitraryProperty","classParts","split","startIndex","getGroupRecursive","getConflictingClassGroupIds","hasPostfixModifier","modifierConflicts","baseConflicts","classPartObject","classPathsLength","currentClassPart","nextClassPartObject","get","result","undefined","classRest","join","slice","validatorsLength","validatorObj","indexOf","content","colonIndex","property","theme","classGroups","processClassGroups","group","processClassesRecursively","classGroup","len","classDefinition","processClassDefinition","processStringDefinition","processFunctionDefinition","processObjectDefinition","classPartObjectToEdit","getPart","isThemeGetter","push","entries","Object","key","value","path","current","parts","part","next","set","func","createLruCache","maxCacheSize","cacheSize","cache","create","previousCache","update","IMPORTANT_MODIFIER","MODIFIER_SEPARATOR","EMPTY_MODIFIERS","createResultObject","modifiers","hasImportantModifier","baseClassName","maybePostfixModifierPosition","isExternal","createParseClassName","prefix","experimentalParseClassName","parseClassName","bracketDepth","parenDepth","modifierStart","postfixModifierPosition","index","currentCharacter","baseClassNameWithImportantModifier","fullPrefix","parseClassNameOriginal","createSortModifiers","modifierWeights","orderSensitiveModifiers","forEach","mod","currentSegment","modifier","isArbitrary","isOrderSensitive","has","sort","createConfigUtils","sortModifiers","postfixLookupClassGroupIds","createPostfixLookupClassGroupIds","lookup","classGroupIds","postfixLookupClassGroups","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","classGroupsInConflict","classNames","trim","originalClassName","baseClassNameWithoutPostfix","substring","classGroupIdWithPostfix","variantModifier","modifierId","classId","conflictGroups","twJoin","classLists","argument","resolvedValue","string","toValue","mix","k","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","reduce","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","args","fallbackThemeArr","fromTheme","themeGetter","arbitraryValueRegex","arbitraryVariableRegex","fractionRegex","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isFraction","test","isNumber","Number","isNaN","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","exec","shouldMatchNoLabel","label","getDefaultConfig","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","span","scaleGridColRowStartOrEnd","scaleGridAutoColsRows","scaleAlignPrimaryAxis","scaleAlignSecondaryAxis","scaleMargin","scaleSizing","scaleSizingInline","scaleSizingBlock","scaleColor","scaleBgPosition","position","scaleBgRepeat","repeat","scaleBgSize","size","scaleGradientStopPosition","scaleRadius","scaleBorderWidth","scaleLineStyle","scaleBlendMode","scaleMaskImagePosition","scaleBlur","scaleRotate","scaleScale","scaleSkew","scaleTranslate","animate","aspect","blur","breakpoint","color","container","ease","font","leading","perspective","radius","shadow","spacing","text","tracking","columns","box","display","sr","float","clear","isolation","object","overflow","overscroll","inset","start","end","top","right","bottom","left","visibility","z","basis","flex","grow","shrink","order","col","row","gap","justify","items","baseline","self","p","px","py","ps","pe","pbs","pbe","pt","pr","pb","pl","m","mx","my","ms","me","mbs","mbe","mt","mr","mb","ml","inline","block","w","screen","h","list","placeholder","decoration","indent","tab","align","whitespace","break","wrap","hyphens","bg","linear","to","radial","conic","from","via","rounded","border","divide","outline","ring","opacity","mask","closest","farthest","filter","brightness","contrast","grayscale","invert","saturate","sepia","table","caption","transition","duration","delay","backface","rotate","scale","skew","transform","origin","translate","zoom","accent","appearance","caret","scheme","cursor","resize","scroll","scrollbar","snap","touch","select","fill","stroke","twMerge","param","React","Slot","React2","__name","Slottable","child","createContext","React3","useContext","createScope","nextScopes","useLayoutEffect","React4","React5","React6","React22","state","isControlled","React7","React8","React9","Node","React10","jsx","ReactDOM","createCollectionScope","React11","useCollection","createCollection","createContextScope","React23","composeRefs","useComposedRefs","createSlot","itemData","React12","Slider","SliderHorizontal","SliderVertical","SliderImpl","SliderTrack","SliderRange","isFunction","SliderThumbTrigger","SliderThumb","jsxs","Fragment","SliderBubbleInput","decimalPart","clamp","React112","seconds","kind","detail","track","useState","useEffect","useRef","useCallback","useMemo","isRecord","HEX","communityLabels"],"mappings":"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","file":"index.cjs","sourcesContent":["import { CamelToPascal } from './utility-types';\n\n/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n  string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n\n/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = <T extends string>(string: T) =>\n  string.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) =>\n    p2 ? p2.toUpperCase() : p1.toLowerCase(),\n  );\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = <T extends string>(string: T): CamelToPascal<T> => {\n  const camelCase = toCamelCase(string);\n\n  return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal<T>;\n};\n\n/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = <ClassType = string | undefined | null>(...classes: ClassType[]) =>\n  classes\n    .filter((className, index, array) => {\n      return (\n        Boolean(className) &&\n        (className as string).trim() !== '' &&\n        array.indexOf(className) === index\n      );\n    })\n    .join(' ')\n    .trim();\n\n/**\n * Is empty string\n *\n * @param {unknown} value\n * @returns {boolean} Whether the value is an empty string\n */\nexport const isEmptyString = (value: unknown): boolean => value === '';\n\n/**\n * Check if a component has an accessibility prop\n *\n * @param {object} props\n * @returns {boolean} Whether the component has an accessibility prop\n */\nexport const hasA11yProp = (props: Record<string, any>) => {\n  for (const prop in props) {\n    if (prop.startsWith('aria-') || prop === 'role' || prop === 'title') {\n      return true;\n    }\n  }\n};\n","export default {\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","import { createElement, forwardRef } from 'react';\nimport defaultAttributes from './defaultAttributes';\nimport { IconNode, LucideProps } from './types';\nimport { mergeClasses, hasA11yProp } from '@lucide/shared';\n\ninterface IconComponentProps extends LucideProps {\n  iconNode: IconNode;\n}\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {string} props.className - The class name of the icon\n * @param {IconNode} props.children - The children of the icon\n * @param {IconNode} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef<SVGSVGElement, IconComponentProps>(\n  (\n    {\n      color = 'currentColor',\n      size = 24,\n      strokeWidth = 2,\n      absoluteStrokeWidth,\n      className = '',\n      children,\n      iconNode,\n      ...rest\n    },\n    ref,\n  ) =>\n    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 default Icon;\n","import { createElement, forwardRef } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from '@lucide/shared';\nimport { IconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Create a Lucide icon component\n * @param {string} iconName\n * @param {array} iconNode\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst createLucideIcon = (iconName: string, iconNode: IconNode) => {\n  const Component = forwardRef<SVGSVGElement, LucideProps>(({ className, ...props }, ref) =>\n    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\n  Component.displayName = toPascalCase(iconName);\n\n  return Component;\n};\n\nexport default createLucideIcon;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  ['rect', { width: '18', height: '14', x: '3', y: '5', rx: '2', ry: '2', key: '12ruh7' }],\n  ['path', { d: 'M7 15h4M15 15h2M7 11h2M13 11h4', key: '1ueiar' }],\n];\n\n/**\n * @component @name Captions\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iMTgiIGhlaWdodD0iMTQiIHg9IjMiIHk9IjUiIHJ4PSIyIiByeT0iMiIgLz4KICA8cGF0aCBkPSJNNyAxNWg0TTE1IDE1aDJNNyAxMWgyTTEzIDExaDQiIC8+Cjwvc3ZnPg==) - https://lucide.dev/icons/captions\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Captions = createLucideIcon('captions', __iconNode);\n\nexport default Captions;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  ['path', { d: 'M2 8V6a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2h-6', key: '3zrzxg' }],\n  ['path', { d: 'M2 12a9 9 0 0 1 8 8', key: 'g6cvee' }],\n  ['path', { d: 'M2 16a5 5 0 0 1 4 4', key: '1y1dii' }],\n  ['line', { x1: '2', x2: '2.01', y1: '20', y2: '20', key: 'xu2jvo' }],\n];\n\n/**\n * @component @name Cast\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMiA4VjZhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjEyYTIgMiAwIDAgMS0yIDJoLTYiIC8+CiAgPHBhdGggZD0iTTIgMTJhOSA5IDAgMCAxIDggOCIgLz4KICA8cGF0aCBkPSJNMiAxNmE1IDUgMCAwIDEgNCA0IiAvPgogIDxsaW5lIHgxPSIyIiB4Mj0iMi4wMSIgeTE9IjIwIiB5Mj0iMjAiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/cast\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Cast = createLucideIcon('cast', __iconNode);\n\nexport default Cast;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'M20 6 9 17l-5-5', key: '1gmf2c' }]];\n\n/**\n * @component @name Check\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjAgNiA5IDE3bC01LTUiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/check\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Check = createLucideIcon('check', __iconNode);\n\nexport default Check;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm15 18-6-6 6-6', key: '1wnfg3' }]];\n\n/**\n * @component @name ChevronLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTUgMTgtNi02IDYtNiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/chevron-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronLeft = createLucideIcon('chevron-left', __iconNode);\n\nexport default ChevronLeft;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm9 18 6-6-6-6', key: 'mthhwq' }]];\n\n/**\n * @component @name ChevronRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtOSAxOCA2LTYtNi02IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/chevron-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronRight = createLucideIcon('chevron-right', __iconNode);\n\nexport default ChevronRight;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n  ['line', { x1: '12', x2: '12', y1: '8', y2: '12', key: '1pkeuh' }],\n  ['line', { x1: '12', x2: '12.01', y1: '16', y2: '16', key: '4dfq90' }],\n];\n\n/**\n * @component @name CircleAlert\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgLz4KICA8bGluZSB4MT0iMTIiIHgyPSIxMiIgeTE9IjgiIHkyPSIxMiIgLz4KICA8bGluZSB4MT0iMTIiIHgyPSIxMi4wMSIgeTE9IjE2IiB5Mj0iMTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/circle-alert\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst CircleAlert = createLucideIcon('circle-alert', __iconNode);\n\nexport default CircleAlert;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n  ['path', { d: 'M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3', key: '1u773s' }],\n  ['path', { d: 'M12 17h.01', key: 'p32p05' }],\n];\n\n/**\n * @component @name CircleQuestionMark\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgLz4KICA8cGF0aCBkPSJNOS4wOSA5YTMgMyAwIDAgMSA1LjgzIDFjMCAyLTMgMy0zIDMiIC8+CiAgPHBhdGggZD0iTTEyIDE3aC4wMSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/circle-question-mark\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst CircleQuestionMark = createLucideIcon('circle-question-mark', __iconNode);\n\nexport default CircleQuestionMark;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  ['circle', { cx: '12', cy: '12', r: '1', key: '41hilf' }],\n  ['circle', { cx: '12', cy: '5', r: '1', key: 'gxeob9' }],\n  ['circle', { cx: '12', cy: '19', r: '1', key: 'lyex9k' }],\n];\n\n/**\n * @component @name EllipsisVertical\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxIiAvPgogIDxjaXJjbGUgY3g9IjEyIiBjeT0iNSIgcj0iMSIgLz4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjE5IiByPSIxIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/ellipsis-vertical\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst EllipsisVertical = createLucideIcon('ellipsis-vertical', __iconNode);\n\nexport default EllipsisVertical;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  ['path', { d: 'm12 14 4-4', key: '9kzdfg' }],\n  ['path', { d: 'M3.34 19a10 10 0 1 1 17.32 0', key: '19p75a' }],\n];\n\n/**\n * @component @name Gauge\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTIgMTQgNC00IiAvPgogIDxwYXRoIGQ9Ik0zLjM0IDE5YTEwIDEwIDAgMSAxIDE3LjMyIDAiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/gauge\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Gauge = createLucideIcon('gauge', __iconNode);\n\nexport default Gauge;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'M21 12a9 9 0 1 1-6.219-8.56', key: '13zald' }]];\n\n/**\n * @component @name LoaderCircle\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjEgMTJhOSA5IDAgMSAxLTYuMjE5LTguNTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/loader-circle\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst LoaderCircle = createLucideIcon('loader-circle', __iconNode);\n\nexport default LoaderCircle;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: 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];\n\n/**\n * @component @name Maximize\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNOCAzSDVhMiAyIDAgMCAwLTIgMnYzIiAvPgogIDxwYXRoIGQ9Ik0yMSA4VjVhMiAyIDAgMCAwLTItMmgtMyIgLz4KICA8cGF0aCBkPSJNMyAxNnYzYTIgMiAwIDAgMCAyIDJoMyIgLz4KICA8cGF0aCBkPSJNMTYgMjFoM2EyIDIgMCAwIDAgMi0ydi0zIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/maximize\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Maximize = createLucideIcon('maximize', __iconNode);\n\nexport default Maximize;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  [\n    'path',\n    {\n      d: 'M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719',\n      key: '1sd12s',\n    },\n  ],\n];\n\n/**\n * @component @name MessageCircle\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMi45OTIgMTYuMzQyYTIgMiAwIDAgMSAuMDk0IDEuMTY3bC0xLjA2NSAzLjI5YTEgMSAwIDAgMCAxLjIzNiAxLjE2OGwzLjQxMy0uOTk4YTIgMiAwIDAgMSAxLjA5OS4wOTIgMTAgMTAgMCAxIDAtNC43NzctNC43MTkiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/message-circle\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst MessageCircle = createLucideIcon('message-circle', __iconNode);\n\nexport default MessageCircle;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  ['path', { d: 'M8 3v3a2 2 0 0 1-2 2H3', key: 'hohbtr' }],\n  ['path', { d: 'M21 8h-3a2 2 0 0 1-2-2V3', key: '5jw1f3' }],\n  ['path', { d: 'M3 16h3a2 2 0 0 1 2 2v3', key: '198tvr' }],\n  ['path', { d: 'M16 21v-3a2 2 0 0 1 2-2h3', key: 'ph8mxp' }],\n];\n\n/**\n * @component @name Minimize\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNOCAzdjNhMiAyIDAgMCAxLTIgMkgzIiAvPgogIDxwYXRoIGQ9Ik0yMSA4aC0zYTIgMiAwIDAgMS0yLTJWMyIgLz4KICA8cGF0aCBkPSJNMyAxNmgzYTIgMiAwIDAgMSAyIDJ2MyIgLz4KICA8cGF0aCBkPSJNMTYgMjF2LTNhMiAyIDAgMCAxIDItMmgzIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/minimize\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Minimize = createLucideIcon('minimize', __iconNode);\n\nexport default Minimize;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  ['rect', { x: '14', y: '3', width: '5', height: '18', rx: '1', key: 'kaeet6' }],\n  ['rect', { x: '5', y: '3', width: '5', height: '18', rx: '1', key: '1wsw3u' }],\n];\n\n/**\n * @component @name Pause\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB4PSIxNCIgeT0iMyIgd2lkdGg9IjUiIGhlaWdodD0iMTgiIHJ4PSIxIiAvPgogIDxyZWN0IHg9IjUiIHk9IjMiIHdpZHRoPSI1IiBoZWlnaHQ9IjE4IiByeD0iMSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/pause\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Pause = createLucideIcon('pause', __iconNode);\n\nexport default Pause;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  ['path', { d: 'M21 9V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v10c0 1.1.9 2 2 2h4', key: 'daa4of' }],\n  ['rect', { width: '10', height: '7', x: '12', y: '13', rx: '2', key: '1nb8gs' }],\n];\n\n/**\n * @component @name PictureInPicture2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjEgOVY2YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAydjEwYzAgMS4xLjkgMiAyIDJoNCIgLz4KICA8cmVjdCB3aWR0aD0iMTAiIGhlaWdodD0iNyIgeD0iMTIiIHk9IjEzIiByeD0iMiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/picture-in-picture-2\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst PictureInPicture2 = createLucideIcon('picture-in-picture-2', __iconNode);\n\nexport default PictureInPicture2;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  [\n    'path',\n    {\n      d: 'M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z',\n      key: '10ikf1',\n    },\n  ],\n];\n\n/**\n * @component @name Play\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNSA1YTIgMiAwIDAgMSAzLjAwOC0xLjcyOGwxMS45OTcgNi45OThhMiAyIDAgMCAxIC4wMDMgMy40NThsLTEyIDdBMiAyIDAgMCAxIDUgMTl6IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/play\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Play = createLucideIcon('play', __iconNode);\n\nexport default Play;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  ['path', { d: 'M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8', key: '1p45f6' }],\n  ['path', { d: 'M21 3v5h-5', key: '1q7to0' }],\n];\n\n/**\n * @component @name RotateCw\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjEgMTJhOSA5IDAgMSAxLTktOWMyLjUyIDAgNC45MyAxIDYuNzQgMi43NEwyMSA4IiAvPgogIDxwYXRoIGQ9Ik0yMSAzdjVoLTUiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/rotate-cw\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst RotateCw = createLucideIcon('rotate-cw', __iconNode);\n\nexport default RotateCw;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  [\n    'path',\n    {\n      d: 'M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915',\n      key: '1i5ecw',\n    },\n  ],\n  ['circle', { cx: '12', cy: '12', r: '3', key: '1v7zrd' }],\n];\n\n/**\n * @component @name Settings\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNOS42NzEgNC4xMzZhMi4zNCAyLjM0IDAgMCAxIDQuNjU5IDAgMi4zNCAyLjM0IDAgMCAwIDMuMzE5IDEuOTE1IDIuMzQgMi4zNCAwIDAgMSAyLjMzIDQuMDMzIDIuMzQgMi4zNCAwIDAgMCAwIDMuODMxIDIuMzQgMi4zNCAwIDAgMS0yLjMzIDQuMDMzIDIuMzQgMi4zNCAwIDAgMC0zLjMxOSAxLjkxNSAyLjM0IDIuMzQgMCAwIDEtNC42NTkgMCAyLjM0IDIuMzQgMCAwIDAtMy4zMi0xLjkxNSAyLjM0IDIuMzQgMCAwIDEtMi4zMy00LjAzMyAyLjM0IDIuMzQgMCAwIDAgMC0zLjgzMUEyLjM0IDIuMzQgMCAwIDEgNi4zNSA2LjA1MWEyLjM0IDIuMzQgMCAwIDAgMy4zMTktMS45MTUiIC8+CiAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMyIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/settings\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Settings = createLucideIcon('settings', __iconNode);\n\nexport default Settings;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  [\n    'path',\n    {\n      d: 'M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z',\n      key: 'uqj9uw',\n    },\n  ],\n  ['path', { d: 'M16 9a5 5 0 0 1 0 6', key: '1q6k2b' }],\n];\n\n/**\n * @component @name Volume1\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTEgNC43MDJhLjcwNS43MDUgMCAwIDAtMS4yMDMtLjQ5OEw2LjQxMyA3LjU4N0ExLjQgMS40IDAgMCAxIDUuNDE2IDhIM2ExIDEgMCAwIDAtMSAxdjZhMSAxIDAgMCAwIDEgMWgyLjQxNmExLjQgMS40IDAgMCAxIC45OTcuNDEzbDMuMzgzIDMuMzg0QS43MDUuNzA1IDAgMCAwIDExIDE5LjI5OHoiIC8+CiAgPHBhdGggZD0iTTE2IDlhNSA1IDAgMCAxIDAgNiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/volume-1\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Volume1 = createLucideIcon('volume-1', __iconNode);\n\nexport default Volume1;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  [\n    'path',\n    {\n      d: 'M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z',\n      key: 'uqj9uw',\n    },\n  ],\n  ['path', { d: 'M16 9a5 5 0 0 1 0 6', key: '1q6k2b' }],\n  ['path', { d: 'M19.364 18.364a9 9 0 0 0 0-12.728', key: 'ijwkga' }],\n];\n\n/**\n * @component @name Volume2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTEgNC43MDJhLjcwNS43MDUgMCAwIDAtMS4yMDMtLjQ5OEw2LjQxMyA3LjU4N0ExLjQgMS40IDAgMCAxIDUuNDE2IDhIM2ExIDEgMCAwIDAtMSAxdjZhMSAxIDAgMCAwIDEgMWgyLjQxNmExLjQgMS40IDAgMCAxIC45OTcuNDEzbDMuMzgzIDMuMzg0QS43MDUuNzA1IDAgMCAwIDExIDE5LjI5OHoiIC8+CiAgPHBhdGggZD0iTTE2IDlhNSA1IDAgMCAxIDAgNiIgLz4KICA8cGF0aCBkPSJNMTkuMzY0IDE4LjM2NGE5IDkgMCAwIDAgMC0xMi43MjgiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/volume-2\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Volume2 = createLucideIcon('volume-2', __iconNode);\n\nexport default Volume2;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  [\n    'path',\n    {\n      d: 'M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z',\n      key: 'uqj9uw',\n    },\n  ],\n  ['line', { x1: '22', x2: '16', y1: '9', y2: '15', key: '1ewh16' }],\n  ['line', { x1: '16', x2: '22', y1: '9', y2: '15', key: '5ykzw1' }],\n];\n\n/**\n * @component @name VolumeX\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTEgNC43MDJhLjcwNS43MDUgMCAwIDAtMS4yMDMtLjQ5OEw2LjQxMyA3LjU4N0ExLjQgMS40IDAgMCAxIDUuNDE2IDhIM2ExIDEgMCAwIDAtMSAxdjZhMSAxIDAgMCAwIDEgMWgyLjQxNmExLjQgMS40IDAgMCAxIC45OTcuNDEzbDMuMzgzIDMuMzg0QS43MDUuNzA1IDAgMCAwIDExIDE5LjI5OHoiIC8+CiAgPGxpbmUgeDE9IjIyIiB4Mj0iMTYiIHkxPSI5IiB5Mj0iMTUiIC8+CiAgPGxpbmUgeDE9IjE2IiB4Mj0iMjIiIHkxPSI5IiB5Mj0iMTUiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/volume-x\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst VolumeX = createLucideIcon('volume-x', __iconNode);\n\nexport default VolumeX;\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 */\nexport const concatArrays = <T, U>(\n    array1: readonly T[],\n    array2: readonly U[],\n): readonly (T | U)[] => {\n    // Pre-allocate for better V8 optimization\n    const combinedArray: (T | U)[] = 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","import {\n    AnyClassGroupIds,\n    AnyConfig,\n    AnyThemeGroupIds,\n    ClassGroup,\n    ClassValidator,\n    Config,\n    ThemeGetter,\n    ThemeObject,\n} from './types'\nimport { concatArrays } from './utils'\n\nexport interface ClassPartObject {\n    nextPart: Map<string, ClassPartObject>\n    validators: ClassValidatorObject[] | null\n    classGroupId: AnyClassGroupIds | undefined // Always define optional props for consistent shape\n}\n\ninterface ClassValidatorObject {\n    classGroupId: AnyClassGroupIds\n    validator: ClassValidator\n}\n\n// Factory function ensures consistent object shapes\nconst createClassValidatorObject = (\n    classGroupId: AnyClassGroupIds,\n    validator: ClassValidator,\n): ClassValidatorObject => ({\n    classGroupId,\n    validator,\n})\n\n// Factory ensures consistent ClassPartObject shape\nconst createClassPartObject = (\n    nextPart: Map<string, ClassPartObject> = new Map(),\n    validators: ClassValidatorObject[] | null = null,\n    classGroupId?: AnyClassGroupIds,\n): ClassPartObject => ({\n    nextPart,\n    validators,\n    classGroupId,\n})\n\nconst CLASS_PART_SEPARATOR = '-'\n\nconst EMPTY_CONFLICTS: readonly AnyClassGroupIds[] = []\n// I use two dots here because one dot is used as prefix for class groups in plugins\nconst ARBITRARY_PROPERTY_PREFIX = 'arbitrary..'\n\nexport const createClassGroupUtils = (config: AnyConfig) => {\n    const classMap = createClassMap(config)\n    const { conflictingClassGroups, conflictingClassGroupModifiers } = config\n\n    const getClassGroupId = (className: string) => {\n        if (className.startsWith('[') && className.endsWith(']')) {\n            return getGroupIdForArbitraryProperty(className)\n        }\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\n    const getConflictingClassGroupIds = (\n        classGroupId: AnyClassGroupIds,\n        hasPostfixModifier: boolean,\n    ): readonly AnyClassGroupIds[] => {\n        if (hasPostfixModifier) {\n            const modifierConflicts = conflictingClassGroupModifiers[classGroupId]\n            const baseConflicts = conflictingClassGroups[classGroupId]\n\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\n        return conflictingClassGroups[classGroupId] || EMPTY_CONFLICTS\n    }\n\n    return {\n        getClassGroupId,\n        getConflictingClassGroupIds,\n    }\n}\n\nconst getGroupRecursive = (\n    classParts: string[],\n    startIndex: number,\n    classPartObject: ClassPartObject,\n): AnyClassGroupIds | undefined => {\n    const classPathsLength = classParts.length - startIndex\n    if (classPathsLength === 0) {\n        return classPartObject.classGroupId\n    }\n\n    const currentClassPart = classParts[startIndex]!\n    const nextClassPartObject = classPartObject.nextPart.get(currentClassPart)\n\n    if (nextClassPartObject) {\n        const result = getGroupRecursive(classParts, startIndex + 1, nextClassPartObject)\n        if (result) return result\n    }\n\n    const validators = classPartObject.validators\n    if (validators === null) {\n        return undefined\n    }\n\n    // Build classRest string efficiently by joining from startIndex onwards\n    const classRest =\n        startIndex === 0\n            ? classParts.join(CLASS_PART_SEPARATOR)\n            : classParts.slice(startIndex).join(CLASS_PART_SEPARATOR)\n    const validatorsLength = validators.length\n\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\n    return undefined\n}\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: string): AnyClassGroupIds | undefined =>\n    className.slice(1, -1).indexOf(':') === -1\n        ? undefined\n        : (() => {\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/**\n * Exported for testing only\n */\nexport const createClassMap = (config: Config<AnyClassGroupIds, AnyThemeGroupIds>) => {\n    const { theme, classGroups } = config\n    return processClassGroups(classGroups, theme)\n}\n\n// Split into separate functions to maintain monomorphic call sites\nconst processClassGroups = (\n    classGroups: Record<AnyClassGroupIds, ClassGroup<AnyThemeGroupIds>>,\n    theme: ThemeObject<AnyThemeGroupIds>,\n): ClassPartObject => {\n    const classMap = createClassPartObject()\n\n    for (const classGroupId in classGroups) {\n        const group = classGroups[classGroupId]!\n        processClassesRecursively(group, classMap, classGroupId, theme)\n    }\n\n    return classMap\n}\n\nconst processClassesRecursively = (\n    classGroup: ClassGroup<AnyThemeGroupIds>,\n    classPartObject: ClassPartObject,\n    classGroupId: AnyClassGroupIds,\n    theme: ThemeObject<AnyThemeGroupIds>,\n) => {\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\n// Split into separate functions for each type to maintain monomorphic call sites\nconst processClassDefinition = (\n    classDefinition: ClassGroup<AnyThemeGroupIds>[number],\n    classPartObject: ClassPartObject,\n    classGroupId: AnyClassGroupIds,\n    theme: ThemeObject<AnyThemeGroupIds>,\n) => {\n    if (typeof classDefinition === 'string') {\n        processStringDefinition(classDefinition, classPartObject, classGroupId)\n        return\n    }\n\n    if (typeof classDefinition === 'function') {\n        processFunctionDefinition(classDefinition, classPartObject, classGroupId, theme)\n        return\n    }\n\n    processObjectDefinition(\n        classDefinition as Record<string, ClassGroup<AnyThemeGroupIds>>,\n        classPartObject,\n        classGroupId,\n        theme,\n    )\n}\n\nconst processStringDefinition = (\n    classDefinition: string,\n    classPartObject: ClassPartObject,\n    classGroupId: AnyClassGroupIds,\n) => {\n    const classPartObjectToEdit =\n        classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition)\n    classPartObjectToEdit.classGroupId = classGroupId\n}\n\nconst processFunctionDefinition = (\n    classDefinition: Function,\n    classPartObject: ClassPartObject,\n    classGroupId: AnyClassGroupIds,\n    theme: ThemeObject<AnyThemeGroupIds>,\n) => {\n    if (isThemeGetter(classDefinition)) {\n        processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme)\n        return\n    }\n\n    if (classPartObject.validators === null) {\n        classPartObject.validators = []\n    }\n    classPartObject.validators.push(\n        createClassValidatorObject(classGroupId, classDefinition as ClassValidator),\n    )\n}\n\nconst processObjectDefinition = (\n    classDefinition: Record<string, ClassGroup<AnyThemeGroupIds>>,\n    classPartObject: ClassPartObject,\n    classGroupId: AnyClassGroupIds,\n    theme: ThemeObject<AnyThemeGroupIds>,\n) => {\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}\n\nconst getPart = (classPartObject: ClassPartObject, path: string): ClassPartObject => {\n    let current = classPartObject\n    const parts = path.split(CLASS_PART_SEPARATOR)\n    const len = parts.length\n\n    for (let i = 0; i < len; i++) {\n        const part = parts[i]!\n\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\n    return current\n}\n\n// Type guard maintains monomorphic check\nconst isThemeGetter = (func: Function): func is ThemeGetter =>\n    'isThemeGetter' in func && (func as ThemeGetter).isThemeGetter === true\n","// Export is needed because TypeScript complains about an error otherwise:\n// Error: …/tailwind-merge/src/config-utils.ts(8,17): semantic error TS4058: Return type of exported function has or is using name 'LruCache' from external module \"…/tailwind-merge/src/lru-cache\" but cannot be named.\nexport interface LruCache<Key extends string, Value> {\n    get(key: Key): Value | undefined\n    set(key: Key, value: Value): void\n}\n\n// LRU cache implementation using plain objects for simplicity\nexport const createLruCache = <Key extends string, Value>(\n    maxCacheSize: number,\n): LruCache<Key, Value> => {\n    if (maxCacheSize < 1) {\n        return {\n            get: () => undefined,\n            set: () => {},\n        }\n    }\n\n    let cacheSize = 0\n    let cache: Record<Key, Value> = Object.create(null)\n    let previousCache: Record<Key, Value> = Object.create(null)\n\n    const update = (key: Key, value: Value) => {\n        cache[key] = value\n        cacheSize++\n\n        if (cacheSize > maxCacheSize) {\n            cacheSize = 0\n            previousCache = cache\n            cache = Object.create(null)\n        }\n    }\n\n    return {\n        get(key) {\n            let value = cache[key]\n\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}\n","import { AnyConfig, ParsedClassName } from './types'\n\nexport const IMPORTANT_MODIFIER = '!'\n\nconst MODIFIER_SEPARATOR = ':'\nconst EMPTY_MODIFIERS: string[] = []\n\n// Pre-allocated result object shape for consistency\nconst createResultObject = (\n    modifiers: string[],\n    hasImportantModifier: boolean,\n    baseClassName: string,\n    maybePostfixModifierPosition?: number,\n    isExternal?: boolean,\n): ParsedClassName => ({\n    modifiers,\n    hasImportantModifier,\n    baseClassName,\n    maybePostfixModifierPosition,\n    isExternal,\n})\n\nexport const createParseClassName = (config: AnyConfig) => {\n    const { prefix, experimentalParseClassName } = config\n\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: string): ParsedClassName => {\n        // Use simple array with push for better performance\n        const modifiers: string[] = []\n\n        let bracketDepth = 0\n        let parenDepth = 0\n        let modifierStart = 0\n        let postfixModifierPosition: number | undefined\n\n        const len = className.length\n        for (let index = 0; index < len; index++) {\n            const currentCharacter = className[index]!\n\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\n                if (currentCharacter === '/') {\n                    postfixModifierPosition = index\n                    continue\n                }\n            }\n\n            if (currentCharacter === '[') bracketDepth++\n            else if (currentCharacter === ']') bracketDepth--\n            else if (currentCharacter === '(') parenDepth++\n            else if (currentCharacter === ')') parenDepth--\n        }\n\n        const baseClassNameWithImportantModifier =\n            modifiers.length === 0 ? className : className.slice(modifierStart)\n\n        // Inline important modifier check\n        let baseClassName = baseClassNameWithImportantModifier\n        let hasImportantModifier = false\n\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        ) {\n            baseClassName = baseClassNameWithImportantModifier.slice(1)\n            hasImportantModifier = true\n        }\n\n        const maybePostfixModifierPosition =\n            postfixModifierPosition && postfixModifierPosition > modifierStart\n                ? postfixModifierPosition - modifierStart\n                : undefined\n\n        return createResultObject(\n            modifiers,\n            hasImportantModifier,\n            baseClassName,\n            maybePostfixModifierPosition,\n        )\n    }\n\n    if (prefix) {\n        const fullPrefix = prefix + MODIFIER_SEPARATOR\n        const parseClassNameOriginal = parseClassName\n        parseClassName = (className: string) =>\n            className.startsWith(fullPrefix)\n                ? parseClassNameOriginal(className.slice(fullPrefix.length))\n                : createResultObject(EMPTY_MODIFIERS, false, className, undefined, true)\n    }\n\n    if (experimentalParseClassName) {\n        const parseClassNameOriginal = parseClassName\n        parseClassName = (className: string) =>\n            experimentalParseClassName({ className, parseClassName: parseClassNameOriginal })\n    }\n\n    return parseClassName\n}\n","import { AnyConfig } from './types'\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 */\nexport const createSortModifiers = (config: AnyConfig) => {\n    // Pre-compute weights for all known modifiers for O(1) comparison\n    const modifierWeights = new Map<string, number>()\n\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\n    return (modifiers: readonly string[]): string[] => {\n        const result: string[] = []\n        let currentSegment: string[] = []\n\n        // Process modifiers in one pass\n        for (let i = 0; i < modifiers.length; i++) {\n            const modifier = modifiers[i]!\n\n            // Check if modifier is sensitive (starts with '[' or in orderSensitiveModifiers)\n            const isArbitrary = modifier[0] === '['\n            const isOrderSensitive = modifierWeights.has(modifier)\n\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\n        // Sort and add any remaining segment items\n        if (currentSegment.length > 0) {\n            currentSegment.sort()\n            result.push(...currentSegment)\n        }\n\n        return result\n    }\n}\n","import { createClassGroupUtils } from './class-group-utils'\nimport { createLruCache } from './lru-cache'\nimport { createParseClassName } from './parse-class-name'\nimport { createSortModifiers } from './sort-modifiers'\nimport { AnyClassGroupIds, AnyConfig } from './types'\n\nexport type ConfigUtils = ReturnType<typeof createConfigUtils>\n\nexport const createConfigUtils = (config: AnyConfig) => ({\n    cache: createLruCache<string, string>(config.cacheSize),\n    parseClassName: createParseClassName(config),\n    sortModifiers: createSortModifiers(config),\n    postfixLookupClassGroupIds: createPostfixLookupClassGroupIds(config),\n    ...createClassGroupUtils(config),\n})\n\nconst createPostfixLookupClassGroupIds = (config: AnyConfig) => {\n    const lookup: Partial<Record<AnyClassGroupIds, true>> = Object.create(null)\n    const classGroupIds = config.postfixLookupClassGroups\n\n    if (classGroupIds) {\n        for (let i = 0; i < classGroupIds.length; i++) {\n            lookup[classGroupIds[i]!] = true\n        }\n    }\n\n    return lookup\n}\n","import { ConfigUtils } from './config-utils'\nimport { IMPORTANT_MODIFIER } from './parse-class-name'\n\nconst SPLIT_CLASSES_REGEX = /\\s+/\n\nexport const mergeClassList = (classList: string, configUtils: ConfigUtils) => {\n    const {\n        parseClassName,\n        getClassGroupId,\n        getConflictingClassGroupIds,\n        sortModifiers,\n        postfixLookupClassGroupIds,\n    } = configUtils\n\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: string[] = []\n    const classNames = classList.trim().split(SPLIT_CLASSES_REGEX)\n\n    let result = ''\n\n    for (let index = classNames.length - 1; index >= 0; index -= 1) {\n        const originalClassName = classNames[index]!\n\n        const {\n            isExternal,\n            modifiers,\n            hasImportantModifier,\n            baseClassName,\n            maybePostfixModifierPosition,\n        } = parseClassName(originalClassName)\n\n        if (isExternal) {\n            result = originalClassName + (result.length > 0 ? ' ' + result : result)\n            continue\n        }\n\n        let hasPostfixModifier = !!maybePostfixModifierPosition\n        let classGroupId: ReturnType<typeof getClassGroupId>\n\n        if (hasPostfixModifier) {\n            const baseClassNameWithoutPostfix = baseClassName.substring(\n                0,\n                maybePostfixModifierPosition,\n            )\n            classGroupId = getClassGroupId(baseClassNameWithoutPostfix)\n\n            const classGroupIdWithPostfix =\n                classGroupId && postfixLookupClassGroupIds[classGroupId]\n                    ? getClassGroupId(baseClassName)\n                    : undefined\n            if (classGroupIdWithPostfix && classGroupIdWithPostfix !== classGroupId) {\n                classGroupId = classGroupIdWithPostfix\n                hasPostfixModifier = false\n            }\n        } else {\n            classGroupId = getClassGroupId(baseClassName)\n        }\n\n        if (!classGroupId) {\n            if (!hasPostfixModifier) {\n                // Not a Tailwind class\n                result = originalClassName + (result.length > 0 ? ' ' + result : result)\n                continue\n            }\n\n            classGroupId = getClassGroupId(baseClassName)\n\n            if (!classGroupId) {\n                // Not a Tailwind class\n                result = originalClassName + (result.length > 0 ? ' ' + result : result)\n                continue\n            }\n\n            hasPostfixModifier = false\n        }\n\n        // Fast path: skip sorting for empty or single modifier\n        const variantModifier =\n            modifiers.length === 0\n                ? ''\n                : modifiers.length === 1\n                  ? modifiers[0]!\n                  : sortModifiers(modifiers).join(':')\n\n        const modifierId = hasImportantModifier\n            ? variantModifier + IMPORTANT_MODIFIER\n            : variantModifier\n\n        const classId = modifierId + classGroupId\n\n        if (classGroupsInConflict.indexOf(classId) > -1) {\n            // Tailwind class omitted due to conflict\n            continue\n        }\n\n        classGroupsInConflict.push(classId)\n\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\n        // Tailwind class not in conflict\n        result = originalClassName + (result.length > 0 ? ' ' + result : result)\n    }\n\n    return result\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 */\n\nexport type ClassNameValue = ClassNameArray | string | null | undefined | 0 | 0n | false\ntype ClassNameArray = readonly ClassNameValue[]\n\nexport const twJoin = (...classLists: ClassNameValue[]): string => {\n    let index = 0\n    let argument: ClassNameValue\n    let resolvedValue: string\n    let string = ''\n\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}\n\nconst toValue = (mix: ClassNameArray | string): string => {\n    // Fast path for strings\n    if (typeof mix === 'string') {\n        return mix\n    }\n\n    let resolvedValue: string\n    let string = ''\n\n    for (let k = 0; k < mix.length; k++) {\n        if (mix[k]) {\n            if ((resolvedValue = toValue(mix[k] as ClassNameArray | string))) {\n                string && (string += ' ')\n                string += resolvedValue\n            }\n        }\n    }\n\n    return string\n}\n","import { createConfigUtils } from './config-utils'\nimport { mergeClassList } from './merge-classlist'\nimport { ClassNameValue, twJoin } from './tw-join'\nimport { AnyConfig } from './types'\n\ntype CreateConfigFirst = () => AnyConfig\ntype CreateConfigSubsequent = (config: AnyConfig) => AnyConfig\ntype TailwindMerge = (...classLists: ClassNameValue[]) => string\ntype ConfigUtils = ReturnType<typeof createConfigUtils>\n\nexport const createTailwindMerge = (\n    createConfigFirst: CreateConfigFirst,\n    ...createConfigRest: CreateConfigSubsequent[]\n): TailwindMerge => {\n    let configUtils: ConfigUtils\n    let cacheGet: ConfigUtils['cache']['get']\n    let cacheSet: ConfigUtils['cache']['set']\n    let functionToCall: (classList: string) => string\n\n    const initTailwindMerge = (classList: string) => {\n        const config = createConfigRest.reduce(\n            (previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig),\n            createConfigFirst() as AnyConfig,\n        )\n\n        configUtils = createConfigUtils(config)\n        cacheGet = configUtils.cache.get\n        cacheSet = configUtils.cache.set\n        functionToCall = tailwindMerge\n\n        return tailwindMerge(classList)\n    }\n\n    const tailwindMerge = (classList: string) => {\n        const cachedResult = cacheGet(classList)\n\n        if (cachedResult) {\n            return cachedResult\n        }\n\n        const result = mergeClassList(classList, configUtils)\n        cacheSet(classList, result)\n\n        return result\n    }\n\n    functionToCall = initTailwindMerge\n\n    return (...args: ClassNameValue[]) => functionToCall(twJoin(...args))\n}\n","import { DefaultThemeGroupIds, NoInfer, ThemeGetter, ThemeObject } from './types'\n\nconst fallbackThemeArr: ThemeObject<DefaultThemeGroupIds>[DefaultThemeGroupIds] = []\n\nexport const fromTheme = <\n    AdditionalThemeGroupIds extends string = never,\n    DefaultThemeGroupIdsInner extends string = DefaultThemeGroupIds,\n>(\n    key: NoInfer<DefaultThemeGroupIdsInner | AdditionalThemeGroupIds>,\n): ThemeGetter => {\n    const themeGetter = (theme: ThemeObject<DefaultThemeGroupIdsInner | AdditionalThemeGroupIds>) =>\n        theme[key] || fallbackThemeArr\n\n    themeGetter.isThemeGetter = true as const\n\n    return themeGetter\n}\n","const 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 =\n    /\\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)\\(.+\\)$/\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 =\n    /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/\n\nexport const isFraction = (value: string) => fractionRegex.test(value)\n\nexport const isNumber = (value: string) => !!value && !Number.isNaN(Number(value))\n\nexport const isInteger = (value: string) => !!value && Number.isInteger(Number(value))\n\nexport const isPercent = (value: string) => value.endsWith('%') && isNumber(value.slice(0, -1))\n\nexport const isTshirtSize = (value: string) => tshirtUnitRegex.test(value)\n\nexport const isAny = () => true\n\nconst isLengthOnly = (value: string) =>\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.\n    lengthUnitRegex.test(value) && !colorFunctionRegex.test(value)\n\nconst isNever = () => false\n\nconst isShadow = (value: string) => shadowRegex.test(value)\n\nconst isImage = (value: string) => imageRegex.test(value)\n\nexport const isAnyNonArbitrary = (value: string) =>\n    !isArbitraryValue(value) && !isArbitraryVariable(value)\n\nexport const isNamedContainerQuery = (value: string) =>\n    value.startsWith('@container') &&\n    ((value[10] === '/' && value[11] !== undefined) ||\n        (value[11] === 's' && value[16] !== undefined && value.startsWith('-size/', 10)) ||\n        (value[11] === 'n' && value[18] !== undefined && value.startsWith('-normal/', 10)))\n\nexport const isArbitrarySize = (value: string) => getIsArbitraryValue(value, isLabelSize, isNever)\n\nexport const isArbitraryValue = (value: string) => arbitraryValueRegex.test(value)\n\nexport const isArbitraryLength = (value: string) =>\n    getIsArbitraryValue(value, isLabelLength, isLengthOnly)\n\nexport const isArbitraryNumber = (value: string) =>\n    getIsArbitraryValue(value, isLabelNumber, isNumber)\n\nexport const isArbitraryWeight = (value: string) => getIsArbitraryValue(value, isLabelWeight, isAny)\n\nexport const isArbitraryFamilyName = (value: string) =>\n    getIsArbitraryValue(value, isLabelFamilyName, isNever)\n\nexport const isArbitraryPosition = (value: string) =>\n    getIsArbitraryValue(value, isLabelPosition, isNever)\n\nexport const isArbitraryImage = (value: string) => getIsArbitraryValue(value, isLabelImage, isImage)\n\nexport const isArbitraryShadow = (value: string) =>\n    getIsArbitraryValue(value, isLabelShadow, isShadow)\n\nexport const isArbitraryVariable = (value: string) => arbitraryVariableRegex.test(value)\n\nexport const isArbitraryVariableLength = (value: string) =>\n    getIsArbitraryVariable(value, isLabelLength)\n\nexport const isArbitraryVariableFamilyName = (value: string) =>\n    getIsArbitraryVariable(value, isLabelFamilyName)\n\nexport const isArbitraryVariablePosition = (value: string) =>\n    getIsArbitraryVariable(value, isLabelPosition)\n\nexport const isArbitraryVariableSize = (value: string) => getIsArbitraryVariable(value, isLabelSize)\n\nexport const isArbitraryVariableImage = (value: string) =>\n    getIsArbitraryVariable(value, isLabelImage)\n\nexport const isArbitraryVariableShadow = (value: string) =>\n    getIsArbitraryVariable(value, isLabelShadow, true)\n\nexport const isArbitraryVariableWeight = (value: string) =>\n    getIsArbitraryVariable(value, isLabelWeight, true)\n\n// Helpers\n\nconst getIsArbitraryValue = (\n    value: string,\n    testLabel: (label: string) => boolean,\n    testValue: (value: string) => boolean,\n) => {\n    const result = arbitraryValueRegex.exec(value)\n\n    if (result) {\n        if (result[1]) {\n            return testLabel(result[1])\n        }\n\n        return testValue(result[2]!)\n    }\n\n    return false\n}\n\nconst getIsArbitraryVariable = (\n    value: string,\n    testLabel: (label: string) => boolean,\n    shouldMatchNoLabel = false,\n) => {\n    const result = arbitraryVariableRegex.exec(value)\n\n    if (result) {\n        if (result[1]) {\n            return testLabel(result[1])\n        }\n        return shouldMatchNoLabel\n    }\n\n    return false\n}\n\n// Labels\n\nconst isLabelPosition = (label: string) => label === 'position' || label === 'percentage'\n\nconst isLabelImage = (label: string) => label === 'image' || label === 'url'\n\nconst isLabelSize = (label: string) => label === 'length' || label === 'size' || label === 'bg-size'\n\nconst isLabelLength = (label: string) => label === 'length'\n\nconst isLabelNumber = (label: string) => label === 'number'\n\nconst isLabelFamilyName = (label: string) => label === 'family-name'\n\nconst isLabelWeight = (label: string) => label === 'number' || label === 'weight'\n\nconst isLabelShadow = (label: string) => label === 'shadow'\n","import { fromTheme } from './from-theme'\nimport { Config, DefaultClassGroupIds, DefaultThemeGroupIds } from './types'\nimport {\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} from './validators'\n\nexport const getDefaultConfig = () => {\n    /**\n     * Theme getters for theme variable namespaces\n     * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n     */\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    /**\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\n    const scaleBreak = () =>\n        ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'] as const\n    const scalePosition = () =>\n        [\n            'center',\n            'top',\n            'bottom',\n            'left',\n            'right',\n            'top-left',\n            // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n            'left-top',\n            'top-right',\n            // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n            'right-top',\n            'bottom-right',\n            // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n            'right-bottom',\n            'bottom-left',\n            // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n            'left-bottom',\n        ] as const\n    const scalePositionWithArbitrary = () =>\n        [...scalePosition(), isArbitraryVariable, isArbitraryValue] as const\n    const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'] as const\n    const scaleOverscroll = () => ['auto', 'contain', 'none'] as const\n    const scaleUnambiguousSpacing = () =>\n        [isArbitraryVariable, isArbitraryValue, themeSpacing] as const\n    const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()] as const\n    const scaleGridTemplateColsRows = () =>\n        [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue] as const\n    const scaleGridColRowStartAndEnd = () =>\n        [\n            'auto',\n            { span: ['full', isInteger, isArbitraryVariable, isArbitraryValue] },\n            isInteger,\n            isArbitraryVariable,\n            isArbitraryValue,\n        ] as const\n    const scaleGridColRowStartOrEnd = () =>\n        [isInteger, 'auto', isArbitraryVariable, isArbitraryValue] as const\n    const scaleGridAutoColsRows = () =>\n        ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue] as const\n    const scaleAlignPrimaryAxis = () =>\n        [\n            'start',\n            'end',\n            'center',\n            'between',\n            'around',\n            'evenly',\n            'stretch',\n            'baseline',\n            'center-safe',\n            'end-safe',\n        ] as const\n    const scaleAlignSecondaryAxis = () =>\n        ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'] as const\n    const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()] as const\n    const scaleSizing = () =>\n        [\n            isFraction,\n            'auto',\n            'full',\n            'dvw',\n            'dvh',\n            'lvw',\n            'lvh',\n            'svw',\n            'svh',\n            'min',\n            'max',\n            'fit',\n            ...scaleUnambiguousSpacing(),\n        ] as const\n    const scaleSizingInline = () =>\n        [\n            isFraction,\n            'screen',\n            'full',\n            'dvw',\n            'lvw',\n            'svw',\n            'min',\n            'max',\n            'fit',\n            ...scaleUnambiguousSpacing(),\n        ] as const\n    const scaleSizingBlock = () =>\n        [\n            isFraction,\n            'screen',\n            'full',\n            'lh',\n            'dvh',\n            'lvh',\n            'svh',\n            'min',\n            'max',\n            'fit',\n            ...scaleUnambiguousSpacing(),\n        ] as const\n    const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue] as const\n    const scaleBgPosition = () =>\n        [\n            ...scalePosition(),\n            isArbitraryVariablePosition,\n            isArbitraryPosition,\n            { position: [isArbitraryVariable, isArbitraryValue] },\n        ] as const\n    const scaleBgRepeat = () => ['no-repeat', { repeat: ['', 'x', 'y', 'space', 'round'] }] as const\n    const scaleBgSize = () =>\n        [\n            'auto',\n            'cover',\n            'contain',\n            isArbitraryVariableSize,\n            isArbitrarySize,\n            { size: [isArbitraryVariable, isArbitraryValue] },\n        ] as const\n    const scaleGradientStopPosition = () =>\n        [isPercent, isArbitraryVariableLength, isArbitraryLength] as const\n    const scaleRadius = () =>\n        [\n            // Deprecated since Tailwind CSS v4.0.0\n            '',\n            'none',\n            'full',\n            themeRadius,\n            isArbitraryVariable,\n            isArbitraryValue,\n        ] as const\n    const scaleBorderWidth = () =>\n        ['', isNumber, isArbitraryVariableLength, isArbitraryLength] as const\n    const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'] as const\n    const scaleBlendMode = () =>\n        [\n            'normal',\n            'multiply',\n            'screen',\n            'overlay',\n            'darken',\n            'lighten',\n            'color-dodge',\n            'color-burn',\n            'hard-light',\n            'soft-light',\n            'difference',\n            'exclusion',\n            'hue',\n            'saturation',\n            'color',\n            'luminosity',\n        ] as const\n    const scaleMaskImagePosition = () =>\n        [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition] as const\n    const scaleBlur = () =>\n        [\n            // Deprecated since Tailwind CSS v4.0.0\n            '',\n            'none',\n            themeBlur,\n            isArbitraryVariable,\n            isArbitraryValue,\n        ] as const\n    const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue] as const\n    const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue] as const\n    const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue] as const\n    const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()] as const\n\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': [\n                'thin',\n                'extralight',\n                'light',\n                'normal',\n                'medium',\n                'semibold',\n                'bold',\n                'extrabold',\n                'black',\n            ],\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            /**\n             * Aspect Ratio\n             * @see https://tailwindcss.com/docs/aspect-ratio\n             */\n            aspect: [\n                {\n                    aspect: [\n                        'auto',\n                        'square',\n                        isFraction,\n                        isArbitraryValue,\n                        isArbitraryVariable,\n                        themeAspect,\n                    ],\n                },\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, isArbitraryValue, isArbitraryVariable, themeContainer] },\n            ],\n            /**\n             * Break After\n             * @see https://tailwindcss.com/docs/break-after\n             */\n            'break-after': [{ 'break-after': scaleBreak() }],\n            /**\n             * Break Before\n             * @see https://tailwindcss.com/docs/break-before\n             */\n            'break-before': [{ 'break-before': scaleBreak() }],\n            /**\n             * Break Inside\n             * @see https://tailwindcss.com/docs/break-inside\n             */\n            'break-inside': [{ 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column'] }],\n            /**\n             * Box Decoration Break\n             * @see https://tailwindcss.com/docs/box-decoration-break\n             */\n            'box-decoration': [{ 'box-decoration': ['slice', 'clone'] }],\n            /**\n             * Box Sizing\n             * @see https://tailwindcss.com/docs/box-sizing\n             */\n            box: [{ box: ['border', 'content'] }],\n            /**\n             * Display\n             * @see https://tailwindcss.com/docs/display\n             */\n            display: [\n                'block',\n                'inline-block',\n                'inline',\n                'flex',\n                'inline-flex',\n                'table',\n                'inline-table',\n                'table-caption',\n                'table-cell',\n                'table-column',\n                'table-column-group',\n                'table-footer-group',\n                'table-header-group',\n                'table-row-group',\n                'table-row',\n                'flow-root',\n                'grid',\n                'inline-grid',\n                'contents',\n                'list-item',\n                'hidden',\n            ],\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: [{ float: ['right', 'left', 'none', 'start', 'end'] }],\n            /**\n             * Clear\n             * @see https://tailwindcss.com/docs/clear\n             */\n            clear: [{ clear: ['left', 'right', 'both', 'none', 'start', 'end'] }],\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': [{ object: ['contain', 'cover', 'fill', 'none', 'scale-down'] }],\n            /**\n             * Object Position\n             * @see https://tailwindcss.com/docs/object-position\n             */\n            'object-position': [{ object: scalePositionWithArbitrary() }],\n            /**\n             * Overflow\n             * @see https://tailwindcss.com/docs/overflow\n             */\n            overflow: [{ overflow: scaleOverflow() }],\n            /**\n             * Overflow X\n             * @see https://tailwindcss.com/docs/overflow\n             */\n            'overflow-x': [{ 'overflow-x': scaleOverflow() }],\n            /**\n             * Overflow Y\n             * @see https://tailwindcss.com/docs/overflow\n             */\n            'overflow-y': [{ 'overflow-y': scaleOverflow() }],\n            /**\n             * Overscroll Behavior\n             * @see https://tailwindcss.com/docs/overscroll-behavior\n             */\n            overscroll: [{ overscroll: scaleOverscroll() }],\n            /**\n             * Overscroll Behavior X\n             * @see https://tailwindcss.com/docs/overscroll-behavior\n             */\n            'overscroll-x': [{ 'overscroll-x': scaleOverscroll() }],\n            /**\n             * Overscroll Behavior Y\n             * @see https://tailwindcss.com/docs/overscroll-behavior\n             */\n            'overscroll-y': [{ 'overscroll-y': scaleOverscroll() }],\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: [{ inset: scaleInset() }],\n            /**\n             * Inset Inline\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            'inset-x': [{ 'inset-x': scaleInset() }],\n            /**\n             * Inset Block\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            'inset-y': [{ 'inset-y': scaleInset() }],\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                {\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            /**\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                {\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            /**\n             * Inset Block Start\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            'inset-bs': [{ 'inset-bs': scaleInset() }],\n            /**\n             * Inset Block End\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            'inset-be': [{ 'inset-be': scaleInset() }],\n            /**\n             * Top\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            top: [{ top: scaleInset() }],\n            /**\n             * Right\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            right: [{ right: scaleInset() }],\n            /**\n             * Bottom\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            bottom: [{ bottom: scaleInset() }],\n            /**\n             * Left\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            left: [{ left: scaleInset() }],\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: [{ z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue] }],\n\n            // ------------------------\n            // --- Flexbox and Grid ---\n            // ------------------------\n\n            /**\n             * Flex Basis\n             * @see https://tailwindcss.com/docs/flex-basis\n             */\n            basis: [\n                {\n                    basis: [\n                        isFraction,\n                        'full',\n                        'auto',\n                        themeContainer,\n                        ...scaleUnambiguousSpacing(),\n                    ],\n                },\n            ],\n            /**\n             * Flex Direction\n             * @see https://tailwindcss.com/docs/flex-direction\n             */\n            'flex-direction': [{ flex: ['row', 'row-reverse', 'col', 'col-reverse'] }],\n            /**\n             * Flex Wrap\n             * @see https://tailwindcss.com/docs/flex-wrap\n             */\n            'flex-wrap': [{ flex: ['nowrap', 'wrap', 'wrap-reverse'] }],\n            /**\n             * Flex\n             * @see https://tailwindcss.com/docs/flex\n             */\n            flex: [{ flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue] }],\n            /**\n             * Flex Grow\n             * @see https://tailwindcss.com/docs/flex-grow\n             */\n            grow: [{ grow: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Flex Shrink\n             * @see https://tailwindcss.com/docs/flex-shrink\n             */\n            shrink: [{ shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Order\n             * @see https://tailwindcss.com/docs/order\n             */\n            order: [\n                {\n                    order: [\n                        isInteger,\n                        'first',\n                        'last',\n                        'none',\n                        isArbitraryVariable,\n                        isArbitraryValue,\n                    ],\n                },\n            ],\n            /**\n             * Grid Template Columns\n             * @see https://tailwindcss.com/docs/grid-template-columns\n             */\n            'grid-cols': [{ 'grid-cols': scaleGridTemplateColsRows() }],\n            /**\n             * Grid Column Start / End\n             * @see https://tailwindcss.com/docs/grid-column\n             */\n            'col-start-end': [{ col: scaleGridColRowStartAndEnd() }],\n            /**\n             * Grid Column Start\n             * @see https://tailwindcss.com/docs/grid-column\n             */\n            'col-start': [{ 'col-start': scaleGridColRowStartOrEnd() }],\n            /**\n             * Grid Column End\n             * @see https://tailwindcss.com/docs/grid-column\n             */\n            'col-end': [{ 'col-end': scaleGridColRowStartOrEnd() }],\n            /**\n             * Grid Template Rows\n             * @see https://tailwindcss.com/docs/grid-template-rows\n             */\n            'grid-rows': [{ 'grid-rows': scaleGridTemplateColsRows() }],\n            /**\n             * Grid Row Start / End\n             * @see https://tailwindcss.com/docs/grid-row\n             */\n            'row-start-end': [{ row: scaleGridColRowStartAndEnd() }],\n            /**\n             * Grid Row Start\n             * @see https://tailwindcss.com/docs/grid-row\n             */\n            'row-start': [{ 'row-start': scaleGridColRowStartOrEnd() }],\n            /**\n             * Grid Row End\n             * @see https://tailwindcss.com/docs/grid-row\n             */\n            'row-end': [{ 'row-end': scaleGridColRowStartOrEnd() }],\n            /**\n             * Grid Auto Flow\n             * @see https://tailwindcss.com/docs/grid-auto-flow\n             */\n            'grid-flow': [{ 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense'] }],\n            /**\n             * Grid Auto Columns\n             * @see https://tailwindcss.com/docs/grid-auto-columns\n             */\n            'auto-cols': [{ 'auto-cols': scaleGridAutoColsRows() }],\n            /**\n             * Grid Auto Rows\n             * @see https://tailwindcss.com/docs/grid-auto-rows\n             */\n            'auto-rows': [{ 'auto-rows': scaleGridAutoColsRows() }],\n            /**\n             * Gap\n             * @see https://tailwindcss.com/docs/gap\n             */\n            gap: [{ gap: scaleUnambiguousSpacing() }],\n            /**\n             * Gap X\n             * @see https://tailwindcss.com/docs/gap\n             */\n            'gap-x': [{ 'gap-x': scaleUnambiguousSpacing() }],\n            /**\n             * Gap Y\n             * @see https://tailwindcss.com/docs/gap\n             */\n            'gap-y': [{ 'gap-y': scaleUnambiguousSpacing() }],\n            /**\n             * Justify Content\n             * @see https://tailwindcss.com/docs/justify-content\n             */\n            'justify-content': [{ justify: [...scaleAlignPrimaryAxis(), 'normal'] }],\n            /**\n             * Justify Items\n             * @see https://tailwindcss.com/docs/justify-items\n             */\n            'justify-items': [{ 'justify-items': [...scaleAlignSecondaryAxis(), 'normal'] }],\n            /**\n             * Justify Self\n             * @see https://tailwindcss.com/docs/justify-self\n             */\n            'justify-self': [{ 'justify-self': ['auto', ...scaleAlignSecondaryAxis()] }],\n            /**\n             * Align Content\n             * @see https://tailwindcss.com/docs/align-content\n             */\n            'align-content': [{ content: ['normal', ...scaleAlignPrimaryAxis()] }],\n            /**\n             * Align Items\n             * @see https://tailwindcss.com/docs/align-items\n             */\n            'align-items': [{ items: [...scaleAlignSecondaryAxis(), { baseline: ['', 'last'] }] }],\n            /**\n             * Align Self\n             * @see https://tailwindcss.com/docs/align-self\n             */\n            'align-self': [\n                { self: ['auto', ...scaleAlignSecondaryAxis(), { baseline: ['', 'last'] }] },\n            ],\n            /**\n             * Place Content\n             * @see https://tailwindcss.com/docs/place-content\n             */\n            'place-content': [{ 'place-content': scaleAlignPrimaryAxis() }],\n            /**\n             * Place Items\n             * @see https://tailwindcss.com/docs/place-items\n             */\n            'place-items': [{ 'place-items': [...scaleAlignSecondaryAxis(), 'baseline'] }],\n            /**\n             * Place Self\n             * @see https://tailwindcss.com/docs/place-self\n             */\n            'place-self': [{ 'place-self': ['auto', ...scaleAlignSecondaryAxis()] }],\n            // Spacing\n            /**\n             * Padding\n             * @see https://tailwindcss.com/docs/padding\n             */\n            p: [{ p: scaleUnambiguousSpacing() }],\n            /**\n             * Padding Inline\n             * @see https://tailwindcss.com/docs/padding\n             */\n            px: [{ px: scaleUnambiguousSpacing() }],\n            /**\n             * Padding Block\n             * @see https://tailwindcss.com/docs/padding\n             */\n            py: [{ py: scaleUnambiguousSpacing() }],\n            /**\n             * Padding Inline Start\n             * @see https://tailwindcss.com/docs/padding\n             */\n            ps: [{ ps: scaleUnambiguousSpacing() }],\n            /**\n             * Padding Inline End\n             * @see https://tailwindcss.com/docs/padding\n             */\n            pe: [{ pe: scaleUnambiguousSpacing() }],\n            /**\n             * Padding Block Start\n             * @see https://tailwindcss.com/docs/padding\n             */\n            pbs: [{ pbs: scaleUnambiguousSpacing() }],\n            /**\n             * Padding Block End\n             * @see https://tailwindcss.com/docs/padding\n             */\n            pbe: [{ pbe: scaleUnambiguousSpacing() }],\n            /**\n             * Padding Top\n             * @see https://tailwindcss.com/docs/padding\n             */\n            pt: [{ pt: scaleUnambiguousSpacing() }],\n            /**\n             * Padding Right\n             * @see https://tailwindcss.com/docs/padding\n             */\n            pr: [{ pr: scaleUnambiguousSpacing() }],\n            /**\n             * Padding Bottom\n             * @see https://tailwindcss.com/docs/padding\n             */\n            pb: [{ pb: scaleUnambiguousSpacing() }],\n            /**\n             * Padding Left\n             * @see https://tailwindcss.com/docs/padding\n             */\n            pl: [{ pl: scaleUnambiguousSpacing() }],\n            /**\n             * Margin\n             * @see https://tailwindcss.com/docs/margin\n             */\n            m: [{ m: scaleMargin() }],\n            /**\n             * Margin Inline\n             * @see https://tailwindcss.com/docs/margin\n             */\n            mx: [{ mx: scaleMargin() }],\n            /**\n             * Margin Block\n             * @see https://tailwindcss.com/docs/margin\n             */\n            my: [{ my: scaleMargin() }],\n            /**\n             * Margin Inline Start\n             * @see https://tailwindcss.com/docs/margin\n             */\n            ms: [{ ms: scaleMargin() }],\n            /**\n             * Margin Inline End\n             * @see https://tailwindcss.com/docs/margin\n             */\n            me: [{ me: scaleMargin() }],\n            /**\n             * Margin Block Start\n             * @see https://tailwindcss.com/docs/margin\n             */\n            mbs: [{ mbs: scaleMargin() }],\n            /**\n             * Margin Block End\n             * @see https://tailwindcss.com/docs/margin\n             */\n            mbe: [{ mbe: scaleMargin() }],\n            /**\n             * Margin Top\n             * @see https://tailwindcss.com/docs/margin\n             */\n            mt: [{ mt: scaleMargin() }],\n            /**\n             * Margin Right\n             * @see https://tailwindcss.com/docs/margin\n             */\n            mr: [{ mr: scaleMargin() }],\n            /**\n             * Margin Bottom\n             * @see https://tailwindcss.com/docs/margin\n             */\n            mb: [{ mb: scaleMargin() }],\n            /**\n             * Margin Left\n             * @see https://tailwindcss.com/docs/margin\n             */\n            ml: [{ ml: scaleMargin() }],\n            /**\n             * Space Between X\n             * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n             */\n            'space-x': [{ 'space-x': scaleUnambiguousSpacing() }],\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': [{ 'space-y': scaleUnambiguousSpacing() }],\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            // --------------\n            // --- Sizing ---\n            // --------------\n\n            /**\n             * Size\n             * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n             */\n            size: [{ size: scaleSizing() }],\n            /**\n             * Inline Size\n             * @see https://tailwindcss.com/docs/width\n             */\n            'inline-size': [{ inline: ['auto', ...scaleSizingInline()] }],\n            /**\n             * Min-Inline Size\n             * @see https://tailwindcss.com/docs/min-width\n             */\n            'min-inline-size': [{ 'min-inline': ['auto', ...scaleSizingInline()] }],\n            /**\n             * Max-Inline Size\n             * @see https://tailwindcss.com/docs/max-width\n             */\n            'max-inline-size': [{ 'max-inline': ['none', ...scaleSizingInline()] }],\n            /**\n             * Block Size\n             * @see https://tailwindcss.com/docs/height\n             */\n            'block-size': [{ block: ['auto', ...scaleSizingBlock()] }],\n            /**\n             * Min-Block Size\n             * @see https://tailwindcss.com/docs/min-height\n             */\n            'min-block-size': [{ 'min-block': ['auto', ...scaleSizingBlock()] }],\n            /**\n             * Max-Block Size\n             * @see https://tailwindcss.com/docs/max-height\n             */\n            'max-block-size': [{ 'max-block': ['none', ...scaleSizingBlock()] }],\n            /**\n             * Width\n             * @see https://tailwindcss.com/docs/width\n             */\n            w: [{ w: [themeContainer, 'screen', ...scaleSizing()] }],\n            /**\n             * Min-Width\n             * @see https://tailwindcss.com/docs/min-width\n             */\n            'min-w': [\n                {\n                    'min-w': [\n                        themeContainer,\n                        'screen',\n                        /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n                        'none',\n                        ...scaleSizing(),\n                    ],\n                },\n            ],\n            /**\n             * Max-Width\n             * @see https://tailwindcss.com/docs/max-width\n             */\n            'max-w': [\n                {\n                    'max-w': [\n                        themeContainer,\n                        'screen',\n                        'none',\n                        /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n                        'prose',\n                        /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n                        { screen: [themeBreakpoint] },\n                        ...scaleSizing(),\n                    ],\n                },\n            ],\n            /**\n             * Height\n             * @see https://tailwindcss.com/docs/height\n             */\n            h: [{ h: ['screen', 'lh', ...scaleSizing()] }],\n            /**\n             * Min-Height\n             * @see https://tailwindcss.com/docs/min-height\n             */\n            'min-h': [{ 'min-h': ['screen', 'lh', 'none', ...scaleSizing()] }],\n            /**\n             * Max-Height\n             * @see https://tailwindcss.com/docs/max-height\n             */\n            'max-h': [{ 'max-h': ['screen', 'lh', ...scaleSizing()] }],\n\n            // ------------------\n            // --- Typography ---\n            // ------------------\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                {\n                    font: [themeFontWeight, isArbitraryVariableWeight, isArbitraryWeight],\n                },\n            ],\n            /**\n             * Font Stretch\n             * @see https://tailwindcss.com/docs/font-stretch\n             */\n            'font-stretch': [\n                {\n                    'font-stretch': [\n                        'ultra-condensed',\n                        'extra-condensed',\n                        'condensed',\n                        'semi-condensed',\n                        'normal',\n                        'semi-expanded',\n                        'expanded',\n                        'extra-expanded',\n                        'ultra-expanded',\n                        isPercent,\n                        isArbitraryValue,\n                    ],\n                },\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': [{ 'font-features': [isArbitraryValue] }],\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: [{ tracking: [themeTracking, isArbitraryVariable, isArbitraryValue] }],\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                {\n                    leading: [\n                        /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n                        themeLeading,\n                        ...scaleUnambiguousSpacing(),\n                    ],\n                },\n            ],\n            /**\n             * List Style Image\n             * @see https://tailwindcss.com/docs/list-style-image\n             */\n            'list-image': [{ 'list-image': ['none', isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * List Style Position\n             * @see https://tailwindcss.com/docs/list-style-position\n             */\n            'list-style-position': [{ list: ['inside', 'outside'] }],\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': [{ text: ['left', 'center', 'right', 'justify', 'start', 'end'] }],\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': [{ placeholder: scaleColor() }],\n            /**\n             * Text Color\n             * @see https://tailwindcss.com/docs/text-color\n             */\n            'text-color': [{ text: scaleColor() }],\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': [{ decoration: [...scaleLineStyle(), 'wavy'] }],\n            /**\n             * Text Decoration Thickness\n             * @see https://tailwindcss.com/docs/text-decoration-thickness\n             */\n            'text-decoration-thickness': [\n                {\n                    decoration: [\n                        isNumber,\n                        'from-font',\n                        'auto',\n                        isArbitraryVariable,\n                        isArbitraryLength,\n                    ],\n                },\n            ],\n            /**\n             * Text Decoration Color\n             * @see https://tailwindcss.com/docs/text-decoration-color\n             */\n            'text-decoration-color': [{ decoration: scaleColor() }],\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': [{ text: ['wrap', 'nowrap', 'balance', 'pretty'] }],\n            /**\n             * Text Indent\n             * @see https://tailwindcss.com/docs/text-indent\n             */\n            indent: [{ indent: scaleUnambiguousSpacing() }],\n            /**\n             * Tab Size\n             * @see https://tailwindcss.com/docs/tab-size\n             */\n            'tab-size': [{ tab: [isInteger, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Vertical Alignment\n             * @see https://tailwindcss.com/docs/vertical-align\n             */\n            'vertical-align': [\n                {\n                    align: [\n                        'baseline',\n                        'top',\n                        'middle',\n                        'bottom',\n                        'text-top',\n                        'text-bottom',\n                        'sub',\n                        'super',\n                        isArbitraryVariable,\n                        isArbitraryValue,\n                    ],\n                },\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: [{ break: ['normal', 'words', 'all', 'keep'] }],\n            /**\n             * Overflow Wrap\n             * @see https://tailwindcss.com/docs/overflow-wrap\n             */\n            wrap: [{ wrap: ['break-word', 'anywhere', 'normal'] }],\n            /**\n             * Hyphens\n             * @see https://tailwindcss.com/docs/hyphens\n             */\n            hyphens: [{ hyphens: ['none', 'manual', 'auto'] }],\n            /**\n             * Content\n             * @see https://tailwindcss.com/docs/content\n             */\n            content: [{ content: ['none', isArbitraryVariable, isArbitraryValue] }],\n\n            // -------------------\n            // --- Backgrounds ---\n            // -------------------\n\n            /**\n             * Background Attachment\n             * @see https://tailwindcss.com/docs/background-attachment\n             */\n            'bg-attachment': [{ bg: ['fixed', 'local', 'scroll'] }],\n            /**\n             * Background Clip\n             * @see https://tailwindcss.com/docs/background-clip\n             */\n            'bg-clip': [{ 'bg-clip': ['border', 'padding', 'content', 'text'] }],\n            /**\n             * Background Origin\n             * @see https://tailwindcss.com/docs/background-origin\n             */\n            'bg-origin': [{ 'bg-origin': ['border', 'padding', 'content'] }],\n            /**\n             * Background Position\n             * @see https://tailwindcss.com/docs/background-position\n             */\n            'bg-position': [{ bg: scaleBgPosition() }],\n            /**\n             * Background Repeat\n             * @see https://tailwindcss.com/docs/background-repeat\n             */\n            'bg-repeat': [{ bg: scaleBgRepeat() }],\n            /**\n             * Background Size\n             * @see https://tailwindcss.com/docs/background-size\n             */\n            'bg-size': [{ bg: scaleBgSize() }],\n            /**\n             * Background Image\n             * @see https://tailwindcss.com/docs/background-image\n             */\n            'bg-image': [\n                {\n                    bg: [\n                        'none',\n                        {\n                            linear: [\n                                { to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl'] },\n                                isInteger,\n                                isArbitraryVariable,\n                                isArbitraryValue,\n                            ],\n                            radial: ['', isArbitraryVariable, isArbitraryValue],\n                            conic: [isInteger, isArbitraryVariable, isArbitraryValue],\n                        },\n                        isArbitraryVariableImage,\n                        isArbitraryImage,\n                    ],\n                },\n            ],\n            /**\n             * Background Color\n             * @see https://tailwindcss.com/docs/background-color\n             */\n            'bg-color': [{ bg: scaleColor() }],\n            /**\n             * Gradient Color Stops From Position\n             * @see https://tailwindcss.com/docs/gradient-color-stops\n             */\n            'gradient-from-pos': [{ from: scaleGradientStopPosition() }],\n            /**\n             * Gradient Color Stops Via Position\n             * @see https://tailwindcss.com/docs/gradient-color-stops\n             */\n            'gradient-via-pos': [{ via: scaleGradientStopPosition() }],\n            /**\n             * Gradient Color Stops To Position\n             * @see https://tailwindcss.com/docs/gradient-color-stops\n             */\n            'gradient-to-pos': [{ to: scaleGradientStopPosition() }],\n            /**\n             * Gradient Color Stops From\n             * @see https://tailwindcss.com/docs/gradient-color-stops\n             */\n            'gradient-from': [{ from: scaleColor() }],\n            /**\n             * Gradient Color Stops Via\n             * @see https://tailwindcss.com/docs/gradient-color-stops\n             */\n            'gradient-via': [{ via: scaleColor() }],\n            /**\n             * Gradient Color Stops To\n             * @see https://tailwindcss.com/docs/gradient-color-stops\n             */\n            'gradient-to': [{ to: scaleColor() }],\n\n            // ---------------\n            // --- Borders ---\n            // ---------------\n\n            /**\n             * Border Radius\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            rounded: [{ rounded: scaleRadius() }],\n            /**\n             * Border Radius Start\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-s': [{ 'rounded-s': scaleRadius() }],\n            /**\n             * Border Radius End\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-e': [{ 'rounded-e': scaleRadius() }],\n            /**\n             * Border Radius Top\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-t': [{ 'rounded-t': scaleRadius() }],\n            /**\n             * Border Radius Right\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-r': [{ 'rounded-r': scaleRadius() }],\n            /**\n             * Border Radius Bottom\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-b': [{ 'rounded-b': scaleRadius() }],\n            /**\n             * Border Radius Left\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-l': [{ 'rounded-l': scaleRadius() }],\n            /**\n             * Border Radius Start Start\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-ss': [{ 'rounded-ss': scaleRadius() }],\n            /**\n             * Border Radius Start End\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-se': [{ 'rounded-se': scaleRadius() }],\n            /**\n             * Border Radius End End\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-ee': [{ 'rounded-ee': scaleRadius() }],\n            /**\n             * Border Radius End Start\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-es': [{ 'rounded-es': scaleRadius() }],\n            /**\n             * Border Radius Top Left\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-tl': [{ 'rounded-tl': scaleRadius() }],\n            /**\n             * Border Radius Top Right\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-tr': [{ 'rounded-tr': scaleRadius() }],\n            /**\n             * Border Radius Bottom Right\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-br': [{ 'rounded-br': scaleRadius() }],\n            /**\n             * Border Radius Bottom Left\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-bl': [{ 'rounded-bl': scaleRadius() }],\n            /**\n             * Border Width\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w': [{ border: scaleBorderWidth() }],\n            /**\n             * Border Width Inline\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-x': [{ 'border-x': scaleBorderWidth() }],\n            /**\n             * Border Width Block\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-y': [{ 'border-y': scaleBorderWidth() }],\n            /**\n             * Border Width Inline Start\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-s': [{ 'border-s': scaleBorderWidth() }],\n            /**\n             * Border Width Inline End\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-e': [{ 'border-e': scaleBorderWidth() }],\n            /**\n             * Border Width Block Start\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-bs': [{ 'border-bs': scaleBorderWidth() }],\n            /**\n             * Border Width Block End\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-be': [{ 'border-be': scaleBorderWidth() }],\n            /**\n             * Border Width Top\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-t': [{ 'border-t': scaleBorderWidth() }],\n            /**\n             * Border Width Right\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-r': [{ 'border-r': scaleBorderWidth() }],\n            /**\n             * Border Width Bottom\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-b': [{ 'border-b': scaleBorderWidth() }],\n            /**\n             * Border Width Left\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-l': [{ 'border-l': scaleBorderWidth() }],\n            /**\n             * Divide Width X\n             * @see https://tailwindcss.com/docs/border-width#between-children\n             */\n            'divide-x': [{ 'divide-x': scaleBorderWidth() }],\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': [{ 'divide-y': scaleBorderWidth() }],\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': [{ border: [...scaleLineStyle(), 'hidden', 'none'] }],\n            /**\n             * Divide Style\n             * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n             */\n            'divide-style': [{ divide: [...scaleLineStyle(), 'hidden', 'none'] }],\n            /**\n             * Border Color\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color': [{ border: scaleColor() }],\n            /**\n             * Border Color Inline\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-x': [{ 'border-x': scaleColor() }],\n            /**\n             * Border Color Block\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-y': [{ 'border-y': scaleColor() }],\n            /**\n             * Border Color Inline Start\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-s': [{ 'border-s': scaleColor() }],\n            /**\n             * Border Color Inline End\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-e': [{ 'border-e': scaleColor() }],\n            /**\n             * Border Color Block Start\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-bs': [{ 'border-bs': scaleColor() }],\n            /**\n             * Border Color Block End\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-be': [{ 'border-be': scaleColor() }],\n            /**\n             * Border Color Top\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-t': [{ 'border-t': scaleColor() }],\n            /**\n             * Border Color Right\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-r': [{ 'border-r': scaleColor() }],\n            /**\n             * Border Color Bottom\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-b': [{ 'border-b': scaleColor() }],\n            /**\n             * Border Color Left\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-l': [{ 'border-l': scaleColor() }],\n            /**\n             * Divide Color\n             * @see https://tailwindcss.com/docs/divide-color\n             */\n            'divide-color': [{ divide: scaleColor() }],\n            /**\n             * Outline Style\n             * @see https://tailwindcss.com/docs/outline-style\n             */\n            'outline-style': [{ outline: [...scaleLineStyle(), 'none', 'hidden'] }],\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': [{ outline: scaleColor() }],\n\n            // ---------------\n            // --- Effects ---\n            // ---------------\n\n            /**\n             * Box Shadow\n             * @see https://tailwindcss.com/docs/box-shadow\n             */\n            shadow: [\n                {\n                    shadow: [\n                        // Deprecated since Tailwind CSS v4.0.0\n                        '',\n                        'none',\n                        themeShadow,\n                        isArbitraryVariableShadow,\n                        isArbitraryShadow,\n                    ],\n                },\n            ],\n            /**\n             * Box Shadow Color\n             * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n             */\n            'shadow-color': [{ shadow: scaleColor() }],\n            /**\n             * Inset Box Shadow\n             * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n             */\n            'inset-shadow': [\n                {\n                    'inset-shadow': [\n                        'none',\n                        themeInsetShadow,\n                        isArbitraryVariableShadow,\n                        isArbitraryShadow,\n                    ],\n                },\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': [{ 'inset-shadow': scaleColor() }],\n            /**\n             * Ring Width\n             * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n             */\n            'ring-w': [{ ring: scaleBorderWidth() }],\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': [{ ring: scaleColor() }],\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': [{ 'ring-offset': [isNumber, isArbitraryLength] }],\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': [{ 'ring-offset': scaleColor() }],\n            /**\n             * Inset Ring Width\n             * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n             */\n            'inset-ring-w': [{ 'inset-ring': scaleBorderWidth() }],\n            /**\n             * Inset Ring Color\n             * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n             */\n            'inset-ring-color': [{ 'inset-ring': scaleColor() }],\n            /**\n             * Text Shadow\n             * @see https://tailwindcss.com/docs/text-shadow\n             */\n            'text-shadow': [\n                {\n                    'text-shadow': [\n                        'none',\n                        themeTextShadow,\n                        isArbitraryVariableShadow,\n                        isArbitraryShadow,\n                    ],\n                },\n            ],\n            /**\n             * Text Shadow Color\n             * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n             */\n            'text-shadow-color': [{ 'text-shadow': scaleColor() }],\n            /**\n             * Opacity\n             * @see https://tailwindcss.com/docs/opacity\n             */\n            opacity: [{ opacity: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Mix Blend Mode\n             * @see https://tailwindcss.com/docs/mix-blend-mode\n             */\n            'mix-blend': [{ 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter'] }],\n            /**\n             * Background Blend Mode\n             * @see https://tailwindcss.com/docs/background-blend-mode\n             */\n            'bg-blend': [{ 'bg-blend': scaleBlendMode() }],\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            /**\n             * Mask Composite\n             * @see https://tailwindcss.com/docs/mask-composite\n             */\n            'mask-composite': [{ mask: ['add', 'subtract', 'intersect', 'exclude'] }],\n            /**\n             * Mask Image\n             * @see https://tailwindcss.com/docs/mask-image\n             */\n            'mask-image-linear-pos': [{ 'mask-linear': [isNumber] }],\n            'mask-image-linear-from-pos': [{ 'mask-linear-from': scaleMaskImagePosition() }],\n            'mask-image-linear-to-pos': [{ 'mask-linear-to': scaleMaskImagePosition() }],\n            'mask-image-linear-from-color': [{ 'mask-linear-from': scaleColor() }],\n            'mask-image-linear-to-color': [{ 'mask-linear-to': scaleColor() }],\n            'mask-image-t-from-pos': [{ 'mask-t-from': scaleMaskImagePosition() }],\n            'mask-image-t-to-pos': [{ 'mask-t-to': scaleMaskImagePosition() }],\n            'mask-image-t-from-color': [{ 'mask-t-from': scaleColor() }],\n            'mask-image-t-to-color': [{ 'mask-t-to': scaleColor() }],\n            'mask-image-r-from-pos': [{ 'mask-r-from': scaleMaskImagePosition() }],\n            'mask-image-r-to-pos': [{ 'mask-r-to': scaleMaskImagePosition() }],\n            'mask-image-r-from-color': [{ 'mask-r-from': scaleColor() }],\n            'mask-image-r-to-color': [{ 'mask-r-to': scaleColor() }],\n            'mask-image-b-from-pos': [{ 'mask-b-from': scaleMaskImagePosition() }],\n            'mask-image-b-to-pos': [{ 'mask-b-to': scaleMaskImagePosition() }],\n            'mask-image-b-from-color': [{ 'mask-b-from': scaleColor() }],\n            'mask-image-b-to-color': [{ 'mask-b-to': scaleColor() }],\n            'mask-image-l-from-pos': [{ 'mask-l-from': scaleMaskImagePosition() }],\n            'mask-image-l-to-pos': [{ 'mask-l-to': scaleMaskImagePosition() }],\n            'mask-image-l-from-color': [{ 'mask-l-from': scaleColor() }],\n            'mask-image-l-to-color': [{ 'mask-l-to': scaleColor() }],\n            'mask-image-x-from-pos': [{ 'mask-x-from': scaleMaskImagePosition() }],\n            'mask-image-x-to-pos': [{ 'mask-x-to': scaleMaskImagePosition() }],\n            'mask-image-x-from-color': [{ 'mask-x-from': scaleColor() }],\n            'mask-image-x-to-color': [{ 'mask-x-to': scaleColor() }],\n            'mask-image-y-from-pos': [{ 'mask-y-from': scaleMaskImagePosition() }],\n            'mask-image-y-to-pos': [{ 'mask-y-to': scaleMaskImagePosition() }],\n            'mask-image-y-from-color': [{ 'mask-y-from': scaleColor() }],\n            'mask-image-y-to-color': [{ 'mask-y-to': scaleColor() }],\n            'mask-image-radial': [{ 'mask-radial': [isArbitraryVariable, isArbitraryValue] }],\n            'mask-image-radial-from-pos': [{ 'mask-radial-from': scaleMaskImagePosition() }],\n            'mask-image-radial-to-pos': [{ 'mask-radial-to': scaleMaskImagePosition() }],\n            'mask-image-radial-from-color': [{ 'mask-radial-from': scaleColor() }],\n            'mask-image-radial-to-color': [{ 'mask-radial-to': scaleColor() }],\n            'mask-image-radial-shape': [{ 'mask-radial': ['circle', 'ellipse'] }],\n            'mask-image-radial-size': [\n                { 'mask-radial': [{ closest: ['side', 'corner'], farthest: ['side', 'corner'] }] },\n            ],\n            'mask-image-radial-pos': [{ 'mask-radial-at': scalePosition() }],\n            'mask-image-conic-pos': [{ 'mask-conic': [isNumber] }],\n            'mask-image-conic-from-pos': [{ 'mask-conic-from': scaleMaskImagePosition() }],\n            'mask-image-conic-to-pos': [{ 'mask-conic-to': scaleMaskImagePosition() }],\n            'mask-image-conic-from-color': [{ 'mask-conic-from': scaleColor() }],\n            'mask-image-conic-to-color': [{ 'mask-conic-to': scaleColor() }],\n            /**\n             * Mask Mode\n             * @see https://tailwindcss.com/docs/mask-mode\n             */\n            'mask-mode': [{ mask: ['alpha', 'luminance', 'match'] }],\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': [{ mask: scaleBgPosition() }],\n            /**\n             * Mask Repeat\n             * @see https://tailwindcss.com/docs/mask-repeat\n             */\n            'mask-repeat': [{ mask: scaleBgRepeat() }],\n            /**\n             * Mask Size\n             * @see https://tailwindcss.com/docs/mask-size\n             */\n            'mask-size': [{ mask: scaleBgSize() }],\n            /**\n             * Mask Type\n             * @see https://tailwindcss.com/docs/mask-type\n             */\n            'mask-type': [{ 'mask-type': ['alpha', 'luminance'] }],\n            /**\n             * Mask Image\n             * @see https://tailwindcss.com/docs/mask-image\n             */\n            'mask-image': [{ mask: ['none', isArbitraryVariable, isArbitraryValue] }],\n\n            // ---------------\n            // --- Filters ---\n            // ---------------\n\n            /**\n             * Filter\n             * @see https://tailwindcss.com/docs/filter\n             */\n            filter: [\n                {\n                    filter: [\n                        // Deprecated since Tailwind CSS v3.0.0\n                        '',\n                        'none',\n                        isArbitraryVariable,\n                        isArbitraryValue,\n                    ],\n                },\n            ],\n            /**\n             * Blur\n             * @see https://tailwindcss.com/docs/blur\n             */\n            blur: [{ blur: scaleBlur() }],\n            /**\n             * Brightness\n             * @see https://tailwindcss.com/docs/brightness\n             */\n            brightness: [{ brightness: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Contrast\n             * @see https://tailwindcss.com/docs/contrast\n             */\n            contrast: [{ contrast: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Drop Shadow\n             * @see https://tailwindcss.com/docs/drop-shadow\n             */\n            'drop-shadow': [\n                {\n                    'drop-shadow': [\n                        // Deprecated since Tailwind CSS v4.0.0\n                        '',\n                        'none',\n                        themeDropShadow,\n                        isArbitraryVariableShadow,\n                        isArbitraryShadow,\n                    ],\n                },\n            ],\n            /**\n             * Drop Shadow Color\n             * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n             */\n            'drop-shadow-color': [{ 'drop-shadow': scaleColor() }],\n            /**\n             * Grayscale\n             * @see https://tailwindcss.com/docs/grayscale\n             */\n            grayscale: [{ grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Hue Rotate\n             * @see https://tailwindcss.com/docs/hue-rotate\n             */\n            'hue-rotate': [{ 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Invert\n             * @see https://tailwindcss.com/docs/invert\n             */\n            invert: [{ invert: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Saturate\n             * @see https://tailwindcss.com/docs/saturate\n             */\n            saturate: [{ saturate: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Sepia\n             * @see https://tailwindcss.com/docs/sepia\n             */\n            sepia: [{ sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Backdrop Filter\n             * @see https://tailwindcss.com/docs/backdrop-filter\n             */\n            'backdrop-filter': [\n                {\n                    'backdrop-filter': [\n                        // Deprecated since Tailwind CSS v3.0.0\n                        '',\n                        'none',\n                        isArbitraryVariable,\n                        isArbitraryValue,\n                    ],\n                },\n            ],\n            /**\n             * Backdrop Blur\n             * @see https://tailwindcss.com/docs/backdrop-blur\n             */\n            'backdrop-blur': [{ 'backdrop-blur': scaleBlur() }],\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            // --------------\n            // --- Tables ---\n            // --------------\n\n            /**\n             * Border Collapse\n             * @see https://tailwindcss.com/docs/border-collapse\n             */\n            'border-collapse': [{ border: ['collapse', 'separate'] }],\n            /**\n             * Border Spacing\n             * @see https://tailwindcss.com/docs/border-spacing\n             */\n            'border-spacing': [{ 'border-spacing': scaleUnambiguousSpacing() }],\n            /**\n             * Border Spacing X\n             * @see https://tailwindcss.com/docs/border-spacing\n             */\n            'border-spacing-x': [{ 'border-spacing-x': scaleUnambiguousSpacing() }],\n            /**\n             * Border Spacing Y\n             * @see https://tailwindcss.com/docs/border-spacing\n             */\n            'border-spacing-y': [{ 'border-spacing-y': scaleUnambiguousSpacing() }],\n            /**\n             * Table Layout\n             * @see https://tailwindcss.com/docs/table-layout\n             */\n            'table-layout': [{ table: ['auto', 'fixed'] }],\n            /**\n             * Caption Side\n             * @see https://tailwindcss.com/docs/caption-side\n             */\n            caption: [{ caption: ['top', 'bottom'] }],\n\n            // ---------------------------------\n            // --- Transitions and Animation ---\n            // ---------------------------------\n\n            /**\n             * Transition Property\n             * @see https://tailwindcss.com/docs/transition-property\n             */\n            transition: [\n                {\n                    transition: [\n                        '',\n                        'all',\n                        'colors',\n                        'opacity',\n                        'shadow',\n                        'transform',\n                        'none',\n                        isArbitraryVariable,\n                        isArbitraryValue,\n                    ],\n                },\n            ],\n            /**\n             * Transition Behavior\n             * @see https://tailwindcss.com/docs/transition-behavior\n             */\n            'transition-behavior': [{ transition: ['normal', 'discrete'] }],\n            /**\n             * Transition Duration\n             * @see https://tailwindcss.com/docs/transition-duration\n             */\n            duration: [{ duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue] }],\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: [{ delay: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Animation\n             * @see https://tailwindcss.com/docs/animation\n             */\n            animate: [{ animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue] }],\n\n            // ------------------\n            // --- Transforms ---\n            // ------------------\n\n            /**\n             * Backface Visibility\n             * @see https://tailwindcss.com/docs/backface-visibility\n             */\n            backface: [{ backface: ['hidden', 'visible'] }],\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': [{ 'perspective-origin': scalePositionWithArbitrary() }],\n            /**\n             * Rotate\n             * @see https://tailwindcss.com/docs/rotate\n             */\n            rotate: [{ rotate: scaleRotate() }],\n            /**\n             * Rotate X\n             * @see https://tailwindcss.com/docs/rotate\n             */\n            'rotate-x': [{ 'rotate-x': scaleRotate() }],\n            /**\n             * Rotate Y\n             * @see https://tailwindcss.com/docs/rotate\n             */\n            'rotate-y': [{ 'rotate-y': scaleRotate() }],\n            /**\n             * Rotate Z\n             * @see https://tailwindcss.com/docs/rotate\n             */\n            'rotate-z': [{ 'rotate-z': scaleRotate() }],\n            /**\n             * Scale\n             * @see https://tailwindcss.com/docs/scale\n             */\n            scale: [{ scale: scaleScale() }],\n            /**\n             * Scale X\n             * @see https://tailwindcss.com/docs/scale\n             */\n            'scale-x': [{ 'scale-x': scaleScale() }],\n            /**\n             * Scale Y\n             * @see https://tailwindcss.com/docs/scale\n             */\n            'scale-y': [{ 'scale-y': scaleScale() }],\n            /**\n             * Scale Z\n             * @see https://tailwindcss.com/docs/scale\n             */\n            'scale-z': [{ 'scale-z': scaleScale() }],\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: [{ skew: scaleSkew() }],\n            /**\n             * Skew X\n             * @see https://tailwindcss.com/docs/skew\n             */\n            'skew-x': [{ 'skew-x': scaleSkew() }],\n            /**\n             * Skew Y\n             * @see https://tailwindcss.com/docs/skew\n             */\n            'skew-y': [{ 'skew-y': scaleSkew() }],\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': [{ origin: scalePositionWithArbitrary() }],\n            /**\n             * Transform Style\n             * @see https://tailwindcss.com/docs/transform-style\n             */\n            'transform-style': [{ transform: ['3d', 'flat'] }],\n            /**\n             * Translate\n             * @see https://tailwindcss.com/docs/translate\n             */\n            translate: [{ translate: scaleTranslate() }],\n            /**\n             * Translate X\n             * @see https://tailwindcss.com/docs/translate\n             */\n            'translate-x': [{ 'translate-x': scaleTranslate() }],\n            /**\n             * Translate Y\n             * @see https://tailwindcss.com/docs/translate\n             */\n            'translate-y': [{ 'translate-y': scaleTranslate() }],\n            /**\n             * Translate Z\n             * @see https://tailwindcss.com/docs/translate\n             */\n            'translate-z': [{ 'translate-z': scaleTranslate() }],\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: [{ zoom: [isInteger, isArbitraryVariable, isArbitraryValue] }],\n\n            // ---------------------\n            // --- Interactivity ---\n            // ---------------------\n\n            /**\n             * Accent Color\n             * @see https://tailwindcss.com/docs/accent-color\n             */\n            accent: [{ accent: scaleColor() }],\n            /**\n             * Appearance\n             * @see https://tailwindcss.com/docs/appearance\n             */\n            appearance: [{ appearance: ['none', 'auto'] }],\n            /**\n             * Caret Color\n             * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n             */\n            'caret-color': [{ caret: scaleColor() }],\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                {\n                    cursor: [\n                        'auto',\n                        'default',\n                        'pointer',\n                        'wait',\n                        'text',\n                        'move',\n                        'help',\n                        'not-allowed',\n                        'none',\n                        'context-menu',\n                        'progress',\n                        'cell',\n                        'crosshair',\n                        'vertical-text',\n                        'alias',\n                        'copy',\n                        'no-drop',\n                        'grab',\n                        'grabbing',\n                        'all-scroll',\n                        'col-resize',\n                        'row-resize',\n                        'n-resize',\n                        'e-resize',\n                        's-resize',\n                        'w-resize',\n                        'ne-resize',\n                        'nw-resize',\n                        'se-resize',\n                        'sw-resize',\n                        'ew-resize',\n                        'ns-resize',\n                        'nesw-resize',\n                        'nwse-resize',\n                        'zoom-in',\n                        'zoom-out',\n                        isArbitraryVariable,\n                        isArbitraryValue,\n                    ],\n                },\n            ],\n            /**\n             * Field Sizing\n             * @see https://tailwindcss.com/docs/field-sizing\n             */\n            'field-sizing': [{ 'field-sizing': ['fixed', 'content'] }],\n            /**\n             * Pointer Events\n             * @see https://tailwindcss.com/docs/pointer-events\n             */\n            'pointer-events': [{ 'pointer-events': ['auto', 'none'] }],\n            /**\n             * Resize\n             * @see https://tailwindcss.com/docs/resize\n             */\n            resize: [{ resize: ['none', '', 'y', 'x'] }],\n            /**\n             * Scroll Behavior\n             * @see https://tailwindcss.com/docs/scroll-behavior\n             */\n            'scroll-behavior': [{ scroll: ['auto', 'smooth'] }],\n            /**\n             * Scrollbar Thumb Color\n             * @see https://tailwindcss.com/docs/scrollbar-color\n             */\n            'scrollbar-thumb-color': [{ 'scrollbar-thumb': scaleColor() }],\n            /**\n             * Scrollbar Track Color\n             * @see https://tailwindcss.com/docs/scrollbar-color\n             */\n            'scrollbar-track-color': [{ 'scrollbar-track': scaleColor() }],\n            /**\n             * Scrollbar Gutter\n             * @see https://tailwindcss.com/docs/scrollbar-gutter\n             */\n            'scrollbar-gutter': [{ 'scrollbar-gutter': ['auto', 'stable', 'both'] }],\n            /**\n             * Scrollbar Width\n             * @see https://tailwindcss.com/docs/scrollbar-width\n             */\n            'scrollbar-w': [{ scrollbar: ['auto', 'thin', 'none'] }],\n            /**\n             * Scroll Margin\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-m': [{ 'scroll-m': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Margin Inline\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-mx': [{ 'scroll-mx': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Margin Block\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-my': [{ 'scroll-my': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Margin Inline Start\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-ms': [{ 'scroll-ms': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Margin Inline End\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-me': [{ 'scroll-me': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Margin Block Start\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-mbs': [{ 'scroll-mbs': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Margin Block End\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-mbe': [{ 'scroll-mbe': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Margin Top\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-mt': [{ 'scroll-mt': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Margin Right\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-mr': [{ 'scroll-mr': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Margin Bottom\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-mb': [{ 'scroll-mb': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Margin Left\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-ml': [{ 'scroll-ml': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Padding\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-p': [{ 'scroll-p': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Padding Inline\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-px': [{ 'scroll-px': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Padding Block\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-py': [{ 'scroll-py': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Padding Inline Start\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-ps': [{ 'scroll-ps': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Padding Inline End\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-pe': [{ 'scroll-pe': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Padding Block Start\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-pbs': [{ 'scroll-pbs': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Padding Block End\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-pbe': [{ 'scroll-pbe': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Padding Top\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-pt': [{ 'scroll-pt': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Padding Right\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-pr': [{ 'scroll-pr': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Padding Bottom\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-pb': [{ 'scroll-pb': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Padding Left\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-pl': [{ 'scroll-pl': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Snap Align\n             * @see https://tailwindcss.com/docs/scroll-snap-align\n             */\n            'snap-align': [{ snap: ['start', 'end', 'center', 'align-none'] }],\n            /**\n             * Scroll Snap Stop\n             * @see https://tailwindcss.com/docs/scroll-snap-stop\n             */\n            'snap-stop': [{ snap: ['normal', 'always'] }],\n            /**\n             * Scroll Snap Type\n             * @see https://tailwindcss.com/docs/scroll-snap-type\n             */\n            'snap-type': [{ snap: ['none', 'x', 'y', 'both'] }],\n            /**\n             * Scroll Snap Type Strictness\n             * @see https://tailwindcss.com/docs/scroll-snap-type\n             */\n            'snap-strictness': [{ snap: ['mandatory', 'proximity'] }],\n            /**\n             * Touch Action\n             * @see https://tailwindcss.com/docs/touch-action\n             */\n            touch: [{ touch: ['auto', 'none', 'manipulation'] }],\n            /**\n             * Touch Action X\n             * @see https://tailwindcss.com/docs/touch-action\n             */\n            'touch-x': [{ 'touch-pan': ['x', 'left', 'right'] }],\n            /**\n             * Touch Action Y\n             * @see https://tailwindcss.com/docs/touch-action\n             */\n            'touch-y': [{ 'touch-pan': ['y', 'up', 'down'] }],\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: [{ select: ['none', 'text', 'all', 'auto'] }],\n            /**\n             * Will Change\n             * @see https://tailwindcss.com/docs/will-change\n             */\n            'will-change': [\n                {\n                    'will-change': [\n                        'auto',\n                        'scroll',\n                        'contents',\n                        'transform',\n                        isArbitraryVariable,\n                        isArbitraryValue,\n                    ],\n                },\n            ],\n\n            // -----------\n            // --- SVG ---\n            // -----------\n\n            /**\n             * Fill\n             * @see https://tailwindcss.com/docs/fill\n             */\n            fill: [{ fill: ['none', ...scaleColor()] }],\n            /**\n             * Stroke Width\n             * @see https://tailwindcss.com/docs/stroke-width\n             */\n            'stroke-w': [\n                {\n                    stroke: [\n                        isNumber,\n                        isArbitraryVariableLength,\n                        isArbitraryLength,\n                        isArbitraryNumber,\n                    ],\n                },\n            ],\n            /**\n             * Stroke\n             * @see https://tailwindcss.com/docs/stroke\n             */\n            stroke: [{ stroke: ['none', ...scaleColor()] }],\n\n            // ---------------------\n            // --- Accessibility ---\n            // ---------------------\n\n            /**\n             * Forced Color Adjust\n             * @see https://tailwindcss.com/docs/forced-color-adjust\n             */\n            'forced-color-adjust': [{ 'forced-color-adjust': ['auto', 'none'] }],\n        },\n        conflictingClassGroups: {\n            'container-named': ['container-type'],\n            overflow: ['overflow-x', 'overflow-y'],\n            overscroll: ['overscroll-x', 'overscroll-y'],\n            inset: [\n                'inset-x',\n                'inset-y',\n                'inset-bs',\n                'inset-be',\n                'start',\n                'end',\n                'top',\n                'right',\n                'bottom',\n                'left',\n            ],\n            'inset-x': ['right', 'left'],\n            'inset-y': ['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: ['pr', 'pl'],\n            py: ['pt', 'pb'],\n            m: ['mx', 'my', 'ms', 'me', 'mbs', 'mbe', 'mt', 'mr', 'mb', 'ml'],\n            mx: ['mr', 'ml'],\n            my: ['mt', 'mb'],\n            size: ['w', 'h'],\n            'font-size': ['leading'],\n            'fvn-normal': [\n                'fvn-ordinal',\n                'fvn-slashed-zero',\n                'fvn-figure',\n                'fvn-spacing',\n                'fvn-fraction',\n            ],\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: [\n                'rounded-s',\n                'rounded-e',\n                'rounded-t',\n                'rounded-r',\n                'rounded-b',\n                'rounded-l',\n                'rounded-ss',\n                'rounded-se',\n                'rounded-ee',\n                'rounded-es',\n                'rounded-tl',\n                'rounded-tr',\n                'rounded-br',\n                'rounded-bl',\n            ],\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': [\n                'border-w-x',\n                'border-w-y',\n                'border-w-s',\n                'border-w-e',\n                'border-w-bs',\n                'border-w-be',\n                'border-w-t',\n                'border-w-r',\n                'border-w-b',\n                'border-w-l',\n            ],\n            'border-w-x': ['border-w-r', 'border-w-l'],\n            'border-w-y': ['border-w-t', 'border-w-b'],\n            'border-color': [\n                'border-color-x',\n                'border-color-y',\n                'border-color-s',\n                'border-color-e',\n                'border-color-bs',\n                'border-color-be',\n                'border-color-t',\n                'border-color-r',\n                'border-color-b',\n                'border-color-l',\n            ],\n            'border-color-x': ['border-color-r', 'border-color-l'],\n            'border-color-y': ['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': [\n                'scroll-mx',\n                'scroll-my',\n                'scroll-ms',\n                'scroll-me',\n                'scroll-mbs',\n                'scroll-mbe',\n                'scroll-mt',\n                'scroll-mr',\n                'scroll-mb',\n                'scroll-ml',\n            ],\n            'scroll-mx': ['scroll-mr', 'scroll-ml'],\n            'scroll-my': ['scroll-mt', 'scroll-mb'],\n            'scroll-p': [\n                'scroll-px',\n                'scroll-py',\n                'scroll-ps',\n                'scroll-pe',\n                'scroll-pbs',\n                'scroll-pbe',\n                'scroll-pt',\n                'scroll-pr',\n                'scroll-pb',\n                'scroll-pl',\n            ],\n            'scroll-px': ['scroll-pr', 'scroll-pl'],\n            'scroll-py': ['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: [\n            '*',\n            '**',\n            'after',\n            'backdrop',\n            'before',\n            'details-content',\n            'file',\n            'first-letter',\n            'first-line',\n            'marker',\n            'placeholder',\n            'selection',\n        ],\n    } as const satisfies Config<DefaultClassGroupIds, DefaultThemeGroupIds>\n}\n","import { createTailwindMerge } from './create-tailwind-merge'\nimport { getDefaultConfig } from './default-config'\n\nexport const twMerge = createTailwindMerge(getDefaultConfig)\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';\n\ntype PossibleRef<T> = React.Ref<T> | undefined;\n\n/**\n * Set a given ref to a given value\n * This utility takes care of different types of refs: callback refs and RefObject(s)\n */\nfunction setRef<T>(ref: PossibleRef<T>, value: T) {\n  if (typeof ref === 'function') {\n    return ref(value);\n  } else if (ref !== null && ref !== undefined) {\n    ref.current = value;\n  }\n}\n\n/**\n * A utility to compose multiple refs together\n * Accepts callback refs and RefObject(s)\n */\nfunction composeRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T> {\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\n    // React <19 will log an error to the console if a callback ref returns a\n    // value. We don't use ref cleanups internally so this will only happen if a\n    // user's ref callback returns a value, which we only expect if they are\n    // using the cleanup functionality added in React 19.\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\n/**\n * A custom hook that composes multiple refs\n * Accepts callback refs and RefObject(s)\n */\nfunction useComposedRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T> {\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  return React.useCallback(composeRefs(...refs), refs);\n}\n\nexport { composeRefs, useComposedRefs };\n","import * as React from 'react';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\n\ndeclare module 'react' {\n  interface ReactElement {\n    $$typeof?: symbol | string;\n  }\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Slot\n * -----------------------------------------------------------------------------------------------*/\n\nexport type Usable<T> = PromiseLike<T> | React.Context<T>;\n\ntype SlotProps<Elem extends Element = HTMLElement, Props = React.HTMLAttributes<Elem>> = Props & {\n  children?: React.ReactNode;\n};\n\n/* @__NO_SIDE_EFFECTS__ */ export function createSlot<\n  Elem extends Element = HTMLElement,\n  Props = React.HTMLAttributes<Elem>,\n>(ownerName: string) {\n  const Slot = React.forwardRef<Elem, SlotProps<Elem, Props>>((props, forwardedRef) => {\n    let { children, ...slotProps } = props;\n    let slottableElement: React.ReactElement | null = null;\n    let hasSlottable = false;\n    const newChildren: React.ReactNode[] = [];\n\n    if (isLazyComponent(children) && typeof use === 'function') {\n      children = use(children._payload);\n    }\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\n        if (isLazyComponent(child) && typeof use === 'function') {\n          child = use(child._payload);\n        }\n\n        slottableElement = getSlottableElementFromSlottable(slottable, child);\n        newChildren.push((slottableElement?.props as any)?.children);\n      } else {\n        newChildren.push(maybeSlottable);\n      }\n    });\n\n    if (slottableElement) {\n      slottableElement = React.cloneElement(slottableElement, undefined, 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 &&\n      React.Children.count(children) === 1 &&\n      React.isValidElement(children)\n    ) {\n      slottableElement = children;\n    }\n\n    const slottableElementRef = slottableElement ? getElementRef(slottableElement) : undefined;\n    const composedRef = useComposedRefs(forwardedRef, slottableElementRef);\n\n    if (!slottableElement) {\n      // Empty/falsy children (`null`, `undefined`, `false`, no children, etc.) are valid and\n      // render nothing. Anything else is content we couldn't slot onto a single element, which\n      // is a usage error, so we fail loudly with a clear message.\n      if (children || children === 0) {\n        throw new Error(\n          hasSlottable ? createSlottableError(ownerName) : createSlotError(ownerName),\n        );\n      }\n      return children;\n    }\n\n    const mergedProps = mergeProps(slotProps, slottableElement.props ?? {});\n\n    // do not pass ref to React.Fragment for React 19 compatibility\n    if (slottableElement.type !== React.Fragment) {\n      mergedProps.ref = forwardedRef ? composedRef : slottableElementRef;\n    }\n\n    return React.cloneElement(slottableElement, mergedProps);\n  });\n\n  Slot.displayName = `${ownerName}.Slot`;\n  return Slot;\n}\n\nconst Slot = createSlot('Slot');\n\n/* -------------------------------------------------------------------------------------------------\n * Slottable\n * -----------------------------------------------------------------------------------------------*/\n\nconst SLOTTABLE_IDENTIFIER = Symbol.for('radix.slottable');\n\ntype SlottableChildrenProps = { children: React.ReactNode };\ntype SlottableRenderFnProps = {\n  child: React.ReactNode;\n  children: (slottable: React.ReactNode) => React.ReactNode;\n};\n\ntype SlottableProps = SlottableRenderFnProps | SlottableChildrenProps;\ninterface SlottableComponent extends React.FC<SlottableProps> {\n  __radixId: symbol;\n}\n\n/* @__NO_SIDE_EFFECTS__ */ export function createSlottable(ownerName: string) {\n  const Slottable: SlottableComponent = (props) =>\n    'child' in props ? props.children(props.child) : props.children;\n\n  Slottable.displayName = `${ownerName}.Slottable`;\n  Slottable.__radixId = SLOTTABLE_IDENTIFIER;\n  return Slottable;\n}\n\nconst Slottable = createSlottable('Slottable');\n\n/* -------------------------------------------------------------------------------------------------\n * getSlottableElementFromSlottable\n * -----------------------------------------------------------------------------------------------*/\n\nconst getSlottableElementFromSlottable = (slottable: SlottableElement, child: React.ReactNode) => {\n  if ('child' in slottable.props) {\n    const child = slottable.props.child;\n    if (!React.isValidElement<React.PropsWithChildren>(child)) return null;\n    return React.cloneElement(child, undefined, slottable.props.children(child.props.children));\n  }\n\n  return React.isValidElement(child) ? child : null;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * mergeProps\n * -----------------------------------------------------------------------------------------------*/\n\ntype AnyProps = Record<string, any>;\n\nfunction mergeProps(slotProps: AnyProps, childProps: AnyProps) {\n  // all child props should override\n  const overrideProps = { ...childProps };\n\n  for (const propName in childProps) {\n    const slotPropValue = slotProps[propName];\n    const childPropValue = childProps[propName];\n\n    const isHandler = /^on[A-Z]/.test(propName);\n    if (isHandler) {\n      // if the handler exists on both, we compose them\n      if (slotPropValue && childPropValue) {\n        overrideProps[propName] = (...args: unknown[]) => {\n          const result = childPropValue(...args);\n          slotPropValue(...args);\n          return result;\n        };\n      }\n      // but if it exists only on the slot, we use only this one\n      else if (slotPropValue) {\n        overrideProps[propName] = slotPropValue;\n      }\n    }\n    // if it's `style`, we merge them\n    else if (propName === 'style') {\n      overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n    } else if (propName === 'className') {\n      overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(' ');\n    }\n  }\n\n  return { ...slotProps, ...overrideProps };\n}\n\n/* -------------------------------------------------------------------------------------------------\n * getElementRef\n * -----------------------------------------------------------------------------------------------*/\n\n// Before React 19 accessing `element.props.ref` will throw a warning and suggest using `element.ref`\n// After React 19 accessing `element.ref` does the opposite.\n// https://github.com/facebook/react/pull/28348\n//\n// Access the ref using the method that doesn't yield a warning.\nfunction getElementRef(element: React.ReactElement) {\n  // React <=18 in DEV\n  let getter = Object.getOwnPropertyDescriptor(element.props, 'ref')?.get;\n  let mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return (element as any).ref;\n  }\n\n  // React 19 in DEV\n  getter = Object.getOwnPropertyDescriptor(element, 'ref')?.get;\n  mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return (element.props as { ref?: React.Ref<unknown> }).ref;\n  }\n\n  // Not DEV\n  return (element.props as { ref?: React.Ref<unknown> }).ref || (element as any).ref;\n}\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype SlottableElement = React.ReactElement<SlottableProps, SlottableComponent>;\n\nfunction isSlottable(\n  child: React.ReactNode,\n): child is React.ReactElement<SlottableProps, typeof Slottable> {\n  return (\n    React.isValidElement(child) &&\n    typeof child.type === 'function' &&\n    '__radixId' in child.type &&\n    child.type.__radixId === SLOTTABLE_IDENTIFIER\n  );\n}\n\nconst REACT_LAZY_TYPE = Symbol.for('react.lazy');\n\ninterface LazyReactElement extends React.ReactElement {\n  $$typeof: typeof REACT_LAZY_TYPE;\n  _payload: PromiseLike<Exclude<React.ReactNode, PromiseLike<any>>>;\n}\n\nfunction isLazyComponent(element: React.ReactNode): element is LazyReactElement {\n  return (\n    element != null &&\n    typeof element === 'object' &&\n    '$$typeof' in element &&\n    element.$$typeof === REACT_LAZY_TYPE &&\n    '_payload' in element &&\n    isPromiseLike(element._payload)\n  );\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n  return typeof value === 'object' && value !== null && 'then' in value;\n}\n\nconst createSlotError = (ownerName: string) => {\n  return `${ownerName} failed to slot onto its children. Expected a single React element child or \\`Slottable\\`.`;\n};\n\nconst createSlottableError = (ownerName: string) => {\n  return `${ownerName} failed to slot onto its \\`Slottable\\`. Expected \\`Slottable\\` to receive a single React element child.`;\n};\n\nconst use: typeof React.use | undefined = (React as any)[' use '.trim().toString()];\n\nexport {\n  Slot,\n  Slottable,\n  //\n  Slot as Root,\n};\nexport type { SlotProps };\n","function clamp(value: number, [min, max]: [number, number]): number {\n  return Math.min(max, Math.max(min, value));\n}\n\nexport { clamp };\n","/* eslint-disable no-restricted-properties */\n\n/* eslint-disable no-restricted-globals */\nexport const canUseDOM = !!(\n  typeof window !== 'undefined' &&\n  window.document &&\n  window.document.createElement\n);\n/* eslint-enable no-restricted-globals */\n\nexport function composeEventHandlers<E extends { defaultPrevented: boolean }>(\n  originalEventHandler?: (event: E) => void,\n  ourEventHandler?: (event: E) => void,\n  { checkForDefaultPrevented = true } = {},\n) {\n  return function handleEvent(event: E) {\n    originalEventHandler?.(event);\n\n    if (checkForDefaultPrevented === false || !event || !event.defaultPrevented) {\n      return ourEventHandler?.(event);\n    }\n  };\n}\n\nexport function getOwnerWindow(element: Node | null | undefined) {\n  if (!canUseDOM) {\n    throw new Error('Cannot access window outside of the DOM');\n  }\n  // eslint-disable-next-line no-restricted-globals\n  return element?.ownerDocument?.defaultView ?? window;\n}\n\nexport function getOwnerDocument(element: Node | null | undefined) {\n  if (!canUseDOM) {\n    throw new Error('Cannot access document outside of the DOM');\n  }\n  // eslint-disable-next-line no-restricted-globals\n  return element?.ownerDocument ?? document;\n}\n\n/**\n * Lifted from https://github.com/ariakit/ariakit/blob/main/packages/ariakit-core/src/utils/dom.ts#L37\n * MIT License, Copyright (c) AriaKit.\n */\nexport function getActiveElement(\n  node: Node | null | undefined,\n  activeDescendant = false,\n): HTMLElement | null {\n  const { activeElement } = getOwnerDocument(node);\n  if (!activeElement?.nodeName) {\n    // `activeElement` might be an empty object if we're interacting with elements\n    // inside of an iframe.\n    return null;\n  }\n\n  if (isFrame(activeElement) && activeElement.contentDocument) {\n    return getActiveElement(activeElement.contentDocument.body, activeDescendant);\n  }\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\n  return activeElement as HTMLElement | null;\n}\n\nexport function isFrame(element: Element): element is HTMLIFrameElement {\n  return element.tagName === 'IFRAME';\n}\n","import * as React from 'react';\n\ntype ContextProvider<ContextValueType extends object | null> = React.FC<\n  ContextValueType & {\n    children: React.ReactNode;\n  }\n>;\n\ninterface UseAssertedContext<ContextValueType extends object | null> {\n  (consumerName: string): ContextValueType;\n}\n\ninterface UseContext<ContextValueType extends object | null> {\n  (consumerName: string): ContextValueType;\n  (consumerName: string, options: { optional: true }): ContextValueType | undefined;\n}\n\nfunction createContext<ContextValueType extends object | null>(\n  rootComponentName: string,\n): readonly [ContextProvider<ContextValueType>, UseContext<ContextValueType>];\nfunction createContext<ContextValueType extends object | null>(\n  rootComponentName: string,\n  defaultContext: ContextValueType,\n): readonly [ContextProvider<ContextValueType>, UseAssertedContext<ContextValueType>];\n\n/* @__NO_SIDE_EFFECTS__ */ function createContext<ContextValueType extends object | null>(\n  rootComponentName: string,\n  defaultContext?: ContextValueType,\n): readonly [ContextProvider<ContextValueType>, UseContext<ContextValueType>] {\n  const Context = React.createContext<ContextValueType | undefined>(defaultContext);\n  Context.displayName = rootComponentName + 'Context';\n\n  const Provider: ContextProvider<ContextValueType> = (props) => {\n    const { children, ...context } = props;\n    // Only re-memoize when prop values change\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n    return <Context.Provider value={value}>{children}</Context.Provider>;\n  };\n\n  Provider.displayName = rootComponentName + 'Provider';\n\n  function useContext(consumerName: string): ContextValueType;\n  function useContext(\n    consumerName: string,\n    options: { optional: true },\n  ): ContextValueType | undefined;\n\n  function useContext(\n    consumerName: string,\n    options: { optional?: boolean } = {},\n  ): ContextValueType | undefined {\n    const { optional = false } = options;\n    const context = React.useContext(Context);\n    if (context) return context;\n    if (defaultContext !== undefined) return defaultContext;\n    if (optional) return undefined;\n    // if a defaultContext wasn't specified, it's a required context.\n    throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n  }\n\n  return [Provider, useContext];\n}\n\n/* -------------------------------------------------------------------------------------------------\n * createContextScope\n * -----------------------------------------------------------------------------------------------*/\n\ntype Scope<C = any> = { [scopeName: string]: React.Context<C>[] } | undefined;\ntype ScopeHook = (scope: Scope) => { [__scopeProp: string]: Scope };\ninterface CreateScope {\n  scopeName: string;\n  (): ScopeHook;\n}\n\ntype ScopedContextProvider<ContextValueType extends object | null> = React.FC<\n  ContextValueType & {\n    scope: Scope<ContextValueType>;\n    children: React.ReactNode;\n  }\n>;\n\ninterface UseScopedContext<ContextValueType extends object | null> {\n  (consumerName: string, scope: Scope<ContextValueType | undefined>): ContextValueType;\n  (\n    consumerName: string,\n    scope: Scope<ContextValueType | undefined>,\n    options: { optional?: true },\n  ): ContextValueType | undefined;\n}\n\ninterface UseAssertedScopedContext<ContextValueType extends object | null> {\n  (consumerName: string, scope: Scope<ContextValueType | undefined>): ContextValueType;\n}\n\ninterface CreateScopedContext {\n  <ContextValueType extends object | null>(\n    rootComponentName: string,\n  ): readonly [ScopedContextProvider<ContextValueType>, UseScopedContext<ContextValueType>];\n  <ContextValueType extends object | null>(\n    rootComponentName: string,\n    defaultContext: ContextValueType,\n  ): readonly [ScopedContextProvider<ContextValueType>, UseAssertedScopedContext<ContextValueType>];\n}\n\n/* @__NO_SIDE_EFFECTS__ */ function createContextScope(\n  scopeName: string,\n  createContextScopeDeps: CreateScope[] = [],\n): readonly [CreateScopedContext, CreateScope] {\n  let defaultContexts: any[] = [];\n\n  /* -----------------------------------------------------------------------------------------------\n   * createContext\n   * ---------------------------------------------------------------------------------------------*/\n\n  function createContext<ContextValueType extends object | null>(\n    rootComponentName: string,\n    defaultContext?: ContextValueType,\n  ) {\n    const BaseContext = React.createContext<ContextValueType | undefined>(defaultContext);\n    BaseContext.displayName = rootComponentName + 'Context';\n    const index = defaultContexts.length;\n    defaultContexts = [...defaultContexts, defaultContext];\n\n    const Provider: ScopedContextProvider<ContextValueType> = (props) => {\n      const { scope, children, ...context } = props;\n      const Context = scope?.[scopeName]?.[index] || BaseContext;\n      // Only re-memoize when prop values change\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n      const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n      return <Context.Provider value={value}>{children}</Context.Provider>;\n    };\n\n    Provider.displayName = rootComponentName + 'Provider';\n\n    function useContext(\n      consumerName: string,\n      scope: Scope<ContextValueType | undefined>,\n    ): ContextValueType;\n    function useContext(\n      consumerName: string,\n      scope: Scope<ContextValueType | undefined>,\n      options: { optional: true },\n    ): ContextValueType | undefined;\n\n    function useContext(\n      consumerName: string,\n      scope: Scope<ContextValueType | undefined>,\n      options: { optional?: boolean } = {},\n    ): ContextValueType | undefined {\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 !== undefined) return defaultContext;\n      if (optional) return undefined;\n      // if a defaultContext wasn't specified, it's a required context.\n      throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n    }\n\n    return [Provider, useContext] as const;\n  }\n\n  /* -----------------------------------------------------------------------------------------------\n   * createScope\n   * ---------------------------------------------------------------------------------------------*/\n\n  const createScope: CreateScope = () => {\n    const scopeContexts = defaultContexts.map((defaultContext) => {\n      return React.createContext(defaultContext);\n    });\n    return function useScope(scope: Scope) {\n      const contexts = scope?.[scopeName] || scopeContexts;\n      return React.useMemo(\n        () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n        [scope, contexts],\n      );\n    };\n  };\n\n  createScope.scopeName = scopeName;\n  return [createContext, composeContextScopes(createScope, ...createContextScopeDeps)] as const;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * composeContextScopes\n * -----------------------------------------------------------------------------------------------*/\n\nfunction composeContextScopes(...scopes: [CreateScope, ...CreateScope[]]): CreateScope {\n  const baseScope = scopes[0];\n  if (scopes.length === 1) return baseScope;\n\n  const createScope: CreateScope = () => {\n    const scopeHooks = scopes.map((createScope) => ({\n      useScope: createScope(),\n      scopeName: createScope.scopeName,\n    }));\n\n    return function useComposedScopes(overrideScopes) {\n      const nextScopes = scopeHooks.reduce((nextScopes, { useScope, scopeName }) => {\n        // We are calling a hook inside a callback which React warns against to avoid inconsistent\n        // renders, however, scoping doesn't have render side effects so we ignore the rule.\n        // eslint-disable-next-line react-hooks/rules-of-hooks\n        const scopeProps = useScope(overrideScopes);\n        const currentScope = scopeProps[`__scope${scopeName}`];\n        return { ...nextScopes, ...currentScope };\n      }, {});\n\n      return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n    };\n  };\n\n  createScope.scopeName = baseScope.scopeName;\n  return createScope;\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nexport { createContext, createContextScope };\nexport type {\n  CreateScope,\n  CreateScopedContext,\n  Scope,\n  UseAssertedContext,\n  UseAssertedScopedContext,\n  UseContext,\n  UseScopedContext,\n};\n","import * as React from 'react';\n\n/**\n * On the server, React emits a warning when calling `useLayoutEffect`.\n * This is because neither `useLayoutEffect` nor `useEffect` run on the server.\n * We use this safe version which suppresses the warning by replacing it with a noop on the server.\n *\n * See: https://reactjs.org/docs/hooks-reference.html#uselayouteffect\n */\nconst useLayoutEffect = globalThis?.document ? React.useLayoutEffect : () => {};\n\nexport { useLayoutEffect };\n","/* eslint-disable react-hooks/rules-of-hooks */\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport * as React from 'react';\n\ntype AnyFunction = (...args: any[]) => any;\n\n// See https://github.com/webpack/webpack/issues/14814\nconst useReactEffectEvent = (React as any)[' useEffectEvent '.trim().toString()];\nconst useReactInsertionEffect = (React as any)[' useInsertionEffect '.trim().toString()];\n\n/**\n * Designed to approximate the behavior on `experimental_useEffectEvent` as best\n * as possible until its stable release, and back-fill it as a shim as needed.\n */\nexport function useEffectEvent<T extends AnyFunction>(callback?: T): T {\n  if (typeof useReactEffectEvent === 'function') {\n    return useReactEffectEvent(callback);\n  }\n\n  const ref = React.useRef<AnyFunction | undefined>(() => {\n    throw new Error('Cannot call an event handler while rendering.');\n  });\n  // See https://github.com/webpack/webpack/issues/14814\n  if (typeof useReactInsertionEffect === 'function') {\n    useReactInsertionEffect(() => {\n      ref.current = callback;\n    });\n  } else {\n    useLayoutEffect(() => {\n      ref.current = callback;\n    });\n  }\n\n  // https://github.com/facebook/react/issues/19240\n  return React.useMemo(() => ((...args) => ref.current?.(...args)) as T, []);\n}\n","import * as React from 'react';\nimport { IS_DEVELOPMENT } from '@radix-ui/primitive/is-development';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\n\n// Prevent bundlers from trying to optimize the import\nconst useInsertionEffect: typeof useLayoutEffect =\n  (React as any)[' useInsertionEffect '.trim().toString()] || useLayoutEffect;\n\ntype ChangeHandler<T> = (state: T) => void;\ntype SetStateFn<T> = React.Dispatch<React.SetStateAction<T>>;\n\ninterface UseControllableStateParams<T> {\n  prop?: T | undefined;\n  defaultProp: T;\n  onChange?: ChangeHandler<T>;\n  caller?: string;\n}\n\nexport function useControllableState<T>({\n  prop,\n  defaultProp,\n  onChange = () => {},\n  caller,\n}: UseControllableStateParams<T>): [T, SetStateFn<T>] {\n  const [uncontrolledProp, setUncontrolledProp, onChangeRef] = useUncontrolledState({\n    defaultProp,\n    onChange,\n  });\n  const isControlled = prop !== undefined;\n  const value = isControlled ? prop : uncontrolledProp;\n\n  // OK to disable conditionally calling hooks here because they will always run\n  // consistently in the same environment. Bundlers should be able to remove the\n  // code block entirely in production.\n  /* eslint-disable react-hooks/rules-of-hooks */\n  if (IS_DEVELOPMENT) {\n    const isControlledRef = React.useRef(prop !== undefined);\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  /* eslint-enable react-hooks/rules-of-hooks */\n\n  const setValue = React.useCallback<SetStateFn<T>>(\n    (nextValue) => {\n      if (isControlled) {\n        const value = isFunction(nextValue) ? nextValue(prop) : nextValue;\n        if (value !== prop) {\n          onChangeRef.current?.(value);\n        }\n      } else {\n        setUncontrolledProp(nextValue);\n      }\n    },\n    [isControlled, prop, setUncontrolledProp, onChangeRef],\n  );\n\n  return [value, setValue];\n}\n\nfunction useUncontrolledState<T>({\n  defaultProp,\n  onChange,\n}: Omit<UseControllableStateParams<T>, 'prop'>): [\n  Value: T,\n  setValue: React.Dispatch<React.SetStateAction<T>>,\n  OnChangeRef: React.RefObject<ChangeHandler<T> | undefined>,\n] {\n  const [value, setValue] = React.useState(defaultProp);\n  const prevValueRef = React.useRef(value);\n\n  const onChangeRef = React.useRef(onChange);\n  useInsertionEffect(() => {\n    onChangeRef.current = onChange;\n  }, [onChange]);\n\n  React.useEffect(() => {\n    if (prevValueRef.current !== value) {\n      onChangeRef.current?.(value);\n      prevValueRef.current = value;\n    }\n  }, [value, prevValueRef]);\n\n  return [value, setValue, onChangeRef];\n}\n\nfunction isFunction(value: unknown): value is (...args: any[]) => any {\n  return typeof value === 'function';\n}\n","import * as React from 'react';\nimport { IS_DEVELOPMENT } from '@radix-ui/primitive/is-development';\nimport { useEffectEvent } from '@radix-ui/react-use-effect-event';\n\ntype ChangeHandler<T> = (state: T) => void;\n\ninterface UseControllableStateParams<T> {\n  prop: T | undefined;\n  defaultProp: T;\n  onChange: ChangeHandler<T> | undefined;\n  caller: string;\n}\n\ninterface AnyAction {\n  type: string;\n}\n\nconst SYNC_STATE = Symbol('RADIX:SYNC_STATE');\n\ninterface SyncStateAction<T> {\n  type: typeof SYNC_STATE;\n  state: T;\n}\n\nexport function useControllableStateReducer<T, S extends {}, A extends AnyAction>(\n  reducer: (prevState: S & { state: T }, action: A) => S & { state: T },\n  userArgs: UseControllableStateParams<T>,\n  initialState: S,\n): [S & { state: T }, React.Dispatch<A>];\n\nexport function useControllableStateReducer<T, S extends {}, I, A extends AnyAction>(\n  reducer: (prevState: S & { state: T }, action: A) => S & { state: T },\n  userArgs: UseControllableStateParams<T>,\n  initialArg: I,\n  init: (i: I & { state: T }) => S,\n): [S & { state: T }, React.Dispatch<A>];\n\nexport function useControllableStateReducer<T, S extends {}, A extends AnyAction>(\n  reducer: (prevState: S & { state: T }, action: A) => S & { state: T },\n  userArgs: UseControllableStateParams<T>,\n  initialArg: any,\n  init?: (i: any) => Omit<S, 'state'>,\n): [S & { state: T }, React.Dispatch<A>] {\n  const { prop: controlledState, defaultProp, onChange: onChangeProp, caller } = userArgs;\n  const isControlled = controlledState !== undefined;\n\n  const onChange = useEffectEvent(onChangeProp);\n\n  // OK to disable conditionally calling hooks here because they will always run\n  // consistently in the same environment. Bundlers should be able to remove the\n  // code block entirely in production.\n  /* eslint-disable react-hooks/rules-of-hooks */\n  if (IS_DEVELOPMENT) {\n    const isControlledRef = React.useRef(controlledState !== undefined);\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  /* eslint-enable react-hooks/rules-of-hooks */\n\n  type InternalState = S & { state: T };\n  const args: [InternalState] = [{ ...initialArg, state: defaultProp }];\n  if (init) {\n    // @ts-expect-error\n    args.push(init);\n  }\n\n  const [internalState, dispatch] = React.useReducer(\n    (state: InternalState, action: A | SyncStateAction<T>): InternalState => {\n      if (action.type === SYNC_STATE) {\n        return { ...state, state: action.state };\n      }\n\n      const next = reducer(state, action);\n      if (isControlled && !Object.is(next.state, state.state)) {\n        onChange(next.state);\n      }\n      return next;\n    },\n    ...args,\n  );\n\n  const uncontrolledState = internalState.state;\n  const prevValueRef = React.useRef(uncontrolledState);\n  React.useEffect(() => {\n    if (prevValueRef.current !== uncontrolledState) {\n      prevValueRef.current = uncontrolledState;\n      if (!isControlled) {\n        onChange(uncontrolledState);\n      }\n    }\n  }, [uncontrolledState, prevValueRef, isControlled]);\n\n  const state = React.useMemo(() => {\n    const isControlled = controlledState !== undefined;\n    if (isControlled) {\n      return { ...internalState, state: controlledState };\n    }\n\n    return internalState;\n  }, [internalState, controlledState]);\n\n  React.useEffect(() => {\n    // Sync internal state for controlled components so that reducer is called\n    // with the correct state values\n    if (isControlled && !Object.is(controlledState, internalState.state)) {\n      dispatch({ type: SYNC_STATE, state: controlledState });\n    }\n  }, [controlledState, internalState.state, isControlled]);\n\n  return [state, dispatch as React.Dispatch<A>];\n}\n","import * as React from 'react';\n\ntype Direction = 'ltr' | 'rtl';\nconst DirectionContext = React.createContext<Direction | undefined>(undefined);\n\n/* -------------------------------------------------------------------------------------------------\n * Direction\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DirectionProviderProps {\n  children?: React.ReactNode;\n  dir: Direction;\n}\nconst DirectionProvider: React.FC<DirectionProviderProps> = (props) => {\n  const { dir, children } = props;\n  return <DirectionContext.Provider value={dir}>{children}</DirectionContext.Provider>;\n};\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction useDirection(localDir?: Direction) {\n  const globalDir = React.useContext(DirectionContext);\n  return localDir || globalDir || 'ltr';\n}\n\nconst Provider = DirectionProvider;\n\nexport {\n  useDirection,\n  //\n  Provider,\n  //\n  DirectionProvider,\n};\n","import * as React from 'react';\n\nfunction usePrevious<T>(value: T) {\n  const ref = React.useRef({ value, previous: value });\n\n  // We compare values before making an update to ensure that\n  // a change has been made. This ensures the previous value is\n  // persisted correctly between renders.\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\nexport { usePrevious };\n","import * as React from 'react';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\n\nfunction useSize(element: HTMLElement | null) {\n  const [size, setSize] = React.useState<{ width: number; height: number } | undefined>(undefined);\n\n  useLayoutEffect(() => {\n    if (element) {\n      // provide size as early as possible\n      setSize({ width: element.offsetWidth, height: element.offsetHeight });\n\n      const resizeObserver = new ResizeObserver((entries) => {\n        if (!Array.isArray(entries)) {\n          return;\n        }\n\n        // Since we only observe the one element, we don't need to loop over the\n        // array\n        if (!entries.length) {\n          return;\n        }\n\n        const entry = entries[0]!;\n        let width: number;\n        let height: number;\n\n        if ('borderBoxSize' in entry) {\n          const borderSizeEntry = entry['borderBoxSize'];\n          // iron out differences between browsers\n          const borderSize = Array.isArray(borderSizeEntry) ? borderSizeEntry[0] : borderSizeEntry;\n          width = borderSize['inlineSize'];\n          height = borderSize['blockSize'];\n        } else {\n          // for browsers that don't support `borderBoxSize`\n          // we calculate it ourselves to get the correct border box.\n          width = element.offsetWidth;\n          height = element.offsetHeight;\n        }\n\n        setSize({ width, height });\n      });\n\n      resizeObserver.observe(element, { box: 'border-box' });\n\n      return () => resizeObserver.unobserve(element);\n    } else {\n      // We only want to reset to `undefined` when the element becomes `null`,\n      // not if it changes to another element.\n      setSize(undefined);\n    }\n  }, [element]);\n\n  return size;\n}\n\nexport { useSize };\n","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { createSlot } from '@radix-ui/react-slot';\n\ndeclare module 'react' {\n  interface CSSProperties {\n    [varName: `--radix-${string}`]: string | number | undefined | null;\n  }\n}\n\nconst 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] as const;\n\ntype Primitives = { [E in (typeof NODES)[number]]: PrimitiveForwardRefComponent<E> };\ntype PrimitivePropsWithRef<E extends React.ElementType> = React.ComponentPropsWithRef<E> & {\n  asChild?: boolean;\n};\n\ninterface PrimitiveForwardRefComponent<\n  E extends React.ElementType,\n> extends React.ForwardRefExoticComponent<PrimitivePropsWithRef<E>> {}\n\n/* -------------------------------------------------------------------------------------------------\n * Primitive\n * -----------------------------------------------------------------------------------------------*/\n\n/* @__NO_SIDE_EFFECTS__ */ const Primitive = NODES.reduce((primitive, node) => {\n  const Slot = createSlot(`Primitive.${node}`);\n  const Node = React.forwardRef((props: PrimitivePropsWithRef<typeof node>, forwardedRef: any) => {\n    const { asChild, ...primitiveProps } = props;\n    const Comp: any = asChild ? Slot : node;\n\n    if (typeof window !== 'undefined') {\n      (window as any)[Symbol.for('radix-ui')] = true;\n    }\n\n    return <Comp {...primitiveProps} ref={forwardedRef} />;\n  });\n\n  Node.displayName = `Primitive.${node}`;\n\n  return { ...primitive, [node]: Node };\n}, {} as Primitives);\n\n/* -------------------------------------------------------------------------------------------------\n * Utils\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Flush custom event dispatch\n * https://github.com/radix-ui/primitives/pull/1378\n *\n * React batches *all* event handlers since version 18, this introduces certain considerations when using custom event types.\n *\n * Internally, React prioritises events in the following order:\n *  - discrete\n *  - continuous\n *  - default\n *\n * https://github.com/facebook/react/blob/a8a4742f1c54493df00da648a3f9d26e3db9c8b5/packages/react-dom/src/events/ReactDOMEventListener.js#L294-L350\n *\n * `discrete` is an  important distinction as updates within these events are applied immediately.\n * React however, is not able to infer the priority of custom event types due to how they are detected internally.\n * Because of this, it's possible for updates from custom events to be unexpectedly batched when\n * dispatched by another `discrete` event.\n *\n * In order to ensure that updates from custom events are applied predictably, we need to manually flush the batch.\n * This utility should be used when dispatching a custom event from within another `discrete` event, this utility\n * is not necessary when dispatching known event types, or if dispatching a custom type inside a non-discrete event.\n * For example:\n *\n * dispatching a known click 👎\n * target.dispatchEvent(new Event(‘click’))\n *\n * dispatching a custom type within a non-discrete event 👎\n * onScroll={(event) => event.target.dispatchEvent(new CustomEvent(‘customType’))}\n *\n * dispatching a custom type within a `discrete` event 👍\n * onPointerDown={(event) => dispatchDiscreteCustomEvent(event.target, new CustomEvent(‘customType’))}\n *\n * Note: though React classifies `focus`, `focusin` and `focusout` events as `discrete`, it's  not recommended to use\n * this utility with them. This is because it's possible for those handlers to be called implicitly during render\n * e.g. when focus is within a component as it is unmounted, or when managing focus on mount.\n */\n\nfunction dispatchDiscreteCustomEvent<E extends CustomEvent>(target: E['target'], event: E) {\n  if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = Primitive;\n\nexport {\n  Primitive,\n  //\n  Root,\n  //\n  dispatchDiscreteCustomEvent,\n};\nexport type { PrimitivePropsWithRef };\n","import * as React from 'react';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createSlot, type Slot } from '@radix-ui/react-slot';\n\ntype SlotProps = React.ComponentPropsWithoutRef<typeof Slot>;\ntype CollectionElement = HTMLElement;\ninterface CollectionProps extends SlotProps {\n  scope: any;\n}\n\n// We have resorted to returning slots directly rather than exposing primitives that can then\n// be slotted like `<CollectionItem as={Slot}>…</CollectionItem>`.\n// This is because we encountered issues with generic types that cannot be statically analysed\n// due to creating them dynamically via createCollection.\n\n/* @__NO_SIDE_EFFECTS__ */ function createCollection<\n  ItemElement extends HTMLElement,\n  ItemData = {},\n>(name: string) {\n  /* -----------------------------------------------------------------------------------------------\n   * CollectionProvider\n   * ---------------------------------------------------------------------------------------------*/\n\n  const PROVIDER_NAME = name + 'CollectionProvider';\n  const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n\n  type ContextValue = {\n    collectionRef: React.RefObject<CollectionElement | null>;\n    itemMap: Map<\n      React.RefObject<ItemElement | null>,\n      { ref: React.RefObject<ItemElement | null> } & ItemData\n    >;\n  };\n\n  const [CollectionProviderImpl, useCollectionContext] = createCollectionContext<ContextValue>(\n    PROVIDER_NAME,\n    { collectionRef: { current: null }, itemMap: new Map() },\n  );\n\n  const CollectionProvider: React.FC<{ children?: React.ReactNode; scope: any }> = (props) => {\n    const { scope, children } = props;\n    const ref = React.useRef<CollectionElement>(null);\n    const itemMap = React.useRef<ContextValue['itemMap']>(new Map()).current;\n    return (\n      <CollectionProviderImpl scope={scope} itemMap={itemMap} collectionRef={ref}>\n        {children}\n      </CollectionProviderImpl>\n    );\n  };\n\n  CollectionProvider.displayName = PROVIDER_NAME;\n\n  /* -----------------------------------------------------------------------------------------------\n   * CollectionSlot\n   * ---------------------------------------------------------------------------------------------*/\n\n  const COLLECTION_SLOT_NAME = name + 'CollectionSlot';\n\n  const CollectionSlotImpl = createSlot(COLLECTION_SLOT_NAME);\n  const CollectionSlot = React.forwardRef<CollectionElement, CollectionProps>(\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 <CollectionSlotImpl ref={composedRefs}>{children}</CollectionSlotImpl>;\n    },\n  );\n\n  CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n\n  /* -----------------------------------------------------------------------------------------------\n   * CollectionItem\n   * ---------------------------------------------------------------------------------------------*/\n\n  const ITEM_SLOT_NAME = name + 'CollectionItemSlot';\n  const ITEM_DATA_ATTR = 'data-radix-collection-item';\n\n  type CollectionItemSlotProps = ItemData & {\n    children: React.ReactNode;\n    scope: any;\n  };\n\n  const CollectionItemSlotImpl = createSlot(ITEM_SLOT_NAME);\n  const CollectionItemSlot = React.forwardRef<ItemElement, CollectionItemSlotProps>(\n    (props, forwardedRef) => {\n      const { scope, children, ...itemData } = props;\n      const ref = React.useRef<ItemElement>(null);\n      const composedRefs = useComposedRefs(forwardedRef, ref);\n      const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n\n      React.useEffect(() => {\n        context.itemMap.set(ref, { ref, ...(itemData as unknown as ItemData) });\n        return () => void context.itemMap.delete(ref);\n      });\n\n      return (\n        <CollectionItemSlotImpl {...{ [ITEM_DATA_ATTR]: '' }} ref={composedRefs}>\n          {children}\n        </CollectionItemSlotImpl>\n      );\n    },\n  );\n\n  CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n\n  /* -----------------------------------------------------------------------------------------------\n   * useCollection\n   * ---------------------------------------------------------------------------------------------*/\n\n  function useCollection(scope: any) {\n    const context = useCollectionContext(name + 'CollectionConsumer', scope);\n\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\n    return getItems;\n  }\n\n  return [\n    { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n    useCollection,\n    createCollectionScope,\n  ] as const;\n}\n\nexport { createCollection };\nexport type { CollectionProps };\n","// Not a real member because it shouldn't be accessible, but the super class\n// calls `set` which needs to read the instanciation state, so it can't be a\n// private member.\nconst __instanciated = new WeakMap<OrderedDict<any, any>, boolean>();\nexport class OrderedDict<K, V> extends Map<K, V> {\n  #keys: K[];\n\n  constructor(iterable?: Iterable<readonly [K, V]> | null | undefined);\n  constructor(entries?: readonly (readonly [K, V])[] | null) {\n    super(entries);\n    this.#keys = [...super.keys()];\n    __instanciated.set(this, true);\n  }\n\n  set(key: K, value: V) {\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\n  insert(index: number, key: K, value: V) {\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\n    if (safeIndex === this.size || (has && safeIndex === this.size - 1) || safeIndex === -1) {\n      this.set(key, value);\n      return this;\n    }\n\n    const size = this.size + (has ? 0 : 1);\n\n    // If you insert at, say, -2, without this bit you'd replace the\n    // second-to-last item and push the rest up one, which means the new item is\n    // 3rd to last. This isn't very intuitive; inserting at -2 is more like\n    // saying \"make this item the second to last\".\n    if (relativeIndex < 0) {\n      actualIndex++;\n    }\n\n    const keys = [...this.#keys];\n    let nextValue: V | undefined;\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          // delete first to ensure that the item is moved to the end\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\n  with(index: number, key: K, value: V) {\n    const copy = new OrderedDict(this);\n    copy.insert(index, key, value);\n    return copy;\n  }\n\n  before(key: K) {\n    const index = this.#keys.indexOf(key) - 1;\n    if (index < 0) {\n      return undefined;\n    }\n    return this.entryAt(index);\n  }\n\n  /**\n   * Sets a new key-value pair at the position before the given key.\n   */\n  setBefore(key: K, newKey: K, value: V) {\n    const index = this.#keys.indexOf(key);\n    if (index === -1) {\n      return this;\n    }\n    return this.insert(index, newKey, value);\n  }\n\n  after(key: K) {\n    let index = this.#keys.indexOf(key);\n    index = index === -1 || index === this.size - 1 ? -1 : index + 1;\n    if (index === -1) {\n      return undefined;\n    }\n    return this.entryAt(index);\n  }\n\n  /**\n   * Sets a new key-value pair at the position after the given key.\n   */\n  setAfter(key: K, newKey: K, value: V) {\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\n  first() {\n    return this.entryAt(0);\n  }\n\n  last() {\n    return this.entryAt(-1);\n  }\n\n  clear() {\n    this.#keys = [];\n    return super.clear();\n  }\n\n  delete(key: K) {\n    const deleted = super.delete(key);\n    if (deleted) {\n      this.#keys.splice(this.#keys.indexOf(key), 1);\n    }\n    return deleted;\n  }\n\n  deleteAt(index: number) {\n    const key = this.keyAt(index);\n    if (key !== undefined) {\n      return this.delete(key);\n    }\n    return false;\n  }\n\n  at(index: number) {\n    const key = at(this.#keys, index);\n    if (key !== undefined) {\n      return this.get(key);\n    }\n  }\n\n  entryAt(index: number): [K, V] | undefined {\n    const key = at(this.#keys, index);\n    if (key !== undefined) {\n      return [key, this.get(key)!];\n    }\n  }\n\n  indexOf(key: K) {\n    return this.#keys.indexOf(key);\n  }\n\n  keyAt(index: number) {\n    return at(this.#keys, index);\n  }\n\n  from(key: K, offset: number) {\n    const index = this.indexOf(key);\n    if (index === -1) {\n      return undefined;\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\n  keyFrom(key: K, offset: number) {\n    const index = this.indexOf(key);\n    if (index === -1) {\n      return undefined;\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\n  find(\n    predicate: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => boolean,\n    thisArg?: any,\n  ) {\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 undefined;\n  }\n\n  findIndex(\n    predicate: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => boolean,\n    thisArg?: any,\n  ) {\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\n  filter<KK extends K, VV extends V>(\n    predicate: (entry: [K, V], index: number, dict: OrderedDict<K, V>) => entry is [KK, VV],\n    thisArg?: any,\n  ): OrderedDict<KK, VV>;\n\n  filter(\n    predicate: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => unknown,\n    thisArg?: any,\n  ): OrderedDict<K, V>;\n\n  filter(\n    predicate: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => unknown,\n    thisArg?: any,\n  ) {\n    const entries: Array<[K, V]> = [];\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\n  map<U>(\n    callbackfn: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => U,\n    thisArg?: any,\n  ): OrderedDict<K, U> {\n    const entries: [K, U][] = [];\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\n  reduce(\n    callbackfn: (\n      previousValue: [K, V],\n      currentEntry: [K, V],\n      currentIndex: number,\n      dictionary: OrderedDict<K, V>,\n    ) => [K, V],\n  ): [K, V];\n  reduce(\n    callbackfn: (\n      previousValue: [K, V],\n      currentEntry: [K, V],\n      currentIndex: number,\n      dictionary: OrderedDict<K, V>,\n    ) => [K, V],\n    initialValue: [K, V],\n  ): [K, V];\n  reduce<U>(\n    callbackfn: (\n      previousValue: U,\n      currentEntry: [K, V],\n      currentIndex: number,\n      dictionary: OrderedDict<K, V>,\n    ) => U,\n    initialValue: U,\n  ): U;\n\n  reduce<U>(\n    ...args: [\n      (\n        previousValue: U,\n        currentEntry: [K, V],\n        currentIndex: number,\n        dictionary: OrderedDict<K, V>,\n      ) => U,\n      U?,\n    ]\n  ) {\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 as any;\n      } else {\n        accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n      }\n      index++;\n    }\n    return accumulator;\n  }\n\n  reduceRight(\n    callbackfn: (\n      previousValue: [K, V],\n      currentEntry: [K, V],\n      currentIndex: number,\n      dictionary: OrderedDict<K, V>,\n    ) => [K, V],\n  ): [K, V];\n  reduceRight(\n    callbackfn: (\n      previousValue: [K, V],\n      currentEntry: [K, V],\n      currentIndex: number,\n      dictionary: OrderedDict<K, V>,\n    ) => [K, V],\n    initialValue: [K, V],\n  ): [K, V];\n  reduceRight<U>(\n    callbackfn: (\n      previousValue: [K, V],\n      currentValue: U,\n      currentIndex: number,\n      dictionary: OrderedDict<K, V>,\n    ) => U,\n    initialValue: U,\n  ): U;\n\n  reduceRight<U>(\n    ...args: [\n      (\n        previousValue: U,\n        currentEntry: [K, V],\n        currentIndex: number,\n        dictionary: OrderedDict<K, V>,\n      ) => U,\n      U?,\n    ]\n  ) {\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 as any;\n      } else {\n        accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n      }\n    }\n    return accumulator;\n  }\n\n  toSorted(compareFn?: (a: [K, V], b: [K, V]) => number): OrderedDict<K, V> {\n    const entries = [...this.entries()].sort(compareFn);\n    return new OrderedDict(entries);\n  }\n\n  toReversed(): OrderedDict<K, V> {\n    const reversed = new OrderedDict<K, V>();\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\n  toSpliced(start: number, deleteCount?: number): OrderedDict<K, V>;\n  toSpliced(start: number, deleteCount: number, ...items: [K, V][]): OrderedDict<K, V>;\n\n  toSpliced(...args: [start: number, deleteCount: number, ...items: [K, V][]]) {\n    const entries = [...this.entries()];\n    entries.splice(...args);\n    return new OrderedDict(entries);\n  }\n\n  slice(start?: number, end?: number) {\n    const result = new OrderedDict<K, V>();\n    let stop = this.size - 1;\n\n    if (start === undefined) {\n      return result;\n    }\n\n    if (start < 0) {\n      start = start + this.size;\n    }\n\n    if (end !== undefined && end > 0) {\n      stop = end - 1;\n    }\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\n  every(\n    predicate: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => unknown,\n    thisArg?: any,\n  ) {\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\n  some(\n    predicate: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => unknown,\n    thisArg?: any,\n  ) {\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}\n\nexport type KeyOf<D extends OrderedDict<any, any>> =\n  D extends OrderedDict<infer K, any> ? K : never;\nexport type ValueOf<D extends OrderedDict<any, any>> =\n  D extends OrderedDict<any, infer V> ? V : never;\nexport type EntryOf<D extends OrderedDict<any, any>> = [KeyOf<D>, ValueOf<D>];\nexport type KeyFrom<E extends EntryOf<any>> = E[0];\nexport type ValueFrom<E extends EntryOf<any>> = E[1];\n\nfunction at<T>(array: ArrayLike<T>, index: number): T | undefined {\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 ? undefined : array[actualIndex];\n}\n\nfunction toSafeIndex(array: ArrayLike<any>, index: number) {\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\nfunction toSafeInteger(number: number) {\n  // eslint-disable-next-line no-self-compare\n  return number !== number || number === 0 ? 0 : Math.trunc(number);\n}\n","import * as React from 'react';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createSlot, type Slot } from '@radix-ui/react-slot';\nimport type { EntryOf } from './ordered-dictionary';\nimport { OrderedDict } from './ordered-dictionary';\n\ntype SlotProps = React.ComponentPropsWithoutRef<typeof Slot>;\ntype CollectionElement = HTMLElement;\ninterface CollectionProps extends SlotProps {\n  scope: any;\n}\n\ninterface BaseItemData {\n  id?: string;\n}\n\ntype ItemDataWithElement<\n  ItemData extends BaseItemData,\n  ItemElement extends HTMLElement,\n> = ItemData & {\n  element: ItemElement;\n};\n\ntype ItemMap<ItemElement extends HTMLElement, ItemData extends BaseItemData> = OrderedDict<\n  ItemElement,\n  ItemDataWithElement<ItemData, ItemElement>\n>;\n\n/* @__NO_SIDE_EFFECTS__ */ function createCollection<\n  ItemElement extends HTMLElement,\n  ItemData extends {} = {},\n>(name: string) {\n  type AllItemData = ItemData & BaseItemData;\n  /* -----------------------------------------------------------------------------------------------\n   * CollectionProvider\n   * ---------------------------------------------------------------------------------------------*/\n\n  const PROVIDER_NAME = name + 'CollectionProvider';\n  const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n\n  interface ContextValue {\n    collectionElement: CollectionElement | null;\n    collectionRef: React.Ref<CollectionElement | null>;\n    collectionRefObject: React.RefObject<CollectionElement | null>;\n    itemMap: ItemMap<ItemElement, AllItemData>;\n    setItemMap: React.Dispatch<React.SetStateAction<ItemMap<ItemElement, AllItemData>>>;\n  }\n\n  const [CollectionContextProvider, useCollectionContext] = createCollectionContext<ContextValue>(\n    PROVIDER_NAME,\n    {\n      collectionElement: null,\n      collectionRef: { current: null },\n      collectionRefObject: { current: null },\n      itemMap: new OrderedDict(),\n      setItemMap: () => void 0,\n    },\n  );\n\n  type CollectionState = [\n    ItemMap: ItemMap<ItemElement, AllItemData>,\n    SetItemMap: React.Dispatch<React.SetStateAction<ItemMap<ItemElement, AllItemData>>>,\n  ];\n\n  const CollectionProvider: React.FC<{\n    children?: React.ReactNode;\n    scope: any;\n    state?: CollectionState;\n  }> = ({ state, ...props }) => {\n    return state ? (\n      <CollectionProviderImpl {...props} state={state} />\n    ) : (\n      <CollectionInit {...props} />\n    );\n  };\n  CollectionProvider.displayName = PROVIDER_NAME;\n\n  const CollectionInit: React.FC<{\n    children?: React.ReactNode;\n    scope: any;\n  }> = (props) => {\n    const state = useInitCollection();\n    return <CollectionProviderImpl {...props} state={state} />;\n  };\n  CollectionInit.displayName = PROVIDER_NAME + 'Init';\n\n  const CollectionProviderImpl: React.FC<{\n    children?: React.ReactNode;\n    scope: any;\n    state: CollectionState;\n  }> = (props) => {\n    const { scope, children, state } = props;\n    const ref = React.useRef<CollectionElement>(null);\n    const [collectionElement, setCollectionElement] = React.useState<CollectionElement | null>(\n      null,\n    );\n    const composeRefs = useComposedRefs(ref, setCollectionElement);\n    const [itemMap, setItemMap] = state;\n\n    React.useEffect(() => {\n      if (!collectionElement) return;\n\n      const observer = getChildListObserver(() => {\n        // setItemMap((map) => {\n        //   const copy = new OrderedDict(map).toSorted(([, a], [, b]) =>\n        //     !a.element || !b.element ? 0 : isElementPreceding(a.element, b.element) ? -1 : 1\n        //   );\n        //   // check if the order has changed\n        //   let index = -1;\n        //   for (const entry of copy) {\n        //     index++;\n        //     const key = map.keyAt(index)!;\n        //     const [copyKey] = entry;\n        //     if (key !== copyKey) {\n        //       // order has changed!\n        //       return copy;\n        //     }\n        //   }\n        //   return map;\n        // });\n      });\n      observer.observe(collectionElement, {\n        childList: true,\n        subtree: true,\n      });\n      return () => {\n        observer.disconnect();\n      };\n    }, [collectionElement]);\n\n    return (\n      <CollectionContextProvider\n        scope={scope}\n        itemMap={itemMap}\n        setItemMap={setItemMap}\n        collectionRef={composeRefs}\n        collectionRefObject={ref}\n        collectionElement={collectionElement}\n      >\n        {children}\n      </CollectionContextProvider>\n    );\n  };\n\n  CollectionProviderImpl.displayName = PROVIDER_NAME + 'Impl';\n\n  /* -----------------------------------------------------------------------------------------------\n   * CollectionSlot\n   * ---------------------------------------------------------------------------------------------*/\n\n  const COLLECTION_SLOT_NAME = name + 'CollectionSlot';\n\n  const CollectionSlotImpl = createSlot(COLLECTION_SLOT_NAME);\n  const CollectionSlot = React.forwardRef<CollectionElement, CollectionProps>(\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 <CollectionSlotImpl ref={composedRefs}>{children}</CollectionSlotImpl>;\n    },\n  );\n\n  CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n\n  /* -----------------------------------------------------------------------------------------------\n   * CollectionItem\n   * ---------------------------------------------------------------------------------------------*/\n\n  const ITEM_SLOT_NAME = name + 'CollectionItemSlot';\n  const ITEM_DATA_ATTR = 'data-radix-collection-item';\n\n  type CollectionItemSlotProps = AllItemData & {\n    children: React.ReactNode;\n    scope: any;\n  };\n\n  const CollectionItemSlotImpl = createSlot(ITEM_SLOT_NAME);\n  const CollectionItemSlot = React.forwardRef<ItemElement, CollectionItemSlotProps>(\n    (props, forwardedRef) => {\n      const { scope, children, ...itemData } = props;\n      const ref = React.useRef<ItemElement>(null);\n      const [element, setElement] = React.useState<ItemElement | null>(null);\n      const composedRefs = useComposedRefs(forwardedRef, ref, setElement);\n      const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n\n      const { setItemMap } = context;\n\n      const itemDataRef = React.useRef(itemData);\n      if (!shallowEqual(itemDataRef.current, itemData)) {\n        itemDataRef.current = itemData;\n      }\n      const memoizedItemData = itemDataRef.current;\n\n      React.useEffect(() => {\n        const itemData = memoizedItemData;\n        setItemMap((map) => {\n          if (!element) {\n            return map;\n          }\n\n          if (!map.has(element)) {\n            map.set(element, { ...(itemData as unknown as AllItemData), element });\n            return map.toSorted(sortByDocumentPosition);\n          }\n\n          return map\n            .set(element, { ...(itemData as unknown as AllItemData), element })\n            .toSorted(sortByDocumentPosition);\n        });\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\n      return (\n        <CollectionItemSlotImpl {...{ [ITEM_DATA_ATTR]: '' }} ref={composedRefs as any}>\n          {children}\n        </CollectionItemSlotImpl>\n      );\n    },\n  );\n\n  CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n\n  /* -----------------------------------------------------------------------------------------------\n   * useInitCollection\n   * ---------------------------------------------------------------------------------------------*/\n\n  function useInitCollection() {\n    return React.useState<ItemMap<ItemElement, AllItemData>>(new OrderedDict());\n  }\n\n  /* -----------------------------------------------------------------------------------------------\n   * useCollection\n   * ---------------------------------------------------------------------------------------------*/\n\n  function useCollection(scope: any) {\n    const { itemMap } = useCollectionContext(name + 'CollectionConsumer', scope);\n\n    return itemMap;\n  }\n\n  const functions = {\n    createCollectionScope,\n    useCollection,\n    useInitCollection,\n  };\n\n  return [\n    { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n    functions,\n  ] as const;\n}\n\nexport { createCollection };\nexport type { CollectionProps };\n\nfunction shallowEqual(a: any, b: any) {\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\nfunction isElementPreceding(a: Element, b: Element) {\n  return !!(b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING);\n}\n\nfunction sortByDocumentPosition<E extends HTMLElement, T extends BaseItemData>(\n  a: EntryOf<ItemMap<E, T>>,\n  b: EntryOf<ItemMap<E, T>>,\n) {\n  return !a[1].element || !b[1].element\n    ? 0\n    : isElementPreceding(a[1].element, b[1].element)\n      ? -1\n      : 1;\n}\n\nfunction getChildListObserver(callback: () => void) {\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\n  return observer;\n}\n","import * 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';\n\nimport type { Scope } from '@radix-ui/react-context';\n\ntype Direction = 'ltr' | 'rtl';\n\nconst PAGE_KEYS = ['PageUp', 'PageDown'];\nconst ARROW_KEYS = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'];\n\ntype SlideDirection = 'from-left' | 'from-right' | 'from-bottom' | 'from-top';\nconst BACK_KEYS: Record<SlideDirection, string[]> = {\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};\n\ndeclare global {\n  interface FocusOptions {\n    /**\n     * A boolean value that should be set to `true` to force, or `false` to prevent\n     * visible indication that the element is focused. If the property is not\n     * specified, a browser will provide visible indication if it determines\n     * that this would improve accessibility for users.\n     *\n     * @see\n     * https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus#focusvisible\n     */\n    focusVisible?: boolean;\n  }\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Slider\n * -----------------------------------------------------------------------------------------------*/\n\nconst SLIDER_NAME = 'Slider';\n\nconst [Collection, useCollection, createCollectionScope] =\n  createCollection<SliderThumbElement>(SLIDER_NAME);\n\ntype ScopedProps<P> = P & { __scopeSlider?: Scope };\nconst [createSliderContext, createSliderScope] = createContextScope(SLIDER_NAME, [\n  createCollectionScope,\n]);\n\ntype SliderContextValue = {\n  name: string | undefined;\n  disabled: boolean | undefined;\n  min: number;\n  max: number;\n  values: number[];\n  valueIndexToChangeRef: React.MutableRefObject<number>;\n  thumbs: Set<SliderThumbElement>;\n  orientation: SliderProps['orientation'];\n  form: string | undefined;\n};\n\nconst [SliderProvider, useSliderContext] = createSliderContext<SliderContextValue>(SLIDER_NAME);\n\ntype SliderElement = SliderHorizontalElement | SliderVerticalElement;\ninterface SliderProps extends Omit<\n  SliderHorizontalProps | SliderVerticalProps,\n  keyof SliderOrientationPrivateProps | 'defaultValue'\n> {\n  name?: string;\n  disabled?: boolean;\n  orientation?: React.AriaAttributes['aria-orientation'];\n  dir?: Direction;\n  min?: number;\n  max?: number;\n  step?: number;\n  minStepsBetweenThumbs?: number;\n  value?: number[];\n  defaultValue?: number[];\n  onValueChange?(value: number[]): void;\n  onValueCommit?(value: number[]): void;\n  inverted?: boolean;\n  form?: string;\n}\n\nconst Slider = /* @__PURE__ */ React.forwardRef<SliderElement, SliderProps>(\n  // blank line to reduce diff noise\n  function Slider(props: ScopedProps<SliderProps>, forwardedRef) {\n    const {\n      name,\n      min = 0,\n      max = 100,\n      step = 1,\n      orientation = 'horizontal',\n      disabled = false,\n      minStepsBetweenThumbs = 0,\n      defaultValue = [min],\n      value,\n      onValueChange = () => {},\n      onValueCommit = () => {},\n      inverted = false,\n      form,\n      ...sliderProps\n    } = props;\n    const thumbRefs = React.useRef<SliderContextValue['thumbs']>(new Set());\n    const valueIndexToChangeRef = React.useRef<number>(0);\n    const isKeyboardInteractionRef = React.useRef(false);\n    const isHorizontal = orientation === 'horizontal';\n    const SliderOrientation = isHorizontal ? SliderHorizontal : SliderVertical;\n    const [control, setControl] = React.useState<SliderElement | null>(null);\n    const composedRefs = useComposedRefs(forwardedRef, setControl);\n\n    const [values = [], setValues] = useControllableState({\n      prop: value,\n      defaultProp: defaultValue,\n      onChange: (value) => {\n        const thumbs = [...thumbRefs.current];\n        thumbs[valueIndexToChangeRef.current]?.focus({\n          preventScroll: true,\n          focusVisible: isKeyboardInteractionRef.current,\n        });\n        isKeyboardInteractionRef.current = false;\n        onValueChange(value);\n      },\n    });\n    const valuesBeforeSlideStartRef = React.useRef(values);\n\n    const initialValuesRef = React.useRef(values);\n    React.useEffect(() => {\n      const associatedForm = form\n        ? control?.ownerDocument.getElementById(form)\n        : control?.closest('form');\n      if (associatedForm instanceof HTMLFormElement) {\n        const reset = () => setValues(initialValuesRef.current);\n        associatedForm.addEventListener('reset', reset);\n        return () => associatedForm.removeEventListener('reset', reset);\n      }\n    }, [control, form, setValues]);\n\n    function handleSlideStart(value: number) {\n      const closestIndex = getClosestValueIndex(values, value);\n      updateValues(value, closestIndex);\n    }\n\n    function handleSlideMove(value: number) {\n      updateValues(value, valueIndexToChangeRef.current);\n    }\n\n    function handleSlideEnd() {\n      const hasChanged = String(values) !== String(valuesBeforeSlideStartRef.current);\n      if (hasChanged) onValueCommit(values);\n    }\n\n    function updateValues(value: number, atIndex: number, { commit } = { commit: false }) {\n      const decimalCount = getDecimalCount(step);\n      const snapToStep = roundValue(Math.round((value - min) / step) * step + min, decimalCount);\n      const nextValue = clamp(snapToStep, [min, max]);\n\n      setValues((prevValues = []) => {\n        const nextValues = getNextSortedValues(prevValues, nextValue, atIndex);\n        if (hasMinStepsBetweenValues(nextValues, minStepsBetweenThumbs * step)) {\n          valueIndexToChangeRef.current = nextValues.indexOf(nextValue);\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\n    return (\n      <SliderProvider\n        scope={props.__scopeSlider}\n        name={name}\n        disabled={disabled}\n        min={min}\n        max={max}\n        valueIndexToChangeRef={valueIndexToChangeRef}\n        thumbs={thumbRefs.current}\n        values={values}\n        orientation={orientation}\n        form={form}\n      >\n        <Collection.Provider scope={props.__scopeSlider}>\n          <Collection.Slot scope={props.__scopeSlider}>\n            <SliderOrientation\n              aria-disabled={disabled}\n              data-disabled={disabled ? '' : undefined}\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={min}\n              max={max}\n              inverted={inverted}\n              onSlideStart={disabled ? undefined : handleSlideStart}\n              onSlideMove={disabled ? undefined : handleSlideMove}\n              onSlideEnd={disabled ? undefined : 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 value = values[atIndex]!;\n                  const nextValue = getNextStepValue(value, {\n                    min,\n                    step,\n                    direction: stepDirection,\n                    multiplier,\n                  });\n                  updateValues(nextValue, atIndex, { commit: true });\n                }\n              }}\n            />\n          </Collection.Slot>\n        </Collection.Provider>\n      </SliderProvider>\n    );\n  },\n);\n\n/* -------------------------------------------------------------------------------------------------\n * SliderHorizontal\n * -----------------------------------------------------------------------------------------------*/\n\ntype Side = 'top' | 'right' | 'bottom' | 'left';\n\nconst [SliderOrientationProvider, useSliderOrientationContext] = createSliderContext<{\n  startEdge: Side;\n  endEdge: Side;\n  size: keyof NonNullable<ReturnType<typeof useSize>>;\n  direction: number;\n}>(SLIDER_NAME, {\n  startEdge: 'left',\n  endEdge: 'right',\n  size: 'width',\n  direction: 1,\n});\n\ntype SliderOrientationPrivateProps = {\n  min: number;\n  max: number;\n  inverted: boolean;\n  onSlideStart?(value: number): void;\n  onSlideMove?(value: number): void;\n  onSlideEnd?(): void;\n  onHomeKeyDown(event: React.KeyboardEvent): void;\n  onEndKeyDown(event: React.KeyboardEvent): void;\n  onStepKeyDown(step: { event: React.KeyboardEvent; direction: number }): void;\n};\ninterface SliderOrientationProps\n  extends Omit<SliderImplProps, keyof SliderImplPrivateProps>, SliderOrientationPrivateProps {}\n\ntype SliderHorizontalElement = SliderImplElement;\ninterface SliderHorizontalProps extends SliderOrientationProps {\n  dir?: Direction;\n}\n\nconst SliderHorizontal = /* @__PURE__ */ React.forwardRef<\n  SliderHorizontalElement,\n  SliderHorizontalProps\n>(\n  // blank line to reduce diff noise\n  function SliderHorizontal(props: ScopedProps<SliderHorizontalProps>, 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<SliderImplElement | null>(null);\n    const composedRefs = useComposedRefs(forwardedRef, setSlider);\n    const rectRef = React.useRef<DOMRect>(undefined);\n    const direction = useDirection(dir);\n    const isDirectionLTR = direction === 'ltr';\n    const isSlidingFromLeft = (isDirectionLTR && !inverted) || (!isDirectionLTR && inverted);\n\n    function getValueFromPointer(pointerPosition: number) {\n      const rect = rectRef.current || slider!.getBoundingClientRect();\n      const input: [number, number] = [0, rect.width];\n      const output: [number, number] = isSlidingFromLeft ? [min, max] : [max, min];\n      const value = linearScale(input, output);\n\n      rectRef.current = rect;\n      return value(pointerPosition - rect.left);\n    }\n\n    return (\n      <SliderOrientationProvider\n        scope={props.__scopeSlider}\n        startEdge={isSlidingFromLeft ? 'left' : 'right'}\n        endEdge={isSlidingFromLeft ? 'right' : 'left'}\n        direction={isSlidingFromLeft ? 1 : -1}\n        size=\"width\"\n      >\n        <SliderImpl\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 = undefined;\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      </SliderOrientationProvider>\n    );\n  },\n);\n\n/* -------------------------------------------------------------------------------------------------\n * SliderVertical\n * -----------------------------------------------------------------------------------------------*/\n\ntype SliderVerticalElement = SliderImplElement;\ninterface SliderVerticalProps extends SliderOrientationProps {}\n\nconst SliderVertical = /* @__PURE__ */ React.forwardRef<SliderVerticalElement, SliderVerticalProps>(\n  function SliderVertical(props: ScopedProps<SliderVerticalProps>, 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<SliderImplElement>(null);\n    const ref = useComposedRefs(forwardedRef, sliderRef);\n    const rectRef = React.useRef<DOMRect>(undefined);\n    const isSlidingFromBottom = !inverted;\n\n    function getValueFromPointer(pointerPosition: number) {\n      const rect = rectRef.current || sliderRef.current!.getBoundingClientRect();\n      const input: [number, number] = [0, rect.height];\n      const output: [number, number] = isSlidingFromBottom ? [max, min] : [min, max];\n      const value = linearScale(input, output);\n\n      rectRef.current = rect;\n      return value(pointerPosition - rect.top);\n    }\n\n    return (\n      <SliderOrientationProvider\n        scope={props.__scopeSlider}\n        startEdge={isSlidingFromBottom ? 'bottom' : 'top'}\n        endEdge={isSlidingFromBottom ? 'top' : 'bottom'}\n        size=\"height\"\n        direction={isSlidingFromBottom ? 1 : -1}\n      >\n        <SliderImpl\n          data-orientation=\"vertical\"\n          {...sliderProps}\n          ref={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 = undefined;\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      </SliderOrientationProvider>\n    );\n  },\n);\n\n/* -------------------------------------------------------------------------------------------------\n * SliderImpl\n * -----------------------------------------------------------------------------------------------*/\n\ntype SliderImplElement = React.ComponentRef<typeof Primitive.span>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ntype SliderImplPrivateProps = {\n  onSlideStart(event: React.PointerEvent): void;\n  onSlideMove(event: React.PointerEvent): void;\n  onSlideEnd(event: React.PointerEvent): void;\n  onHomeKeyDown(event: React.KeyboardEvent): void;\n  onEndKeyDown(event: React.KeyboardEvent): void;\n  onStepKeyDown(event: React.KeyboardEvent): void;\n};\ninterface SliderImplProps extends PrimitiveDivProps, SliderImplPrivateProps {}\n\nconst SliderImpl = /* @__PURE__ */ React.forwardRef<SliderImplElement, SliderImplProps>(\n  function SliderImpl(props: ScopedProps<SliderImplProps>, 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\n    return (\n      <Primitive.span\n        {...sliderProps}\n        ref={forwardedRef}\n        onKeyDown={composeEventHandlers(props.onKeyDown, (event) => {\n          if (event.key === 'Home') {\n            onHomeKeyDown(event);\n            // Prevent scrolling to page start\n            event.preventDefault();\n          } else if (event.key === 'End') {\n            onEndKeyDown(event);\n            // Prevent scrolling to page end\n            event.preventDefault();\n          } else if (PAGE_KEYS.concat(ARROW_KEYS).includes(event.key)) {\n            onStepKeyDown(event);\n            // Prevent scrolling for directional key presses\n            event.preventDefault();\n          }\n        })}\n        onPointerDown={composeEventHandlers(props.onPointerDown, (event) => {\n          const target = event.target as HTMLElement;\n          target.setPointerCapture(event.pointerId);\n          // Prevent browser focus behaviour because we focus a thumb manually when values change.\n          event.preventDefault();\n          // Touch devices have a delay before focusing so won't focus if touch immediately moves\n          // away from target (sliding). We want thumb to focus regardless.\n          if (context.thumbs.has(target)) {\n            // Pointer interaction, so avoid showing the focus ring (`:focus-visible`).\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 as HTMLElement;\n          if (target.hasPointerCapture(event.pointerId)) onSlideMove(event);\n        })}\n        onPointerUp={composeEventHandlers(props.onPointerUp, (event) => {\n          const target = event.target as HTMLElement;\n          if (target.hasPointerCapture(event.pointerId)) {\n            target.releasePointerCapture(event.pointerId);\n            onSlideEnd(event);\n          }\n        })}\n      />\n    );\n  },\n);\n\n/* -------------------------------------------------------------------------------------------------\n * SliderTrack\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRACK_NAME = 'SliderTrack';\n\ntype SliderTrackElement = React.ComponentRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = React.ComponentPropsWithoutRef<typeof Primitive.span>;\ninterface SliderTrackProps extends PrimitiveSpanProps {}\n\nconst SliderTrack = /* @__PURE__ */ React.forwardRef<SliderTrackElement, SliderTrackProps>(\n  function SliderTrack(props: ScopedProps<SliderTrackProps>, forwardedRef) {\n    const { __scopeSlider, ...trackProps } = props;\n    const context = useSliderContext(TRACK_NAME, __scopeSlider);\n    return (\n      <Primitive.span\n        data-disabled={context.disabled ? '' : undefined}\n        data-orientation={context.orientation}\n        {...trackProps}\n        ref={forwardedRef}\n      />\n    );\n  },\n);\n\n/* -------------------------------------------------------------------------------------------------\n * SliderRange\n * -----------------------------------------------------------------------------------------------*/\n\nconst RANGE_NAME = 'SliderRange';\n\ntype SliderRangeElement = React.ComponentRef<typeof Primitive.span>;\ninterface SliderRangeProps extends PrimitiveSpanProps {}\n\nconst SliderRange = /* @__PURE__ */ React.forwardRef<SliderRangeElement, SliderRangeProps>(\n  function SliderRange(props: ScopedProps<SliderRangeProps>, 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<HTMLSpanElement>(null);\n    const composedRefs = useComposedRefs(forwardedRef, ref);\n    const valuesCount = context.values.length;\n    const percentages = context.values.map((value) =>\n      convertValueToPercentage(value, context.min, context.max),\n    );\n    const offsetStart = valuesCount > 1 ? Math.min(...percentages) : 0;\n    const offsetEnd = 100 - Math.max(...percentages);\n\n    return (\n      <Primitive.span\n        data-orientation={context.orientation}\n        data-disabled={context.disabled ? '' : undefined}\n        {...rangeProps}\n        ref={composedRefs}\n        style={{\n          ...props.style,\n          [orientation.startEdge]: offsetStart + '%',\n          [orientation.endEdge]: offsetEnd + '%',\n        }}\n      />\n    );\n  },\n);\n\n/* -------------------------------------------------------------------------------------------------\n * SliderThumb\n * -----------------------------------------------------------------------------------------------*/\n\nconst THUMB_NAME = 'SliderThumb';\n\ntype SliderThumbContextValue = {\n  value: number | undefined;\n  name: string | undefined;\n  form: string | undefined;\n  isFormControl: boolean;\n  index: number;\n  thumb: SliderThumbTriggerElement | null;\n  onThumbChange(thumb: SliderThumbTriggerElement | null): void;\n  percent: number;\n  size: ReturnType<typeof useSize>;\n};\n\nconst [SliderThumbContextProvider, useSliderThumbContext] =\n  createSliderContext<SliderThumbContextValue>(THUMB_NAME);\n\n/* -------------------------------------------------------------------------------------------------\n * SliderThumbProvider\n * -----------------------------------------------------------------------------------------------*/\n\nconst THUMB_PROVIDER_NAME = 'SliderThumbProvider';\n\ninterface SliderThumbProviderProps {\n  name?: string;\n  children?: React.ReactNode;\n}\n\nfunction SliderThumbProvider(props: ScopedProps<SliderThumbProviderProps>) {\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<SliderThumbTriggerElement | null>(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  // We set this to true by default so that events bubble to forms without JS (SSR)\n  const isFormControl = thumb ? !!context.form || !!thumb.closest('form') : true;\n  // We cast because index could be `-1` which would return undefined\n  const value = context.values[index] as number | undefined;\n  const resolvedName =\n    name ?? (context.name ? context.name + (context.values.length > 1 ? '[]' : '') : undefined);\n  const percent =\n    value === undefined ? 0 : convertValueToPercentage(value, context.min, context.max);\n\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\n  const thumbContext: SliderThumbContextValue = {\n    value,\n    name: resolvedName,\n    form: context.form,\n    isFormControl,\n    index,\n    thumb,\n    onThumbChange: setThumb,\n    percent,\n    size,\n  };\n\n  return (\n    <SliderThumbContextProvider scope={__scopeSlider} {...thumbContext}>\n      {isFunction(internal_do_not_use_render) ? internal_do_not_use_render(thumbContext) : children}\n    </SliderThumbContextProvider>\n  );\n}\n\n/* -------------------------------------------------------------------------------------------------\n * SliderThumbTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst THUMB_TRIGGER_NAME = 'SliderThumbTrigger';\n\ntype SliderThumbTriggerElement = React.ComponentRef<typeof Primitive.span>;\ninterface SliderThumbTriggerProps extends PrimitiveSpanProps {}\n\nconst SliderThumbTrigger = /* @__PURE__ */ React.forwardRef<\n  SliderThumbTriggerElement,\n  SliderThumbTriggerProps\n>(\n  // blank line to reduce diff noise\n  function SliderThumbTrigger(props: ScopedProps<SliderThumbTriggerProps>, 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\n      ? getThumbInBoundsOffset(orientationSize, percent, orientation.direction)\n      : 0;\n\n    return (\n      <span\n        style={{\n          transform: 'var(--radix-slider-thumb-transform)',\n          position: 'absolute',\n          [orientation.startEdge]: `calc(${percent}% + ${thumbInBoundsOffset}px)`,\n        }}\n      >\n        <Collection.ItemSlot scope={__scopeSlider}>\n          <Primitive.span\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 ? '' : undefined}\n            tabIndex={context.disabled ? undefined : 0}\n            {...thumbProps}\n            ref={composedRefs}\n            /**\n             * There will be no value on initial render while we work out the index so we hide thumbs\n             * without a value, otherwise SSR will render them in the wrong position before they\n             * snap into the correct position during hydration which would be visually jarring for\n             * slower connections.\n             */\n            style={value === undefined ? { display: 'none' } : props.style}\n            onFocus={composeEventHandlers(props.onFocus, () => {\n              context.valueIndexToChangeRef.current = index;\n            })}\n          />\n        </Collection.ItemSlot>\n      </span>\n    );\n  },\n);\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype SliderThumbElement = SliderThumbTriggerElement;\ninterface SliderThumbProps extends SliderThumbTriggerProps {\n  name?: string;\n}\n\nconst SliderThumb = /* @__PURE__ */ React.forwardRef<SliderThumbElement, SliderThumbProps>(\n  function SliderThumb(props: ScopedProps<SliderThumbProps>, forwardedRef) {\n    const { __scopeSlider, name, ...thumbProps } = props;\n    return (\n      <SliderThumbProvider\n        __scopeSlider={__scopeSlider}\n        name={name}\n        // @ts-expect-error internal render prop\n        internal_do_not_use_render={({ index, isFormControl }: SliderThumbContextValue) => (\n          <>\n            <SliderThumbTrigger\n              {...thumbProps}\n              ref={forwardedRef}\n              // @ts-expect-error\n              __scopeSlider={__scopeSlider}\n            />\n            {isFormControl ? (\n              <SliderBubbleInput\n                key={index}\n                // @ts-expect-error\n                __scopeSlider={__scopeSlider}\n              />\n            ) : null}\n          </>\n        )}\n      />\n    );\n  },\n);\n\n/* -------------------------------------------------------------------------------------------------\n * SliderBubbleInput\n * -----------------------------------------------------------------------------------------------*/\n\nconst BUBBLE_INPUT_NAME = 'SliderBubbleInput';\n\ntype SliderBubbleInputElement = React.ComponentRef<typeof Primitive.input>;\ntype PrimitiveInputProps = React.ComponentPropsWithoutRef<typeof Primitive.input>;\ninterface SliderBubbleInputProps extends Omit<PrimitiveInputProps, 'value'> {}\n\nconst SliderBubbleInput = /* @__PURE__ */ React.forwardRef<\n  SliderBubbleInputElement,\n  SliderBubbleInputProps\n>(\n  // blank line to reduce diff noise\n  function SliderBubbleInput(\n    { __scopeSlider, ...props }: ScopedProps<SliderBubbleInputProps>,\n    forwardedRef,\n  ) {\n    const { value, name, form } = useSliderThumbContext(BUBBLE_INPUT_NAME, __scopeSlider);\n    const ref = React.useRef<SliderBubbleInputElement>(null);\n    const composedRefs = useComposedRefs(ref, forwardedRef);\n    const prevValue = usePrevious(value);\n\n    // Bubble value change to parents (e.g form change event)\n    React.useEffect(() => {\n      const input = ref.current;\n      if (!input) return;\n\n      const inputProto = window.HTMLInputElement.prototype;\n      const descriptor = Object.getOwnPropertyDescriptor(inputProto, 'value') as PropertyDescriptor;\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\n    /**\n     * We purposefully do not use `type=\"hidden\"` here otherwise forms that\n     * wrap it will not be able to access its value via the FormData API.\n     *\n     * We purposefully do not add the `value` attribute here to allow the value\n     * to be set programmatically and bubble to any parent form `onChange` event.\n     * Adding the `value` will cause React to consider the programmatic\n     * dispatch a duplicate and it will get swallowed.\n     */\n    return (\n      <Primitive.input\n        style={{ display: 'none' }}\n        name={name}\n        form={form}\n        {...props}\n        ref={composedRefs}\n        defaultValue={value}\n      />\n    );\n  },\n);\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getNextSortedValues(prevValues: number[] = [], nextValue: number, atIndex: number) {\n  const nextValues = [...prevValues];\n  nextValues[atIndex] = nextValue;\n  return nextValues.sort((a, b) => a - b);\n}\n\nfunction convertValueToPercentage(value: number, min: number, max: number) {\n  const maxSteps = max - min;\n  const percentPerStep = 100 / maxSteps;\n  const percentage = percentPerStep * (value - min);\n  return clamp(percentage, [0, 100]);\n}\n\n/**\n * Returns a label for each thumb when there are two or more thumbs\n */\nfunction getLabel(index: number, totalValues: number) {\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 undefined;\n  }\n}\n\n/**\n * Given a `values` array and a `nextValue`, determine which value in\n * the array is closest to `nextValue` and return its index.\n *\n * @example\n * // returns 1\n * getClosestValueIndex([10, 30], 25);\n */\nfunction getClosestValueIndex(values: number[], nextValue: number) {\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\n/**\n * Offsets the thumb centre point while sliding to ensure it remains\n * within the bounds of the slider when reaching the edges\n */\nfunction getThumbInBoundsOffset(width: number, left: number, direction: number) {\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\n/**\n * Gets an array of steps between each value.\n *\n * @example\n * // returns [1, 9]\n * getStepsBetweenValues([10, 11, 20]);\n */\nfunction getStepsBetweenValues(values: number[]) {\n  return values.slice(0, -1).map((value, index) => values[index + 1]! - value);\n}\n\n/**\n * Verifies the minimum steps between all values is greater than or equal\n * to the expected minimum steps.\n *\n * @example\n * // returns false\n * hasMinStepsBetweenValues([1,2,3], 2);\n *\n * @example\n * // returns true\n * hasMinStepsBetweenValues([1,2,3], 1);\n */\nfunction hasMinStepsBetweenValues(values: number[], minStepsBetweenValues: number) {\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\n// https://github.com/tmcw-up-for-adoption/simple-linear-scale/blob/master/index.js\nfunction linearScale(input: readonly [number, number], output: readonly [number, number]) {\n  return (value: number) => {\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\nfunction getDecimalCount(value: number) {\n  if (!Number.isFinite(value)) return 0;\n\n  const str = value.toString();\n\n  // Numbers with a magnitude below 1e-6 (or very large numbers) are serialized\n  // in scientific notation (e.g. `1e-7`), so we can't just count the digits\n  // after the decimal point.\n  // https://github.com/radix-ui/primitives/issues/3852\n  if (str.includes('e')) {\n    const [coefficient, exponent] = str.split('e');\n    const decimalPart = coefficient!.split('.')[1] || '';\n    const exponentNum = Number(exponent);\n    return Math.max(0, decimalPart.length - exponentNum);\n  }\n\n  const decimalPart = str.split('.')[1];\n  return decimalPart ? decimalPart.length : 0;\n}\n\nfunction roundValue(value: number, decimalCount: number) {\n  const rounder = Math.pow(10, decimalCount);\n  return Math.round(value * rounder) / rounder;\n}\n\nfunction getNextStepValue(\n  value: number,\n  {\n    min,\n    step,\n    direction,\n    multiplier,\n  }: {\n    min: number;\n    step: number;\n    direction: number;\n    multiplier: number;\n  },\n) {\n  const decimalCount = getDecimalCount(step);\n  const stepsFromMin = (value - min) / step;\n  const nearestSteps = Math.round(stepsFromMin);\n  const isAligned =\n    roundValue(nearestSteps * step + min, decimalCount) === roundValue(value, decimalCount);\n\n  let nextSteps: number;\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\n  return roundValue(nextSteps * step + min, decimalCount);\n}\n\nfunction isFunction(value: unknown): value is (...args: any[]) => any {\n  return typeof value === 'function';\n}\n\nexport {\n  createSliderScope,\n  //\n  Slider,\n  SliderTrack,\n  SliderRange,\n  SliderThumb,\n  SliderThumbProvider,\n  SliderThumbTrigger,\n  SliderBubbleInput,\n  //\n  Slider as Root,\n  SliderTrack as Track,\n  SliderRange as Range,\n  SliderThumb as Thumb,\n  SliderThumbProvider as ThumbProvider,\n  SliderThumbTrigger as ThumbTrigger,\n  SliderBubbleInput as BubbleInput,\n};\nexport type {\n  SliderProps,\n  SliderTrackProps,\n  SliderRangeProps,\n  SliderThumbProps,\n  SliderThumbProviderProps,\n  SliderThumbTriggerProps,\n  SliderBubbleInputProps,\n};\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","export const SHADER_CURTAIN_TYPES = [\"plane\", \"sphere\", \"waterPlane\"] as const;\nexport const SHADER_VARIANTS = [\n\t\"defaults\",\n\t\"cosmic\",\n\t\"glass\",\n\t\"positionMix\",\n] as const;\nexport const SHADER_LIGHT_TYPES = [\"3d\", \"env\"] as const;\nexport const SHADER_ENV_PRESETS = [\"city\", \"dawn\", \"lobby\"] as const;\nexport const SHADER_ON_OFF = [\"on\", \"off\"] as const;\nexport const SHADER_RANGE = [\"enabled\", \"disabled\"] as const;\n\nexport type ShaderCurtainConfig = {\n\ttype: (typeof SHADER_CURTAIN_TYPES)[number];\n\tshader: (typeof SHADER_VARIANTS)[number];\n\tanimate: (typeof SHADER_ON_OFF)[number];\n\tuTime: number;\n\tuSpeed: number;\n\tuStrength: number;\n\tuDensity: number;\n\tuFrequency: number;\n\tuAmplitude: number;\n\twireframe: boolean;\n\tloop: (typeof SHADER_ON_OFF)[number];\n\tloopDuration: number;\n\trange: (typeof SHADER_RANGE)[number];\n\trangeStart: number;\n\trangeEnd: number;\n\tpositionX: number;\n\tpositionY: number;\n\tpositionZ: number;\n\trotationX: number;\n\trotationY: number;\n\trotationZ: number;\n\tcolor1: string;\n\tcolor2: string;\n\tcolor3: string;\n\treflection: number;\n\tbrightness: number;\n\tcAzimuthAngle: number;\n\tcPolarAngle: number;\n\tcDistance: number;\n\tcameraZoom: number;\n\tfov: number;\n\tzoomOut: boolean;\n\tlightType: (typeof SHADER_LIGHT_TYPES)[number];\n\tenvPreset: (typeof SHADER_ENV_PRESETS)[number];\n\tgrain: (typeof SHADER_ON_OFF)[number];\n\tgrainBlending: number;\n\tpixelDensity: number;\n};\n\nconst PRESET_BASE = {\n\tshader: \"defaults\",\n\tanimate: \"on\",\n\twireframe: false,\n\tloop: \"on\",\n\tloopDuration: 10,\n\trange: \"disabled\",\n\trangeStart: 0,\n\trangeEnd: 40,\n\tfov: 45,\n\tzoomOut: false,\n\tgrainBlending: 0.3,\n\tpixelDensity: 1,\n} as const satisfies Partial<ShaderCurtainConfig>;\n\nexport const DEFAULT_SHADER_CURTAIN_CONFIG: ShaderCurtainConfig = {\n\t...PRESET_BASE,\n\ttype: \"plane\",\n\tuTime: 0,\n\tuSpeed: 0.4,\n\tuStrength: 4,\n\tuDensity: 1.3,\n\tuFrequency: 5.5,\n\tuAmplitude: 1,\n\tpositionX: -1.4,\n\tpositionY: 0,\n\tpositionZ: 0,\n\trotationX: 0,\n\trotationY: 10,\n\trotationZ: 50,\n\tcolor1: \"#ff5005\",\n\tcolor2: \"#dbba95\",\n\tcolor3: \"#d0bce1\",\n\treflection: 0.1,\n\tbrightness: 1.2,\n\tcAzimuthAngle: 180,\n\tcPolarAngle: 90,\n\tcDistance: 3.6,\n\tcameraZoom: 1,\n\tlightType: \"3d\",\n\tenvPreset: \"city\",\n\tgrain: \"on\",\n};\n\nexport type ShaderCurtainPreset = {\n\tid: string;\n\ttitle: string;\n\tconfig: ShaderCurtainConfig;\n};\n\nexport const SHADER_CURTAIN_PRESETS: readonly ShaderCurtainPreset[] = [\n\t{ id: \"halo\", title: \"Halo\", config: { ...DEFAULT_SHADER_CURTAIN_CONFIG } },\n\t{\n\t\tid: \"pensive\",\n\t\ttitle: \"Pensive\",\n\t\tconfig: {\n\t\t\t...PRESET_BASE,\n\t\t\ttype: \"sphere\",\n\t\t\tuTime: 0,\n\t\t\tuSpeed: 0.3,\n\t\t\tuStrength: 0.4,\n\t\t\tuDensity: 0.8,\n\t\t\tuFrequency: 5.5,\n\t\t\tuAmplitude: 7,\n\t\t\tpositionX: 0,\n\t\t\tpositionY: 0,\n\t\t\tpositionZ: 0,\n\t\t\trotationX: 0,\n\t\t\trotationY: 0,\n\t\t\trotationZ: 140,\n\t\t\tcolor1: \"#809bd6\",\n\t\t\tcolor2: \"#910aff\",\n\t\t\tcolor3: \"#af38ff\",\n\t\t\treflection: 0.5,\n\t\t\tbrightness: 1.5,\n\t\t\tcAzimuthAngle: 250,\n\t\t\tcPolarAngle: 140,\n\t\t\tcDistance: 1.5,\n\t\t\tcameraZoom: 12.5,\n\t\t\tlightType: \"3d\",\n\t\t\tenvPreset: \"city\",\n\t\t\tgrain: \"on\",\n\t\t},\n\t},\n\t{\n\t\tid: \"mint\",\n\t\ttitle: \"Mint\",\n\t\tconfig: {\n\t\t\t...PRESET_BASE,\n\t\t\ttype: \"waterPlane\",\n\t\t\tuTime: 0,\n\t\t\tuSpeed: 0.2,\n\t\t\tuStrength: 3.4,\n\t\t\tuDensity: 1.2,\n\t\t\tuFrequency: 0,\n\t\t\tuAmplitude: 0,\n\t\t\tpositionX: 0,\n\t\t\tpositionY: 0.9,\n\t\t\tpositionZ: -0.3,\n\t\t\trotationX: 45,\n\t\t\trotationY: 0,\n\t\t\trotationZ: 0,\n\t\t\tcolor1: \"#94ffd1\",\n\t\t\tcolor2: \"#6bf5ff\",\n\t\t\tcolor3: \"#ffffff\",\n\t\t\treflection: 0.1,\n\t\t\tbrightness: 1.2,\n\t\t\tcAzimuthAngle: 170,\n\t\t\tcPolarAngle: 70,\n\t\t\tcDistance: 4.4,\n\t\t\tcameraZoom: 1,\n\t\t\tlightType: \"3d\",\n\t\t\tenvPreset: \"city\",\n\t\t\tgrain: \"off\",\n\t\t},\n\t},\n\t{\n\t\tid: \"interstella\",\n\t\ttitle: \"Interstella\",\n\t\tconfig: {\n\t\t\t...PRESET_BASE,\n\t\t\ttype: \"sphere\",\n\t\t\tuTime: 0,\n\t\t\tuSpeed: 0.3,\n\t\t\tuStrength: 0.3,\n\t\t\tuDensity: 0.8,\n\t\t\tuFrequency: 5.5,\n\t\t\tuAmplitude: 3.2,\n\t\t\tpositionX: -0.1,\n\t\t\tpositionY: 0,\n\t\t\tpositionZ: 0,\n\t\t\trotationX: 0,\n\t\t\trotationY: 130,\n\t\t\trotationZ: 70,\n\t\t\tcolor1: \"#73bfc4\",\n\t\t\tcolor2: \"#ff810a\",\n\t\t\tcolor3: \"#8da0ce\",\n\t\t\treflection: 0.4,\n\t\t\tbrightness: 0.8,\n\t\t\tcAzimuthAngle: 270,\n\t\t\tcPolarAngle: 180,\n\t\t\tcDistance: 0.5,\n\t\t\tcameraZoom: 15.1,\n\t\t\tlightType: \"env\",\n\t\t\tenvPreset: \"city\",\n\t\t\tgrain: \"on\",\n\t\t},\n\t},\n\t{\n\t\tid: \"nightyNight\",\n\t\ttitle: \"Nighty night\",\n\t\tconfig: {\n\t\t\t...PRESET_BASE,\n\t\t\ttype: \"waterPlane\",\n\t\t\tuTime: 8,\n\t\t\tuSpeed: 0.3,\n\t\t\tuStrength: 1.5,\n\t\t\tuDensity: 1.5,\n\t\t\tuFrequency: 0,\n\t\t\tuAmplitude: 0,\n\t\t\tpositionX: 0,\n\t\t\tpositionY: 0,\n\t\t\tpositionZ: 0,\n\t\t\trotationX: 50,\n\t\t\trotationY: 0,\n\t\t\trotationZ: -60,\n\t\t\tcolor1: \"#606080\",\n\t\t\tcolor2: \"#8d7dca\",\n\t\t\tcolor3: \"#212121\",\n\t\t\treflection: 0.1,\n\t\t\tbrightness: 1,\n\t\t\tcAzimuthAngle: 180,\n\t\t\tcPolarAngle: 80,\n\t\t\tcDistance: 2.8,\n\t\t\tcameraZoom: 9.1,\n\t\t\tlightType: \"3d\",\n\t\t\tenvPreset: \"city\",\n\t\t\tgrain: \"on\",\n\t\t},\n\t},\n\t{\n\t\tid: \"violaOrientalis\",\n\t\ttitle: \"Viola orientalis\",\n\t\tconfig: {\n\t\t\t...PRESET_BASE,\n\t\t\ttype: \"sphere\",\n\t\t\tuTime: 0,\n\t\t\tuSpeed: 0.1,\n\t\t\tuStrength: 1,\n\t\t\tuDensity: 1.1,\n\t\t\tuFrequency: 5.5,\n\t\t\tuAmplitude: 1.4,\n\t\t\tpositionX: 0,\n\t\t\tpositionY: 0,\n\t\t\tpositionZ: 0,\n\t\t\trotationX: 0,\n\t\t\trotationY: 0,\n\t\t\trotationZ: 0,\n\t\t\tcolor1: \"#ffffff\",\n\t\t\tcolor2: \"#ffbb00\",\n\t\t\tcolor3: \"#0700ff\",\n\t\t\treflection: 0.1,\n\t\t\tbrightness: 1.1,\n\t\t\tcAzimuthAngle: 0,\n\t\t\tcPolarAngle: 140,\n\t\t\tcDistance: 7.1,\n\t\t\tcameraZoom: 17.3,\n\t\t\tlightType: \"3d\",\n\t\t\tenvPreset: \"city\",\n\t\t\tgrain: \"off\",\n\t\t},\n\t},\n\t{\n\t\tid: \"universe\",\n\t\ttitle: \"Universe\",\n\t\tconfig: {\n\t\t\t...PRESET_BASE,\n\t\t\ttype: \"waterPlane\",\n\t\t\tuTime: 0.2,\n\t\t\tuSpeed: 0.1,\n\t\t\tuStrength: 2.4,\n\t\t\tuDensity: 1.1,\n\t\t\tuFrequency: 5.5,\n\t\t\tuAmplitude: 0,\n\t\t\tpositionX: -0.5,\n\t\t\tpositionY: 0.1,\n\t\t\tpositionZ: 0,\n\t\t\trotationX: 0,\n\t\t\trotationY: 0,\n\t\t\trotationZ: 235,\n\t\t\tcolor1: \"#5606ff\",\n\t\t\tcolor2: \"#fe8989\",\n\t\t\tcolor3: \"#000000\",\n\t\t\treflection: 0.1,\n\t\t\tbrightness: 1.1,\n\t\t\tcAzimuthAngle: 180,\n\t\t\tcPolarAngle: 115,\n\t\t\tcDistance: 3.9,\n\t\t\tcameraZoom: 1,\n\t\t\tlightType: \"3d\",\n\t\t\tenvPreset: \"city\",\n\t\t\tgrain: \"off\",\n\t\t},\n\t},\n\t{\n\t\tid: \"sunset\",\n\t\ttitle: \"Sunset\",\n\t\tconfig: {\n\t\t\t...PRESET_BASE,\n\t\t\ttype: \"sphere\",\n\t\t\tuTime: 0,\n\t\t\tuSpeed: 0.1,\n\t\t\tuStrength: 0.4,\n\t\t\tuDensity: 1.1,\n\t\t\tuFrequency: 5.5,\n\t\t\tuAmplitude: 1.4,\n\t\t\tpositionX: 0,\n\t\t\tpositionY: -0.15,\n\t\t\tpositionZ: 0,\n\t\t\trotationX: 0,\n\t\t\trotationY: 0,\n\t\t\trotationZ: 0,\n\t\t\tcolor1: \"#ff7a33\",\n\t\t\tcolor2: \"#33a0ff\",\n\t\t\tcolor3: \"#ffc53d\",\n\t\t\treflection: 0.1,\n\t\t\tbrightness: 1.5,\n\t\t\tcAzimuthAngle: 60,\n\t\t\tcPolarAngle: 90,\n\t\t\tcDistance: 7.1,\n\t\t\tcameraZoom: 15.3,\n\t\t\tlightType: \"3d\",\n\t\t\tenvPreset: \"dawn\",\n\t\t\tgrain: \"off\",\n\t\t},\n\t},\n\t{\n\t\tid: \"mandarin\",\n\t\ttitle: \"Mandarin\",\n\t\tconfig: {\n\t\t\t...PRESET_BASE,\n\t\t\ttype: \"waterPlane\",\n\t\t\tuTime: 0.2,\n\t\t\tuSpeed: 0.2,\n\t\t\tuStrength: 3,\n\t\t\tuDensity: 1.8,\n\t\t\tuFrequency: 5.5,\n\t\t\tuAmplitude: 0,\n\t\t\tpositionX: 0,\n\t\t\tpositionY: -2.1,\n\t\t\tpositionZ: 0,\n\t\t\trotationX: 0,\n\t\t\trotationY: 0,\n\t\t\trotationZ: 225,\n\t\t\tcolor1: \"#ff6a1a\",\n\t\t\tcolor2: \"#c73c00\",\n\t\t\tcolor3: \"#fd4912\",\n\t\t\treflection: 0.1,\n\t\t\tbrightness: 1.2,\n\t\t\tcAzimuthAngle: 180,\n\t\t\tcPolarAngle: 95,\n\t\t\tcDistance: 2.4,\n\t\t\tcameraZoom: 1,\n\t\t\tlightType: \"3d\",\n\t\t\tenvPreset: \"city\",\n\t\t\tgrain: \"off\",\n\t\t},\n\t},\n\t{\n\t\tid: \"cottonCandy\",\n\t\ttitle: \"Cotton candy\",\n\t\tconfig: {\n\t\t\t...PRESET_BASE,\n\t\t\ttype: \"waterPlane\",\n\t\t\tuTime: 0.2,\n\t\t\tuSpeed: 0.3,\n\t\t\tuStrength: 3,\n\t\t\tuDensity: 1,\n\t\t\tuFrequency: 5.5,\n\t\t\tuAmplitude: 0,\n\t\t\tpositionX: 0,\n\t\t\tpositionY: 1.8,\n\t\t\tpositionZ: 0,\n\t\t\trotationX: 0,\n\t\t\trotationY: 0,\n\t\t\trotationZ: -90,\n\t\t\tcolor1: \"#ebedff\",\n\t\t\tcolor2: \"#f3f2f8\",\n\t\t\tcolor3: \"#dbf8ff\",\n\t\t\treflection: 0.1,\n\t\t\tbrightness: 1.2,\n\t\t\tcAzimuthAngle: 180,\n\t\t\tcPolarAngle: 120,\n\t\t\tcDistance: 2.9,\n\t\t\tcameraZoom: 1,\n\t\t\tlightType: \"3d\",\n\t\t\tenvPreset: \"city\",\n\t\t\tgrain: \"off\",\n\t\t},\n\t},\n];\n\nconst HEX = /^#([0-9a-fA-F]{6})$/;\nconst ON_OFF = new Set<string>(SHADER_ON_OFF);\nconst TYPES = new Set<string>(SHADER_CURTAIN_TYPES);\nconst VARIANTS = new Set<string>(SHADER_VARIANTS);\nconst LIGHTS = new Set<string>(SHADER_LIGHT_TYPES);\nconst ENVS = new Set<string>(SHADER_ENV_PRESETS);\nconst RANGES = new Set<string>(SHADER_RANGE);\n\nfunction clamp(value: number, min: number, max: number): number {\n\treturn Math.min(max, Math.max(min, value));\n}\n\nfunction numberParam(\n\traw: string | null,\n\tfallback: number,\n\tmin: number,\n\tmax: number,\n): number {\n\tif (raw == null || raw === \"\") return fallback;\n\tconst parsed = Number(raw);\n\tif (!Number.isFinite(parsed)) return fallback;\n\treturn clamp(parsed, min, max);\n}\n\nfunction hexParam(raw: string | null, fallback: string): string {\n\tif (!raw) return fallback;\n\tconst value = raw.startsWith(\"#\") ? raw : `#${raw}`;\n\treturn HEX.test(value) ? value : fallback;\n}\n\nfunction enumParam<T extends string>(\n\traw: string | null,\n\tallowed: Set<string>,\n\tfallback: T,\n): T {\n\tif (!raw) return fallback;\n\treturn allowed.has(raw) ? (raw as T) : fallback;\n}\n\nfunction boolParam(raw: string | null, fallback: boolean): boolean {\n\tif (raw == null) return fallback;\n\tif (raw === \"true\" || raw === \"1\" || raw === \"on\") return true;\n\tif (raw === \"false\" || raw === \"0\" || raw === \"off\") return false;\n\treturn fallback;\n}\n\nexport function mergeShaderCurtainConfig(\n\tpartial?: Partial<ShaderCurtainConfig> | null,\n): ShaderCurtainConfig {\n\treturn { ...DEFAULT_SHADER_CURTAIN_CONFIG, ...partial };\n}\n\nexport function parseShaderGradientUrl(\n\tinput: string,\n): ShaderCurtainConfig | null {\n\tconst trimmed = input.trim();\n\tif (!trimmed) return null;\n\tlet url: URL;\n\ttry {\n\t\turl = new URL(trimmed);\n\t} catch {\n\t\ttry {\n\t\t\turl = new URL(`https://www.shadergradient.co/customize?${trimmed}`);\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\tconst q = url.searchParams;\n\tconst known = [\n\t\t\"type\",\n\t\t\"shader\",\n\t\t\"animate\",\n\t\t\"color1\",\n\t\t\"uSpeed\",\n\t\t\"uStrength\",\n\t\t\"cDistance\",\n\t\t\"lightType\",\n\t];\n\tif (!known.some((key) => q.has(key))) return null;\n\tconst base = DEFAULT_SHADER_CURTAIN_CONFIG;\n\treturn {\n\t\ttype: enumParam(q.get(\"type\"), TYPES, base.type),\n\t\tshader: enumParam(q.get(\"shader\"), VARIANTS, base.shader),\n\t\tanimate: enumParam(q.get(\"animate\"), ON_OFF, base.animate),\n\t\tuTime: numberParam(q.get(\"uTime\"), base.uTime, 0, 40),\n\t\tuSpeed: numberParam(q.get(\"uSpeed\"), base.uSpeed, 0, 4),\n\t\tuStrength: numberParam(q.get(\"uStrength\"), base.uStrength, 0, 10),\n\t\tuDensity: numberParam(q.get(\"uDensity\"), base.uDensity, 0, 8),\n\t\tuFrequency: numberParam(q.get(\"uFrequency\"), base.uFrequency, 0, 12),\n\t\tuAmplitude: numberParam(q.get(\"uAmplitude\"), base.uAmplitude, 0, 8),\n\t\twireframe: boolParam(q.get(\"wireframe\"), base.wireframe),\n\t\tloop: enumParam(q.get(\"loop\"), ON_OFF, base.loop),\n\t\tloopDuration: numberParam(q.get(\"loopDuration\"), base.loopDuration, 1, 60),\n\t\trange: enumParam(q.get(\"range\"), RANGES, base.range),\n\t\trangeStart: numberParam(q.get(\"rangeStart\"), base.rangeStart, 0, 40),\n\t\trangeEnd: numberParam(q.get(\"rangeEnd\"), base.rangeEnd, 0, 40),\n\t\tpositionX: numberParam(q.get(\"positionX\"), base.positionX, -20, 20),\n\t\tpositionY: numberParam(q.get(\"positionY\"), base.positionY, -20, 20),\n\t\tpositionZ: numberParam(q.get(\"positionZ\"), base.positionZ, -20, 20),\n\t\trotationX: numberParam(q.get(\"rotationX\"), base.rotationX, -360, 360),\n\t\trotationY: numberParam(q.get(\"rotationY\"), base.rotationY, -360, 360),\n\t\trotationZ: numberParam(q.get(\"rotationZ\"), base.rotationZ, -360, 360),\n\t\tcolor1: hexParam(q.get(\"color1\"), base.color1),\n\t\tcolor2: hexParam(q.get(\"color2\"), base.color2),\n\t\tcolor3: hexParam(q.get(\"color3\"), base.color3),\n\t\treflection: numberParam(q.get(\"reflection\"), base.reflection, 0, 1),\n\t\tbrightness: numberParam(q.get(\"brightness\"), base.brightness, 0, 4),\n\t\tcAzimuthAngle: numberParam(\n\t\t\tq.get(\"cAzimuthAngle\"),\n\t\t\tbase.cAzimuthAngle,\n\t\t\t0,\n\t\t\t360,\n\t\t),\n\t\tcPolarAngle: numberParam(q.get(\"cPolarAngle\"), base.cPolarAngle, 0, 180),\n\t\tcDistance: numberParam(q.get(\"cDistance\"), base.cDistance, 0.1, 40),\n\t\tcameraZoom: numberParam(q.get(\"cameraZoom\"), base.cameraZoom, 0.1, 50),\n\t\tfov: numberParam(q.get(\"fov\"), base.fov, 10, 120),\n\t\tzoomOut: boolParam(q.get(\"zoomOut\"), base.zoomOut),\n\t\tlightType: enumParam(q.get(\"lightType\"), LIGHTS, base.lightType),\n\t\tenvPreset: enumParam(q.get(\"envPreset\"), ENVS, base.envPreset),\n\t\tgrain: enumParam(q.get(\"grain\"), ON_OFF, base.grain),\n\t\tgrainBlending: numberParam(\n\t\t\tq.get(\"grainBlending\"),\n\t\t\tbase.grainBlending,\n\t\t\t0,\n\t\t\t1,\n\t\t),\n\t\tpixelDensity: numberParam(q.get(\"pixelDensity\"), base.pixelDensity, 0.5, 2),\n\t};\n}\n\nexport function toShaderGradientUrl(config: ShaderCurtainConfig): string {\n\tconst params = new URLSearchParams();\n\t(\n\t\tObject.keys(DEFAULT_SHADER_CURTAIN_CONFIG) as (keyof ShaderCurtainConfig)[]\n\t).forEach((key) => {\n\t\tparams.set(key, String(config[key]));\n\t});\n\treturn `https://www.shadergradient.co/customize?${params.toString()}`;\n}\n\nexport function isShaderCurtainKind(kind: string): kind is \"shader\" {\n\treturn kind === \"shader\";\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport {\n\tmergeShaderCurtainConfig,\n\ttype ShaderCurtainConfig,\n} from \"./shader-config\";\n\nexport type ShaderCurtainProps = {\n\tconfig: ShaderCurtainConfig | Partial<ShaderCurtainConfig>;\n\tposterUrl?: string | null;\n\tenvBasePath?: string;\n\tclassName?: string;\n\t/** Editor only — needed for canvas.toBlob capture. */\n\tpreserveDrawingBuffer?: boolean;\n\treducedMotion?: boolean;\n\talt?: string;\n};\n\ntype ShaderGradientModule = {\n\tShaderGradientCanvas: React.ComponentType<{\n\t\tchildren?: React.ReactNode;\n\t\tstyle?: React.CSSProperties;\n\t\tpixelDensity?: number;\n\t\tfov?: number;\n\t\tenvBasePath?: string;\n\t\tpreserveDrawingBuffer?: boolean;\n\t\tlazyLoad?: boolean;\n\t}>;\n\tShaderGradient: React.ComponentType<\n\t\tRecord<string, unknown> & { control?: string }\n\t>;\n};\n\nfunction webglAvailable(): boolean {\n\tif (typeof document === \"undefined\") return false;\n\ttry {\n\t\tconst canvas = document.createElement(\"canvas\");\n\t\treturn Boolean(\n\t\t\tcanvas.getContext(\"webgl\") || canvas.getContext(\"experimental-webgl\"),\n\t\t);\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction Poster({\n\turl,\n\talt,\n\tclassName,\n}: {\n\turl?: string | null;\n\talt: string;\n\tclassName?: string;\n}) {\n\tif (!url) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\"h-full w-full bg-zinc-950\", className)}\n\t\t\t\taria-hidden={alt ? undefined : true}\n\t\t\t/>\n\t\t);\n\t}\n\treturn (\n\t\t<img\n\t\t\tsrc={url}\n\t\t\talt={alt}\n\t\t\tclassName={cn(\"h-full w-full object-cover\", className)}\n\t\t/>\n\t);\n}\n\n/**\n * Live ShaderGradient canvas with a poster fallback while the optional\n * WebGL peers load, when WebGL is missing, or when motion is reduced.\n */\nexport function ShaderCurtain({\n\tconfig,\n\tposterUrl,\n\tenvBasePath,\n\tclassName,\n\tpreserveDrawingBuffer = false,\n\treducedMotion = false,\n\talt = \"\",\n}: ShaderCurtainProps) {\n\tconst [module, setModule] = React.useState<ShaderGradientModule | null>(null);\n\tconst [failed, setFailed] = React.useState(false);\n\tconst resolved = mergeShaderCurtainConfig(config);\n\n\tReact.useEffect(() => {\n\t\tif (reducedMotion || !webglAvailable()) {\n\t\t\tsetFailed(true);\n\t\t\treturn;\n\t\t}\n\t\tlet cancelled = false;\n\t\tvoid import(/* turbopackOptional: true */ \"@shadergradient/react\")\n\t\t\t.then((loaded) => {\n\t\t\t\tif (cancelled) return;\n\t\t\t\tif (!loaded.ShaderGradientCanvas || !loaded.ShaderGradient) {\n\t\t\t\t\tsetFailed(true);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tsetModule(loaded as ShaderGradientModule);\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\tif (!cancelled) setFailed(true);\n\t\t\t});\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t}, [reducedMotion]);\n\n\tif (failed || reducedMotion || !module) {\n\t\treturn <Poster url={posterUrl} alt={alt} className={className} />;\n\t}\n\n\tconst { ShaderGradientCanvas, ShaderGradient } = module;\n\tconst animate = resolved.animate === \"off\" || reducedMotion ? \"off\" : \"on\";\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"relative h-full w-full overflow-hidden [container-type:size]\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<div className=\"absolute top-1/2 left-1/2 h-[max(100cqh,56.25cqw)] w-[max(100cqw,177.778cqh)] -translate-x-1/2 -translate-y-1/2\">\n\t\t\t\t<ShaderGradientCanvas\n\t\t\t\t\tstyle={{ position: \"absolute\", inset: 0 }}\n\t\t\t\t\tpixelDensity={resolved.pixelDensity}\n\t\t\t\t\tfov={resolved.fov}\n\t\t\t\t\tenvBasePath={envBasePath}\n\t\t\t\t\tpreserveDrawingBuffer={preserveDrawingBuffer}\n\t\t\t\t>\n\t\t\t\t\t<ShaderGradient\n\t\t\t\t\t\tcontrol=\"props\"\n\t\t\t\t\t\ttype={resolved.type}\n\t\t\t\t\t\tshader={resolved.shader}\n\t\t\t\t\t\tanimate={animate}\n\t\t\t\t\t\tuTime={resolved.uTime}\n\t\t\t\t\t\tuSpeed={resolved.uSpeed}\n\t\t\t\t\t\tuStrength={resolved.uStrength}\n\t\t\t\t\t\tuDensity={resolved.uDensity}\n\t\t\t\t\t\tuFrequency={resolved.uFrequency}\n\t\t\t\t\t\tuAmplitude={resolved.uAmplitude}\n\t\t\t\t\t\twireframe={resolved.wireframe}\n\t\t\t\t\t\tloop={resolved.loop}\n\t\t\t\t\t\tloopDuration={resolved.loopDuration}\n\t\t\t\t\t\trange={resolved.range}\n\t\t\t\t\t\trangeStart={resolved.rangeStart}\n\t\t\t\t\t\trangeEnd={resolved.rangeEnd}\n\t\t\t\t\t\tpositionX={resolved.positionX}\n\t\t\t\t\t\tpositionY={resolved.positionY}\n\t\t\t\t\t\tpositionZ={resolved.positionZ}\n\t\t\t\t\t\trotationX={resolved.rotationX}\n\t\t\t\t\t\trotationY={resolved.rotationY}\n\t\t\t\t\t\trotationZ={resolved.rotationZ}\n\t\t\t\t\t\tcolor1={resolved.color1}\n\t\t\t\t\t\tcolor2={resolved.color2}\n\t\t\t\t\t\tcolor3={resolved.color3}\n\t\t\t\t\t\treflection={resolved.reflection}\n\t\t\t\t\t\tbrightness={resolved.brightness}\n\t\t\t\t\t\tcAzimuthAngle={resolved.cAzimuthAngle}\n\t\t\t\t\t\tcPolarAngle={resolved.cPolarAngle}\n\t\t\t\t\t\tcDistance={resolved.cDistance}\n\t\t\t\t\t\tcameraZoom={resolved.cameraZoom}\n\t\t\t\t\t\tzoomOut={resolved.zoomOut}\n\t\t\t\t\t\tlightType={resolved.lightType}\n\t\t\t\t\t\tenvPreset={resolved.envPreset}\n\t\t\t\t\t\tgrain={resolved.grain}\n\t\t\t\t\t\tgrainBlending={resolved.grainBlending}\n\t\t\t\t\t/>\n\t\t\t\t</ShaderGradientCanvas>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport { Play, Volume2, VolumeX } from \"lucide-react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { ShaderCurtain } from \"./ShaderCurtain\";\nimport {\n\tmergeShaderCurtainConfig,\n\ttype ShaderCurtainConfig,\n} from \"./shader-config\";\n\nexport type CurtainKind = \"image\" | \"video\" | \"shader\";\n\nexport interface CurtainStageLabels {\n\tplay?: string;\n\ttapToUnmute?: string;\n\tmute?: string;\n\tunmute?: string;\n}\n\nexport interface CurtainStageProps {\n\tkind: CurtainKind;\n\turl: string;\n\talt?: string;\n\tclassName?: string;\n\tconfig?: ShaderCurtainConfig;\n\tenvBasePath?: string;\n\t/** When true, video curtains show a static frame instead of looping. */\n\treducedMotion?: boolean;\n\t/**\n\t * Waiting-room only. Starts muted, then offers tap-to-unmute when the\n\t * file has (or may have) an audio track. Picker tiles leave this off.\n\t */\n\tallowSound?: boolean;\n\tlabels?: CurtainStageLabels;\n}\n\nconst DEFAULT_LABELS: Required<CurtainStageLabels> = {\n\tplay: \"Play\",\n\ttapToUnmute: \"Tap to unmute\",\n\tmute: \"Mute\",\n\tunmute: \"Unmute\",\n};\n\nconst CURTAIN_VIDEO_STYLE = `\n.livo-curtain-video::-webkit-media-controls-start-playback-button {\n\tdisplay: none !important;\n\t-webkit-appearance: none;\n}\n.livo-curtain-video::-webkit-media-controls {\n\tdisplay: none !important;\n}\n`;\n\ntype PlaybackState = \"pending\" | \"playing\" | \"blocked\";\ntype AudioPresence = \"unknown\" | \"yes\" | \"no\";\n\ntype ProbedVideo = HTMLVideoElement & {\n\tmozHasAudio?: boolean;\n\twebkitAudioDecodedByteCount?: number;\n\taudioTracks?: { length: number };\n};\n\nfunction isAudioTrackList(\n\tvalue: ProbedVideo[\"audioTracks\"],\n): value is { length: number } {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\ttypeof (value as { getTrackById?: unknown }).getTrackById === \"function\"\n\t);\n}\n\nfunction probeVideoAudio(el: HTMLVideoElement): AudioPresence {\n\tconst video = el as ProbedVideo;\n\tif (typeof video.mozHasAudio === \"boolean\") {\n\t\treturn video.mozHasAudio ? \"yes\" : \"no\";\n\t}\n\tif (\n\t\ttypeof video.webkitAudioDecodedByteCount === \"number\" &&\n\t\tvideo.webkitAudioDecodedByteCount > 0\n\t) {\n\t\treturn \"yes\";\n\t}\n\tif (isAudioTrackList(video.audioTracks)) {\n\t\treturn video.audioTracks.length > 0 ? \"yes\" : \"no\";\n\t}\n\treturn \"unknown\";\n}\n\nfunction usePrefersReducedMotion(): boolean {\n\tconst [reduced, setReduced] = React.useState(false);\n\tReact.useEffect(() => {\n\t\tconst media = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n\t\tconst sync = () => setReduced(media.matches);\n\t\tsync();\n\t\tmedia.addEventListener(\"change\", sync);\n\t\treturn () => media.removeEventListener(\"change\", sync);\n\t}, []);\n\treturn reduced;\n}\n\nfunction CurtainVideo({\n\turl,\n\talt,\n\tclassName,\n\tfreeze,\n\tallowSound,\n\tlabels,\n}: {\n\turl: string;\n\talt: string;\n\tclassName?: string;\n\tfreeze: boolean;\n\tallowSound: boolean;\n\tlabels: Required<CurtainStageLabels>;\n}) {\n\tconst videoRef = React.useRef<HTMLVideoElement>(null);\n\tconst [playback, setPlayback] = React.useState<PlaybackState>(\"pending\");\n\tconst [muted, setMuted] = React.useState(true);\n\tconst [audio, setAudio] = React.useState<AudioPresence>(\"unknown\");\n\n\tReact.useEffect(() => {\n\t\tconst el = videoRef.current;\n\t\tif (!el) return;\n\n\t\tel.setAttribute(\"webkit-playsinline\", \"\");\n\t\tel.muted = true;\n\t\tsetMuted(true);\n\t\tsetAudio(\"unknown\");\n\t\tsetPlayback(\"pending\");\n\n\t\tif (freeze) {\n\t\t\tel.pause();\n\t\t\treturn;\n\t\t}\n\n\t\tlet cancelled = false;\n\n\t\tconst applyAudio = () => {\n\t\t\tconst next = probeVideoAudio(el);\n\t\t\tif (next !== \"unknown\") setAudio(next);\n\t\t};\n\n\t\tconst tryPlay = () => {\n\t\t\tif (cancelled) return;\n\t\t\tvoid el.play().then(\n\t\t\t\t() => {\n\t\t\t\t\tif (cancelled) return;\n\t\t\t\t\tsetPlayback(\"playing\");\n\t\t\t\t\tapplyAudio();\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tif (!cancelled && el.paused) setPlayback(\"blocked\");\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\n\t\ttryPlay();\n\t\tel.addEventListener(\"canplay\", tryPlay);\n\t\tel.addEventListener(\"timeupdate\", applyAudio);\n\t\tel.addEventListener(\"loadedmetadata\", applyAudio);\n\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t\tel.removeEventListener(\"canplay\", tryPlay);\n\t\t\tel.removeEventListener(\"timeupdate\", applyAudio);\n\t\t\tel.removeEventListener(\"loadedmetadata\", applyAudio);\n\t\t};\n\t}, [url, freeze]);\n\n\tconst startPlayback = React.useCallback(() => {\n\t\tconst el = videoRef.current;\n\t\tif (!el) return;\n\t\tel.muted = true;\n\t\tsetMuted(true);\n\t\tvoid el.play().then(\n\t\t\t() => {\n\t\t\t\tsetPlayback(\"playing\");\n\t\t\t\tconst next = probeVideoAudio(el);\n\t\t\t\tif (next !== \"unknown\") setAudio(next);\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tif (el.paused) setPlayback(\"blocked\");\n\t\t\t},\n\t\t);\n\t}, []);\n\n\tconst setVideoMuted = React.useCallback((next: boolean) => {\n\t\tconst el = videoRef.current;\n\t\tif (el) el.muted = next;\n\t\tsetMuted(next);\n\t}, []);\n\n\tconst showUnmute =\n\t\tallowSound && !freeze && playback === \"playing\" && muted && audio !== \"no\";\n\tconst showMute = allowSound && !freeze && playback === \"playing\" && !muted;\n\n\treturn (\n\t\t<div className={cn(\"relative h-full w-full\", className)}>\n\t\t\t<style>{CURTAIN_VIDEO_STYLE}</style>\n\t\t\t<video\n\t\t\t\tref={videoRef}\n\t\t\t\tsrc={url}\n\t\t\t\tclassName=\"livo-curtain-video h-full w-full object-cover\"\n\t\t\t\tautoPlay={!freeze}\n\t\t\t\tmuted={muted}\n\t\t\t\tloop={!freeze}\n\t\t\t\tplaysInline\n\t\t\t\tpreload={freeze ? \"metadata\" : undefined}\n\t\t\t\taria-hidden={alt ? undefined : true}\n\t\t\t/>\n\t\t\t{playback === \"blocked\" && !freeze ? (\n\t\t\t\t<div className=\"absolute inset-0 flex items-center justify-center bg-black/40\">\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\taria-label={labels.play}\n\t\t\t\t\t\tonClick={startPlayback}\n\t\t\t\t\t\tclassName=\"flex size-16 items-center justify-center rounded-full bg-white/20 backdrop-blur-sm transition hover:bg-white/30\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Play className=\"size-8 translate-x-0.5\" fill=\"currentColor\" />\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t\t{showUnmute ? (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={() => setVideoMuted(false)}\n\t\t\t\t\tclassName=\"absolute top-3 right-3 z-20 flex items-center gap-1.5 rounded-full bg-black/70 px-3 py-1.5 text-xs text-white backdrop-blur-sm transition hover:bg-black/90\"\n\t\t\t\t>\n\t\t\t\t\t<VolumeX className=\"size-4\" />\n\t\t\t\t\t{labels.tapToUnmute}\n\t\t\t\t</button>\n\t\t\t) : null}\n\t\t\t{showMute ? (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\taria-label={labels.mute}\n\t\t\t\t\tonClick={() => setVideoMuted(true)}\n\t\t\t\t\tclassName=\"absolute top-3 right-3 z-20 flex items-center gap-1.5 rounded-full bg-black/70 px-3 py-1.5 text-xs text-white backdrop-blur-sm transition hover:bg-black/90\"\n\t\t\t\t>\n\t\t\t\t\t<Volume2 className=\"size-4\" />\n\t\t\t\t</button>\n\t\t\t) : null}\n\t\t</div>\n\t);\n}\n\n/**\n * Waiting-room backdrop: a still image or a looping video that starts muted.\n * Honors `prefers-reduced-motion` (or an explicit `reducedMotion` prop)\n * by freezing video on the first frame. `allowSound` offers tap-to-unmute\n * when the file has audio.\n */\nexport function CurtainStage({\n\tkind,\n\turl,\n\talt = \"\",\n\tclassName,\n\tconfig,\n\tenvBasePath,\n\treducedMotion,\n\tallowSound = false,\n\tlabels,\n}: CurtainStageProps) {\n\tconst prefersReduced = usePrefersReducedMotion();\n\tconst freeze = reducedMotion ?? prefersReduced;\n\tconst copy = { ...DEFAULT_LABELS, ...labels };\n\n\tswitch (kind) {\n\t\tcase \"video\":\n\t\t\treturn (\n\t\t\t\t<CurtainVideo\n\t\t\t\t\turl={url}\n\t\t\t\t\talt={alt}\n\t\t\t\t\tclassName={className}\n\t\t\t\t\tfreeze={freeze}\n\t\t\t\t\tallowSound={allowSound}\n\t\t\t\t\tlabels={copy}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"shader\":\n\t\t\treturn (\n\t\t\t\t<ShaderCurtain\n\t\t\t\t\tconfig={mergeShaderCurtainConfig(config)}\n\t\t\t\t\tposterUrl={url}\n\t\t\t\t\tenvBasePath={envBasePath}\n\t\t\t\t\treducedMotion={freeze}\n\t\t\t\t\talt={alt}\n\t\t\t\t\tclassName={className}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"image\":\n\t\t\treturn (\n\t\t\t\t<img\n\t\t\t\t\tsrc={url}\n\t\t\t\t\talt={alt}\n\t\t\t\t\tclassName={cn(\"h-full w-full object-cover\", className)}\n\t\t\t\t/>\n\t\t\t);\n\t\tdefault: {\n\t\t\tconst _exhaustive: never = kind;\n\t\t\treturn _exhaustive;\n\t\t}\n\t}\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\n\nexport function useMediaQuery(query: string): boolean {\n\tconst [matches, setMatches] = useState(false);\n\n\tuseEffect(() => {\n\t\tif (typeof window === \"undefined\" || !window.matchMedia) return;\n\t\tconst mql = window.matchMedia(query);\n\t\tconst onChange = () => setMatches(mql.matches);\n\t\tonChange();\n\t\tmql.addEventListener(\"change\", onChange);\n\t\treturn () => mql.removeEventListener(\"change\", onChange);\n\t}, [query]);\n\n\treturn matches;\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst buttonVariants = cva(\n\t\"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n\t\t\t\tdestructive:\n\t\t\t\t\t\"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n\t\t\t\toutline:\n\t\t\t\t\t\"border bg-background text-foreground shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:text-foreground dark:hover:bg-muted dark:hover:text-foreground\",\n\t\t\t\tsecondary:\n\t\t\t\t\t\"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n\t\t\t\tghost:\n\t\t\t\t\t\"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50 dark:hover:text-foreground\",\n\t\t\t\tlink: \"text-primary underline-offset-4 hover:underline\",\n\t\t\t},\n\t\t\tsize: {\n\t\t\t\tdefault: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n\t\t\t\tsm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n\t\t\t\tlg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n\t\t\t\ticon: \"size-9\",\n\t\t\t\t\"icon-sm\": \"size-8\",\n\t\t\t\t\"icon-lg\": \"size-10\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: \"default\",\n\t\t\tsize: \"default\",\n\t\t},\n\t},\n);\n\nfunction Button({\n\tclassName,\n\tvariant = \"default\",\n\tsize = \"default\",\n\tasChild = false,\n\t...props\n}: React.ComponentProps<\"button\"> &\n\tVariantProps<typeof buttonVariants> & {\n\t\tasChild?: boolean;\n\t}) {\n\tconst Comp = asChild ? Slot : \"button\";\n\n\treturn (\n\t\t<Comp\n\t\t\tdata-slot=\"button\"\n\t\t\tdata-variant={variant}\n\t\t\tdata-size={size}\n\t\t\tclassName={cn(buttonVariants({ variant, size, className }))}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport { Button, buttonVariants };\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"../../lib/utils\";\nimport { EmptyState } from \"../EmptyState\";\nimport { Button } from \"../ui/button\";\nimport { CurtainPreview } from \"./CurtainPreview\";\nimport type { CurtainKind } from \"./CurtainStage\";\n\nexport type CurtainPickerOwnerType = \"organization\" | \"platform\" | string;\n\nexport type CurtainPickerItem = {\n\tid: string;\n\ttitle: string;\n\tkind: CurtainKind | string;\n\tpublicUrl: string | null;\n\townerType?: CurtainPickerOwnerType;\n\t/** Consumer-computed default (org setting or platform `isDefault`). */\n\tisDefault?: boolean;\n};\n\nexport type CurtainPickerLabels = {\n\tselect?: string;\n\tnone?: string;\n\tnoneDescription?: string;\n\tdefaultBadge?: string;\n\tmakeDefault?: string;\n\tedit?: string;\n\tdelete?: string;\n\timage?: string;\n\tvideo?: string;\n\tshader?: string;\n\torganization?: string;\n\tplatform?: string;\n\tgroupOrganization?: string;\n\tgroupPlatform?: string;\n\tgroupOther?: string;\n\temptyTitle?: string;\n\temptyDescription?: string;\n};\n\nexport const DEFAULT_CURTAIN_PICKER_LABELS: Required<CurtainPickerLabels> = {\n\tselect: \"Curtain\",\n\tnone: \"None\",\n\tnoneDescription: \"Use the default curtain\",\n\tdefaultBadge: \"Default\",\n\tmakeDefault: \"Set as default\",\n\tedit: \"Edit\",\n\tdelete: \"Delete\",\n\timage: \"Image\",\n\tvideo: \"Video\",\n\tshader: \"Shader\",\n\torganization: \"Organization\",\n\tplatform: \"Catalog\",\n\tgroupOrganization: \"Your curtains\",\n\tgroupPlatform: \"Catalog\",\n\tgroupOther: \"Other\",\n\temptyTitle: \"No curtains yet\",\n\temptyDescription: \"Upload an image or a short looping video.\",\n};\n\nexport type CurtainPickerProps = {\n\tcurtains: CurtainPickerItem[];\n\t/** Selected curtain id. `null` / `\"\"` means the optional None tile. */\n\tvalue?: string | null;\n\tonChange?: (id: string | null) => void;\n\tallowNone?: boolean;\n\tdisabled?: boolean;\n\t/** `compact` is a selected preview plus a dense thumbnail grid. */\n\tvariant?: \"default\" | \"compact\";\n\t/** Split the grid into organization / platform / other sections. */\n\tgroupByOwner?: boolean;\n\tonMakeDefault?: (item: CurtainPickerItem) => void;\n\tonEdit?: (item: CurtainPickerItem) => void;\n\tonDelete?: (item: CurtainPickerItem) => void;\n\tcanMakeDefault?: (item: CurtainPickerItem) => boolean;\n\tcanDelete?: (item: CurtainPickerItem) => boolean;\n\tlabels?: CurtainPickerLabels;\n\temptyAction?: React.ReactNode;\n\tclassName?: string;\n\t/** Disable action buttons while a mutation is in flight. */\n\tactionsPending?: boolean;\n};\n\ntype OwnerGroup = \"organization\" | \"platform\" | \"other\";\n\nconst OWNER_GROUPS: readonly OwnerGroup[] = [\n\t\"organization\",\n\t\"platform\",\n\t\"other\",\n];\n\nfunction ownerGroup(ownerType: string | undefined): OwnerGroup {\n\tswitch (ownerType) {\n\t\tcase \"organization\":\n\t\t\treturn \"organization\";\n\t\tcase \"platform\":\n\t\t\treturn \"platform\";\n\t\tdefault:\n\t\t\treturn \"other\";\n\t}\n}\n\nfunction kindLabel(kind: string, copy: Required<CurtainPickerLabels>): string {\n\tif (kind === \"video\") return copy.video;\n\tif (kind === \"shader\") return copy.shader;\n\treturn copy.image;\n}\n\nfunction ownerLabel(\n\townerType: string | undefined,\n\tcopy: Required<CurtainPickerLabels>,\n): string | null {\n\tif (ownerType === \"organization\") return copy.organization;\n\tif (ownerType === \"platform\") return copy.platform;\n\treturn null;\n}\n\nfunction groupHeading(\n\tgroup: OwnerGroup,\n\tcopy: Required<CurtainPickerLabels>,\n): string {\n\tconst headings: Record<OwnerGroup, string> = {\n\t\torganization: copy.groupOrganization,\n\t\tplatform: copy.groupPlatform,\n\t\tother: copy.groupOther,\n\t};\n\treturn headings[group];\n}\n\nfunction gridClass(variant: \"default\" | \"compact\"): string {\n\treturn variant === \"compact\"\n\t\t? \"grid grid-cols-3 gap-2 sm:grid-cols-4 lg:grid-cols-6\"\n\t\t: \"grid gap-4 sm:grid-cols-2 lg:grid-cols-3\";\n}\n\nfunction selectionRing(selectable: boolean): string | false {\n\treturn (\n\t\tselectable &&\n\t\t\"has-[:checked]:ring-ring has-[:checked]:ring-2 has-[:focus-visible]:ring-ring has-[:focus-visible]:ring-2\"\n\t);\n}\n\nfunction resolvePreviewItem(\n\tselectedId: string | null,\n\tready: CurtainPickerItem[],\n\tallowNone: boolean,\n): CurtainPickerItem | null {\n\tif (selectedId) {\n\t\treturn (\n\t\t\tready.find((curtain) => curtain.id === selectedId) ?? ready[0] ?? null\n\t\t);\n\t}\n\tif (allowNone) return null;\n\treturn ready[0] ?? null;\n}\n\nfunction itemActions(\n\titem: CurtainPickerItem | null,\n\tonMakeDefault: ((item: CurtainPickerItem) => void) | undefined,\n\tonEdit: ((item: CurtainPickerItem) => void) | undefined,\n\tonDelete: ((item: CurtainPickerItem) => void) | undefined,\n\tcanMakeDefault: ((item: CurtainPickerItem) => boolean) | undefined,\n\tcanDelete: ((item: CurtainPickerItem) => boolean) | undefined,\n): { onMakeDefault?: () => void; onEdit?: () => void; onDelete?: () => void } {\n\tif (!item) return {};\n\treturn {\n\t\tonMakeDefault:\n\t\t\tonMakeDefault && (canMakeDefault ? canMakeDefault(item) : !item.isDefault)\n\t\t\t\t? () => onMakeDefault(item)\n\t\t\t\t: undefined,\n\t\tonEdit: onEdit ? () => onEdit(item) : undefined,\n\t\tonDelete:\n\t\t\tonDelete && (canDelete ? canDelete(item) : true)\n\t\t\t\t? () => onDelete(item)\n\t\t\t\t: undefined,\n\t};\n}\n\nexport function CurtainPickerSkeleton({\n\tcount = 6,\n\tvariant = \"default\",\n\tclassName,\n}: {\n\tcount?: number;\n\tvariant?: \"default\" | \"compact\";\n\tclassName?: string;\n}) {\n\tif (variant === \"compact\") {\n\t\treturn (\n\t\t\t<div className={cn(\"space-y-4\", className)} aria-hidden=\"true\">\n\t\t\t\t<div className=\"max-w-sm space-y-3\">\n\t\t\t\t\t<div className=\"aspect-video rounded-md bg-skeleton\" />\n\t\t\t\t\t<div className=\"h-4 w-2/3 rounded bg-skeleton\" />\n\t\t\t\t\t<div className=\"h-3 w-1/2 rounded bg-skeleton\" />\n\t\t\t\t</div>\n\t\t\t\t<ul className={gridClass(\"compact\")}>\n\t\t\t\t\t{Array.from({ length: count }, (_, index) => (\n\t\t\t\t\t\t<li key={index} className=\"space-y-1.5 rounded-lg border p-1.5\">\n\t\t\t\t\t\t\t<div className=\"aspect-video rounded-md bg-skeleton\" />\n\t\t\t\t\t\t\t<div className=\"h-3 w-3/4 rounded bg-skeleton\" />\n\t\t\t\t\t\t</li>\n\t\t\t\t\t))}\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ul className={cn(gridClass(variant), className)} aria-hidden=\"true\">\n\t\t\t{Array.from({ length: count }, (_, index) => (\n\t\t\t\t<li key={index} className=\"space-y-3 rounded-xl border p-4\">\n\t\t\t\t\t<div className=\"aspect-video rounded-md bg-skeleton\" />\n\t\t\t\t\t<div className=\"h-4 w-2/3 rounded bg-skeleton\" />\n\t\t\t\t\t<div className=\"h-3 w-1/3 rounded bg-skeleton\" />\n\t\t\t\t</li>\n\t\t\t))}\n\t\t</ul>\n\t);\n}\n\n/**\n * Presentational curtain catalog: visual image / looping-video tiles,\n * optional selection (including None), and optional manage actions.\n * Consumers fetch, upload, and confirm deletes themselves.\n */\nexport function CurtainPicker({\n\tcurtains,\n\tvalue = null,\n\tonChange,\n\tallowNone = false,\n\tdisabled = false,\n\tvariant = \"default\",\n\tgroupByOwner = false,\n\tonMakeDefault,\n\tonEdit,\n\tonDelete,\n\tcanMakeDefault,\n\tcanDelete,\n\tlabels,\n\temptyAction,\n\tclassName,\n\tactionsPending = false,\n}: CurtainPickerProps) {\n\tconst copy = { ...DEFAULT_CURTAIN_PICKER_LABELS, ...labels };\n\tconst groupName = React.useId();\n\tconst selectable = typeof onChange === \"function\";\n\tconst compact = variant === \"compact\";\n\tconst selectedId = value === \"\" ? null : (value ?? null);\n\tconst ready = curtains.filter((curtain) => curtain.publicUrl);\n\tconst showEmpty = ready.length === 0 && !allowNone;\n\tconst previewItem = resolvePreviewItem(selectedId, ready, allowNone);\n\tconst selectedItem = selectedId\n\t\t? (ready.find((curtain) => curtain.id === selectedId) ?? null)\n\t\t: null;\n\tconst actionTarget = selectedItem ?? (!selectable ? previewItem : null);\n\tconst compactActions = compact\n\t\t? itemActions(\n\t\t\t\tactionTarget,\n\t\t\t\tonMakeDefault,\n\t\t\t\tonEdit,\n\t\t\t\tonDelete,\n\t\t\t\tcanMakeDefault,\n\t\t\t\tcanDelete,\n\t\t\t)\n\t\t: {};\n\n\tconst grouped = React.useMemo(() => {\n\t\tif (!groupByOwner) {\n\t\t\treturn [{ group: null as OwnerGroup | null, items: ready }];\n\t\t}\n\t\treturn OWNER_GROUPS.map((group) => ({\n\t\t\tgroup,\n\t\t\titems: ready.filter((curtain) => ownerGroup(curtain.ownerType) === group),\n\t\t})).filter((section) => section.items.length > 0);\n\t}, [groupByOwner, ready]);\n\n\tif (showEmpty) {\n\t\treturn (\n\t\t\t<EmptyState\n\t\t\t\ttitle={copy.emptyTitle}\n\t\t\t\tdescription={copy.emptyDescription}\n\t\t\t\taction={emptyAction}\n\t\t\t\tclassName={className}\n\t\t\t/>\n\t\t);\n\t}\n\n\tconst noneTile =\n\t\tallowNone && selectable ? (\n\t\t\t<NoneTile\n\t\t\t\tname={groupName}\n\t\t\t\tchecked={selectedId === null}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tcopy={copy}\n\t\t\t\tcompact={compact}\n\t\t\t\tonSelect={() => onChange(null)}\n\t\t\t/>\n\t\t) : null;\n\n\tconst sections =\n\t\tgrouped.length === 0 && noneTile\n\t\t\t? [{ group: null as OwnerGroup | null, items: [] as CurtainPickerItem[] }]\n\t\t\t: grouped;\n\n\treturn (\n\t\t<div className={cn(compact ? \"space-y-4\" : \"space-y-6\", className)}>\n\t\t\t{compact ? (\n\t\t\t\t<SelectedPreview\n\t\t\t\t\titem={previewItem}\n\t\t\t\t\tcopy={copy}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tactionsPending={actionsPending}\n\t\t\t\t\tonMakeDefault={compactActions.onMakeDefault}\n\t\t\t\t\tonEdit={compactActions.onEdit}\n\t\t\t\t\tonDelete={compactActions.onDelete}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t\t{sections.map((section, index) => (\n\t\t\t\t<section key={section.group ?? \"all\"} className=\"space-y-3\">\n\t\t\t\t\t{section.group ? (\n\t\t\t\t\t\t<h3 className=\"text-muted-foreground text-sm font-medium\">\n\t\t\t\t\t\t\t{groupHeading(section.group, copy)}\n\t\t\t\t\t\t</h3>\n\t\t\t\t\t) : null}\n\t\t\t\t\t<ul className={gridClass(variant)}>\n\t\t\t\t\t\t{index === 0 && noneTile ? <li>{noneTile}</li> : null}\n\t\t\t\t\t\t{section.items.map((item) => (\n\t\t\t\t\t\t\t<li key={item.id}>\n\t\t\t\t\t\t\t\t<CurtainPickerCard\n\t\t\t\t\t\t\t\t\titem={item}\n\t\t\t\t\t\t\t\t\tname={groupName}\n\t\t\t\t\t\t\t\t\tselectable={selectable}\n\t\t\t\t\t\t\t\t\tchecked={selectedId === item.id}\n\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\tactionsPending={actionsPending}\n\t\t\t\t\t\t\t\t\tcopy={copy}\n\t\t\t\t\t\t\t\t\tcompact={compact}\n\t\t\t\t\t\t\t\t\tonSelect={onChange ? () => onChange(item.id) : undefined}\n\t\t\t\t\t\t\t\t\tonMakeDefault={\n\t\t\t\t\t\t\t\t\t\tcompact\n\t\t\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t\t\t: itemActions(\n\t\t\t\t\t\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\t\t\t\t\t\tonMakeDefault,\n\t\t\t\t\t\t\t\t\t\t\t\t\tonEdit,\n\t\t\t\t\t\t\t\t\t\t\t\t\tonDelete,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcanMakeDefault,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcanDelete,\n\t\t\t\t\t\t\t\t\t\t\t\t).onMakeDefault\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tonEdit={\n\t\t\t\t\t\t\t\t\t\tcompact\n\t\t\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t\t\t: itemActions(\n\t\t\t\t\t\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\t\t\t\t\t\tonMakeDefault,\n\t\t\t\t\t\t\t\t\t\t\t\t\tonEdit,\n\t\t\t\t\t\t\t\t\t\t\t\t\tonDelete,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcanMakeDefault,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcanDelete,\n\t\t\t\t\t\t\t\t\t\t\t\t).onEdit\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tonDelete={\n\t\t\t\t\t\t\t\t\t\tcompact\n\t\t\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t\t\t: itemActions(\n\t\t\t\t\t\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\t\t\t\t\t\tonMakeDefault,\n\t\t\t\t\t\t\t\t\t\t\t\t\tonEdit,\n\t\t\t\t\t\t\t\t\t\t\t\t\tonDelete,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcanMakeDefault,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcanDelete,\n\t\t\t\t\t\t\t\t\t\t\t\t).onDelete\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</ul>\n\t\t\t\t</section>\n\t\t\t))}\n\t\t</div>\n\t);\n}\n\nfunction SelectedPreview({\n\titem,\n\tcopy,\n\tdisabled,\n\tactionsPending,\n\tonMakeDefault,\n\tonEdit,\n\tonDelete,\n}: {\n\titem: CurtainPickerItem | null;\n\tcopy: Required<CurtainPickerLabels>;\n\tdisabled: boolean;\n\tactionsPending: boolean;\n\tonMakeDefault?: () => void;\n\tonEdit?: () => void;\n\tonDelete?: () => void;\n}) {\n\tconst owner = item ? ownerLabel(item.ownerType, copy) : null;\n\n\treturn (\n\t\t<div className=\"max-w-sm space-y-3\">\n\t\t\t{item ? (\n\t\t\t\t<>\n\t\t\t\t\t<CurtainPreview\n\t\t\t\t\t\tkind={item.kind}\n\t\t\t\t\t\turl={item.publicUrl}\n\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\tclassName=\"pointer-events-none\"\n\t\t\t\t\t/>\n\t\t\t\t\t<ItemMeta\n\t\t\t\t\t\ttitle={item.title}\n\t\t\t\t\t\tdetail={[kindLabel(item.kind, copy), owner]\n\t\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t\t.join(\" · \")}\n\t\t\t\t\t\tisDefault={item.isDefault}\n\t\t\t\t\t\tdefaultBadge={copy.defaultBadge}\n\t\t\t\t\t/>\n\t\t\t\t</>\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"aspect-video rounded-md bg-gradient-to-br from-zinc-900 to-zinc-950\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t/>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p className=\"font-medium\">{copy.none}</p>\n\t\t\t\t\t\t<p className=\"text-muted-foreground text-xs\">\n\t\t\t\t\t\t\t{copy.noneDescription}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t</>\n\t\t\t)}\n\t\t\t<ManageActions\n\t\t\t\tdisabled={disabled}\n\t\t\t\tactionsPending={actionsPending}\n\t\t\t\tcopy={copy}\n\t\t\t\tonMakeDefault={onMakeDefault}\n\t\t\t\tonEdit={onEdit}\n\t\t\t\tonDelete={onDelete}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nfunction ItemMeta({\n\ttitle,\n\tdetail,\n\tisDefault,\n\tdefaultBadge,\n}: {\n\ttitle: string;\n\tdetail: string;\n\tisDefault?: boolean;\n\tdefaultBadge: string;\n}) {\n\treturn (\n\t\t<div className=\"flex items-start justify-between gap-2\">\n\t\t\t<div className=\"min-w-0\">\n\t\t\t\t<p className=\"truncate font-medium\">{title}</p>\n\t\t\t\t{detail ? (\n\t\t\t\t\t<p className=\"text-muted-foreground text-xs\">{detail}</p>\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t\t{isDefault ? (\n\t\t\t\t<p className=\"text-muted-foreground shrink-0 text-xs\">{defaultBadge}</p>\n\t\t\t) : null}\n\t\t</div>\n\t);\n}\n\nfunction ManageActions({\n\tdisabled,\n\tactionsPending,\n\tcopy,\n\tonMakeDefault,\n\tonEdit,\n\tonDelete,\n}: {\n\tdisabled: boolean;\n\tactionsPending: boolean;\n\tcopy: Required<CurtainPickerLabels>;\n\tonMakeDefault?: () => void;\n\tonEdit?: () => void;\n\tonDelete?: () => void;\n}) {\n\tif (!onMakeDefault && !onEdit && !onDelete) return null;\n\treturn (\n\t\t<div className=\"flex flex-wrap gap-2\">\n\t\t\t{onMakeDefault ? (\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\tdisabled={disabled || actionsPending}\n\t\t\t\t\tonClick={onMakeDefault}\n\t\t\t\t>\n\t\t\t\t\t{copy.makeDefault}\n\t\t\t\t</Button>\n\t\t\t) : null}\n\t\t\t{onEdit ? (\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\tdisabled={disabled || actionsPending}\n\t\t\t\t\tonClick={onEdit}\n\t\t\t\t>\n\t\t\t\t\t{copy.edit}\n\t\t\t\t</Button>\n\t\t\t) : null}\n\t\t\t{onDelete ? (\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tvariant=\"destructive\"\n\t\t\t\t\tdisabled={disabled || actionsPending}\n\t\t\t\t\tonClick={onDelete}\n\t\t\t\t>\n\t\t\t\t\t{copy.delete}\n\t\t\t\t</Button>\n\t\t\t) : null}\n\t\t</div>\n\t);\n}\n\nfunction NoneTile({\n\tname,\n\tchecked,\n\tdisabled,\n\tcopy,\n\tcompact,\n\tonSelect,\n}: {\n\tname: string;\n\tchecked: boolean;\n\tdisabled: boolean;\n\tcopy: Required<CurtainPickerLabels>;\n\tcompact: boolean;\n\tonSelect: () => void;\n}) {\n\treturn (\n\t\t<label\n\t\t\tclassName={cn(\n\t\t\t\t\"block cursor-pointer transition-shadow\",\n\t\t\t\tcompact\n\t\t\t\t\t? \"flex min-h-11 flex-col gap-1.5 rounded-lg border p-1.5\"\n\t\t\t\t\t: \"space-y-3 rounded-xl border p-4\",\n\t\t\t\t\"has-[:checked]:ring-ring has-[:checked]:ring-2\",\n\t\t\t\t\"has-[:focus-visible]:ring-ring has-[:focus-visible]:ring-2\",\n\t\t\t\tdisabled && \"pointer-events-none opacity-50\",\n\t\t\t)}\n\t\t>\n\t\t\t<input\n\t\t\t\ttype=\"radio\"\n\t\t\t\tname={name}\n\t\t\t\tvalue=\"\"\n\t\t\t\tchecked={checked}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tonChange={onSelect}\n\t\t\t\tclassName=\"sr-only\"\n\t\t\t/>\n\t\t\t<div className=\"aspect-video rounded-md bg-gradient-to-br from-zinc-900 to-zinc-950\" />\n\t\t\t{compact ? (\n\t\t\t\t<p className=\"truncate text-xs font-medium\">{copy.none}</p>\n\t\t\t) : (\n\t\t\t\t<div>\n\t\t\t\t\t<p className=\"font-medium\">{copy.none}</p>\n\t\t\t\t\t<p className=\"text-muted-foreground text-xs\">\n\t\t\t\t\t\t{copy.noneDescription}\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</label>\n\t);\n}\n\nfunction CurtainPickerCard({\n\titem,\n\tname,\n\tselectable,\n\tchecked,\n\tdisabled,\n\tactionsPending,\n\tcopy,\n\tcompact,\n\tonSelect,\n\tonMakeDefault,\n\tonEdit,\n\tonDelete,\n}: {\n\titem: CurtainPickerItem;\n\tname: string;\n\tselectable: boolean;\n\tchecked: boolean;\n\tdisabled: boolean;\n\tactionsPending: boolean;\n\tcopy: Required<CurtainPickerLabels>;\n\tcompact: boolean;\n\tonSelect?: () => void;\n\tonMakeDefault?: () => void;\n\tonEdit?: () => void;\n\tonDelete?: () => void;\n}) {\n\tconst owner = ownerLabel(item.ownerType, copy);\n\tconst media = (\n\t\t<CurtainPreview\n\t\t\tkind={item.kind}\n\t\t\turl={item.publicUrl}\n\t\t\talt={item.title}\n\t\t\tfrozen={compact}\n\t\t/>\n\t);\n\tconst meta = compact ? (\n\t\t<p className=\"truncate text-xs font-medium\">{item.title}</p>\n\t) : (\n\t\t<ItemMeta\n\t\t\ttitle={item.title}\n\t\t\tdetail={[kindLabel(item.kind, copy), owner].filter(Boolean).join(\" · \")}\n\t\t\tisDefault={item.isDefault}\n\t\t\tdefaultBadge={copy.defaultBadge}\n\t\t/>\n\t);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\tcompact ? \"rounded-lg border p-1.5\" : \"space-y-3 rounded-xl border p-4\",\n\t\t\t\tselectionRing(selectable),\n\t\t\t\tdisabled && \"opacity-50\",\n\t\t\t)}\n\t\t>\n\t\t\t{selectable && onSelect ? (\n\t\t\t\t<label\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\tcompact ? \"flex min-h-11 flex-col gap-1.5\" : \"block space-y-3\",\n\t\t\t\t\t\tdisabled ? \"pointer-events-none\" : \"cursor-pointer\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\t\tname={name}\n\t\t\t\t\t\tvalue={item.id}\n\t\t\t\t\t\tchecked={checked}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tonChange={onSelect}\n\t\t\t\t\t\tclassName=\"sr-only\"\n\t\t\t\t\t/>\n\t\t\t\t\t{media}\n\t\t\t\t\t{meta}\n\t\t\t\t</label>\n\t\t\t) : (\n\t\t\t\t<div className={compact ? \"space-y-1.5\" : \"space-y-3\"}>\n\t\t\t\t\t{media}\n\t\t\t\t\t{meta}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{compact ? null : (\n\t\t\t\t<ManageActions\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tactionsPending={actionsPending}\n\t\t\t\t\tcopy={copy}\n\t\t\t\t\tonMakeDefault={onMakeDefault}\n\t\t\t\t\tonEdit={onEdit}\n\t\t\t\t\tonDelete={onDelete}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","export type CaptureShaderPosterOptions = {\n\tquality?: number;\n\ttype?: \"image/jpeg\" | \"image/png\";\n};\n\nfunction canvasFromRoot(root: HTMLElement): HTMLCanvasElement | null {\n\treturn root.querySelector(\"canvas\");\n}\n\n/**\n * Snapshot the live ShaderGradient canvas. The editor must pass\n * `preserveDrawingBuffer` or the pixels will be empty.\n */\nexport function captureShaderPoster(\n\troot: HTMLElement,\n\toptions: CaptureShaderPosterOptions = {},\n): Promise<Blob | null> {\n\tconst canvas = canvasFromRoot(root);\n\tif (!canvas) return Promise.resolve(null);\n\tconst type = options.type ?? \"image/jpeg\";\n\tconst quality = options.quality ?? 0.92;\n\treturn new Promise((resolve) => {\n\t\tcanvas.toBlob(\n\t\t\t(blob) => resolve(blob),\n\t\t\ttype,\n\t\t\ttype === \"image/jpeg\" ? quality : undefined,\n\t\t);\n\t});\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../ui/button\";\nimport { captureShaderPoster } from \"./captureShaderPoster\";\nimport { ShaderCurtain } from \"./ShaderCurtain\";\nimport {\n\tSHADER_CURTAIN_PRESETS,\n\tSHADER_CURTAIN_TYPES,\n\tSHADER_ENV_PRESETS,\n\tSHADER_LIGHT_TYPES,\n\tSHADER_VARIANTS,\n\tmergeShaderCurtainConfig,\n\tparseShaderGradientUrl,\n\ttype ShaderCurtainConfig,\n} from \"./shader-config\";\n\nexport type ShaderCurtainEditorLabels = {\n\tshape?: string;\n\tcolors?: string;\n\tlight?: string;\n\tcamera?: string;\n\tpresets?: string;\n\timportUrl?: string;\n\timportApply?: string;\n\timportError?: string;\n};\n\nexport const DEFAULT_SHADER_CURTAIN_EDITOR_LABELS: Required<ShaderCurtainEditorLabels> =\n\t{\n\t\tshape: \"Shape\",\n\t\tcolors: \"Colors\",\n\t\tlight: \"Light & effects\",\n\t\tcamera: \"Camera\",\n\t\tpresets: \"Presets\",\n\t\timportUrl: \"Paste a shadergradient.co URL\",\n\t\timportApply: \"Apply URL\",\n\t\timportError: \"Could not read that URL\",\n\t};\n\nexport type ShaderCurtainEditorHandle = {\n\tgetConfig: () => ShaderCurtainConfig;\n\tcapturePoster: () => Promise<Blob | null>;\n};\n\nexport type ShaderCurtainEditorProps = {\n\tvalue?: Partial<ShaderCurtainConfig>;\n\tonChange?: (config: ShaderCurtainConfig) => void;\n\tenvBasePath?: string;\n\tclassName?: string;\n\tlabels?: ShaderCurtainEditorLabels;\n};\n\ntype EditorTab = \"shape\" | \"colors\" | \"light\" | \"camera\";\n\nfunction NumberField({\n\tlabel,\n\tvalue,\n\tmin,\n\tmax,\n\tstep,\n\tonChange,\n}: {\n\tlabel: string;\n\tvalue: number;\n\tmin: number;\n\tmax: number;\n\tstep: number;\n\tonChange: (value: number) => void;\n}) {\n\tconst rangeId = React.useId();\n\treturn (\n\t\t<div className=\"grid min-w-0 gap-1 text-xs\">\n\t\t\t<div className=\"flex items-center justify-between gap-2\">\n\t\t\t\t<label\n\t\t\t\t\thtmlFor={rangeId}\n\t\t\t\t\tclassName=\"text-muted-foreground min-w-0 truncate\"\n\t\t\t\t>\n\t\t\t\t\t{label}\n\t\t\t\t</label>\n\t\t\t\t<input\n\t\t\t\t\ttype=\"number\"\n\t\t\t\t\tmin={min}\n\t\t\t\t\tmax={max}\n\t\t\t\t\tstep={step}\n\t\t\t\t\tvalue={value}\n\t\t\t\t\taria-label={label}\n\t\t\t\t\tonChange={(event) => onChange(Number(event.target.value))}\n\t\t\t\t\tclassName=\"border-input bg-background w-14 shrink-0 rounded-md border px-1.5 py-0.5 text-right tabular-nums\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<input\n\t\t\t\tid={rangeId}\n\t\t\t\ttype=\"range\"\n\t\t\t\tmin={min}\n\t\t\t\tmax={max}\n\t\t\t\tstep={step}\n\t\t\t\tvalue={value}\n\t\t\t\tonChange={(event) => onChange(Number(event.target.value))}\n\t\t\t\tclassName=\"w-full min-w-0\"\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nfunction SelectField<T extends string>({\n\tlabel,\n\tvalue,\n\toptions,\n\tonChange,\n}: {\n\tlabel: string;\n\tvalue: T;\n\toptions: readonly T[];\n\tonChange: (value: T) => void;\n}) {\n\treturn (\n\t\t<label className=\"grid min-w-0 gap-1 text-xs\">\n\t\t\t<span className=\"text-muted-foreground truncate\">{label}</span>\n\t\t\t<select\n\t\t\t\tvalue={value}\n\t\t\t\tonChange={(event) => onChange(event.target.value as T)}\n\t\t\t\tclassName=\"border-input bg-background min-w-0 w-full rounded-md border px-2 py-1\"\n\t\t\t>\n\t\t\t\t{options.map((option) => (\n\t\t\t\t\t<option key={option} value={option}>\n\t\t\t\t\t\t{option}\n\t\t\t\t\t</option>\n\t\t\t\t))}\n\t\t\t</select>\n\t\t</label>\n\t);\n}\n\nfunction ColorField({\n\tlabel,\n\tvalue,\n\tonChange,\n}: {\n\tlabel: string;\n\tvalue: string;\n\tonChange: (value: string) => void;\n}) {\n\treturn (\n\t\t<label className=\"grid gap-1 text-xs\">\n\t\t\t<span className=\"text-muted-foreground\">{label}</span>\n\t\t\t<input\n\t\t\t\ttype=\"color\"\n\t\t\t\tvalue={value}\n\t\t\t\tonChange={(event) => onChange(event.target.value)}\n\t\t\t\tclassName=\"h-9 w-full cursor-pointer rounded-md border\"\n\t\t\t/>\n\t\t</label>\n\t);\n}\n\nexport const ShaderCurtainEditor = React.forwardRef<\n\tShaderCurtainEditorHandle,\n\tShaderCurtainEditorProps\n>(function ShaderCurtainEditor(\n\t{ value, onChange, envBasePath, className, labels },\n\tref,\n) {\n\tconst copy = { ...DEFAULT_SHADER_CURTAIN_EDITOR_LABELS, ...labels };\n\tconst [config, setConfig] = React.useState<ShaderCurtainConfig>(() =>\n\t\tmergeShaderCurtainConfig(value),\n\t);\n\tconst [tab, setTab] = React.useState<EditorTab>(\"shape\");\n\tconst [url, setUrl] = React.useState(\"\");\n\tconst [urlError, setUrlError] = React.useState<string | null>(null);\n\tconst previewRef = React.useRef<HTMLDivElement>(null);\n\n\tconst update = React.useCallback(\n\t\t(patch: Partial<ShaderCurtainConfig>) => {\n\t\t\tsetConfig((current) => {\n\t\t\t\tconst next = { ...current, ...patch };\n\t\t\t\tonChange?.(next);\n\t\t\t\treturn next;\n\t\t\t});\n\t\t},\n\t\t[onChange],\n\t);\n\n\tconst replace = React.useCallback(\n\t\t(next: ShaderCurtainConfig) => {\n\t\t\tsetConfig(next);\n\t\t\tonChange?.(next);\n\t\t},\n\t\t[onChange],\n\t);\n\n\tReact.useImperativeHandle(ref, () => ({\n\t\tgetConfig: () => config,\n\t\tcapturePoster: async () => {\n\t\t\tif (!previewRef.current) return null;\n\t\t\treturn captureShaderPoster(previewRef.current);\n\t\t},\n\t}));\n\n\tconst applyUrl = () => {\n\t\tconst parsed = parseShaderGradientUrl(url);\n\t\tif (!parsed) {\n\t\t\tsetUrlError(copy.importError);\n\t\t\treturn;\n\t\t}\n\t\tsetUrlError(null);\n\t\treplace(parsed);\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"grid min-h-0 gap-4 md:grid-cols-2 md:items-start\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<div\n\t\t\t\tref={previewRef}\n\t\t\t\tclassName=\"relative aspect-video overflow-hidden rounded-lg bg-zinc-950 md:sticky md:top-0\"\n\t\t\t>\n\t\t\t\t<ShaderCurtain\n\t\t\t\t\tconfig={config}\n\t\t\t\t\tenvBasePath={envBasePath}\n\t\t\t\t\tpreserveDrawingBuffer\n\t\t\t\t\tclassName=\"absolute inset-0\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div className=\"flex min-h-0 flex-col gap-3\">\n\t\t\t\t<div className=\"flex flex-wrap gap-1\">\n\t\t\t\t\t{(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t[\"shape\", copy.shape],\n\t\t\t\t\t\t\t[\"colors\", copy.colors],\n\t\t\t\t\t\t\t[\"light\", copy.light],\n\t\t\t\t\t\t\t[\"camera\", copy.camera],\n\t\t\t\t\t\t] as const\n\t\t\t\t\t).map(([id, label]) => (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tkey={id}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\tvariant={tab === id ? \"default\" : \"secondary\"}\n\t\t\t\t\t\t\tonClick={() => setTab(id)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t\t<div className=\"min-h-0 max-h-[min(22rem,40dvh)] overflow-x-hidden overflow-y-auto pr-1\">\n\t\t\t\t\t{tab === \"shape\" ? (\n\t\t\t\t\t\t<div className=\"grid grid-cols-2 gap-2\">\n\t\t\t\t\t\t\t<SelectField\n\t\t\t\t\t\t\t\tlabel=\"Type\"\n\t\t\t\t\t\t\t\tvalue={config.type}\n\t\t\t\t\t\t\t\toptions={SHADER_CURTAIN_TYPES}\n\t\t\t\t\t\t\t\tonChange={(type) => update({ type })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<SelectField\n\t\t\t\t\t\t\t\tlabel=\"Shader\"\n\t\t\t\t\t\t\t\tvalue={config.shader}\n\t\t\t\t\t\t\t\toptions={SHADER_VARIANTS}\n\t\t\t\t\t\t\t\tonChange={(shader) => update({ shader })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<SelectField\n\t\t\t\t\t\t\t\tlabel=\"Animate\"\n\t\t\t\t\t\t\t\tvalue={config.animate}\n\t\t\t\t\t\t\t\toptions={[\"on\", \"off\"]}\n\t\t\t\t\t\t\t\tonChange={(animate) => update({ animate })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<SelectField\n\t\t\t\t\t\t\t\tlabel=\"Loop\"\n\t\t\t\t\t\t\t\tvalue={config.loop}\n\t\t\t\t\t\t\t\toptions={[\"on\", \"off\"]}\n\t\t\t\t\t\t\t\tonChange={(loop) => update({ loop })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<NumberField\n\t\t\t\t\t\t\t\tlabel=\"Speed\"\n\t\t\t\t\t\t\t\tvalue={config.uSpeed}\n\t\t\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\t\t\tmax={4}\n\t\t\t\t\t\t\t\tstep={0.05}\n\t\t\t\t\t\t\t\tonChange={(uSpeed) => update({ uSpeed })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<NumberField\n\t\t\t\t\t\t\t\tlabel=\"Strength\"\n\t\t\t\t\t\t\t\tvalue={config.uStrength}\n\t\t\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\t\t\tmax={10}\n\t\t\t\t\t\t\t\tstep={0.1}\n\t\t\t\t\t\t\t\tonChange={(uStrength) => update({ uStrength })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<NumberField\n\t\t\t\t\t\t\t\tlabel=\"Density\"\n\t\t\t\t\t\t\t\tvalue={config.uDensity}\n\t\t\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\t\t\tmax={8}\n\t\t\t\t\t\t\t\tstep={0.1}\n\t\t\t\t\t\t\t\tonChange={(uDensity) => update({ uDensity })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<NumberField\n\t\t\t\t\t\t\t\tlabel=\"Frequency\"\n\t\t\t\t\t\t\t\tvalue={config.uFrequency}\n\t\t\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\t\t\tmax={12}\n\t\t\t\t\t\t\t\tstep={0.1}\n\t\t\t\t\t\t\t\tonChange={(uFrequency) => update({ uFrequency })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<NumberField\n\t\t\t\t\t\t\t\tlabel=\"Amplitude\"\n\t\t\t\t\t\t\t\tvalue={config.uAmplitude}\n\t\t\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\t\t\tmax={8}\n\t\t\t\t\t\t\t\tstep={0.1}\n\t\t\t\t\t\t\t\tonChange={(uAmplitude) => update({ uAmplitude })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<NumberField\n\t\t\t\t\t\t\t\tlabel=\"Time\"\n\t\t\t\t\t\t\t\tvalue={config.uTime}\n\t\t\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\t\t\tmax={40}\n\t\t\t\t\t\t\t\tstep={0.1}\n\t\t\t\t\t\t\t\tonChange={(uTime) => update({ uTime })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<NumberField\n\t\t\t\t\t\t\t\tlabel=\"Loop duration\"\n\t\t\t\t\t\t\t\tvalue={config.loopDuration}\n\t\t\t\t\t\t\t\tmin={1}\n\t\t\t\t\t\t\t\tmax={60}\n\t\t\t\t\t\t\t\tstep={1}\n\t\t\t\t\t\t\t\tonChange={(loopDuration) => update({ loopDuration })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<SelectField\n\t\t\t\t\t\t\t\tlabel=\"Range\"\n\t\t\t\t\t\t\t\tvalue={config.range}\n\t\t\t\t\t\t\t\toptions={[\"enabled\", \"disabled\"]}\n\t\t\t\t\t\t\t\tonChange={(range) => update({ range })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<NumberField\n\t\t\t\t\t\t\t\tlabel=\"Range start\"\n\t\t\t\t\t\t\t\tvalue={config.rangeStart}\n\t\t\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\t\t\tmax={40}\n\t\t\t\t\t\t\t\tstep={0.1}\n\t\t\t\t\t\t\t\tonChange={(rangeStart) => update({ rangeStart })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<NumberField\n\t\t\t\t\t\t\t\tlabel=\"Range end\"\n\t\t\t\t\t\t\t\tvalue={config.rangeEnd}\n\t\t\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\t\t\tmax={40}\n\t\t\t\t\t\t\t\tstep={0.1}\n\t\t\t\t\t\t\t\tonChange={(rangeEnd) => update({ rangeEnd })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<label className=\"col-span-2 flex items-center gap-2 text-xs\">\n\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\t\tchecked={config.wireframe}\n\t\t\t\t\t\t\t\t\tonChange={(event) =>\n\t\t\t\t\t\t\t\t\t\tupdate({ wireframe: event.target.checked })\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\tWireframe\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{tab === \"colors\" ? (\n\t\t\t\t\t\t<div className=\"grid grid-cols-2 gap-2\">\n\t\t\t\t\t\t\t<ColorField\n\t\t\t\t\t\t\t\tlabel=\"Color 1\"\n\t\t\t\t\t\t\t\tvalue={config.color1}\n\t\t\t\t\t\t\t\tonChange={(color1) => update({ color1 })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<ColorField\n\t\t\t\t\t\t\t\tlabel=\"Color 2\"\n\t\t\t\t\t\t\t\tvalue={config.color2}\n\t\t\t\t\t\t\t\tonChange={(color2) => update({ color2 })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<ColorField\n\t\t\t\t\t\t\t\tlabel=\"Color 3\"\n\t\t\t\t\t\t\t\tvalue={config.color3}\n\t\t\t\t\t\t\t\tonChange={(color3) => update({ color3 })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<NumberField\n\t\t\t\t\t\t\t\tlabel=\"Reflection\"\n\t\t\t\t\t\t\t\tvalue={config.reflection}\n\t\t\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\t\t\tmax={1}\n\t\t\t\t\t\t\t\tstep={0.05}\n\t\t\t\t\t\t\t\tonChange={(reflection) => update({ reflection })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<NumberField\n\t\t\t\t\t\t\t\tlabel=\"Brightness\"\n\t\t\t\t\t\t\t\tvalue={config.brightness}\n\t\t\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\t\t\tmax={4}\n\t\t\t\t\t\t\t\tstep={0.05}\n\t\t\t\t\t\t\t\tonChange={(brightness) => update({ brightness })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{tab === \"light\" ? (\n\t\t\t\t\t\t<div className=\"grid grid-cols-2 gap-2\">\n\t\t\t\t\t\t\t<SelectField\n\t\t\t\t\t\t\t\tlabel=\"Light\"\n\t\t\t\t\t\t\t\tvalue={config.lightType}\n\t\t\t\t\t\t\t\toptions={SHADER_LIGHT_TYPES}\n\t\t\t\t\t\t\t\tonChange={(lightType) => update({ lightType })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<SelectField\n\t\t\t\t\t\t\t\tlabel=\"Environment\"\n\t\t\t\t\t\t\t\tvalue={config.envPreset}\n\t\t\t\t\t\t\t\toptions={SHADER_ENV_PRESETS}\n\t\t\t\t\t\t\t\tonChange={(envPreset) => update({ envPreset })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<SelectField\n\t\t\t\t\t\t\t\tlabel=\"Grain\"\n\t\t\t\t\t\t\t\tvalue={config.grain}\n\t\t\t\t\t\t\t\toptions={[\"on\", \"off\"]}\n\t\t\t\t\t\t\t\tonChange={(grain) => update({ grain })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<NumberField\n\t\t\t\t\t\t\t\tlabel=\"Grain blending\"\n\t\t\t\t\t\t\t\tvalue={config.grainBlending}\n\t\t\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\t\t\tmax={1}\n\t\t\t\t\t\t\t\tstep={0.05}\n\t\t\t\t\t\t\t\tonChange={(grainBlending) => update({ grainBlending })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{tab === \"camera\" ? (\n\t\t\t\t\t\t<div className=\"grid grid-cols-2 gap-2\">\n\t\t\t\t\t\t\t<NumberField\n\t\t\t\t\t\t\t\tlabel=\"Azimuth\"\n\t\t\t\t\t\t\t\tvalue={config.cAzimuthAngle}\n\t\t\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\t\t\tmax={360}\n\t\t\t\t\t\t\t\tstep={1}\n\t\t\t\t\t\t\t\tonChange={(cAzimuthAngle) => update({ cAzimuthAngle })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<NumberField\n\t\t\t\t\t\t\t\tlabel=\"Polar\"\n\t\t\t\t\t\t\t\tvalue={config.cPolarAngle}\n\t\t\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\t\t\tmax={180}\n\t\t\t\t\t\t\t\tstep={1}\n\t\t\t\t\t\t\t\tonChange={(cPolarAngle) => update({ cPolarAngle })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<NumberField\n\t\t\t\t\t\t\t\tlabel=\"Distance\"\n\t\t\t\t\t\t\t\tvalue={config.cDistance}\n\t\t\t\t\t\t\t\tmin={0.1}\n\t\t\t\t\t\t\t\tmax={40}\n\t\t\t\t\t\t\t\tstep={0.1}\n\t\t\t\t\t\t\t\tonChange={(cDistance) => update({ cDistance })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<NumberField\n\t\t\t\t\t\t\t\tlabel=\"Zoom\"\n\t\t\t\t\t\t\t\tvalue={config.cameraZoom}\n\t\t\t\t\t\t\t\tmin={0.1}\n\t\t\t\t\t\t\t\tmax={50}\n\t\t\t\t\t\t\t\tstep={0.1}\n\t\t\t\t\t\t\t\tonChange={(cameraZoom) => update({ cameraZoom })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<NumberField\n\t\t\t\t\t\t\t\tlabel=\"FOV\"\n\t\t\t\t\t\t\t\tvalue={config.fov}\n\t\t\t\t\t\t\t\tmin={10}\n\t\t\t\t\t\t\t\tmax={120}\n\t\t\t\t\t\t\t\tstep={1}\n\t\t\t\t\t\t\t\tonChange={(fov) => update({ fov })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<NumberField\n\t\t\t\t\t\t\t\tlabel=\"Pixel density\"\n\t\t\t\t\t\t\t\tvalue={config.pixelDensity}\n\t\t\t\t\t\t\t\tmin={0.5}\n\t\t\t\t\t\t\t\tmax={2}\n\t\t\t\t\t\t\t\tstep={0.1}\n\t\t\t\t\t\t\t\tonChange={(pixelDensity) => update({ pixelDensity })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<NumberField\n\t\t\t\t\t\t\t\tlabel=\"Position X\"\n\t\t\t\t\t\t\t\tvalue={config.positionX}\n\t\t\t\t\t\t\t\tmin={-20}\n\t\t\t\t\t\t\t\tmax={20}\n\t\t\t\t\t\t\t\tstep={0.1}\n\t\t\t\t\t\t\t\tonChange={(positionX) => update({ positionX })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<NumberField\n\t\t\t\t\t\t\t\tlabel=\"Position Y\"\n\t\t\t\t\t\t\t\tvalue={config.positionY}\n\t\t\t\t\t\t\t\tmin={-20}\n\t\t\t\t\t\t\t\tmax={20}\n\t\t\t\t\t\t\t\tstep={0.1}\n\t\t\t\t\t\t\t\tonChange={(positionY) => update({ positionY })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<NumberField\n\t\t\t\t\t\t\t\tlabel=\"Position Z\"\n\t\t\t\t\t\t\t\tvalue={config.positionZ}\n\t\t\t\t\t\t\t\tmin={-20}\n\t\t\t\t\t\t\t\tmax={20}\n\t\t\t\t\t\t\t\tstep={0.1}\n\t\t\t\t\t\t\t\tonChange={(positionZ) => update({ positionZ })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<NumberField\n\t\t\t\t\t\t\t\tlabel=\"Rotation X\"\n\t\t\t\t\t\t\t\tvalue={config.rotationX}\n\t\t\t\t\t\t\t\tmin={-360}\n\t\t\t\t\t\t\t\tmax={360}\n\t\t\t\t\t\t\t\tstep={1}\n\t\t\t\t\t\t\t\tonChange={(rotationX) => update({ rotationX })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<NumberField\n\t\t\t\t\t\t\t\tlabel=\"Rotation Y\"\n\t\t\t\t\t\t\t\tvalue={config.rotationY}\n\t\t\t\t\t\t\t\tmin={-360}\n\t\t\t\t\t\t\t\tmax={360}\n\t\t\t\t\t\t\t\tstep={1}\n\t\t\t\t\t\t\t\tonChange={(rotationY) => update({ rotationY })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<NumberField\n\t\t\t\t\t\t\t\tlabel=\"Rotation Z\"\n\t\t\t\t\t\t\t\tvalue={config.rotationZ}\n\t\t\t\t\t\t\t\tmin={-360}\n\t\t\t\t\t\t\t\tmax={360}\n\t\t\t\t\t\t\t\tstep={1}\n\t\t\t\t\t\t\t\tonChange={(rotationZ) => update({ rotationZ })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<label className=\"col-span-2 flex items-center gap-2 text-xs\">\n\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\t\tchecked={config.zoomOut}\n\t\t\t\t\t\t\t\t\tonChange={(event) =>\n\t\t\t\t\t\t\t\t\t\tupdate({ zoomOut: event.target.checked })\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\tZoom out\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\t\t\t\t<div className=\"space-y-2\">\n\t\t\t\t\t<p className=\"text-muted-foreground text-xs\">{copy.presets}</p>\n\t\t\t\t\t<div className=\"flex flex-wrap gap-1\">\n\t\t\t\t\t\t{SHADER_CURTAIN_PRESETS.map((preset) => (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tkey={preset.id}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\tonClick={() => replace(preset.config)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{preset.title}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"grid gap-2\">\n\t\t\t\t\t<label className=\"grid gap-1 text-xs\">\n\t\t\t\t\t\t<span className=\"text-muted-foreground\">{copy.importUrl}</span>\n\t\t\t\t\t\t<div className=\"flex gap-2\">\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\tvalue={url}\n\t\t\t\t\t\t\t\tonChange={(event) => setUrl(event.target.value)}\n\t\t\t\t\t\t\t\tclassName=\"border-input bg-background min-w-0 flex-1 rounded-md border px-2 py-1\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\tonClick={applyUrl}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{copy.importApply}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</label>\n\t\t\t\t\t{urlError ? (\n\t\t\t\t\t\t<p className=\"text-destructive text-xs\" role=\"alert\">\n\t\t\t\t\t\t\t{urlError}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n});\n","const CAST_SENDER_SRC =\n\t\"https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1\";\nconst DEFAULT_RECEIVER_ID = \"CC1AD845\";\n\ntype CastFramework = {\n\tCastContext: {\n\t\tgetInstance: () => {\n\t\t\tsetOptions: (options: {\n\t\t\t\treceiverApplicationId: string;\n\t\t\t\tautoJoinPolicy?: string;\n\t\t\t}) => void;\n\t\t\trequestSession: () => Promise<unknown>;\n\t\t\tgetCurrentSession: () => {\n\t\t\t\tloadMedia: (request: unknown) => Promise<unknown>;\n\t\t\t} | null;\n\t\t};\n\t};\n};\n\ntype ChromeCast = {\n\tmedia: {\n\t\tDEFAULT_MEDIA_RECEIVER_APP_ID: string;\n\t\tMediaInfo: new (url: string, contentType: string) => unknown;\n\t\tLoadRequest: new (media: unknown) => unknown;\n\t};\n\tAutoJoinPolicy?: { ORIGIN_SCOPED: string };\n};\n\ndeclare global {\n\tinterface Window {\n\t\tcast?: { framework?: CastFramework };\n\t\tchrome?: { cast?: ChromeCast };\n\t\t__onGCastApiAvailable?: (available: boolean) => void;\n\t}\n}\n\nlet loadPromise: Promise<void> | null = null;\n\nexport function loadCastSender(): Promise<void> {\n\tif (typeof window === \"undefined\") return Promise.resolve();\n\tif (window.cast?.framework && window.chrome?.cast) return Promise.resolve();\n\tif (loadPromise) return loadPromise;\n\n\tloadPromise = new Promise((resolve, reject) => {\n\t\twindow.__onGCastApiAvailable = (available) => {\n\t\t\tif (available) resolve();\n\t\t\telse reject(new Error(\"Cast API unavailable\"));\n\t\t};\n\t\tconst existing = document.querySelector(`script[src=\"${CAST_SENDER_SRC}\"]`);\n\t\tif (existing) return;\n\t\tconst script = document.createElement(\"script\");\n\t\tscript.src = CAST_SENDER_SRC;\n\t\tscript.async = true;\n\t\tscript.onerror = () => reject(new Error(\"Cast sender failed to load\"));\n\t\tdocument.head.appendChild(script);\n\t});\n\n\treturn loadPromise;\n}\n\n/** Cast an HLS master playlist to the default Chromecast media receiver. */\nexport async function castHlsUrl(hlsUrl: string): Promise<void> {\n\tawait loadCastSender();\n\tconst framework = window.cast?.framework;\n\tconst chromeCast = window.chrome?.cast;\n\tif (!framework || !chromeCast) {\n\t\tthrow new Error(\"Cast API unavailable\");\n\t}\n\n\tconst context = framework.CastContext.getInstance();\n\tcontext.setOptions({\n\t\treceiverApplicationId:\n\t\t\tchromeCast.media.DEFAULT_MEDIA_RECEIVER_APP_ID || DEFAULT_RECEIVER_ID,\n\t\tautoJoinPolicy: chromeCast.AutoJoinPolicy?.ORIGIN_SCOPED,\n\t});\n\n\tif (!context.getCurrentSession()) {\n\t\tawait context.requestSession();\n\t}\n\tconst session = context.getCurrentSession();\n\tif (!session) throw new Error(\"No Cast session\");\n\n\tconst media = new chromeCast.media.MediaInfo(hlsUrl, \"application/x-mpegURL\");\n\tconst request = new chromeCast.media.LoadRequest(media);\n\tawait session.loadMedia(request);\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SliderPrimitive from \"@radix-ui/react-slider\";\n\nimport { cn } from \"../../lib/utils\";\n\nfunction Slider({\n\tclassName,\n\tdefaultValue,\n\tvalue,\n\tmin = 0,\n\tmax = 100,\n\t...props\n}: React.ComponentProps<typeof SliderPrimitive.Root>) {\n\tconst _values = React.useMemo(\n\t\t() =>\n\t\t\tArray.isArray(value)\n\t\t\t\t? value\n\t\t\t\t: Array.isArray(defaultValue)\n\t\t\t\t\t? defaultValue\n\t\t\t\t\t: [min, max],\n\t\t[value, defaultValue, min, max],\n\t);\n\n\treturn (\n\t\t<SliderPrimitive.Root\n\t\t\tdata-slot=\"slider\"\n\t\t\tdefaultValue={defaultValue}\n\t\t\tvalue={value}\n\t\t\tmin={min}\n\t\t\tmax={max}\n\t\t\tclassName={cn(\n\t\t\t\t\"relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<SliderPrimitive.Track\n\t\t\t\tdata-slot=\"slider-track\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"bg-muted relative grow overflow-hidden rounded-full data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<SliderPrimitive.Range\n\t\t\t\t\tdata-slot=\"slider-range\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"bg-primary absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full\",\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t</SliderPrimitive.Track>\n\t\t\t{Array.from({ length: _values.length }, (_, index) => (\n\t\t\t\t<SliderPrimitive.Thumb\n\t\t\t\t\tdata-slot=\"slider-thumb\"\n\t\t\t\t\tkey={index}\n\t\t\t\t\tclassName=\"border-primary ring-ring/50 block size-4 shrink-0 rounded-full border bg-white shadow-sm transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50\"\n\t\t\t\t/>\n\t\t\t))}\n\t\t</SliderPrimitive.Root>\n\t);\n}\n\nexport { Slider };\n","export type SeekCue = {\n\tstart: number;\n\tend: number;\n\tspriteUrl: string;\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number;\n};\n\nconst XYWH_RE = /#xywh=(\\d+),(\\d+),(\\d+),(\\d+)\\s*$/;\n\nexport function thumbnailsVttUrlFromPlayback(src: string): string | null {\n\tconst trimmed = src.trim();\n\tif (!trimmed) return null;\n\tconst replaced = trimmed.replace(\n\t\t/index\\.m3u8(?:\\?.*)?$/i,\n\t\t\"thumbs/preview.vtt\",\n\t);\n\tif (replaced === trimmed) return null;\n\treturn replaced;\n}\n\nexport function parseVttTimestamp(value: string): number {\n\tconst parts = value.trim().split(\":\");\n\tif (parts.length === 3) {\n\t\tconst hours = Number(parts[0]);\n\t\tconst minutes = Number(parts[1]);\n\t\tconst seconds = Number(parts[2]);\n\t\tif ([hours, minutes, seconds].some((n) => Number.isNaN(n))) return 0;\n\t\treturn hours * 3600 + minutes * 60 + seconds;\n\t}\n\tif (parts.length === 2) {\n\t\tconst minutes = Number(parts[0]);\n\t\tconst seconds = Number(parts[1]);\n\t\tif ([minutes, seconds].some((n) => Number.isNaN(n))) return 0;\n\t\treturn minutes * 60 + seconds;\n\t}\n\tconst seconds = Number(value);\n\treturn Number.isFinite(seconds) ? seconds : 0;\n}\n\nexport function parseThumbnailsVtt(text: string, vttUrl: string): SeekCue[] {\n\tconst cues: SeekCue[] = [];\n\tconst blocks = text.replace(/^\\uFEFF?WEBVTT[^\\n]*\\n/i, \"\").split(/\\n\\s*\\n/);\n\tfor (const block of blocks) {\n\t\tconst lines = block\n\t\t\t.split(\"\\n\")\n\t\t\t.map((line) => line.trim())\n\t\t\t.filter(Boolean);\n\t\tconst timing = lines.find((line) => line.includes(\"-->\"));\n\t\tconst payload = lines.find((line) => XYWH_RE.test(line));\n\t\tif (!timing || !payload) continue;\n\t\tconst [startRaw, endRaw] = timing.split(\"-->\").map((part) => part.trim());\n\t\tconst match = payload.match(XYWH_RE);\n\t\tif (!startRaw || !endRaw || !match) continue;\n\t\tconst spriteName = payload.slice(0, match.index);\n\t\tcues.push({\n\t\t\tstart: parseVttTimestamp(startRaw),\n\t\t\tend: parseVttTimestamp(endRaw),\n\t\t\tspriteUrl: new URL(spriteName, vttUrl).toString(),\n\t\t\tx: Number(match[1]),\n\t\t\ty: Number(match[2]),\n\t\t\twidth: Number(match[3]),\n\t\t\theight: Number(match[4]),\n\t\t});\n\t}\n\treturn cues;\n}\n\nexport function cueAtTime(cues: SeekCue[], time: number): SeekCue | null {\n\tif (cues.length === 0 || !Number.isFinite(time)) return null;\n\tconst hit = cues.find((cue) => time >= cue.start && time < cue.end);\n\tif (hit) return hit;\n\tconst last = cues[cues.length - 1];\n\tif (last && time >= last.start) return last;\n\treturn cues[0] ?? null;\n}\n\nexport function hoverTimeFromClientX(\n\tclientX: number,\n\trect: Pick<DOMRect, \"left\" | \"width\">,\n\tduration: number,\n): number {\n\tif (rect.width <= 0 || !Number.isFinite(duration) || duration <= 0) return 0;\n\tconst ratio = Math.min(1, Math.max(0, (clientX - rect.left) / rect.width));\n\treturn ratio * duration;\n}\n\nexport function finitePlaybackDuration(\n\tduration: number,\n\tseekable: {\n\t\tlength: number;\n\t\tstart: (index: number) => number;\n\t\tend: (index: number) => number;\n\t},\n\tmode: \"live\" | \"vod\",\n): number {\n\tif (Number.isFinite(duration) && duration > 0) return duration;\n\tif (mode === \"vod\" && seekable.length > 0) {\n\t\tconst span = seekable.end(seekable.length - 1) - seekable.start(0);\n\t\tif (Number.isFinite(span) && span > 0) return span;\n\t}\n\treturn 0;\n}\n\nexport async function loadThumbnailsVtt(src: string): Promise<SeekCue[]> {\n\tconst vttUrl = thumbnailsVttUrlFromPlayback(src);\n\tif (!vttUrl) return [];\n\ttry {\n\t\tconst response = await fetch(vttUrl);\n\t\tif (!response.ok) return [];\n\t\tconst text = await response.text();\n\t\treturn parseThumbnailsVtt(text, vttUrl);\n\t} catch {\n\t\treturn [];\n\t}\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { Slider } from \"../ui/slider\";\nimport {\n\tcueAtTime,\n\thoverTimeFromClientX,\n\tloadThumbnailsVtt,\n\ttype SeekCue,\n} from \"./seekPreview\";\n\ntype SeekBarProps = {\n\tsrc: string;\n\tduration: number;\n\tcurrentTime: number;\n\tbuffered: number;\n\tonSeek: (seconds: number) => void;\n\tformatTime: (seconds: number) => string;\n};\n\nexport function SeekBar({\n\tsrc,\n\tduration,\n\tcurrentTime,\n\tbuffered,\n\tonSeek,\n\tformatTime,\n}: SeekBarProps) {\n\tconst trackRef = React.useRef<HTMLDivElement>(null);\n\tconst [hoverTime, setHoverTime] = React.useState<number | null>(null);\n\tconst [cues, setCues] = React.useState<SeekCue[] | null>(null);\n\tconst loadedSrc = React.useRef<string | null>(null);\n\n\tReact.useEffect(() => {\n\t\tsetCues(null);\n\t\tloadedSrc.current = null;\n\t}, [src]);\n\n\tconst ensureCues = React.useCallback(() => {\n\t\tif (loadedSrc.current === src) return;\n\t\tloadedSrc.current = src;\n\t\tvoid loadThumbnailsVtt(src).then((next) => {\n\t\t\tsetCues(next);\n\t\t});\n\t}, [src]);\n\n\tconst updateHover = React.useCallback(\n\t\t(clientX: number) => {\n\t\t\tconst rect = trackRef.current?.getBoundingClientRect();\n\t\t\tif (!rect) return;\n\t\t\tsetHoverTime(hoverTimeFromClientX(clientX, rect, duration));\n\t\t},\n\t\t[duration],\n\t);\n\n\tconst cue =\n\t\thoverTime !== null &&\n\t\tNumber.isFinite(duration) &&\n\t\tduration > 0 &&\n\t\tcues &&\n\t\tcues.length > 0\n\t\t\t? cueAtTime(cues, hoverTime)\n\t\t\t: null;\n\tconst hoverPercent =\n\t\thoverTime !== null && duration > 0\n\t\t\t? Math.min(100, Math.max(0, (hoverTime / duration) * 100))\n\t\t\t: 0;\n\n\treturn (\n\t\t<div\n\t\t\tref={trackRef}\n\t\t\tclassName=\"relative w-full\"\n\t\t\tonPointerEnter={ensureCues}\n\t\t\tonPointerDown={(event) => {\n\t\t\t\tensureCues();\n\t\t\t\tupdateHover(event.clientX);\n\t\t\t}}\n\t\t\tonPointerMove={(event) => {\n\t\t\t\tensureCues();\n\t\t\t\tupdateHover(event.clientX);\n\t\t\t}}\n\t\t\tonPointerLeave={() => setHoverTime(null)}\n\t\t\tonPointerUp={() => setHoverTime(null)}\n\t\t>\n\t\t\t{hoverTime !== null ? (\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"pointer-events-none absolute bottom-full mb-2 flex flex-col items-center gap-1\"\n\t\t\t\t\tstyle={{ left: `${hoverPercent}%`, transform: \"translateX(-50%)\" }}\n\t\t\t\t\tdata-slot=\"seek-preview\"\n\t\t\t\t>\n\t\t\t\t\t{cue ? (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tclassName=\"overflow-hidden rounded border border-white/20 bg-black shadow-md\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\twidth: cue.width,\n\t\t\t\t\t\t\t\theight: cue.height,\n\t\t\t\t\t\t\t\tbackgroundImage: `url(${cue.spriteUrl})`,\n\t\t\t\t\t\t\t\tbackgroundPosition: `-${cue.x}px -${cue.y}px`,\n\t\t\t\t\t\t\t\tbackgroundRepeat: \"no-repeat\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : null}\n\t\t\t\t\t<span className=\"rounded-full bg-black/80 px-1.5 py-0.5 text-[10px] tabular-nums text-white\">\n\t\t\t\t\t\t{formatTime(hoverTime)}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t\t<Slider\n\t\t\t\taria-label=\"Seek\"\n\t\t\t\tmin={0}\n\t\t\t\tmax={duration || 0}\n\t\t\t\tstep={0.1}\n\t\t\t\tvalue={[Math.min(currentTime, duration || 0)]}\n\t\t\t\tonValueChange={(value) => onSeek(value[0] ?? 0)}\n\t\t\t\tclassName=\"w-full\"\n\t\t\t/>\n\t\t\t{duration > 0 && buffered > currentTime ? (\n\t\t\t\t<span\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tclassName=\"pointer-events-none absolute top-1/2 left-0 h-1.5 -translate-y-1/2 rounded-full bg-white/25\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: `${Math.min((buffered / duration) * 100, 100)}%`,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t</div>\n\t);\n}\n","import { parseVttTimestamp } from \"./seekPreview\";\n\nexport const CAPTION_LOCALES = [\"en\", \"es\", \"pt\"] as const;\n\nexport type CaptionLocale = (typeof CAPTION_LOCALES)[number];\n\nexport type CaptionCue = {\n\tstart: number;\n\tend: number;\n\ttext: string;\n};\n\nexport type LiveCaptionCue = {\n\ttext: string;\n\treceivedAt: number;\n\tspeaker?: number;\n};\n\n/** Extra delay on top of HLS playhead lag so live CC is not early. */\nexport const LIVE_CUE_EXTRA_LAG_MS = 2000;\n\n/** Session merge cap for live poll cues. */\nexport const LIVE_STACK_MAX_CUES = 150;\n\n/** Netflix-style adult reading rate for Latin scripts. */\nexport const CAPTION_CHARS_PER_SECOND = 17;\nexport const CAPTION_MIN_DWELL_MS = 1200;\nexport const CAPTION_MAX_DWELL_MS = 6000;\n/** Cap when screens are already queued behind. */\nexport const CAPTION_RUSH_DWELL_MS = 2500;\nexport const CAPTION_MAX_CHARS_PER_LINE = 42;\nexport const CAPTION_COMPACT_CHARS_PER_LINE = 32;\nexport const CAPTION_MAX_LINES = 2;\n/** Drop the oldest queued screens beyond this. */\nexport const CAPTION_BACKLOG_DROP = 8;\n/** Extend a VTT cue to the next start only when the gap is under this. */\nexport const CAPTION_GAP_FILL_MS = 1000;\n\n/** Ignore HLS seekable.end jumps smaller than one 2s segment. */\nexport const LIVE_LAG_SPIKE_MS = 2500;\n\nconst CAPTION_BREAK_PUNCT = /[.,;:?!]$/;\nconst CAPTION_MIN_PUNCT_LINE = 8;\n\nexport type CaptionScreen = {\n\ttext: string;\n\tspeaker?: number;\n};\n\nexport type LiveCaptionPlayout = {\n\tscreen: CaptionScreen | null;\n\thideAt: number;\n\tcursor: number;\n\tqueue: CaptionScreen[];\n};\n\nexport const EMPTY_LIVE_CAPTION_PLAYOUT: LiveCaptionPlayout = {\n\tscreen: null,\n\thideAt: 0,\n\tcursor: 0,\n\tqueue: [],\n};\n\nexport type LiveCaptionsLoad =\n\t{ ok: true; cues: LiveCaptionCue[] } | { ok: false; cues: [] };\n\nexport function stabilizeLiveLagMs(\n\tprevious: number | null,\n\tnext: number,\n): number {\n\tif (previous == null || !Number.isFinite(previous)) return next;\n\tif (next <= previous) return next;\n\tif (next - previous < LIVE_LAG_SPIKE_MS) return previous;\n\treturn next;\n}\n\nexport function isCaptionLocale(value: string): value is CaptionLocale {\n\treturn (CAPTION_LOCALES as readonly string[]).includes(value);\n}\n\nexport function isLivePlaylistSrc(src: string): boolean {\n\treturn /\\/live\\//i.test(src);\n}\n\nexport function captionsVttUrlFromPlayback(\n\tsrc: string,\n\tlocale: CaptionLocale,\n): string | null {\n\tconst trimmed = src.trim();\n\tif (!trimmed) return null;\n\tconst replaced = trimmed.replace(\n\t\t/index\\.m3u8(?:\\?.*)?$/i,\n\t\t`subs/${locale}.vtt`,\n\t);\n\tif (replaced === trimmed) return null;\n\treturn replaced;\n}\n\nexport function liveCaptionsUrl(base: string, locale: CaptionLocale): string {\n\treturn `${base.replace(/\\/$/, \"\")}/${locale}`;\n}\n\nexport function parseCaptionVtt(text: string): CaptionCue[] {\n\tconst cues: CaptionCue[] = [];\n\tconst blocks = text.replace(/^\\uFEFF?WEBVTT[^\\n]*\\n/i, \"\").split(/\\n\\s*\\n/);\n\tfor (const block of blocks) {\n\t\tconst lines = block\n\t\t\t.split(\"\\n\")\n\t\t\t.map((line) => line.trim())\n\t\t\t.filter(Boolean);\n\t\tconst timing = lines.find((line) => line.includes(\"-->\"));\n\t\tif (!timing) continue;\n\t\tconst [startRaw, endRaw] = timing.split(\"-->\").map((part) => part.trim());\n\t\tif (!startRaw || !endRaw) continue;\n\t\tconst textLines = lines.filter(\n\t\t\t(line) => line !== timing && !/^\\d+$/.test(line),\n\t\t);\n\t\tconst payload = textLines.join(\"\\n\").trim();\n\t\tif (!payload) continue;\n\t\tcues.push({\n\t\t\tstart: parseVttTimestamp(startRaw.split(\" \")[0] ?? startRaw),\n\t\t\tend: parseVttTimestamp(endRaw.split(\" \")[0] ?? endRaw),\n\t\t\ttext: payload,\n\t\t});\n\t}\n\treturn cues;\n}\n\nexport function captionAtTime(\n\tcues: CaptionCue[],\n\ttime: number,\n\toptions?: { live?: boolean },\n): CaptionCue | null {\n\tconst matched =\n\t\tcues.find((cue) => time >= cue.start && time < cue.end) ?? null;\n\tif (matched) return matched;\n\tif (options?.live && cues.length > 0) {\n\t\treturn cues[cues.length - 1] ?? null;\n\t}\n\treturn null;\n}\n\nexport function liveCuesDue(\n\tcues: LiveCaptionCue[],\n\tnow: number,\n\tlagMs: number | null,\n\textraLagMs = LIVE_CUE_EXTRA_LAG_MS,\n): LiveCaptionCue[] {\n\tif (lagMs == null || !Number.isFinite(lagMs) || lagMs < 0) return [];\n\tconst threshold = lagMs + extraLagMs;\n\treturn cues\n\t\t.filter(\n\t\t\t(cue) =>\n\t\t\t\tNumber.isFinite(cue.receivedAt) && now - cue.receivedAt >= threshold,\n\t\t)\n\t\t.sort((left, right) => left.receivedAt - right.receivedAt);\n}\n\nfunction captionScreenRow(text: string, speaker?: number): CaptionScreen {\n\treturn speaker == null ? { text } : { text, speaker };\n}\n\nfunction chunkLongWord(word: string, maxCharsPerLine: number): string[] {\n\tif (word.length <= maxCharsPerLine) return [word];\n\tconst parts: string[] = [];\n\tfor (let index = 0; index < word.length; index += maxCharsPerLine) {\n\t\tparts.push(word.slice(index, index + maxCharsPerLine));\n\t}\n\treturn parts;\n}\n\nfunction wrapCaptionLines(text: string, maxCharsPerLine: number): string[] {\n\tconst tokens = text\n\t\t.split(\" \")\n\t\t.filter(Boolean)\n\t\t.flatMap((word) => chunkLongWord(word, maxCharsPerLine));\n\tconst lines: string[] = [];\n\tlet index = 0;\n\twhile (index < tokens.length) {\n\t\tlet end = index;\n\t\tlet length = 0;\n\t\twhile (end < tokens.length) {\n\t\t\tconst added = tokens[end]!.length + (end > index ? 1 : 0);\n\t\t\tif (length + added > maxCharsPerLine && end > index) break;\n\t\t\tlength += added;\n\t\t\tend += 1;\n\t\t}\n\t\tlet breakAt = end;\n\t\tif (end < tokens.length) {\n\t\t\tfor (let cursor = end - 1; cursor > index; cursor -= 1) {\n\t\t\t\tif (!CAPTION_BREAK_PUNCT.test(tokens[cursor]!)) continue;\n\t\t\t\tconst firstLen = tokens.slice(index, cursor + 1).join(\" \").length;\n\t\t\t\tif (firstLen >= Math.min(CAPTION_MIN_PUNCT_LINE, maxCharsPerLine)) {\n\t\t\t\t\tbreakAt = cursor + 1;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tlines.push(tokens.slice(index, breakAt).join(\" \"));\n\t\tindex = breakAt;\n\t}\n\treturn lines;\n}\n\nfunction balanceCaptionLines(\n\tlines: string[],\n\tmaxCharsPerLine: number,\n): string[] {\n\tconst next = [...lines];\n\tfor (let index = 0; index + 1 < next.length; index += CAPTION_MAX_LINES) {\n\t\tconst left = next[index]!.split(\" \");\n\t\tconst right = next[index + 1]!.split(\" \");\n\t\tif (right.length !== 1 || left.length < 3) continue;\n\t\tconst moved = left[left.length - 1]!;\n\t\tconst newRight = `${moved} ${right[0]}`;\n\t\tif (newRight.length > maxCharsPerLine) continue;\n\t\tnext[index] = left.slice(0, -1).join(\" \");\n\t\tnext[index + 1] = newRight;\n\t}\n\treturn next;\n}\n\nexport function splitCaptionScreens(\n\ttext: string,\n\tmaxCharsPerLine = CAPTION_MAX_CHARS_PER_LINE,\n): string[] {\n\tconst trimmed = text.trim().replace(/\\s+/g, \" \");\n\tif (!trimmed) return [];\n\tconst lines = balanceCaptionLines(\n\t\twrapCaptionLines(trimmed, maxCharsPerLine),\n\t\tmaxCharsPerLine,\n\t);\n\tconst screens: string[] = [];\n\tfor (let index = 0; index < lines.length; index += CAPTION_MAX_LINES) {\n\t\tscreens.push(lines.slice(index, index + CAPTION_MAX_LINES).join(\"\\n\"));\n\t}\n\treturn screens;\n}\n\nexport function captionDwellMs(text: string, backlog = 0): number {\n\tconst chars = text.replace(/\\s+/g, \" \").trim().length;\n\tconst raw = (chars / CAPTION_CHARS_PER_SECOND) * 1000;\n\tconst max = backlog > 0 ? CAPTION_RUSH_DWELL_MS : CAPTION_MAX_DWELL_MS;\n\treturn Math.min(max, Math.max(CAPTION_MIN_DWELL_MS, raw));\n}\n\nexport function advanceLiveCaptionPlayout(\n\tstate: LiveCaptionPlayout,\n\tcues: LiveCaptionCue[],\n\tnow: number,\n\tlagMs: number | null,\n\tmaxCharsPerLine = CAPTION_MAX_CHARS_PER_LINE,\n\textraLagMs = LIVE_CUE_EXTRA_LAG_MS,\n): LiveCaptionPlayout {\n\tlet screen = state.screen;\n\tlet hideAt = state.hideAt;\n\tlet cursor = state.cursor;\n\tlet queue = state.queue.slice();\n\n\tif (lagMs != null && Number.isFinite(lagMs) && lagMs >= 0) {\n\t\tconst threshold = lagMs + extraLagMs;\n\t\tconst incoming = cues\n\t\t\t.filter(\n\t\t\t\t(cue) =>\n\t\t\t\t\tBoolean(cue.text.trim()) &&\n\t\t\t\t\tNumber.isFinite(cue.receivedAt) &&\n\t\t\t\t\tcue.receivedAt > cursor &&\n\t\t\t\t\tnow - cue.receivedAt >= threshold,\n\t\t\t)\n\t\t\t.sort((left, right) => left.receivedAt - right.receivedAt);\n\t\tfor (const cue of incoming) {\n\t\t\tfor (const text of splitCaptionScreens(cue.text, maxCharsPerLine)) {\n\t\t\t\tqueue.push(captionScreenRow(text, cue.speaker));\n\t\t\t}\n\t\t\tcursor = cue.receivedAt;\n\t\t}\n\t\tif (queue.length > CAPTION_BACKLOG_DROP) {\n\t\t\tqueue = queue.slice(queue.length - CAPTION_BACKLOG_DROP);\n\t\t}\n\t}\n\n\tif (now >= hideAt) {\n\t\tconst next = queue.shift();\n\t\tif (next) {\n\t\t\tscreen = next;\n\t\t\thideAt = now + captionDwellMs(next.text, queue.length);\n\t\t} else {\n\t\t\tscreen = null;\n\t\t}\n\t}\n\n\treturn { screen, hideAt, cursor, queue };\n}\n\nfunction cueEndWithGapFill(cues: CaptionCue[], index: number): number {\n\tconst cue = cues[index];\n\tif (!cue) return 0;\n\tconst next = cues[index + 1];\n\tif (!next || !Number.isFinite(next.start)) return cue.end;\n\tconst gapMs = (next.start - cue.end) * 1000;\n\tif (gapMs > 0 && gapMs < CAPTION_GAP_FILL_MS) return next.start;\n\treturn cue.end;\n}\n\nexport function captionScreenAtTime(\n\tcues: CaptionCue[],\n\ttime: number,\n\tmaxCharsPerLine = CAPTION_MAX_CHARS_PER_LINE,\n): CaptionScreen | null {\n\tif (!Number.isFinite(time)) return null;\n\tconst ordered = cues\n\t\t.filter(\n\t\t\t(cue) =>\n\t\t\t\tBoolean(cue.text.trim()) &&\n\t\t\t\tNumber.isFinite(cue.start) &&\n\t\t\t\tNumber.isFinite(cue.end),\n\t\t)\n\t\t.sort((left, right) => left.start - right.start);\n\tfor (let index = 0; index < ordered.length; index += 1) {\n\t\tconst cue = ordered[index]!;\n\t\tconst end = cueEndWithGapFill(ordered, index);\n\t\tif (time < cue.start || time >= end) continue;\n\t\tconst screens = splitCaptionScreens(cue.text, maxCharsPerLine);\n\t\tif (screens.length === 0) return null;\n\t\tconst weights = screens.map((text) =>\n\t\t\tMath.max(1, text.replace(/\\s+/g, \"\").length),\n\t\t);\n\t\tconst total = weights.reduce((sum, weight) => sum + weight, 0);\n\t\tconst duration = Math.max(end - cue.start, 0);\n\t\tlet cursor = cue.start;\n\t\tfor (let screenIndex = 0; screenIndex < screens.length; screenIndex += 1) {\n\t\t\tconst isLast = screenIndex === screens.length - 1;\n\t\t\tconst slice = isLast\n\t\t\t\t? end - cursor\n\t\t\t\t: duration * (weights[screenIndex]! / total);\n\t\t\tconst sliceEnd = cursor + slice;\n\t\t\tif (time >= cursor && time < sliceEnd) {\n\t\t\t\treturn captionScreenRow(screens[screenIndex]!);\n\t\t\t}\n\t\t\tcursor = sliceEnd;\n\t\t}\n\t\treturn captionScreenRow(screens[screens.length - 1]!);\n\t}\n\treturn null;\n}\n\nconst LIVE_OVERLAP_MIN_WORDS = 4;\n\nfunction normalizeLiveCaptionText(text: string): string {\n\treturn text.trim().replace(/\\s+/g, \" \").toLowerCase();\n}\n\nfunction lastSubseqIndex(haystack: string[], needle: string[]): number {\n\tif (needle.length === 0 || needle.length > haystack.length) return -1;\n\tlet found = -1;\n\tfor (let index = 0; index <= haystack.length - needle.length; index += 1) {\n\t\tlet match = true;\n\t\tfor (let offset = 0; offset < needle.length; offset += 1) {\n\t\t\tif (haystack[index + offset] !== needle[offset]) {\n\t\t\t\tmatch = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (match) found = index;\n\t}\n\treturn found;\n}\n\n/** Words of `next` after the longest 4+ word n-gram shared with `previous`. */\nfunction remainderAfterOverlap(previous: string, next: string): string | null {\n\tconst prevWords = normalizeLiveCaptionText(previous)\n\t\t.split(\" \")\n\t\t.filter(Boolean);\n\tconst nextWords = next.trim().replace(/\\s+/g, \" \").split(\" \").filter(Boolean);\n\tconst nextNorm = nextWords.map((word) => word.toLowerCase());\n\tconst maxN = Math.min(prevWords.length, nextNorm.length);\n\tfor (let size = maxN; size >= LIVE_OVERLAP_MIN_WORDS; size -= 1) {\n\t\tfor (let start = prevWords.length - size; start >= 0; start -= 1) {\n\t\t\tconst gram = prevWords.slice(start, start + size);\n\t\t\tconst index = lastSubseqIndex(nextNorm, gram);\n\t\t\tif (index !== -1) {\n\t\t\t\treturn nextWords.slice(index + size).join(\" \");\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction liveCaptionRow(\n\ttext: string,\n\treceivedAt: number,\n\tspeaker?: number,\n): LiveCaptionCue {\n\treturn speaker == null ? { text, receivedAt } : { text, receivedAt, speaker };\n}\n\n/** Drop exact repeats and replace a row when the next cue is a growth of it. */\nexport function coalesceLiveCaptionCues(\n\tcues: LiveCaptionCue[],\n): LiveCaptionCue[] {\n\tconst out: LiveCaptionCue[] = [];\n\tfor (const cue of cues) {\n\t\tconst text = cue.text.trim();\n\t\tif (!text) continue;\n\t\tconst last = out[out.length - 1];\n\t\tif (!last) {\n\t\t\tout.push(liveCaptionRow(text, cue.receivedAt, cue.speaker));\n\t\t\tcontinue;\n\t\t}\n\t\tif (\n\t\t\tlast.speaker !== cue.speaker &&\n\t\t\t(last.speaker != null || cue.speaker != null)\n\t\t) {\n\t\t\tout.push(liveCaptionRow(text, cue.receivedAt, cue.speaker));\n\t\t\tcontinue;\n\t\t}\n\t\tconst lastNorm = normalizeLiveCaptionText(last.text);\n\t\tconst nextNorm = normalizeLiveCaptionText(text);\n\t\tif (lastNorm === nextNorm) continue;\n\t\tif (nextNorm.startsWith(lastNorm) || lastNorm.startsWith(nextNorm)) {\n\t\t\tout[out.length - 1] = liveCaptionRow(\n\t\t\t\tnextNorm.length >= lastNorm.length ? text : last.text,\n\t\t\t\tcue.receivedAt,\n\t\t\t\tcue.speaker ?? last.speaker,\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\tconst remainder = remainderAfterOverlap(last.text, text);\n\t\tif (remainder !== null) {\n\t\t\tif (!remainder) continue;\n\t\t\tout.push(liveCaptionRow(remainder, cue.receivedAt, cue.speaker));\n\t\t\tcontinue;\n\t\t}\n\t\tout.push(liveCaptionRow(text, cue.receivedAt, cue.speaker));\n\t}\n\treturn out;\n}\n\nexport function mergeLiveCaptionCues(\n\texisting: LiveCaptionCue[],\n\tincoming: LiveCaptionCue[],\n\tcap = LIVE_STACK_MAX_CUES,\n): LiveCaptionCue[] {\n\tconst map = new Map<number, LiveCaptionCue>();\n\tfor (const cue of existing) {\n\t\tif (Number.isFinite(cue.receivedAt)) map.set(cue.receivedAt, cue);\n\t}\n\tfor (const cue of incoming) {\n\t\tif (Number.isFinite(cue.receivedAt)) map.set(cue.receivedAt, cue);\n\t}\n\treturn [...map.values()]\n\t\t.sort((left, right) => left.receivedAt - right.receivedAt)\n\t\t.slice(-Math.max(1, cap));\n}\n\nexport async function loadCaptionVtt(url: string): Promise<CaptionCue[]> {\n\ttry {\n\t\tconst response = await fetch(url, { cache: \"no-store\" });\n\t\tif (!response.ok) return [];\n\t\treturn parseCaptionVtt(await response.text());\n\t} catch {\n\t\treturn [];\n\t}\n}\n\nexport async function loadLiveCaptions(url: string): Promise<LiveCaptionsLoad> {\n\ttry {\n\t\tconst response = await fetch(url, {\n\t\t\tcache: \"no-store\",\n\t\t\theaders: { Accept: \"application/json\" },\n\t\t});\n\t\tif (!response.ok) return { ok: false, cues: [] };\n\t\tconst body: unknown = await response.json();\n\t\tif (!body || typeof body !== \"object\" || !(\"cues\" in body)) {\n\t\t\treturn { ok: false, cues: [] };\n\t\t}\n\t\tconst rows = (body as { cues: unknown }).cues;\n\t\tif (!Array.isArray(rows)) return { ok: false, cues: [] };\n\t\tconst cues: LiveCaptionCue[] = [];\n\t\tfor (const row of rows) {\n\t\t\tif (!row || typeof row !== \"object\") continue;\n\t\t\tconst record = row as {\n\t\t\t\ttext?: unknown;\n\t\t\t\treceivedAt?: unknown;\n\t\t\t\tspeaker?: unknown;\n\t\t\t};\n\t\t\tif (typeof record.text !== \"string\" || !record.text.trim()) continue;\n\t\t\tif (\n\t\t\t\ttypeof record.receivedAt !== \"number\" ||\n\t\t\t\t!Number.isFinite(record.receivedAt)\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst parsed: LiveCaptionCue = {\n\t\t\t\ttext: record.text.trim(),\n\t\t\t\treceivedAt: record.receivedAt,\n\t\t\t};\n\t\t\tif (\n\t\t\t\ttypeof record.speaker === \"number\" &&\n\t\t\t\tNumber.isFinite(record.speaker)\n\t\t\t) {\n\t\t\t\tparsed.speaker = record.speaker;\n\t\t\t}\n\t\t\tcues.push(parsed);\n\t\t}\n\t\treturn { ok: true, cues };\n\t} catch {\n\t\treturn { ok: false, cues: [] };\n\t}\n}\n","import type { HlsConfig, LoaderResponse, RetryConfig } from \"hls.js\";\n\n/** Retry transient live-edge 404s; hls.js skips all 4xx by default. */\nexport function shouldRetryLiveEdge404(\n\tretryConfig: RetryConfig | null | undefined,\n\tretryCount: number,\n\t_isTimeout: boolean,\n\tloaderResponse: LoaderResponse | undefined,\n\tdefaultRetry: boolean,\n): boolean {\n\tif (loaderResponse?.code === 404) {\n\t\treturn retryConfig != null && retryCount < retryConfig.maxNumRetry;\n\t}\n\treturn defaultRetry;\n}\n\nconst liveEdgeErrorRetry: RetryConfig = {\n\tmaxNumRetry: 8,\n\tretryDelayMs: 250,\n\tmaxRetryDelayMs: 4000,\n\tbackoff: \"exponential\",\n\tshouldRetry: shouldRetryLiveEdge404,\n};\n\n/**\n * iOS 17+ exposes MSE so hls.js can run instead of native HLS. Workers plus\n * live playlist reload recurse inside hls.js on WebKit (LIVO-TV-PLAYER-5).\n */\nexport function isIosHlsHost(userAgent: string, maxTouchPoints = 0): boolean {\n\tif (/iP(hone|od|ad)/i.test(userAgent)) return true;\n\treturn /Macintosh/i.test(userAgent) && maxTouchPoints > 1;\n}\n\nexport function shouldEnableHlsWorker(\n\tuserAgent?: string,\n\tmaxTouchPoints?: number,\n): boolean {\n\tconst ua =\n\t\tuserAgent ?? (typeof navigator === \"undefined\" ? \"\" : navigator.userAgent);\n\tconst points =\n\t\tmaxTouchPoints ??\n\t\t(typeof navigator === \"undefined\" ? 0 : navigator.maxTouchPoints);\n\treturn !isIosHlsHost(ua, points);\n}\n\nexport type LiveHlsConfigOptions = {\n\tuserAgent?: string;\n\tmaxTouchPoints?: number;\n};\n\n/**\n * HLS.js options tuned for live playback through a Cloudflare R2 custom domain.\n * Ported from the app's production player: stays 4 segments (~8s) behind the\n * live edge so transient upload lag never reaches the playhead, and retries the\n * 404s that appear while a new segment is still being written.\n */\nexport function createLiveHlsConfig(\n\toptions: LiveHlsConfigOptions = {},\n): Partial<HlsConfig> {\n\treturn {\n\t\tenableWorker: shouldEnableHlsWorker(\n\t\t\toptions.userAgent,\n\t\t\toptions.maxTouchPoints,\n\t\t),\n\t\tlowLatencyMode: false,\n\t\tliveDurationInfinity: true,\n\t\t// No custom request headers: Cache-Control/Pragma are not\n\t\t// CORS-safelisted and would force an OPTIONS preflight before every\n\t\t// manifest poll and segment fetch. Freshness is controlled by the\n\t\t// origin's response Cache-Control headers instead.\n\t\tliveSyncDurationCount: 4,\n\t\tliveMaxLatencyDurationCount: 12,\n\t\tfragLoadPolicy: {\n\t\t\tdefault: {\n\t\t\t\tmaxTimeToFirstByteMs: 10_000,\n\t\t\t\tmaxLoadTimeMs: 120_000,\n\t\t\t\ttimeoutRetry: {\n\t\t\t\t\tmaxNumRetry: 4,\n\t\t\t\t\tretryDelayMs: 0,\n\t\t\t\t\tmaxRetryDelayMs: 0,\n\t\t\t\t},\n\t\t\t\terrorRetry: liveEdgeErrorRetry,\n\t\t\t},\n\t\t},\n\t\tplaylistLoadPolicy: {\n\t\t\tdefault: {\n\t\t\t\tmaxTimeToFirstByteMs: 10_000,\n\t\t\t\tmaxLoadTimeMs: 30_000,\n\t\t\t\ttimeoutRetry: {\n\t\t\t\t\tmaxNumRetry: 2,\n\t\t\t\t\tretryDelayMs: 0,\n\t\t\t\t\tmaxRetryDelayMs: 0,\n\t\t\t\t},\n\t\t\t\terrorRetry: {\n\t\t\t\t\t...liveEdgeErrorRetry,\n\t\t\t\t\tmaxNumRetry: 6,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t};\n}\n\n/**\n * HLS.js options for on-demand (VOD) playback. No live-edge cushion; enables\n * the worker and lets hls.js manage the buffer with its defaults, which are\n * well suited to seekable recordings.\n */\nexport function createVodHlsConfig(): Partial<HlsConfig> {\n\treturn {\n\t\tenableWorker: true,\n\t\tstartPosition: 0,\n\t};\n}\n","/**\n * Playback error description, ported from the app's HLS player but stripped of\n * Sentry. `@livo/blocks` must stay reporting-agnostic: the player surfaces\n * a {@link DescribedPlaybackError} through an optional `onError` prop so each\n * app can wire its own reporting (Sentry, Datadog, console, …).\n *\n * User-facing messages are intentionally NOT baked in here — they come from the\n * player's `labels` prop so they stay translatable. This module only classifies\n * the error and produces a machine-readable summary + detail for logging.\n */\n\nexport type HlsPlayerMode = \"live\" | \"vod\";\n\nexport const MEDIA_ERROR_NAMES: Record<number, string> = {\n\t1: \"MEDIA_ERR_ABORTED\",\n\t2: \"MEDIA_ERR_NETWORK\",\n\t3: \"MEDIA_ERR_DECODE\",\n\t4: \"MEDIA_ERR_SRC_NOT_SUPPORTED\",\n};\n\n/** Coarse category the player uses to pick the right localized message. */\nexport type PlaybackErrorKind =\n\t| \"unavailable\" // VOD not ready / live not started (404 pre-manifest)\n\t| \"network\" // connectivity problem after manifest parsed\n\t| \"media\" // decode / buffer problem\n\t| \"unsupported\" // browser can't play HLS at all\n\t| \"resync\" // soft A/V drift recovery (never surfaces as a hard error UI)\n\t| \"generic\";\n\nexport type PlaybackErrorContext = {\n\tmode: HlsPlayerMode;\n\tsrc: string;\n\tmanifestParsed: boolean;\n\tretryCount?: number;\n\tsource: \"hls\" | \"native\" | \"unsupported\";\n};\n\nexport type PlaybackErrorDetail = {\n\tsource: PlaybackErrorContext[\"source\"];\n\tkind: PlaybackErrorKind;\n\ttype?: string;\n\tdetails?: string;\n\tfatal?: boolean;\n\thttpStatus?: number;\n\turl?: string;\n\treason?: string;\n\terrorMessage?: string;\n\tmediaErrorCode?: number;\n\tmediaErrorName?: string;\n\tcontext: PlaybackErrorContext;\n};\n\nexport type DescribePlaybackErrorInput =\n\t| {\n\t\t\tsource: \"hls\";\n\t\t\ttype?: string;\n\t\t\tdetails?: string;\n\t\t\tfatal: boolean;\n\t\t\turl?: string;\n\t\t\tresponse?: { code?: number; text?: string };\n\t\t\treason?: string;\n\t\t\terror?: unknown;\n\t\t\tcontext: PlaybackErrorContext;\n\t  }\n\t| {\n\t\t\tsource: \"native\";\n\t\t\tmediaError?: MediaError | null;\n\t\t\tcontext: PlaybackErrorContext;\n\t  }\n\t| {\n\t\t\tsource: \"unsupported\";\n\t\t\tcontext: PlaybackErrorContext;\n\t  };\n\nexport type DescribedPlaybackError = {\n\t/** Machine-readable one-line summary for logs. */\n\tsummary: string;\n\t/** Coarse category for choosing a localized message. */\n\tkind: PlaybackErrorKind;\n\tdetail: PlaybackErrorDetail;\n};\n\nconst MEDIA_ERR_NETWORK = 2;\nconst MEDIA_ERR_DECODE = 3;\nconst MEDIA_ERR_SRC_NOT_SUPPORTED = 4;\n\nfunction errorMessageFromUnknown(error: unknown): string | undefined {\n\tif (error instanceof Error) return error.message;\n\tif (typeof error === \"string\") return error;\n\treturn undefined;\n}\n\n/** Live playlist / level parse failures that recurse inside hls.js reload. */\nexport function isHlsPlaylistParseError(details: string | undefined): boolean {\n\treturn details === \"levelParsingError\" || details === \"manifestParsingError\";\n}\n\nfunction isNotFound(httpStatus?: number, details?: string): boolean {\n\treturn (\n\t\thttpStatus === 404 ||\n\t\tdetails === \"manifestLoadError\" ||\n\t\tdetails === \"levelLoadError\" ||\n\t\tdetails === \"fragLoadError\"\n\t);\n}\n\nfunction kindForHls(\n\tinput: Extract<DescribePlaybackErrorInput, { source: \"hls\" }>,\n): PlaybackErrorKind {\n\tconst httpStatus = input.response?.code;\n\tif (input.type === \"networkError\" && isNotFound(httpStatus, input.details)) {\n\t\treturn input.context.mode === \"vod\" || !input.context.manifestParsed\n\t\t\t? \"unavailable\"\n\t\t\t: \"network\";\n\t}\n\tif (\n\t\tinput.type === \"mediaError\" ||\n\t\tinput.details === \"bufferAppendError\" ||\n\t\tinput.details === \"bufferSeekOverHole\"\n\t) {\n\t\treturn \"media\";\n\t}\n\treturn \"generic\";\n}\n\nfunction kindForNative(\n\tinput: Extract<DescribePlaybackErrorInput, { source: \"native\" }>,\n): PlaybackErrorKind {\n\tconst code = input.mediaError?.code;\n\tif (code === MEDIA_ERR_DECODE) return \"media\";\n\tif (code === MEDIA_ERR_SRC_NOT_SUPPORTED) return \"unsupported\";\n\tif (code === MEDIA_ERR_NETWORK) return \"unavailable\";\n\treturn \"generic\";\n}\n\n/**\n * Soft (non-fatal) report for an automatic A/V resync. Apps should treat this\n * like other non-fatal playback events (breadcrumb / warn), never as a hard\n * error UI — the player recovers in place.\n */\nexport function describeAvResync(input: {\n\tlagSeconds: number;\n\tcontext: PlaybackErrorContext;\n}): DescribedPlaybackError {\n\tconst lag = Number.isFinite(input.lagSeconds) ? input.lagSeconds : 0;\n\treturn {\n\t\tsummary: `av-resync lag=${lag.toFixed(3)}s (non-fatal)`,\n\t\tkind: \"resync\",\n\t\tdetail: {\n\t\t\tsource: input.context.source,\n\t\t\tkind: \"resync\",\n\t\t\tfatal: false,\n\t\t\treason: `presented frame lag ${lag.toFixed(3)}s`,\n\t\t\tcontext: input.context,\n\t\t},\n\t};\n}\n\nexport function describePlaybackError(\n\tinput: DescribePlaybackErrorInput,\n): DescribedPlaybackError {\n\tif (input.source === \"unsupported\") {\n\t\treturn {\n\t\t\tsummary:\n\t\t\t\t\"playback unsupported (hls.js unavailable, native HLS unsupported)\",\n\t\t\tkind: \"unsupported\",\n\t\t\tdetail: {\n\t\t\t\tsource: \"unsupported\",\n\t\t\t\tkind: \"unsupported\",\n\t\t\t\tcontext: input.context,\n\t\t\t},\n\t\t};\n\t}\n\n\tif (input.source === \"native\") {\n\t\tconst code = input.mediaError?.code;\n\t\tconst kind = kindForNative(input);\n\t\tconst detail: PlaybackErrorDetail = {\n\t\t\tsource: \"native\",\n\t\t\tkind,\n\t\t\tmediaErrorCode: code,\n\t\t\tmediaErrorName: code !== undefined ? MEDIA_ERROR_NAMES[code] : undefined,\n\t\t\terrorMessage: input.mediaError?.message,\n\t\t\tcontext: input.context,\n\t\t};\n\t\tconst name = detail.mediaErrorName ?? \"MEDIA_ERR_UNKNOWN\";\n\t\treturn {\n\t\t\tsummary: `native ${name}${input.mediaError?.message ? `: ${input.mediaError.message}` : \"\"}`,\n\t\t\tkind,\n\t\t\tdetail,\n\t\t};\n\t}\n\n\tconst httpStatus = input.response?.code;\n\tconst kind = kindForHls(input);\n\tconst detail: PlaybackErrorDetail = {\n\t\tsource: \"hls\",\n\t\tkind,\n\t\ttype: input.type,\n\t\tdetails: input.details,\n\t\tfatal: input.fatal,\n\t\thttpStatus,\n\t\turl: input.url,\n\t\treason: input.reason,\n\t\terrorMessage: errorMessageFromUnknown(input.error),\n\t\tcontext: input.context,\n\t};\n\n\tconst statusSuffix = httpStatus !== undefined ? ` ${httpStatus}` : \"\";\n\tconst summary = [\n\t\t\"hls\",\n\t\tinput.type ?? \"unknown\",\n\t\tinput.details ?? \"unknown\",\n\t\tinput.fatal ? \"(fatal)\" : \"(non-fatal)\",\n\t\tstatusSuffix.trim(),\n\t]\n\t\t.filter(Boolean)\n\t\t.join(\" \");\n\n\treturn { summary, kind, detail };\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { isLivePlaylistSrc } from \"./captions\";\nimport { createLiveHlsConfig, createVodHlsConfig } from \"./hls-config\";\nimport {\n\tdescribeAvResync,\n\tdescribePlaybackError,\n\tisHlsPlaylistParseError,\n\ttype DescribedPlaybackError,\n\ttype HlsPlayerMode,\n} from \"./hls-errors\";\n\ntype HlsCtor = typeof import(\"hls.js\").default;\ntype HlsInstance = InstanceType<HlsCtor>;\n\nexport type PlaybackState = \"idle\" | \"loading\" | \"ready\" | \"waiting\" | \"error\";\n\n/** Autoplay overlay state once the manifest is parsed. */\nexport type AutoplayState =\n\t| \"none\" // not applicable yet\n\t| \"playing\" // unmuted autoplay succeeded\n\t| \"muted\" // fell back to muted autoplay; show \"tap to unmute\"\n\t| \"blocked\"; // both failed; show a Play button\n\nexport interface QualityLevel {\n\t/** hls.js level index. */\n\tindex: number;\n\t/** Vertical resolution, e.g. 720. */\n\theight: number;\n}\n\nexport interface UseHlsPlaybackOptions {\n\tsrc: string;\n\tmode: HlsPlayerMode;\n\t/** When false, nothing is attached/loaded (poster gating). */\n\tactive: boolean;\n\t/** Attempt autoplay once the manifest is ready. Live always autoplays. */\n\tautoPlay?: boolean;\n\t/** Start muted (independent of the autoplay cascade). */\n\tmuted?: boolean;\n\tonError?: (error: DescribedPlaybackError) => void;\n\tonPlayingChange?: (playing: boolean) => void;\n\tonRebuffer?: (seconds: number) => void;\n\tonQualityChange?: (quality: string) => void;\n}\n\nexport interface UseHlsPlaybackResult {\n\tvideoRef: React.RefObject<HTMLVideoElement | null>;\n\tstate: PlaybackState;\n\t/** Available quality levels (empty for native HLS / single-level). */\n\tqualities: QualityLevel[];\n\t/** Selected level index, or -1 for automatic. */\n\tactiveLevel: number;\n\tsetLevel: (index: number) => void;\n\tautoplayState: AutoplayState;\n\t/** The classified error, when `state === \"error\"`. */\n\terror: DescribedPlaybackError | null;\n\tretry: () => void;\n\t/**\n\t * Chrome mode derived from the playlist. A `/live/` src stays `\"live\"`\n\t * until hls.js reports `#EXT-X-ENDLIST` (`details.live === false`).\n\t * Non-live srcs follow the `mode` prop.\n\t */\n\teffectiveMode: HlsPlayerMode;\n}\n\n/** Playlist-derived live vs VOD for chrome and duration. */\nexport function effectivePlaybackMode(\n\tsrc: string,\n\tmode: HlsPlayerMode,\n\tsealed: boolean,\n): HlsPlayerMode {\n\tif (isLivePlaylistSrc(src)) return sealed ? \"vod\" : \"live\";\n\treturn mode;\n}\n\nconst RETRY_INTERVAL_MS = 3000;\nconst MAX_MEDIA_ERROR_RETRIES = 5;\n\n/** Presented-frame lag vs media clock that counts as A/V drift. */\nconst DRIFT_THRESHOLD_S = 0.4;\n/** Consecutive rVFC samples above the threshold before we resync. */\nconst DRIFT_CONSECUTIVE_SAMPLES = 3;\n/** Minimum gap between automatic resync seeks. */\nconst RESYNC_COOLDOWN_MS = 10_000;\n/** Behind-live distance that prefers a live-edge seek over a micro-seek. */\nconst LIVE_EDGE_RESYNC_THRESHOLD_S = 8;\n\n/**\n * Attaches hls.js (loaded on demand via dynamic import) or native HLS to a\n * `<video>` element and exposes the state a custom control bar needs. Ported\n * from the app's production `HlsPlayer` effect, minus the built-in UI and\n * Sentry: errors are classified and handed to `onError`.\n */\nexport function useHlsPlayback({\n\tsrc,\n\tmode,\n\tactive,\n\tautoPlay = false,\n\tmuted = false,\n\tonError,\n\tonPlayingChange,\n\tonRebuffer,\n\tonQualityChange,\n}: UseHlsPlaybackOptions): UseHlsPlaybackResult {\n\tconst videoRef = React.useRef<HTMLVideoElement>(null);\n\tconst hlsRef = React.useRef<HlsInstance | null>(null);\n\n\tconst [state, setState] = React.useState<PlaybackState>(\"idle\");\n\tconst [qualities, setQualities] = React.useState<QualityLevel[]>([]);\n\tconst [activeLevel, setActiveLevel] = React.useState(-1);\n\tconst [autoplayState, setAutoplayState] =\n\t\tReact.useState<AutoplayState>(\"none\");\n\tconst [error, setError] = React.useState<DescribedPlaybackError | null>(null);\n\tconst [reloadKey, setReloadKey] = React.useState(0);\n\tconst [sealed, setSealed] = React.useState(false);\n\n\tconst modeRef = React.useRef(mode);\n\tconst lastSrcRef = React.useRef(src);\n\tconst sealedRef = React.useRef(false);\n\tconst sawLiveRef = React.useRef(false);\n\tconst sealedDuringSessionRef = React.useRef(false);\n\n\tReact.useEffect(() => {\n\t\tmodeRef.current = mode;\n\t}, [mode]);\n\n\tconst onErrorRef = React.useRef(onError);\n\tconst onPlayingChangeRef = React.useRef(onPlayingChange);\n\tconst onRebufferRef = React.useRef(onRebuffer);\n\tconst onQualityChangeRef = React.useRef(onQualityChange);\n\tReact.useEffect(() => {\n\t\tonErrorRef.current = onError;\n\t\tonPlayingChangeRef.current = onPlayingChange;\n\t\tonRebufferRef.current = onRebuffer;\n\t\tonQualityChangeRef.current = onQualityChange;\n\t}, [onError, onPlayingChange, onRebuffer, onQualityChange]);\n\n\tconst retry = React.useCallback(() => {\n\t\tsetError(null);\n\t\tsetState(\"loading\");\n\t\tsetAutoplayState(\"none\");\n\t\tsetReloadKey((k) => k + 1);\n\t}, []);\n\n\tReact.useEffect(() => {\n\t\tconst media = videoRef.current;\n\t\tif (!media || !src || !active) {\n\t\t\tsetState(\"idle\");\n\t\t\treturn;\n\t\t}\n\n\t\tlet cancelled = false;\n\t\tlet retryTimer: ReturnType<typeof setTimeout> | null = null;\n\t\tlet manifestParsed = false;\n\t\tlet mediaErrorRetries = 0;\n\t\tlet recoveredParseError = false;\n\t\t/** Updated once hls.js vs native is chosen; used by the drift watchdog. */\n\t\tlet playbackSource: \"hls\" | \"native\" | \"unsupported\" = \"hls\";\n\t\tconst teardown: Array<() => void> = [];\n\t\tconst liveSrc = isLivePlaylistSrc(src);\n\n\t\tif (lastSrcRef.current !== src) {\n\t\t\tlastSrcRef.current = src;\n\t\t\tsealedRef.current = false;\n\t\t\tsawLiveRef.current = false;\n\t\t\tsealedDuringSessionRef.current = false;\n\t\t\tsetSealed(false);\n\t\t}\n\n\t\tapplyMute(media);\n\t\tsetState(\"loading\");\n\t\tsetError(null);\n\t\tsetAutoplayState(\"none\");\n\t\tsetQualities([]);\n\t\tsetActiveLevel(-1);\n\n\t\tfunction baseContext() {\n\t\t\treturn {\n\t\t\t\tmode: modeRef.current,\n\t\t\t\tsrc,\n\t\t\t\tmanifestParsed,\n\t\t\t\tretryCount: mediaErrorRetries,\n\t\t\t\tsource: playbackSource,\n\t\t\t};\n\t\t}\n\n\t\tfunction shouldAutoplay() {\n\t\t\tif (sealedDuringSessionRef.current) return false;\n\t\t\treturn modeRef.current === \"live\" || autoPlay;\n\t\t}\n\n\t\tfunction hlsConfig() {\n\t\t\tif (liveSrc) {\n\t\t\t\treturn sealedRef.current ? createVodHlsConfig() : createLiveHlsConfig();\n\t\t\t}\n\t\t\treturn modeRef.current === \"live\"\n\t\t\t\t? createLiveHlsConfig()\n\t\t\t\t: createVodHlsConfig();\n\t\t}\n\n\t\tfunction clearRetryTimer() {\n\t\t\tif (retryTimer !== null) {\n\t\t\t\tclearTimeout(retryTimer);\n\t\t\t\tretryTimer = null;\n\t\t\t}\n\t\t}\n\n\t\tfunction destroyHls() {\n\t\t\thlsRef.current?.destroy();\n\t\t\thlsRef.current = null;\n\t\t}\n\n\t\tfunction reportFatal(input: Parameters<typeof describePlaybackError>[0]) {\n\t\t\tconst described = describePlaybackError(input);\n\t\t\tonErrorRef.current?.(described);\n\t\t\tsetError(described);\n\t\t\tsetState(\"error\");\n\t\t}\n\n\t\tfunction applyMute(el: HTMLVideoElement) {\n\t\t\tel.muted = muted;\n\t\t}\n\n\t\tfunction preserveMute(el: HTMLVideoElement, fn: () => void) {\n\t\t\tconst wasMuted = el.muted;\n\t\t\tfn();\n\t\t\tel.muted = wasMuted;\n\t\t}\n\n\t\tfunction attemptAutoplay(el: HTMLVideoElement) {\n\t\t\t// attachMedia / native load() can clear the muted flag. Re-apply\n\t\t\t// before play() so a user-gesture navigation cannot start unmuted\n\t\t\t// while the control bar still shows mute.\n\t\t\tapplyMute(el);\n\t\t\tvoid el.play().then(\n\t\t\t\t() => {\n\t\t\t\t\tapplyMute(el);\n\t\t\t\t\tsetAutoplayState(\"playing\");\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tel.muted = true;\n\t\t\t\t\tvoid el.play().then(\n\t\t\t\t\t\t() => setAutoplayState(muted ? \"playing\" : \"muted\"),\n\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t// Native live HLS can start after both play() promises\n\t\t\t\t\t\t\t// reject. Only show the blocked overlay if still paused.\n\t\t\t\t\t\t\tif (el.paused) {\n\t\t\t\t\t\t\t\tsetAutoplayState(\"blocked\");\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsetAutoplayState(el.muted && !muted ? \"muted\" : \"playing\");\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\n\t\tfunction scheduleRetry(retryFn: () => void) {\n\t\t\tclearRetryTimer();\n\t\t\tif (cancelled) return;\n\t\t\tsetState(\"waiting\");\n\t\t\tretryTimer = setTimeout(() => {\n\t\t\t\tretryTimer = null;\n\t\t\t\tif (!cancelled) retryFn();\n\t\t\t}, RETRY_INTERVAL_MS);\n\t\t}\n\n\t\t/**\n\t\t * Detect compounding A/V desync (video freezes while audio/media clock\n\t\t * advances) via requestVideoFrameCallback. A micro-seek (or live-edge\n\t\t * seek) flushes the rendering pipeline — the automated form of the\n\t\t * known \"seek restores sync\" workaround. No-ops where rVFC is missing.\n\t\t */\n\t\tfunction startDriftWatchdog(el: HTMLVideoElement) {\n\t\t\tif (typeof el.requestVideoFrameCallback !== \"function\") return;\n\n\t\t\tlet consecutiveLagSamples = 0;\n\t\t\tlet lastResyncAt = 0;\n\t\t\tlet handle: number | null = null;\n\n\t\t\tconst tick: VideoFrameRequestCallback = (_now, metadata) => {\n\t\t\t\tif (cancelled) return;\n\t\t\t\thandle = el.requestVideoFrameCallback(tick);\n\n\t\t\t\tif (el.paused || el.ended) {\n\t\t\t\t\tconsecutiveLagSamples = 0;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// mediaTime is the PTS of the frame just presented. When video\n\t\t\t\t// freezes over a PTS hole, mediaTime stalls while currentTime\n\t\t\t\t// (audio clock) keeps advancing → positive lag.\n\t\t\t\tconst lag = el.currentTime - metadata.mediaTime;\n\t\t\t\tif (!(lag > DRIFT_THRESHOLD_S)) {\n\t\t\t\t\tconsecutiveLagSamples = 0;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconsecutiveLagSamples += 1;\n\t\t\t\tif (consecutiveLagSamples < DRIFT_CONSECUTIVE_SAMPLES) return;\n\n\t\t\t\tconst nowMs = performance.now();\n\t\t\t\tif (nowMs - lastResyncAt < RESYNC_COOLDOWN_MS) return;\n\n\t\t\t\tlastResyncAt = nowMs;\n\t\t\t\tconsecutiveLagSamples = 0;\n\n\t\t\t\tif (modeRef.current === \"live\" && el.seekable.length > 0) {\n\t\t\t\t\tconst edge = el.seekable.end(el.seekable.length - 1);\n\t\t\t\t\tif (edge - el.currentTime > LIVE_EDGE_RESYNC_THRESHOLD_S) {\n\t\t\t\t\t\tel.currentTime = edge;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tel.currentTime = el.currentTime + 0.001;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tel.currentTime = el.currentTime + 0.001;\n\t\t\t\t}\n\n\t\t\t\tonErrorRef.current?.(\n\t\t\t\t\tdescribeAvResync({\n\t\t\t\t\t\tlagSeconds: lag,\n\t\t\t\t\t\tcontext: baseContext(),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t};\n\n\t\t\thandle = el.requestVideoFrameCallback(tick);\n\t\t\tteardown.push(() => {\n\t\t\t\tif (\n\t\t\t\t\thandle != null &&\n\t\t\t\t\ttypeof el.cancelVideoFrameCallback === \"function\"\n\t\t\t\t) {\n\t\t\t\t\tel.cancelVideoFrameCallback(handle);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tlet hasPlayed = false;\n\t\tlet waitingSince: number | null = null;\n\n\t\tfunction onPlaying() {\n\t\t\tmanifestParsed = true;\n\t\t\tmediaErrorRetries = 0;\n\t\t\tclearRetryTimer();\n\t\t\tsetState(\"ready\");\n\t\t\tsetAutoplayState((prev) =>\n\t\t\t\tprev === \"blocked\" || prev === \"none\" ? \"playing\" : prev,\n\t\t\t);\n\t\t\tif (waitingSince != null) {\n\t\t\t\tconst seconds = (performance.now() - waitingSince) / 1000;\n\t\t\t\twaitingSince = null;\n\t\t\t\tif (seconds > 0) onRebufferRef.current?.(seconds);\n\t\t\t}\n\t\t\thasPlayed = true;\n\t\t\tonPlayingChangeRef.current?.(true);\n\t\t}\n\t\tfunction onPaused() {\n\t\t\tonPlayingChangeRef.current?.(false);\n\t\t}\n\t\tfunction onWaiting() {\n\t\t\tif (!hasPlayed || waitingSince != null) return;\n\t\t\twaitingSince = performance.now();\n\t\t}\n\t\tmedia.addEventListener(\"playing\", onPlaying);\n\t\tmedia.addEventListener(\"pause\", onPaused);\n\t\tmedia.addEventListener(\"ended\", onPaused);\n\t\tmedia.addEventListener(\"waiting\", onWaiting);\n\t\tteardown.push(() => {\n\t\t\tmedia.removeEventListener(\"playing\", onPlaying);\n\t\t\tmedia.removeEventListener(\"pause\", onPaused);\n\t\t\tmedia.removeEventListener(\"ended\", onPaused);\n\t\t\tmedia.removeEventListener(\"waiting\", onWaiting);\n\t\t});\n\n\t\tstartDriftWatchdog(media);\n\n\t\tfunction initNative() {\n\t\t\tplaybackSource = \"native\";\n\t\t\tmanifestParsed = false;\n\t\t\tmedia!.removeAttribute(\"src\");\n\t\t\tmedia!.load();\n\t\t\tmedia!.src = src;\n\t\t\tapplyMute(media!);\n\n\t\t\tconst onReady = () => {\n\t\t\t\tmanifestParsed = true;\n\t\t\t\tclearRetryTimer();\n\t\t\t\tsetState(\"ready\");\n\t\t\t\tif (shouldAutoplay()) attemptAutoplay(media!);\n\t\t\t};\n\t\t\tconst onErr = () => {\n\t\t\t\tif (manifestParsed) {\n\t\t\t\t\treportFatal({\n\t\t\t\t\t\tsource: \"native\",\n\t\t\t\t\t\tmediaError: media!.error,\n\t\t\t\t\t\tcontext: baseContext(),\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tonErrorRef.current?.(\n\t\t\t\t\tdescribePlaybackError({\n\t\t\t\t\t\tsource: \"native\",\n\t\t\t\t\t\tmediaError: media!.error,\n\t\t\t\t\t\tcontext: baseContext(),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tscheduleRetry(() => {\n\t\t\t\t\tmedia!.src = src;\n\t\t\t\t\tmedia!.load();\n\t\t\t\t});\n\t\t\t};\n\t\t\tmedia!.addEventListener(\"loadedmetadata\", onReady);\n\t\t\tmedia!.addEventListener(\"error\", onErr);\n\t\t\tteardown.push(() => {\n\t\t\t\tmedia!.removeEventListener(\"loadedmetadata\", onReady);\n\t\t\t\tmedia!.removeEventListener(\"error\", onErr);\n\t\t\t});\n\t\t}\n\n\t\tfunction initHlsJs(Hls: HlsCtor) {\n\t\t\tplaybackSource = \"hls\";\n\t\t\tdestroyHls();\n\t\t\tmanifestParsed = false;\n\t\t\tconst config = hlsConfig();\n\t\t\tconst hls = new Hls(config);\n\t\t\thlsRef.current = hls;\n\t\t\thls.loadSource(src);\n\t\t\thls.attachMedia(media!);\n\t\t\tapplyMute(media!);\n\n\t\t\thls.on(Hls.Events.LEVEL_LOADED, (_e, data) => {\n\t\t\t\tif (!liveSrc || cancelled) return;\n\t\t\t\tconst details = data.details;\n\t\t\t\tif (!details) return;\n\t\t\t\tif (details.live) {\n\t\t\t\t\tsawLiveRef.current = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (sealedRef.current) return;\n\t\t\t\tsealedRef.current = true;\n\t\t\t\tsetSealed(true);\n\t\t\t\tif (sawLiveRef.current) {\n\t\t\t\t\tsealedDuringSessionRef.current = true;\n\t\t\t\t}\n\t\t\t\tsetReloadKey((k) => k + 1);\n\t\t\t});\n\n\t\t\thls.on(Hls.Events.MANIFEST_PARSED, (_e, data) => {\n\t\t\t\tmanifestParsed = true;\n\t\t\t\tclearRetryTimer();\n\t\t\t\tsetQualities(\n\t\t\t\t\tdata.levels.map((l, index) => ({ index, height: l.height })),\n\t\t\t\t);\n\t\t\t\tsetState(\"ready\");\n\t\t\t\tif (shouldAutoplay()) attemptAutoplay(media!);\n\t\t\t});\n\n\t\t\thls.on(Hls.Events.LEVEL_SWITCHED, (_e, data) => {\n\t\t\t\tif (hls.autoLevelEnabled) setActiveLevel(-1);\n\t\t\t\telse setActiveLevel(data.level);\n\t\t\t\tconst height = hls.levels?.[data.level]?.height;\n\t\t\t\tonQualityChangeRef.current?.(\n\t\t\t\t\ttypeof height === \"number\" && height > 0 ? `${height}p` : \"auto\",\n\t\t\t\t);\n\t\t\t});\n\n\t\t\thls.on(Hls.Events.ERROR, (_e, data) => {\n\t\t\t\tonErrorRef.current?.(\n\t\t\t\t\tdescribePlaybackError({\n\t\t\t\t\t\tsource: \"hls\",\n\t\t\t\t\t\ttype: data.type,\n\t\t\t\t\t\tdetails: data.details,\n\t\t\t\t\t\tfatal: data.fatal,\n\t\t\t\t\t\turl: data.url,\n\t\t\t\t\t\tresponse: data.response,\n\t\t\t\t\t\treason: data.reason,\n\t\t\t\t\t\terror: data.error,\n\t\t\t\t\t\tcontext: baseContext(),\n\t\t\t\t\t}),\n\t\t\t\t);\n\n\t\t\t\tif (isHlsPlaylistParseError(data.details)) {\n\t\t\t\t\tif (!recoveredParseError) {\n\t\t\t\t\t\trecoveredParseError = true;\n\t\t\t\t\t\tscheduleRetry(() => initHlsJs(Hls));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (data.fatal) {\n\t\t\t\t\t\treportFatal({\n\t\t\t\t\t\t\tsource: \"hls\",\n\t\t\t\t\t\t\ttype: data.type,\n\t\t\t\t\t\t\tdetails: data.details,\n\t\t\t\t\t\t\tfatal: true,\n\t\t\t\t\t\t\turl: data.url,\n\t\t\t\t\t\t\tresponse: data.response,\n\t\t\t\t\t\t\treason: data.reason,\n\t\t\t\t\t\t\terror: data.error,\n\t\t\t\t\t\t\tcontext: baseContext(),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!data.fatal) return;\n\n\t\t\t\tif (data.type === Hls.ErrorTypes.NETWORK_ERROR) {\n\t\t\t\t\tif (!manifestParsed) {\n\t\t\t\t\t\tscheduleRetry(() => initHlsJs(Hls));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\thls.startLoad();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tmediaErrorRetries += 1;\n\t\t\t\tif (mediaErrorRetries === 1) {\n\t\t\t\t\tpreserveMute(media!, () => hls.recoverMediaError());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (mediaErrorRetries === 2) {\n\t\t\t\t\tpreserveMute(media!, () => {\n\t\t\t\t\t\thls.swapAudioCodec();\n\t\t\t\t\t\thls.recoverMediaError();\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (mediaErrorRetries < MAX_MEDIA_ERROR_RETRIES) {\n\t\t\t\t\tscheduleRetry(() => initHlsJs(Hls));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\treportFatal({\n\t\t\t\t\tsource: \"hls\",\n\t\t\t\t\ttype: data.type,\n\t\t\t\t\tdetails: data.details,\n\t\t\t\t\tfatal: true,\n\t\t\t\t\turl: data.url,\n\t\t\t\t\tresponse: data.response,\n\t\t\t\t\treason: data.reason,\n\t\t\t\t\terror: data.error,\n\t\t\t\t\tcontext: baseContext(),\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\tasync function setup() {\n\t\t\tlet Hls: HlsCtor | null = null;\n\t\t\ttry {\n\t\t\t\tHls = (await import(/* turbopackOptional: true */ \"hls.js\")).default;\n\t\t\t} catch {\n\t\t\t\tHls = null;\n\t\t\t}\n\t\t\tif (cancelled) return;\n\n\t\t\tif (Hls && Hls.isSupported()) {\n\t\t\t\tinitHlsJs(Hls);\n\t\t\t} else if (media!.canPlayType(\"application/vnd.apple.mpegurl\")) {\n\t\t\t\tinitNative();\n\t\t\t} else {\n\t\t\t\tplaybackSource = \"unsupported\";\n\t\t\t\treportFatal({\n\t\t\t\t\tsource: \"unsupported\",\n\t\t\t\t\tcontext: baseContext(),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvoid setup();\n\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t\tclearRetryTimer();\n\t\t\tfor (const fn of teardown) fn();\n\t\t\tdestroyHls();\n\t\t};\n\t}, [src, active, autoPlay, muted, reloadKey]);\n\n\tconst setLevel = React.useCallback((index: number) => {\n\t\tconst hls = hlsRef.current;\n\t\tif (!hls) return;\n\t\thls.nextLevel = index;\n\t\tsetActiveLevel(index);\n\t}, []);\n\n\treturn {\n\t\tvideoRef,\n\t\tstate,\n\t\tqualities,\n\t\tactiveLevel,\n\t\tsetLevel,\n\t\tautoplayState,\n\t\terror,\n\t\tretry,\n\t\teffectiveMode: effectivePlaybackMode(src, mode, sealed),\n\t};\n}\n","/** iOS Safari / Chrome video fullscreen (not the element Fullscreen API). */\nexport type WebkitHTMLVideoElement = HTMLVideoElement & {\n\twebkitEnterFullscreen?: () => void;\n\twebkitExitFullscreen?: () => void;\n\twebkitDisplayingFullscreen?: boolean;\n};\n\nexport function asWebkitVideo(\n\tvideo: HTMLVideoElement | null,\n): WebkitHTMLVideoElement | null {\n\treturn video;\n}\n\nexport function hasWebkitVideoFullscreen(\n\tvideo: HTMLVideoElement | null,\n): boolean {\n\treturn typeof asWebkitVideo(video)?.webkitEnterFullscreen === \"function\";\n}\n\nexport function hasStandardFullscreen(): boolean {\n\tif (typeof document === \"undefined\") return false;\n\tif (document.fullscreenEnabled) return true;\n\t// Desktop Safari (truthy check — avoid `in`, which is true even when disabled)\n\tconst doc = document as Document & { webkitFullscreenEnabled?: boolean };\n\treturn !!doc.webkitFullscreenEnabled;\n}\n\n/** Cross-origin iframe: accessing `top` can throw. Treat that as embedded. */\nexport function isEmbeddedWindow(\n\twin: { self: unknown; top: unknown } = window,\n): boolean {\n\ttry {\n\t\treturn win.self !== win.top;\n\t} catch {\n\t\treturn true;\n\t}\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"../../lib/utils\";\nimport type { CaptionScreen } from \"./captions\";\n\nexport type CaptionOverlayProps = {\n\tscreen: CaptionScreen | null;\n\tclassName?: string;\n\ttextClassName?: string;\n};\n\nexport function CaptionOverlay({\n\tscreen,\n\tclassName,\n\ttextClassName,\n}: CaptionOverlayProps) {\n\tconst lastSpeakerRef = React.useRef<number | undefined>(undefined);\n\tconst lastSpeaker = lastSpeakerRef.current;\n\n\tReact.useLayoutEffect(() => {\n\t\tif (screen?.speaker != null) lastSpeakerRef.current = screen.speaker;\n\t}, [screen]);\n\n\tif (!screen) return null;\n\n\tconst turnDash =\n\t\tscreen.speaker != null &&\n\t\tlastSpeaker != null &&\n\t\tscreen.speaker !== lastSpeaker;\n\tconst text = turnDash ? `– ${screen.text}` : screen.text;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"pointer-events-none absolute inset-x-0 bottom-16 z-[1] flex justify-center px-4\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tdata-slot=\"video-captions\"\n\t\t>\n\t\t\t<p\n\t\t\t\trole=\"status\"\n\t\t\t\taria-live=\"polite\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"line-clamp-2 max-w-[90%] whitespace-pre-line break-words rounded-sm bg-black/70 px-3 py-1.5 text-center text-[length:clamp(10px,2.6cqh,0.875rem)] font-medium text-white shadow-sm [-webkit-text-size-adjust:100%] [text-size-adjust:100%]\",\n\t\t\t\t\ttextClassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{text}\n\t\t\t</p>\n\t\t</div>\n\t);\n}\n","import {\n\tCAPTION_LOCALES,\n\tisCaptionLocale,\n\ttype CaptionCue,\n\ttype CaptionLocale,\n} from \"./captions\";\n\n/** How long a mirrored live cue stays on the native track. */\nexport const NATIVE_CAPTION_HOLD_S = 4;\n\n/** iOS Idioma lists `subtitles`; `captions` often stays under a separate CC toggle. */\nexport const NATIVE_SUBTITLE_KIND = \"subtitles\";\n\nexport type CaptionTrackLabels = Record<CaptionLocale, string>;\n\nexport function joinCaptionTexts(cues: { text: string }[]): string {\n\treturn cues\n\t\t.map((cue) => cue.text.trim())\n\t\t.filter(Boolean)\n\t\t.join(\" \");\n}\n\nexport function clearNativeCaptionCues(track: TextTrack): void {\n\tconst cues = track.cues;\n\tif (!cues) return;\n\tfor (let index = cues.length - 1; index >= 0; index -= 1) {\n\t\tconst cue = cues[index];\n\t\tif (cue) track.removeCue(cue);\n\t}\n}\n\nexport function subtitleTracksForLocales(video: HTMLVideoElement): TextTrack[] {\n\treturn Array.from(video.textTracks).filter(\n\t\t(track) =>\n\t\t\ttrack.kind === NATIVE_SUBTITLE_KIND && isCaptionLocale(track.language),\n\t);\n}\n\nexport function findSubtitleTrack(\n\tvideo: HTMLVideoElement,\n\tlocale: CaptionLocale,\n): TextTrack | null {\n\treturn (\n\t\tsubtitleTracksForLocales(video).find(\n\t\t\t(track) => track.language === locale,\n\t\t) ?? null\n\t);\n}\n\nexport function showingCaptionLocale(\n\tvideo: HTMLVideoElement,\n): CaptionLocale | \"off\" {\n\tfor (const track of subtitleTracksForLocales(video)) {\n\t\tif (track.mode === \"showing\" && isCaptionLocale(track.language)) {\n\t\t\treturn track.language;\n\t\t}\n\t}\n\treturn \"off\";\n}\n\n/**\n * Selected language is `showing` only while native video fullscreen is up.\n * Inline / CSS / standard fullscreen keep it `hidden` so the HTML overlay\n * is the only renderer.\n */\nexport function applyCaptionTrackModes(\n\tvideo: HTMLVideoElement,\n\tlocale: CaptionLocale | \"off\",\n\tnativeVisible: boolean,\n): void {\n\tfor (const track of subtitleTracksForLocales(video)) {\n\t\tif (locale !== \"off\" && track.language === locale) {\n\t\t\ttrack.mode = nativeVisible ? \"showing\" : \"hidden\";\n\t\t} else {\n\t\t\ttrack.mode = \"disabled\";\n\t\t}\n\t}\n}\n\nexport function ensureLiveSubtitleTracks(\n\tvideo: HTMLVideoElement,\n\tlabels: CaptionTrackLabels,\n): TextTrack[] {\n\tconst existing = subtitleTracksForLocales(video);\n\treturn CAPTION_LOCALES.map((locale) => {\n\t\tconst found = existing.find((track) => track.language === locale);\n\t\tif (found) return found;\n\t\tconst track = video.addTextTrack(\n\t\t\tNATIVE_SUBTITLE_KIND,\n\t\t\tlabels[locale],\n\t\t\tlocale,\n\t\t);\n\t\ttrack.mode = \"disabled\";\n\t\treturn track;\n\t});\n}\n\nexport function syncNativeCaptionCue(\n\tvideo: HTMLVideoElement,\n\ttrack: TextTrack,\n\ttext: string,\n\tholdSeconds = NATIVE_CAPTION_HOLD_S,\n): void {\n\tclearNativeCaptionCues(track);\n\tconst trimmed = text.trim();\n\tif (!trimmed) return;\n\tconst start = Number.isFinite(video.currentTime) ? video.currentTime : 0;\n\tconst hold = Number.isFinite(holdSeconds)\n\t\t? Math.max(0.2, holdSeconds)\n\t\t: NATIVE_CAPTION_HOLD_S;\n\ttrack.addCue(new VTTCue(start, start + hold, trimmed));\n}\n\nexport function syncNativeVodCues(track: TextTrack, cues: CaptionCue[]): void {\n\tclearNativeCaptionCues(track);\n\tfor (const cue of cues) {\n\t\tconst text = cue.text.trim();\n\t\tif (!text) continue;\n\t\ttrack.addCue(new VTTCue(cue.start, cue.end, text));\n\t}\n}\n\nexport function setNativeCaptionTrackVisible(\n\ttrack: TextTrack | null,\n\tshowing: boolean,\n): void {\n\tif (!track) return;\n\ttrack.mode = showing ? \"showing\" : \"hidden\";\n}\n\n/** jsdom's TextTrackList is not an EventTarget; Safari/iOS use `change`. */\nexport function listenTextTracksChange(\n\ttracks: TextTrackList,\n\tonChange: EventListener,\n): () => void {\n\tif (typeof tracks.addEventListener === \"function\") {\n\t\ttracks.addEventListener(\"change\", onChange);\n\t\treturn () => {\n\t\t\tif (typeof tracks.removeEventListener === \"function\") {\n\t\t\t\ttracks.removeEventListener(\"change\", onChange);\n\t\t\t}\n\t\t};\n\t}\n\ttracks.onchange = onChange;\n\treturn () => {\n\t\tif (tracks.onchange === onChange) tracks.onchange = null;\n\t};\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport {\n\tAlertCircle,\n\tCaptions,\n\tCast,\n\tCheck,\n\tChevronLeft,\n\tChevronRight,\n\tEllipsisVertical,\n\tGauge,\n\tLoader2,\n\tMaximize,\n\tMinimize,\n\tPause,\n\tPictureInPicture2,\n\tPlay,\n\tRotateCw,\n\tSettings,\n\tVolume1,\n\tVolume2,\n\tVolumeX,\n} from \"lucide-react\";\n\nimport { cn } from \"../../lib/utils\";\nimport { Slider } from \"../ui/slider\";\nimport type { DescribedPlaybackError } from \"./hls-errors\";\nimport { castHlsUrl } from \"./castHls\";\nimport { finitePlaybackDuration } from \"./seekPreview\";\nimport { SeekBar } from \"./SeekBar\";\nimport { useHlsPlayback } from \"./useHlsPlayback\";\nimport type { PlaybackStats } from \"./usePlaybackStats\";\nimport {\n\tCAPTION_COMPACT_CHARS_PER_LINE,\n\tCAPTION_LOCALES,\n\tCAPTION_MAX_CHARS_PER_LINE,\n\tadvanceLiveCaptionPlayout,\n\tcaptionScreenAtTime,\n\tcaptionsVttUrlFromPlayback,\n\tcoalesceLiveCaptionCues,\n\tEMPTY_LIVE_CAPTION_PLAYOUT,\n\tliveCaptionsUrl,\n\tloadCaptionVtt,\n\tloadLiveCaptions,\n\tmergeLiveCaptionCues,\n\tstabilizeLiveLagMs,\n\ttype CaptionCue,\n\ttype CaptionLocale,\n\ttype LiveCaptionCue,\n\ttype LiveCaptionPlayout,\n} from \"./captions\";\nimport {\n\tasWebkitVideo,\n\thasStandardFullscreen,\n\thasWebkitVideoFullscreen,\n\tisEmbeddedWindow,\n} from \"./fullscreen\";\nimport { CaptionOverlay } from \"./CaptionOverlay\";\nimport {\n\tapplyCaptionTrackModes,\n\tensureLiveSubtitleTracks,\n\tfindSubtitleTrack,\n\tlistenTextTracksChange,\n\tshowingCaptionLocale,\n\tsyncNativeCaptionCue,\n} from \"./nativeCaptionTrack\";\n\nexport interface VideoPlayerLabels {\n\tplay?: string;\n\tpause?: string;\n\tmute?: string;\n\tunmute?: string;\n\tenterFullscreen?: string;\n\texitFullscreen?: string;\n\tpictureInPicture?: string;\n\tcast?: string;\n\tsettings?: string;\n\t/** Overflow menu for speed / quality / cast / PiP on a narrow player. */\n\tmore?: string;\n\t/** Back control on compact More speed / quality panes. */\n\tback?: string;\n\tquality?: string;\n\tauto?: string;\n\tspeed?: string;\n\tlive?: string;\n\tgoLive?: string;\n\ttapToUnmute?: string;\n\tloading?: string;\n\twaiting?: string;\n\tretry?: string;\n\t/** Messages by error kind; a generic fallback covers the rest. */\n\terrorUnavailable?: string;\n\terrorNetwork?: string;\n\terrorMedia?: string;\n\terrorUnsupported?: string;\n\terrorGeneric?: string;\n\t/** `(n) => \"N watching\"`. */\n\tformatViewers?: (n: number) => string;\n\t/** `(n) => \"N views\"`. */\n\tformatViews?: (n: number) => string;\n\tcaptions?: string;\n\tcaptionsOff?: string;\n\tcaptionsEn?: string;\n\tcaptionsEs?: string;\n\tcaptionsPt?: string;\n\t/** @deprecated Unused after movie-style captions; kept for existing callers. */\n\tcaptionsLatest?: string;\n}\n\nexport interface VideoPlayerProps {\n\tsrc: string;\n\tmode: \"live\" | \"vod\";\n\t/** Cover image; renders a click-to-play state before attaching HLS. */\n\tposter?: string;\n\tautoPlay?: boolean;\n\tmuted?: boolean;\n\t/** Presentational stats (see `usePlaybackStats`). */\n\tstats?: PlaybackStats;\n\tlabels?: VideoPlayerLabels;\n\t/** Show the resolution picker when multiple levels exist. Default true. */\n\tshowQualitySelector?: boolean;\n\t/**\n\t * When true, force-pauses the media element. Clearing it does not\n\t * auto-resume — the user must press play again.\n\t */\n\tpaused?: boolean;\n\tonPlayingChange?: (playing: boolean) => void;\n\t/** Fires once, the first time playback actually starts — wire your view\n\t * beacon here. */\n\tonFirstPlay?: () => void;\n\tonError?: (error: DescribedPlaybackError) => void;\n\t/** Throttled ~5s while the playhead advances. */\n\tonPlaybackProgress?: (currentTime: number, duration: number) => void;\n\tonRebuffer?: (seconds: number) => void;\n\tonQualityChange?: (quality: string) => void;\n\t/**\n\t * Default `aspect-video` for feed cards. Use `contain` in fullscreen\n\t * viewers so portrait sources fill the pane with object-fit and controls\n\t * stay at the bottom of the pane.\n\t */\n\tfit?: \"aspect-video\" | \"contain\";\n\tclassName?: string;\n\t/** Optional initial CC language. Defaults to Off. UI locale / `?lang=` do not enable captions. */\n\tdefaultCaptionLocale?: CaptionLocale;\n\t/**\n\t * When false, hide the CC menu and do not attach sidecar or live caption\n\t * tracks. Defaults to true so existing callers keep current behavior.\n\t */\n\tcaptionsEnabled?: boolean;\n\t/** Live poll base, e.g. `https://api.livo.tv/public/streams/{id}/captions`. */\n\tliveCaptionsBaseUrl?: string | null;\n}\n\nconst DEFAULT_LABELS: Required<\n\tOmit<VideoPlayerLabels, \"formatViewers\" | \"formatViews\">\n> = {\n\tplay: \"Play\",\n\tpause: \"Pause\",\n\tmute: \"Mute\",\n\tunmute: \"Unmute\",\n\tenterFullscreen: \"Fullscreen\",\n\texitFullscreen: \"Exit fullscreen\",\n\tpictureInPicture: \"Picture in picture\",\n\tcast: \"Cast\",\n\tsettings: \"Settings\",\n\tmore: \"More\",\n\tback: \"Back\",\n\tquality: \"Quality\",\n\tauto: \"Auto\",\n\tspeed: \"Speed\",\n\tlive: \"LIVE\",\n\tgoLive: \"Go live\",\n\ttapToUnmute: \"Tap to unmute\",\n\tloading: \"Loading…\",\n\twaiting: \"Waiting for stream…\",\n\tretry: \"Retry\",\n\terrorUnavailable: \"This video isn't available yet.\",\n\terrorNetwork: \"We couldn't load the video. Check your connection.\",\n\terrorMedia: \"There was a playback problem.\",\n\terrorUnsupported: \"Your browser can't play this video.\",\n\terrorGeneric: \"We couldn't play this video.\",\n\tcaptions: \"Captions\",\n\tcaptionsOff: \"Off\",\n\tcaptionsEn: \"English\",\n\tcaptionsEs: \"Español\",\n\tcaptionsPt: \"Português\",\n\tcaptionsLatest: \"Latest\",\n};\n\nconst PLAYBACK_RATES = [0.75, 1, 1.25, 1.5, 2] as const;\nconst CONTROLS_HIDE_MS = 3000;\nconst LIVE_EDGE_THRESHOLD_S = 8;\nconst SEEK_STEP_S = 5;\nconst PROGRESS_THROTTLE_MS = 5000;\nconst LIVE_CAPTION_PLAYOUT_MS = 250;\n/** Collapse secondary chrome so fullscreen stays on the bar. */\nconst COMPACT_CHROME_PX = 640;\n\nconst VIDEO_MEDIA_STYLE = `\n.livo-video-player-media::-webkit-media-controls-start-playback-button {\n\tdisplay: none !important;\n\t-webkit-appearance: none;\n}\n.livo-video-player-media::-webkit-media-controls {\n\tdisplay: none !important;\n}\n`;\n\nfunction hasCaptionSource(\n\tmode: \"live\" | \"vod\",\n\tsrc: string,\n\tliveCaptionsBaseUrl?: string | null,\n): boolean {\n\tif (mode === \"live\") {\n\t\treturn Boolean(liveCaptionsBaseUrl?.trim());\n\t}\n\treturn CAPTION_LOCALES.some(\n\t\t(locale) => captionsVttUrlFromPlayback(src, locale) != null,\n\t);\n}\n\nfunction captionLocaleLabel(\n\tlocale: CaptionLocale,\n\tlabels: Pick<\n\t\tRequired<VideoPlayerLabels>,\n\t\t\"captionsEn\" | \"captionsEs\" | \"captionsPt\"\n\t>,\n): string {\n\tswitch (locale) {\n\t\tcase \"en\":\n\t\t\treturn labels.captionsEn;\n\t\tcase \"es\":\n\t\t\treturn labels.captionsEs;\n\t\tcase \"pt\":\n\t\t\treturn labels.captionsPt;\n\t\tdefault: {\n\t\t\tconst _exhaustive: never = locale;\n\t\t\treturn _exhaustive;\n\t\t}\n\t}\n}\n\nfunction formatTime(seconds: number): string {\n\tif (!Number.isFinite(seconds) || seconds < 0) return \"0:00\";\n\tconst total = Math.floor(seconds);\n\tconst h = Math.floor(total / 3600);\n\tconst m = Math.floor((total % 3600) / 60);\n\tconst s = total % 60;\n\tconst mm = h > 0 ? String(m).padStart(2, \"0\") : String(m);\n\tconst ss = String(s).padStart(2, \"0\");\n\treturn h > 0 ? `${h}:${mm}:${ss}` : `${mm}:${ss}`;\n}\n\n/**\n * Standardized HLS video player with a fully custom control bar (no native\n * `controls`): click-to-play poster, play/pause, mute + volume, resolution\n * picker, playback speed (VOD), Picture-in-Picture, fullscreen, a VOD seekbar\n * with buffered ranges, and a live badge (no seekbar) with a \"go live\"\n * affordance. `stats` renders live viewer / VOD reproduction counts.\n *\n * hls.js is a peer dependency loaded on demand; see {@link useHlsPlayback}.\n */\nexport function VideoPlayer({\n\tsrc,\n\tmode,\n\tposter,\n\tautoPlay = false,\n\tmuted = false,\n\tstats,\n\tlabels,\n\tshowQualitySelector = true,\n\tpaused = false,\n\tonPlayingChange,\n\tonFirstPlay,\n\tonError,\n\tonPlaybackProgress,\n\tonRebuffer,\n\tonQualityChange,\n\tfit = \"aspect-video\",\n\tclassName,\n\tdefaultCaptionLocale,\n\tcaptionsEnabled = true,\n\tliveCaptionsBaseUrl,\n}: VideoPlayerProps) {\n\tconst t = { ...DEFAULT_LABELS, ...labels };\n\n\tconst containerRef = React.useRef<HTMLDivElement>(null);\n\tconst firstPlayFiredRef = React.useRef(false);\n\tconst lastProgressAtRef = React.useRef(-PROGRESS_THROTTLE_MS);\n\tconst onPlaybackProgressRef = React.useRef(onPlaybackProgress);\n\tonPlaybackProgressRef.current = onPlaybackProgress;\n\tconst applyingTrackModesRef = React.useRef(false);\n\tconst captionLocaleRef = React.useRef<CaptionLocale | \"off\">(\"off\");\n\tconst cssFullscreenRef = React.useRef(false);\n\tconst webkitFsRef = React.useRef(false);\n\n\tconst [userStarted, setUserStarted] = React.useState(false);\n\tconst active = autoPlay || !poster || userStarted;\n\tconst autoplayActive = autoPlay || userStarted;\n\n\tconst handlePlayingChange = React.useCallback(\n\t\t(playing: boolean) => {\n\t\t\tsetIsPlaying(playing);\n\t\t\tif (playing && !firstPlayFiredRef.current) {\n\t\t\t\tfirstPlayFiredRef.current = true;\n\t\t\t\tonFirstPlay?.();\n\t\t\t}\n\t\t\tonPlayingChange?.(playing);\n\t\t},\n\t\t[onFirstPlay, onPlayingChange],\n\t);\n\n\tconst {\n\t\tvideoRef,\n\t\tstate,\n\t\tqualities,\n\t\tactiveLevel,\n\t\tsetLevel,\n\t\tautoplayState,\n\t\terror,\n\t\tretry,\n\t\teffectiveMode,\n\t} = useHlsPlayback({\n\t\tsrc,\n\t\tmode,\n\t\tactive,\n\t\tautoPlay: autoplayActive,\n\t\tmuted,\n\t\tonError,\n\t\tonPlayingChange: handlePlayingChange,\n\t\tonRebuffer,\n\t\tonQualityChange,\n\t});\n\n\tconst liveCaptionPollUrl = liveCaptionsBaseUrl?.trim() || undefined;\n\tconst showCaptionsMenu =\n\t\tcaptionsEnabled && hasCaptionSource(mode, src, liveCaptionPollUrl);\n\tconst activeLiveCaptionsBaseUrl = showCaptionsMenu\n\t\t? liveCaptionPollUrl\n\t\t: undefined;\n\n\tconst [isPlaying, setIsPlaying] = React.useState(false);\n\tconst [isMuted, setIsMuted] = React.useState(muted);\n\tconst isMutedRef = React.useRef(isMuted);\n\tisMutedRef.current = isMuted;\n\tconst [volume, setVolume] = React.useState(1);\n\tconst [currentTime, setCurrentTime] = React.useState(0);\n\tconst [duration, setDuration] = React.useState(0);\n\tconst [buffered, setBuffered] = React.useState(0);\n\tconst [isFullscreen, setIsFullscreen] = React.useState(false);\n\tconst [pipActive, setPipActive] = React.useState(false);\n\tconst [controlsVisible, setControlsVisible] = React.useState(true);\n\tconst [playbackRate, setPlaybackRate] = React.useState(1);\n\tconst [openMenu, setOpenMenu] = React.useState<\n\t\tnull | \"quality\" | \"speed\" | \"captions\" | \"more\"\n\t>(null);\n\tconst [morePane, setMorePane] = React.useState<\"root\" | \"speed\" | \"quality\">(\n\t\t\"root\",\n\t);\n\tconst [compactChrome, setCompactChrome] = React.useState(false);\n\tconst [captionLocale, setCaptionLocale] = React.useState<\n\t\tCaptionLocale | \"off\"\n\t>(defaultCaptionLocale ?? \"off\");\n\tconst [captionCues, setCaptionCues] = React.useState<CaptionCue[]>([]);\n\tconst [liveCaptionCues, setLiveCaptionCues] = React.useState<\n\t\tLiveCaptionCue[]\n\t>([]);\n\tconst [livePlayout, setLivePlayout] = React.useState<LiveCaptionPlayout>(\n\t\tEMPTY_LIVE_CAPTION_PLAYOUT,\n\t);\n\tconst [liveLagMs, setLiveLagMs] = React.useState<number | null>(null);\n\tconst [behindLive, setBehindLive] = React.useState(false);\n\tconst [webkitFullscreenSupported, setWebkitFullscreenSupported] =\n\t\tReact.useState(false);\n\tconst [embedded, setEmbedded] = React.useState(false);\n\tconst [cssFullscreen, setCssFullscreen] = React.useState(false);\n\tconst [webkitNativeFs, setWebkitNativeFs] = React.useState(false);\n\n\tconst hideTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst lastPointerTypeRef = React.useRef<string>(\"mouse\");\n\tconst liveCaptionCuesRef = React.useRef(liveCaptionCues);\n\tconst liveLagMsRef = React.useRef(liveLagMs);\n\tconst compactChromeRef = React.useRef(compactChrome);\n\tliveCaptionCuesRef.current = liveCaptionCues;\n\tliveLagMsRef.current = liveLagMs;\n\tcompactChromeRef.current = compactChrome;\n\tcssFullscreenRef.current = cssFullscreen;\n\tcaptionLocaleRef.current = captionLocale;\n\n\tReact.useEffect(() => {\n\t\tconst el = containerRef.current;\n\t\tif (!el || typeof ResizeObserver === \"undefined\") return;\n\t\tconst apply = (width: number) => {\n\t\t\t// jsdom reports 0 — keep the wide chrome so toolbar tests stay stable.\n\t\t\tif (width <= 0) return;\n\t\t\tsetCompactChrome(width < COMPACT_CHROME_PX);\n\t\t};\n\t\tapply(el.clientWidth);\n\t\tconst observer = new ResizeObserver((entries) => {\n\t\t\tconst width = entries[0]?.contentRect.width;\n\t\t\tif (typeof width === \"number\") apply(width);\n\t\t});\n\t\tobserver.observe(el);\n\t\treturn () => observer.disconnect();\n\t}, [active]);\n\n\tReact.useEffect(() => {\n\t\tif (openMenu !== \"more\") setMorePane(\"root\");\n\t}, [openMenu]);\n\n\tconst pipSupported =\n\t\ttypeof document !== \"undefined\" &&\n\t\t\"pictureInPictureEnabled\" in document &&\n\t\tdocument.pictureInPictureEnabled;\n\tconst fullscreenSupported =\n\t\thasStandardFullscreen() || webkitFullscreenSupported || !embedded;\n\n\t// Sync UI state from the media element.\n\tReact.useEffect(() => {\n\t\tconst video = videoRef.current;\n\t\tif (!video || !active) return;\n\n\t\tconst onTimeUpdate = () => {\n\t\t\tsetCurrentTime(video.currentTime);\n\t\t\tif (video.buffered.length > 0) {\n\t\t\t\tsetBuffered(video.buffered.end(video.buffered.length - 1));\n\t\t\t}\n\t\t\tconst progress = onPlaybackProgressRef.current;\n\t\t\tif (progress) {\n\t\t\t\tconst now = performance.now();\n\t\t\t\tif (now - lastProgressAtRef.current >= PROGRESS_THROTTLE_MS) {\n\t\t\t\t\tlastProgressAtRef.current = now;\n\t\t\t\t\tprogress(\n\t\t\t\t\t\tvideo.currentTime,\n\t\t\t\t\t\tfinitePlaybackDuration(\n\t\t\t\t\t\t\tvideo.duration,\n\t\t\t\t\t\t\tvideo.seekable,\n\t\t\t\t\t\t\teffectiveMode,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (effectiveMode === \"live\" && video.seekable.length > 0) {\n\t\t\t\tconst edge = video.seekable.end(video.seekable.length - 1);\n\t\t\t\tconst lagSeconds = edge - video.currentTime;\n\t\t\t\tsetBehindLive(lagSeconds > LIVE_EDGE_THRESHOLD_S);\n\t\t\t\tif (activeLiveCaptionsBaseUrl) {\n\t\t\t\t\tsetLiveLagMs((prev) => stabilizeLiveLagMs(prev, lagSeconds * 1000));\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tconst onDuration = () =>\n\t\t\tsetDuration(\n\t\t\t\tfinitePlaybackDuration(video.duration, video.seekable, effectiveMode),\n\t\t\t);\n\t\tconst onVolume = () => {\n\t\t\tsetIsMuted(video.muted);\n\t\t\tsetVolume(video.volume);\n\t\t};\n\t\tconst onRate = () => setPlaybackRate(video.playbackRate);\n\t\tconst onPlaying = () => {\n\t\t\tif (isMutedRef.current && !video.muted) video.muted = true;\n\t\t};\n\n\t\tvideo.addEventListener(\"timeupdate\", onTimeUpdate);\n\t\tvideo.addEventListener(\"durationchange\", onDuration);\n\t\tvideo.addEventListener(\"loadedmetadata\", onDuration);\n\t\tvideo.addEventListener(\"volumechange\", onVolume);\n\t\tvideo.addEventListener(\"ratechange\", onRate);\n\t\tvideo.addEventListener(\"playing\", onPlaying);\n\t\tonVolume();\n\t\treturn () => {\n\t\t\tvideo.removeEventListener(\"timeupdate\", onTimeUpdate);\n\t\t\tvideo.removeEventListener(\"durationchange\", onDuration);\n\t\t\tvideo.removeEventListener(\"loadedmetadata\", onDuration);\n\t\t\tvideo.removeEventListener(\"volumechange\", onVolume);\n\t\t\tvideo.removeEventListener(\"ratechange\", onRate);\n\t\t\tvideo.removeEventListener(\"playing\", onPlaying);\n\t\t};\n\t}, [videoRef, active, effectiveMode, activeLiveCaptionsBaseUrl]);\n\n\tReact.useLayoutEffect(() => {\n\t\tconst video = videoRef.current;\n\t\tif (video) video.muted = isMuted;\n\t}, [isMuted, active, videoRef]);\n\n\t// External pause request (feed exclusivity / out-of-view). Clearing `paused`\n\t// never auto-resumes — the user must press play again. Use React `isPlaying`\n\t// (not `video.paused`) so jsdom/mocked media elements still force-pause.\n\tReact.useEffect(() => {\n\t\tconst video = videoRef.current;\n\t\tif (!paused || !video || !isPlaying) return;\n\t\tvideo.pause();\n\t}, [paused, videoRef, isPlaying]);\n\n\t// Detect iOS video.webkitEnterFullscreen once the media element mounts.\n\tReact.useEffect(() => {\n\t\tsetEmbedded(isEmbeddedWindow());\n\t\tsetWebkitFullscreenSupported(hasWebkitVideoFullscreen(videoRef.current));\n\t\tvideoRef.current?.setAttribute(\"x-webkit-airplay\", \"allow\");\n\t\tvideoRef.current?.setAttribute(\"webkit-playsinline\", \"\");\n\t}, [videoRef, active]);\n\n\t// Fullscreen + PiP state tracking (standard + iOS webkit video FS).\n\tReact.useEffect(() => {\n\t\tconst onFsChange = () => {\n\t\t\tif (document.fullscreenElement === containerRef.current) {\n\t\t\t\tsetIsFullscreen(true);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (cssFullscreenRef.current || webkitFsRef.current) return;\n\t\t\tsetIsFullscreen(false);\n\t\t};\n\t\tdocument.addEventListener(\"fullscreenchange\", onFsChange);\n\t\treturn () => document.removeEventListener(\"fullscreenchange\", onFsChange);\n\t}, []);\n\n\tfunction applyNativeTrackModes(\n\t\tvideo: HTMLVideoElement,\n\t\tlocale: CaptionLocale | \"off\",\n\t\tnativeVisible: boolean,\n\t) {\n\t\tapplyingTrackModesRef.current = true;\n\t\ttry {\n\t\t\tapplyCaptionTrackModes(video, locale, nativeVisible);\n\t\t} finally {\n\t\t\tapplyingTrackModesRef.current = false;\n\t\t}\n\t}\n\n\tfunction onSidecarTrackLoad(event: React.SyntheticEvent<HTMLTrackElement>) {\n\t\tconst track = event.currentTarget.track;\n\t\tif (!track) return;\n\t\tconst video = videoRef.current;\n\t\tif (video) {\n\t\t\tapplyNativeTrackModes(\n\t\t\t\tvideo,\n\t\t\t\tcaptionLocaleRef.current,\n\t\t\t\twebkitFsRef.current,\n\t\t\t);\n\t\t}\n\t}\n\n\tReact.useEffect(() => {\n\t\tconst video = asWebkitVideo(videoRef.current);\n\t\tif (!video) return;\n\t\tconst onBegin = () => {\n\t\t\twebkitFsRef.current = true;\n\t\t\tsetWebkitNativeFs(true);\n\t\t\tsetIsFullscreen(true);\n\t\t\tapplyNativeTrackModes(video, captionLocaleRef.current, true);\n\t\t};\n\t\tconst onEnd = () => {\n\t\t\twebkitFsRef.current = false;\n\t\t\tsetWebkitNativeFs(false);\n\t\t\tapplyNativeTrackModes(video, captionLocaleRef.current, false);\n\t\t\tif (!cssFullscreenRef.current) setIsFullscreen(false);\n\t\t};\n\t\tvideo.addEventListener(\"webkitbeginfullscreen\", onBegin);\n\t\tvideo.addEventListener(\"webkitendfullscreen\", onEnd);\n\t\treturn () => {\n\t\t\tvideo.removeEventListener(\"webkitbeginfullscreen\", onBegin);\n\t\t\tvideo.removeEventListener(\"webkitendfullscreen\", onEnd);\n\t\t};\n\t}, [videoRef, active]);\n\n\tReact.useEffect(() => {\n\t\tif (!cssFullscreen) return;\n\t\tconst previousOverflow = document.body.style.overflow;\n\t\tdocument.body.style.overflow = \"hidden\";\n\t\tconst onKey = (event: KeyboardEvent) => {\n\t\t\tif (event.key !== \"Escape\") return;\n\t\t\tsetCssFullscreen(false);\n\t\t\tsetIsFullscreen(false);\n\t\t};\n\t\tdocument.addEventListener(\"keydown\", onKey);\n\t\treturn () => {\n\t\t\tdocument.body.style.overflow = previousOverflow;\n\t\t\tdocument.removeEventListener(\"keydown\", onKey);\n\t\t};\n\t}, [cssFullscreen]);\n\n\tReact.useEffect(() => {\n\t\tconst video = videoRef.current;\n\t\tif (!video) return;\n\t\tconst onEnter = () => setPipActive(true);\n\t\tconst onLeave = () => setPipActive(false);\n\t\tvideo.addEventListener(\"enterpictureinpicture\", onEnter);\n\t\tvideo.addEventListener(\"leavepictureinpicture\", onLeave);\n\t\treturn () => {\n\t\t\tvideo.removeEventListener(\"enterpictureinpicture\", onEnter);\n\t\t\tvideo.removeEventListener(\"leavepictureinpicture\", onLeave);\n\t\t};\n\t}, [videoRef]);\n\n\tconst scheduleHide = React.useCallback(() => {\n\t\tif (hideTimerRef.current) clearTimeout(hideTimerRef.current);\n\t\thideTimerRef.current = setTimeout(() => {\n\t\t\tsetControlsVisible(false);\n\t\t\tsetOpenMenu(null);\n\t\t}, CONTROLS_HIDE_MS);\n\t}, []);\n\n\tconst revealControls = React.useCallback(() => {\n\t\tsetControlsVisible(true);\n\t\tscheduleHide();\n\t}, [scheduleHide]);\n\n\tReact.useEffect(() => {\n\t\treturn () => {\n\t\t\tif (hideTimerRef.current) clearTimeout(hideTimerRef.current);\n\t\t};\n\t}, []);\n\n\tReact.useEffect(() => {\n\t\tif (captionLocale === \"off\" || !showCaptionsMenu) {\n\t\t\tsetCaptionCues([]);\n\t\t\tsetLiveCaptionCues([]);\n\t\t\treturn;\n\t\t}\n\t\tsetLiveCaptionCues([]);\n\t\tlet cancelled = false;\n\t\tconst load = async () => {\n\t\t\tconst liveBase = activeLiveCaptionsBaseUrl;\n\t\t\tif (liveBase) {\n\t\t\t\tconst loaded = await loadLiveCaptions(\n\t\t\t\t\tliveCaptionsUrl(liveBase, captionLocale),\n\t\t\t\t);\n\t\t\t\tif (!cancelled && loaded.ok) {\n\t\t\t\t\tsetLiveCaptionCues((prev) => mergeLiveCaptionCues(prev, loaded.cues));\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst url = captionsVttUrlFromPlayback(src, captionLocale);\n\t\t\tif (!url) {\n\t\t\t\tif (!cancelled) setCaptionCues([]);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst cues = await loadCaptionVtt(url);\n\t\t\tif (!cancelled) setCaptionCues(cues);\n\t\t};\n\t\tvoid load();\n\t\tif (!activeLiveCaptionsBaseUrl) return;\n\t\tconst timer = window.setInterval(() => void load(), 2000);\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t\twindow.clearInterval(timer);\n\t\t};\n\t}, [captionLocale, activeLiveCaptionsBaseUrl, showCaptionsMenu, src]);\n\n\tReact.useEffect(() => {\n\t\tif (!activeLiveCaptionsBaseUrl || captionLocale === \"off\") {\n\t\t\tsetLivePlayout(EMPTY_LIVE_CAPTION_PLAYOUT);\n\t\t\treturn;\n\t\t}\n\t\tconst tick = () => {\n\t\t\tsetLivePlayout((prev) =>\n\t\t\t\tadvanceLiveCaptionPlayout(\n\t\t\t\t\tprev,\n\t\t\t\t\tcoalesceLiveCaptionCues(liveCaptionCuesRef.current),\n\t\t\t\t\tDate.now(),\n\t\t\t\t\tliveLagMsRef.current,\n\t\t\t\t\tcompactChromeRef.current\n\t\t\t\t\t\t? CAPTION_COMPACT_CHARS_PER_LINE\n\t\t\t\t\t\t: CAPTION_MAX_CHARS_PER_LINE,\n\t\t\t\t),\n\t\t\t);\n\t\t};\n\t\ttick();\n\t\tconst timer = window.setInterval(tick, LIVE_CAPTION_PLAYOUT_MS);\n\t\treturn () => window.clearInterval(timer);\n\t}, [activeLiveCaptionsBaseUrl, captionLocale]);\n\n\tconst captionWrapWidth = compactChrome\n\t\t? CAPTION_COMPACT_CHARS_PER_LINE\n\t\t: CAPTION_MAX_CHARS_PER_LINE;\n\tconst captionScreen = activeLiveCaptionsBaseUrl\n\t\t? livePlayout.screen\n\t\t: captionScreenAtTime(captionCues, currentTime, captionWrapWidth);\n\n\tReact.useEffect(() => {\n\t\tconst video = videoRef.current;\n\t\tif (!video || !activeLiveCaptionsBaseUrl) return;\n\t\ttry {\n\t\t\tensureLiveSubtitleTracks(video, {\n\t\t\t\ten: t.captionsEn,\n\t\t\t\tes: t.captionsEs,\n\t\t\t\tpt: t.captionsPt,\n\t\t\t});\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\t\tapplyNativeTrackModes(video, captionLocale, webkitFsRef.current);\n\t}, [\n\t\tvideoRef,\n\t\tactive,\n\t\tactiveLiveCaptionsBaseUrl,\n\t\tcaptionLocale,\n\t\tt.captionsEn,\n\t\tt.captionsEs,\n\t\tt.captionsPt,\n\t]);\n\n\tReact.useEffect(() => {\n\t\tconst video = videoRef.current;\n\t\tif (!video) return;\n\t\tapplyNativeTrackModes(video, captionLocale, webkitFsRef.current);\n\t}, [videoRef, active, captionLocale, src]);\n\n\tReact.useEffect(() => {\n\t\tconst video = videoRef.current;\n\t\tif (!video) return;\n\t\tconst onChange = () => {\n\t\t\tif (applyingTrackModesRef.current) return;\n\t\t\tconst showing = showingCaptionLocale(video);\n\t\t\tif (!webkitFsRef.current) {\n\t\t\t\tif (showing !== \"off\") setCaptionLocale(showing);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetCaptionLocale(showing);\n\t\t};\n\t\treturn listenTextTracksChange(video.textTracks, onChange);\n\t}, [videoRef, active, src, activeLiveCaptionsBaseUrl]);\n\n\tReact.useEffect(() => {\n\t\tconst video = videoRef.current;\n\t\tif (!video || captionLocale === \"off\" || !activeLiveCaptionsBaseUrl) return;\n\t\tconst track = findSubtitleTrack(video, captionLocale);\n\t\tif (!track) return;\n\t\tconst remaining = livePlayout.screen\n\t\t\t? Math.max(0.2, (livePlayout.hideAt - Date.now()) / 1000)\n\t\t\t: 0;\n\t\tsyncNativeCaptionCue(\n\t\t\tvideo,\n\t\t\ttrack,\n\t\t\tlivePlayout.screen?.text ?? \"\",\n\t\t\tremaining,\n\t\t);\n\t}, [livePlayout, captionLocale, activeLiveCaptionsBaseUrl]);\n\n\tfunction togglePlay() {\n\t\tconst video = videoRef.current;\n\t\tif (!video) return;\n\t\tif (video.paused) void video.play();\n\t\telse video.pause();\n\t}\n\n\tfunction applyMuted(next: boolean) {\n\t\tconst video = videoRef.current;\n\t\tisMutedRef.current = next;\n\t\tsetIsMuted(next);\n\t\tif (video) video.muted = next;\n\t}\n\n\tfunction toggleMute() {\n\t\tapplyMuted(!isMutedRef.current);\n\t}\n\n\tfunction changeVolume(next: number) {\n\t\tconst video = videoRef.current;\n\t\tif (!video) return;\n\t\tvideo.volume = next;\n\t\tsetVolume(next);\n\t\tapplyMuted(next === 0);\n\t}\n\n\tfunction seekTo(next: number) {\n\t\tconst video = videoRef.current;\n\t\tif (!video) return;\n\t\tvideo.currentTime = next;\n\t\tsetCurrentTime(next);\n\t}\n\n\tfunction seekBy(delta: number) {\n\t\tconst video = videoRef.current;\n\t\tif (!video) return;\n\t\tseekTo(Math.min(Math.max(video.currentTime + delta, 0), duration || 0));\n\t}\n\n\tfunction goToLiveEdge() {\n\t\tconst video = videoRef.current;\n\t\tif (!video || video.seekable.length === 0) return;\n\t\tvideo.currentTime = video.seekable.end(video.seekable.length - 1);\n\t\tif (video.paused) void video.play();\n\t}\n\n\tfunction exitCssFullscreen() {\n\t\tsetCssFullscreen(false);\n\t\tsetIsFullscreen(false);\n\t}\n\n\tfunction toggleFullscreen() {\n\t\tconst el = containerRef.current;\n\t\tconst video = asWebkitVideo(videoRef.current);\n\n\t\tif (el && document.fullscreenElement === el) {\n\t\t\tvoid document.exitFullscreen();\n\t\t\treturn;\n\t\t}\n\n\t\tif (video?.webkitDisplayingFullscreen && video.webkitExitFullscreen) {\n\t\t\tvideo.webkitExitFullscreen();\n\t\t\treturn;\n\t\t}\n\n\t\tif (cssFullscreen) {\n\t\t\texitCssFullscreen();\n\t\t\treturn;\n\t\t}\n\n\t\tif (video && typeof video.webkitEnterFullscreen === \"function\") {\n\t\t\ttry {\n\t\t\t\tvideo.webkitEnterFullscreen();\n\t\t\t} catch {\n\t\t\t\tsetCssFullscreen(true);\n\t\t\t\tsetIsFullscreen(true);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (\n\t\t\tel &&\n\t\t\thasStandardFullscreen() &&\n\t\t\ttypeof el.requestFullscreen === \"function\"\n\t\t) {\n\t\t\tvoid el.requestFullscreen();\n\t\t\treturn;\n\t\t}\n\n\t\tsetCssFullscreen(true);\n\t\tsetIsFullscreen(true);\n\t}\n\n\tfunction togglePip() {\n\t\tconst video = videoRef.current;\n\t\tif (!video) return;\n\t\tif (document.pictureInPictureElement === video) {\n\t\t\tvoid document.exitPictureInPicture();\n\t\t} else {\n\t\t\tvoid video.requestPictureInPicture?.();\n\t\t}\n\t}\n\n\tfunction changeRate(rate: number) {\n\t\tconst video = videoRef.current;\n\t\tif (video) video.playbackRate = rate;\n\t\tsetPlaybackRate(rate);\n\t\tsetOpenMenu(null);\n\t}\n\n\tfunction chooseLevel(index: number) {\n\t\tsetLevel(index);\n\t\tsetOpenMenu(null);\n\t}\n\n\tfunction chooseCaption(locale: CaptionLocale | \"off\") {\n\t\tsetCaptionLocale(locale);\n\t\tsetOpenMenu(null);\n\t}\n\n\tfunction toggleControls() {\n\t\tsetOpenMenu(null);\n\t\tsetControlsVisible((current) => {\n\t\t\tconst next = !current;\n\t\t\tif (next) scheduleHide();\n\t\t\treturn next;\n\t\t});\n\t}\n\n\tfunction recordPointerType(e: React.PointerEvent<HTMLDivElement>) {\n\t\tlastPointerTypeRef.current = e.pointerType;\n\t}\n\n\tfunction handlePointerMove(e: React.PointerEvent<HTMLDivElement>) {\n\t\tif (e.pointerType === \"mouse\") lastPointerTypeRef.current = \"mouse\";\n\t}\n\n\tfunction handleMouseMove() {\n\t\tif (lastPointerTypeRef.current === \"touch\") return;\n\t\trevealControls();\n\t}\n\n\tfunction handleMouseLeave() {\n\t\tif (lastPointerTypeRef.current === \"touch\") return;\n\t\tif (isPlaying) setControlsVisible(false);\n\t}\n\n\tfunction handleKeyDown(e: React.KeyboardEvent<HTMLDivElement>) {\n\t\tif (!active) return;\n\t\tswitch (e.key) {\n\t\t\tcase \" \":\n\t\t\tcase \"k\":\n\t\t\t\te.preventDefault();\n\t\t\t\ttogglePlay();\n\t\t\t\tbreak;\n\t\t\tcase \"m\":\n\t\t\t\ttoggleMute();\n\t\t\t\tbreak;\n\t\t\tcase \"f\":\n\t\t\t\ttoggleFullscreen();\n\t\t\t\tbreak;\n\t\t\tcase \"Escape\":\n\t\t\t\tif (cssFullscreen) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\texitCssFullscreen();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"ArrowLeft\":\n\t\t\t\tif (effectiveMode === \"vod\") {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tseekBy(-SEEK_STEP_S);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"ArrowRight\":\n\t\t\t\tif (effectiveMode === \"vod\") {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tseekBy(SEEK_STEP_S);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"ArrowUp\":\n\t\t\t\te.preventDefault();\n\t\t\t\tchangeVolume(Math.min((videoRef.current?.volume ?? 1) + 0.1, 1));\n\t\t\t\tbreak;\n\t\t\tcase \"ArrowDown\":\n\t\t\t\te.preventDefault();\n\t\t\t\tchangeVolume(Math.max((videoRef.current?.volume ?? 0) - 0.1, 0));\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\trevealControls();\n\t}\n\n\tfunction errorMessage(err: DescribedPlaybackError): string {\n\t\tswitch (err.kind) {\n\t\t\tcase \"unavailable\":\n\t\t\t\treturn t.errorUnavailable;\n\t\t\tcase \"network\":\n\t\t\t\treturn t.errorNetwork;\n\t\t\tcase \"media\":\n\t\t\t\treturn t.errorMedia;\n\t\t\tcase \"unsupported\":\n\t\t\t\treturn t.errorUnsupported;\n\t\t\tcase \"resync\":\n\t\t\t\t// Soft recovery only — never shown as a hard-error overlay.\n\t\t\t\treturn t.errorMedia;\n\t\t\tcase \"generic\":\n\t\t\t\treturn t.errorGeneric;\n\t\t\tdefault: {\n\t\t\t\tconst _exhaustive: never = err.kind;\n\t\t\t\treturn _exhaustive;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst VolumeIcon =\n\t\tisMuted || volume === 0 ? VolumeX : volume < 0.5 ? Volume1 : Volume2;\n\tconst showSpinner = active && (state === \"loading\" || state === \"waiting\");\n\tconst showControls = active && state === \"ready\" && controlsVisible;\n\tconst showPoster = !active && !!poster;\n\tconst currentLevelLabel =\n\t\tactiveLevel < 0\n\t\t\t? t.auto\n\t\t\t: `${qualities.find((q) => q.index === activeLevel)?.height ?? \"\"}p`;\n\tconst showQuality = showQualitySelector && qualities.length > 1;\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tdata-slot=\"video-player\"\n\t\t\tdata-mode={effectiveMode}\n\t\t\tdata-fit={fit}\n\t\t\tdata-css-fullscreen={cssFullscreen ? \"\" : undefined}\n\t\t\tclassName={cn(\n\t\t\t\t\"@container group relative w-full overflow-hidden rounded-lg bg-black text-white select-none\",\n\t\t\t\tfit === \"contain\" ? \"h-full min-h-0 aspect-auto\" : \"aspect-video\",\n\t\t\t\tcssFullscreen && \"fixed inset-0 z-50 h-dvh w-dvw rounded-none\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tonPointerDown={recordPointerType}\n\t\t\tonPointerMove={handlePointerMove}\n\t\t\tonMouseMove={handleMouseMove}\n\t\t\tonMouseLeave={handleMouseLeave}\n\t\t\tonKeyDown={handleKeyDown}\n\t\t\ttabIndex={0}\n\t\t\trole=\"region\"\n\t\t\taria-label=\"Video player\"\n\t\t>\n\t\t\t<style>{VIDEO_MEDIA_STYLE}</style>\n\t\t\t<video\n\t\t\t\tref={videoRef}\n\t\t\t\tplaysInline\n\t\t\t\tmuted={isMuted}\n\t\t\t\tclassName=\"livo-video-player-media h-full w-full bg-black object-contain\"\n\t\t\t\tonClick={active ? toggleControls : undefined}\n\t\t\t\tposter={poster}\n\t\t\t>\n\t\t\t\t{showCaptionsMenu && !activeLiveCaptionsBaseUrl\n\t\t\t\t\t? CAPTION_LOCALES.map((locale) => {\n\t\t\t\t\t\t\tconst url = captionsVttUrlFromPlayback(src, locale);\n\t\t\t\t\t\t\tif (!url) return null;\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<track\n\t\t\t\t\t\t\t\t\tkey={`${locale}:${url}`}\n\t\t\t\t\t\t\t\t\tkind=\"subtitles\"\n\t\t\t\t\t\t\t\t\tsrcLang={locale}\n\t\t\t\t\t\t\t\t\tlabel={captionLocaleLabel(locale, t)}\n\t\t\t\t\t\t\t\t\tsrc={url}\n\t\t\t\t\t\t\t\t\tonLoad={onSidecarTrackLoad}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})\n\t\t\t\t\t: null}\n\t\t\t</video>\n\n\t\t\t{showPoster && (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\taria-label={t.play}\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tsetUserStarted(true);\n\t\t\t\t\t\trevealControls();\n\t\t\t\t\t}}\n\t\t\t\t\tclassName=\"absolute inset-0 flex items-center justify-center bg-black bg-contain bg-center bg-no-repeat\"\n\t\t\t\t\tstyle={poster ? { backgroundImage: `url(${poster})` } : undefined}\n\t\t\t\t>\n\t\t\t\t\t<span className=\"flex size-16 items-center justify-center rounded-full bg-black/50 backdrop-blur-sm transition group-hover:bg-black/70\">\n\t\t\t\t\t\t<Play className=\"size-8 translate-x-0.5\" fill=\"currentColor\" />\n\t\t\t\t\t</span>\n\t\t\t\t</button>\n\t\t\t)}\n\n\t\t\t{showSpinner && (\n\t\t\t\t<div className=\"absolute inset-0 flex flex-col items-center justify-center gap-3 bg-black/50 text-sm\">\n\t\t\t\t\t<Loader2 className=\"size-8 animate-spin\" />\n\t\t\t\t\t<span>{state === \"loading\" ? t.loading : t.waiting}</span>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{state === \"error\" && error && (\n\t\t\t\t<div className=\"absolute inset-0 flex flex-col items-center justify-center gap-4 bg-black/70 px-6 text-center text-sm\">\n\t\t\t\t\t<AlertCircle className=\"text-red-400 size-8\" />\n\t\t\t\t\t<p className=\"text-red-200\">{errorMessage(error)}</p>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={retry}\n\t\t\t\t\t\tclassName=\"inline-flex items-center gap-2 rounded-md bg-primary/15 px-3 py-1.5 text-sm hover:bg-primary/25\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<RotateCw className=\"size-4\" />\n\t\t\t\t\t\t{t.retry}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* Blocked autoplay: centered play button. */}\n\t\t\t{state === \"ready\" && autoplayState === \"blocked\" && !isPlaying && (\n\t\t\t\t<div className=\"absolute inset-0 flex items-center justify-center bg-black/40\">\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\taria-label={t.play}\n\t\t\t\t\t\tonClick={togglePlay}\n\t\t\t\t\t\tclassName=\"flex size-16 items-center justify-center rounded-full bg-white/20 backdrop-blur-sm transition hover:bg-white/30\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Play className=\"size-8 translate-x-0.5\" fill=\"currentColor\" />\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* Muted autoplay: tap to unmute. Hide as soon as playback is unmuted. */}\n\t\t\t{state === \"ready\" && autoplayState === \"muted\" && isMuted && (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={toggleMute}\n\t\t\t\t\tclassName=\"absolute top-3 right-3 flex items-center gap-1.5 rounded-full bg-black/70 px-3 py-1.5 text-xs backdrop-blur-sm transition hover:bg-black/90\"\n\t\t\t\t>\n\t\t\t\t\t<VolumeX className=\"size-4\" />\n\t\t\t\t\t{t.tapToUnmute}\n\t\t\t\t</button>\n\t\t\t)}\n\n\t\t\t{/* Live badge + viewers (top-left). */}\n\t\t\t{effectiveMode === \"live\" && active && state === \"ready\" && (\n\t\t\t\t<div className=\"absolute top-3 left-3 flex items-center gap-2\">\n\t\t\t\t\t<span className=\"flex items-center gap-1.5 rounded bg-red-600 px-2 py-0.5 text-xs font-semibold tracking-wide\">\n\t\t\t\t\t\t<span className=\"size-1.5 animate-pulse rounded-full bg-white\" />\n\t\t\t\t\t\t{t.live}\n\t\t\t\t\t</span>\n\t\t\t\t\t{typeof stats?.viewers === \"number\" && (\n\t\t\t\t\t\t<span className=\"rounded bg-black/60 px-2 py-0.5 text-xs\">\n\t\t\t\t\t\t\t{t.formatViewers\n\t\t\t\t\t\t\t\t? t.formatViewers(stats.viewers)\n\t\t\t\t\t\t\t\t: `👁 ${stats.viewers}`}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{captionLocale !== \"off\" && !webkitNativeFs && (\n\t\t\t\t<CaptionOverlay screen={captionScreen} />\n\t\t\t)}\n\n\t\t\t{/* Control bar (only once playback is engaged). */}\n\t\t\t{active && (\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"absolute inset-x-0 bottom-0 flex flex-col gap-1 bg-gradient-to-t from-black/80 to-transparent px-3 pt-8 pb-2 transition-opacity\",\n\t\t\t\t\t\tshowControls ? \"opacity-100\" : \"pointer-events-none opacity-0\",\n\t\t\t\t\t)}\n\t\t\t\t\tdata-slot=\"video-controls\"\n\t\t\t\t>\n\t\t\t\t\t{effectiveMode === \"vod\" && (\n\t\t\t\t\t\t<SeekBar\n\t\t\t\t\t\t\tsrc={src}\n\t\t\t\t\t\t\tduration={duration}\n\t\t\t\t\t\t\tcurrentTime={currentTime}\n\t\t\t\t\t\t\tbuffered={buffered}\n\t\t\t\t\t\t\tonSeek={seekTo}\n\t\t\t\t\t\t\tformatTime={formatTime}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<div className=\"flex min-w-0 items-center gap-1 sm:gap-2\">\n\t\t\t\t\t\t<ControlButton\n\t\t\t\t\t\t\tlabel={isPlaying ? t.pause : t.play}\n\t\t\t\t\t\t\tonClick={togglePlay}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{isPlaying ? (\n\t\t\t\t\t\t\t\t<Pause className=\"size-5\" fill=\"currentColor\" />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<Play className=\"size-5\" fill=\"currentColor\" />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</ControlButton>\n\n\t\t\t\t\t\t<div className=\"flex items-center gap-1\">\n\t\t\t\t\t\t\t<ControlButton\n\t\t\t\t\t\t\t\tlabel={isMuted ? t.unmute : t.mute}\n\t\t\t\t\t\t\t\tonClick={toggleMute}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<VolumeIcon className=\"size-5\" />\n\t\t\t\t\t\t\t</ControlButton>\n\t\t\t\t\t\t\t{!compactChrome && (\n\t\t\t\t\t\t\t\t<div className=\"w-20 px-1\">\n\t\t\t\t\t\t\t\t\t<Slider\n\t\t\t\t\t\t\t\t\t\taria-label=\"Volume\"\n\t\t\t\t\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\t\t\t\t\tmax={1}\n\t\t\t\t\t\t\t\t\t\tstep={0.05}\n\t\t\t\t\t\t\t\t\t\tvalue={[isMuted ? 0 : volume]}\n\t\t\t\t\t\t\t\t\t\tonValueChange={(v) => changeVolume(v[0] ?? 0)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t{effectiveMode === \"vod\" && (\n\t\t\t\t\t\t\t<span className=\"ml-1 shrink-0 text-xs tabular-nums\">\n\t\t\t\t\t\t\t\t{formatTime(currentTime)}\n\t\t\t\t\t\t\t\t{!compactChrome && ` / ${formatTime(duration)}`}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{effectiveMode === \"live\" && behindLive && (\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={goToLiveEdge}\n\t\t\t\t\t\t\t\tclassName=\"ml-1 flex shrink-0 items-center gap-1 rounded bg-primary/15 px-2 py-0.5 text-xs hover:bg-primary/25\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span className=\"size-1.5 rounded-full bg-red-500\" />\n\t\t\t\t\t\t\t\t{t.goLive}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t<div className=\"ml-auto flex shrink-0 items-center gap-1\">\n\t\t\t\t\t\t\t{!compactChrome &&\n\t\t\t\t\t\t\t\teffectiveMode === \"vod\" &&\n\t\t\t\t\t\t\t\ttypeof stats?.views === \"number\" && (\n\t\t\t\t\t\t\t\t\t<span className=\"mr-1 text-xs\">\n\t\t\t\t\t\t\t\t\t\t{t.formatViews\n\t\t\t\t\t\t\t\t\t\t\t? t.formatViews(stats.views)\n\t\t\t\t\t\t\t\t\t\t\t: `${stats.views} views`}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{showCaptionsMenu && (\n\t\t\t\t\t\t\t\t<MenuControl\n\t\t\t\t\t\t\t\t\tlabel={t.captions}\n\t\t\t\t\t\t\t\t\topen={openMenu === \"captions\"}\n\t\t\t\t\t\t\t\t\tonOpenChange={(o) => setOpenMenu(o ? \"captions\" : null)}\n\t\t\t\t\t\t\t\t\ttrigger={<Captions className=\"size-5\" />}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\tselected={captionLocale === \"off\"}\n\t\t\t\t\t\t\t\t\t\tonSelect={() => chooseCaption(\"off\")}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{t.captionsOff}\n\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t\t{CAPTION_LOCALES.map((locale) => (\n\t\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\t\tkey={locale}\n\t\t\t\t\t\t\t\t\t\t\tselected={captionLocale === locale}\n\t\t\t\t\t\t\t\t\t\t\tonSelect={() => chooseCaption(locale)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{captionLocaleLabel(locale, t)}\n\t\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</MenuControl>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{!compactChrome && effectiveMode === \"vod\" && (\n\t\t\t\t\t\t\t\t<MenuControl\n\t\t\t\t\t\t\t\t\tlabel={t.speed}\n\t\t\t\t\t\t\t\t\topen={openMenu === \"speed\"}\n\t\t\t\t\t\t\t\t\tonOpenChange={(o) => setOpenMenu(o ? \"speed\" : null)}\n\t\t\t\t\t\t\t\t\ttrigger={\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-xs font-semibold\">\n\t\t\t\t\t\t\t\t\t\t\t{playbackRate}×\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{PLAYBACK_RATES.map((rate) => (\n\t\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\t\tkey={rate}\n\t\t\t\t\t\t\t\t\t\t\tselected={rate === playbackRate}\n\t\t\t\t\t\t\t\t\t\t\tonSelect={() => changeRate(rate)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{rate}×\n\t\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</MenuControl>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{!compactChrome && showQuality && (\n\t\t\t\t\t\t\t\t<MenuControl\n\t\t\t\t\t\t\t\t\tlabel={t.quality}\n\t\t\t\t\t\t\t\t\topen={openMenu === \"quality\"}\n\t\t\t\t\t\t\t\t\tonOpenChange={(o) => setOpenMenu(o ? \"quality\" : null)}\n\t\t\t\t\t\t\t\t\ttrigger={<Settings className=\"size-5\" />}\n\t\t\t\t\t\t\t\t\ttriggerBadge={currentLevelLabel}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\tselected={activeLevel < 0}\n\t\t\t\t\t\t\t\t\t\tonSelect={() => chooseLevel(-1)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{t.auto}\n\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t\t{qualities.map((q) => (\n\t\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\t\tkey={q.index}\n\t\t\t\t\t\t\t\t\t\t\tselected={activeLevel === q.index}\n\t\t\t\t\t\t\t\t\t\t\tonSelect={() => chooseLevel(q.index)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{q.height}p\n\t\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</MenuControl>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{!compactChrome && (\n\t\t\t\t\t\t\t\t<ControlButton\n\t\t\t\t\t\t\t\t\tlabel={t.cast}\n\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\tvoid castHlsUrl(src).catch(() => undefined);\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Cast className=\"size-5\" />\n\t\t\t\t\t\t\t\t</ControlButton>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{!compactChrome && pipSupported && (\n\t\t\t\t\t\t\t\t<ControlButton label={t.pictureInPicture} onClick={togglePip}>\n\t\t\t\t\t\t\t\t\t<PictureInPicture2\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\"size-5\", pipActive && \"text-primary\")}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</ControlButton>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{compactChrome && (\n\t\t\t\t\t\t\t\t<MenuControl\n\t\t\t\t\t\t\t\t\tlabel={t.more}\n\t\t\t\t\t\t\t\t\topen={openMenu === \"more\"}\n\t\t\t\t\t\t\t\t\tonOpenChange={(o) => setOpenMenu(o ? \"more\" : null)}\n\t\t\t\t\t\t\t\t\ttrigger={<EllipsisVertical className=\"size-5\" />}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{morePane === \"speed\" ? (\n\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t<MenuBack\n\t\t\t\t\t\t\t\t\t\t\t\tlabel={t.back}\n\t\t\t\t\t\t\t\t\t\t\t\ttitle={t.speed}\n\t\t\t\t\t\t\t\t\t\t\t\tonSelect={() => setMorePane(\"root\")}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t{PLAYBACK_RATES.map((rate) => (\n\t\t\t\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\t\t\t\tkey={rate}\n\t\t\t\t\t\t\t\t\t\t\t\t\tselected={rate === playbackRate}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonSelect={() => changeRate(rate)}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{rate}×\n\t\t\t\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t\t) : morePane === \"quality\" ? (\n\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t<MenuBack\n\t\t\t\t\t\t\t\t\t\t\t\tlabel={t.back}\n\t\t\t\t\t\t\t\t\t\t\t\ttitle={t.quality}\n\t\t\t\t\t\t\t\t\t\t\t\tonSelect={() => setMorePane(\"root\")}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\t\t\tselected={activeLevel < 0}\n\t\t\t\t\t\t\t\t\t\t\t\tonSelect={() => chooseLevel(-1)}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{t.auto}\n\t\t\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t\t\t\t{qualities.map((q) => (\n\t\t\t\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\t\t\t\tkey={q.index}\n\t\t\t\t\t\t\t\t\t\t\t\t\tselected={activeLevel === q.index}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonSelect={() => chooseLevel(q.index)}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{q.height}p\n\t\t\t\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t{effectiveMode === \"vod\" && (\n\t\t\t\t\t\t\t\t\t\t\t\t<MenuNavRow\n\t\t\t\t\t\t\t\t\t\t\t\t\ticon={<Gauge className=\"size-4\" />}\n\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={t.speed}\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={`${playbackRate}×`}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonSelect={() => setMorePane(\"speed\")}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t{showQuality && (\n\t\t\t\t\t\t\t\t\t\t\t\t<MenuNavRow\n\t\t\t\t\t\t\t\t\t\t\t\t\ticon={<Settings className=\"size-4\" />}\n\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={t.quality}\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={currentLevelLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonSelect={() => setMorePane(\"quality\")}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t{(effectiveMode === \"vod\" || showQuality) && (\n\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"my-1 h-px bg-primary/15\" />\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t<MenuAction\n\t\t\t\t\t\t\t\t\t\t\t\ticon={<Cast className=\"size-4\" />}\n\t\t\t\t\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetOpenMenu(null);\n\t\t\t\t\t\t\t\t\t\t\t\t\tvoid castHlsUrl(src).catch(() => undefined);\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{t.cast}\n\t\t\t\t\t\t\t\t\t\t\t</MenuAction>\n\t\t\t\t\t\t\t\t\t\t\t{pipSupported && (\n\t\t\t\t\t\t\t\t\t\t\t\t<MenuAction\n\t\t\t\t\t\t\t\t\t\t\t\t\ticon={<PictureInPicture2 className=\"size-4\" />}\n\t\t\t\t\t\t\t\t\t\t\t\t\tactive={pipActive}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetOpenMenu(null);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttogglePip();\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{t.pictureInPicture}\n\t\t\t\t\t\t\t\t\t\t\t\t</MenuAction>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</MenuControl>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{fullscreenSupported && (\n\t\t\t\t\t\t\t\t<ControlButton\n\t\t\t\t\t\t\t\t\tlabel={isFullscreen ? t.exitFullscreen : t.enterFullscreen}\n\t\t\t\t\t\t\t\t\tonClick={toggleFullscreen}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{isFullscreen ? (\n\t\t\t\t\t\t\t\t\t\t<Minimize className=\"size-5\" />\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<Maximize className=\"size-5\" />\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</ControlButton>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nfunction ControlButton({\n\tlabel,\n\tonClick,\n\tchildren,\n}: {\n\tlabel: string;\n\tonClick: () => void;\n\tchildren: React.ReactNode;\n}) {\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\taria-label={label}\n\t\t\ttitle={label}\n\t\t\tonClick={onClick}\n\t\t\tclassName=\"flex size-8 items-center justify-center rounded-md text-white/90 outline-none hover:bg-primary/15 hover:text-white focus-visible:ring-2 focus-visible:ring-white/60\"\n\t\t>\n\t\t\t{children}\n\t\t</button>\n\t);\n}\n\nfunction MenuControl({\n\tlabel,\n\topen,\n\tonOpenChange,\n\ttrigger,\n\ttriggerBadge,\n\tchildren,\n}: {\n\tlabel: string;\n\topen: boolean;\n\tonOpenChange: (open: boolean) => void;\n\ttrigger: React.ReactNode;\n\ttriggerBadge?: string;\n\tchildren: React.ReactNode;\n}) {\n\treturn (\n\t\t<div className=\"relative\">\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\taria-label={label}\n\t\t\t\taria-haspopup=\"menu\"\n\t\t\t\taria-expanded={open}\n\t\t\t\ttitle={label}\n\t\t\t\tonClick={() => onOpenChange(!open)}\n\t\t\t\tclassName=\"flex h-8 items-center gap-1 rounded-md px-1.5 text-white/90 outline-none hover:bg-primary/15 hover:text-white focus-visible:ring-2 focus-visible:ring-white/60\"\n\t\t\t>\n\t\t\t\t{trigger}\n\t\t\t\t{triggerBadge && (\n\t\t\t\t\t<span className=\"text-[10px] font-medium\">{triggerBadge}</span>\n\t\t\t\t)}\n\t\t\t</button>\n\t\t\t{open && (\n\t\t\t\t<div\n\t\t\t\t\trole=\"menu\"\n\t\t\t\t\tclassName=\"absolute right-0 bottom-full z-10 mb-2 min-w-52 rounded-md bg-black/90 p-1 text-sm shadow-lg backdrop-blur-sm\"\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nfunction MenuItem({\n\tselected,\n\tonSelect,\n\tchildren,\n}: {\n\tselected: boolean;\n\tonSelect: () => void;\n\tchildren: React.ReactNode;\n}) {\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\trole=\"menuitemradio\"\n\t\t\taria-checked={selected}\n\t\t\tonClick={onSelect}\n\t\t\tclassName=\"flex w-full items-center justify-between gap-3 rounded px-2 py-2.5 text-left text-white/90 hover:bg-primary/15\"\n\t\t>\n\t\t\t{children}\n\t\t\t{selected && <Check className=\"size-4\" />}\n\t\t</button>\n\t);\n}\n\nfunction MenuNavRow({\n\ticon,\n\tlabel,\n\tvalue,\n\tonSelect,\n}: {\n\ticon: React.ReactNode;\n\tlabel: string;\n\tvalue: string;\n\tonSelect: () => void;\n}) {\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\trole=\"menuitem\"\n\t\t\taria-label={`${label}, ${value}`}\n\t\t\tonClick={onSelect}\n\t\t\tclassName=\"flex w-full items-center gap-2.5 rounded px-2 py-2.5 text-left text-white/90 hover:bg-primary/15\"\n\t\t>\n\t\t\t<span className=\"text-white/70\">{icon}</span>\n\t\t\t<span className=\"flex-1\">{label}</span>\n\t\t\t<span className=\"text-white/50\">{value}</span>\n\t\t\t<ChevronRight className=\"size-4 text-white/50\" />\n\t\t</button>\n\t);\n}\n\nfunction MenuBack({\n\tlabel,\n\ttitle,\n\tonSelect,\n}: {\n\tlabel: string;\n\ttitle: string;\n\tonSelect: () => void;\n}) {\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\trole=\"menuitem\"\n\t\t\taria-label={label}\n\t\t\tonClick={onSelect}\n\t\t\tclassName=\"flex w-full items-center gap-2 rounded px-2 py-2.5 text-left text-white/90 hover:bg-primary/15\"\n\t\t>\n\t\t\t<ChevronLeft className=\"size-4\" />\n\t\t\t<span className=\"font-medium\">{title}</span>\n\t\t</button>\n\t);\n}\n\nfunction MenuAction({\n\tonSelect,\n\ticon,\n\tactive,\n\tchildren,\n}: {\n\tonSelect: () => void;\n\ticon?: React.ReactNode;\n\tactive?: boolean;\n\tchildren: React.ReactNode;\n}) {\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\trole=\"menuitem\"\n\t\t\tonClick={onSelect}\n\t\t\tclassName={cn(\n\t\t\t\t\"flex w-full items-center gap-2.5 rounded px-2 py-2.5 text-left text-white/90 hover:bg-primary/15\",\n\t\t\t\tactive && \"text-primary\",\n\t\t\t)}\n\t\t>\n\t\t\t{icon ? (\n\t\t\t\t<span className={cn(\"text-white/70\", active && \"text-primary\")}>\n\t\t\t\t\t{icon}\n\t\t\t\t</span>\n\t\t\t) : null}\n\t\t\t{children}\n\t\t</button>\n\t);\n}\n","export type PlaybackBeaconEventType =\n\t\"view\" | \"progress\" | \"rebuffer\" | \"quality_change\" | \"error\";\n\nexport type PlaybackBeaconSurface = \"app\" | \"player\" | \"embed\" | \"sdk\";\n\nexport type PlaybackBeaconEvent = {\n\ttype: PlaybackBeaconEventType;\n\tts: number;\n\tstreamId?: string;\n\tvodId?: string;\n\tcurrentTime?: number;\n\tduration?: number;\n\trebufferSeconds?: number;\n\tquality?: string;\n\terrorCode?: string;\n\tsurface?: PlaybackBeaconSurface | string;\n\t[key: string]: unknown;\n};\n\nexport type PlaybackBeaconTrackInput = Omit<PlaybackBeaconEvent, \"ts\"> & {\n\tts?: number;\n};\n\nexport type CreatePlaybackBeaconClientOptions = {\n\tendpoint: string;\n\tsessionId: string;\n\tsurface: PlaybackBeaconSurface | string;\n\tgetContext?: () => Record<string, unknown>;\n\t/** Override for tests. */\n\tfetchFn?: typeof fetch;\n\tintervalMs?: number;\n\tnow?: () => number;\n};\n\nexport type PlaybackBeaconClient = {\n\ttrack: (event: PlaybackBeaconTrackInput) => void;\n\tflush: () => Promise<void>;\n\tdestroy: () => void;\n};\n\nconst DEFAULT_INTERVAL_MS = 5000;\n\nfunction canUseWindow(): boolean {\n\treturn typeof window !== \"undefined\" && typeof document !== \"undefined\";\n}\n\nexport function createPlaybackBeaconClient({\n\tendpoint,\n\tsessionId,\n\tsurface,\n\tgetContext,\n\tfetchFn,\n\tintervalMs = DEFAULT_INTERVAL_MS,\n\tnow = () => Date.now(),\n}: CreatePlaybackBeaconClientOptions): PlaybackBeaconClient {\n\tlet queue: PlaybackBeaconEvent[] = [];\n\tlet destroyed = false;\n\tlet timer: ReturnType<typeof setInterval> | null = null;\n\tlet flushing: Promise<void> | null = null;\n\n\tfunction enqueue(event: PlaybackBeaconTrackInput) {\n\t\tif (destroyed) return;\n\t\tconst context = getContext?.() ?? {};\n\t\tqueue.push({\n\t\t\ttype: event.type,\n\t\t\t...context,\n\t\t\t...event,\n\t\t\tsurface,\n\t\t\tts: event.ts ?? now(),\n\t\t} as PlaybackBeaconEvent);\n\t}\n\n\tasync function send(events: PlaybackBeaconEvent[], keepalive: boolean) {\n\t\tif (events.length === 0) return;\n\t\tconst body = JSON.stringify({ sessionId, events });\n\t\tconst post = fetchFn ?? (typeof fetch === \"function\" ? fetch : undefined);\n\t\tif (!post) return;\n\t\ttry {\n\t\t\tawait post(endpoint, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\t\tbody,\n\t\t\t\tkeepalive,\n\t\t\t});\n\t\t} catch {\n\t\t\t// Fail-open: a dropped beacon must not break playback.\n\t\t}\n\t}\n\n\tasync function flush(keepalive = false) {\n\t\tif (queue.length === 0) return;\n\t\tconst events = queue;\n\t\tqueue = [];\n\t\tawait send(events, keepalive);\n\t}\n\n\tfunction scheduleFlush() {\n\t\tif (flushing) return flushing;\n\t\tflushing = flush(false).finally(() => {\n\t\t\tflushing = null;\n\t\t});\n\t\treturn flushing;\n\t}\n\n\tfunction onPageHide() {\n\t\tvoid flush(true);\n\t}\n\n\tfunction onVisibility() {\n\t\tif (document.visibilityState === \"hidden\") void flush(true);\n\t}\n\n\tif (canUseWindow()) {\n\t\ttimer = setInterval(() => {\n\t\t\tvoid scheduleFlush();\n\t\t}, intervalMs);\n\t\twindow.addEventListener(\"pagehide\", onPageHide);\n\t\tdocument.addEventListener(\"visibilitychange\", onVisibility);\n\t}\n\n\treturn {\n\t\ttrack(event) {\n\t\t\tenqueue(event);\n\t\t},\n\t\tflush() {\n\t\t\treturn flush(false);\n\t\t},\n\t\tdestroy() {\n\t\t\tif (destroyed) return;\n\t\t\tdestroyed = true;\n\t\t\tif (timer !== null) {\n\t\t\t\tclearInterval(timer);\n\t\t\t\ttimer = null;\n\t\t\t}\n\t\t\tif (canUseWindow()) {\n\t\t\t\twindow.removeEventListener(\"pagehide\", onPageHide);\n\t\t\t\tdocument.removeEventListener(\"visibilitychange\", onVisibility);\n\t\t\t}\n\t\t\tvoid flush(true);\n\t\t},\n\t};\n}\n","export const COMMUNITY_TYPES = [\"comment\", \"question\"] as const;\nexport type CommunityType = (typeof COMMUNITY_TYPES)[number];\n\nexport const COMMUNITY_TARGET_KINDS = [\"stream\", \"vod\"] as const;\nexport type CommunityTargetKind = (typeof COMMUNITY_TARGET_KINDS)[number];\n\nexport type StreamCommunityFlags = {\n\tcommentsEnabled: boolean;\n\tcommentsAfterEnd: boolean;\n\tcommentsOpen: boolean;\n\tqaEnabled: boolean;\n\tqaOpen: boolean;\n};\n\nexport type VodCommunityFlags = {\n\tcommentsEnabled: boolean;\n\tcommentsOpen: boolean;\n};\n\nexport type CommunityFlags = StreamCommunityFlags | VodCommunityFlags;\n\nexport type CommunityAnswer = {\n\tbody: string;\n\tdisplayName: string | null;\n\tpicture: string | null;\n\tansweredAt: number;\n};\n\nexport type CommunityItem = {\n\tid: string;\n\ttype: CommunityType;\n\tparentId: string | null;\n\tbody: string;\n\tdisplayName: string;\n\tpicture: string | null;\n\tguestId: string;\n\tupvoteCount: number;\n\tpinnedAt: number | null;\n\thighlightedAt: number | null;\n\thiddenAt?: number | null;\n\tdismissedAt?: number | null;\n\tanswer: CommunityAnswer | null;\n\tcreatedAt: number;\n\tupdatedAt: number;\n\treplies?: CommunityItem[];\n};\n\nexport type CommunityList = {\n\titems: CommunityItem[];\n\tnextCursor: string | null;\n};\n\nexport type CommunityCreateInput = {\n\ttype: CommunityType;\n\tbody: string;\n\tdisplayName?: string;\n\tpicture?: string | null;\n\tguestId?: string;\n\tparentId?: string;\n};\n\nexport type CommunityPatchInput = {\n\thidden?: boolean;\n\tpinned?: boolean;\n\thighlighted?: boolean;\n\tdismissed?: boolean;\n\tdeleted?: boolean;\n\tanswer?: {\n\t\tbody: string;\n\t\tdisplayName?: string;\n\t\tpicture?: string | null;\n\t} | null;\n};\n\nexport type CommunitySettingsPatch = {\n\tcommentsEnabled?: boolean;\n\tcommentsAfterEnd?: boolean;\n\tqaEnabled?: boolean;\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction asString(value: unknown): string | null {\n\treturn typeof value === \"string\" ? value : null;\n}\n\nfunction asNumber(value: unknown): number | null {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nexport function parseCommunityFlags(\n\tvalue: unknown,\n\tkind: \"stream\",\n): StreamCommunityFlags | null;\nexport function parseCommunityFlags(\n\tvalue: unknown,\n\tkind: \"vod\",\n): VodCommunityFlags | null;\nexport function parseCommunityFlags(\n\tvalue: unknown,\n\tkind: CommunityTargetKind,\n): CommunityFlags | null;\nexport function parseCommunityFlags(\n\tvalue: unknown,\n\tkind: CommunityTargetKind,\n): CommunityFlags | null {\n\tif (!isRecord(value)) return null;\n\tif (kind === \"vod\") {\n\t\tif (typeof value.commentsEnabled !== \"boolean\") return null;\n\t\treturn {\n\t\t\tcommentsEnabled: value.commentsEnabled,\n\t\t\tcommentsOpen:\n\t\t\t\ttypeof value.commentsOpen === \"boolean\"\n\t\t\t\t\t? value.commentsOpen\n\t\t\t\t\t: value.commentsEnabled,\n\t\t};\n\t}\n\tif (\n\t\ttypeof value.commentsEnabled !== \"boolean\" ||\n\t\ttypeof value.commentsAfterEnd !== \"boolean\" ||\n\t\ttypeof value.qaEnabled !== \"boolean\"\n\t) {\n\t\treturn null;\n\t}\n\treturn {\n\t\tcommentsEnabled: value.commentsEnabled,\n\t\tcommentsAfterEnd: value.commentsAfterEnd,\n\t\tcommentsOpen:\n\t\t\ttypeof value.commentsOpen === \"boolean\"\n\t\t\t\t? value.commentsOpen\n\t\t\t\t: value.commentsEnabled,\n\t\tqaEnabled: value.qaEnabled,\n\t\tqaOpen: typeof value.qaOpen === \"boolean\" ? value.qaOpen : false,\n\t};\n}\n\nfunction parseAnswer(value: unknown): CommunityAnswer | null {\n\tif (!isRecord(value)) return null;\n\tconst body = asString(value.body);\n\tconst answeredAt = asNumber(value.answeredAt);\n\tif (!body || answeredAt == null) return null;\n\treturn {\n\t\tbody,\n\t\tdisplayName: asString(value.displayName),\n\t\tpicture: asString(value.picture),\n\t\tansweredAt,\n\t};\n}\n\nexport function parseCommunityItem(value: unknown): CommunityItem | null {\n\tif (!isRecord(value)) return null;\n\tconst id = asString(value.id);\n\tconst body = asString(value.body);\n\tconst displayName = asString(value.displayName);\n\tconst guestId = asString(value.guestId);\n\tconst type = value.type === \"question\" ? \"question\" : \"comment\";\n\tconst createdAt = asNumber(value.createdAt);\n\tif (!id || !body || !displayName || !guestId || createdAt == null) {\n\t\treturn null;\n\t}\n\tconst replies = Array.isArray(value.replies)\n\t\t? value.replies\n\t\t\t\t.map((row) => parseCommunityItem(row))\n\t\t\t\t.filter((row): row is CommunityItem => row != null)\n\t\t: [];\n\treturn {\n\t\tid,\n\t\ttype,\n\t\tparentId: asString(value.parentId),\n\t\tbody,\n\t\tdisplayName,\n\t\tpicture: asString(value.picture),\n\t\tguestId,\n\t\tupvoteCount: asNumber(value.upvoteCount) ?? 0,\n\t\tpinnedAt: asNumber(value.pinnedAt),\n\t\thighlightedAt: asNumber(value.highlightedAt),\n\t\thiddenAt: asNumber(value.hiddenAt),\n\t\tdismissedAt: asNumber(value.dismissedAt),\n\t\tanswer: parseAnswer(value.answer),\n\t\tcreatedAt,\n\t\tupdatedAt: asNumber(value.updatedAt) ?? createdAt,\n\t\treplies,\n\t};\n}\n\nexport function parseCommunityList(value: unknown): CommunityList {\n\tif (!isRecord(value) || !Array.isArray(value.items)) {\n\t\treturn { items: [], nextCursor: null };\n\t}\n\treturn {\n\t\titems: value.items\n\t\t\t.map((row) => parseCommunityItem(row))\n\t\t\t.filter((row): row is CommunityItem => row != null),\n\t\tnextCursor: asString(value.nextCursor),\n\t};\n}\n\nexport function hasQa(flags: CommunityFlags): flags is StreamCommunityFlags {\n\treturn \"qaEnabled\" in flags;\n}\n","import {\n\tparseCommunityFlags,\n\tparseCommunityItem,\n\tparseCommunityList,\n\ttype CommunityCreateInput,\n\ttype CommunityFlags,\n\ttype CommunityItem,\n\ttype CommunityList,\n\ttype CommunityPatchInput,\n\ttype CommunitySettingsPatch,\n\ttype CommunityTargetKind,\n\ttype CommunityType,\n} from \"./types\";\n\nexport class CommunityApiError extends Error {\n\treadonly status: number;\n\treadonly body: unknown;\n\n\tconstructor(status: number, message: string, body: unknown) {\n\t\tsuper(message);\n\t\tthis.name = \"CommunityApiError\";\n\t\tthis.status = status;\n\t\tthis.body = body;\n\t}\n}\n\nexport type CommunityClientOptions = {\n\tapiUrl: string;\n\ttargetKind: CommunityTargetKind;\n\ttargetId: string;\n\tmode?: \"viewer\" | \"control\";\n\tfetchFn?: typeof fetch;\n\theaders?: Record<string, string>;\n};\n\nfunction collectionPath(\n\tkind: CommunityTargetKind,\n\tid: string,\n\tmode: \"viewer\" | \"control\",\n): string {\n\tconst plural = kind === \"stream\" ? \"streams\" : \"vods\";\n\tconst prefix = mode === \"viewer\" ? \"/public\" : \"\";\n\treturn `${prefix}/${plural}/${encodeURIComponent(id)}/community`;\n}\n\nexport function createCommunityClient(options: CommunityClientOptions) {\n\tconst apiUrl = options.apiUrl.replace(/\\/$/, \"\");\n\tconst fetchFn = options.fetchFn ?? fetch;\n\tconst mode = options.mode ?? \"viewer\";\n\tconst base = collectionPath(options.targetKind, options.targetId, mode);\n\n\tasync function request<T>(\n\t\tpath: string,\n\t\tinit: RequestInit = {},\n\t\tparse: (value: unknown) => T,\n\t): Promise<T> {\n\t\tconst headers = new Headers(init.headers);\n\t\tfor (const [key, value] of Object.entries(options.headers ?? {})) {\n\t\t\theaders.set(key, value);\n\t\t}\n\t\theaders.set(\"accept\", \"application/json\");\n\t\tif (init.body && !headers.has(\"content-type\")) {\n\t\t\theaders.set(\"content-type\", \"application/json\");\n\t\t}\n\t\tconst res = await fetchFn(`${apiUrl}${path}`, { ...init, headers });\n\t\tconst body: unknown = await res.json().catch(() => ({}));\n\t\tif (!res.ok) {\n\t\t\tconst error =\n\t\t\t\ttypeof body === \"object\" &&\n\t\t\t\tbody !== null &&\n\t\t\t\t\"error\" in body &&\n\t\t\t\ttypeof (body as { error: unknown }).error === \"string\"\n\t\t\t\t\t? (body as { error: string }).error\n\t\t\t\t\t: `Livo community ${res.status}`;\n\t\t\tthrow new CommunityApiError(res.status, error, body);\n\t\t}\n\t\treturn parse(body);\n\t}\n\n\treturn {\n\t\tlist(input: { type?: CommunityType; q?: string; cursor?: string } = {}) {\n\t\t\tconst params = new URLSearchParams();\n\t\t\tif (input.type) params.set(\"type\", input.type);\n\t\t\tif (input.q) params.set(\"q\", input.q);\n\t\t\tif (input.cursor) params.set(\"cursor\", input.cursor);\n\t\t\tconst query = params.toString();\n\t\t\treturn request(`${base}${query ? `?${query}` : \"\"}`, {}, (value) =>\n\t\t\t\tparseCommunityList(value),\n\t\t\t);\n\t\t},\n\t\tcreate(input: CommunityCreateInput) {\n\t\t\treturn request(\n\t\t\t\tbase,\n\t\t\t\t{ method: \"POST\", body: JSON.stringify(input) },\n\t\t\t\t(value) => {\n\t\t\t\t\tconst record =\n\t\t\t\t\t\ttypeof value === \"object\" && value !== null && \"item\" in value\n\t\t\t\t\t\t\t? (value as { item: unknown }).item\n\t\t\t\t\t\t\t: value;\n\t\t\t\t\tconst item = parseCommunityItem(record);\n\t\t\t\t\tif (!item) throw new CommunityApiError(500, \"Invalid item\", value);\n\t\t\t\t\treturn item;\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t\tpatch(itemId: string, input: CommunityPatchInput) {\n\t\t\treturn request(\n\t\t\t\t`${base}/${encodeURIComponent(itemId)}`,\n\t\t\t\t{ method: \"PATCH\", body: JSON.stringify(input) },\n\t\t\t\t(value) => {\n\t\t\t\t\tconst record =\n\t\t\t\t\t\ttypeof value === \"object\" && value !== null && \"item\" in value\n\t\t\t\t\t\t\t? (value as { item: unknown }).item\n\t\t\t\t\t\t\t: value;\n\t\t\t\t\tconst item = parseCommunityItem(record);\n\t\t\t\t\tif (!item) throw new CommunityApiError(500, \"Invalid item\", value);\n\t\t\t\t\treturn item;\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t\tupvote(itemId: string, guestId: string) {\n\t\t\treturn request(\n\t\t\t\t`${base}/${encodeURIComponent(itemId)}/upvote`,\n\t\t\t\t{\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tbody: JSON.stringify({ guestId }),\n\t\t\t\t},\n\t\t\t\t(value) => {\n\t\t\t\t\tconst record =\n\t\t\t\t\t\ttypeof value === \"object\" && value !== null && \"item\" in value\n\t\t\t\t\t\t\t? (value as { item: unknown }).item\n\t\t\t\t\t\t\t: value;\n\t\t\t\t\tconst item = parseCommunityItem(record);\n\t\t\t\t\tif (!item) throw new CommunityApiError(500, \"Invalid item\", value);\n\t\t\t\t\treturn item;\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t\tanswer(\n\t\t\titemId: string,\n\t\t\tinput: {\n\t\t\t\tbody: string;\n\t\t\t\tdisplayName: string;\n\t\t\t\tpicture?: string | null;\n\t\t\t\tguestId: string;\n\t\t\t},\n\t\t) {\n\t\t\treturn request(\n\t\t\t\t`${base}/${encodeURIComponent(itemId)}/answer`,\n\t\t\t\t{ method: \"POST\", body: JSON.stringify(input) },\n\t\t\t\t(value) => {\n\t\t\t\t\tconst record =\n\t\t\t\t\t\ttypeof value === \"object\" && value !== null && \"item\" in value\n\t\t\t\t\t\t\t? (value as { item: unknown }).item\n\t\t\t\t\t\t\t: value;\n\t\t\t\t\tconst item = parseCommunityItem(record);\n\t\t\t\t\tif (!item) throw new CommunityApiError(500, \"Invalid item\", value);\n\t\t\t\t\treturn item;\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t\tcanAnswer(guestId: string) {\n\t\t\tconst params = new URLSearchParams({ guestId });\n\t\t\treturn request(\n\t\t\t\t`${base}/can-answer?${params.toString()}`,\n\t\t\t\t{},\n\t\t\t\t(value): { canAnswer: boolean } => {\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof value === \"object\" &&\n\t\t\t\t\t\tvalue !== null &&\n\t\t\t\t\t\t\"canAnswer\" in value &&\n\t\t\t\t\t\ttypeof (value as { canAnswer: unknown }).canAnswer === \"boolean\"\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn { canAnswer: (value as { canAnswer: boolean }).canAnswer };\n\t\t\t\t\t}\n\t\t\t\t\treturn { canAnswer: false };\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t\tpatchSettings(input: CommunitySettingsPatch) {\n\t\t\tconst plural = options.targetKind === \"stream\" ? \"streams\" : \"vods\";\n\t\t\treturn request(\n\t\t\t\t`/${plural}/${encodeURIComponent(options.targetId)}`,\n\t\t\t\t{ method: \"PATCH\", body: JSON.stringify(input) },\n\t\t\t\t(value): CommunityFlags | null => {\n\t\t\t\t\tconst record =\n\t\t\t\t\t\ttypeof value === \"object\" && value !== null\n\t\t\t\t\t\t\t? (value as Record<string, unknown>)\n\t\t\t\t\t\t\t: null;\n\t\t\t\t\tconst nested =\n\t\t\t\t\t\trecord && typeof record.stream === \"object\" && record.stream\n\t\t\t\t\t\t\t? (record.stream as Record<string, unknown>).community\n\t\t\t\t\t\t\t: record && typeof record.vod === \"object\" && record.vod\n\t\t\t\t\t\t\t\t? (record.vod as Record<string, unknown>).community\n\t\t\t\t\t\t\t\t: record?.community;\n\t\t\t\t\treturn parseCommunityFlags(nested, options.targetKind);\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t};\n}\n\nexport type CommunityClient = ReturnType<typeof createCommunityClient>;\nexport type { CommunityList, CommunityItem };\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\n\nexport function communityAvatarInitial(name: string): string {\n\tconst trimmed = name.trim();\n\treturn (trimmed[0] ?? \"?\").toUpperCase();\n}\n\nexport function CommunityAvatar({\n\tname,\n\tsrc,\n\tclassName,\n}: {\n\tname: string;\n\tsrc?: string | null;\n\tclassName?: string;\n}) {\n\tconst [failed, setFailed] = useState(false);\n\tconst url = src?.trim() || null;\n\n\tuseEffect(() => {\n\t\tsetFailed(false);\n\t}, [url]);\n\n\tconst showImage = Boolean(url) && !failed;\n\tconst classes = [\"livo-condo-avatar\", className].filter(Boolean).join(\" \");\n\n\treturn (\n\t\t<span\n\t\t\taria-hidden\n\t\t\tclassName={showImage ? classes : `${classes} livo-condo-avatar--fallback`}\n\t\t\tdata-community-avatar={showImage ? \"image\" : \"fallback\"}\n\t\t>\n\t\t\t{showImage ? (\n\t\t\t\t<img\n\t\t\t\t\tsrc={url ?? undefined}\n\t\t\t\t\talt=\"\"\n\t\t\t\t\tonError={() => {\n\t\t\t\t\t\tif (!url) return;\n\t\t\t\t\t\tconsole.warn(`Community avatar failed to load: ${url}`);\n\t\t\t\t\t\tsetFailed(true);\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\tcommunityAvatarInitial(name)\n\t\t\t)}\n\t\t</span>\n\t);\n}\n","\"use client\";\n\nimport {\n\tuseCallback,\n\tuseLayoutEffect,\n\tuseRef,\n\tuseState,\n\ttype ReactNode,\n} from \"react\";\n\nconst BOTTOM_THRESHOLD_PX = 48;\n\nexport function CommunityMessageScroller({\n\tchildren,\n\tfollowKey,\n\tjumpLabel,\n\tempty = false,\n\tclassName,\n}: {\n\tchildren: ReactNode;\n\tfollowKey: string | number;\n\tjumpLabel: string;\n\tempty?: boolean;\n\tclassName?: string;\n}) {\n\tconst viewportRef = useRef<HTMLDivElement>(null);\n\tconst pinnedRef = useRef(true);\n\tconst [pinned, setPinned] = useState(true);\n\n\tconst scrollToEnd = useCallback(() => {\n\t\tconst el = viewportRef.current;\n\t\tif (!el) return;\n\t\tel.scrollTop = el.scrollHeight;\n\t\tpinnedRef.current = true;\n\t\tsetPinned(true);\n\t}, []);\n\n\tuseLayoutEffect(() => {\n\t\tif (pinnedRef.current) scrollToEnd();\n\t}, [followKey, scrollToEnd]);\n\n\tfunction onScroll() {\n\t\tconst el = viewportRef.current;\n\t\tif (!el) return;\n\t\tconst next =\n\t\t\tel.scrollHeight - el.scrollTop - el.clientHeight <= BOTTOM_THRESHOLD_PX;\n\t\tpinnedRef.current = next;\n\t\tsetPinned(next);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={[\"livo-condo-scroller\", className].filter(Boolean).join(\" \")}\n\t\t\tdata-slot=\"message-scroller\"\n\t\t>\n\t\t\t<div\n\t\t\t\tref={viewportRef}\n\t\t\t\trole=\"log\"\n\t\t\t\taria-live=\"polite\"\n\t\t\t\tclassName=\"livo-condo-scroller__viewport\"\n\t\t\t\tdata-slot=\"message-scroller-viewport\"\n\t\t\t\tonScroll={onScroll}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"livo-condo-scroller__content\"\n\t\t\t\t\tdata-slot=\"message-scroller-content\"\n\t\t\t\t\tdata-empty={empty ? \"true\" : undefined}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t{empty || pinned ? null : (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName=\"livo-condo-jump\"\n\t\t\t\t\tdata-slot=\"message-scroller-button\"\n\t\t\t\t\tonClick={scrollToEnd}\n\t\t\t\t>\n\t\t\t\t\t{jumpLabel}\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import type { CommunityFlags, CommunityType } from \"./types\";\nimport { hasQa } from \"./types\";\n\nexport function commentsOpen(flags: CommunityFlags): boolean {\n\treturn flags.commentsOpen;\n}\n\nexport function qaOpen(flags: CommunityFlags): boolean {\n\treturn hasQa(flags) && flags.qaOpen;\n}\n\nexport function canPost(flags: CommunityFlags, type: CommunityType): boolean {\n\tif (type === \"question\") return qaOpen(flags);\n\treturn commentsOpen(flags);\n}\n\nexport function showQaTab(flags: CommunityFlags): boolean {\n\treturn hasQa(flags) && flags.qaEnabled;\n}\n\nexport function communityFeedEnabled(\n\tflags: CommunityFlags,\n\ttype: CommunityType,\n): boolean {\n\tswitch (type) {\n\t\tcase \"comment\":\n\t\t\treturn flags.commentsEnabled;\n\t\tcase \"question\":\n\t\t\treturn showQaTab(flags);\n\t\tdefault: {\n\t\t\tconst _never: never = type;\n\t\t\treturn _never;\n\t\t}\n\t}\n}\n","const GUEST_STORAGE_KEY = \"livo-community-guest-id\";\nexport const COMMUNITY_IDENTITY_KEY = \"livo-community-identity\";\nexport const DISPLAY_NAME_MAX = 80;\nexport const PICTURE_URL_MAX = 500;\n\nexport type CommunityViewerIdentity = {\n\tdisplayName: string;\n\tpicture: string | null;\n};\n\nfunction randomGuestId(): string {\n\tif (typeof crypto !== \"undefined\" && \"randomUUID\" in crypto) {\n\t\treturn crypto.randomUUID();\n\t}\n\treturn `guest-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;\n}\n\nfunction storageOrUndefined(\n\tstorage?: Pick<Storage, \"getItem\" | \"setItem\">,\n): Pick<Storage, \"getItem\" | \"setItem\"> | undefined {\n\tif (storage) return storage;\n\tif (typeof localStorage === \"undefined\") return undefined;\n\treturn localStorage;\n}\n\nexport function communityGuestId(\n\tstorage?: Pick<Storage, \"getItem\" | \"setItem\">,\n): string {\n\tconst store = storageOrUndefined(storage);\n\tif (!store) return randomGuestId();\n\tconst existing = store.getItem(GUEST_STORAGE_KEY)?.trim();\n\tif (existing) return existing;\n\tconst created = randomGuestId();\n\tstore.setItem(GUEST_STORAGE_KEY, created);\n\treturn created;\n}\n\nexport function sanitizeDisplayName(value: string | null | undefined): string {\n\treturn (value ?? \"\").trim().slice(0, DISPLAY_NAME_MAX);\n}\n\nexport function sanitizePictureUrl(\n\tvalue: string | null | undefined,\n): string | null {\n\tconst trimmed = (value ?? \"\").trim();\n\tif (!trimmed || trimmed.length > PICTURE_URL_MAX) return null;\n\ttry {\n\t\tconst url = new URL(trimmed);\n\t\tif (url.protocol !== \"http:\" && url.protocol !== \"https:\") return null;\n\t\treturn url.href;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport function loadStoredCommunityIdentity(\n\tstorage?: Pick<Storage, \"getItem\" | \"setItem\">,\n): CommunityViewerIdentity | null {\n\tconst store = storageOrUndefined(storage);\n\tconst raw = store?.getItem(COMMUNITY_IDENTITY_KEY);\n\tif (!raw) return null;\n\ttry {\n\t\tconst parsed: unknown = JSON.parse(raw);\n\t\tif (\n\t\t\ttypeof parsed !== \"object\" ||\n\t\t\tparsed === null ||\n\t\t\tArray.isArray(parsed)\n\t\t) {\n\t\t\treturn null;\n\t\t}\n\t\tconst record = parsed as Record<string, unknown>;\n\t\tconst displayName = sanitizeDisplayName(\n\t\t\ttypeof record.displayName === \"string\" ? record.displayName : \"\",\n\t\t);\n\t\tif (!displayName) return null;\n\t\treturn {\n\t\t\tdisplayName,\n\t\t\tpicture: sanitizePictureUrl(\n\t\t\t\ttypeof record.picture === \"string\" ? record.picture : null,\n\t\t\t),\n\t\t};\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport function saveStoredCommunityIdentity(\n\tidentity: CommunityViewerIdentity,\n\tstorage?: Pick<Storage, \"getItem\" | \"setItem\">,\n): CommunityViewerIdentity | null {\n\tconst displayName = sanitizeDisplayName(identity.displayName);\n\tif (!displayName) return null;\n\tconst next = {\n\t\tdisplayName,\n\t\tpicture: sanitizePictureUrl(identity.picture),\n\t};\n\tstorageOrUndefined(storage)?.setItem(\n\t\tCOMMUNITY_IDENTITY_KEY,\n\t\tJSON.stringify(next),\n\t);\n\treturn next;\n}\n","export type CommunityLabels = {\n\tcomments: string;\n\tqa: string;\n\tcomposer: string;\n\tquestionComposer: string;\n\treply: string;\n\tsend: string;\n\tname: string;\n\tnamePlaceholder: string;\n\tpostingAs: string;\n\teditName: string;\n\tsaveName: string;\n\tclosed: string;\n\tqaClosed: string;\n\temptyComments: string;\n\temptyQuestions: string;\n\tjumpToLatest: string;\n\tpinned: string;\n\tlive: string;\n\tpin: string;\n\tunpin: string;\n\thide: string;\n\tunhide: string;\n\tremove: string;\n\thighlight: string;\n\tdismiss: string;\n\tanswer: string;\n\tupvote: string;\n\tsettings: string;\n\tcommentsEnabled: string;\n\tcommentsAfterEnd: string;\n\tqaEnabled: string;\n\tcommentsHelp: string;\n\tcommentsAfterEndHelp: string;\n\tqaHelp: string;\n};\n\nexport const communityLabels: CommunityLabels = {\n\tcomments: \"Comments\",\n\tqa: \"Q&A\",\n\tcomposer: \"Write a comment\",\n\tquestionComposer: \"Ask a question\",\n\treply: \"Reply\",\n\tsend: \"Send\",\n\tname: \"Display name\",\n\tnamePlaceholder: \"Your name\",\n\tpostingAs: \"Posting as {name}\",\n\teditName: \"Edit name\",\n\tsaveName: \"Save\",\n\tclosed: \"Comments are closed\",\n\tqaClosed: \"Q&A is closed\",\n\temptyComments: \"No comments yet\",\n\temptyQuestions: \"No questions yet\",\n\tjumpToLatest: \"Jump to latest\",\n\tpinned: \"Pinned\",\n\tlive: \"Live\",\n\tpin: \"Pin\",\n\tunpin: \"Unpin\",\n\thide: \"Hide\",\n\tunhide: \"Unhide\",\n\tremove: \"Delete\",\n\thighlight: \"Highlight\",\n\tdismiss: \"Dismiss\",\n\tanswer: \"Answer\",\n\tupvote: \"Upvote\",\n\tsettings: \"Community\",\n\tcommentsEnabled: \"Comments\",\n\tcommentsAfterEnd: \"Keep comments open after the event\",\n\tqaEnabled: \"Live Q&A\",\n\tcommentsHelp: \"Viewers can comment on this video.\",\n\tcommentsAfterEndHelp:\n\t\t\"When off, comments close as soon as the live event ends.\",\n\tqaHelp: \"Questions are only accepted while the event is live.\",\n};\n","\"use client\";\n\nimport {\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseState,\n\ttype FormEvent,\n} from \"react\";\nimport { CommunityApiError, createCommunityClient } from \"./api\";\nimport { CommunityAvatar } from \"./avatar\";\nimport { CommunityMessageScroller } from \"./scroller\";\nimport {\n\tcanPost,\n\tcommentsOpen,\n\tcommunityFeedEnabled,\n\tqaOpen,\n\tshowQaTab,\n} from \"./gates\";\nimport {\n\tcommunityGuestId,\n\tloadStoredCommunityIdentity,\n\tsanitizeDisplayName,\n\tsanitizePictureUrl,\n\tsaveStoredCommunityIdentity,\n} from \"./identity\";\nimport { communityLabels, type CommunityLabels } from \"./labels\";\nimport {\n\thasQa,\n\ttype CommunityFlags,\n\ttype CommunityItem,\n\ttype CommunitySettingsPatch,\n\ttype CommunityTargetKind,\n\ttype CommunityType,\n} from \"./types\";\n\nexport type LivoCommunityProps = {\n\tapiUrl: string;\n\ttargetKind: CommunityTargetKind;\n\ttargetId: string;\n\tflags: CommunityFlags;\n\tmode?: \"viewer\" | \"control\";\n\tfetchFn?: typeof fetch;\n\theaders?: Record<string, string>;\n\tdisplayName?: string;\n\tpicture?: string | null;\n\tguestId?: string;\n\tpollMs?: number;\n\tlabels?: Partial<CommunityLabels>;\n\tclassName?: string;\n\tonFlagsChange?: (flags: CommunityFlags) => void;\n\t/** Lock to one feed (no Comments/Q&A tabs). Use for in-player drawers or a custom split layout. */\n\ttype?: CommunityType;\n};\n\nfunction mergeLabels(partial?: Partial<CommunityLabels>): CommunityLabels {\n\treturn { ...communityLabels, ...partial };\n}\n\nfunction ItemRow({\n\titem,\n\tmode,\n\tlabels,\n\tonReply,\n\tonPatch,\n\tonUpvote,\n}: {\n\titem: CommunityItem;\n\tmode: \"viewer\" | \"control\";\n\tlabels: CommunityLabels;\n\tonReply?: (parentId: string) => void;\n\tonPatch: (\n\t\titemId: string,\n\t\tpatch: Parameters<ReturnType<typeof createCommunityClient>[\"patch\"]>[1],\n\t) => void;\n\tonUpvote?: (itemId: string) => void;\n}) {\n\tconst [answer, setAnswer] = useState(\"\");\n\treturn (\n\t\t<article\n\t\t\tclassName=\"livo-condo-message\"\n\t\t\tdata-slot=\"message\"\n\t\t\tdata-highlighted={item.highlightedAt ? \"true\" : undefined}\n\t\t\tdata-hidden={item.hiddenAt ? \"true\" : undefined}\n\t\t>\n\t\t\t<CommunityAvatar name={item.displayName} src={item.picture} />\n\t\t\t<div className=\"livo-condo-message__content\">\n\t\t\t\t<header className=\"livo-condo-message__header\">\n\t\t\t\t\t<strong>{item.displayName}</strong>\n\t\t\t\t\t{item.pinnedAt ? (\n\t\t\t\t\t\t<span className=\"livo-condo-chip\">{labels.pinned}</span>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{item.highlightedAt ? (\n\t\t\t\t\t\t<span className=\"livo-condo-chip\">{labels.live}</span>\n\t\t\t\t\t) : null}\n\t\t\t\t</header>\n\t\t\t\t<p className=\"livo-condo-bubble\">{item.body}</p>\n\t\t\t\t{item.answer ? (\n\t\t\t\t\t<p className=\"livo-condo-bubble livo-condo-bubble--answer\">\n\t\t\t\t\t\t<span className=\"livo-condo-bubble__caption\">\n\t\t\t\t\t\t\t{item.answer.displayName ?? \"Host\"}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t{item.answer.body}\n\t\t\t\t\t</p>\n\t\t\t\t) : null}\n\t\t\t\t<div className=\"livo-condo-item__actions\">\n\t\t\t\t\t{item.type === \"question\" && onUpvote ? (\n\t\t\t\t\t\t<button type=\"button\" onClick={() => onUpvote(item.id)}>\n\t\t\t\t\t\t\t{labels.upvote} {item.upvoteCount}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{item.type === \"comment\" && !item.parentId && onReply ? (\n\t\t\t\t\t\t<button type=\"button\" onClick={() => onReply(item.id)}>\n\t\t\t\t\t\t\t{labels.reply}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{mode === \"control\" && item.type === \"comment\" ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\t\t\tonPatch(item.id, { pinned: item.pinnedAt == null })\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{item.pinnedAt ? labels.unpin : labels.pin}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\t\t\tonPatch(item.id, { hidden: item.hiddenAt == null })\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{item.hiddenAt ? labels.unhide : labels.hide}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() => onPatch(item.id, { deleted: true })}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{labels.remove}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{mode === \"control\" && item.type === \"question\" ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\t\t\tonPatch(item.id, { highlighted: item.highlightedAt == null })\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{labels.highlight}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\t\t\tonPatch(item.id, { dismissed: item.dismissedAt == null })\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{labels.dismiss}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\t\t\t\t{mode === \"control\" && item.type === \"question\" ? (\n\t\t\t\t\t<form\n\t\t\t\t\t\tclassName=\"livo-condo-answer-form\"\n\t\t\t\t\t\tonSubmit={(event) => {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tconst body = answer.trim();\n\t\t\t\t\t\t\tif (!body) return;\n\t\t\t\t\t\t\tonPatch(item.id, { answer: { body } });\n\t\t\t\t\t\t\tsetAnswer(\"\");\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\tvalue={answer}\n\t\t\t\t\t\t\tonChange={(event) => setAnswer(event.target.value)}\n\t\t\t\t\t\t\tplaceholder={labels.answer}\n\t\t\t\t\t\t\taria-label={labels.answer}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<button type=\"submit\">{labels.send}</button>\n\t\t\t\t\t</form>\n\t\t\t\t) : null}\n\t\t\t\t{item.replies?.map((reply) => (\n\t\t\t\t\t<ItemRow\n\t\t\t\t\t\tkey={reply.id}\n\t\t\t\t\t\titem={reply}\n\t\t\t\t\t\tmode={mode}\n\t\t\t\t\t\tlabels={labels}\n\t\t\t\t\t\tonPatch={onPatch}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</article>\n\t);\n}\n\nexport function LivoCommunity({\n\tapiUrl,\n\ttargetKind,\n\ttargetId,\n\tflags,\n\tmode = \"viewer\",\n\tfetchFn,\n\theaders,\n\tdisplayName: displayNameProp,\n\tpicture,\n\tguestId: guestIdProp,\n\tpollMs = 5000,\n\tlabels: labelsProp,\n\tclassName,\n\tonFlagsChange,\n\ttype: lockedType,\n}: LivoCommunityProps) {\n\tconst labels = useMemo(() => mergeLabels(labelsProp), [labelsProp]);\n\tconst client = useMemo(\n\t\t() =>\n\t\t\tcreateCommunityClient({\n\t\t\t\tapiUrl,\n\t\t\t\ttargetKind,\n\t\t\t\ttargetId,\n\t\t\t\tmode,\n\t\t\t\tfetchFn,\n\t\t\t\theaders,\n\t\t\t}),\n\t\t[apiUrl, fetchFn, headers, mode, targetId, targetKind],\n\t);\n\tconst guestId = guestIdProp ?? communityGuestId();\n\tconst suppliedName = sanitizeDisplayName(displayNameProp);\n\tconst locked = suppliedName.length > 0;\n\tconst [tab, setTab] = useState<CommunityType>(lockedType ?? \"comment\");\n\tconst [items, setItems] = useState<CommunityItem[]>([]);\n\tconst [body, setBody] = useState(\"\");\n\tconst [name, setName] = useState(suppliedName);\n\tconst [pictureUrl, setPictureUrl] = useState(\n\t\tsanitizePictureUrl(picture) ?? null,\n\t);\n\tconst [editingName, setEditingName] = useState(!locked && !suppliedName);\n\tconst [hasStoredName, setHasStoredName] = useState(locked);\n\tconst [identityReady, setIdentityReady] = useState(locked);\n\tconst [replyTo, setReplyTo] = useState<string | null>(null);\n\tconst [error, setError] = useState<string | null>(null);\n\tconst [settings, setSettings] = useState(flags);\n\n\tuseEffect(() => {\n\t\tsetSettings(flags);\n\t}, [flags]);\n\n\tuseEffect(() => {\n\t\tif (locked) {\n\t\t\tsetName(suppliedName);\n\t\t\tsetPictureUrl(sanitizePictureUrl(picture) ?? null);\n\t\t\tsetEditingName(false);\n\t\t\tsetHasStoredName(true);\n\t\t\tsetIdentityReady(true);\n\t\t\treturn;\n\t\t}\n\t\tconst stored = loadStoredCommunityIdentity();\n\t\tconst nextName = suppliedName || stored?.displayName || \"\";\n\t\tsetName(nextName);\n\t\tsetPictureUrl(sanitizePictureUrl(picture) ?? stored?.picture ?? null);\n\t\tsetEditingName(!nextName);\n\t\tsetHasStoredName(Boolean(nextName));\n\t\tsetIdentityReady(true);\n\t}, [locked, picture, suppliedName]);\n\n\tuseEffect(() => {\n\t\tif (lockedType) {\n\t\t\tsetTab(lockedType);\n\t\t\treturn;\n\t\t}\n\t\tif (!showQaTab(settings) && tab === \"question\") setTab(\"comment\");\n\t}, [lockedType, settings, tab]);\n\n\tconst load = useCallback(async () => {\n\t\tconst listed = await client.list({\n\t\t\ttype: lockedType ?? (showQaTab(settings) ? tab : \"comment\"),\n\t\t});\n\t\tsetItems(listed.items);\n\t}, [client, lockedType, settings, tab]);\n\n\tuseEffect(() => {\n\t\tlet cancelled = false;\n\t\tconst tick = async () => {\n\t\t\ttry {\n\t\t\t\tawait load();\n\t\t\t\tif (!cancelled) setError(null);\n\t\t\t} catch (err) {\n\t\t\t\tif (!cancelled) {\n\t\t\t\t\tsetError(err instanceof Error ? err.message : \"Failed to load\");\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tvoid tick();\n\t\tif (pollMs <= 0) return;\n\t\tconst id = window.setInterval(() => void tick(), pollMs);\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t\twindow.clearInterval(id);\n\t\t};\n\t}, [load, pollMs]);\n\n\tconst activeType = lockedType ?? tab;\n\tif (lockedType && !communityFeedEnabled(settings, lockedType)) return null;\n\tconst open =\n\t\tactiveType === \"question\" ? qaOpen(settings) : commentsOpen(settings);\n\tconst showNameField = identityReady && !locked && editingName;\n\tconst showPostingAs =\n\t\tidentityReady && !editingName && sanitizeDisplayName(name).length > 0;\n\n\tfunction persistIdentity(nextName: string, nextPicture: string | null) {\n\t\tconst saved = saveStoredCommunityIdentity({\n\t\t\tdisplayName: nextName,\n\t\t\tpicture: nextPicture,\n\t\t});\n\t\tif (!saved) return null;\n\t\tsetName(saved.displayName);\n\t\tsetPictureUrl(saved.picture);\n\t\tsetEditingName(false);\n\t\tsetHasStoredName(true);\n\t\treturn saved;\n\t}\n\n\tasync function submit(event: FormEvent) {\n\t\tevent.preventDefault();\n\t\tconst text = body.trim();\n\t\tconst displayName = sanitizeDisplayName(name);\n\t\tif (!text || !displayName) return;\n\t\tconst saved = persistIdentity(displayName, pictureUrl);\n\t\ttry {\n\t\t\tawait client.create({\n\t\t\t\ttype: activeType,\n\t\t\t\tbody: text,\n\t\t\t\tdisplayName,\n\t\t\t\tpicture: saved?.picture ?? pictureUrl ?? undefined,\n\t\t\t\tguestId,\n\t\t\t\tparentId: activeType === \"comment\" ? (replyTo ?? undefined) : undefined,\n\t\t\t});\n\t\t\tsetBody(\"\");\n\t\t\tsetReplyTo(null);\n\t\t\tawait load();\n\t\t\tsetError(null);\n\t\t} catch (err) {\n\t\t\tsetError(\n\t\t\t\terr instanceof CommunityApiError ? err.message : \"Could not post\",\n\t\t\t);\n\t\t}\n\t}\n\n\tasync function handlePatch(\n\t\titemId: string,\n\t\tpatch: Parameters<(typeof client)[\"patch\"]>[1],\n\t) {\n\t\ttry {\n\t\t\tawait client.patch(itemId, patch);\n\t\t\tawait load();\n\t\t} catch (err) {\n\t\t\tsetError(err instanceof Error ? err.message : \"Could not update\");\n\t\t}\n\t}\n\n\tasync function handleUpvote(itemId: string) {\n\t\ttry {\n\t\t\tawait client.upvote(itemId, guestId);\n\t\t\tawait load();\n\t\t} catch (err) {\n\t\t\tsetError(err instanceof Error ? err.message : \"Could not upvote\");\n\t\t}\n\t}\n\n\tasync function updateSetting(patch: CommunitySettingsPatch) {\n\t\ttry {\n\t\t\tconst parsed = await client.patchSettings(patch);\n\t\t\tconst next = parsed ?? { ...settings, ...patch };\n\t\t\tsetSettings(next);\n\t\t\tonFlagsChange?.(next);\n\t\t} catch (err) {\n\t\t\tsetError(err instanceof Error ? err.message : \"Could not save\");\n\t\t}\n\t}\n\n\treturn (\n\t\t<section className={[\"livo-condo\", className].filter(Boolean).join(\" \")}>\n\t\t\t{mode === \"control\" ? (\n\t\t\t\t<div className=\"livo-condo-settings\">\n\t\t\t\t\t<h2>{labels.settings}</h2>\n\t\t\t\t\t<label>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tchecked={settings.commentsEnabled}\n\t\t\t\t\t\t\tonChange={(event) =>\n\t\t\t\t\t\t\t\tvoid updateSetting({ commentsEnabled: event.target.checked })\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t<strong>{labels.commentsEnabled}</strong>\n\t\t\t\t\t\t\t<small>{labels.commentsHelp}</small>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</label>\n\t\t\t\t\t{hasQa(settings) ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<label>\n\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\t\tchecked={settings.commentsAfterEnd}\n\t\t\t\t\t\t\t\t\tonChange={(event) =>\n\t\t\t\t\t\t\t\t\t\tvoid updateSetting({\n\t\t\t\t\t\t\t\t\t\t\tcommentsAfterEnd: event.target.checked,\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t<strong>{labels.commentsAfterEnd}</strong>\n\t\t\t\t\t\t\t\t\t<small>{labels.commentsAfterEndHelp}</small>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t<label>\n\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\t\tchecked={settings.qaEnabled}\n\t\t\t\t\t\t\t\t\tonChange={(event) =>\n\t\t\t\t\t\t\t\t\t\tvoid updateSetting({ qaEnabled: event.target.checked })\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t<strong>{labels.qaEnabled}</strong>\n\t\t\t\t\t\t\t\t\t<small>{labels.qaHelp}</small>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\t\t\t) : null}\n\n\t\t\t{lockedType ? (\n\t\t\t\t<h2 className=\"livo-condo-title\">\n\t\t\t\t\t{lockedType === \"question\" ? labels.qa : labels.comments}\n\t\t\t\t</h2>\n\t\t\t) : showQaTab(settings) ? (\n\t\t\t\t<div className=\"livo-condo-tabs\" role=\"tablist\">\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t\taria-selected={tab === \"comment\"}\n\t\t\t\t\t\tonClick={() => setTab(\"comment\")}\n\t\t\t\t\t>\n\t\t\t\t\t\t{labels.comments}\n\t\t\t\t\t</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t\taria-selected={tab === \"question\"}\n\t\t\t\t\t\tonClick={() => setTab(\"question\")}\n\t\t\t\t\t>\n\t\t\t\t\t\t{labels.qa}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t) : (\n\t\t\t\t<h2 className=\"livo-condo-title\">{labels.comments}</h2>\n\t\t\t)}\n\n\t\t\t<CommunityMessageScroller\n\t\t\t\tfollowKey={`${activeType}:${items.at(-1)?.id ?? \"empty\"}:${items.length}`}\n\t\t\t\tjumpLabel={labels.jumpToLatest}\n\t\t\t\tempty={items.length === 0}\n\t\t\t>\n\t\t\t\t{items.length === 0 ? (\n\t\t\t\t\t<p className=\"livo-condo-empty\">\n\t\t\t\t\t\t{activeType === \"question\"\n\t\t\t\t\t\t\t? labels.emptyQuestions\n\t\t\t\t\t\t\t: labels.emptyComments}\n\t\t\t\t\t</p>\n\t\t\t\t) : (\n\t\t\t\t\titems.map((item) => (\n\t\t\t\t\t\t<ItemRow\n\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\titem={item}\n\t\t\t\t\t\t\tmode={mode}\n\t\t\t\t\t\t\tlabels={labels}\n\t\t\t\t\t\t\tonReply={canPost(settings, \"comment\") ? setReplyTo : undefined}\n\t\t\t\t\t\t\tonPatch={handlePatch}\n\t\t\t\t\t\t\tonUpvote={activeType === \"question\" ? handleUpvote : undefined}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))\n\t\t\t\t)}\n\t\t\t</CommunityMessageScroller>\n\n\t\t\t{open ? (\n\t\t\t\t<form\n\t\t\t\t\tclassName=\"livo-condo-composer\"\n\t\t\t\t\tonSubmit={(event) => void submit(event)}\n\t\t\t\t>\n\t\t\t\t\t{showNameField ? (\n\t\t\t\t\t\t<label className=\"livo-condo-identity-field\">\n\t\t\t\t\t\t\t<CommunityAvatar name={name} src={pictureUrl} />\n\t\t\t\t\t\t\t<span className=\"livo-sr-only\">{labels.name}</span>\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\tvalue={name}\n\t\t\t\t\t\t\t\tonChange={(event) => setName(event.target.value)}\n\t\t\t\t\t\t\t\tplaceholder={labels.namePlaceholder}\n\t\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\t\tmaxLength={80}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{hasStoredName ? (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\tpersistIdentity(name, pictureUrl);\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{labels.saveName}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</label>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{showPostingAs ? (\n\t\t\t\t\t\t<div className=\"livo-condo-identity\">\n\t\t\t\t\t\t\t<CommunityAvatar name={name} src={pictureUrl} />\n\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t{labels.postingAs.replace(\"{name}\", sanitizeDisplayName(name))}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t{locked ? null : (\n\t\t\t\t\t\t\t\t<button type=\"button\" onClick={() => setEditingName(true)}>\n\t\t\t\t\t\t\t\t\t{labels.editName}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{replyTo ? (\n\t\t\t\t\t\t<p className=\"livo-condo-replying\">\n\t\t\t\t\t\t\t{labels.reply}\n\t\t\t\t\t\t\t<button type=\"button\" onClick={() => setReplyTo(null)}>\n\t\t\t\t\t\t\t\t×\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t) : null}\n\t\t\t\t\t<textarea\n\t\t\t\t\t\tvalue={body}\n\t\t\t\t\t\tonChange={(event) => setBody(event.target.value)}\n\t\t\t\t\t\tplaceholder={\n\t\t\t\t\t\t\tactiveType === \"question\"\n\t\t\t\t\t\t\t\t? labels.questionComposer\n\t\t\t\t\t\t\t\t: labels.composer\n\t\t\t\t\t\t}\n\t\t\t\t\t\trequired\n\t\t\t\t\t\tmaxLength={2000}\n\t\t\t\t\t\trows={3}\n\t\t\t\t\t/>\n\t\t\t\t\t<button type=\"submit\">{labels.send}</button>\n\t\t\t\t</form>\n\t\t\t) : (\n\t\t\t\t<p className=\"livo-condo-closed\" role=\"status\">\n\t\t\t\t\t{activeType === \"question\" ? labels.qaClosed : labels.closed}\n\t\t\t\t</p>\n\t\t\t)}\n\t\t\t{error ? (\n\t\t\t\t<p className=\"livo-condo-error\" role=\"alert\">\n\t\t\t\t\t{error}\n\t\t\t\t</p>\n\t\t\t) : null}\n\t\t</section>\n\t);\n}\n","\"use client\";\n\nimport { CircleHelp, MessageCircle } from \"lucide-react\";\nimport { useEffect, useRef, useState, type RefObject } from \"react\";\nimport { createCommunityClient } from \"./api\";\nimport { LivoCommunity, type LivoCommunityProps } from \"./community\";\nimport { communityFeedEnabled } from \"./gates\";\nimport { communityLabels, type CommunityLabels } from \"./labels\";\nimport type { CommunityType } from \"./types\";\n\nconst COMPACT_WIDTH_PX = 640;\nconst COMPACT_HEIGHT_PX = 420;\n\nexport type LivoCommunityOverlayProps = Omit<\n\tLivoCommunityProps,\n\t\"type\" | \"className\"\n> & {\n\tclassName?: string;\n};\n\n/** Badge only once a feed has more than one item. */\nfunction countBadgeLabel(count: number): string | null {\n\tif (count <= 1) return null;\n\treturn count > 99 ? \"99+\" : String(count);\n}\n\nfunction drawerTitle(type: CommunityType, labels: CommunityLabels): string {\n\tswitch (type) {\n\t\tcase \"comment\":\n\t\t\treturn labels.comments;\n\t\tcase \"question\":\n\t\t\treturn labels.qa;\n\t\tdefault: {\n\t\t\tconst _never: never = type;\n\t\t\treturn _never;\n\t\t}\n\t}\n}\n\nfunction useCompactOverlay(ref: RefObject<HTMLElement | null>): boolean {\n\tconst [compact, setCompact] = useState(true);\n\tuseEffect(() => {\n\t\tconst el = ref.current;\n\t\tif (!el) return;\n\t\tconst update = (width: number, height: number) => {\n\t\t\tsetCompact(width < COMPACT_WIDTH_PX || height < COMPACT_HEIGHT_PX);\n\t\t};\n\t\tupdate(el.clientWidth, el.clientHeight);\n\t\tif (typeof ResizeObserver === \"undefined\") return;\n\t\tconst observer = new ResizeObserver((entries) => {\n\t\t\tconst box = entries[0]?.contentRect;\n\t\t\tif (!box) return;\n\t\t\tupdate(box.width, box.height);\n\t\t});\n\t\tobserver.observe(el);\n\t\treturn () => observer.disconnect();\n\t}, [ref]);\n\treturn compact;\n}\n\nexport function LivoCommunityOverlay({\n\tclassName,\n\tlabels: labelsProp,\n\tflags,\n\tapiUrl,\n\ttargetKind,\n\ttargetId,\n\tmode,\n\tfetchFn,\n\theaders,\n\tpollMs = 5000,\n\t...rest\n}: LivoCommunityOverlayProps) {\n\tconst labels = { ...communityLabels, ...labelsProp };\n\tconst rootRef = useRef<HTMLDivElement>(null);\n\tconst compact = useCompactOverlay(rootRef);\n\tconst [open, setOpen] = useState<CommunityType | null>(null);\n\tconst [counts, setCounts] = useState({ comment: 0, question: 0 });\n\tconst comments = communityFeedEnabled(flags, \"comment\");\n\tconst questions = communityFeedEnabled(flags, \"question\");\n\n\tuseEffect(() => {\n\t\tif (!comments && !questions) return;\n\t\tlet cancelled = false;\n\t\tconst client = createCommunityClient({\n\t\t\tapiUrl,\n\t\t\ttargetKind,\n\t\t\ttargetId,\n\t\t\tmode,\n\t\t\tfetchFn,\n\t\t\theaders,\n\t\t});\n\t\tconst tick = async () => {\n\t\t\tconst next = { comment: 0, question: 0 };\n\t\t\ttry {\n\t\t\t\tif (comments) {\n\t\t\t\t\tnext.comment = (await client.list({ type: \"comment\" })).items.length;\n\t\t\t\t}\n\t\t\t\tif (questions) {\n\t\t\t\t\tnext.question = (\n\t\t\t\t\t\tawait client.list({ type: \"question\" })\n\t\t\t\t\t).items.length;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!cancelled) setCounts(next);\n\t\t};\n\t\tvoid tick();\n\t\tif (pollMs <= 0) {\n\t\t\treturn () => {\n\t\t\t\tcancelled = true;\n\t\t\t};\n\t\t}\n\t\tconst id = window.setInterval(() => void tick(), pollMs);\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t\twindow.clearInterval(id);\n\t\t};\n\t}, [\n\t\tapiUrl,\n\t\tcomments,\n\t\tfetchFn,\n\t\theaders,\n\t\tmode,\n\t\tpollMs,\n\t\tquestions,\n\t\ttargetId,\n\t\ttargetKind,\n\t]);\n\n\tif (!comments && !questions) return null;\n\n\tfunction toggle(type: CommunityType) {\n\t\tsetOpen((current) => (current === type ? null : type));\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tref={rootRef}\n\t\t\tclassName={[\"livo-condo-overlay\", className].filter(Boolean).join(\" \")}\n\t\t\tdata-compact={compact ? \"true\" : \"false\"}\n\t\t\tdata-open={open ?? \"off\"}\n\t\t>\n\t\t\t{open ? (\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"livo-condo-drawer\"\n\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\taria-label={drawerTitle(open, labels)}\n\t\t\t\t>\n\t\t\t\t\t<header className=\"livo-condo-drawer__header\">\n\t\t\t\t\t\t<h2>{drawerTitle(open, labels)}</h2>\n\t\t\t\t\t\t<button type=\"button\" onClick={() => setOpen(null)}>\n\t\t\t\t\t\t\t{labels.hide}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</header>\n\t\t\t\t\t<LivoCommunity\n\t\t\t\t\t\t{...rest}\n\t\t\t\t\t\tapiUrl={apiUrl}\n\t\t\t\t\t\ttargetKind={targetKind}\n\t\t\t\t\t\ttargetId={targetId}\n\t\t\t\t\t\tmode={mode}\n\t\t\t\t\t\tfetchFn={fetchFn}\n\t\t\t\t\t\theaders={headers}\n\t\t\t\t\t\tpollMs={pollMs}\n\t\t\t\t\t\tflags={flags}\n\t\t\t\t\t\tlabels={labelsProp}\n\t\t\t\t\t\ttype={open}\n\t\t\t\t\t\tclassName=\"livo-condo-drawer__body\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t\t<div className=\"livo-condo-overlay__toggles\">\n\t\t\t\t{comments ? (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\taria-label={labels.comments}\n\t\t\t\t\t\taria-pressed={open === \"comment\"}\n\t\t\t\t\t\ttitle={labels.comments}\n\t\t\t\t\t\tonClick={() => toggle(\"comment\")}\n\t\t\t\t\t>\n\t\t\t\t\t\t<MessageCircle aria-hidden=\"true\" />\n\t\t\t\t\t\t{countBadgeLabel(counts.comment) ? (\n\t\t\t\t\t\t\t<span className=\"livo-condo-count\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t{countBadgeLabel(counts.comment)}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</button>\n\t\t\t\t) : null}\n\t\t\t\t{questions ? (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\taria-label={labels.qa}\n\t\t\t\t\t\taria-pressed={open === \"question\"}\n\t\t\t\t\t\ttitle={labels.qa}\n\t\t\t\t\t\tonClick={() => toggle(\"question\")}\n\t\t\t\t\t>\n\t\t\t\t\t\t<CircleHelp aria-hidden=\"true\" />\n\t\t\t\t\t\t{countBadgeLabel(counts.question) ? (\n\t\t\t\t\t\t\t<span className=\"livo-condo-count\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t{countBadgeLabel(counts.question)}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</button>\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import {\n\tparseCommunityFlags,\n\ttype StreamCommunityFlags,\n\ttype VodCommunityFlags,\n} from \"./condo/types\";\n\nexport type PublicStream = {\n\tid: string;\n\ttitle: string;\n\tstatus: string;\n\tplaybackUrl: string | null;\n\tposterUrl?: string | null;\n\tcaptionsUrl: string | null;\n\tviewers: number;\n\tstartsAt: number | null;\n\tdurationSeconds: number | null;\n\torganization: { name: string | null; image: string | null };\n\tcurtain: PublicCurtain | null;\n\tcommunity: StreamCommunityFlags;\n};\n\nexport type PublicCurtain = {\n\tkind: \"image\" | \"video\" | \"shader\";\n\turl: string;\n\thideBranding: boolean;\n\thideStatus: boolean;\n\tconfig?: Record<string, unknown>;\n\tenvBasePath?: string;\n};\n\nexport type PublicVod = {\n\tid: string;\n\ttitle: string;\n\tstatus: string;\n\tplaybackUrl: string | null;\n\tposterUrl: string | null;\n\treleaseAt: number | null;\n\tcurtain: PublicCurtain | null;\n\torganization: { name: string | null; image: string | null };\n\tcaptionsEnabled: boolean;\n\tcommunity: VodCommunityFlags;\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function defaultApiUrl(): string {\n\treturn \"https://media-svc.livo.tv\";\n}\n\nexport function parsePublicStream(value: unknown): PublicStream | null {\n\tif (!isRecord(value) || typeof value.id !== \"string\") return null;\n\tif (typeof value.title !== \"string\" || typeof value.status !== \"string\") {\n\t\treturn null;\n\t}\n\tconst organization = isRecord(value.organization)\n\t\t? {\n\t\t\t\tname:\n\t\t\t\t\ttypeof value.organization.name === \"string\"\n\t\t\t\t\t\t? value.organization.name\n\t\t\t\t\t\t: null,\n\t\t\t\timage:\n\t\t\t\t\ttypeof value.organization.image === \"string\"\n\t\t\t\t\t\t? value.organization.image\n\t\t\t\t\t\t: null,\n\t\t\t}\n\t\t: { name: null, image: null };\n\treturn {\n\t\tid: value.id,\n\t\ttitle: value.title,\n\t\tstatus: value.status,\n\t\tplaybackUrl:\n\t\t\ttypeof value.playbackUrl === \"string\" ? value.playbackUrl : null,\n\t\tposterUrl: typeof value.posterUrl === \"string\" ? value.posterUrl : null,\n\t\tcaptionsUrl:\n\t\t\ttypeof value.captionsUrl === \"string\" ? value.captionsUrl : null,\n\t\tviewers: typeof value.viewers === \"number\" ? value.viewers : 0,\n\t\tstartsAt: typeof value.startsAt === \"number\" ? value.startsAt : null,\n\t\tdurationSeconds:\n\t\t\ttypeof value.durationSeconds === \"number\" ? value.durationSeconds : null,\n\t\torganization,\n\t\tcurtain: parsePublicCurtain(value.curtain),\n\t\tcommunity:\n\t\t\tparseCommunityFlags(value.community, \"stream\") ??\n\t\t\t({\n\t\t\t\tcommentsEnabled: true,\n\t\t\t\tcommentsAfterEnd: false,\n\t\t\t\tcommentsOpen: false,\n\t\t\t\tqaEnabled: true,\n\t\t\t\tqaOpen: false,\n\t\t\t} satisfies StreamCommunityFlags),\n\t};\n}\n\nfunction parsePublicCurtain(value: unknown): PublicCurtain | null {\n\tif (!isRecord(value) || typeof value.url !== \"string\") return null;\n\tconst kind =\n\t\tvalue.kind === \"video\"\n\t\t\t? \"video\"\n\t\t\t: value.kind === \"shader\"\n\t\t\t\t? \"shader\"\n\t\t\t\t: value.kind === \"image\"\n\t\t\t\t\t? \"image\"\n\t\t\t\t\t: null;\n\tif (!kind) return null;\n\treturn {\n\t\tkind,\n\t\turl: value.url,\n\t\thideBranding: value.hideBranding === true,\n\t\thideStatus: value.hideStatus === true,\n\t\tconfig: isRecord(value.config) ? value.config : undefined,\n\t\tenvBasePath:\n\t\t\ttypeof value.envBasePath === \"string\" ? value.envBasePath : undefined,\n\t};\n}\n\nexport function parsePublicVod(value: unknown): PublicVod | null {\n\tif (!isRecord(value) || typeof value.id !== \"string\") return null;\n\tif (typeof value.title !== \"string\" || typeof value.status !== \"string\") {\n\t\treturn null;\n\t}\n\tconst organization = isRecord(value.organization)\n\t\t? {\n\t\t\t\tname:\n\t\t\t\t\ttypeof value.organization.name === \"string\"\n\t\t\t\t\t\t? value.organization.name\n\t\t\t\t\t\t: null,\n\t\t\t\timage:\n\t\t\t\t\ttypeof value.organization.image === \"string\"\n\t\t\t\t\t\t? value.organization.image\n\t\t\t\t\t\t: null,\n\t\t\t}\n\t\t: { name: null, image: null };\n\treturn {\n\t\tid: value.id,\n\t\ttitle: value.title,\n\t\tstatus: value.status,\n\t\tplaybackUrl:\n\t\t\ttypeof value.playbackUrl === \"string\" ? value.playbackUrl : null,\n\t\tposterUrl: typeof value.posterUrl === \"string\" ? value.posterUrl : null,\n\t\treleaseAt: typeof value.releaseAt === \"number\" ? value.releaseAt : null,\n\t\tcurtain: parsePublicCurtain(value.curtain),\n\t\torganization,\n\t\tcaptionsEnabled: value.captionsEnabled === true,\n\t\tcommunity:\n\t\t\tparseCommunityFlags(value.community, \"vod\") ??\n\t\t\t({\n\t\t\t\tcommentsEnabled: true,\n\t\t\t\tcommentsOpen: true,\n\t\t\t} satisfies VodCommunityFlags),\n\t};\n}\n\n/** Network / abort failure — not a 404. Callers must not map this to not_found. */\nexport const PUBLIC_FETCH_NETWORK = Symbol(\"public-fetch-network\");\n\nexport type PublicFetchResult<T> = T | null | typeof PUBLIC_FETCH_NETWORK;\n\nexport function isPublicFetchNetworkFailure(\n\tvalue: unknown,\n): value is typeof PUBLIC_FETCH_NETWORK {\n\treturn value === PUBLIC_FETCH_NETWORK;\n}\n\nfunction isFetchNetworkFailure(error: unknown): boolean {\n\tif (error instanceof DOMException && error.name === \"AbortError\") return true;\n\tif (error instanceof Error && error.name === \"AbortError\") return true;\n\treturn error instanceof TypeError;\n}\n\nasync function fetchPublicJson(\n\turl: string,\n\tfetchFn: typeof fetch,\n\tsignal?: AbortSignal,\n): Promise<unknown | null | typeof PUBLIC_FETCH_NETWORK> {\n\ttry {\n\t\tconst res = await fetchFn(url, { cache: \"no-store\", signal });\n\t\tif (!res.ok) return null;\n\t\treturn await res.json();\n\t} catch (error) {\n\t\tif (isFetchNetworkFailure(error)) return PUBLIC_FETCH_NETWORK;\n\t\tthrow error;\n\t}\n}\n\nexport async function fetchPublicStream(\n\tapiUrl: string,\n\tstreamId: string,\n\tfetchFn: typeof fetch = fetch,\n\tsignal?: AbortSignal,\n): Promise<PublicFetchResult<PublicStream>> {\n\tconst body = await fetchPublicJson(\n\t\t`${apiUrl.replace(/\\/$/, \"\")}/public/streams/${encodeURIComponent(streamId)}`,\n\t\tfetchFn,\n\t\tsignal,\n\t);\n\tif (body === PUBLIC_FETCH_NETWORK || body === null) return body;\n\treturn parsePublicStream(body);\n}\n\nexport async function fetchPublicVod(\n\tapiUrl: string,\n\tvodId: string,\n\tfetchFn: typeof fetch = fetch,\n\tsignal?: AbortSignal,\n): Promise<PublicFetchResult<PublicVod>> {\n\tconst body = await fetchPublicJson(\n\t\t`${apiUrl.replace(/\\/$/, \"\")}/public/vods/${encodeURIComponent(vodId)}`,\n\t\tfetchFn,\n\t\tsignal,\n\t);\n\tif (body === PUBLIC_FETCH_NETWORK || body === null) return body;\n\treturn parsePublicVod(body);\n}\n\nexport async function heartbeatPresence(\n\tapiUrl: string,\n\tstreamId: string,\n\tsessionId: string,\n\tfetchFn: typeof fetch = fetch,\n): Promise<void> {\n\tawait fetchFn(\n\t\t`${apiUrl.replace(/\\/$/, \"\")}/public/streams/${encodeURIComponent(streamId)}/presence`,\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"content-type\": \"application/json\" },\n\t\t\tbody: JSON.stringify({ sessionId }),\n\t\t},\n\t).catch(() => undefined);\n}\n","export type EmbedTheme = {\n\tprimary?: string;\n\taccent?: string;\n\tbackground?: string;\n\tforeground?: string;\n\tradius?: string;\n\tfontFamily?: string;\n\tmode?: \"light\" | \"dark\";\n};\n\nconst HEX =\n\t/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;\nconst COLOR_FN = /^(?:oklch|rgb|rgba|hsl|hsla)\\([0-9a-zA-Z.\\s%,./-]+\\)$/;\nconst RADIUS = /^\\d+(?:\\.\\d+)?(?:px|rem|em)$/;\nconst FONT = /^[a-zA-Z0-9\\s,\"'-]{1,120}$/;\n\nfunction sanitizeColor(value: unknown): string | undefined {\n\tif (typeof value !== \"string\") return undefined;\n\tconst trimmed = value.trim();\n\tif (HEX.test(trimmed) || COLOR_FN.test(trimmed)) return trimmed;\n\treturn undefined;\n}\n\nexport function sanitizeEmbedTheme(value: unknown): EmbedTheme | null {\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\treturn null;\n\t}\n\tconst row = value as Record<string, unknown>;\n\tconst theme: EmbedTheme = {};\n\tconst primary = sanitizeColor(row.primary);\n\tconst accent = sanitizeColor(row.accent);\n\tconst background = sanitizeColor(row.background);\n\tconst foreground = sanitizeColor(row.foreground);\n\tif (typeof row.radius === \"string\" && RADIUS.test(row.radius.trim())) {\n\t\ttheme.radius = row.radius.trim();\n\t}\n\tif (typeof row.fontFamily === \"string\" && FONT.test(row.fontFamily.trim())) {\n\t\ttheme.fontFamily = row.fontFamily.trim();\n\t}\n\tif (primary) theme.primary = primary;\n\tif (accent) theme.accent = accent;\n\tif (background) theme.background = background;\n\tif (foreground) theme.foreground = foreground;\n\tif (row.mode === \"light\" || row.mode === \"dark\") theme.mode = row.mode;\n\treturn Object.keys(theme).length > 0 ? theme : null;\n}\n\nexport function encodeEmbedTheme(theme: EmbedTheme): string {\n\tconst json = JSON.stringify(theme);\n\tconst bytes = new TextEncoder().encode(json);\n\tlet binary = \"\";\n\tfor (const byte of bytes) binary += String.fromCharCode(byte);\n\treturn btoa(binary)\n\t\t.replace(/\\+/g, \"-\")\n\t\t.replace(/\\//g, \"_\")\n\t\t.replace(/=+$/, \"\");\n}\n\nexport function embedThemeCssVars(theme: EmbedTheme): Record<string, string> {\n\tconst vars: Record<string, string> = {};\n\tconst accent = theme.accent ?? theme.primary;\n\tif (theme.primary) {\n\t\tvars[\"--livo-primary\"] = theme.primary;\n\t\tvars[\"--primary\"] = theme.primary;\n\t} else if (accent) {\n\t\tvars[\"--livo-primary\"] = accent;\n\t\tvars[\"--primary\"] = accent;\n\t}\n\tif (accent) {\n\t\tvars[\"--livo-accent\"] = accent;\n\t\tvars[\"--accent\"] = accent;\n\t}\n\tif (theme.background) {\n\t\tvars[\"--livo-background\"] = theme.background;\n\t\tvars[\"--background\"] = theme.background;\n\t}\n\tif (theme.foreground) {\n\t\tvars[\"--livo-foreground\"] = theme.foreground;\n\t\tvars[\"--foreground\"] = theme.foreground;\n\t}\n\tif (theme.radius) {\n\t\tvars[\"--livo-radius\"] = theme.radius;\n\t\tvars[\"--radius\"] = theme.radius;\n\t}\n\tif (theme.fontFamily) vars[\"--font-sans\"] = theme.fontFamily;\n\treturn vars;\n}\n\nexport function decodeEmbedTheme(\n\traw: string | null | undefined,\n): EmbedTheme | null {\n\tif (!raw) return null;\n\ttry {\n\t\tconst padded = raw.replace(/-/g, \"+\").replace(/_/g, \"/\");\n\t\tconst pad =\n\t\t\tpadded.length % 4 === 0 ? \"\" : \"=\".repeat(4 - (padded.length % 4));\n\t\tconst binary = atob(padded + pad);\n\t\tconst bytes = Uint8Array.from(binary, (char) => char.charCodeAt(0));\n\t\treturn sanitizeEmbedTheme(JSON.parse(new TextDecoder().decode(bytes)));\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport function resolveEmbedThemeInput(\n\tvalue: EmbedTheme | string | null | undefined,\n): EmbedTheme | null {\n\tif (typeof value === \"string\") return decodeEmbedTheme(value);\n\treturn sanitizeEmbedTheme(value ?? null);\n}\n\nexport function applyEmbedTheme(\n\troot: HTMLElement | null,\n\ttheme: EmbedTheme | null,\n): void {\n\tif (!root || !theme) return;\n\tif (theme.mode === \"dark\") root.classList.add(\"dark\");\n\tif (theme.mode === \"light\") root.classList.remove(\"dark\");\n\tfor (const [key, value] of Object.entries(embedThemeCssVars(theme))) {\n\t\troot.style.setProperty(key, value);\n\t}\n\tif (theme.fontFamily) root.style.fontFamily = theme.fontFamily;\n}\n","import { CurtainStage, type ShaderCurtainConfig } from \"@livo-tv/blocks/video\";\nimport type { PublicCurtain } from \"./public-api\";\nimport type { WaitingLabels } from \"./waiting-status\";\n\nexport type WaitingRoomLabels = WaitingLabels;\n\nexport function LivoWaitingRoom({\n\ttitle,\n\torganization,\n\tcurtain,\n\tprimaryStatus,\n\thideBranding = false,\n\thideStatus = false,\n\tlabels,\n}: {\n\ttitle: string;\n\torganization: { name: string | null; image: string | null };\n\tcurtain: PublicCurtain | null;\n\tprimaryStatus: string;\n\thideBranding?: boolean;\n\thideStatus?: boolean;\n\tlabels?: WaitingRoomLabels;\n}) {\n\tconst waiting = labels?.waiting ?? \"Waiting\";\n\tconst statusText = [title, primaryStatus || waiting]\n\t\t.filter(Boolean)\n\t\t.join(\". \");\n\n\treturn (\n\t\t<div className=\"livo-waiting-room\" data-livo-player=\"waiting\">\n\t\t\t{curtain ? (\n\t\t\t\t<CurtainStage\n\t\t\t\t\tkind={curtain.kind}\n\t\t\t\t\turl={curtain.url}\n\t\t\t\t\tconfig={\n\t\t\t\t\t\tcurtain.kind === \"shader\"\n\t\t\t\t\t\t\t? (curtain.config as ShaderCurtainConfig | undefined)\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t}\n\t\t\t\t\tenvBasePath={\n\t\t\t\t\t\tcurtain.kind === \"shader\" ? curtain.envBasePath : undefined\n\t\t\t\t\t}\n\t\t\t\t\talt=\"\"\n\t\t\t\t\tallowSound\n\t\t\t\t\tclassName=\"livo-waiting-room__stage\"\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<div className=\"livo-waiting-room__fallback\" />\n\t\t\t)}\n\t\t\t<p className=\"livo-sr-only\" role=\"status\">\n\t\t\t\t{statusText}\n\t\t\t</p>\n\t\t\t{hideBranding && hideStatus ? null : (\n\t\t\t\t<div className=\"livo-waiting-room__overlay\">\n\t\t\t\t\t{hideBranding ? null : (\n\t\t\t\t\t\t<div className=\"livo-waiting-room__brand\">\n\t\t\t\t\t\t\t{organization.image ? (\n\t\t\t\t\t\t\t\t<img src={organization.image} alt=\"\" />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<span aria-hidden>\n\t\t\t\t\t\t\t\t\t{(organization.name ?? title).slice(0, 1)}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t<h1>{title}</h1>\n\t\t\t\t\t\t\t\t{organization.name ? <p>{organization.name}</p> : null}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t{hideStatus ? null : <p>{primaryStatus || waiting}</p>}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","export type WaitingLabels = {\n\twaiting?: string;\n\tstartingSoon?: string;\n\tvodWaiting?: string;\n\tavailableSoon?: string;\n\tloading?: string;\n\tstartsIn?: (time: string) => string;\n\tavailableIn?: (time: string) => string;\n};\n\nexport function formatCountdown(ms: number): string {\n\tconst totalSeconds = Math.max(0, Math.ceil(ms / 1000));\n\tconst hours = Math.floor(totalSeconds / 3600);\n\tconst minutes = Math.floor((totalSeconds % 3600) / 60);\n\tconst seconds = totalSeconds % 60;\n\tif (hours > 0) {\n\t\treturn `${hours}h ${String(minutes).padStart(2, \"0\")}m`;\n\t}\n\treturn `${minutes}:${String(seconds).padStart(2, \"0\")}`;\n}\n\nexport function resolveWaitingStatus({\n\tstreamStatus,\n\tstartsAt,\n\tvod,\n\treleaseAt,\n\tlabels,\n\tnow = Date.now(),\n}: {\n\tstreamStatus?: string | null;\n\tstartsAt?: number | null;\n\tvod?: boolean;\n\treleaseAt?: number | null;\n\tlabels?: WaitingLabels;\n\tnow?: number;\n}): string {\n\tconst waiting = labels?.waiting ?? \"Waiting\";\n\tconst startingSoon = labels?.startingSoon ?? \"Starting soon\";\n\tconst vodWaiting =\n\t\tlabels?.vodWaiting ?? \"Waiting for this video to become available.\";\n\tconst availableSoon = labels?.availableSoon ?? \"Available soon\";\n\tconst loading = labels?.loading ?? \"Loading playback\";\n\tconst startsIn = labels?.startsIn ?? ((time) => `Starts in ${time}`);\n\tconst availableIn = labels?.availableIn ?? ((time) => `Available in ${time}`);\n\n\tif (vod) {\n\t\tif (releaseAt != null) {\n\t\t\tconst remainingMs = releaseAt - now;\n\t\t\tif (remainingMs > 0) return availableIn(formatCountdown(remainingMs));\n\t\t\treturn availableSoon;\n\t\t}\n\t\treturn vodWaiting;\n\t}\n\n\tif (streamStatus === \"ended\") return loading;\n\n\tif (startsAt != null) {\n\t\tconst remainingMs = startsAt - now;\n\t\tif (remainingMs > 0) return startsIn(formatCountdown(remainingMs));\n\t\treturn startingSoon;\n\t}\n\n\treturn waiting;\n}\n","import {\n\tVideoPlayer,\n\tcreatePlaybackBeaconClient,\n\ttype PlaybackBeaconClient,\n\ttype VideoPlayerLabels,\n\ttype VideoPlayerProps,\n} from \"@livo-tv/blocks/video\";\nimport {\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n\ttype ComponentType,\n\ttype CSSProperties,\n\ttype ReactNode,\n} from \"react\";\nimport { LivoCommunityOverlay } from \"./condo/overlay\";\nimport type { CommunityLabels } from \"./condo/labels\";\nimport { hasQa } from \"./condo/types\";\nimport {\n\tdefaultApiUrl,\n\tfetchPublicStream,\n\tfetchPublicVod,\n\theartbeatPresence,\n\tisPublicFetchNetworkFailure,\n\ttype PublicStream,\n\ttype PublicVod,\n} from \"./public-api\";\nimport {\n\tembedThemeCssVars,\n\tsanitizeEmbedTheme,\n\ttype EmbedTheme,\n} from \"./theme\";\nimport { LivoWaitingRoom } from \"./waiting-room\";\nimport { resolveWaitingStatus, type WaitingLabels } from \"./waiting-status\";\n\nconst Player = VideoPlayer as ComponentType<\n\tVideoPlayerProps & { captionsEnabled?: boolean }\n>;\n\nexport type PlaybackState =\n\t\"loading\" | \"waiting\" | \"playing\" | \"paused\" | \"ended\" | \"error\";\n\nexport interface LivoPlayerProps {\n\tstreamId?: string;\n\tvodId?: string;\n\tapiUrl?: string;\n\ttheme?: EmbedTheme;\n\tlocale?: string;\n\tautoplay?: boolean;\n\tmuted?: boolean;\n\tlabels?: VideoPlayerLabels;\n\twaitingLabels?: WaitingLabels;\n\tclassName?: string;\n\tonStatusChange?: (status: string) => void;\n\tonPlaybackState?: (state: PlaybackState) => void;\n\tonProgress?: (payload: {\n\t\tcurrentTime: number;\n\t\tduration: number | null;\n\t}) => void;\n\tonEnded?: () => void;\n\tonError?: (error: { code: string }) => void;\n\tdisplayName?: string;\n\tpicture?: string | null;\n\t/** In-player comments/Q&A drawers (hidden until the top-right buttons). Default `false` — mount `<LivoCommunity>` yourself for a custom layout; in-player buttons stay hidden. */\n\tshowCommunity?: boolean;\n\tcommunityLabels?: Partial<CommunityLabels>;\n}\n\nfunction sdkSessionId(): string {\n\tif (typeof sessionStorage === \"undefined\") return crypto.randomUUID();\n\tconst key = \"livo-player-session\";\n\tconst existing = sessionStorage.getItem(key);\n\tif (existing) return existing;\n\tconst next = crypto.randomUUID();\n\tsessionStorage.setItem(key, next);\n\treturn next;\n}\n\nfunction createSdkBeacon(\n\tapiUrl: string,\n\tgetContext: () => Record<string, unknown>,\n): PlaybackBeaconClient | null {\n\tconst endpoint = `${apiUrl.replace(/\\/$/, \"\")}/public/playback/beacon`;\n\tif (!endpoint.startsWith(\"http\")) return null;\n\treturn createPlaybackBeaconClient({\n\t\tendpoint,\n\t\tsessionId: sdkSessionId(),\n\t\tsurface: \"sdk\",\n\t\tgetContext,\n\t});\n}\n\nexport function LivoPlayer({\n\tstreamId,\n\tvodId,\n\tapiUrl = defaultApiUrl(),\n\ttheme,\n\tlocale,\n\tautoplay = false,\n\tmuted,\n\tlabels,\n\twaitingLabels,\n\tclassName,\n\tonStatusChange,\n\tonPlaybackState,\n\tonProgress,\n\tonEnded,\n\tonError,\n\tdisplayName,\n\tpicture,\n\tshowCommunity = false,\n\tcommunityLabels,\n}: LivoPlayerProps) {\n\tconst [stream, setStream] = useState<PublicStream | null>(null);\n\tconst [vod, setVod] = useState<PublicVod | null>(null);\n\tconst [resolved, setResolved] = useState(false);\n\tconst [identity, setIdentity] = useState({ streamId, vodId });\n\tif (identity.streamId !== streamId || identity.vodId !== vodId) {\n\t\tsetIdentity({ streamId, vodId });\n\t\tsetStream(null);\n\t\tsetVod(null);\n\t\tsetResolved(false);\n\t}\n\tconst safeTheme = sanitizeEmbedTheme(theme ?? {});\n\tconst contextRef = useRef({ streamId, vodId });\n\tcontextRef.current = { streamId, vodId };\n\tconst [beacon, setBeacon] = useState<PlaybackBeaconClient | null>(null);\n\n\tuseEffect(() => {\n\t\tconst client = createSdkBeacon(apiUrl, () => {\n\t\t\tconst ctx = contextRef.current;\n\t\t\treturn {\n\t\t\t\t...(ctx.streamId ? { streamId: ctx.streamId } : {}),\n\t\t\t\t...(ctx.vodId ? { vodId: ctx.vodId } : {}),\n\t\t\t};\n\t\t});\n\t\tsetBeacon(client);\n\t\treturn () => client?.destroy();\n\t}, [apiUrl]);\n\n\tuseEffect(() => {\n\t\tlet cancelled = false;\n\t\tconst controller = new AbortController();\n\t\tasync function poll() {\n\t\t\ttry {\n\t\t\t\tif (streamId) {\n\t\t\t\t\tconst next = await fetchPublicStream(\n\t\t\t\t\t\tapiUrl,\n\t\t\t\t\t\tstreamId,\n\t\t\t\t\t\tfetch,\n\t\t\t\t\t\tcontroller.signal,\n\t\t\t\t\t);\n\t\t\t\t\tif (cancelled || isPublicFetchNetworkFailure(next)) return;\n\t\t\t\t\tif (!next) {\n\t\t\t\t\t\tonError?.({ code: \"not_found\" });\n\t\t\t\t\t\tonPlaybackState?.(\"error\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tsetStream(next);\n\t\t\t\t\tsetResolved(true);\n\t\t\t\t\tonStatusChange?.(next.status);\n\t\t\t\t\tif (next.status === \"ended\") onEnded?.();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (vodId) {\n\t\t\t\t\tconst next = await fetchPublicVod(\n\t\t\t\t\t\tapiUrl,\n\t\t\t\t\t\tvodId,\n\t\t\t\t\t\tfetch,\n\t\t\t\t\t\tcontroller.signal,\n\t\t\t\t\t);\n\t\t\t\t\tif (cancelled || isPublicFetchNetworkFailure(next)) return;\n\t\t\t\t\tif (!next) {\n\t\t\t\t\t\tonError?.({ code: \"not_found\" });\n\t\t\t\t\t\tonPlaybackState?.(\"error\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tsetVod(next);\n\t\t\t\t\tsetResolved(true);\n\t\t\t\t\tonStatusChange?.(next.status);\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Transient parse / unexpected throw: retry on the next interval.\n\t\t\t}\n\t\t}\n\t\tvoid poll();\n\t\tconst timer = window.setInterval(() => void poll(), 5000);\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t\tcontroller.abort();\n\t\t\twindow.clearInterval(timer);\n\t\t};\n\t}, [\n\t\tapiUrl,\n\t\tonEnded,\n\t\tonError,\n\t\tonPlaybackState,\n\t\tonStatusChange,\n\t\tstreamId,\n\t\tvodId,\n\t]);\n\n\tuseEffect(() => {\n\t\tif (!streamId) return;\n\t\tconst sessionId = crypto.randomUUID();\n\t\tconst beat = () => {\n\t\t\tvoid heartbeatPresence(apiUrl, streamId, sessionId);\n\t\t};\n\t\tbeat();\n\t\tconst timer = window.setInterval(beat, 15_000);\n\t\treturn () => window.clearInterval(timer);\n\t}, [apiUrl, streamId]);\n\n\tuseEffect(() => {\n\t\tconst timer = window.setInterval(() => {\n\t\t\tconst media = document.querySelector(\"video\");\n\t\t\tif (!media) return;\n\t\t\tonProgress?.({\n\t\t\t\tcurrentTime: media.currentTime,\n\t\t\t\tduration: Number.isFinite(media.duration) ? media.duration : null,\n\t\t\t});\n\t\t}, 5000);\n\t\treturn () => window.clearInterval(timer);\n\t}, [onProgress]);\n\n\tconst playbackUrl = stream?.playbackUrl ?? vod?.playbackUrl;\n\tconst style = useMemo(\n\t\t() =>\n\t\t\tsafeTheme ? (embedThemeCssVars(safeTheme) as CSSProperties) : undefined,\n\t\t[safeTheme],\n\t);\n\n\tuseEffect(() => {\n\t\tif (!playbackUrl) {\n\t\t\tonPlaybackState?.(\n\t\t\t\tstream?.status === \"ended\" ? \"ended\" : resolved ? \"waiting\" : \"loading\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tonPlaybackState?.(\"playing\");\n\t}, [onPlaybackState, playbackUrl, resolved, stream?.status]);\n\n\tconst flags = stream?.community ?? vod?.community;\n\tconst communityTargetId = streamId ?? vodId;\n\tconst communityKind = streamId ? \"stream\" : \"vod\";\n\tconst communityEnabled =\n\t\tshowCommunity &&\n\t\tflags != null &&\n\t\t(flags.commentsEnabled || (hasQa(flags) && flags.qaEnabled));\n\tconst rootClass = [\"livo-sdk\", className].filter(Boolean).join(\" \");\n\n\tconst communityOverlay =\n\t\tcommunityEnabled && flags && communityTargetId ? (\n\t\t\t<LivoCommunityOverlay\n\t\t\t\tapiUrl={apiUrl}\n\t\t\t\ttargetKind={communityKind}\n\t\t\t\ttargetId={communityTargetId}\n\t\t\t\tflags={flags}\n\t\t\t\tdisplayName={displayName}\n\t\t\t\tpicture={picture}\n\t\t\t\tlabels={communityLabels}\n\t\t\t/>\n\t\t) : null;\n\n\tfunction wrapStage(\n\t\tstatus: \"loading\" | \"waiting\" | \"playing\",\n\t\tstage: ReactNode,\n\t) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={rootClass}\n\t\t\t\tstyle={style}\n\t\t\t\tdata-livo-player={status}\n\t\t\t\tdata-locale={locale}\n\t\t\t\tdata-community={communityEnabled ? \"on\" : \"off\"}\n\t\t\t>\n\t\t\t\t<div className=\"livo-sdk__stage\">\n\t\t\t\t\t{stage}\n\t\t\t\t\t{communityOverlay}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (!playbackUrl) {\n\t\tif (!resolved) {\n\t\t\treturn wrapStage(\n\t\t\t\t\"loading\",\n\t\t\t\t<div className=\"livo-waiting-room\" data-livo-player=\"loading\">\n\t\t\t\t\t<div className=\"livo-waiting-room__fallback\" />\n\t\t\t\t</div>,\n\t\t\t);\n\t\t}\n\t\tconst curtain = stream?.curtain ?? vod?.curtain ?? null;\n\t\tconst primaryStatus = resolveWaitingStatus({\n\t\t\tstreamStatus: stream?.status,\n\t\t\tstartsAt: stream?.startsAt,\n\t\t\tvod: Boolean(vod),\n\t\t\treleaseAt: vod?.releaseAt,\n\t\t\tlabels: waitingLabels,\n\t\t});\n\t\treturn wrapStage(\n\t\t\t\"waiting\",\n\t\t\t<LivoWaitingRoom\n\t\t\t\ttitle={stream?.title ?? vod?.title ?? \"Livo\"}\n\t\t\t\torganization={\n\t\t\t\t\tstream?.organization ??\n\t\t\t\t\tvod?.organization ?? { name: null, image: null }\n\t\t\t\t}\n\t\t\t\tcurtain={curtain}\n\t\t\t\tprimaryStatus={primaryStatus}\n\t\t\t\thideBranding={curtain?.hideBranding ?? false}\n\t\t\t\thideStatus={curtain?.hideStatus ?? false}\n\t\t\t\tlabels={waitingLabels}\n\t\t\t/>,\n\t\t);\n\t}\n\n\treturn wrapStage(\n\t\t\"playing\",\n\t\t<Player\n\t\t\tsrc={playbackUrl}\n\t\t\tmode={vod || stream?.status === \"ended\" ? \"vod\" : \"live\"}\n\t\t\tautoPlay={autoplay}\n\t\t\tmuted={muted ?? autoplay}\n\t\t\tfit=\"contain\"\n\t\t\tlabels={labels}\n\t\t\tcaptionsEnabled={\n\t\t\t\tstream ? Boolean(stream.captionsUrl) : Boolean(vod?.captionsEnabled)\n\t\t\t}\n\t\t\tliveCaptionsBaseUrl={\n\t\t\t\tstream?.status === \"public\"\n\t\t\t\t\t? (stream.captionsUrl ?? undefined)\n\t\t\t\t\t: undefined\n\t\t\t}\n\t\t\tonFirstPlay={() => beacon?.track({ type: \"view\" })}\n\t\t\tonPlayingChange={(playing) => {\n\t\t\t\tonPlaybackState?.(playing ? \"playing\" : \"paused\");\n\t\t\t}}\n\t\t\tonPlaybackProgress={(currentTime, duration) => {\n\t\t\t\tbeacon?.track({ type: \"progress\", currentTime, duration });\n\t\t\t\tonProgress?.({\n\t\t\t\t\tcurrentTime,\n\t\t\t\t\tduration: Number.isFinite(duration) ? duration : null,\n\t\t\t\t});\n\t\t\t}}\n\t\t\tonRebuffer={(seconds) => {\n\t\t\t\tbeacon?.track({ type: \"rebuffer\", rebufferSeconds: seconds });\n\t\t\t}}\n\t\t\tonQualityChange={(quality) => {\n\t\t\t\tbeacon?.track({ type: \"quality_change\", quality });\n\t\t\t}}\n\t\t\tonError={(error) => {\n\t\t\t\tbeacon?.track({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\terrorCode:\n\t\t\t\t\t\terror && typeof error === \"object\" && \"kind\" in error\n\t\t\t\t\t\t\t? String(error.kind)\n\t\t\t\t\t\t\t: \"playback\",\n\t\t\t\t});\n\t\t\t\tonError?.({ code: \"playback\" });\n\t\t\t\tonPlaybackState?.(\"error\");\n\t\t\t}}\n\t\t/>,\n\t);\n}\n","import { encodeEmbedTheme, type EmbedTheme } from \"./theme\";\n\nexport type UrlOrigins = {\n\tplayerOrigin?: string;\n\tappOrigin?: string;\n};\n\nexport type PlayerUrlOptions = UrlOrigins & {\n\ttheme?: EmbedTheme;\n\tlocale?: string;\n\tautoplay?: boolean;\n\tname?: string;\n\tavatar?: string;\n\t/** Hosted iframe hides comments/Q&A by default. Pass `true` to set `community=1` (in-player drawers). */\n\tcommunity?: boolean;\n};\n\nconst COMMUNITY_HIDDEN_VALUES = new Set([\"0\", \"false\", \"off\", \"hidden\", \"no\"]);\nconst COMMUNITY_SHOWN_VALUES = new Set([\"1\", \"true\", \"on\", \"show\"]);\n\n/** Hosted iframe hides comments/Q&A unless `community=1` (or `showCommunity=1`). */\nexport function embedShowsCommunity(\n\tsearch: string | Pick<URLSearchParams, \"get\">,\n): boolean {\n\tconst params =\n\t\ttypeof search === \"string\" ? new URLSearchParams(search) : search;\n\tconst raw = params.get(\"community\") ?? params.get(\"showCommunity\");\n\tif (raw == null || raw.trim() === \"\") return false;\n\tconst value = raw.trim().toLowerCase();\n\tif (COMMUNITY_HIDDEN_VALUES.has(value)) return false;\n\treturn COMMUNITY_SHOWN_VALUES.has(value);\n}\n\nfunction trimSlash(value: string): string {\n\treturn value.replace(/\\/$/, \"\");\n}\n\nfunction applyPlayerSearch(url: URL, options: PlayerUrlOptions): void {\n\tif (options.locale) url.searchParams.set(\"lang\", options.locale);\n\tif (options.autoplay) url.searchParams.set(\"autoplay\", \"1\");\n\tif (options.theme)\n\t\turl.searchParams.set(\"theme\", encodeEmbedTheme(options.theme));\n\tconst name = options.name?.trim();\n\tif (name) url.searchParams.set(\"name\", name.slice(0, 80));\n\tconst avatar = options.avatar?.trim();\n\tif (avatar) url.searchParams.set(\"avatar\", avatar);\n\tif (options.community === true) url.searchParams.set(\"community\", \"1\");\n\tif (options.community === false) url.searchParams.set(\"community\", \"0\");\n}\n\nexport function playerUrl(\n\tstreamId: string,\n\toptions: PlayerUrlOptions = {},\n): string {\n\tconst origin = trimSlash(options.playerOrigin ?? \"https://player.livo.tv\");\n\tconst url = new URL(`${origin}/${streamId}`);\n\tapplyPlayerSearch(url, options);\n\treturn url.toString();\n}\n\nexport function vodPlayerUrl(\n\tvodId: string,\n\toptions: PlayerUrlOptions = {},\n): string {\n\tconst origin = trimSlash(options.playerOrigin ?? \"https://player.livo.tv\");\n\tconst url = new URL(`${origin}/vod/${vodId}`);\n\tapplyPlayerSearch(url, options);\n\treturn url.toString();\n}\n\nexport function studioGuestUrl(\n\ttoken: string,\n\toptions: UrlOrigins & { theme?: EmbedTheme; embed?: boolean } = {},\n): string {\n\tconst origin = trimSlash(options.appOrigin ?? \"https://app.livo.tv\");\n\tconst url = new URL(`${origin}/studio/join/${token}`);\n\tif (options.embed !== false) url.searchParams.set(\"embed\", \"1\");\n\tif (options.theme)\n\t\turl.searchParams.set(\"theme\", encodeEmbedTheme(options.theme));\n\treturn url.toString();\n}\n\nexport function studioHostUrl(\n\ttoken: string,\n\toptions: UrlOrigins & { theme?: EmbedTheme; embed?: boolean } = {},\n): string {\n\tconst origin = trimSlash(options.appOrigin ?? \"https://app.livo.tv\");\n\tconst url = new URL(`${origin}/studio/host/${token}`);\n\tif (options.embed !== false) url.searchParams.set(\"embed\", \"1\");\n\tif (options.theme)\n\t\turl.searchParams.set(\"theme\", encodeEmbedTheme(options.theme));\n\treturn url.toString();\n}\n","import { useEffect, useMemo, type CSSProperties } from \"react\";\nimport { studioGuestUrl, studioHostUrl } from \"./urls\";\nimport { sanitizeEmbedTheme, type EmbedTheme } from \"./theme\";\n\nexport type LivoStudioEvent = {\n\ttype: string;\n\tpayload?: unknown;\n};\n\nexport type LivoStudioProps = {\n\tguestToken?: string;\n\thostToken?: string;\n\tappOrigin?: string;\n\ttheme?: EmbedTheme;\n\tclassName?: string;\n\ttitle?: string;\n\tonEvent?: (event: LivoStudioEvent) => void;\n};\n\nexport function LivoStudio({\n\tguestToken,\n\thostToken,\n\tappOrigin,\n\ttheme,\n\tclassName,\n\ttitle = \"Livo studio\",\n\tonEvent,\n}: LivoStudioProps) {\n\tconst safeTheme = sanitizeEmbedTheme(theme ?? {});\n\tconst src = useMemo(() => {\n\t\tif (hostToken) {\n\t\t\treturn studioHostUrl(hostToken, {\n\t\t\t\tappOrigin,\n\t\t\t\ttheme: safeTheme ?? undefined,\n\t\t\t});\n\t\t}\n\t\tif (guestToken) {\n\t\t\treturn studioGuestUrl(guestToken, {\n\t\t\t\tappOrigin,\n\t\t\t\ttheme: safeTheme ?? undefined,\n\t\t\t});\n\t\t}\n\t\treturn null;\n\t}, [appOrigin, guestToken, hostToken, safeTheme]);\n\n\tuseEffect(() => {\n\t\tif (!onEvent) return;\n\t\tconst emit = onEvent;\n\t\tfunction onMessage(event: MessageEvent) {\n\t\t\tconst data = event.data;\n\t\t\tif (\n\t\t\t\ttypeof data !== \"object\" ||\n\t\t\t\tdata === null ||\n\t\t\t\t(data as { source?: string }).source !== \"livo\"\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\temit({\n\t\t\t\ttype: String((data as { type: string }).type),\n\t\t\t\tpayload: (data as { payload?: unknown }).payload,\n\t\t\t});\n\t\t}\n\t\twindow.addEventListener(\"message\", onMessage);\n\t\treturn () => window.removeEventListener(\"message\", onMessage);\n\t}, [onEvent]);\n\n\tif (!src) return null;\n\treturn (\n\t\t<iframe\n\t\t\tsrc={src}\n\t\t\ttitle={title}\n\t\t\tclassName={className}\n\t\t\tstyle={\n\t\t\t\t{ border: 0, width: \"100%\", minHeight: 480 } satisfies CSSProperties\n\t\t\t}\n\t\t\tallow=\"camera; microphone; display-capture; autoplay; fullscreen\"\n\t\t\tallowFullScreen\n\t\t/>\n\t);\n}\n"]}