rte-utils 1.2.111 → 1.2.113
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Icons.d.ts +2 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/components/InputNumber.tsx","../src/components/Switch.tsx","../src/components/Chip.tsx","../src/components/ProductionUnit.tsx","../src/components/Histogram.tsx","../src/components/ProductionUnitContainer.tsx","../src/components/Avatar.tsx","../src/components/ValueWithUnit.tsx","../node_modules/tslib/tslib.es6.js","../src/components/Timer.tsx","../src/components/ProgressBar.tsx","../src/components/Gain.tsx","../src/components/BuyLine.tsx","../src/components/Button.tsx","../src/components/Accordion.tsx","../src/components/Ecart.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect } from 'react';\nimport './InputNumber.css';\n\ninterface InputNumberProps {\n label: string;\n value?: string;\n onChange?: (value: string) => void;\n onErrorChange?: (hasError: boolean) => void;\n disabled?: boolean;\n className?: string;\n required?: boolean;\n min?: { value: number; label?: string };\n max?: { value: number; label?: string };\n showSuccess?: boolean;\n inputWidth?: number;\n}\n\nexport const InputNumber: React.FC<InputNumberProps> = ({\n label,\n value = '',\n onChange,\n onErrorChange,\n disabled = false,\n className = '',\n required = false,\n min = { value: 0 },\n max = { value: 100 },\n showSuccess = false,\n inputWidth,\n}) => {\n const [internalValue, setInternalValue] = useState(value);\n const [isFocused, setIsFocused] = useState(false);\n const [isOutOfRange, setIsOutOfRange] = useState(false);\n const [calculatedWidth, setCalculatedWidth] = useState(54); // Smaller default minimum width\n const inputRef = useRef<HTMLInputElement>(null);\n const labelRef = useRef<HTMLLabelElement>(null);\n\n // Use provided inputWidth or calculated width\n const finalInputWidth = inputWidth || calculatedWidth;\n\n // Calculate input width based on label text only if inputWidth is not provided\n useEffect(() => {\n if (!inputWidth && labelRef.current) {\n // Create a temporary element to measure text width\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n if (context) {\n // Get computed styles for accurate measurement\n const styles = window.getComputedStyle(labelRef.current);\n context.font = `${styles.fontSize} ${styles.fontFamily}`;\n\n // Measure the label text width\n const textWidth = context.measureText(label + (required ? '*' : '')).width;\n\n // Add minimal padding - just enough for label background and input padding\n // 24px = 12px left padding + 12px right padding for input\n // 8px = 4px padding on each side for label background\n const calculatedWidth = Math.max(54, textWidth + 32); // More precise padding calculation\n setCalculatedWidth(calculatedWidth);\n }\n }\n }, [label, required, inputWidth]);\n\n useEffect(() => {\n setInternalValue(value);\n }, [value]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n\n // Always update internal value for display\n setInternalValue(newValue);\n\n // Check if value is out of range for visual feedback\n if (newValue !== '') {\n const numValue = parseFloat(newValue);\n if (!isNaN(numValue)) {\n const outOfRange = numValue < min.value || numValue > max.value;\n setIsOutOfRange(outOfRange);\n onErrorChange?.(outOfRange);\n\n if (outOfRange) {\n // Clamp the value and notify parent with clamped value\n const clampedValue = Math.max(min.value, Math.min(max.value, numValue));\n onChange?.(clampedValue.toString());\n } else {\n // Value is in range, notify parent with actual value\n onChange?.(newValue);\n }\n } else {\n setIsOutOfRange(false);\n onErrorChange?.(false);\n onChange?.(newValue);\n }\n } else {\n setIsOutOfRange(false);\n onErrorChange?.(false);\n onChange?.(newValue);\n }\n };\n const handleFocus = () => {\n setIsFocused(true);\n // Select all text when focusing\n if (inputRef.current) {\n inputRef.current.select();\n }\n };\n\n const handleBlur = () => {\n setIsFocused(false);\n\n // Clamp value on blur\n if (internalValue !== '') {\n const numValue = parseFloat(internalValue);\n if (!isNaN(numValue)) {\n const clampedValue = Math.max(min.value, Math.min(max.value, numValue));\n if (clampedValue !== numValue) {\n const clampedString = clampedValue.toString();\n setInternalValue(clampedString);\n onChange?.(clampedString);\n }\n setIsOutOfRange(false); // Reset out-of-range state after clamping\n onErrorChange?.(false);\n }\n }\n };\n\n const isLabelFloating = isFocused || internalValue.length > 0;\n\n const containerClasses = [\n 'input-container',\n isFocused ? 'input-container--focused' : '',\n isLabelFloating ? 'input-container--floating' : '',\n disabled ? 'input-container--disabled' : '',\n isOutOfRange ? 'input-container--error' : '',\n showSuccess ? 'input-container--success' : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={containerClasses}>\n <div className=\"input-constraints\">\n {min.label && (\n <div className=\"input-min\">\n {min.label}\n <br />\n {min.value}\n </div>\n )}\n\n <div className=\"input-field\" style={{ width: `${finalInputWidth}px` }}>\n <input\n ref={inputRef}\n type=\"number\"\n value={internalValue}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n disabled={disabled}\n required={required}\n className=\"input-element\"\n style={{ width: `${finalInputWidth}px` }}\n aria-label={label}\n min={min.value}\n max={max.value}\n step={1}\n />\n <label ref={labelRef} className=\"input-label\">\n {label}\n {required && <span className=\"input-required\">*</span>}\n </label>\n </div>\n {max.label && (\n <div className=\"input-max\">\n {max.label}\n <br /> {max.value}\n </div>\n )}\n </div>\n </div>\n );\n};\n","import React, { useState } from 'react';\nimport './Switch.css';\n\ninterface OnProps {\n isOff?: boolean;\n}\nconst ImgOn = ({ isOff }: OnProps) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M9.56529 2.85352C9.66365 2.57607 9.96837 2.43116 10.246 2.5293C13.4295 3.65507 15.3392 6.91015 14.7684 10.2383C14.1974 13.5667 11.3114 16 7.93443 16C4.55739 16 1.67151 13.5667 1.10045 10.2383C0.5296 6.91011 2.4393 3.65504 5.62291 2.5293C5.9005 2.43115 6.20523 2.57605 6.30357 2.85352C6.40176 3.13124 6.2561 3.43599 5.97838 3.53418C3.28438 4.48672 1.669 7.2423 2.1522 10.0586C2.63557 12.8747 5.07706 14.9336 7.93443 14.9336C10.7918 14.9336 13.2333 12.8747 13.7167 10.0586C14.1999 7.24233 12.5844 4.48676 9.89049 3.53418C9.61276 3.43599 9.4671 3.13124 9.56529 2.85352ZM7.93443 0C8.22892 3.10447e-05 8.46754 0.238727 8.46763 0.533203V7.4668C8.46763 7.76135 8.22898 8.00095 7.93443 8.00098C7.63986 8.00098 7.40123 7.76137 7.40123 7.4668V0.533203C7.40132 0.238707 7.63991 0 7.93443 0Z\"\n fill={isOff ? '#999FA1' : '#009CDF'}\n />\n </svg>\n);\nconst SwitchThumb = ({ isOff }: OnProps) => (\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"16\" cy=\"16\" r=\"16\" fill={isOff ? 'white' : '#009cdf'} />\n </svg>\n);\n\ninterface SwitchProps {\n checked?: boolean;\n onChange?: (checked: boolean) => void;\n disabled?: boolean;\n showIcon?: boolean;\n label?: string;\n}\n\nexport const Switch: React.FC<SwitchProps> = ({\n checked = false,\n onChange,\n disabled = false,\n showIcon = true,\n label,\n}) => {\n const [internalChecked, setInternalChecked] = useState(checked);\n\n // Use controlled value if provided, otherwise use internal state\n const isChecked = checked !== undefined ? checked : internalChecked;\n\n const handleToggle = () => {\n if (disabled) return;\n\n const newChecked = !isChecked;\n // Only update internal state if uncontrolled\n if (checked === undefined) {\n setInternalChecked(newChecked);\n }\n onChange?.(newChecked);\n };\n\n const switchClasses = [\n 'switch',\n isChecked ? 'switch--checked' : '',\n disabled ? 'switch--disabled' : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n const wrapperClasses = ['switch-wrapper', isChecked ? 'switch-wrapper--checked' : '']\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className=\"switch-container\">\n <div className={wrapperClasses}>\n {showIcon ? (\n <div className=\"switch-icon\">\n <ImgOn isOff={!isChecked} />\n </div>\n ) : label ? (\n <div className=\"switch-label\">{label}</div>\n ) : null}\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={isChecked}\n className={switchClasses}\n onClick={handleToggle}\n disabled={disabled}\n >\n <span className=\"switch-track\">\n <span className=\"switch-thumb\">\n <SwitchThumb isOff={!isChecked} />\n </span>\n </span>\n </button>\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport './Chip.css';\n\ninterface ChipProps {\n // Define any props you want to pass to the Chip component\n children: React.ReactNode;\n bgColor?: string;\n width?: 'fit-content' | 'full-width';\n}\n\nexport const Chip: React.FC<ChipProps> = ({ children, bgColor, width = 'fit-content' }) => {\n const chipClasses = [\n 'chip-container',\n width === 'full-width' ? 'chip-container--full-width' : 'chip-container--fit-content',\n ].join(' ');\n\n return (\n <div className={chipClasses} style={{ backgroundColor: bgColor }}>\n <div className=\"chip-content\">\n <div className=\"chip-label\">{children}</div>\n </div>\n </div>\n );\n};\n","import { useState } from 'react';\nimport { InputNumber } from './InputNumber';\nimport { Switch } from './Switch';\nimport './ProductionUnit.css';\nimport { Chip } from './Chip';\nimport { ValueWithUnit } from '.';\n\ntype ProductionUnitLimit = {\n value: number;\n label?: string;\n};\ninterface ProductionUnitProps {\n onChangeInput?: (value: number) => void;\n onChangeSwitch?: (checked: boolean) => void;\n defaultValue?: number;\n defaultChecked?: boolean;\n value?: number;\n checked?: boolean;\n unitName?: string;\n energyCost?: number;\n checkedImage?: React.ReactNode;\n uncheckedImage?: React.ReactNode;\n readonly?: boolean;\n min?: ProductionUnitLimit;\n max?: ProductionUnitLimit;\n unitLabel?: string;\n editable?: boolean;\n}\nexport const ProductionUnit = ({\n onChangeInput,\n onChangeSwitch,\n defaultValue,\n defaultChecked = false,\n value,\n checked,\n unitName = 'Production Unit',\n energyCost = 0,\n checkedImage,\n uncheckedImage,\n readonly = false,\n min = { value: 10, label: 'Pmin' },\n max = { value: 100, label: 'Pmax' },\n unitLabel = 'W',\n editable = true,\n}: ProductionUnitProps) => {\n // Internal state management for uncontrolled mode\n const [internalChecked, setInternalChecked] = useState(defaultChecked);\n const [internalValue, setInternalValue] = useState(defaultValue);\n\n // Use controlled props if provided, otherwise use internal state\n const isChecked = checked !== undefined ? checked : internalChecked;\n const currentValue = value !== undefined ? value : internalValue;\n\n const handleSwitchChange = (newChecked: boolean) => {\n // Update internal state only if uncontrolled\n if (checked === undefined) {\n setInternalChecked(newChecked);\n }\n\n // Notify parent component if handler provided\n if (onChangeSwitch) {\n onChangeSwitch(newChecked);\n }\n };\n\n const handleInputChange = (val: string) => {\n // Only convert to number if the string is not empty and is a valid number\n if (val === '') {\n // Handle empty string case\n if (value === undefined) {\n setInternalValue(undefined);\n }\n if (onChangeInput) {\n onChangeInput(0); // or whatever default you prefer for empty values\n }\n return;\n }\n\n const numValue = parseFloat(val);\n if (!isNaN(numValue)) {\n // Update internal state only if uncontrolled\n if (value === undefined) {\n setInternalValue(numValue);\n }\n\n // Notify parent component if handler provided\n if (onChangeInput) {\n onChangeInput(numValue);\n }\n }\n };\n\n return (\n <div\n className=\"production-unit-container-box\"\n style={{\n boxShadow: editable ? '0px 2px 16px 0px rgba(0, 0, 0, 0.16)' : 'none',\n }}\n >\n <div className=\"production-unit-container\">\n <div className=\"production-unit-content\">\n <div className=\"image-preview-container\">\n {isChecked ? checkedImage : uncheckedImage}\n <div className=\"image-preview-label\">{unitLabel}</div>\n </div>\n <div className=\"production-unit-chip\">\n <div className=\"production-unit-chip-name\">{unitName}</div>\n\n <Chip width=\"fit-content\" bgColor=\"#E1F5FD\">\n <ValueWithUnit cost={energyCost} textColor=\"#005896\" />\n </Chip>\n </div>\n <div className=\"production-unit-switch-container\">\n <InputNumber\n label=\"PA\"\n onChange={handleInputChange}\n value={currentValue !== undefined ? currentValue.toString() : undefined}\n disabled={!isChecked || readonly}\n min={{ value: min.value, label: min.label }}\n max={{ value: max.value, label: max.label }}\n />{' '}\n </div>\n </div>\n\n {editable ? (\n <Switch checked={isChecked} onChange={handleSwitchChange} disabled={readonly} />\n ) : isChecked ? (\n <Chip bgColor=\"#E1F5FD\">\n <span style={{ color: '#005896' }}>Souscrit</span>\n </Chip>\n ) : null}\n </div>\n </div>\n );\n};\n","import React, { useEffect, useState, useRef } from 'react';\nimport './Histogram.css';\n\ninterface HistogramProps {\n /** Maximum value configuration with value and color */\n max: {\n value: number;\n color: string;\n opacity?: number;\n };\n /** Relative/current value configuration with value and color */\n relative: {\n value: number;\n color: string;\n };\n /** Height of the histogram bar in pixels */\n barHeight?: number;\n /** Width of the histogram bar in pixels */\n barWidth?: number;\n /** Orientation of the histogram - 'vertical' or 'horizontal' */\n orientation?: 'vertical' | 'horizontal';\n /** Corner radius configuration for individual corners */\n cornerRadius?: {\n topLeft?: number;\n topRight?: number;\n bottomLeft?: number;\n bottomRight?: number;\n };\n /** Enable gain/loss display when relative value changes */\n showGain?: boolean;\n /** Child components (typically text content) */\n children?: React.ReactNode;\n}\n\nexport const Histogram: React.FC<HistogramProps> = ({\n max,\n relative,\n barHeight = 103,\n barWidth = 32,\n orientation = 'vertical',\n cornerRadius,\n showGain = false,\n children,\n}) => {\n const [animatedHeight, setAnimatedHeight] = useState(0);\n const [animatedWidth, setAnimatedWidth] = useState(0);\n const [gainPoints, setGainPoints] = useState<number | null>(null);\n const [isPositiveChange, setIsPositiveChange] = useState<boolean>(true);\n const previousValueRef = useRef(relative.value);\n const isFirstRender = useRef(true);\n const animationTimerRef = useRef<NodeJS.Timeout | null>(null);\n const accumulatedChangeRef = useRef<number>(0);\n const animationStartValueRef = useRef<number>(relative.value);\n\n // Calculate target dimensions based on orientation\n const targetHeight = (Math.min((relative.value / max.value) * 100, 100) / 100) * barHeight;\n const targetWidth = (Math.min((relative.value / max.value) * 100, 100) / 100) * (orientation === 'horizontal' ? barHeight : barWidth);\n\n // Detect value change and show gain/loss with accumulation\n useEffect(() => {\n // Skip the first render to avoid showing initial value as gain\n if (isFirstRender.current) {\n isFirstRender.current = false;\n previousValueRef.current = relative.value;\n animationStartValueRef.current = relative.value;\n return;\n }\n\n if (showGain && relative.value !== previousValueRef.current) {\n const changeAmount = relative.value - previousValueRef.current;\n \n // If there's an ongoing animation, cancel it and accumulate the changes\n if (animationTimerRef.current) {\n clearTimeout(animationTimerRef.current);\n // Add the new change to the accumulated change\n accumulatedChangeRef.current += changeAmount;\n } else {\n // No ongoing animation, start fresh\n animationStartValueRef.current = previousValueRef.current;\n accumulatedChangeRef.current = changeAmount;\n }\n \n // Update previous value\n previousValueRef.current = relative.value;\n \n // Calculate total change from animation start to now\n const totalChange = relative.value - animationStartValueRef.current;\n const isIncrease = totalChange > 0;\n \n setGainPoints(Math.abs(totalChange));\n setIsPositiveChange(isIncrease);\n \n // Set new timer for hiding the animation\n animationTimerRef.current = setTimeout(() => {\n setGainPoints(null);\n animationTimerRef.current = null;\n accumulatedChangeRef.current = 0;\n animationStartValueRef.current = relative.value;\n }, 2000);\n \n return () => {\n if (animationTimerRef.current) {\n clearTimeout(animationTimerRef.current);\n animationTimerRef.current = null;\n }\n };\n } else if (!showGain) {\n // Update previous value even when showGain is false\n previousValueRef.current = relative.value;\n animationStartValueRef.current = relative.value;\n }\n }, [relative.value, showGain]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (animationTimerRef.current) {\n clearTimeout(animationTimerRef.current);\n }\n };\n }, []);\n\n // Simple Chart.js-like animation: always animate from 0 to target\n useEffect(() => {\n setAnimatedHeight(0);\n setAnimatedWidth(0);\n\n const startTime = Date.now();\n const duration = 1000;\n\n const animate = () => {\n const elapsed = Date.now() - startTime;\n const progress = Math.min(elapsed / duration, 1);\n\n // Chart.js-like easing (easeOutQuart)\n const easeOutQuart = 1 - Math.pow(1 - progress, 4);\n\n setAnimatedHeight(targetHeight * easeOutQuart);\n setAnimatedWidth(targetWidth * easeOutQuart);\n\n if (progress < 1) {\n requestAnimationFrame(animate);\n }\n };\n\n requestAnimationFrame(animate);\n }, [targetHeight, targetWidth]);\n\n const displayWidth = orientation === 'horizontal' ? barHeight : barWidth;\n const displayHeight = orientation === 'horizontal' ? barWidth : barHeight;\n const svgWidth = orientation === 'horizontal' ? barHeight : barWidth;\n const svgHeight = orientation === 'horizontal' ? barWidth : barHeight;\n\n // Helper function to create rounded rectangle path\n const createRoundedRectPath = (\n x: number,\n y: number,\n width: number,\n height: number,\n radii: { topLeft: number; topRight: number; bottomLeft: number; bottomRight: number }\n ) => {\n const { topLeft, topRight, bottomLeft, bottomRight } = radii;\n\n return `\n M ${x + topLeft} ${y}\n L ${x + width - topRight} ${y}\n Q ${x + width} ${y} ${x + width} ${y + topRight}\n L ${x + width} ${y + height - bottomRight}\n Q ${x + width} ${y + height} ${x + width - bottomRight} ${y + height}\n L ${x + bottomLeft} ${y + height}\n Q ${x} ${y + height} ${x} ${y + height - bottomLeft}\n L ${x} ${y + topLeft}\n Q ${x} ${y} ${x + topLeft} ${y}\n Z\n `\n .trim()\n .replace(/\\s+/g, ' ');\n };\n\n // Default corner radius values\n const defaultCornerRadius = { topLeft: 2, topRight: 2, bottomLeft: 2, bottomRight: 2 };\n const corners = cornerRadius\n ? {\n topLeft: cornerRadius.topLeft ?? defaultCornerRadius.topLeft,\n topRight: cornerRadius.topRight ?? defaultCornerRadius.topRight,\n bottomLeft: cornerRadius.bottomLeft ?? defaultCornerRadius.bottomLeft,\n bottomRight: cornerRadius.bottomRight ?? defaultCornerRadius.bottomRight,\n }\n : defaultCornerRadius;\n\n return (\n <div\n className={`histogram-container ${orientation === 'horizontal' ? 'histogram-container--horizontal' : ''}`}\n >\n <div\n className={`histogram-content ${orientation === 'horizontal' ? 'histogram-content--horizontal' : ''}`}\n >\n <div\n className=\"histogram-bar\"\n style={{\n height: `${displayHeight}px`,\n width: `${displayWidth}px`,\n }}\n >\n <svg\n width={svgWidth}\n height={svgHeight}\n viewBox={`0 0 ${svgWidth} ${svgHeight}`}\n className=\"histogram-svg\"\n >\n {/* Define clipping path with rounded corners matching the background */}\n <defs>\n <clipPath id={`histogram-clip-${svgWidth}-${svgHeight}-${corners.topLeft}`}>\n <path d={createRoundedRectPath(0, 0, svgWidth, svgHeight, corners)} />\n </clipPath>\n </defs>\n \n {/* Background bar (max value) */}\n <path\n d={createRoundedRectPath(0, 0, svgWidth, svgHeight, corners)}\n fill={max.color}\n fillOpacity={max.opacity || 1}\n />\n \n {/* Foreground bar (relative value) with clipping to stay within rounded corners */}\n {orientation === 'vertical' ? (\n <path\n d={createRoundedRectPath(0, svgHeight - animatedHeight, svgWidth, animatedHeight, {\n topLeft: animatedHeight >= svgHeight ? corners.topLeft : 0,\n topRight: animatedHeight >= svgHeight ? corners.topRight : 0,\n bottomLeft: corners.bottomLeft,\n bottomRight: corners.bottomRight,\n })}\n fill={relative.color}\n clipPath={`url(#histogram-clip-${svgWidth}-${svgHeight}-${corners.topLeft})`}\n />\n ) : (\n <path\n d={createRoundedRectPath(0, 0, animatedWidth, svgHeight, {\n topLeft: corners.topLeft,\n topRight: animatedWidth >= svgWidth ? corners.topRight : 0,\n bottomLeft: corners.bottomLeft,\n bottomRight: animatedWidth >= svgWidth ? corners.bottomRight : 0,\n })}\n fill={relative.color}\n clipPath={`url(#histogram-clip-${svgWidth}-${svgHeight}-${corners.topLeft})`}\n />\n )}\n </svg>\n \n {/* Gain/Loss display */}\n {showGain && gainPoints && (\n <div className=\"histogram-gain-area\">\n <div className={`histogram-gain-points ${isPositiveChange ? 'histogram-gain-points--positive' : 'histogram-gain-points--negative'}`}>\n {isPositiveChange ? '+' : '-'}{gainPoints}\n </div>\n </div>\n )}\n </div>\n {children && (\n <div\n className={`histogram-text-container ${orientation === 'horizontal' ? 'histogram-text-container--horizontal' : ''}`}\n >\n {children}\n </div>\n )}\n </div>\n </div>\n );\n};\n","import './ProductionUnitContainer.css';\n\ninterface ProductionUnitContainerProps {\n bgColor?: string;\n children: React.ReactNode;\n height?: string;\n}\nexport const ProductionUnitContainer = ({\n bgColor = '#fff',\n children,\n height,\n}: ProductionUnitContainerProps) => {\n return (\n <div className=\"production-unit-container-box\" style={{ backgroundColor: bgColor, height }}>\n {children}\n </div>\n );\n};\n","import React from 'react';\nimport './Avatar.css';\n\ninterface AvatarProps {\n children: React.ReactNode;\n}\n\nexport const Avatar: React.FC<AvatarProps> = ({ children }) => {\n return (\n <div className=\"avatar-container avatar-container--clickable\">\n <div className=\"avatar-content\">{children}</div>\n </div>\n );\n};\n","import React from 'react';\nimport './ValueWithUnit.css';\n\ninterface ValueWithUnitProps {\n cost?: number | string;\n textColor?: string;\n type?: 'euro' | 'megawatt' | 'europermegawatt';\n size?: 'default' | 'small';\n}\n\nexport const ValueWithUnit: React.FC<ValueWithUnitProps> = ({\n cost,\n textColor,\n type = 'europermegawatt',\n size = 'default',\n}) => {\n return (\n <div className={`cost-text-container ${size === 'small' ? 'cost-text-container--small' : ''}`}>\n <div\n className={`cost-number ${size === 'small' ? 'cost-number--small' : ''}`}\n style={{ color: textColor }}\n >\n {cost}\n </div>\n <div\n className={`cost-unit ${size === 'small' ? 'cost-unit--small' : ''}`}\n style={{ color: textColor }}\n >\n {type === 'euro' || type === 'europermegawatt' ? '€' : 'MWh'}\n </div>\n {type === 'europermegawatt' && (\n <div className=\"cost-unit-per\" style={{ color: textColor }}>\n /MWh\n </div>\n )}\n </div>\n );\n};\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport './Timer.css';\n\nexport interface TimerProps {\n // Required phase configuration - duration in milliseconds\n phases: { duration: number; title?: string }[];\n \n // Required external state - always controlled\n externalState: {\n currentPhase: string; // phase title instead of index\n currentTime: number; // in milliseconds internally\n isRunning: boolean;\n isPaused: boolean;\n isFrozen: boolean;\n };\n \n // Required state change handler\n onStateChange: (state: {\n currentPhase: string; // phase title instead of index\n currentTime: number; // in milliseconds internally\n isRunning: boolean;\n isPaused: boolean;\n isFrozen: boolean;\n }) => void;\n \n // Optional event callbacks\n onComplete?: () => void;\n onPhaseComplete?: (phaseTitle: string, phaseDuration: number) => void;\n onTick?: (currentTime: number, phaseTitle: string) => void;\n onUnfreeze?: () => void;\n onUnpause?: () => void;\n onPause?: () => void;\n onFreeze?: (frozen: boolean) => void;\n onAnonymiseToggle?: (anonymised: boolean) => void;\n onStop?: () => void;\n onReset?: () => void;\n onPrevious?: (phaseName: string) => void;\n onNext?: (phaseName: string) => void;\n onPhaseClick?: (phaseName: string) => void;\n \n // UI configuration\n className?: string;\n gameActions?: { [phaseIndex: number]: string };\n user?: 'actor' | 'admin';\n}\n\nexport interface TimerRef {\n start: () => void;\n pause: () => void;\n freeze: (force?: boolean) => void; // toggle or force\n toggleAnonymise: (force?: boolean) => void; // NEW\n stop: () => void;\n reset: () => void;\n setPhases: (phases: { duration: number; title?: string }[]) => void;\n getCurrentTime: () => number;\n getCurrentPhase: () => string; // returns phase title\n isRunning: () => boolean;\n isPaused: () => boolean;\n}\n\nconst formatTime = (seconds: number): string => {\n const minutes = Math.floor(seconds / 60);\n const secs = seconds % 60;\n return `${minutes.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;\n};\n\nexport const Timer = React.forwardRef<TimerRef, TimerProps>(\n (\n {\n phases = [],\n externalState,\n onStateChange,\n onComplete,\n onPhaseComplete,\n onTick,\n onUnfreeze,\n onUnpause,\n onPause,\n onFreeze,\n onAnonymiseToggle,\n onStop,\n onReset,\n onPrevious,\n onNext,\n onPhaseClick,\n className = '',\n gameActions = {},\n user = 'admin',\n },\n ref\n ) => {\n // Extract state from externalState - no internal timer state\n const {\n currentPhase,\n currentTime,\n isRunning,\n isPaused,\n isFrozen,\n } = externalState;\n\n // Helper functions to work with phase indices internally\n const getCurrentPhaseIndex = useCallback(() => {\n return phases.findIndex(phase => (phase.title || `Phase ${phases.indexOf(phase) + 1}`) === currentPhase);\n }, [phases, currentPhase]);\n\n const getPhaseByIndex = useCallback((index: number) => {\n return phases[index];\n }, [phases]);\n\n const getPhaseTitle = useCallback((index: number) => {\n const phase = phases[index];\n return phase?.title || `Phase ${index + 1}`;\n }, [phases]);\n\n // Keep only UI-specific state (not timer logic)\n const [selectedPhase, setSelectedPhase] = useState<number | null>(null);\n const [isAnonymised, setIsAnonymised] = useState(false);\n const intervalRef = useRef<NodeJS.Timeout | null>(null);\n\n const start = useCallback(() => {\n const currentPhaseIndex = getCurrentPhaseIndex();\n if (phases.length === 0 || currentPhaseIndex === -1 || currentPhaseIndex >= phases.length) return;\n \n // Determine which callback to trigger based on current state\n const wasUnpausing = isPaused && !isFrozen;\n const wasUnfreezing = isFrozen;\n \n onStateChange({\n ...externalState,\n isRunning: true,\n isPaused: false,\n isFrozen: false,\n });\n \n // Call appropriate callback based on previous state\n if (wasUnfreezing) {\n onUnfreeze?.();\n } else if (wasUnpausing) {\n onUnpause?.();\n }\n }, [phases.length, getCurrentPhaseIndex, externalState, onStateChange, isPaused, isFrozen, onUnfreeze, onUnpause]);\n\n const pause = useCallback(() => {\n if (isFrozen) return;\n \n onStateChange({\n ...externalState,\n isRunning: false,\n isPaused: true,\n });\n onPause?.();\n }, [isFrozen, externalState, onStateChange, onPause]);\n\n const freeze = useCallback((force?: boolean) => {\n \n const nextFrozen = force === undefined ? !isFrozen : force;\n \n const newState = {\n ...externalState,\n isFrozen: nextFrozen,\n // When unfreezing, restore to running state (unless it was explicitly paused)\n // When freezing, stop running but preserve pause state\n isRunning: nextFrozen ? false : !externalState.isPaused,\n isPaused: externalState.isPaused, // Preserve pause state\n };\n \n onStateChange(newState);\n onFreeze?.(nextFrozen);\n \n // Call onUnfreeze when unfreezing\n if (!nextFrozen && isFrozen) {\n onUnfreeze?.();\n }\n }, [isFrozen, externalState, onStateChange, onFreeze, onUnfreeze]);\n\n const toggleAnonymise = useCallback(\n (force?: boolean) => {\n setIsAnonymised((prev) => {\n const next = force === undefined ? !prev : force;\n onAnonymiseToggle?.(next);\n return next;\n });\n },\n [onAnonymiseToggle]\n );\n\n const stop = useCallback(() => {\n onStateChange({\n currentPhase: getPhaseTitle(0), // Reset to first phase title\n currentTime: 0,\n isRunning: false,\n isPaused: false,\n isFrozen: false,\n });\n onStop?.();\n }, [onStateChange, onStop, getPhaseTitle]);\n\n const reset = useCallback(() => {\n onStateChange({\n currentPhase: getPhaseTitle(0), // Reset to first phase title\n currentTime: 0,\n isRunning: false,\n isPaused: false,\n isFrozen: false,\n });\n onReset?.();\n }, [onStateChange, onReset, getPhaseTitle]);\n\n const setTimerPhases = useCallback(() => {\n // No-op since phases come from props\n }, []);\n\n React.useImperativeHandle(ref, () => ({\n start,\n pause,\n freeze,\n toggleAnonymise,\n stop,\n reset,\n setPhases: setTimerPhases,\n getCurrentTime: () => currentTime,\n getCurrentPhase: () => currentPhase,\n isRunning: () => isRunning,\n isPaused: () => isPaused,\n }));\n\n\n useEffect(() => {\n const currentPhaseIndex = getCurrentPhaseIndex();\n if (isRunning && !isFrozen && currentPhaseIndex !== -1 && currentPhaseIndex < phases.length) {\n intervalRef.current = setInterval(() => {\n const newTimeMs = currentTime + 1000; // increment by 1000ms (1 second)\n const currentPhase = getPhaseByIndex(currentPhaseIndex);\n const phaseDurationMs = currentPhase?.duration || 0;\n \n // Check if phase will be complete after this tick\n const willCompletePhase = newTimeMs >= phaseDurationMs;\n \n // For phase completion, show exact duration (00:00) first\n const timeToUpdate = willCompletePhase ? phaseDurationMs : newTimeMs;\n \n // Update the elapsed time first\n onStateChange({\n ...externalState,\n currentTime: timeToUpdate,\n });\n onTick?.(Math.floor(timeToUpdate / 1000), getPhaseTitle(currentPhaseIndex)); // Pass seconds to callback\n\n // Use setTimeout to allow the 00:00 display to render before phase completion\n if (willCompletePhase) {\n setTimeout(() => {\n \n onPhaseComplete?.(getPhaseTitle(currentPhaseIndex), phaseDurationMs);\n\n // Move to next phase or complete\n if (currentPhaseIndex + 1 < phases.length) {\n onStateChange({\n ...externalState,\n currentPhase: getPhaseTitle(currentPhaseIndex + 1),\n currentTime: 0,\n });\n } else {\n \n onStateChange({\n ...externalState,\n currentTime: phaseDurationMs, // Ensure we set time to exact duration\n isRunning: false,\n isPaused: false,\n });\n onComplete?.();\n }\n }, 1000); // Wait 1 full second to show 00:00 before phase transition\n }\n }, 1000);\n } else {\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n }\n\n return () => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n }\n };\n }, [isRunning, isFrozen, getCurrentPhaseIndex, currentTime, phases.length, externalState, onStateChange, onTick, onPhaseComplete, onComplete, getPhaseByIndex, getPhaseTitle]);\n\n // Clear selected phase when current phase changes\n useEffect(() => {\n setSelectedPhase(null);\n }, [currentPhase]);\n\n const currentPhaseIndex = getCurrentPhaseIndex();\n const currentPhaseData = getPhaseByIndex(currentPhaseIndex);\n const currentPhaseDurationMs = currentPhaseData?.duration || 0;\n const currentTimeSeconds = Math.floor(currentTime / 1000); // convert ms to seconds for display\n const currentPhaseDurationSeconds = Math.floor(currentPhaseDurationMs / 1000); // convert ms to seconds for display\n const progress = currentPhaseDurationMs > 0 ? (currentTime / currentPhaseDurationMs) * 100 : 0;\n // Determine if we finished all steps and are at the end\n const isAtEnd =\n phases.length > 0 &&\n !isRunning &&\n currentPhaseIndex === Math.max(0, phases.length - 1) &&\n currentTime >= currentPhaseDurationMs;\n\n const timerClasses = [\n 'timer-header-control',\n className,\n isRunning ? 'timer--running' : '',\n isPaused ? 'timer--paused' : '',\n isFrozen ? 'timer--frozen' : '',\n // isAnonymised ? 'timer--anonymised' : '',\n isAtEnd ? 'timer--completed' : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n const remainingTime = currentPhaseDurationSeconds > 0 ? currentPhaseDurationSeconds - currentTimeSeconds : 0;\n \n // Force remaining time to 0 if we're at the exact phase duration or beyond\n const finalRemainingTime = (isAtEnd || currentTime >= currentPhaseDurationMs) ? 0 : remainingTime;\n\n const renderStepIndicators = () => {\n const steps = [] as React.ReactNode[];\n const maxSteps = phases.length;\n\n for (let i = 0; i < maxSteps; i++) {\n const isActive = i === currentPhaseIndex;\n const isCompleted = i < currentPhaseIndex;\n const hasAction = gameActions[i];\n const isClickable = isActive || isCompleted; // only active or completed\n\n let stepClass = 'step-indicator';\n if (!hasAction && !isActive && !isCompleted) {\n stepClass += ' step-indicator--placeholder';\n } else if (isActive) {\n stepClass +=\n ' step-indicator--active' +\n (user === 'actor' ? ' step-indicator--actor' : ' step-indicator--admin');\n } else if (isCompleted) {\n stepClass += ' step-indicator--completed';\n } else {\n stepClass += ' step-indicator--upcoming';\n }\n if (isClickable) stepClass += ' step-indicator--clickable'; // add clickable style\n if (selectedPhase === i) stepClass += ' step-indicator--selected'; // highlight clicked\n\n const handleClick = () => {\n if (!isClickable) return;\n setSelectedPhase(i);\n onPhaseClick?.(getPhaseTitle(i));\n };\n\n const commonProps = {\n className: stepClass,\n 'data-step': i + 1,\n title: phases[i]?.title\n ? `Step ${i + 1}: ${phases[i]?.title}`\n : hasAction\n ? `Step ${i + 1}: ${hasAction}`\n : `Step ${i + 1}`,\n onClick: isClickable ? handleClick : undefined,\n role: isClickable ? ('button' as const) : undefined,\n tabIndex: isClickable ? 0 : undefined,\n onKeyDown: isClickable\n ? (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleClick();\n }\n }\n : undefined,\n };\n\n steps.push(<div key={i} {...commonProps}>{hasAction || isActive || isCompleted ? i + 1 : ''}</div>);\n\n if (user === 'actor' && isActive) {\n steps.push(\n <div key={`header-inline-${i}`} className=\"timer-header--block\">\n <div className=\"timer-header timer-header--inline\">\n <span className=\"timer-title\">\n {selectedPhase !== null \n ? (getPhaseByIndex(selectedPhase)?.title || `Phase ${selectedPhase + 1}`).toUpperCase()\n : (currentPhaseData?.title || 'TIMER').toUpperCase()}\n </span>\n <span className=\"timer-time\">{formatTime(Math.max(0, finalRemainingTime))}</span>\n </div>\n <div className=\"timer-progress-bar timer-progress-bar--inline\">\n <div\n className=\"timer-progress-fill\"\n style={{ width: `${Math.min(100, progress)}%` }}\n />\n </div>\n </div>\n );\n }\n }\n\n return (\n <div className=\"step-indicators\">\n {steps}\n <div\n className={`step-expand ${isAtEnd ? 'step-expand--end' : ''}`}\n title={isAtEnd ? 'All steps completed' : 'In progress'}\n >\n {user === 'actor' ? (\n isAtEnd ? (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n x=\"24\"\n width=\"24\"\n height=\"24\"\n rx=\"12\"\n transform=\"rotate(90 24 0)\"\n fill=\"#292E33\"\n />\n <path\n d=\"M20 12C20 12.276 19.776 12.5 19.5 12.5L17.4766 12.5C17.238 15.1345 15.1345 17.238 12.5 17.4766L12.5 19.5C12.5 19.776 12.276 20 12 20C11.724 20 11.5 19.776 11.5 19.5L11.5 17.4766C8.86554 17.238 6.763 15.1345 6.52441 12.5L4.5 12.5C4.224 12.5 4 12.276 4 12C4 11.724 4.224 11.5 4.5 11.5L6.52441 11.5C6.763 8.86555 8.86554 6.76198 11.5 6.52344L11.5 4.5C11.5 4.224 11.724 4 12 4C12.276 4 12.5 4.224 12.5 4.5L12.5 6.52344C15.1345 6.76199 17.238 8.86551 17.4766 11.5L19.5 11.5C19.776 11.5 20 11.724 20 12ZM16.5 12C16.5 9.51867 14.4813 7.5 12 7.5C9.51867 7.5 7.5 9.51867 7.5 12C7.5 14.4813 9.51867 16.5 12 16.5C14.4813 16.5 16.5 14.4813 16.5 12ZM14 12C14 13.1046 13.1046 14 12 14C10.8954 14 10 13.1046 10 12C10 10.8954 10.8954 10 12 10C13.1046 10 14 10.8954 14 12Z\"\n fill=\"white\"\n />\n </svg>\n ) : (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n x=\"24\"\n width=\"24\"\n height=\"24\"\n rx=\"12\"\n transform=\"rotate(90 24 0)\"\n fill=\"#292E33\"\n />\n <path\n d=\"M20 12C20 12.276 19.776 12.5 19.5 12.5L17.4766 12.5C17.238 15.1345 15.1345 17.238 12.5 17.4766L12.5 19.5C12.5 19.776 12.276 20 12 20C11.724 20 11.5 19.776 11.5 19.5L11.5 17.4766C8.86554 17.238 6.763 15.1345 6.52441 12.5L4.5 12.5C4.224 12.5 4 12.276 4 12C4 11.724 4.224 11.5 4.5 11.5L6.52441 11.5C6.763 8.86555 8.86554 6.76198 11.5 6.52344L11.5 4.5C11.5 4.224 11.724 4 12 4C12.276 4 12.5 4.224 12.5 4.5L12.5 6.52344C15.1345 6.76199 17.238 8.86551 17.4766 11.5L19.5 11.5C19.776 11.5 20 11.724 20 12ZM16.5 12C16.5 9.51867 14.4813 7.5 12 7.5C9.51867 7.5 7.5 9.51867 7.5 12C7.5 14.4813 9.51867 16.5 12 16.5C14.4813 16.5 16.5 14.4813 16.5 12ZM14 12C14 13.1046 13.1046 14 12 14C10.8954 14 10 13.1046 10 12C10 10.8954 10.8954 10 12 10C13.1046 10 14 10.8954 14 12Z\"\n fill=\"white\"\n />\n </svg>\n )\n ) : isAtEnd ? (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M16 8C16 8.276 15.776 8.5 15.5 8.5L13.4766 8.5C13.238 11.1345 11.1345 13.238 8.5 13.4766L8.5 15.5C8.5 15.776 8.276 16 8 16C7.724 16 7.5 15.776 7.5 15.5L7.5 13.4766C4.86554 13.238 2.763 11.1345 2.52441 8.5L0.5 8.5C0.224 8.5 -3.61755e-07 8.276 -3.49691e-07 8C-3.29564e-07 7.724 0.224 7.5 0.5 7.5L2.52441 7.5C2.763 4.86555 4.86554 2.76198 7.5 2.52344L7.5 0.5C7.5 0.224 7.724 -3.61755e-07 8 -3.4969e-07C8.276 -3.29563e-07 8.5 0.224 8.5 0.5L8.5 2.52344C11.1345 2.76199 13.238 4.86551 13.4766 7.5L15.5 7.5C15.776 7.5 16 7.724 16 8ZM12.5 8C12.5 5.51867 10.4813 3.5 8 3.5C5.51867 3.5 3.5 5.51867 3.5 8C3.5 10.4813 5.51867 12.5 8 12.5C10.4813 12.5 12.5 10.4813 12.5 8ZM10 8C10 9.10457 9.10457 10 8 10C6.89543 10 6 9.10457 6 8C6 6.89543 6.89543 6 8 6C9.10457 6 10 6.89543 10 8Z\"\n fill=\"currentColor\"\n />\n </svg>\n ) : (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M16 8C16 8.276 15.776 8.5 15.5 8.5L13.4766 8.5C13.238 11.1345 11.1345 13.238 8.5 13.4766L8.5 15.5C8.5 15.776 8.276 16 8 16C7.724 16 7.5 15.776 7.5 15.5L7.5 13.4766C4.86554 13.238 2.763 11.1345 2.52441 8.5L0.5 8.5C0.224 8.5 -3.61755e-07 8.276 -3.49691e-07 8C-3.29564e-07 7.724 0.224 7.5 0.5 7.5L2.52441 7.5C2.763 4.86555 4.86554 2.76198 7.5 2.52344L7.5 0.5C7.5 0.224 7.724 -3.61755e-07 8 -3.4969e-07C8.276 -3.29563e-07 8.5 0.224 8.5 0.5L8.5 2.52344C11.1345 2.76199 13.238 4.86551 13.4766 7.5L15.5 7.5C15.776 7.5 16 7.724 16 8ZM12.5 8C12.5 5.51867 10.4813 3.5 8 3.5C5.51867 3.5 3.5 5.51867 3.5 8C3.5 10.4813 5.51867 12.5 8 12.5C10.4813 12.5 12.5 10.4813 12.5 8ZM10 8C10 9.10457 9.10457 10 8 10C6.89543 10 6 9.10457 6 8C6 6.89543 6.89543 6 8 6C9.10457 6 10 6.89543 10 8Z\"\n fill=\"currentColor\"\n />\n </svg>\n )}\n </div>\n </div>\n );\n };\n\n return (\n <div className={timerClasses}>\n <div className=\"timer-section\">\n <div className=\"timer-content\">\n <div className=\"timer-display-area\">\n {user === 'admin' && (\n <div className=\"timer-header\">\n <span className=\"timer-title\">\n {selectedPhase !== null \n ? (getPhaseByIndex(selectedPhase)?.title || `Phase ${selectedPhase + 1}`).toUpperCase()\n : (currentPhaseData?.title || 'TIMER').toUpperCase()}\n </span>\n <span className=\"timer-time\">{formatTime(Math.max(0, finalRemainingTime))}</span>\n </div>\n )}\n {user === 'admin' && (\n <div className=\"timer-progress-bar\">\n <div\n className=\"timer-progress-fill\"\n style={{ width: `${Math.min(100, progress)}%` }}\n />\n </div>\n )}\n {renderStepIndicators()}\n </div>\n </div>\n </div>\n\n {user === 'admin' && (\n <div className=\"timer-controls-section\">\n <button\n className=\"control-button control-button--previous\"\n onClick={() => {\n // Navigate to previous phase if available\n const targetIndex = selectedPhase !== null ? selectedPhase - 1 : currentPhaseIndex - 1;\n if (targetIndex >= 0) {\n setSelectedPhase(targetIndex);\n onPrevious?.(getPhaseTitle(targetIndex));\n }\n }}\n disabled={\n selectedPhase !== null \n ? selectedPhase <= 0\n : currentPhaseIndex <= 0\n }\n title=\"Previous\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M11.9813 2.39178C12.1589 2.38845 12.3342 2.43251 12.4892 2.51941C12.6441 2.60631 12.7731 2.73291 12.8629 2.88621C12.9527 3.0395 13 3.21395 13 3.3916L12.5 3.3916H13V12.6085C13 12.7862 12.9527 12.9606 12.8629 13.1139C12.7731 13.2672 12.6441 13.3938 12.4892 13.4807C12.3342 13.5676 12.1589 13.6117 11.9813 13.6084C11.8037 13.605 11.6301 13.5545 11.4785 13.4618L3.93741 8.85335C3.79124 8.76403 3.67046 8.63865 3.58667 8.48923C3.50287 8.33982 3.45886 8.17138 3.45886 8.00007C3.45886 7.82877 3.50287 7.66033 3.58667 7.51092C3.67046 7.3615 3.79124 7.23612 3.93741 7.14679L11.4785 2.53832C11.6301 2.44568 11.8037 2.3951 11.9813 2.39178ZM12 3.3916L4.45886 8.00007L4.19814 7.57343L4.45886 8.00007L12 12.6085V3.3916Z\"\n fill=\"black\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2 2C2.27614 2 2.5 2.22386 2.5 2.5V13.5C2.5 13.7761 2.27614 14 2 14C1.72386 14 1.5 13.7761 1.5 13.5V2.5C1.5 2.22386 1.72386 2 2 2Z\"\n fill=\"black\"\n />\n </svg>\n </button>\n\n <button\n className=\"control-button control-button--next\"\n onClick={() => {\n // Navigate to next phase if available\n const currentRef = selectedPhase !== null ? selectedPhase : currentPhaseIndex;\n const targetIndex = currentRef + 1;\n if (targetIndex < phases.length && targetIndex <= currentPhaseIndex) {\n setSelectedPhase(targetIndex);\n onNext?.(getPhaseTitle(targetIndex));\n }\n }}\n disabled={\n selectedPhase !== null \n ? (selectedPhase >= currentPhaseIndex || selectedPhase >= phases.length - 1)\n : (currentPhaseIndex >= phases.length - 1)\n }\n title=\"Next\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.51084 2.51941C3.66579 2.43251 3.84109 2.38845 4.01871 2.39178C4.19633 2.3951 4.36986 2.44568 4.52145 2.53832L12.0626 7.14679C12.2088 7.23612 12.3295 7.3615 12.4133 7.51092C12.4971 7.66033 12.5411 7.82877 12.5411 8.00007C12.5411 8.17138 12.4971 8.33982 12.4133 8.48923C12.3295 8.63865 12.2088 8.76403 12.0626 8.85335L4.52145 13.4618C4.36986 13.5545 4.19633 13.605 4.01871 13.6084C3.84109 13.6117 3.66579 13.5676 3.51084 13.4807C3.3559 13.3938 3.2269 13.2672 3.13711 13.1139C3.04733 12.9606 3 12.7862 3 12.6085V3.3916C3 3.21395 3.04733 3.0395 3.13711 2.88621C3.22689 2.73292 3.35589 2.60631 3.51084 2.51941ZM11.5411 8.00007L4 3.3916V12.6085L11.5411 8.00007Z\"\n fill=\"black\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M14 2C14.2761 2 14.5 2.22386 14.5 2.5V13.5C14.5 13.7761 14.2761 14 14 14C13.7239 14 13.5 13.7761 13.5 13.5V2.5C13.5 2.22386 13.7239 2 14 2Z\"\n fill=\"black\"\n />\n </svg>\n </button>\n\n <button\n className={`control-button control-button--play-pause ${\n isRunning ? 'control-button--pause' : 'control-button--play'\n } ${isFrozen ? 'control-button--disabled' : ''}`}\n onClick={isRunning ? pause : start}\n title={isFrozen ? 'Frozen' : isRunning ? 'Pause' : isPaused ? 'Resume' : 'Start'}\n disabled={isFrozen}\n >\n {isRunning ? (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M12 4.5C7.85786 4.5 4.5 7.85786 4.5 12C4.5 15.1788 6.47789 17.8975 9.27283 18.989C9.65866 19.1397 9.8493 19.5746 9.69862 19.9604C9.54794 20.3463 9.113 20.5369 8.72717 20.3862C5.37607 19.0775 3 15.8172 3 12C3 7.02944 7.02944 3 12 3C16.2192 3 19.7585 5.90255 20.7337 9.81878C20.9078 10.5179 21 11.2487 21 12C21 12.4142 20.6642 12.75 20.25 12.75C19.8358 12.75 19.5 12.4142 19.5 12C19.5 11.3719 19.4229 10.7628 19.2781 10.1812C18.4655 6.91754 15.5141 4.5 12 4.5Z\"\n fill=\"black\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M18.75 15.75V22.25H20.25V15.75H18.75ZM17.25 15.3636C17.25 14.5918 17.9689 14.25 18.4615 14.25H20.5385C21.0311 14.25 21.75 14.5918 21.75 15.3636V22.6364C21.75 23.4082 21.0311 23.75 20.5385 23.75H18.4615C17.9689 23.75 17.25 23.4082 17.25 22.6364V15.3636Z\"\n fill=\"black\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M12.75 15.75V22.25H14.25V15.75H12.75ZM11.25 15.3636C11.25 14.5918 11.9689 14.25 12.4615 14.25H14.5385C15.0311 14.25 15.75 14.5918 15.75 15.3636V22.6364C15.75 23.4082 15.0311 23.75 14.5385 23.75H12.4615C11.9689 23.75 11.25 23.4082 11.25 22.6364V15.3636Z\"\n fill=\"black\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8.54996 7.40004C8.21858 7.64857 8.15143 8.11867 8.39996 8.45004L11.4 12.45C11.6485 12.7814 12.1186 12.8486 12.45 12.6C12.7813 12.3515 12.8485 11.8814 12.6 11.55L9.59996 7.55004C9.35143 7.21867 8.88133 7.15152 8.54996 7.40004Z\"\n fill=\"black\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9 0.75C9 0.335786 9.33579 0 9.75 0H14.25C14.6642 0 15 0.335786 15 0.75C15 1.16421 14.6642 1.5 14.25 1.5H9.75C9.33579 1.5 9 1.16421 9 0.75Z\"\n fill=\"black\"\n />\n </svg>\n ) : (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M20.25 12C20.25 11.3103 20.1654 10.6404 20.0059 10C19.112 6.41005 15.8666 3.75 12 3.75C7.44365 3.75 3.75 7.44365 3.75 12C3.75 15.498 5.92698 18.4875 9 19.6876\"\n stroke=\"black\"\n strokeWidth=\"1.5\"\n strokeMiterlimit=\"10\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M12 12L9 8\"\n stroke=\"black\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M9.75 0.75H14.25\"\n stroke=\"black\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M20.7759 18.1242L13.7125 14.0646C13.6415 14.0238 13.5603 14.0015 13.4771 14.0001C13.3939 13.9986 13.3118 14.018 13.2392 14.0563C13.1667 14.0946 13.1063 14.1503 13.0642 14.2178C13.0222 14.2854 13 14.3622 13 14.4404V22.5596C13 22.6378 13.0222 22.7146 13.0642 22.7822C13.1063 22.8497 13.1667 22.9054 13.2392 22.9437C13.3118 22.982 13.3939 23.0014 13.4771 22.9999C13.5603 22.9985 13.6415 22.9762 13.7125 22.9354L20.7759 18.8758C20.8443 18.8365 20.9009 18.7813 20.9401 18.7154C20.9794 18.6496 21 18.5755 21 18.5C21 18.4245 20.9794 18.3504 20.9401 18.2846C20.9009 18.2187 20.8443 18.1635 20.7759 18.1242V18.1242Z\"\n stroke=\"black\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </button>\n\n <button\n className={`control-button control-button--freeze ${isFrozen ? 'control-button--freeze-active' : ''}`}\n onClick={() => freeze()}\n title={isFrozen ? 'Unfreeze' : 'Freeze'}\n disabled={!isRunning && !isPaused && !isFrozen}\n >\n {/* Simple snowflake / asterisk style placeholder icon */}\n <svg width=\"14\" height=\"12\" viewBox=\"0 0 14 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M8.14697 0.146484C8.34224 -0.0486747 8.65878 -0.0487434 8.854 0.146484C9.04889 0.341739 9.04905 0.658358 8.854 0.853516L7.50049 2.20703V5.13281L10.0337 3.66992L10.5298 1.82129C10.6012 1.5547 10.8755 1.3966 11.1421 1.46777C11.4088 1.53922 11.5679 1.8134 11.4966 2.08008L11.0767 3.64648L12.6421 4.06543C12.9088 4.1369 13.0681 4.41198 12.9966 4.67871C12.925 4.94527 12.6499 5.10368 12.3833 5.03223L10.5347 4.53613L7.99951 5.99902L10.5347 7.46191L12.3833 6.96777C12.65 6.8963 12.9251 7.05456 12.9966 7.32129C13.068 7.58799 12.9088 7.86213 12.6421 7.93359L11.0767 8.35352L11.4966 9.91992C11.5677 10.1865 11.4086 10.4608 11.1421 10.5322C10.8756 10.6033 10.6013 10.4451 10.5298 10.1787L10.0337 8.32812L7.50049 6.86523V9.79297L8.854 11.1465C9.04889 11.3417 9.04905 11.6584 8.854 11.8535C8.65885 12.0487 8.34226 12.0484 8.14697 11.8535L7.00049 10.707L5.854 11.8535C5.65885 12.0487 5.34226 12.0484 5.14697 11.8535C4.95171 11.6583 4.95171 11.3417 5.14697 11.1465L6.50049 9.79297V6.86523L3.96533 8.32812L3.47021 10.1787C3.39865 10.4451 3.12439 10.6034 2.85791 10.5322C2.59128 10.4608 2.43314 10.1866 2.50439 9.91992L2.92334 8.35352L1.35791 7.93359C1.09118 7.86212 0.932919 7.58802 1.00439 7.32129C1.07593 7.05464 1.35001 6.89631 1.6167 6.96777L3.46436 7.46191L5.99951 5.99902L3.46436 4.53613L1.6167 5.03223C1.35014 5.10366 1.07608 4.94513 1.00439 4.67871C0.932919 4.41198 1.09118 4.1369 1.35791 4.06543L2.92334 3.64648L2.50439 2.08008C2.43293 1.81334 2.59118 1.53924 2.85791 1.46777C3.12453 1.39654 3.39878 1.55467 3.47021 1.82129L3.96533 3.66992L6.50049 5.13281V2.20703L5.14697 0.853516C4.95171 0.658253 4.95171 0.341747 5.14697 0.146484C5.34224 -0.0486746 5.65878 -0.0487434 5.854 0.146484L7.00049 1.29297L8.14697 0.146484Z\" fill=\"black\"/>\n</svg>\n\n </button>\n <button\n className={`control-button control-button--anonymise ${isAnonymised ? 'control-button--anonymise-active' : ''}`}\n onClick={() => toggleAnonymise()}\n title={isAnonymised ? 'Show Names' : 'Hide Names'}\n >\n {/* Simple snowflake / asterisk style placeholder icon */}\n <svg width=\"18\" height=\"12\" viewBox=\"0 0 18 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M4.19571 0.9375H13.9316L13.9576 0.939919L13.9055 1.5C13.9576 0.939919 13.958 0.939955 13.9584 0.939992L13.9593 0.940074L13.9612 0.940263L13.966 0.940753L13.9794 0.942218C13.9899 0.943426 14.0036 0.945121 14.0203 0.947429C14.0536 0.952044 14.0989 0.959129 14.1545 0.969722C14.2655 0.990879 14.4186 1.02621 14.5998 1.08426C14.9611 1.20007 15.4415 1.40866 15.9224 1.78153C16.9079 2.54562 17.8125 3.93493 17.8125 6.375C17.8125 8.84977 16.7446 10.2418 15.6228 10.9916C15.0757 11.3573 14.5319 11.5602 14.1264 11.6723C13.9228 11.7285 13.7514 11.7626 13.6282 11.7828C13.5666 11.7929 13.5167 11.7996 13.4807 11.8039C13.4626 11.8061 13.448 11.8076 13.437 11.8087L13.4234 11.81L13.4186 11.8104L13.4168 11.8106L13.416 11.8106C13.4157 11.8107 13.4154 11.8107 13.3704 11.25L13.416 11.8106L13.3929 11.8125H13.3704C12.4693 11.8125 11.7717 11.6348 11.2171 11.3425C10.6627 11.0503 10.2868 10.6623 10.0046 10.2977C9.86569 10.1182 9.74696 9.94078 9.64616 9.78996C9.5407 9.6322 9.46023 9.51197 9.38106 9.41262C9.22707 9.21935 9.16773 9.21939 9.13503 9.21941H9.13398C9.09752 9.21941 9.03241 9.22191 8.87346 9.41718C8.79345 9.51548 8.71127 9.63581 8.60695 9.79107C8.60069 9.80039 8.59437 9.80981 8.58797 9.81934C8.49236 9.96175 8.38151 10.1269 8.25589 10.2929C7.98421 10.6519 7.62551 11.0405 7.10214 11.335C6.57573 11.6313 5.91831 11.8125 5.07599 11.8125H5.0488L5.02173 11.8099L5.07599 11.25C5.02173 11.8099 5.02205 11.8099 5.02173 11.8099L5.0204 11.8097L5.01868 11.8096L5.01405 11.8091L5.00016 11.8076C4.98888 11.8063 4.97357 11.8045 4.95451 11.8019C4.91641 11.7969 4.8632 11.7892 4.79703 11.7779C4.66485 11.7553 4.47999 11.718 4.25972 11.6585C3.82115 11.5401 3.23123 11.3305 2.63538 10.9643C1.42058 10.2176 0.212463 8.83259 0.187947 6.38062C0.163902 3.97575 1.11355 2.587 2.13375 1.81616C2.63171 1.43991 3.12954 1.22329 3.50294 1.10027C3.69026 1.03855 3.84839 0.999684 3.96267 0.975868C4.01989 0.963945 4.06636 0.955744 4.10027 0.950316C4.11724 0.947601 4.13108 0.945576 4.14159 0.944124L4.15484 0.942358L4.15953 0.941769L4.16139 0.941543L4.1622 0.941446C4.16257 0.941403 4.16292 0.941361 4.22872 1.5L4.1622 0.941446L4.19571 0.9375ZM4.26997 2.0625C4.25203 2.06549 4.22575 2.07021 4.19218 2.07721C4.11398 2.09351 3.99723 2.1219 3.85498 2.16877C3.56924 2.26291 3.18912 2.42877 2.81194 2.71376C2.08184 3.2654 1.29234 4.31414 1.31289 6.36938C1.33297 8.37752 2.28763 9.43001 3.22447 10.0058C3.70444 10.3008 4.18756 10.4737 4.55306 10.5724C4.73484 10.6215 4.88477 10.6515 4.98688 10.669C5.03785 10.6778 5.07667 10.6833 5.1013 10.6866C5.10355 10.6869 5.10569 10.6871 5.10771 10.6874C5.76441 10.683 6.21815 10.5416 6.55042 10.3546C6.89104 10.1629 7.13992 9.90327 7.35877 9.61404C7.46458 9.47422 7.55912 9.33345 7.65787 9.18641L7.67313 9.1637C7.77297 9.01508 7.8831 8.85179 8.00097 8.70698C8.23778 8.41606 8.59073 8.09441 9.13398 8.09441C9.6812 8.09441 10.0292 8.42071 10.2609 8.71155C10.3706 8.8492 10.4746 9.00486 10.569 9.14611L10.5815 9.1648C10.6838 9.31787 10.7824 9.46461 10.8943 9.6092C11.1139 9.89292 11.3735 10.1532 11.7416 10.3472C12.1049 10.5387 12.6087 10.6838 13.3424 10.6874C13.3439 10.6873 13.3456 10.6871 13.3473 10.6869C13.368 10.6844 13.4015 10.6799 13.4459 10.6727C13.5349 10.658 13.6667 10.6321 13.8268 10.5879C14.1487 10.4989 14.5748 10.3389 14.9976 10.0563C15.8156 9.50956 16.6875 8.46406 16.6875 6.375C16.6875 4.25124 15.9198 3.20305 15.2331 2.6706C14.8779 2.3952 14.5221 2.24075 14.2564 2.1556C14.124 2.11316 14.0158 2.08853 13.944 2.07485C13.9117 2.0687 13.887 2.0648 13.8709 2.0625H4.26997ZM13.8498 2.05973C13.8494 2.05969 13.8497 2.05972 13.8508 2.05985L13.8498 2.05973Z\" fill={isAnonymised ? \"white\" : \"black\"}/>\n<path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M5.625 5.0625C4.77651 5.0625 4.3125 5.59288 4.3125 6C4.3125 6.40712 4.77651 6.9375 5.625 6.9375C6.47349 6.9375 6.9375 6.40712 6.9375 6C6.9375 5.59288 6.47349 5.0625 5.625 5.0625ZM3.1875 6C3.1875 4.75027 4.40242 3.9375 5.625 3.9375C6.84758 3.9375 8.0625 4.75027 8.0625 6C8.0625 7.24973 6.84758 8.0625 5.625 8.0625C4.40242 8.0625 3.1875 7.24973 3.1875 6Z\" fill={isAnonymised ? \"white\" : \"black\"}/>\n<path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M12.375 5.0625C11.5265 5.0625 11.0625 5.59288 11.0625 6C11.0625 6.40712 11.5265 6.9375 12.375 6.9375C13.2235 6.9375 13.6875 6.40712 13.6875 6C13.6875 5.59288 13.2235 5.0625 12.375 5.0625ZM9.9375 6C9.9375 4.75027 11.1524 3.9375 12.375 3.9375C13.5976 3.9375 14.8125 4.75027 14.8125 6C14.8125 7.24973 13.5976 8.0625 12.375 8.0625C11.1524 8.0625 9.9375 7.24973 9.9375 6Z\" fill={isAnonymised ? \"white\" : \"black\"}/>\n</svg>\n\n </button>\n </div>\n )}\n </div>\n );\n }\n);\n\nTimer.displayName = 'Timer';\n","import React, { useState, useEffect } from 'react';\nimport './ProgressBar.css';\n\nexport interface ProgressBarProps {\n progressEndDate?: number;\n leftTime?: number;\n progressTime?: number;\n className?: string;\n}\n\nexport const ProgressBar: React.FC<ProgressBarProps> = ({ \n progressEndDate, \n leftTime, \n progressTime, \n className = '' \n}) => {\n const [progress, setProgress] = useState(0);\n const [startTime] = useState(Date.now());\n\n useEffect(() => {\n let interval: NodeJS.Timeout | null = null;\n\n if (progressEndDate && !leftTime && !progressTime) {\n const updateProgress = () => {\n const now = Date.now();\n const timeLeft = Math.max(0, progressEndDate - now);\n const totalTime = progressEndDate - startTime;\n const elapsed = now - startTime;\n const progressPercent = Math.max(0, Math.min(100, (elapsed / totalTime) * 100));\n setProgress(progressPercent);\n\n if (timeLeft <= 0) {\n setProgress(100);\n if (interval) clearInterval(interval);\n }\n };\n\n updateProgress();\n interval = setInterval(updateProgress, 100);\n } else if (leftTime !== undefined && progressTime !== undefined) {\n const progressPercent = Math.max(0, Math.min(100, ((progressTime - leftTime) / progressTime) * 100));\n setProgress(progressPercent);\n }\n\n return () => {\n if (interval) clearInterval(interval);\n };\n }, [progressEndDate, leftTime, progressTime, startTime]);\n\n return (\n <div className={`progress-bar ${className}`}>\n <div \n className=\"progress-fill\" \n style={{ width: `${progress}%` }}\n />\n </div>\n );\n};\n\nProgressBar.displayName = 'ProgressBar';\n","import { useState } from 'react';\nimport './Gain.css';\n\nexport function Gain() {\n const [points, setPoints] = useState<number | null>(null);\n\n const handleGainPoints = () => {\n setPoints(200); // example\n setTimeout(() => setPoints(null), 2000); // hide after 2s\n };\n\n return (\n <div className=\"gain\">\n <button onClick={handleGainPoints}>Gain 200</button>\n\n <div className=\"score-area\">{points && <div className=\"points\">+{points}</div>}</div>\n </div>\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { InputNumber } from './InputNumber';\nimport './BuyLine.css';\nimport { Chip } from './Chip';\nimport { ValueWithUnit } from './ValueWithUnit';\n\nconst SendIcon: React.FC<{ className?: string; disabled?: boolean }> = ({\n className,\n disabled,\n}) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n preserveAspectRatio=\"none\"\n width=\"20\"\n height=\"20\"\n overflow=\"visible\"\n className={className}\n viewBox=\"0 0 21 21\"\n fill=\"none\"\n >\n <g id=\"send-email-1\">\n <path\n id=\"Shape\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M1.90273 8.85333C1.37949 8.70573 1.01357 8.2343 1.00037 7.6908C0.987168 7.1473 1.32977 6.65867 1.84523 6.48583L18.5711 1.03083C18.7945 0.958012 19.0398 1.01645 19.2064 1.18215C19.373 1.34785 19.4327 1.5929 19.3611 1.81667L13.9102 18.5508C13.7382 19.0672 13.249 19.4107 12.7049 19.3973C12.1608 19.3839 11.6892 19.0167 11.5427 18.4925L9.67106 10.7167L1.90273 8.85333Z\"\n stroke={disabled ? '#999FA1' : '#009CDF'}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n id=\"Shape_2\"\n d=\"M19.2069 1.18083L9.67106 10.7167\"\n stroke={disabled ? '#999FA1' : '#009CDF'}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n </svg>\n);\n\nconst EditIcon: React.FC<{ className?: string; disabled?: boolean }> = ({\n className,\n disabled,\n}) => (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 25\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M10.1221 5.00073C10.5362 5.00073 10.8719 5.33666 10.8721 5.75073C10.8721 6.16495 10.5363 6.50073 10.1221 6.50073H2.62207C2.20796 6.50073 1.87223 6.83666 1.87207 7.25073V22.2507C1.87207 22.6649 2.20786 23.0007 2.62207 23.0007H17.6221C18.0363 23.0007 18.3721 22.6649 18.3721 22.2507V14.7507C18.3722 14.3367 18.708 14.0007 19.1221 14.0007C19.5362 14.0007 19.8719 14.3367 19.8721 14.7507V22.2507C19.8721 23.4934 18.8647 24.5007 17.6221 24.5007H2.62207C1.37943 24.5007 0.37207 23.4934 0.37207 22.2507V7.25073C0.37223 6.00823 1.37953 5.00073 2.62207 5.00073H10.1221ZM18.501 1.37866C19.6725 0.207539 21.5717 0.207579 22.7432 1.37866C23.9145 2.55026 23.9147 4.45033 22.7432 5.62183L13.1973 15.1677C13.0826 15.2823 12.9339 15.3567 12.7734 15.3796L9.06152 15.9109C8.56668 15.9817 8.14253 15.5571 8.21289 15.0623L8.74219 11.3494C8.76511 11.1888 8.84046 11.0403 8.95508 10.9255L18.501 1.37866ZM21.6826 2.44019C21.0968 1.85439 20.1473 1.85439 19.5615 2.44019L10.1924 11.8093L9.83887 14.2839L12.3135 13.9304L21.6826 4.56128C22.2683 3.9756 22.2681 3.02601 21.6826 2.44019Z\"\n fill={disabled ? '#999FA1' : '#009CDF'}\n />\n </svg>\n);\n\nconst TrashIcon: React.FC<{ className?: string; disabled?: boolean }> = ({\n className,\n disabled,\n}) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n preserveAspectRatio=\"none\"\n width=\"20\"\n height=\"20\"\n overflow=\"visible\"\n className={className}\n viewBox=\"0 0 24 22\"\n fill=\"none\"\n >\n <path\n id=\"color\"\n d=\"M14.6025 0C15.9552 0.000251909 17.0595 1.08982 17.0596 2.44434V3.42188H23.2773C23.6764 3.422 23.9998 3.75048 24 4.15527C24 4.52653 23.7278 4.83328 23.375 4.88184L23.2773 4.88867H20.5312V19.5557C20.531 20.9101 19.426 21.9999 18.0732 22H5.92871C4.57593 22 3.47095 20.9102 3.4707 19.5557V4.88867H0.722656C0.323522 4.88854 0 4.5602 0 4.15527C0.000141537 3.78415 0.272248 3.47726 0.625 3.42871L0.722656 3.42188H6.93945V2.44434C6.93951 1.08966 8.04456 0 9.39746 0H14.6025ZM4.91602 19.5557C4.91625 20.0551 5.30736 20.4737 5.81738 20.5273L5.92773 20.5332H18.0723C18.6355 20.5332 19.0847 20.0908 19.085 19.5557V4.88867H4.91602V19.5557ZM9.39648 8.55566C9.76246 8.55566 10.0654 8.83151 10.1133 9.18945L10.1191 9.28906V16.1338C10.1189 16.5386 9.79557 16.8662 9.39648 16.8662C9.03062 16.8661 8.72852 16.5903 8.68066 16.2324L8.67383 16.1338V9.28906C8.67383 8.88413 8.99735 8.55579 9.39648 8.55566ZM14.6016 8.55566C14.9675 8.55566 15.2705 8.83151 15.3184 9.18945L15.3242 9.28906V16.1328C15.3242 16.5378 15.0008 16.8662 14.6016 16.8662C14.2357 16.8661 13.9336 16.5903 13.8857 16.2324L13.8789 16.1328V9.28906C13.8789 8.88411 14.2024 8.55576 14.6016 8.55566ZM9.39648 1.4668C8.83325 1.46697 8.38483 1.90918 8.38477 2.44434V3.42188H15.6133V2.44434C15.6132 1.94484 15.2229 1.52638 14.7129 1.47266L14.6016 1.4668H9.39648Z\"\n fill={disabled ? '#999FA1' : '#009CDF'}\n />\n </svg>\n);\n\nconst SuccessIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M0.200073 7.99971C0.200073 3.69189 3.69225 0.199707 8.00007 0.199707C12.3079 0.199707 15.8001 3.69189 15.8001 7.99971C15.8001 12.3075 12.3079 15.7997 8.00007 15.7997C3.69225 15.7997 0.200073 12.3075 0.200073 7.99971Z\" fill=\"#4DA466\"/>\n<path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M11.6803 5.68769C11.8527 5.87926 11.8372 6.17433 11.6456 6.34675L7.20112 10.3467C7.02365 10.5065 6.75423 10.5065 6.57676 10.3467L4.35456 8.34674C4.16299 8.17433 4.14746 7.87926 4.31988 7.68769C4.49229 7.49612 4.78736 7.48059 4.97893 7.65301L6.88894 9.37204L11.0212 5.653C11.2128 5.48059 11.5079 5.49612 11.6803 5.68769Z\" fill=\"white\"/>\n</svg>\n);\nconst FailureIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M0.200073 7.99971C0.200073 3.69189 3.69225 0.199707 8.00007 0.199707C12.3079 0.199707 15.8001 3.69189 15.8001 7.99971C15.8001 12.3075 12.3079 15.7997 8.00007 15.7997C3.69225 15.7997 0.200073 12.3075 0.200073 7.99971Z\" fill=\"#EE695C\"/>\n<path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M10.33 5.66989C10.5122 5.85213 10.5122 6.14761 10.33 6.32985L6.32997 10.3299C6.14773 10.5121 5.85225 10.5121 5.67001 10.3299C5.48776 10.1476 5.48776 9.85213 5.67001 9.66989L9.67001 5.66989C9.85225 5.48764 10.1477 5.48764 10.33 5.66989Z\" fill=\"white\"/>\n<path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M5.67001 5.66989C5.85225 5.48764 6.14773 5.48764 6.32997 5.66989L10.33 9.66989C10.5122 9.85213 10.5122 10.1476 10.33 10.3299C10.1477 10.5121 9.85225 10.5121 9.67001 10.3299L5.67001 6.32985C5.48776 6.14761 5.48776 5.85213 5.67001 5.66989Z\" fill=\"white\"/>\n</svg>\n);\nconst PartialIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M0.200073 7.99971C0.200073 3.69189 3.69225 0.199707 8.00007 0.199707C12.3079 0.199707 15.8001 3.69189 15.8001 7.99971C15.8001 12.3075 12.3079 15.7997 8.00007 15.7997C3.69225 15.7997 0.200073 12.3075 0.200073 7.99971Z\" fill=\"#FBA23A\"/>\n<path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M11.6803 5.68769C11.8527 5.87926 11.8372 6.17433 11.6456 6.34675L7.20112 10.3467C7.02365 10.5065 6.75423 10.5065 6.57676 10.3467L4.35456 8.34674C4.16299 8.17433 4.14746 7.87926 4.31988 7.68769C4.49229 7.49612 4.78736 7.48059 4.97893 7.65301L6.88894 9.37204L11.0212 5.653C11.2128 5.48059 11.5079 5.49612 11.6803 5.68769Z\" fill=\"white\"/>\n</svg>\n);\n\nconst SpinnerIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n style={{ animation: 'spin 1s linear infinite' }}\n >\n <path\n d=\"M12 2V6M12 18V22M4.93 4.93L7.76 7.76M16.24 16.24L19.07 19.07M2 12H6M18 12H22M4.93 19.07L7.76 16.24M16.24 7.76L19.07 4.93\"\n stroke=\"#009CDF\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\ninterface BuyLineProps {\n title?: string;\n volume?: string;\n price?: string;\n defaultPrice?: number;\n showSecondInput?: boolean;\n showTrashButton?: boolean;\n disabled?: boolean;\n volumeMax?: { value: number };\n priceMax?: { value: number };\n iconType?: 'send' | 'edit';\n labels?: Array<{\n key: 'volume' | 'price' | 'total';\n label: string;\n }>;\n onVolumeChange?: (value: string) => void;\n onPriceChange?: (value: string) => void;\n onSend?: () => void;\n onClear?: () => void;\n className?: string;\n showStatus?: 'accepted' | 'refused' | 'partial';\n}\n\nexport const BuyLine: React.FC<BuyLineProps> = ({\n title = 'Achat 3',\n volume = '',\n price = '',\n defaultPrice,\n showSecondInput = true,\n showTrashButton = false,\n disabled = false,\n volumeMax,\n priceMax,\n iconType = 'send',\n labels,\n onVolumeChange,\n onPriceChange,\n onSend,\n onClear,\n className = '',\n showStatus,\n}) => {\n const [internalVolume, setInternalVolume] = useState(volume);\n const [internalPrice, setInternalPrice] = useState(price);\n const [showSuccessState, setShowSuccessState] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [volumeHasError, setVolumeHasError] = useState(false);\n const [priceHasError, setPriceHasError] = useState(false);\n\n const handleVolumeChange = (newValue: string) => {\n setInternalVolume(newValue);\n onVolumeChange?.(newValue);\n };\n\n const handleVolumeError = (hasError: boolean) => {\n setVolumeHasError(hasError);\n };\n\n useEffect(() => {\n setInternalVolume(volume);\n }, [volume]);\n\n useEffect(() => {\n setInternalPrice(price);\n }, [price]);\n\n const handlePriceChange = (newValue: string) => {\n setInternalPrice(newValue);\n onPriceChange?.(newValue);\n };\n\n const handlePriceError = (hasError: boolean) => {\n setPriceHasError(hasError);\n };\n\n const handleSend = () => {\n if (internalVolume.trim() !== '' && !volumeHasError && !priceHasError) {\n // Show success state and loading spinner\n setShowSuccessState(true);\n setIsLoading(true);\n\n // Wait 1 second, then execute onSend and cleanup\n setTimeout(() => {\n // Execute the onSend callback\n onSend?.();\n\n // Clear fields and states after successful send\n setInternalVolume('');\n setInternalPrice('');\n setVolumeHasError(false);\n setPriceHasError(false);\n setShowSuccessState(false);\n setIsLoading(false);\n }, 1000);\n }\n };\n\n const handleClear = () => {\n setInternalVolume('');\n setInternalPrice('');\n setVolumeHasError(false);\n setPriceHasError(false);\n setIsLoading(false);\n setShowSuccessState(false);\n onClear?.();\n };\n\n const calculatePrice = () => {\n // Return 0 if there are any validation errors\n if (volumeHasError || priceHasError) {\n return 0;\n }\n\n const volumeNum = parseFloat(internalVolume);\n if (!isNaN(volumeNum)) {\n if (showSecondInput) {\n const priceNum = parseFloat(internalPrice);\n if (!isNaN(priceNum)) {\n return volumeNum * priceNum;\n }\n } else if (defaultPrice !== undefined) {\n return volumeNum * defaultPrice;\n }\n }\n return 0;\n };\n\n const isSendDisabled = internalVolume.trim() === '' || volumeHasError || priceHasError;\n\n return (\n <div className={`buyline ${labels ? 'buyline--has-labels' : ''} ${className}`}>\n {/*labels && (\n <div className=\"buyline__labels\">\n <div className=\"buyline__label buyline__label--title\"></div>\n {labels.map((label) => (\n <>\n <div style={{ width: '64px' }}></div>\n <div key={label.key} className={`buyline__label buyline__label--${label.key}`}>\n {label.label}\n </div>\n </>\n ))}\n </div>\n )*/}\n <div className=\"buyline__container\">\n <div className=\"buyline__content\">\n <div className=\"buyline__inputs\">\n {title && <div className=\"buyline__title\">{title}</div>}\n\n <div className=\"buyline__input_container\">\n {labels?.find((label) => label.key === 'volume') && (\n <div className=\"buyline__label--description\">\n {labels.find((label) => label.key === 'volume')?.label}\n </div>\n )}\n <InputNumber\n label=\"MWh\"\n value={internalVolume}\n onChange={handleVolumeChange}\n onErrorChange={handleVolumeError}\n disabled={disabled}\n min={{ value: 0 }}\n max={volumeMax || { value: 9999 }}\n showSuccess={showSuccessState}\n inputWidth={70}\n />\n </div>\n {showSecondInput && (\n <div className=\"buyline__input_container\">\n {labels?.find((label) => label.key === 'price') && (\n <div className=\"buyline__label--description\">\n {labels.find((label) => label.key === 'price')?.label}\n </div>\n )}\n <InputNumber\n label=\"€/MWh\"\n value={internalPrice}\n onChange={handlePriceChange}\n onErrorChange={handlePriceError}\n disabled={disabled}\n min={{ value: 0 }}\n max={priceMax || { value: 9999 }}\n showSuccess={showSuccessState}\n inputWidth={85}\n />\n </div>\n )}\n </div>\n <div className=\"buyline__recette\">\n {labels?.find((label) => label.key === 'total') && (\n <div className=\"buyline__label--description\">\n {labels.find((label) => label.key === 'total')?.label}\n </div>\n )}\n <div className=\"buyline__total\">\n <Chip width=\"fit-content\" bgColor={calculatePrice() === 0 ? '#F2F4F4' : '#E1F5FD'}>\n <ValueWithUnit\n cost={calculatePrice()}\n textColor={calculatePrice() === 0 ? '#999FA1' : '#005896'}\n type=\"euro\"\n />\n </Chip>\n </div>\n </div>\n </div>\n {showStatus ? (\n <div className=\"buyline__status\">\n {showStatus === 'accepted' ? (\n <SuccessIcon className=\"buyline__status-icon\" />\n ) : showStatus === 'partial' ? (\n <PartialIcon className=\"buyline__status-icon\" />\n ) : (\n <FailureIcon className=\"buyline__status-icon\" />\n )}\n </div>\n ) : (\n <div className=\"buyline__actions\">\n {!disabled && (\n <button\n className={`buyline__send ${isSendDisabled || isLoading ? 'buyline__send--disabled' : ''}`}\n onClick={handleSend}\n disabled={isSendDisabled || isLoading}\n aria-label={isLoading ? 'Sending...' : iconType === 'edit' ? 'Edit' : 'Send'}\n >\n {isLoading ? (\n <SpinnerIcon className=\"buyline__icon\" />\n ) : iconType === 'edit' ? (\n <EditIcon className=\"buyline__icon\" disabled={isSendDisabled} />\n ) : (\n <SendIcon className=\"buyline__icon\" disabled={isSendDisabled} />\n )}\n </button>\n )}\n {showTrashButton && (\n <button\n className=\"buyline__trash\"\n onClick={handleClear}\n disabled={isLoading}\n aria-label=\"Clear\"\n >\n <TrashIcon className=\"buyline__icon\" disabled={isLoading} />\n </button>\n )}\n </div>\n )}\n </div>\n <div className=\"buyline__border\" />\n </div>\n );\n};\n","import React from 'react';\nimport './Button.css';\n\ninterface ButtonProps {\n text: string;\n leftIcon?: string;\n rightIcon?: string;\n onClick?: () => void;\n disabled?: boolean;\n className?: string;\n bgColor?: string;\n textColor?: string;\n size?: 'small' | 'large';\n}\n\nconst getIcon = (iconName: string, color: string = 'white'): React.ReactNode => {\n const iconMap: Record<string, React.ReactNode> = {\n plusIcon: (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8 0C8.27614 0 8.50436 0.205203 8.54048 0.47144L8.54545 0.545455V7.45455H15.4545C15.7558 7.45455 16 7.69875 16 8C16 8.27614 15.7948 8.50436 15.5286 8.54048L15.4545 8.54545H8.54545V15.4545C8.54545 15.7558 8.30125 16 8 16C7.72386 16 7.49564 15.7948 7.45953 15.5286L7.45455 15.4545V8.54545H0.545455C0.244208 8.54545 0 8.30125 0 8C0 7.72386 0.205203 7.49564 0.47144 7.45953L0.545455 7.45455H7.45455V0.545455C7.45455 0.244208 7.69875 0 8 0Z\"\n fill={color}\n />\n </svg>\n ),\n settingIcon: (\n <svg\n width=\"22\"\n height=\"22\"\n viewBox=\"0 0 22 22\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9.78828 3.03085C10.0975 3.37414 10.5379 3.57013 11 3.57013C11.462 3.57013 11.9024 3.37414 12.2116 3.03085L12.995 2.16335C13.4578 1.65028 14.1935 1.48418 14.8319 1.74862C15.4703 2.01307 15.873 2.65078 15.8375 3.34085L15.7775 4.50752C15.754 4.96893 15.927 5.4187 16.2537 5.7454C16.5804 6.07209 17.0302 6.24514 17.4916 6.22168L18.6583 6.16252C19.3475 6.12854 19.9836 6.53156 20.2473 7.16924C20.511 7.80691 20.3452 8.5415 19.8333 9.00418L18.965 9.78835C18.6221 10.0979 18.4265 10.5381 18.4265 11C18.4265 11.4619 18.6221 11.9022 18.965 12.2117L19.8333 12.995C20.3464 13.4579 20.5125 14.1936 20.248 14.832C19.9836 15.4703 19.3459 15.8731 18.6558 15.8375L17.4891 15.7775C17.0279 15.7541 16.5782 15.927 16.2516 16.2535C15.9249 16.58 15.7517 17.0296 15.775 17.4908L15.835 18.6575C15.8684 19.3461 15.4658 19.9815 14.8289 20.2452C14.1919 20.5089 13.458 20.3441 12.995 19.8333L12.2116 18.9658C11.9021 18.623 11.4618 18.4274 11 18.4274C10.5381 18.4274 10.0978 18.623 9.78828 18.9658L9.00495 19.8333C8.54185 20.3424 7.80925 20.5064 7.17332 20.2433C6.53739 19.9803 6.13474 19.3466 6.16662 18.6592L6.22662 17.4925C6.25096 17.03 6.07763 16.579 5.74985 16.2519C5.42206 15.9247 4.9707 15.7523 4.50828 15.7775L3.34162 15.8375C2.65202 15.8719 2.01534 15.4688 1.75157 14.8307C1.4878 14.1926 1.65399 13.4576 2.16662 12.995L3.03495 12.2117C3.37776 11.9022 3.57341 11.4619 3.57341 11C3.57341 10.5381 3.37776 10.0979 3.03495 9.78835L2.16662 9.00418C1.65823 8.54096 1.49469 7.80879 1.75767 7.17327C2.02065 6.53776 2.65373 6.13523 3.34078 6.16668L4.50745 6.22585C4.96977 6.25017 5.42065 6.07695 5.74777 5.74936C6.07489 5.42176 6.24744 4.97063 6.22245 4.50835L6.16662 3.34085C6.13474 2.65339 6.53739 2.01978 7.17332 1.75671C7.80925 1.49363 8.54185 1.65761 9.00495 2.16668L9.78828 3.03085Z\"\n stroke={color}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M10.0625 15.0626C10.0625 14.5448 10.4822 14.1251 11 14.1251C11.5178 14.1251 11.9375 14.5448 11.9375 15.0626C11.9375 15.5803 11.5178 16.0001 11 16.0001C10.4822 16.0001 10.0625 15.5803 10.0625 15.0626Z\"\n fill={color}\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M11 5.37506C11.3452 5.37506 11.625 5.65488 11.625 6.00006V12.2501C11.625 12.5952 11.3452 12.8751 11 12.8751C10.6548 12.8751 10.375 12.5952 10.375 12.2501V6.00006C10.375 5.65488 10.6548 5.37506 11 5.37506Z\"\n fill={color}\n />\n </svg>\n ),\n arrowDownIcon: (\n <svg\n width=\"16\"\n height=\"10\"\n viewBox=\"0 0 16 10\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M15.8235 1.61477C16.065 1.35365 16.0578 0.946887 15.8072 0.694302C15.5566 0.441718 15.153 0.434496 14.8933 0.677901L7.87732 7.74957L1.10614 0.677901C0.847065 0.434503 0.442824 0.441725 0.192211 0.694302C-0.0577526 0.946887 -0.0649185 1.35365 0.176588 1.61477L7.87729 9.5L15.8235 1.61477Z\"\n fill=\"white\"\n />\n </svg>\n ),\n };\n return iconMap[iconName];\n};\n\nexport const Button = ({\n text,\n leftIcon,\n rightIcon,\n onClick,\n disabled = false,\n className = '',\n bgColor,\n textColor,\n size = 'large',\n}: ButtonProps) => {\n const getSizeStyles = (size: 'small' | 'large'): React.CSSProperties => {\n switch (size) {\n case 'small':\n return { height: '32px', padding: '8px 12px' };\n case 'large':\n return { height: '40px', padding: '12px 16px' };\n default:\n return { height: '40px', padding: '12px 16px' };\n }\n };\n\n const buttonStyle: React.CSSProperties = {\n ...getSizeStyles(size),\n ...(bgColor && { backgroundColor: bgColor }),\n ...(textColor && { color: textColor }),\n };\n\n return (\n <button\n className={`button ${className}`}\n onClick={onClick}\n disabled={disabled}\n data-name=\"Button\"\n style={buttonStyle}\n >\n {leftIcon && getIcon(leftIcon, textColor || 'white') && (\n <div className=\"button-icon\" data-name={leftIcon}>\n {getIcon(leftIcon, textColor || 'white')}\n </div>\n )}\n <div className=\"button-text\" style={textColor ? { color: textColor } : {}}>\n <p>{text}</p>\n </div>\n {rightIcon && getIcon(rightIcon, textColor || 'white') && (\n <div className=\"button-icon\" data-name={rightIcon}>\n {getIcon(rightIcon, textColor || 'white')}\n </div>\n )}\n </button>\n );\n};\n","import React, { useState } from 'react';\nimport './Accordion.css';\n\ninterface AccordionProps {\n title: string;\n openedContent?: React.ReactNode;\n closedContent?: React.ReactNode;\n defaultOpen?: boolean;\n className?: string;\n theme?: 'white' | 'blue';\n onToggle?: (isOpen: boolean) => void;\n}\n\nconst ArrowIcon = ({ isOpen, theme }: { isOpen: boolean; theme: 'white' | 'blue' }) => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={`accordion-arrow ${isOpen ? 'accordion-arrow--open' : ''}`}\n >\n <path\n d=\"M4 6L8 10L12 6\"\n stroke={theme === 'blue' ? '#ffffff' : '#11161A'}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\nexport const Accordion = ({\n title,\n openedContent,\n closedContent,\n defaultOpen = false,\n className = '',\n theme = 'white',\n onToggle,\n}: AccordionProps) => {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n\n const handleToggle = () => {\n const newIsOpen = !isOpen;\n setIsOpen(newIsOpen);\n onToggle?.(newIsOpen);\n };\n\n const themeClass = theme === 'blue' ? 'accordion--blue' : 'accordion--white';\n\n return (\n <div className={`accordion ${themeClass} ${className}`} data-name=\"Accordion\">\n <div className=\"accordion-header\" onClick={handleToggle}>\n <div className=\"accordion-title\">\n <p>{title}</p>\n </div>\n <ArrowIcon isOpen={isOpen} theme={theme} />\n </div>\n {((isOpen && openedContent) || (!isOpen && closedContent)) && (\n <div className=\"accordion-content\">\n <div className=\"accordion-content-item\">\n {isOpen ? openedContent : closedContent}\n </div>\n </div>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { Chip } from './Chip';\nimport './Ecart.css';\nimport { ValueWithUnit } from './ValueWithUnit';\n\ninterface EcartProps {\n /** The label text to display before the chip */\n label: string;\n /** The value to display inside the chip */\n value: string;\n /** Background color of the chip */\n chipBgColor?: string;\n /** Text color of the chip content */\n chipTextColor?: string;\n /** Icon to display next to the label - 'plus', 'minus', or none */\n icon?: 'plus' | 'minus';\n /** Style object to apply to the ecart-container */\n style?: React.CSSProperties;\n /** Additional CSS class name */\n className?: string;\n}\n\nconst PlusIcon = () => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"24\" height=\"24\" rx=\"12\" fill=\"#EAECED\" />\n <path\n d=\"M12.8555 11.1641H15.8789V12.875H12.8555V15.8828H11.1445V12.875H8.12109V11.1641H11.1445V8.11719H12.8555V11.1641Z\"\n fill=\"#11161A\"\n />\n </svg>\n);\n\nconst MinusIcon = () => (\n <svg width=\"25\" height=\"24\" viewBox=\"0 0 25 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"0.5\" width=\"24\" height=\"24\" rx=\"12\" fill=\"#EAECED\" />\n <path d=\"M15.1534 11.0396V12.96H9.84656V11.0396H15.1534Z\" fill=\"#11161A\" />\n </svg>\n);\n\nexport const Ecart: React.FC<EcartProps> = ({\n label,\n value,\n chipBgColor = '#d3d64e',\n chipTextColor = '#11161a',\n icon,\n style,\n className = '',\n}) => {\n return (\n <div \n className={`ecart-container ${className}`} \n style={style}\n data-name=\"Ecart\"\n >\n <div className=\"ecart-content\">\n <div className=\"ecart-label\">\n <span>{label}</span>\n </div>\n <div className=\"ecart-icon-container\">\n {icon && (\n <div className=\"ecart-icon-wrapper\">\n {icon === 'plus' ? <PlusIcon /> : <MinusIcon />}\n </div>\n )}\n <div className=\"ecart-value-wrapper\">\n <Chip bgColor={chipBgColor}>\n <ValueWithUnit cost={parseFloat(value)} type=\"megawatt\" textColor={chipTextColor} />\n </Chip>\n </div>\n </div>\n </div>\n </div>\n );\n};\n"],"names":["InputNumber","_a","label","_b","value","onChange","onErrorChange","_c","disabled","_d","className","_e","required","_f","min","_g","max","_h","showSuccess","inputWidth","_j","useState","internalValue","setInternalValue","_k","isFocused","setIsFocused","_l","isOutOfRange","setIsOutOfRange","_m","calculatedWidth","setCalculatedWidth","inputRef","useRef","labelRef","finalInputWidth","useEffect","current","context","document","createElement","getContext","styles","window","getComputedStyle","font","concat","fontSize","fontFamily","textWidth","measureText","width","calculatedWidth_1","Math","containerClasses","length","filter","Boolean","join","_jsx","_jsxs","style","children","ref","type","e","newValue","target","numValue","parseFloat","isNaN","outOfRange","clampedValue","toString","onFocus","select","onBlur","clampedString","step","ImgOn","isOff","height","viewBox","fill","xmlns","d","SwitchThumb","cx","cy","r","Switch","checked","showIcon","internalChecked","setInternalChecked","isChecked","undefined","switchClasses","wrapperClasses","role","onClick","newChecked","Chip","bgColor","chipClasses","backgroundColor","ProductionUnit","onChangeInput","onChangeSwitch","defaultValue","defaultChecked","unitName","energyCost","checkedImage","uncheckedImage","readonly","unitLabel","editable","currentValue","boxShadow","ValueWithUnit","cost","textColor","val","color","Histogram","relative","barHeight","barWidth","orientation","cornerRadius","showGain","animatedHeight","setAnimatedHeight","animatedWidth","setAnimatedWidth","gainPoints","setGainPoints","_o","isPositiveChange","setIsPositiveChange","previousValueRef","isFirstRender","animationTimerRef","accumulatedChangeRef","animationStartValueRef","targetHeight","targetWidth","changeAmount","clearTimeout","totalChange","isIncrease","abs","setTimeout","startTime","Date","now","animate","elapsed","progress","easeOutQuart","pow","requestAnimationFrame","displayWidth","displayHeight","svgWidth","svgHeight","createRoundedRectPath","x","y","radii","topLeft","topRight","bottomLeft","bottomRight","trim","replace","defaultCornerRadius","corners","id","fillOpacity","opacity","clipPath","ProductionUnitContainer","Avatar","size","__assign","Object","assign","t","s","i","n","arguments","p","prototype","hasOwnProperty","call","apply","this","SuppressedError","formatTime","seconds","minutes","floor","secs","padStart","Timer","React","forwardRef","phases","externalState","onStateChange","onComplete","onPhaseComplete","onTick","onUnfreeze","onUnpause","onPause","onFreeze","onAnonymiseToggle","onStop","onReset","onPrevious","onNext","onPhaseClick","gameActions","user","currentPhase","currentTime","isRunning","isPaused","isFrozen","getCurrentPhaseIndex","useCallback","findIndex","phase","title","indexOf","getPhaseByIndex","index","getPhaseTitle","selectedPhase","setSelectedPhase","isAnonymised","setIsAnonymised","intervalRef","start","currentPhaseIndex","wasUnpausing","wasUnfreezing","pause","freeze","force","nextFrozen","newState","toggleAnonymise","prev","next","stop","reset","setTimerPhases","useImperativeHandle","setPhases","getCurrentTime","getCurrentPhase","setInterval","newTimeMs","phaseDurationMs","duration","willCompletePhase","timeToUpdate","clearInterval","currentPhaseData","currentPhaseDurationMs","currentTimeSeconds","currentPhaseDurationSeconds","isAtEnd","timerClasses","finalRemainingTime","toUpperCase","steps","maxSteps","isActive","isCompleted","hasAction","isClickable","stepClass","handleClick","commonProps","tabIndex","onKeyDown","key","preventDefault","push","rx","transform","renderStepIndicators","targetIndex","fillRule","clipRule","stroke","strokeWidth","strokeMiterlimit","strokeLinecap","strokeLinejoin","displayName","ProgressBar","progressEndDate","leftTime","progressTime","setProgress","interval","progressPercent","updateProgress","timeLeft","totalTime","Gain","points","setPoints","SendIcon","preserveAspectRatio","overflow","EditIcon","TrashIcon","SuccessIcon","FailureIcon","PartialIcon","SpinnerIcon","animation","BuyLine","volume","price","defaultPrice","showSecondInput","showTrashButton","volumeMax","priceMax","iconType","labels","onVolumeChange","onPriceChange","onSend","onClear","showStatus","internalVolume","setInternalVolume","_p","internalPrice","setInternalPrice","_q","showSuccessState","setShowSuccessState","_r","isLoading","setIsLoading","_s","volumeHasError","setVolumeHasError","_t","priceHasError","setPriceHasError","calculatePrice","volumeNum","priceNum","isSendDisabled","find","hasError","getIcon","iconName","plusIcon","settingIcon","arrowDownIcon","Button","text","leftIcon","rightIcon","buttonStyle","padding","getSizeStyles","ArrowIcon","isOpen","theme","Accordion","openedContent","closedContent","defaultOpen","onToggle","setIsOpen","newIsOpen","PlusIcon","MinusIcon","Ecart","chipBgColor","chipTextColor","icon"],"mappings":"kIAiBO,IAAMA,EAA0C,SAACC,GACtD,IAAAC,EAAKD,EAAAC,MACLC,EAAUF,EAAAG,MAAVA,OAAK,IAAAD,EAAG,GAAEA,EACVE,EAAQJ,EAAAI,SACRC,EAAaL,EAAAK,cACbC,EAAgBN,EAAAO,SAAhBA,OAAQ,IAAAD,GAAQA,EAChBE,EAAcR,EAAAS,UAAdA,OAAS,IAAAD,EAAG,GAAEA,EACdE,EAAAV,EAAAW,SAAAA,OAAQ,IAAAD,GAAQA,EAChBE,EAAAZ,EAAAa,IAAAA,OAAM,IAAAD,EAAA,CAAET,MAAO,GAAGS,EAClBE,QAAAC,OAAM,IAAAD,EAAA,CAAEX,MAAO,OACfa,EAAAhB,EAAAiB,YAAAA,OAAc,IAAAD,GAAKA,EACnBE,EAAUlB,EAAAkB,WAEJC,EAAoCC,EAASjB,GAA5CkB,EAAaF,EAAA,GAAEG,EAAgBH,EAAA,GAChCI,EAA4BH,GAAS,GAApCI,EAASD,EAAA,GAAEE,EAAYF,EAAA,GACxBG,EAAkCN,GAAS,GAA1CO,EAAYD,EAAA,GAAEE,EAAeF,EAAA,GAC9BG,EAAwCT,EAAS,IAAhDU,EAAeD,EAAA,GAAEE,EAAkCF,EAAA,GACpDG,EAAWC,EAAyB,MACpCC,EAAWD,EAAyB,MAGpCE,EAAkBjB,GAAcY,EAGtCM,EAAU,WACR,IAAKlB,GAAcgB,EAASG,QAAS,CAEnC,IACMC,EADSC,SAASC,cAAc,UACfC,WAAW,MAClC,GAAIH,EAAS,CAEX,IAAMI,EAASC,OAAOC,iBAAiBV,EAASG,SAChDC,EAAQO,KAAO,GAAAC,OAAGJ,EAAOK,SAAQ,KAAAD,OAAIJ,EAAOM,YAG5C,IAAMC,EAAYX,EAAQY,YAAYjD,GAASU,EAAW,IAAM,KAAKwC,MAK/DC,EAAkBC,KAAKtC,IAAI,GAAIkC,EAAY,IACjDlB,EAAmBqB,EACpB,CACF,CACF,EAAE,CAACnD,EAAOU,EAAUO,IAErBkB,EAAU,WACRd,EAAiBnB,EACnB,EAAG,CAACA,IAEJ,IA8DMmD,EAAmB,CACvB,kBACA9B,EAAY,2BAA6B,GAJnBA,GAAaH,EAAckC,OAAS,EAKxC,4BAA8B,GAChDhD,EAAW,4BAA8B,GACzCoB,EAAe,yBAA2B,GAC1CV,EAAc,2BAA6B,GAC3CR,GAEC+C,OAAOC,SACPC,KAAK,KAER,OACEC,EAAK,MAAA,CAAAlD,UAAW6C,WACdM,EAAK,MAAA,CAAAnD,UAAU,8BACZI,EAAIZ,OACH2D,EAAK,MAAA,CAAAnD,UAAU,sBACZI,EAAIZ,MACL0D,WACC9C,EAAIV,SAITyD,EAAK,MAAA,CAAAnD,UAAU,cAAcoD,MAAO,CAAEV,MAAO,GAAGL,OAAAX,SAAqB2B,SAAA,CACnEH,EACE,QAAA,CAAAI,IAAK/B,EACLgC,KAAK,SACL7D,MAAOkB,EACPjB,SA1FW,SAAC6D,GACpB,IAAMC,EAAWD,EAAEE,OAAOhE,MAM1B,GAHAmB,EAAiB4C,GAGA,KAAbA,EAAiB,CACnB,IAAME,EAAWC,WAAWH,GAC5B,GAAKI,MAAMF,GAcTxC,GAAgB,GAChBvB,SAAAA,GAAgB,GAChBD,SAAAA,EAAW8D,OAhBS,CACpB,IAAMK,EAAaH,EAAWvD,EAAIV,OAASiE,EAAWrD,EAAIZ,MAI1D,GAHAyB,EAAgB2C,GAChBlE,SAAAA,EAAgBkE,GAEZA,EAAY,CAEd,IAAMC,EAAenB,KAAKtC,IAAIF,EAAIV,MAAOkD,KAAKxC,IAAIE,EAAIZ,MAAOiE,IAC7DhE,SAAAA,EAAWoE,EAAaC,WACzB,MAECrE,SAAAA,EAAW8D,EAEd,CAKF,MACCtC,GAAgB,GAChBvB,SAAAA,GAAgB,GAChBD,SAAAA,EAAW8D,EAEf,EA2DUQ,QA1DU,WAClBjD,GAAa,GAETO,EAASK,SACXL,EAASK,QAAQsC,QAErB,EAqDUC,OAnDS,WAIjB,GAHAnD,GAAa,GAGS,KAAlBJ,EAAsB,CACxB,IAAM+C,EAAWC,WAAWhD,GAC5B,IAAKiD,MAAMF,GAAW,CACpB,IAAMI,EAAenB,KAAKtC,IAAIF,EAAIV,MAAOkD,KAAKxC,IAAIE,EAAIZ,MAAOiE,IAC7D,GAAII,IAAiBJ,EAAU,CAC7B,IAAMS,EAAgBL,EAAaC,WACnCnD,EAAiBuD,GACjBzE,SAAAA,EAAWyE,EACZ,CACDjD,GAAgB,GAChBvB,SAAAA,GAAgB,EACjB,CACF,CACH,EAmCUE,SAAUA,EACVI,SAAUA,EACVF,UAAU,gBACVoD,MAAO,CAAEV,MAAO,GAAAL,OAAGX,EAAmB,OAC1B,aAAAlC,EACZY,IAAKA,EAAIV,MACTY,IAAKA,EAAIZ,MACT2E,KAAM,IAERlB,WAAOG,IAAK7B,EAAUzB,UAAU,wBAC7BR,EACAU,GAAYgD,UAAMlD,UAAU,iBAAgBqD,SAAA,YAGhD/C,EAAId,OACH2D,EAAK,MAAA,CAAAnD,UAAU,YAAWqD,SAAA,CACvB/C,EAAId,MACL0D,EAAA,KAAA,CAAA,GAAQ,IAAA5C,EAAIZ,aAMxB,ECjLM4E,EAAQ,SAAC/E,GAAE,IAAAgF,EAAKhF,EAAAgF,MAAgB,OACpCrB,EAAK,MAAA,CAAAR,MAAM,KAAK8B,OAAO,KAAKC,QAAQ,YAAYC,KAAK,OAAOC,MAAM,6BAA4BtB,SAC5FH,UACE0B,EAAE,8wBACFF,KAAMH,EAAQ,UAAY,aAJM,EAQhCM,EAAc,SAACtF,GAAE,IAAAgF,EAAKhF,EAAAgF,MAAgB,OAC1CrB,SAAKR,MAAM,KAAK8B,OAAO,KAAKC,QAAQ,YAAYC,KAAK,OAAOC,MAAM,6BAA4BtB,SAC5FH,EAAQ,SAAA,CAAA4B,GAAG,KAAKC,GAAG,KAAKC,EAAE,KAAKN,KAAMH,EAAQ,QAAU,aAFf,EAc/BU,EAAgC,SAAC1F,OAC5CE,EAAeF,EAAA2F,QAAfA,OAAO,IAAAzF,GAAQA,EACfE,EAAQJ,EAAAI,SACRE,EAAAN,EAAAO,SAAAA,cAAgBD,EAChBE,EAAAR,EAAA4F,SAAAA,cAAepF,EACfP,EAAKD,EAAAC,MAECS,EAAwCU,EAASuE,GAAhDE,EAAenF,EAAA,GAAEoF,EAAkBpF,EAAA,GAGpCqF,OAAwBC,IAAZL,EAAwBA,EAAUE,EAa9CI,EAAgB,CACpB,SACAF,EAAY,kBAAoB,GAChCxF,EAAW,mBAAqB,IAE/BiD,OAAOC,SACPC,KAAK,KAEFwC,EAAiB,CAAC,iBAAkBH,EAAY,0BAA4B,IAC/EvC,OAAOC,SACPC,KAAK,KAER,OACEC,SAAKlD,UAAU,mBACbqD,SAAAF,EAAA,MAAA,CAAKnD,UAAWyF,YACbN,EACCjC,SAAKlD,UAAU,cAAaqD,SAC1BH,EAACoB,GAAMC,OAAQe,MAEf9F,EACF0D,SAAKlD,UAAU,eAAgBqD,SAAA7D,IAC7B,KACJ0D,YACEK,KAAK,SACLmC,KAAK,SACS,eAAAJ,EACdtF,UAAWwF,EACXG,QAtCa,WACnB,IAAI7F,EAAJ,CAEA,IAAM8F,GAAcN,OAEJC,IAAZL,GACFG,EAAmBO,GAErBjG,SAAAA,EAAWiG,EAPU,CAQvB,EA8BQ9F,SAAUA,EAAQuD,SAElBH,UAAMlD,UAAU,eACdqD,SAAAH,EAAA,OAAA,CAAMlD,UAAU,eACdqD,SAAAH,EAAC2B,EAAW,CAACN,OAAQe,cAOnC,EChFaO,EAA4B,SAACtG,OAAE8D,EAAQ9D,EAAA8D,SAAEyC,EAAOvG,EAAAuG,QAAErG,UACvDsG,EAAc,CAClB,iBACU,qBAHyD,IAAAtG,EAAA,cAAaA,GAGvD,6BAA+B,+BACxDwD,KAAK,KAEP,OACEC,EAAA,MAAA,CAAKlD,UAAW+F,EAAa3C,MAAO,CAAE4C,gBAAiBF,GAASzC,SAC9DH,EAAK,MAAA,CAAAlD,UAAU,eACbqD,SAAAH,EAAA,MAAA,CAAKlD,UAAU,aAAYqD,SAAEA,OAIrC,ECKa4C,EAAiB,SAAC1G,GAC7B,IAAA2G,kBACAC,mBACAC,iBACA3G,EAAAF,EAAA8G,eAAAA,OAAc,IAAA5G,GAAQA,EACtBC,EAAKH,EAAAG,MACLwF,EAAO3F,EAAA2F,QACPrF,aAAAyG,aAAW,kBAAiBzG,EAC5BE,EAAcR,EAAAgH,WAAdA,OAAa,IAAAxG,EAAA,IACbyG,iBACAC,mBACAxG,EAAAV,EAAAmH,SAAAA,OAAQ,IAAAzG,GAAQA,EAChBE,EAAkCZ,EAAAa,IAAlCA,OAAM,IAAAD,EAAA,CAAET,MAAO,GAAIF,MAAO,QAAQW,EAClCE,EAAmCd,EAAAe,IAAnCA,OAAM,IAAAD,EAAA,CAAEX,MAAO,IAAKF,MAAO,QAAQa,EACnCE,EAAehB,EAAAoH,UAAfA,OAAY,IAAApG,EAAA,MACZG,EAAAnB,EAAAqH,SAAAA,OAAQ,IAAAlG,GAAOA,EAGTI,EAAwCH,EAAS0F,GAAhDjB,EAAetE,EAAA,GAAEuE,EAAkBvE,EAAA,GACpCG,EAAoCN,EAASyF,GAA5CxF,EAAaK,EAAA,GAAEJ,EAAgBI,EAAA,GAGhCqE,OAAwBC,IAAZL,EAAwBA,EAAUE,EAC9CyB,OAAyBtB,IAAV7F,EAAsBA,EAAQkB,EAyCnD,OACEsC,EACE,MAAA,CAAAlD,UAAU,gCACVoD,MAAO,CACL0D,UAAWF,EAAW,uCAAyC,QAGjEvD,SAAAF,EAAA,MAAA,CAAKnD,UAAU,sCACbmD,EAAK,MAAA,CAAAnD,UAAU,0BAAyBqD,SAAA,CACtCF,SAAKnD,UAAU,0BACZqD,SAAA,CAAAiC,EAAYkB,EAAeC,EAC5BvD,EAAA,MAAA,CAAKlD,UAAU,+BAAuB2G,OAExCxD,EAAK,MAAA,CAAAnD,UAAU,uBAAsBqD,SAAA,CACnCH,SAAKlD,UAAU,4BAA6BqD,SAAAiD,IAE5CpD,EAAC2C,GAAKnD,MAAM,cAAcoD,QAAQ,UAASzC,SACzCH,EAAC6D,EAAc,CAAAC,KAAMT,EAAYU,UAAU,iBAG/C9D,EAAA,MAAA,CAAKnD,UAAU,mCACbqD,SAAA,CAAAH,EAAC5D,EACC,CAAAE,MAAM,KACNG,SAlDc,SAACuH,GAEzB,GAAY,KAARA,EAQF,YANc3B,IAAV7F,GACFmB,OAAiB0E,QAEfW,GACFA,EAAc,IAKlB,IAAMvC,EAAWC,WAAWsD,GACvBrD,MAAMF,UAEK4B,IAAV7F,GACFmB,EAAiB8C,GAIfuC,GACFA,EAAcvC,GAGpB,EA0BYjE,WAAwB6F,IAAjBsB,EAA6BA,EAAa7C,gBAAauB,EAC9DzF,UAAWwF,GAAaoB,EACxBtG,IAAK,CAAEV,MAAOU,EAAIV,MAAOF,MAAOY,EAAIZ,OACpCc,IAAK,CAAEZ,MAAOY,EAAIZ,MAAOF,MAAOc,EAAId,SACnC,UAINoH,EACC1D,EAAC+B,GAAOC,QAASI,EAAW3F,SAxET,SAACiG,QAEVL,IAAZL,GACFG,EAAmBO,GAIjBO,GACFA,EAAeP,EAEnB,EA8DkE9F,SAAU4G,IAClEpB,EACFpC,EAAC2C,EAAK,CAAAC,QAAQ,UAASzC,SACrBH,UAAME,MAAO,CAAE+D,MAAO,WAA4B9D,SAAA,eAElD,SAIZ,ECpGa+D,EAAsC,SAAC7H,eAClDe,QACA+G,EAAQ9H,EAAA8H,SACRlH,cAAAmH,OAAY,IAAAnH,EAAA,MACZE,EAAAd,EAAAgI,SAAAA,aAAW,GAAElH,EACbE,EAAAhB,EAAAiI,YAAAA,OAAW,IAAAjH,EAAG,WAAUA,EACxBkH,EAAYlI,EAAAkI,aACZ/G,EAAAnB,EAAAmI,SAAAA,OAAQ,IAAAhH,GAAQA,EAChB2C,EAAQ9D,EAAA8D,SAEFvC,EAAsCH,EAAS,GAA9CgH,EAAc7G,EAAA,GAAE8G,EAAiB9G,EAAA,GAClCG,EAAoCN,EAAS,GAA5CkH,EAAa5G,EAAA,GAAE6G,EAAgB7G,EAAA,GAChCG,EAA8BT,EAAwB,MAArDoH,EAAU3G,EAAA,GAAE4G,EAAa5G,EAAA,GAC1B6G,EAA0CtH,GAAkB,GAA3DuH,EAAgBD,EAAA,GAAEE,EAAmBF,EAAA,GACtCG,EAAmB5G,EAAO6F,EAAS3H,OACnC2I,EAAgB7G,GAAO,GACvB8G,EAAoB9G,EAA8B,MAClD+G,EAAuB/G,EAAe,GACtCgH,EAAyBhH,EAAe6F,EAAS3H,OAGjD+I,EAAgB7F,KAAKxC,IAAKiH,EAAS3H,MAAQY,EAAIZ,MAAS,IAAK,KAAO,IAAO4H,EAC3EoB,EAAe9F,KAAKxC,IAAKiH,EAAS3H,MAAQY,EAAIZ,MAAS,IAAK,KAAO,KAAwB,eAAhB8H,EAA+BF,EAAYC,GAG5H5F,EAAU,WAER,GAAI0G,EAAczG,QAIhB,OAHAyG,EAAczG,SAAU,EACxBwG,EAAiBxG,QAAUyF,EAAS3H,WACpC8I,EAAuB5G,QAAUyF,EAAS3H,OAI5C,GAAIgI,GAAYL,EAAS3H,QAAU0I,EAAiBxG,QAAS,CAC3D,IAAM+G,EAAetB,EAAS3H,MAAQ0I,EAAiBxG,QAGnD0G,EAAkB1G,SACpBgH,aAAaN,EAAkB1G,SAE/B2G,EAAqB3G,SAAW+G,IAGhCH,EAAuB5G,QAAUwG,EAAiBxG,QAClD2G,EAAqB3G,QAAU+G,GAIjCP,EAAiBxG,QAAUyF,EAAS3H,MAGpC,IAAMmJ,EAAcxB,EAAS3H,MAAQ8I,EAAuB5G,QACtDkH,EAAaD,EAAc,EAajC,OAXAb,EAAcpF,KAAKmG,IAAIF,IACvBV,EAAoBW,GAGpBR,EAAkB1G,QAAUoH,WAAW,WACrChB,EAAc,MACdM,EAAkB1G,QAAU,KAC5B2G,EAAqB3G,QAAU,EAC/B4G,EAAuB5G,QAAUyF,EAAS3H,KAC3C,EAAE,KAEI,WACD4I,EAAkB1G,UACpBgH,aAAaN,EAAkB1G,SAC/B0G,EAAkB1G,QAAU,KAEhC,CACD,CAAW8F,IAEVU,EAAiBxG,QAAUyF,EAAS3H,MACpC8I,EAAuB5G,QAAUyF,EAAS3H,MAE7C,EAAE,CAAC2H,EAAS3H,MAAOgI,IAGpB/F,EAAU,WACR,OAAO,WACD2G,EAAkB1G,SACpBgH,aAAaN,EAAkB1G,QAEnC,CACD,EAAE,IAGHD,EAAU,WACRiG,EAAkB,GAClBE,EAAiB,GAEjB,IAAMmB,EAAYC,KAAKC,MAGjBC,EAAU,WACd,IAAMC,EAAUH,KAAKC,MAAQF,EACvBK,EAAW1G,KAAKxC,IAAIiJ,EAJX,IAI+B,GAGxCE,EAAe,EAAI3G,KAAK4G,IAAI,EAAIF,EAAU,GAEhD1B,EAAkBa,EAAec,GACjCzB,EAAiBY,EAAca,GAE3BD,EAAW,GACbG,sBAAsBL,EAE1B,EAEAK,sBAAsBL,EACxB,EAAG,CAACX,EAAcC,IAElB,IAAMgB,EAA+B,eAAhBlC,EAA+BF,EAAYC,EAC1DoC,EAAgC,eAAhBnC,EAA+BD,EAAWD,EAC1DsC,EAA2B,eAAhBpC,EAA+BF,EAAYC,EACtDsC,EAA4B,eAAhBrC,EAA+BD,EAAWD,EAGtDwC,EAAwB,SAC5BC,EACAC,EACAtH,EACA8B,EACAyF,GAEQ,IAAAC,EAA+CD,UAAtCE,EAAsCF,EAAKE,SAAjCC,EAA4BH,EAAlBG,WAAEC,EAAgBJ,cAEvD,MAAO,aAAA5H,OACD0H,EAAIG,cAAWF,EAAC,cAAA3H,OAChB0H,EAAIrH,EAAQyH,EAAQ,KAAA9H,OAAI2H,EACxB,cAAA3H,OAAA0H,EAAIrH,EAAK,KAAAL,OAAI2H,EAAK,KAAA3H,OAAA0H,EAAIrH,EAAK,KAAAL,OAAI2H,EAAIG,uBACnCJ,EAAIrH,EAAS,KAAAL,OAAA2H,EAAIxF,EAAS6F,EAC1B,cAAAhI,OAAA0H,EAAIrH,EAAK,KAAAL,OAAI2H,EAAIxF,EAAM,KAAAnC,OAAI0H,EAAIrH,EAAQ2H,EAAW,KAAAhI,OAAI2H,EAAIxF,uBAC1DuF,EAAIK,EAAc,KAAA/H,OAAA2H,EAAIxF,EAAM,cAAAnC,OAC5B0H,EAAK,KAAA1H,OAAA2H,EAAIxF,EAAM,KAAAnC,OAAI0H,EAAK,KAAA1H,OAAA2H,EAAIxF,EAAS4F,EACrC,cAAA/H,OAAA0H,cAAKC,EAAIE,EACT,cAAA7H,OAAA0H,cAAKC,EAAC,KAAA3H,OAAI0H,EAAIG,EAAW,KAAA7H,OAAA2H,EAE9B,mBACEM,OACAC,QAAQ,OAAQ,IACrB,EAGMC,EAAsB,CAAEN,QAAS,EAAGC,SAAU,EAAGC,WAAY,EAAGC,YAAa,GAC7EI,EAAUhD,EACZ,CACEyC,QAAiC,UAAxBzC,EAAayC,eAAW,IAAAzK,EAAAA,EAAA+K,EAAoBN,QACrDC,SAAmC,UAAzB1C,EAAa0C,gBAAY,IAAAtK,EAAAA,EAAA2K,EAAoBL,SACvDC,WAAuC,UAA3B3C,EAAa2C,kBAAc,IAAArK,EAAAA,EAAAyK,EAAoBJ,WAC3DC,YAAyC,UAA5B5C,EAAa4C,mBAAe,IAAApK,EAAAA,EAAAuK,EAAoBH,aAE/DG,EAEJ,OACEtH,EACE,MAAA,CAAAlD,UAAW,uBAAuBqC,OAAgB,eAAhBmF,EAA+B,kCAAoC,aAErGrE,EACE,MAAA,CAAAnD,UAAW,qBAAAqC,OAAqC,eAAhBmF,EAA+B,gCAAkC,cAEjGrE,EACE,MAAA,CAAAnD,UAAU,gBACVoD,MAAO,CACLoB,OAAQ,GAAGnC,OAAAsH,EAAiB,MAC5BjH,MAAO,GAAGL,OAAAqH,EAAgB,OAG5BrG,SAAA,CAAAF,EAAA,MAAA,CACET,MAAOkH,EACPpF,OAAQqF,EACRpF,QAAS,cAAOmF,EAAQ,KAAAvH,OAAIwH,GAC5B7J,UAAU,gBAAeqD,SAAA,CAGzBH,EACE,OAAA,CAAAG,SAAAH,EAAA,WAAA,CAAUwH,GAAI,yBAAkBd,EAAQ,KAAAvH,OAAIwH,EAAS,KAAAxH,OAAIoI,EAAQP,SAAS7G,SACxEH,EAAM,OAAA,CAAA0B,EAAGkF,EAAsB,EAAG,EAAGF,EAAUC,EAAWY,SAK9DvH,EACE,OAAA,CAAA0B,EAAGkF,EAAsB,EAAG,EAAGF,EAAUC,EAAWY,GACpD/F,KAAMpE,EAAI6G,MACVwD,YAAarK,EAAIsK,SAAW,IAK5B1H,EACE,OAFa,aAAhBsE,EAEG,CAAA5C,EAAGkF,EAAsB,EAAGD,EAAYlC,EAAgBiC,EAAUjC,EAAgB,CAChFuC,QAASvC,GAAkBkC,EAAYY,EAAQP,QAAU,EACzDC,SAAUxC,GAAkBkC,EAAYY,EAAQN,SAAW,EAC3DC,WAAYK,EAAQL,WACpBC,YAAaI,EAAQJ,cAEvB3F,KAAM2C,EAASF,MACf0D,SAAU,uBAAAxI,OAAuBuH,EAAY,KAAAvH,OAAAwH,EAAa,KAAAxH,OAAAoI,EAAQP,QAAO,MAG3E,CACEtF,EAAGkF,EAAsB,EAAG,EAAGjC,EAAegC,EAAW,CACvDK,QAASO,EAAQP,QACjBC,SAAUtC,GAAiB+B,EAAWa,EAAQN,SAAW,EACzDC,WAAYK,EAAQL,WACpBC,YAAaxC,GAAiB+B,EAAWa,EAAQJ,YAAc,IAEjE3F,KAAM2C,EAASF,MACf0D,SAAU,8BAAuBjB,EAAQ,KAAAvH,OAAIwH,EAAa,KAAAxH,OAAAoI,EAAQP,QAAO,UAM9ExC,GAAYK,GACX7E,EAAK,MAAA,CAAAlD,UAAU,sBAAqBqD,SAClCF,SAAKnD,UAAW,gCAAyBkI,EAAmB,kCAAoC,6CAC7FA,EAAmB,IAAM,IAAKH,UAKtC1E,GACCH,EAAA,MAAA,CACElD,UAAW,4BAAAqC,OAA4C,eAAhBmF,EAA+B,uCAAyC,aAE9GnE,QAMb,ECtQayH,EAA0B,SAACvL,OACtCE,EAAgBF,EAAAuG,QAAhBA,OAAO,IAAArG,EAAG,OAAMA,EAChB4D,EAAQ9D,EAAA8D,SACRmB,EAAMjF,EAAAiF,OAEN,OACEtB,SAAKlD,UAAU,gCAAgCoD,MAAO,CAAE4C,gBAAiBF,EAAStB,OAAMA,YACrFnB,GAGP,ECVa0H,EAAgC,SAACxL,GAAE,IAAA8D,EAAQ9D,EAAA8D,SACtD,OACEH,EAAA,MAAA,CAAKlD,UAAU,+CACbqD,SAAAH,EAAA,MAAA,CAAKlD,UAAU,iBAAkBqD,SAAAA,KAGvC,ECHa0D,EAA8C,SAACxH,GAC1D,IAAAyH,SACAC,EAAS1H,EAAA0H,UACTxH,SAAA8D,OAAO,IAAA9D,EAAA,oBACPI,EAAAN,EAAAyL,KAAAA,OAAI,IAAAnL,EAAG,UAASA,EAEhB,OACEsD,EAAK,MAAA,CAAAnD,UAAW,uBAAAqC,OAAgC,UAAT2I,EAAmB,6BAA+B,IACvF3H,SAAA,CAAAH,EAAA,MAAA,CACElD,UAAW,eAAAqC,OAAwB,UAAT2I,EAAmB,qBAAuB,IACpE5H,MAAO,CAAE+D,MAAOF,GAAW5D,SAE1B2D,IAEH9D,EAAA,MAAA,CACElD,UAAW,aAAAqC,OAAsB,UAAT2I,EAAmB,mBAAqB,IAChE5H,MAAO,CAAE+D,MAAOF,GAAW5D,SAEjB,SAATE,GAA4B,oBAATA,EAA6B,IAAM,QAE/C,oBAATA,GACCL,EAAA,MAAA,CAAKlD,UAAU,gBAAgBoD,MAAO,CAAE+D,MAAOF,GAEzC5D,SAAA,WAId,ECNW4H,EAAW,WAQlB,OAPAA,EAAWC,OAAOC,QAAU,SAAkBC,GAC1C,IAAK,IAAIC,EAAGC,EAAI,EAAGC,EAAIC,UAAU1I,OAAQwI,EAAIC,EAAGD,IAE5C,IAAK,IAAIG,KADTJ,EAAIG,UAAUF,GACOJ,OAAOQ,UAAUC,eAAeC,KAAKP,EAAGI,KAAIL,EAAEK,GAAKJ,EAAEI,IAE9E,OAAOL,CACV,EACMH,EAASY,MAAMC,KAAMN,UAChC,EAgSkD,mBAApBO,iBAAiCA,gBC5Q/D,IAAMC,EAAa,SAACC,GAClB,IAAMC,EAAUtJ,KAAKuJ,MAAMF,EAAU,IAC/BG,EAAOH,EAAU,GACvB,MAAO,GAAA5J,OAAG6J,EAAQlI,WAAWqI,SAAS,EAAG,iBAAQD,EAAKpI,WAAWqI,SAAS,EAAG,KAC/E,EAEaC,EAAQC,EAAMC,WACzB,SACEjN,EAqBA+D,SApBEzD,EAAAN,EAAAkN,OAAAA,OAAS,IAAA5M,EAAA,KACT6M,EAAanN,EAAAmN,cACbC,EAAapN,EAAAoN,cACbC,eACAC,EAAetN,EAAAsN,gBACfC,EAAMvN,EAAAuN,OACNC,eACAC,EAASzN,EAAAyN,UACTC,EAAO1N,EAAA0N,QACPC,EAAQ3N,EAAA2N,SACRC,EAAiB5N,EAAA4N,kBACjBC,EAAM7N,EAAA6N,OACNC,EAAO9N,EAAA8N,QACPC,EAAU/N,EAAA+N,WACVC,EAAMhO,EAAAgO,OACNC,EAAYjO,EAAAiO,aACZzN,EAAcR,EAAAS,UAAdA,OAAS,IAAAD,EAAG,GAAEA,EACdE,EAAAV,EAAAkO,YAAAA,OAAW,IAAAxN,EAAG,CAAA,EAAEA,EAChBE,EAAcZ,EAAAmO,KAAdA,OAAI,IAAAvN,EAAG,QAAOA,EAMdwN,EAKEjB,EALUiB,aACZC,EAIElB,EAJSkB,YACXC,EAGEnB,EAHOmB,UACTC,EAEEpB,EAAaoB,SADfC,EACErB,EAAaqB,SAGXC,EAAuBC,EAAY,WACvC,OAAOxB,EAAOyB,UAAU,SAAAC,GAAS,OAACA,EAAMC,OAAS,SAAA/L,OAASoK,EAAO4B,QAAQF,GAAS,MAASR,CAA1D,EACnC,EAAG,CAAClB,EAAQkB,IAENW,EAAkBL,EAAY,SAACM,GACnC,OAAO9B,EAAO8B,EAChB,EAAG,CAAC9B,IAEE+B,EAAgBP,EAAY,SAACM,GACjC,IAAMJ,EAAQ1B,EAAO8B,GACrB,OAAOJ,eAAAA,EAAOC,QAAS,SAAS/L,OAAAkM,EAAQ,EAC1C,EAAG,CAAC9B,IAGEpM,EAAoCM,EAAwB,MAA3D8N,EAAapO,EAAA,GAAEqO,EAAgBrO,EAAA,GAChCE,EAAkCI,GAAS,GAA1CgO,EAAYpO,EAAA,GAAEqO,EAAerO,EAAA,GAC9BsO,EAAcrN,EAA8B,MAE5CsN,EAAQb,EAAY,WACxB,IAAMc,EAAoBf,IAC1B,KAAsB,IAAlBvB,EAAO3J,SAAuC,IAAvBiM,GAA4BA,GAAqBtC,EAAO3J,QAAnF,CAGA,IAAMkM,EAAelB,IAAaC,EAC5BkB,EAAgBlB,EAEtBpB,EACK1B,EAAAA,EAAA,CAAA,EAAAyB,GACH,CAAAmB,WAAW,EACXC,UAAU,EACVC,UAAU,KAIRkB,EACFlC,SAAAA,IACSiC,IACThC,SAAAA,IAjBgG,CAmBnG,EAAE,CAACP,EAAO3J,OAAQkL,EAAsBtB,EAAeC,EAAemB,EAAUC,EAAUhB,EAAYC,IAEjGkC,EAAQjB,EAAY,WACpBF,IAEJpB,EAAa1B,EAAAA,EAAA,CAAA,EACRyB,GAAa,CAChBmB,WAAW,EACXC,UAAU,KAEZb,SAAAA,IACD,EAAE,CAACc,EAAUrB,EAAeC,EAAeM,IAEtCkC,EAASlB,EAAY,SAACmB,GAE1B,IAAMC,OAAuB9J,IAAV6J,GAAuBrB,EAAWqB,EAE/CE,EACDrE,EAAAA,EAAA,CAAA,EAAAyB,GACH,CAAAqB,SAAUsB,EAGVxB,WAAWwB,IAAsB3C,EAAcoB,SAC/CA,SAAUpB,EAAcoB,WAG1BnB,EAAc2C,GACdpC,SAAAA,EAAWmC,IAGNA,GAActB,IACjBhB,SAAAA,IAEJ,EAAG,CAACgB,EAAUrB,EAAeC,EAAeO,EAAUH,IAEhDwC,EAAkBtB,EACtB,SAACmB,GACCR,EAAgB,SAACY,GACf,IAAMC,OAAiBlK,IAAV6J,GAAuBI,EAAOJ,EAE3C,OADAjC,SAAAA,EAAoBsC,GACbA,CACT,EACF,EACA,CAACtC,IAGGuC,GAAOzB,EAAY,WACvBtB,EAAc,CACZgB,aAAca,EAAc,GAC5BZ,YAAa,EACbC,WAAW,EACXC,UAAU,EACVC,UAAU,IAEZX,SAAAA,GACD,EAAE,CAACT,EAAeS,EAAQoB,IAErBmB,GAAQ1B,EAAY,WACxBtB,EAAc,CACZgB,aAAca,EAAc,GAC5BZ,YAAa,EACbC,WAAW,EACXC,UAAU,EACVC,UAAU,IAEZV,SAAAA,GACD,EAAE,CAACV,EAAeU,EAASmB,IAEtBoB,GAAiB3B,EAAY,WAElC,EAAE,IAEH1B,EAAMsD,oBAAoBvM,EAAK,WAAM,MAAC,CACpCwL,MAAKA,EACLI,MAAKA,EACLC,OAAMA,EACNI,gBAAeA,EACfG,KAAIA,GACJC,MAAKA,GACLG,UAAWF,GACXG,eAAgB,WAAM,OAAAnC,CAAW,EACjCoC,gBAAiB,WAAM,OAAArC,CAAY,EACnCE,UAAW,WAAM,OAAAA,CAAS,EAC1BC,SAAU,WAAM,OAAAA,CAAQ,EACxB,GAGFnM,EAAU,WACR,IAAMoN,EAAoBf,IAqD1B,OApDIH,IAAcE,IAAmC,IAAvBgB,GAA4BA,EAAoBtC,EAAO3J,OACnF+L,EAAYjN,QAAUqO,YAAY,WAChC,IAAMC,EAAYtC,EAAc,IAC1BD,EAAeW,EAAgBS,GAC/BoB,GAAkBxC,aAAA,EAAAA,EAAcyC,WAAY,EAG5CC,EAAoBH,GAAaC,EAGjCG,EAAeD,EAAoBF,EAAkBD,EAG3DvD,SACKD,GAAa,CAChBkB,YAAa0C,KAEfxD,SAAAA,EAASlK,KAAKuJ,MAAMmE,EAAe,KAAO9B,EAAcO,IAGpDsB,GACFrH,WAAW,WAET6D,SAAAA,EAAkB2B,EAAcO,GAAoBoB,GAGhDpB,EAAoB,EAAItC,EAAO3J,OACjC6J,SACKD,GAAa,CAChBiB,aAAca,EAAcO,EAAoB,GAChDnB,YAAa,MAIfjB,EACK1B,EAAAA,EAAA,CAAA,EAAAyB,GACH,CAAAkB,YAAauC,EACbtC,WAAW,EACXC,UAAU,KAEZlB,SAAAA,IAEH,EAAE,IAEN,EAAE,KAECiC,EAAYjN,UACd2O,cAAc1B,EAAYjN,SAC1BiN,EAAYjN,QAAU,MAInB,WACDiN,EAAYjN,SACd2O,cAAc1B,EAAYjN,QAE9B,CACF,EAAG,CAACiM,EAAWE,EAAUC,EAAsBJ,EAAanB,EAAO3J,OAAQ4J,EAAeC,EAAeG,EAAQD,EAAiBD,EAAY0B,EAAiBE,IAG/J7M,EAAU,WACR+M,EAAiB,KACnB,EAAG,CAACf,IAEJ,IAAMoB,GAAoBf,IACpBwC,GAAmBlC,EAAgBS,IACnC0B,IAAyBD,cAAA,EAAAA,GAAkBJ,WAAY,EACvDM,GAAqB9N,KAAKuJ,MAAMyB,EAAc,KAC9C+C,GAA8B/N,KAAKuJ,MAAMsE,GAAyB,KAClEnH,GAAWmH,GAAyB,EAAK7C,EAAc6C,GAA0B,IAAM,EAEvFG,GACJnE,EAAO3J,OAAS,IACf+K,GACDkB,KAAsBnM,KAAKtC,IAAI,EAAGmM,EAAO3J,OAAS,IAClD8K,GAAe6C,GAEXI,GAAe,CACnB,uBACA7Q,EACA6N,EAAY,iBAAmB,GAC/BC,EAAW,gBAAkB,GAC7BC,EAAW,gBAAkB,GAE7B6C,GAAU,mBAAqB,IAE9B7N,OAAOC,SACPC,KAAK,KAKF6N,GAAsBF,IAAWhD,GAAe6C,GAA0B,EAH1DE,GAA8B,EAAIA,GAA8BD,GAAqB,EAoK3G,OACEvN,EAAK,MAAA,CAAAnD,UAAW6Q,aACd3N,EAAK,MAAA,CAAAlD,UAAU,yBACbkD,EAAK,MAAA,CAAAlD,UAAU,gBAAeqD,SAC5BF,SAAKnD,UAAU,qBAAoBqD,SAAA,CACvB,UAATqK,GACCvK,SAAKnD,UAAU,eAAcqD,SAAA,CAC3BH,UAAMlD,UAAU,cACbqD,SAAkB,OAAlBoL,IACkC,UAA9BH,EAAgBG,UAAc,IAAAhP,OAAA,EAAAA,EAAE2O,QAAS,SAAA/L,OAASoM,EAAgB,IAAKsC,gBACvEP,cAAgB,EAAhBA,GAAkBpC,QAAS,SAAS2C,gBAE3C7N,EAAA,OAAA,CAAMlD,UAAU,sBAAcgM,EAAWpJ,KAAKtC,IAAI,EAAGwQ,UAG/C,UAATpD,GACCxK,EAAK,MAAA,CAAAlD,UAAU,8BACbkD,EACE,MAAA,CAAAlD,UAAU,sBACVoD,MAAO,CAAEV,MAAO,GAAAL,OAAGO,KAAKxC,IAAI,IAAKkJ,IAAS,UAlL7B,WAI3B,cAHM0H,EAAQ,GACRC,EAAWxE,EAAO3J,kBAEfwI,GACP,IAAM4F,EAAW5F,IAAMyD,GACjBoC,EAAc7F,EAAIyD,GAClBqC,EAAY3D,EAAYnC,GACxB+F,EAAcH,GAAYC,EAE5BG,EAAY,iBAIdA,GAHGF,GAAcF,GAAaC,EAErBD,EAEP,2BACU,UAATxD,EAAmB,yBAA2B,0BACxCyD,EACI,6BAEA,4BARA,+BAUXE,IAAaC,GAAa,8BAC1B7C,IAAkBnD,IAAGgG,GAAa,6BAEtC,IAAMC,EAAc,WACbF,IACL3C,EAAiBpD,GACjBkC,SAAAA,EAAegB,EAAclD,IAC/B,EAEMkG,EAAc,CAClBxR,UAAWsR,EACX,YAAahG,EAAI,EACjB8C,eAAO7O,EAAAkN,EAAOnB,yBAAI8C,OACd,QAAA/L,OAAQiJ,EAAI,EAAC,MAAAjJ,OAAc,QAAT5C,EAAAgN,EAAOnB,UAAE,IAAA7L,OAAA,EAAAA,EAAE2O,OAC7BgD,EACE,QAAQ/O,OAAAiJ,EAAI,EAAC,MAAAjJ,OAAK+O,GAClB,QAAA/O,OAAQiJ,EAAI,GAClB3F,QAAS0L,EAAcE,OAAchM,EACrCG,KAAM2L,EAAe,cAAqB9L,EAC1CkM,SAAUJ,EAAc,OAAI9L,EAC5BmM,UAAWL,EACP,SAAC7N,GACe,UAAVA,EAAEmO,KAA6B,MAAVnO,EAAEmO,MACzBnO,EAAEoO,iBACFL,IAEH,OACDhM,GAGNyL,EAAMa,KAAK3O,EAAiB,MAAA+H,EAAA,CAAA,EAAAuG,YAAcJ,GAAaF,GAAYC,EAAc7F,EAAI,EAAI,KAApEA,IAER,UAAToC,GAAoBwD,GACtBF,EAAMa,KACJ1O,EAAA,MAAA,CAAgCnD,UAAU,gCACxCmD,EAAK,MAAA,CAAAnD,UAAU,oCAAmCqD,SAAA,CAChDH,UAAMlD,UAAU,cACbqD,SAAkB,OAAlBoL,IACkC,UAA9BH,EAAgBG,UAAc,IAAA5O,OAAA,EAAAA,EAAEuO,QAAS,SAAA/L,OAASoM,EAAgB,IAAKsC,gBACvEP,cAAgB,EAAhBA,GAAkBpC,QAAS,SAAS2C,gBAE3C7N,EAAM,OAAA,CAAAlD,UAAU,sBAAcgM,EAAWpJ,KAAKtC,IAAI,EAAGwQ,UAEvD5N,EAAK,MAAA,CAAAlD,UAAU,yDACbkD,EACE,MAAA,CAAAlD,UAAU,sBACVoD,MAAO,CAAEV,MAAO,GAAGL,OAAAO,KAAKxC,IAAI,IAAKkJ,IAAY,YAZzC,iBAAiBjH,OAAAiJ,MApDxBA,EAAI,EAAGA,EAAI2F,EAAU3F,MAArBA,GAwET,OACEnI,EAAK,MAAA,CAAAnD,UAAU,kBACZqD,SAAA,CAAA2N,EACD9N,EAAA,MAAA,CACElD,UAAW,eAAeqC,OAAAuO,GAAU,mBAAqB,IACzDxC,MAAOwC,GAAU,sBAAwB,cAExCvN,SAAS,UAATqK,EAEGvK,EAAA,MAAA,CACET,MAAM,KACN8B,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLC,MAAM,6BAENtB,SAAA,CAAAH,EAAA,OAAA,CACE6G,EAAE,KACFrH,MAAM,KACN8B,OAAO,KACPsN,GAAG,KACHC,UAAU,kBACVrN,KAAK,YAEPxB,EAAA,OAAA,CACE0B,EAAE,svBACFF,KAAK,aA0BXxB,EACE,MAAA,CAAAR,MAAM,KACN8B,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLC,MAAM,6BAA4BtB,SAElCH,EACE,OAAA,CAAA0B,EAAE,kwBACFF,KAAK,uBAoBnB,CAyBWsN,UAKG,UAATtE,GACCvK,SAAKnD,UAAU,yBACbqD,SAAA,CAAAH,EAAA,SAAA,CACElD,UAAU,0CACV2F,QAAS,WAEP,IAAMsM,EAAgC,OAAlBxD,EAAyBA,EAAgB,EAAIM,GAAoB,EACjFkD,GAAe,IACjBvD,EAAiBuD,GACjB3E,SAAAA,EAAakB,EAAcyD,IAE/B,EACAnS,SACoB,OAAlB2O,EACIA,GAAiB,EACjBM,IAAqB,EAE3BX,MAAM,WAAU/K,SAEhBF,SACET,MAAM,KACN8B,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLC,MAAM,uCAENzB,EACE,OAAA,CAAAgP,SAAS,UACTC,SAAS,UACTvN,EAAE,osBACFF,KAAK,UAEPxB,UACEgP,SAAS,UACTC,SAAS,UACTvN,EAAE,qIACFF,KAAK,eAKXxB,YACElD,UAAU,sCACV2F,QAAS,WAEP,IACMsM,GAD+B,OAAlBxD,EAAyBA,EAAgBM,IAC3B,EAC7BkD,EAAcxF,EAAO3J,QAAUmP,GAAelD,KAChDL,EAAiBuD,GACjB1E,SAAAA,EAASiB,EAAcyD,IAE3B,EACAnS,SACoB,OAAlB2O,EACKA,GAAiBM,IAAqBN,GAAiBhC,EAAO3J,OAAS,EACvEiM,IAAqBtC,EAAO3J,OAAS,EAE5CsL,MAAM,OAEN/K,SAAAF,EAAA,MAAA,CACET,MAAM,KACN8B,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLC,MAAM,6BAENtB,SAAA,CAAAH,EAAA,OAAA,CACEgP,SAAS,UACTC,SAAS,UACTvN,EAAE,qpBACFF,KAAK,UAEPxB,EACE,OAAA,CAAAgP,SAAS,UACTC,SAAS,UACTvN,EAAE,8IACFF,KAAK,eAKXxB,EAAA,SAAA,CACElD,UAAW,6CACTqC,OAAAwL,EAAY,wBAA0B,uBAAsB,KAAAxL,OAC1D0L,EAAW,2BAA6B,IAC5CpI,QAASkI,EAAYqB,EAAQJ,EAC7BV,MAAOL,EAAW,SAAWF,EAAY,QAAUC,EAAW,SAAW,QACzEhO,SAAUiO,EAAQ1K,SAGhBF,EACE,MAFH0K,EAEG,CAAAnL,MAAM,KACN8B,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLC,MAAM,6BAENtB,SAAA,CAAAH,EAAA,OAAA,CACEgP,SAAS,UACTC,SAAS,UACTvN,EAAE,6cACFF,KAAK,UAEPxB,EACE,OAAA,CAAAgP,SAAS,UACTC,SAAS,UACTvN,EAAE,+PACFF,KAAK,UAEPxB,EAAA,OAAA,CACEgP,SAAS,UACTC,SAAS,UACTvN,EAAE,+PACFF,KAAK,UAEPxB,EACE,OAAA,CAAAgP,SAAS,UACTC,SAAS,UACTvN,EAAE,qOACFF,KAAK,UAEPxB,EACE,OAAA,CAAAgP,SAAS,UACTC,SAAS,UACTvN,EAAE,8IACFF,KAAK,YAKP,CAAAhC,MAAM,KACN8B,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLC,MAAM,6BAA4BtB,SAAA,CAElCH,UACE0B,EAAE,iKACFwN,OAAO,QACPC,YAAY,MACZC,iBAAiB,KACjBC,cAAc,UAEhBrP,EACE,OAAA,CAAA0B,EAAE,aACFwN,OAAO,QACPC,YAAY,MACZE,cAAc,QACdC,eAAe,UAEjBtP,EAAA,OAAA,CACE0B,EAAE,mBACFwN,OAAO,QACPC,YAAY,MACZE,cAAc,QACdC,eAAe,UAEjBtP,UACE0B,EAAE,imBACFwN,OAAO,QACPC,YAAY,MACZE,cAAc,QACdC,eAAe,eAMvBtP,EAAA,SAAA,CACElD,UAAW,gDAAyC+N,EAAW,gCAAkC,IACjGpI,QAAS,WAAM,OAAAwJ,KACff,MAAOL,EAAW,WAAa,SAC/BjO,UAAW+N,IAAcC,IAAaC,EAGtC1K,SAAAH,EAAA,MAAA,CAAKR,MAAM,KAAK8B,OAAO,KAAKC,QAAQ,YAAYC,KAAK,OAAOC,MAAM,6BAChFtB,SAAAH,EAAA,OAAA,CAAM0B,EAAE,orDAAorDF,KAAK,cAIrrDxB,EAAA,SAAA,CACElD,UAAW,4CAA4CqC,OAAAsM,EAAe,mCAAqC,IAC3GhJ,QAAS,WAAM,OAAA4J,GAAiB,EAChCnB,MAAOO,EAAe,aAAe,sBAGrCxL,EAAK,MAAA,CAAAT,MAAM,KAAK8B,OAAO,KAAKC,QAAQ,YAAYC,KAAK,OAAOC,MAAM,6BAA4BtB,SAAA,CAC5GH,EAAM,OAAA,CAAAgP,SAAS,UAAUC,SAAS,UAAUvN,EAAE,k/GAAk/GF,KAAMiK,EAAe,QAAU,UAC/jHzL,EAAM,OAAA,CAAAgP,SAAS,UAAUC,SAAS,UAAUvN,EAAE,mWAAmWF,KAAMiK,EAAe,QAAU,UAChbzL,EAAA,OAAA,CAAMgP,SAAS,UAAUC,SAAS,UAAUvN,EAAE,iXAAiXF,KAAMiK,EAAe,QAAU,oBAQ5b,GAGFrC,EAAMmG,YAAc,QC5rBb,IAAMC,EAA0C,SAACnT,GACtD,IAAAoT,EAAepT,EAAAoT,gBACfC,EAAQrT,EAAAqT,SACRC,EAAYtT,EAAAsT,aACZpT,EAAcF,EAAAS,UAAdA,OAAS,IAAAP,EAAG,GAAEA,EAERI,EAA0Bc,EAAS,GAAlC2I,EAAQzJ,EAAA,GAAEiT,EAAWjT,EAAA,GACrBoJ,EAAatI,EAASuI,KAAKC,OAAM,GAgCxC,OA9BAxH,EAAU,WACR,IAAIoR,EAAkC,KAEtC,IAAIJ,GAAoBC,GAAaC,GAiB9B,QAAiBtN,IAAbqN,QAA2CrN,IAAjBsN,EAA4B,CAC/D,IAAMG,EAAkBpQ,KAAKtC,IAAI,EAAGsC,KAAKxC,IAAI,KAAOyS,EAAeD,GAAYC,EAAgB,MAC/FC,EAAYE,EACb,MApBkD,CACjD,IAAMC,EAAiB,WACrB,IAAM9J,EAAMD,KAAKC,MACX+J,EAAWtQ,KAAKtC,IAAI,EAAGqS,EAAkBxJ,GACzCgK,EAAYR,EAAkB1J,EAC9BI,EAAUF,EAAMF,EAChB+J,EAAkBpQ,KAAKtC,IAAI,EAAGsC,KAAKxC,IAAI,IAAMiJ,EAAU8J,EAAa,MAC1EL,EAAYE,GAERE,GAAY,IACdJ,EAAY,KACRC,GAAUxC,cAAcwC,GAEhC,EAEAE,IACAF,EAAW9C,YAAYgD,EAAgB,IACxC,CAKD,OAAO,WACDF,GAAUxC,cAAcwC,EAC9B,CACD,EAAE,CAACJ,EAAiBC,EAAUC,EAAc5J,IAG3C/F,EAAK,MAAA,CAAAlD,UAAW,gBAAAqC,OAAgBrC,GAAWqD,SACzCH,EACE,MAAA,CAAAlD,UAAU,gBACVoD,MAAO,CAAEV,MAAO,GAAAL,OAAGiH,EAAQ,SAInC,WCtDgB8J,IACR,IAAA7T,EAAsBoB,EAAwB,MAA7C0S,EAAM9T,EAAA,GAAE+T,EAAS/T,EAAA,GAOxB,OACE4D,EAAA,MAAA,CAAKnD,UAAU,OAAMqD,SAAA,CACnBH,EAAQ,SAAA,CAAAyC,QAPa,WACvB2N,EAAU,KACVtK,WAAW,WAAM,OAAAsK,EAAU,KAAV,EAAiB,IACpC,EAIwDjQ,SAAA,aAEpDH,EAAK,MAAA,CAAAlD,UAAU,aAAcqD,SAAAgQ,GAAUlQ,EAAA,MAAA,CAAKnD,UAAU,SAAQqD,SAAA,CAAA,IAAGgQ,SAGvE,CDyCAX,EAAYD,YAAc,cErD1B,IAAMc,EAAiE,SAAChU,OACtES,EAAST,EAAAS,UACTF,EAAQP,EAAAO,SACJ,OACJoD,EACE,MAAA,CAAAyB,MAAM,6BACN6O,oBAAoB,OACpB9Q,MAAM,KACN8B,OAAO,KACPiP,SAAS,UACTzT,UAAWA,EACXyE,QAAQ,YACRC,KAAK,OAELrB,SAAAF,EAAA,IAAA,CAAGuH,GAAG,eAAcrH,SAAA,CAClBH,EACE,OAAA,CAAAwH,GAAG,QACHwH,SAAS,UACTC,SAAS,UACTvN,EAAE,gXACFwN,OAAQtS,EAAW,UAAY,UAC/BuS,YAAY,MACZE,cAAc,QACdC,eAAe,UAEjBtP,EAAA,OAAA,CACEwH,GAAG,UACH9F,EAAE,mCACFwN,OAAQtS,EAAW,UAAY,UAC/BuS,YAAY,MACZE,cAAc,QACdC,eAAe,cA5BjB,EAkCAkB,EAAiE,SAACnU,OACtES,EAAST,EAAAS,UACTF,EAAQP,EAAAO,SACJ,OACJoD,SACER,MAAM,KACN8B,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLC,MAAM,6BACN3E,UAAWA,WAEXkD,EACE,OAAA,CAAA0B,EAAE,oiCACFF,KAAM5E,EAAW,UAAY,aAX7B,EAgBA6T,EAAkE,SAACpU,OACvES,EAAST,EAAAS,UACTF,EAAQP,EAAAO,SACJ,OACJoD,EACE,MAAA,CAAAyB,MAAM,6BACN6O,oBAAoB,OACpB9Q,MAAM,KACN8B,OAAO,KACPiP,SAAS,UACTzT,UAAWA,EACXyE,QAAQ,YACRC,KAAK,OAELrB,SAAAH,EAAA,OAAA,CACEwH,GAAG,QACH9F,EAAE,sxCACFF,KAAM5E,EAAW,UAAY,aAd7B,EAmBA8T,EAAgD,SAACrU,GAAkB,OAAPA,EAAAS,UAChEmD,EAAK,MAAA,CAAAT,MAAM,KAAK8B,OAAO,KAAKC,QAAQ,YAAYC,KAAK,OAAOC,MAAM,6BACpEtB,SAAA,CAAAH,EAAA,OAAA,CAAMgP,SAAS,UAAUC,SAAS,UAAUvN,EAAE,2NAA2NF,KAAK,YAC9QxB,EAAM,OAAA,CAAAgP,SAAS,UAAUC,SAAS,UAAUvN,EAAE,kUAAkUF,KAAK,YAH5S,EAMnEmP,EAAgD,SAACtU,GAAkB,OAAPA,EAAAS,UAChEmD,EAAK,MAAA,CAAAT,MAAM,KAAK8B,OAAO,KAAKC,QAAQ,YAAYC,KAAK,OAAOC,MAAM,6BACpEtB,SAAA,CAAAH,EAAA,OAAA,CAAMgP,SAAS,UAAUC,SAAS,UAAUvN,EAAE,2NAA2NF,KAAK,YAC9QxB,UAAMgP,SAAS,UAAUC,SAAS,UAAUvN,EAAE,8OAA8OF,KAAK,UACjSxB,EAAM,OAAA,CAAAgP,SAAS,UAAUC,SAAS,UAAUvN,EAAE,gPAAgPF,KAAK,YAJ1N,EAOnEoP,EAAgD,SAACvU,GAAkB,OAAPA,EAAAS,UAChEmD,EAAK,MAAA,CAAAT,MAAM,KAAK8B,OAAO,KAAKC,QAAQ,YAAYC,KAAK,OAAOC,MAAM,6BACpEtB,SAAA,CAAAH,EAAA,OAAA,CAAMgP,SAAS,UAAUC,SAAS,UAAUvN,EAAE,2NAA2NF,KAAK,YAC9QxB,EAAM,OAAA,CAAAgP,SAAS,UAAUC,SAAS,UAAUvN,EAAE,kUAAkUF,KAAK,YAH5S,EAOnEqP,EAAgD,SAACxU,GAAE,IAAAS,EAAST,EAAAS,UAAO,OACvEkD,EACE,MAAA,CAAAR,MAAM,KACN8B,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLC,MAAM,6BACN3E,UAAWA,EACXoD,MAAO,CAAE4Q,UAAW,2BAEpB3Q,SAAAH,EAAA,OAAA,CACE0B,EAAE,2HACFwN,OAAO,UACPC,YAAY,IACZE,cAAc,QACdC,eAAe,WAfoD,EA2C5DyB,EAAkC,SAAC1U,aAC9CU,EAAAV,EAAA6O,MAAAA,OAAK,IAAAnO,EAAG,UAASA,EACjBE,EAAWZ,EAAA2U,OAAXA,OAAM,IAAA/T,EAAG,GAAEA,EACXE,UAAA8T,aAAQ,GAAE9T,EACV+T,iBACA7T,EAAAhB,EAAA8U,gBAAAA,cAAsB9T,EACtBG,EAAAnB,EAAA+U,gBAAAA,OAAe,IAAA5T,GAAQA,EACvBI,aAAAhB,OAAW,IAAAgB,KACXyT,EAAShV,EAAAgV,UACTC,EAAQjV,EAAAiV,SACRvT,EAAiB1B,EAAAkV,SAAjBA,OAAW,IAAAxT,EAAA,SACXyT,WACAC,EAAcpV,EAAAoV,eACdC,EAAarV,EAAAqV,cACbC,EAAMtV,EAAAsV,OACNC,EAAOvV,EAAAuV,QACP1T,EAAA7B,EAAAS,UAAAA,OAAS,IAAAoB,EAAG,GAAEA,EACd2T,EAAUxV,EAAAwV,WAEJ9M,EAAsCtH,EAASuT,GAA9Cc,EAAc/M,EAAA,GAAEgN,EAAiBhN,EAAA,GAClCiN,EAAoCvU,EAASwT,GAA5CgB,EAAaD,EAAA,GAAEE,EAAgBF,EAAA,GAChCG,EAA0C1U,GAAS,GAAlD2U,EAAgBD,EAAA,GAAEE,EAAmBF,EAAA,GACtCG,EAA4B7U,GAAS,GAApC8U,EAASD,EAAA,GAAEE,GAAYF,EAAA,GACxBG,GAAsChV,GAAS,GAA9CiV,GAAcD,GAAA,GAAEE,GAAiBF,GAAA,GAClCG,GAAoCnV,GAAS,GAA5CoV,GAAaD,GAAA,GAAEE,GAAgBF,GAAA,GAWtCnU,EAAU,WACRsT,EAAkBf,EACpB,EAAG,CAACA,IAEJvS,EAAU,WACRyT,EAAiBjB,EACnB,EAAG,CAACA,IAEJ,IAyCM8B,GAAiB,WAErB,GAAIL,IAAkBG,GACpB,OAAO,EAGT,IAAMG,EAAYtS,WAAWoR,GAC7B,IAAKnR,MAAMqS,GACT,GAAI7B,EAAiB,CACnB,IAAM8B,EAAWvS,WAAWuR,GAC5B,IAAKtR,MAAMsS,GACT,OAAOD,EAAYC,CAEtB,MAAM,QAAqB5Q,IAAjB6O,EACT,OAAO8B,EAAY9B,EAGvB,OAAO,CACT,EAEMgC,GAA2C,KAA1BpB,EAAe1K,QAAiBsL,IAAkBG,GAEzE,OACE5S,EAAA,MAAA,CAAKnD,UAAW,kBAAW0U,EAAS,sBAAwB,GAAM,KAAArS,OAAArC,GAAWqD,SAAA,CAc3EF,EAAK,MAAA,CAAAnD,UAAU,+BACbmD,EAAK,MAAA,CAAAnD,UAAU,mBACbqD,SAAA,CAAAF,EAAA,MAAA,CAAKnD,UAAU,kBACZqD,SAAA,CAAA+K,GAASlL,EAAA,MAAA,CAAKlD,UAAU,iBAAgBqD,SAAE+K,IAE3CjL,EAAK,MAAA,CAAAnD,UAAU,2BACZqD,SAAA,EAAAqR,aAAA,EAAAA,EAAQ2B,KAAK,SAAC7W,GAAU,MAAc,WAAdA,EAAMmS,QAC7BzO,EAAK,MAAA,CAAAlD,UAAU,8BACZqD,SAAgD,QAAhD5D,EAAAiV,EAAO2B,KAAK,SAAC7W,GAAU,MAAc,WAAdA,EAAMmS,GAAgB,UAAG,IAAAlS,OAAA,EAAAA,EAAAD,QAGrD0D,EAAC5D,GACCE,MAAM,MACNE,MAAOsV,EACPrV,SA7Ga,SAAC8D,GAC1BwR,EAAkBxR,GAClBkR,SAAAA,EAAiBlR,EACnB,EA2Gc7D,cAzGY,SAAC0W,GACzBT,GAAkBS,EACpB,EAwGcxW,SAAUA,EACVM,IAAK,CAAEV,MAAO,GACdY,IAAKiU,GAAa,CAAE7U,MAAO,MAC3Bc,YAAa8U,EACb7U,WAAY,QAGf4T,GACClR,EAAK,MAAA,CAAAnD,UAAU,2BACZqD,SAAA,EAAAqR,aAAA,EAAAA,EAAQ2B,KAAK,SAAC7W,GAAU,MAAc,UAAdA,EAAMmS,QAC7BzO,EAAK,MAAA,CAAAlD,UAAU,8BACZqD,SAA+C,QAA/CxD,EAAA6U,EAAO2B,KAAK,SAAC7W,GAAU,MAAc,UAAdA,EAAMmS,GAAe,UAAG,IAAA9R,OAAA,EAAAA,EAAAL,QAGpD0D,EAAC5D,EACC,CAAAE,MAAM,QACNE,MAAOyV,EACPxV,SA/GU,SAAC8D,GACzB2R,EAAiB3R,GACjBmR,SAAAA,EAAgBnR,EAClB,EA6GgB7D,cA3GS,SAAC0W,GACxBN,GAAiBM,EACnB,EA0GgBxW,SAAUA,EACVM,IAAK,CAAEV,MAAO,GACdY,IAAKkU,GAAY,CAAE9U,MAAO,MAC1Bc,YAAa8U,EACb7U,WAAY,WAKpB0C,EAAK,MAAA,CAAAnD,UAAU,mBAAkBqD,SAAA,EAC9BqR,aAAA,EAAAA,EAAQ2B,KAAK,SAAC7W,GAAU,MAAc,UAAdA,EAAMmS,GAAN,KACvBzO,EAAK,MAAA,CAAAlD,UAAU,8BAA6BqD,SACI,QAA7CtD,EAAA2U,EAAO2B,KAAK,SAAC7W,GAAU,MAAc,UAAdA,EAAMmS,GAAe,UAAC,IAAA5R,OAAA,EAAAA,EAAEP,QAGpD0D,EAAK,MAAA,CAAAlD,UAAU,iBAAgBqD,SAC7BH,EAAC2C,GAAKnD,MAAM,cAAcoD,QAA8B,IAArBmQ,KAAyB,UAAY,UACtE5S,SAAAH,EAAC6D,EAAa,CACZC,KAAMiP,KACNhP,UAAgC,IAArBgP,KAAyB,UAAY,UAChD1S,KAAK,mBAMdwR,EACC7R,EAAA,MAAA,CAAKlD,UAAU,kBACZqD,SACCH,EADc,aAAf6R,EACEnB,EACgB,YAAfmB,EACDjB,EAEAD,EAJW,CAAC7T,UAAU,2BAQ3BmD,EAAA,MAAA,CAAKnD,UAAU,mBACZqD,SAAA,EAACvD,GACAoD,EAAA,SAAA,CACElD,UAAW,wBAAiBoW,IAAkBX,EAAY,0BAA4B,IACtF9P,QAjJK,WACa,KAA1BqP,EAAe1K,QAAkBsL,IAAmBG,KAEtDR,GAAoB,GACpBG,IAAa,GAGb1M,WAAW,WAET6L,SAAAA,IAGAI,EAAkB,IAClBG,EAAiB,IACjBS,IAAkB,GAClBG,IAAiB,GACjBT,GAAoB,GACpBG,IAAa,EACd,EAAE,KAEP,EA8Hc5V,SAAUsW,IAAkBX,eAChBA,EAAY,aAA4B,SAAbhB,EAAsB,OAAS,OAAMpR,SAE3EoS,EACCvS,EAAC6Q,EAAY,CAAA/T,UAAU,kBAEvBkD,EADe,SAAbuR,EACDf,EAEAH,EAFQ,CAACvT,UAAU,gBAAgBF,SAAUsW,OAMnD9B,GACCpR,EAAA,SAAA,CACElD,UAAU,iBACV2F,QA3IM,WAClBsP,EAAkB,IAClBG,EAAiB,IACjBS,IAAkB,GAClBG,IAAiB,GACjBN,IAAa,GACbH,GAAoB,GACpBT,SAAAA,GACF,EAoIchV,SAAU2V,EAAS,aACR,QAAOpS,SAElBH,EAACyQ,EAAU,CAAA3T,UAAU,gBAAgBF,SAAU2V,YAMzDvS,EAAA,MAAA,CAAKlD,UAAU,sBAGrB,ECtWMuW,EAAU,SAACC,EAAkBrP,GAkEjC,YAlEiC,IAAAA,IAAAA,EAAuB,SACP,CAC/CsP,SACEvT,EAAA,MAAA,CACER,MAAM,KACN8B,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLC,MAAM,sCAENzB,EACE,OAAA,CAAAgP,SAAS,UACTC,SAAS,UACTvN,EAAE,sbACFF,KAAMyC,MAIZuP,YACEvT,EAAA,MAAA,CACET,MAAM,KACN8B,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLC,MAAM,6BAA4BtB,SAAA,CAElCH,UACEgP,SAAS,UACTC,SAAS,UACTvN,EAAE,muDACFwN,OAAQjL,EACRkL,YAAY,MACZE,cAAc,QACdC,eAAe,UAEjBtP,EACE,OAAA,CAAAgP,SAAS,UACTC,SAAS,UACTvN,EAAE,0MACFF,KAAMyC,IAERjE,EACE,OAAA,CAAAgP,SAAS,UACTC,SAAS,UACTvN,EAAE,+MACFF,KAAMyC,OAIZwP,cACEzT,EAAA,MAAA,CACER,MAAM,KACN8B,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLC,MAAM,sCAENzB,EACE,OAAA,CAAAgP,SAAS,UACTC,SAAS,UACTvN,EAAE,kSACFF,KAAK,aAKE8R,EACjB,EAEaI,EAAS,SAACrX,GACrB,IAAAsX,SACAC,EAAQvX,EAAAuX,SACRC,EAASxX,EAAAwX,UACTpR,EAAOpG,EAAAoG,QACPlG,EAAgBF,EAAAO,SAAhBA,OAAQ,IAAAL,GAAQA,EAChBI,EAAcN,EAAAS,UAAdA,OAAY,IAAAH,EAAA,GAAEA,EACdiG,EAAOvG,EAAAuG,QACPmB,EAAS1H,EAAA0H,UACTlH,EAAcR,EAAAyL,KAaRgM,EACD/L,EAAAA,EAAAA,EAAA,GAZiB,SAACD,GACrB,MACO,UADCA,EAEG,CAAExG,OAAQ,OAAQyS,QAAS,YAI3B,CAAEzS,OAAQ,OAAQyS,QAAS,YAExC,CAGKC,MAdD,IAAAnX,EAAG,QAAOA,IAeR+F,GAAW,CAAEE,gBAAiBF,IAC9BmB,GAAa,CAAEE,MAAOF,IAG5B,OACE9D,EACE,SAAA,CAAAnD,UAAW,UAAAqC,OAAUrC,GACrB2F,QAASA,EACT7F,SAAUA,EACA,YAAA,SACVsD,MAAO4T,EAAW3T,SAAA,CAEjByT,GAAYP,EAAQO,EAAU7P,GAAa,UAC1C/D,EAAK,MAAA,CAAAlD,UAAU,cAAyB,YAAA8W,WACrCP,EAAQO,EAAU7P,GAAa,WAGpC/D,EAAK,MAAA,CAAAlD,UAAU,cAAcoD,MAAO6D,EAAY,CAAEE,MAAOF,GAAc,CAAE,EAAA5D,SACvEH,EAAI,IAAA,CAAAG,SAAAwT,MAELE,GAAaR,EAAQQ,EAAW9P,GAAa,UAC5C/D,EAAK,MAAA,CAAAlD,UAAU,cAAyB,YAAA+W,WACrCR,EAAQQ,EAAW9P,GAAa,aAK3C,EC1HMkQ,EAAY,SAAC5X,OAAE6X,EAAM7X,EAAA6X,OAAEC,EAAK9X,EAAA8X,MAAqD,OACrFnU,EAAA,MAAA,CACER,MAAM,KACN8B,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLC,MAAM,6BACN3E,UAAW,mBAAAqC,OAAmB+U,EAAS,wBAA0B,IAAI/T,SAErEH,EACE,OAAA,CAAA0B,EAAE,iBACFwN,OAAkB,SAAViF,EAAmB,UAAY,UACvChF,YAAY,IACZE,cAAc,QACdC,eAAe,WAdkE,EAmB1E8E,EAAY,SAAC/X,GACxB,IAAA6O,EAAK7O,EAAA6O,MACLmJ,EAAahY,EAAAgY,cACbC,EAAajY,EAAAiY,cACb/X,EAAmBF,EAAAkY,YAAnBA,OAAW,IAAAhY,GAAQA,EACnBI,EAAcN,EAAAS,UAAdA,OAAS,IAAAH,EAAG,GAAEA,EACdE,EAAAR,EAAA8X,MAAAA,OAAQ,IAAAtX,EAAA,QAAOA,EACf2X,EAAQnY,EAAAmY,SAEFzX,EAAsBU,EAAS8W,GAA9BL,EAAMnX,EAAA,GAAE0X,EAAS1X,EAAA,GAUxB,OACEkD,EAAK,MAAA,CAAAnD,UAAW,aAAaqC,OAHF,SAAVgV,EAAmB,kBAAoB,+BAGbrX,GAAuB,YAAA,sBAChEmD,EAAK,MAAA,CAAAnD,UAAU,mBAAmB2F,QAVjB,WACnB,IAAMiS,GAAaR,EACnBO,EAAUC,GACVF,SAAAA,EAAWE,EACb,EAOMvU,SAAA,CAAAH,EAAA,MAAA,CAAKlD,UAAU,2BACbkD,EAAI,IAAA,CAAAG,SAAA+K,MAENlL,EAACiU,GAAUC,OAAQA,EAAQC,MAAOA,QAEjCD,GAAUG,IAAoBH,GAAUI,IACzCtU,EAAA,MAAA,CAAKlD,UAAU,oBACbqD,SAAAH,EAAA,MAAA,CAAKlD,UAAU,kCACZoX,EAASG,EAAgBC,QAMtC,EC9CMK,EAAW,WAAM,OACrB1U,EAAK,MAAA,CAAAT,MAAM,KAAK8B,OAAO,KAAKC,QAAQ,YAAYC,KAAK,OAAOC,MAAM,6BAA4BtB,SAAA,CAC5FH,EAAM,OAAA,CAAAR,MAAM,KAAK8B,OAAO,KAAKsN,GAAG,KAAKpN,KAAK,YAC1CxB,EAAA,OAAA,CACE0B,EAAE,kHACFF,KAAK,gBAKLoT,EAAY,WAAM,OACtB3U,EAAA,MAAA,CAAKT,MAAM,KAAK8B,OAAO,KAAKC,QAAQ,YAAYC,KAAK,OAAOC,MAAM,6BAA4BtB,SAAA,CAC5FH,EAAM,OAAA,CAAA6G,EAAE,MAAMrH,MAAM,KAAK8B,OAAO,KAAKsN,GAAG,KAAKpN,KAAK,YAClDxB,EAAM,OAAA,CAAA0B,EAAE,kDAAkDF,KAAK,gBAItDqT,EAA8B,SAACxY,GAC1C,IAAAC,EAAKD,EAAAC,MACLE,EAAKH,EAAAG,MACLD,EAAAF,EAAAyY,YAAAA,OAAc,IAAAvY,EAAA,UAASA,EACvBI,kBAAAoY,OAAgB,IAAApY,EAAA,UAASA,EACzBqY,EAAI3Y,EAAA2Y,KACJ9U,EAAK7D,EAAA6D,MACLrD,EAAcR,EAAAS,UAEd,OACEkD,SACElD,UAAW,+BAJN,IAAAD,EAAG,GAAEA,GAKVqD,MAAOA,EACG,YAAA,iBAEVD,EAAK,MAAA,CAAAnD,UAAU,gBAAeqD,SAAA,CAC5BH,EAAK,MAAA,CAAAlD,UAAU,uBACbkD,EAAO,OAAA,CAAAG,SAAA7D,MAET2D,SAAKnD,UAAU,uBACZqD,SAAA,CAAA6U,GACChV,EAAA,MAAA,CAAKlD,UAAU,8BACMkD,EAAT,SAATgV,EAAmBL,EAAeC,EAAP,CAAA,KAGhC5U,SAAKlD,UAAU,sBACbqD,SAAAH,EAAC2C,EAAK,CAAAC,QAASkS,EACb3U,SAAAH,EAAC6D,EAAc,CAAAC,KAAMpD,WAAWlE,GAAQ6D,KAAK,WAAW0D,UAAWgR,eAOjF","x_google_ignoreList":[8]}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/components/InputNumber.tsx","../src/components/Switch.tsx","../src/components/Chip.tsx","../src/components/ProductionUnit.tsx","../src/components/Histogram.tsx","../src/components/ProductionUnitContainer.tsx","../src/components/Avatar.tsx","../src/components/ValueWithUnit.tsx","../node_modules/tslib/tslib.es6.js","../src/components/Timer.tsx","../src/components/ProgressBar.tsx","../src/components/Gain.tsx","../src/components/BuyLine.tsx","../src/components/Button.tsx","../src/components/Accordion.tsx","../src/components/Ecart.tsx","../src/components/Icons.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect } from 'react';\nimport './InputNumber.css';\n\ninterface InputNumberProps {\n label: string;\n value?: string;\n onChange?: (value: string) => void;\n onErrorChange?: (hasError: boolean) => void;\n disabled?: boolean;\n className?: string;\n required?: boolean;\n min?: { value: number; label?: string };\n max?: { value: number; label?: string };\n showSuccess?: boolean;\n inputWidth?: number;\n}\n\nexport const InputNumber: React.FC<InputNumberProps> = ({\n label,\n value = '',\n onChange,\n onErrorChange,\n disabled = false,\n className = '',\n required = false,\n min = { value: 0 },\n max = { value: 100 },\n showSuccess = false,\n inputWidth,\n}) => {\n const [internalValue, setInternalValue] = useState(value);\n const [isFocused, setIsFocused] = useState(false);\n const [isOutOfRange, setIsOutOfRange] = useState(false);\n const [calculatedWidth, setCalculatedWidth] = useState(54); // Smaller default minimum width\n const inputRef = useRef<HTMLInputElement>(null);\n const labelRef = useRef<HTMLLabelElement>(null);\n\n // Use provided inputWidth or calculated width\n const finalInputWidth = inputWidth || calculatedWidth;\n\n // Calculate input width based on label text only if inputWidth is not provided\n useEffect(() => {\n if (!inputWidth && labelRef.current) {\n // Create a temporary element to measure text width\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n if (context) {\n // Get computed styles for accurate measurement\n const styles = window.getComputedStyle(labelRef.current);\n context.font = `${styles.fontSize} ${styles.fontFamily}`;\n\n // Measure the label text width\n const textWidth = context.measureText(label + (required ? '*' : '')).width;\n\n // Add minimal padding - just enough for label background and input padding\n // 24px = 12px left padding + 12px right padding for input\n // 8px = 4px padding on each side for label background\n const calculatedWidth = Math.max(54, textWidth + 32); // More precise padding calculation\n setCalculatedWidth(calculatedWidth);\n }\n }\n }, [label, required, inputWidth]);\n\n useEffect(() => {\n setInternalValue(value);\n }, [value]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n\n // Always update internal value for display\n setInternalValue(newValue);\n\n // Check if value is out of range for visual feedback\n if (newValue !== '') {\n const numValue = parseFloat(newValue);\n if (!isNaN(numValue)) {\n const outOfRange = numValue < min.value || numValue > max.value;\n setIsOutOfRange(outOfRange);\n onErrorChange?.(outOfRange);\n\n if (outOfRange) {\n // Clamp the value and notify parent with clamped value\n const clampedValue = Math.max(min.value, Math.min(max.value, numValue));\n onChange?.(clampedValue.toString());\n } else {\n // Value is in range, notify parent with actual value\n onChange?.(newValue);\n }\n } else {\n setIsOutOfRange(false);\n onErrorChange?.(false);\n onChange?.(newValue);\n }\n } else {\n setIsOutOfRange(false);\n onErrorChange?.(false);\n onChange?.(newValue);\n }\n };\n const handleFocus = () => {\n setIsFocused(true);\n // Select all text when focusing\n if (inputRef.current) {\n inputRef.current.select();\n }\n };\n\n const handleBlur = () => {\n setIsFocused(false);\n\n // Clamp value on blur\n if (internalValue !== '') {\n const numValue = parseFloat(internalValue);\n if (!isNaN(numValue)) {\n const clampedValue = Math.max(min.value, Math.min(max.value, numValue));\n if (clampedValue !== numValue) {\n const clampedString = clampedValue.toString();\n setInternalValue(clampedString);\n onChange?.(clampedString);\n }\n setIsOutOfRange(false); // Reset out-of-range state after clamping\n onErrorChange?.(false);\n }\n }\n };\n\n const isLabelFloating = isFocused || internalValue.length > 0;\n\n const containerClasses = [\n 'input-container',\n isFocused ? 'input-container--focused' : '',\n isLabelFloating ? 'input-container--floating' : '',\n disabled ? 'input-container--disabled' : '',\n isOutOfRange ? 'input-container--error' : '',\n showSuccess ? 'input-container--success' : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={containerClasses}>\n <div className=\"input-constraints\">\n {min.label && (\n <div className=\"input-min\">\n {min.label}\n <br />\n {min.value}\n </div>\n )}\n\n <div className=\"input-field\" style={{ width: `${finalInputWidth}px` }}>\n <input\n ref={inputRef}\n type=\"number\"\n value={internalValue}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n disabled={disabled}\n required={required}\n className=\"input-element\"\n style={{ width: `${finalInputWidth}px` }}\n aria-label={label}\n min={min.value}\n max={max.value}\n step={1}\n />\n <label ref={labelRef} className=\"input-label\">\n {label}\n {required && <span className=\"input-required\">*</span>}\n </label>\n </div>\n {max.label && (\n <div className=\"input-max\">\n {max.label}\n <br /> {max.value}\n </div>\n )}\n </div>\n </div>\n );\n};\n","import React, { useState } from 'react';\nimport './Switch.css';\n\ninterface OnProps {\n isOff?: boolean;\n}\nconst ImgOn = ({ isOff }: OnProps) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M9.56529 2.85352C9.66365 2.57607 9.96837 2.43116 10.246 2.5293C13.4295 3.65507 15.3392 6.91015 14.7684 10.2383C14.1974 13.5667 11.3114 16 7.93443 16C4.55739 16 1.67151 13.5667 1.10045 10.2383C0.5296 6.91011 2.4393 3.65504 5.62291 2.5293C5.9005 2.43115 6.20523 2.57605 6.30357 2.85352C6.40176 3.13124 6.2561 3.43599 5.97838 3.53418C3.28438 4.48672 1.669 7.2423 2.1522 10.0586C2.63557 12.8747 5.07706 14.9336 7.93443 14.9336C10.7918 14.9336 13.2333 12.8747 13.7167 10.0586C14.1999 7.24233 12.5844 4.48676 9.89049 3.53418C9.61276 3.43599 9.4671 3.13124 9.56529 2.85352ZM7.93443 0C8.22892 3.10447e-05 8.46754 0.238727 8.46763 0.533203V7.4668C8.46763 7.76135 8.22898 8.00095 7.93443 8.00098C7.63986 8.00098 7.40123 7.76137 7.40123 7.4668V0.533203C7.40132 0.238707 7.63991 0 7.93443 0Z\"\n fill={isOff ? '#999FA1' : '#009CDF'}\n />\n </svg>\n);\nconst SwitchThumb = ({ isOff }: OnProps) => (\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"16\" cy=\"16\" r=\"16\" fill={isOff ? 'white' : '#009cdf'} />\n </svg>\n);\n\ninterface SwitchProps {\n checked?: boolean;\n onChange?: (checked: boolean) => void;\n disabled?: boolean;\n showIcon?: boolean;\n label?: string;\n}\n\nexport const Switch: React.FC<SwitchProps> = ({\n checked = false,\n onChange,\n disabled = false,\n showIcon = true,\n label,\n}) => {\n const [internalChecked, setInternalChecked] = useState(checked);\n\n // Use controlled value if provided, otherwise use internal state\n const isChecked = checked !== undefined ? checked : internalChecked;\n\n const handleToggle = () => {\n if (disabled) return;\n\n const newChecked = !isChecked;\n // Only update internal state if uncontrolled\n if (checked === undefined) {\n setInternalChecked(newChecked);\n }\n onChange?.(newChecked);\n };\n\n const switchClasses = [\n 'switch',\n isChecked ? 'switch--checked' : '',\n disabled ? 'switch--disabled' : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n const wrapperClasses = ['switch-wrapper', isChecked ? 'switch-wrapper--checked' : '']\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className=\"switch-container\">\n <div className={wrapperClasses}>\n {showIcon ? (\n <div className=\"switch-icon\">\n <ImgOn isOff={!isChecked} />\n </div>\n ) : label ? (\n <div className=\"switch-label\">{label}</div>\n ) : null}\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={isChecked}\n className={switchClasses}\n onClick={handleToggle}\n disabled={disabled}\n >\n <span className=\"switch-track\">\n <span className=\"switch-thumb\">\n <SwitchThumb isOff={!isChecked} />\n </span>\n </span>\n </button>\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport './Chip.css';\n\ninterface ChipProps {\n // Define any props you want to pass to the Chip component\n children: React.ReactNode;\n bgColor?: string;\n width?: 'fit-content' | 'full-width';\n}\n\nexport const Chip: React.FC<ChipProps> = ({ children, bgColor, width = 'fit-content' }) => {\n const chipClasses = [\n 'chip-container',\n width === 'full-width' ? 'chip-container--full-width' : 'chip-container--fit-content',\n ].join(' ');\n\n return (\n <div className={chipClasses} style={{ backgroundColor: bgColor }}>\n <div className=\"chip-content\">\n <div className=\"chip-label\">{children}</div>\n </div>\n </div>\n );\n};\n","import { useState } from 'react';\nimport { InputNumber } from './InputNumber';\nimport { Switch } from './Switch';\nimport './ProductionUnit.css';\nimport { Chip } from './Chip';\nimport { ValueWithUnit } from '.';\n\ntype ProductionUnitLimit = {\n value: number;\n label?: string;\n};\ninterface ProductionUnitProps {\n onChangeInput?: (value: number) => void;\n onChangeSwitch?: (checked: boolean) => void;\n defaultValue?: number;\n defaultChecked?: boolean;\n value?: number;\n checked?: boolean;\n unitName?: string;\n energyCost?: number;\n checkedImage?: React.ReactNode;\n uncheckedImage?: React.ReactNode;\n readonly?: boolean;\n min?: ProductionUnitLimit;\n max?: ProductionUnitLimit;\n unitLabel?: string;\n editable?: boolean;\n}\nexport const ProductionUnit = ({\n onChangeInput,\n onChangeSwitch,\n defaultValue,\n defaultChecked = false,\n value,\n checked,\n unitName = 'Production Unit',\n energyCost = 0,\n checkedImage,\n uncheckedImage,\n readonly = false,\n min = { value: 10, label: 'Pmin' },\n max = { value: 100, label: 'Pmax' },\n unitLabel = 'W',\n editable = true,\n}: ProductionUnitProps) => {\n // Internal state management for uncontrolled mode\n const [internalChecked, setInternalChecked] = useState(defaultChecked);\n const [internalValue, setInternalValue] = useState(defaultValue);\n\n // Use controlled props if provided, otherwise use internal state\n const isChecked = checked !== undefined ? checked : internalChecked;\n const currentValue = value !== undefined ? value : internalValue;\n\n const handleSwitchChange = (newChecked: boolean) => {\n // Update internal state only if uncontrolled\n if (checked === undefined) {\n setInternalChecked(newChecked);\n }\n\n // Notify parent component if handler provided\n if (onChangeSwitch) {\n onChangeSwitch(newChecked);\n }\n };\n\n const handleInputChange = (val: string) => {\n // Only convert to number if the string is not empty and is a valid number\n if (val === '') {\n // Handle empty string case\n if (value === undefined) {\n setInternalValue(undefined);\n }\n if (onChangeInput) {\n onChangeInput(0); // or whatever default you prefer for empty values\n }\n return;\n }\n\n const numValue = parseFloat(val);\n if (!isNaN(numValue)) {\n // Update internal state only if uncontrolled\n if (value === undefined) {\n setInternalValue(numValue);\n }\n\n // Notify parent component if handler provided\n if (onChangeInput) {\n onChangeInput(numValue);\n }\n }\n };\n\n return (\n <div\n className=\"production-unit-container-box\"\n style={{\n boxShadow: editable ? '0px 2px 16px 0px rgba(0, 0, 0, 0.16)' : 'none',\n }}\n >\n <div className=\"production-unit-container\">\n <div className=\"production-unit-content\">\n <div className=\"image-preview-container\">\n {isChecked ? checkedImage : uncheckedImage}\n <div className=\"image-preview-label\">{unitLabel}</div>\n </div>\n <div className=\"production-unit-chip\">\n <div className=\"production-unit-chip-name\">{unitName}</div>\n\n <Chip width=\"fit-content\" bgColor=\"#E1F5FD\">\n <ValueWithUnit cost={energyCost} textColor=\"#005896\" />\n </Chip>\n </div>\n <div className=\"production-unit-switch-container\">\n <InputNumber\n label=\"PA\"\n onChange={handleInputChange}\n value={currentValue !== undefined ? currentValue.toString() : undefined}\n disabled={!isChecked || readonly}\n min={{ value: min.value, label: min.label }}\n max={{ value: max.value, label: max.label }}\n />{' '}\n </div>\n </div>\n\n {editable ? (\n <Switch checked={isChecked} onChange={handleSwitchChange} disabled={readonly} />\n ) : isChecked ? (\n <Chip bgColor=\"#E1F5FD\">\n <span style={{ color: '#005896' }}>Souscrit</span>\n </Chip>\n ) : null}\n </div>\n </div>\n );\n};\n","import React, { useEffect, useState, useRef } from 'react';\nimport './Histogram.css';\n\ninterface HistogramProps {\n /** Maximum value configuration with value and color */\n max: {\n value: number;\n color: string;\n opacity?: number;\n };\n /** Relative/current value configuration with value and color */\n relative: {\n value: number;\n color: string;\n };\n /** Height of the histogram bar in pixels */\n barHeight?: number;\n /** Width of the histogram bar in pixels */\n barWidth?: number;\n /** Orientation of the histogram - 'vertical' or 'horizontal' */\n orientation?: 'vertical' | 'horizontal';\n /** Corner radius configuration for individual corners */\n cornerRadius?: {\n topLeft?: number;\n topRight?: number;\n bottomLeft?: number;\n bottomRight?: number;\n };\n /** Enable gain/loss display when relative value changes */\n showGain?: boolean;\n /** Child components (typically text content) */\n children?: React.ReactNode;\n}\n\nexport const Histogram: React.FC<HistogramProps> = ({\n max,\n relative,\n barHeight = 103,\n barWidth = 32,\n orientation = 'vertical',\n cornerRadius,\n showGain = false,\n children,\n}) => {\n const [animatedHeight, setAnimatedHeight] = useState(0);\n const [animatedWidth, setAnimatedWidth] = useState(0);\n const [gainPoints, setGainPoints] = useState<number | null>(null);\n const [isPositiveChange, setIsPositiveChange] = useState<boolean>(true);\n const previousValueRef = useRef(relative.value);\n const isFirstRender = useRef(true);\n const animationTimerRef = useRef<NodeJS.Timeout | null>(null);\n const accumulatedChangeRef = useRef<number>(0);\n const animationStartValueRef = useRef<number>(relative.value);\n\n // Calculate target dimensions based on orientation\n const targetHeight = (Math.min((relative.value / max.value) * 100, 100) / 100) * barHeight;\n const targetWidth = (Math.min((relative.value / max.value) * 100, 100) / 100) * (orientation === 'horizontal' ? barHeight : barWidth);\n\n // Detect value change and show gain/loss with accumulation\n useEffect(() => {\n // Skip the first render to avoid showing initial value as gain\n if (isFirstRender.current) {\n isFirstRender.current = false;\n previousValueRef.current = relative.value;\n animationStartValueRef.current = relative.value;\n return;\n }\n\n if (showGain && relative.value !== previousValueRef.current) {\n const changeAmount = relative.value - previousValueRef.current;\n \n // If there's an ongoing animation, cancel it and accumulate the changes\n if (animationTimerRef.current) {\n clearTimeout(animationTimerRef.current);\n // Add the new change to the accumulated change\n accumulatedChangeRef.current += changeAmount;\n } else {\n // No ongoing animation, start fresh\n animationStartValueRef.current = previousValueRef.current;\n accumulatedChangeRef.current = changeAmount;\n }\n \n // Update previous value\n previousValueRef.current = relative.value;\n \n // Calculate total change from animation start to now\n const totalChange = relative.value - animationStartValueRef.current;\n const isIncrease = totalChange > 0;\n \n setGainPoints(Math.abs(totalChange));\n setIsPositiveChange(isIncrease);\n \n // Set new timer for hiding the animation\n animationTimerRef.current = setTimeout(() => {\n setGainPoints(null);\n animationTimerRef.current = null;\n accumulatedChangeRef.current = 0;\n animationStartValueRef.current = relative.value;\n }, 2000);\n \n return () => {\n if (animationTimerRef.current) {\n clearTimeout(animationTimerRef.current);\n animationTimerRef.current = null;\n }\n };\n } else if (!showGain) {\n // Update previous value even when showGain is false\n previousValueRef.current = relative.value;\n animationStartValueRef.current = relative.value;\n }\n }, [relative.value, showGain]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (animationTimerRef.current) {\n clearTimeout(animationTimerRef.current);\n }\n };\n }, []);\n\n // Simple Chart.js-like animation: always animate from 0 to target\n useEffect(() => {\n setAnimatedHeight(0);\n setAnimatedWidth(0);\n\n const startTime = Date.now();\n const duration = 1000;\n\n const animate = () => {\n const elapsed = Date.now() - startTime;\n const progress = Math.min(elapsed / duration, 1);\n\n // Chart.js-like easing (easeOutQuart)\n const easeOutQuart = 1 - Math.pow(1 - progress, 4);\n\n setAnimatedHeight(targetHeight * easeOutQuart);\n setAnimatedWidth(targetWidth * easeOutQuart);\n\n if (progress < 1) {\n requestAnimationFrame(animate);\n }\n };\n\n requestAnimationFrame(animate);\n }, [targetHeight, targetWidth]);\n\n const displayWidth = orientation === 'horizontal' ? barHeight : barWidth;\n const displayHeight = orientation === 'horizontal' ? barWidth : barHeight;\n const svgWidth = orientation === 'horizontal' ? barHeight : barWidth;\n const svgHeight = orientation === 'horizontal' ? barWidth : barHeight;\n\n // Helper function to create rounded rectangle path\n const createRoundedRectPath = (\n x: number,\n y: number,\n width: number,\n height: number,\n radii: { topLeft: number; topRight: number; bottomLeft: number; bottomRight: number }\n ) => {\n const { topLeft, topRight, bottomLeft, bottomRight } = radii;\n\n return `\n M ${x + topLeft} ${y}\n L ${x + width - topRight} ${y}\n Q ${x + width} ${y} ${x + width} ${y + topRight}\n L ${x + width} ${y + height - bottomRight}\n Q ${x + width} ${y + height} ${x + width - bottomRight} ${y + height}\n L ${x + bottomLeft} ${y + height}\n Q ${x} ${y + height} ${x} ${y + height - bottomLeft}\n L ${x} ${y + topLeft}\n Q ${x} ${y} ${x + topLeft} ${y}\n Z\n `\n .trim()\n .replace(/\\s+/g, ' ');\n };\n\n // Default corner radius values\n const defaultCornerRadius = { topLeft: 2, topRight: 2, bottomLeft: 2, bottomRight: 2 };\n const corners = cornerRadius\n ? {\n topLeft: cornerRadius.topLeft ?? defaultCornerRadius.topLeft,\n topRight: cornerRadius.topRight ?? defaultCornerRadius.topRight,\n bottomLeft: cornerRadius.bottomLeft ?? defaultCornerRadius.bottomLeft,\n bottomRight: cornerRadius.bottomRight ?? defaultCornerRadius.bottomRight,\n }\n : defaultCornerRadius;\n\n return (\n <div\n className={`histogram-container ${orientation === 'horizontal' ? 'histogram-container--horizontal' : ''}`}\n >\n <div\n className={`histogram-content ${orientation === 'horizontal' ? 'histogram-content--horizontal' : ''}`}\n >\n <div\n className=\"histogram-bar\"\n style={{\n height: `${displayHeight}px`,\n width: `${displayWidth}px`,\n }}\n >\n <svg\n width={svgWidth}\n height={svgHeight}\n viewBox={`0 0 ${svgWidth} ${svgHeight}`}\n className=\"histogram-svg\"\n >\n {/* Define clipping path with rounded corners matching the background */}\n <defs>\n <clipPath id={`histogram-clip-${svgWidth}-${svgHeight}-${corners.topLeft}`}>\n <path d={createRoundedRectPath(0, 0, svgWidth, svgHeight, corners)} />\n </clipPath>\n </defs>\n \n {/* Background bar (max value) */}\n <path\n d={createRoundedRectPath(0, 0, svgWidth, svgHeight, corners)}\n fill={max.color}\n fillOpacity={max.opacity || 1}\n />\n \n {/* Foreground bar (relative value) with clipping to stay within rounded corners */}\n {orientation === 'vertical' ? (\n <path\n d={createRoundedRectPath(0, svgHeight - animatedHeight, svgWidth, animatedHeight, {\n topLeft: animatedHeight >= svgHeight ? corners.topLeft : 0,\n topRight: animatedHeight >= svgHeight ? corners.topRight : 0,\n bottomLeft: corners.bottomLeft,\n bottomRight: corners.bottomRight,\n })}\n fill={relative.color}\n clipPath={`url(#histogram-clip-${svgWidth}-${svgHeight}-${corners.topLeft})`}\n />\n ) : (\n <path\n d={createRoundedRectPath(0, 0, animatedWidth, svgHeight, {\n topLeft: corners.topLeft,\n topRight: animatedWidth >= svgWidth ? corners.topRight : 0,\n bottomLeft: corners.bottomLeft,\n bottomRight: animatedWidth >= svgWidth ? corners.bottomRight : 0,\n })}\n fill={relative.color}\n clipPath={`url(#histogram-clip-${svgWidth}-${svgHeight}-${corners.topLeft})`}\n />\n )}\n </svg>\n \n {/* Gain/Loss display */}\n {showGain && gainPoints && (\n <div className=\"histogram-gain-area\">\n <div className={`histogram-gain-points ${isPositiveChange ? 'histogram-gain-points--positive' : 'histogram-gain-points--negative'}`}>\n {isPositiveChange ? '+' : '-'}{gainPoints}\n </div>\n </div>\n )}\n </div>\n {children && (\n <div\n className={`histogram-text-container ${orientation === 'horizontal' ? 'histogram-text-container--horizontal' : ''}`}\n >\n {children}\n </div>\n )}\n </div>\n </div>\n );\n};\n","import './ProductionUnitContainer.css';\n\ninterface ProductionUnitContainerProps {\n bgColor?: string;\n children: React.ReactNode;\n height?: string;\n}\nexport const ProductionUnitContainer = ({\n bgColor = '#fff',\n children,\n height,\n}: ProductionUnitContainerProps) => {\n return (\n <div className=\"production-unit-container-box\" style={{ backgroundColor: bgColor, height }}>\n {children}\n </div>\n );\n};\n","import React from 'react';\nimport './Avatar.css';\n\ninterface AvatarProps {\n children: React.ReactNode;\n}\n\nexport const Avatar: React.FC<AvatarProps> = ({ children }) => {\n return (\n <div className=\"avatar-container avatar-container--clickable\">\n <div className=\"avatar-content\">{children}</div>\n </div>\n );\n};\n","import React from 'react';\nimport './ValueWithUnit.css';\n\ninterface ValueWithUnitProps {\n cost?: number | string;\n textColor?: string;\n type?: 'euro' | 'megawatt' | 'europermegawatt';\n size?: 'default' | 'small';\n}\n\nexport const ValueWithUnit: React.FC<ValueWithUnitProps> = ({\n cost,\n textColor,\n type = 'europermegawatt',\n size = 'default',\n}) => {\n return (\n <div className={`cost-text-container ${size === 'small' ? 'cost-text-container--small' : ''}`}>\n <div\n className={`cost-number ${size === 'small' ? 'cost-number--small' : ''}`}\n style={{ color: textColor }}\n >\n {cost}\n </div>\n <div\n className={`cost-unit ${size === 'small' ? 'cost-unit--small' : ''}`}\n style={{ color: textColor }}\n >\n {type === 'euro' || type === 'europermegawatt' ? '€' : 'MWh'}\n </div>\n {type === 'europermegawatt' && (\n <div className=\"cost-unit-per\" style={{ color: textColor }}>\n /MWh\n </div>\n )}\n </div>\n );\n};\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport './Timer.css';\n\nexport interface TimerProps {\n // Required phase configuration - duration in milliseconds\n phases: { duration: number; title?: string }[];\n \n // Required external state - always controlled\n externalState: {\n currentPhase: string; // phase title instead of index\n currentTime: number; // in milliseconds internally\n isRunning: boolean;\n isPaused: boolean;\n isFrozen: boolean;\n };\n \n // Required state change handler\n onStateChange: (state: {\n currentPhase: string; // phase title instead of index\n currentTime: number; // in milliseconds internally\n isRunning: boolean;\n isPaused: boolean;\n isFrozen: boolean;\n }) => void;\n \n // Optional event callbacks\n onComplete?: () => void;\n onPhaseComplete?: (phaseTitle: string, phaseDuration: number) => void;\n onTick?: (currentTime: number, phaseTitle: string) => void;\n onUnfreeze?: () => void;\n onUnpause?: () => void;\n onPause?: () => void;\n onFreeze?: (frozen: boolean) => void;\n onAnonymiseToggle?: (anonymised: boolean) => void;\n onStop?: () => void;\n onReset?: () => void;\n onPrevious?: (phaseName: string) => void;\n onNext?: (phaseName: string) => void;\n onPhaseClick?: (phaseName: string) => void;\n \n // UI configuration\n className?: string;\n gameActions?: { [phaseIndex: number]: string };\n user?: 'actor' | 'admin';\n}\n\nexport interface TimerRef {\n start: () => void;\n pause: () => void;\n freeze: (force?: boolean) => void; // toggle or force\n toggleAnonymise: (force?: boolean) => void; // NEW\n stop: () => void;\n reset: () => void;\n setPhases: (phases: { duration: number; title?: string }[]) => void;\n getCurrentTime: () => number;\n getCurrentPhase: () => string; // returns phase title\n isRunning: () => boolean;\n isPaused: () => boolean;\n}\n\nconst formatTime = (seconds: number): string => {\n const minutes = Math.floor(seconds / 60);\n const secs = seconds % 60;\n return `${minutes.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;\n};\n\nexport const Timer = React.forwardRef<TimerRef, TimerProps>(\n (\n {\n phases = [],\n externalState,\n onStateChange,\n onComplete,\n onPhaseComplete,\n onTick,\n onUnfreeze,\n onUnpause,\n onPause,\n onFreeze,\n onAnonymiseToggle,\n onStop,\n onReset,\n onPrevious,\n onNext,\n onPhaseClick,\n className = '',\n gameActions = {},\n user = 'admin',\n },\n ref\n ) => {\n // Extract state from externalState - no internal timer state\n const {\n currentPhase,\n currentTime,\n isRunning,\n isPaused,\n isFrozen,\n } = externalState;\n\n // Helper functions to work with phase indices internally\n const getCurrentPhaseIndex = useCallback(() => {\n return phases.findIndex(phase => (phase.title || `Phase ${phases.indexOf(phase) + 1}`) === currentPhase);\n }, [phases, currentPhase]);\n\n const getPhaseByIndex = useCallback((index: number) => {\n return phases[index];\n }, [phases]);\n\n const getPhaseTitle = useCallback((index: number) => {\n const phase = phases[index];\n return phase?.title || `Phase ${index + 1}`;\n }, [phases]);\n\n // Keep only UI-specific state (not timer logic)\n const [selectedPhase, setSelectedPhase] = useState<number | null>(null);\n const [isAnonymised, setIsAnonymised] = useState(false);\n const intervalRef = useRef<NodeJS.Timeout | null>(null);\n\n const start = useCallback(() => {\n const currentPhaseIndex = getCurrentPhaseIndex();\n if (phases.length === 0 || currentPhaseIndex === -1 || currentPhaseIndex >= phases.length) return;\n \n // Determine which callback to trigger based on current state\n const wasUnpausing = isPaused && !isFrozen;\n const wasUnfreezing = isFrozen;\n \n onStateChange({\n ...externalState,\n isRunning: true,\n isPaused: false,\n isFrozen: false,\n });\n \n // Call appropriate callback based on previous state\n if (wasUnfreezing) {\n onUnfreeze?.();\n } else if (wasUnpausing) {\n onUnpause?.();\n }\n }, [phases.length, getCurrentPhaseIndex, externalState, onStateChange, isPaused, isFrozen, onUnfreeze, onUnpause]);\n\n const pause = useCallback(() => {\n if (isFrozen) return;\n \n onStateChange({\n ...externalState,\n isRunning: false,\n isPaused: true,\n });\n onPause?.();\n }, [isFrozen, externalState, onStateChange, onPause]);\n\n const freeze = useCallback((force?: boolean) => {\n \n const nextFrozen = force === undefined ? !isFrozen : force;\n \n const newState = {\n ...externalState,\n isFrozen: nextFrozen,\n // When unfreezing, restore to running state (unless it was explicitly paused)\n // When freezing, stop running but preserve pause state\n isRunning: nextFrozen ? false : !externalState.isPaused,\n isPaused: externalState.isPaused, // Preserve pause state\n };\n \n onStateChange(newState);\n onFreeze?.(nextFrozen);\n \n // Call onUnfreeze when unfreezing\n if (!nextFrozen && isFrozen) {\n onUnfreeze?.();\n }\n }, [isFrozen, externalState, onStateChange, onFreeze, onUnfreeze]);\n\n const toggleAnonymise = useCallback(\n (force?: boolean) => {\n setIsAnonymised((prev) => {\n const next = force === undefined ? !prev : force;\n onAnonymiseToggle?.(next);\n return next;\n });\n },\n [onAnonymiseToggle]\n );\n\n const stop = useCallback(() => {\n onStateChange({\n currentPhase: getPhaseTitle(0), // Reset to first phase title\n currentTime: 0,\n isRunning: false,\n isPaused: false,\n isFrozen: false,\n });\n onStop?.();\n }, [onStateChange, onStop, getPhaseTitle]);\n\n const reset = useCallback(() => {\n onStateChange({\n currentPhase: getPhaseTitle(0), // Reset to first phase title\n currentTime: 0,\n isRunning: false,\n isPaused: false,\n isFrozen: false,\n });\n onReset?.();\n }, [onStateChange, onReset, getPhaseTitle]);\n\n const setTimerPhases = useCallback(() => {\n // No-op since phases come from props\n }, []);\n\n React.useImperativeHandle(ref, () => ({\n start,\n pause,\n freeze,\n toggleAnonymise,\n stop,\n reset,\n setPhases: setTimerPhases,\n getCurrentTime: () => currentTime,\n getCurrentPhase: () => currentPhase,\n isRunning: () => isRunning,\n isPaused: () => isPaused,\n }));\n\n\n useEffect(() => {\n const currentPhaseIndex = getCurrentPhaseIndex();\n if (isRunning && !isFrozen && currentPhaseIndex !== -1 && currentPhaseIndex < phases.length) {\n intervalRef.current = setInterval(() => {\n const newTimeMs = currentTime + 1000; // increment by 1000ms (1 second)\n const currentPhase = getPhaseByIndex(currentPhaseIndex);\n const phaseDurationMs = currentPhase?.duration || 0;\n \n // Check if phase will be complete after this tick\n const willCompletePhase = newTimeMs >= phaseDurationMs;\n \n // For phase completion, show exact duration (00:00) first\n const timeToUpdate = willCompletePhase ? phaseDurationMs : newTimeMs;\n \n // Update the elapsed time first\n onStateChange({\n ...externalState,\n currentTime: timeToUpdate,\n });\n onTick?.(Math.floor(timeToUpdate / 1000), getPhaseTitle(currentPhaseIndex)); // Pass seconds to callback\n\n // Use setTimeout to allow the 00:00 display to render before phase completion\n if (willCompletePhase) {\n setTimeout(() => {\n \n onPhaseComplete?.(getPhaseTitle(currentPhaseIndex), phaseDurationMs);\n\n // Move to next phase or complete\n if (currentPhaseIndex + 1 < phases.length) {\n onStateChange({\n ...externalState,\n currentPhase: getPhaseTitle(currentPhaseIndex + 1),\n currentTime: 0,\n });\n } else {\n \n onStateChange({\n ...externalState,\n currentTime: phaseDurationMs, // Ensure we set time to exact duration\n isRunning: false,\n isPaused: false,\n });\n onComplete?.();\n }\n }, 1000); // Wait 1 full second to show 00:00 before phase transition\n }\n }, 1000);\n } else {\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n }\n\n return () => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n }\n };\n }, [isRunning, isFrozen, getCurrentPhaseIndex, currentTime, phases.length, externalState, onStateChange, onTick, onPhaseComplete, onComplete, getPhaseByIndex, getPhaseTitle]);\n\n // Clear selected phase when current phase changes\n useEffect(() => {\n setSelectedPhase(null);\n }, [currentPhase]);\n\n const currentPhaseIndex = getCurrentPhaseIndex();\n const currentPhaseData = getPhaseByIndex(currentPhaseIndex);\n const currentPhaseDurationMs = currentPhaseData?.duration || 0;\n const currentTimeSeconds = Math.floor(currentTime / 1000); // convert ms to seconds for display\n const currentPhaseDurationSeconds = Math.floor(currentPhaseDurationMs / 1000); // convert ms to seconds for display\n const progress = currentPhaseDurationMs > 0 ? (currentTime / currentPhaseDurationMs) * 100 : 0;\n // Determine if we finished all steps and are at the end\n const isAtEnd =\n phases.length > 0 &&\n !isRunning &&\n currentPhaseIndex === Math.max(0, phases.length - 1) &&\n currentTime >= currentPhaseDurationMs;\n\n const timerClasses = [\n 'timer-header-control',\n className,\n isRunning ? 'timer--running' : '',\n isPaused ? 'timer--paused' : '',\n isFrozen ? 'timer--frozen' : '',\n // isAnonymised ? 'timer--anonymised' : '',\n isAtEnd ? 'timer--completed' : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n const remainingTime = currentPhaseDurationSeconds > 0 ? currentPhaseDurationSeconds - currentTimeSeconds : 0;\n \n // Force remaining time to 0 if we're at the exact phase duration or beyond\n const finalRemainingTime = (isAtEnd || currentTime >= currentPhaseDurationMs) ? 0 : remainingTime;\n\n const renderStepIndicators = () => {\n const steps = [] as React.ReactNode[];\n const maxSteps = phases.length;\n\n for (let i = 0; i < maxSteps; i++) {\n const isActive = i === currentPhaseIndex;\n const isCompleted = i < currentPhaseIndex;\n const hasAction = gameActions[i];\n const isClickable = isActive || isCompleted; // only active or completed\n\n let stepClass = 'step-indicator';\n if (!hasAction && !isActive && !isCompleted) {\n stepClass += ' step-indicator--placeholder';\n } else if (isActive) {\n stepClass +=\n ' step-indicator--active' +\n (user === 'actor' ? ' step-indicator--actor' : ' step-indicator--admin');\n } else if (isCompleted) {\n stepClass += ' step-indicator--completed';\n } else {\n stepClass += ' step-indicator--upcoming';\n }\n if (isClickable) stepClass += ' step-indicator--clickable'; // add clickable style\n if (selectedPhase === i) stepClass += ' step-indicator--selected'; // highlight clicked\n\n const handleClick = () => {\n if (!isClickable) return;\n setSelectedPhase(i);\n onPhaseClick?.(getPhaseTitle(i));\n };\n\n const commonProps = {\n className: stepClass,\n 'data-step': i + 1,\n title: phases[i]?.title\n ? `Step ${i + 1}: ${phases[i]?.title}`\n : hasAction\n ? `Step ${i + 1}: ${hasAction}`\n : `Step ${i + 1}`,\n onClick: isClickable ? handleClick : undefined,\n role: isClickable ? ('button' as const) : undefined,\n tabIndex: isClickable ? 0 : undefined,\n onKeyDown: isClickable\n ? (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleClick();\n }\n }\n : undefined,\n };\n\n steps.push(<div key={i} {...commonProps}>{hasAction || isActive || isCompleted ? i + 1 : ''}</div>);\n\n if (user === 'actor' && isActive) {\n steps.push(\n <div key={`header-inline-${i}`} className=\"timer-header--block\">\n <div className=\"timer-header timer-header--inline\">\n <span className=\"timer-title\">\n {selectedPhase !== null \n ? (getPhaseByIndex(selectedPhase)?.title || `Phase ${selectedPhase + 1}`).toUpperCase()\n : (currentPhaseData?.title || 'TIMER').toUpperCase()}\n </span>\n <span className=\"timer-time\">{formatTime(Math.max(0, finalRemainingTime))}</span>\n </div>\n <div className=\"timer-progress-bar timer-progress-bar--inline\">\n <div\n className=\"timer-progress-fill\"\n style={{ width: `${Math.min(100, progress)}%` }}\n />\n </div>\n </div>\n );\n }\n }\n\n return (\n <div className=\"step-indicators\">\n {steps}\n <div\n className={`step-expand ${isAtEnd ? 'step-expand--end' : ''}`}\n title={isAtEnd ? 'All steps completed' : 'In progress'}\n >\n {user === 'actor' ? (\n isAtEnd ? (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n x=\"24\"\n width=\"24\"\n height=\"24\"\n rx=\"12\"\n transform=\"rotate(90 24 0)\"\n fill=\"#292E33\"\n />\n <path\n d=\"M20 12C20 12.276 19.776 12.5 19.5 12.5L17.4766 12.5C17.238 15.1345 15.1345 17.238 12.5 17.4766L12.5 19.5C12.5 19.776 12.276 20 12 20C11.724 20 11.5 19.776 11.5 19.5L11.5 17.4766C8.86554 17.238 6.763 15.1345 6.52441 12.5L4.5 12.5C4.224 12.5 4 12.276 4 12C4 11.724 4.224 11.5 4.5 11.5L6.52441 11.5C6.763 8.86555 8.86554 6.76198 11.5 6.52344L11.5 4.5C11.5 4.224 11.724 4 12 4C12.276 4 12.5 4.224 12.5 4.5L12.5 6.52344C15.1345 6.76199 17.238 8.86551 17.4766 11.5L19.5 11.5C19.776 11.5 20 11.724 20 12ZM16.5 12C16.5 9.51867 14.4813 7.5 12 7.5C9.51867 7.5 7.5 9.51867 7.5 12C7.5 14.4813 9.51867 16.5 12 16.5C14.4813 16.5 16.5 14.4813 16.5 12ZM14 12C14 13.1046 13.1046 14 12 14C10.8954 14 10 13.1046 10 12C10 10.8954 10.8954 10 12 10C13.1046 10 14 10.8954 14 12Z\"\n fill=\"white\"\n />\n </svg>\n ) : (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n x=\"24\"\n width=\"24\"\n height=\"24\"\n rx=\"12\"\n transform=\"rotate(90 24 0)\"\n fill=\"#292E33\"\n />\n <path\n d=\"M20 12C20 12.276 19.776 12.5 19.5 12.5L17.4766 12.5C17.238 15.1345 15.1345 17.238 12.5 17.4766L12.5 19.5C12.5 19.776 12.276 20 12 20C11.724 20 11.5 19.776 11.5 19.5L11.5 17.4766C8.86554 17.238 6.763 15.1345 6.52441 12.5L4.5 12.5C4.224 12.5 4 12.276 4 12C4 11.724 4.224 11.5 4.5 11.5L6.52441 11.5C6.763 8.86555 8.86554 6.76198 11.5 6.52344L11.5 4.5C11.5 4.224 11.724 4 12 4C12.276 4 12.5 4.224 12.5 4.5L12.5 6.52344C15.1345 6.76199 17.238 8.86551 17.4766 11.5L19.5 11.5C19.776 11.5 20 11.724 20 12ZM16.5 12C16.5 9.51867 14.4813 7.5 12 7.5C9.51867 7.5 7.5 9.51867 7.5 12C7.5 14.4813 9.51867 16.5 12 16.5C14.4813 16.5 16.5 14.4813 16.5 12ZM14 12C14 13.1046 13.1046 14 12 14C10.8954 14 10 13.1046 10 12C10 10.8954 10.8954 10 12 10C13.1046 10 14 10.8954 14 12Z\"\n fill=\"white\"\n />\n </svg>\n )\n ) : isAtEnd ? (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M16 8C16 8.276 15.776 8.5 15.5 8.5L13.4766 8.5C13.238 11.1345 11.1345 13.238 8.5 13.4766L8.5 15.5C8.5 15.776 8.276 16 8 16C7.724 16 7.5 15.776 7.5 15.5L7.5 13.4766C4.86554 13.238 2.763 11.1345 2.52441 8.5L0.5 8.5C0.224 8.5 -3.61755e-07 8.276 -3.49691e-07 8C-3.29564e-07 7.724 0.224 7.5 0.5 7.5L2.52441 7.5C2.763 4.86555 4.86554 2.76198 7.5 2.52344L7.5 0.5C7.5 0.224 7.724 -3.61755e-07 8 -3.4969e-07C8.276 -3.29563e-07 8.5 0.224 8.5 0.5L8.5 2.52344C11.1345 2.76199 13.238 4.86551 13.4766 7.5L15.5 7.5C15.776 7.5 16 7.724 16 8ZM12.5 8C12.5 5.51867 10.4813 3.5 8 3.5C5.51867 3.5 3.5 5.51867 3.5 8C3.5 10.4813 5.51867 12.5 8 12.5C10.4813 12.5 12.5 10.4813 12.5 8ZM10 8C10 9.10457 9.10457 10 8 10C6.89543 10 6 9.10457 6 8C6 6.89543 6.89543 6 8 6C9.10457 6 10 6.89543 10 8Z\"\n fill=\"currentColor\"\n />\n </svg>\n ) : (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M16 8C16 8.276 15.776 8.5 15.5 8.5L13.4766 8.5C13.238 11.1345 11.1345 13.238 8.5 13.4766L8.5 15.5C8.5 15.776 8.276 16 8 16C7.724 16 7.5 15.776 7.5 15.5L7.5 13.4766C4.86554 13.238 2.763 11.1345 2.52441 8.5L0.5 8.5C0.224 8.5 -3.61755e-07 8.276 -3.49691e-07 8C-3.29564e-07 7.724 0.224 7.5 0.5 7.5L2.52441 7.5C2.763 4.86555 4.86554 2.76198 7.5 2.52344L7.5 0.5C7.5 0.224 7.724 -3.61755e-07 8 -3.4969e-07C8.276 -3.29563e-07 8.5 0.224 8.5 0.5L8.5 2.52344C11.1345 2.76199 13.238 4.86551 13.4766 7.5L15.5 7.5C15.776 7.5 16 7.724 16 8ZM12.5 8C12.5 5.51867 10.4813 3.5 8 3.5C5.51867 3.5 3.5 5.51867 3.5 8C3.5 10.4813 5.51867 12.5 8 12.5C10.4813 12.5 12.5 10.4813 12.5 8ZM10 8C10 9.10457 9.10457 10 8 10C6.89543 10 6 9.10457 6 8C6 6.89543 6.89543 6 8 6C9.10457 6 10 6.89543 10 8Z\"\n fill=\"currentColor\"\n />\n </svg>\n )}\n </div>\n </div>\n );\n };\n\n return (\n <div className={timerClasses}>\n <div className=\"timer-section\">\n <div className=\"timer-content\">\n <div className=\"timer-display-area\">\n {user === 'admin' && (\n <div className=\"timer-header\">\n <span className=\"timer-title\">\n {selectedPhase !== null \n ? (getPhaseByIndex(selectedPhase)?.title || `Phase ${selectedPhase + 1}`).toUpperCase()\n : (currentPhaseData?.title || 'TIMER').toUpperCase()}\n </span>\n <span className=\"timer-time\">{formatTime(Math.max(0, finalRemainingTime))}</span>\n </div>\n )}\n {user === 'admin' && (\n <div className=\"timer-progress-bar\">\n <div\n className=\"timer-progress-fill\"\n style={{ width: `${Math.min(100, progress)}%` }}\n />\n </div>\n )}\n {renderStepIndicators()}\n </div>\n </div>\n </div>\n\n {user === 'admin' && (\n <div className=\"timer-controls-section\">\n <button\n className=\"control-button control-button--previous\"\n onClick={() => {\n // Navigate to previous phase if available\n const targetIndex = selectedPhase !== null ? selectedPhase - 1 : currentPhaseIndex - 1;\n if (targetIndex >= 0) {\n setSelectedPhase(targetIndex);\n onPrevious?.(getPhaseTitle(targetIndex));\n }\n }}\n disabled={\n selectedPhase !== null \n ? selectedPhase <= 0\n : currentPhaseIndex <= 0\n }\n title=\"Previous\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M11.9813 2.39178C12.1589 2.38845 12.3342 2.43251 12.4892 2.51941C12.6441 2.60631 12.7731 2.73291 12.8629 2.88621C12.9527 3.0395 13 3.21395 13 3.3916L12.5 3.3916H13V12.6085C13 12.7862 12.9527 12.9606 12.8629 13.1139C12.7731 13.2672 12.6441 13.3938 12.4892 13.4807C12.3342 13.5676 12.1589 13.6117 11.9813 13.6084C11.8037 13.605 11.6301 13.5545 11.4785 13.4618L3.93741 8.85335C3.79124 8.76403 3.67046 8.63865 3.58667 8.48923C3.50287 8.33982 3.45886 8.17138 3.45886 8.00007C3.45886 7.82877 3.50287 7.66033 3.58667 7.51092C3.67046 7.3615 3.79124 7.23612 3.93741 7.14679L11.4785 2.53832C11.6301 2.44568 11.8037 2.3951 11.9813 2.39178ZM12 3.3916L4.45886 8.00007L4.19814 7.57343L4.45886 8.00007L12 12.6085V3.3916Z\"\n fill=\"black\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2 2C2.27614 2 2.5 2.22386 2.5 2.5V13.5C2.5 13.7761 2.27614 14 2 14C1.72386 14 1.5 13.7761 1.5 13.5V2.5C1.5 2.22386 1.72386 2 2 2Z\"\n fill=\"black\"\n />\n </svg>\n </button>\n\n <button\n className=\"control-button control-button--next\"\n onClick={() => {\n // Navigate to next phase if available\n const currentRef = selectedPhase !== null ? selectedPhase : currentPhaseIndex;\n const targetIndex = currentRef + 1;\n if (targetIndex < phases.length && targetIndex <= currentPhaseIndex) {\n setSelectedPhase(targetIndex);\n onNext?.(getPhaseTitle(targetIndex));\n }\n }}\n disabled={\n selectedPhase !== null \n ? (selectedPhase >= currentPhaseIndex || selectedPhase >= phases.length - 1)\n : (currentPhaseIndex >= phases.length - 1)\n }\n title=\"Next\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.51084 2.51941C3.66579 2.43251 3.84109 2.38845 4.01871 2.39178C4.19633 2.3951 4.36986 2.44568 4.52145 2.53832L12.0626 7.14679C12.2088 7.23612 12.3295 7.3615 12.4133 7.51092C12.4971 7.66033 12.5411 7.82877 12.5411 8.00007C12.5411 8.17138 12.4971 8.33982 12.4133 8.48923C12.3295 8.63865 12.2088 8.76403 12.0626 8.85335L4.52145 13.4618C4.36986 13.5545 4.19633 13.605 4.01871 13.6084C3.84109 13.6117 3.66579 13.5676 3.51084 13.4807C3.3559 13.3938 3.2269 13.2672 3.13711 13.1139C3.04733 12.9606 3 12.7862 3 12.6085V3.3916C3 3.21395 3.04733 3.0395 3.13711 2.88621C3.22689 2.73292 3.35589 2.60631 3.51084 2.51941ZM11.5411 8.00007L4 3.3916V12.6085L11.5411 8.00007Z\"\n fill=\"black\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M14 2C14.2761 2 14.5 2.22386 14.5 2.5V13.5C14.5 13.7761 14.2761 14 14 14C13.7239 14 13.5 13.7761 13.5 13.5V2.5C13.5 2.22386 13.7239 2 14 2Z\"\n fill=\"black\"\n />\n </svg>\n </button>\n\n <button\n className={`control-button control-button--play-pause ${\n isRunning ? 'control-button--pause' : 'control-button--play'\n } ${isFrozen ? 'control-button--disabled' : ''}`}\n onClick={isRunning ? pause : start}\n title={isFrozen ? 'Frozen' : isRunning ? 'Pause' : isPaused ? 'Resume' : 'Start'}\n disabled={isFrozen}\n >\n {isRunning ? (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M12 4.5C7.85786 4.5 4.5 7.85786 4.5 12C4.5 15.1788 6.47789 17.8975 9.27283 18.989C9.65866 19.1397 9.8493 19.5746 9.69862 19.9604C9.54794 20.3463 9.113 20.5369 8.72717 20.3862C5.37607 19.0775 3 15.8172 3 12C3 7.02944 7.02944 3 12 3C16.2192 3 19.7585 5.90255 20.7337 9.81878C20.9078 10.5179 21 11.2487 21 12C21 12.4142 20.6642 12.75 20.25 12.75C19.8358 12.75 19.5 12.4142 19.5 12C19.5 11.3719 19.4229 10.7628 19.2781 10.1812C18.4655 6.91754 15.5141 4.5 12 4.5Z\"\n fill=\"black\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M18.75 15.75V22.25H20.25V15.75H18.75ZM17.25 15.3636C17.25 14.5918 17.9689 14.25 18.4615 14.25H20.5385C21.0311 14.25 21.75 14.5918 21.75 15.3636V22.6364C21.75 23.4082 21.0311 23.75 20.5385 23.75H18.4615C17.9689 23.75 17.25 23.4082 17.25 22.6364V15.3636Z\"\n fill=\"black\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M12.75 15.75V22.25H14.25V15.75H12.75ZM11.25 15.3636C11.25 14.5918 11.9689 14.25 12.4615 14.25H14.5385C15.0311 14.25 15.75 14.5918 15.75 15.3636V22.6364C15.75 23.4082 15.0311 23.75 14.5385 23.75H12.4615C11.9689 23.75 11.25 23.4082 11.25 22.6364V15.3636Z\"\n fill=\"black\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8.54996 7.40004C8.21858 7.64857 8.15143 8.11867 8.39996 8.45004L11.4 12.45C11.6485 12.7814 12.1186 12.8486 12.45 12.6C12.7813 12.3515 12.8485 11.8814 12.6 11.55L9.59996 7.55004C9.35143 7.21867 8.88133 7.15152 8.54996 7.40004Z\"\n fill=\"black\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9 0.75C9 0.335786 9.33579 0 9.75 0H14.25C14.6642 0 15 0.335786 15 0.75C15 1.16421 14.6642 1.5 14.25 1.5H9.75C9.33579 1.5 9 1.16421 9 0.75Z\"\n fill=\"black\"\n />\n </svg>\n ) : (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M20.25 12C20.25 11.3103 20.1654 10.6404 20.0059 10C19.112 6.41005 15.8666 3.75 12 3.75C7.44365 3.75 3.75 7.44365 3.75 12C3.75 15.498 5.92698 18.4875 9 19.6876\"\n stroke=\"black\"\n strokeWidth=\"1.5\"\n strokeMiterlimit=\"10\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M12 12L9 8\"\n stroke=\"black\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M9.75 0.75H14.25\"\n stroke=\"black\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M20.7759 18.1242L13.7125 14.0646C13.6415 14.0238 13.5603 14.0015 13.4771 14.0001C13.3939 13.9986 13.3118 14.018 13.2392 14.0563C13.1667 14.0946 13.1063 14.1503 13.0642 14.2178C13.0222 14.2854 13 14.3622 13 14.4404V22.5596C13 22.6378 13.0222 22.7146 13.0642 22.7822C13.1063 22.8497 13.1667 22.9054 13.2392 22.9437C13.3118 22.982 13.3939 23.0014 13.4771 22.9999C13.5603 22.9985 13.6415 22.9762 13.7125 22.9354L20.7759 18.8758C20.8443 18.8365 20.9009 18.7813 20.9401 18.7154C20.9794 18.6496 21 18.5755 21 18.5C21 18.4245 20.9794 18.3504 20.9401 18.2846C20.9009 18.2187 20.8443 18.1635 20.7759 18.1242V18.1242Z\"\n stroke=\"black\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </button>\n\n <button\n className={`control-button control-button--freeze ${isFrozen ? 'control-button--freeze-active' : ''}`}\n onClick={() => freeze()}\n title={isFrozen ? 'Unfreeze' : 'Freeze'}\n disabled={!isRunning && !isPaused && !isFrozen}\n >\n {/* Simple snowflake / asterisk style placeholder icon */}\n <svg width=\"14\" height=\"12\" viewBox=\"0 0 14 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M8.14697 0.146484C8.34224 -0.0486747 8.65878 -0.0487434 8.854 0.146484C9.04889 0.341739 9.04905 0.658358 8.854 0.853516L7.50049 2.20703V5.13281L10.0337 3.66992L10.5298 1.82129C10.6012 1.5547 10.8755 1.3966 11.1421 1.46777C11.4088 1.53922 11.5679 1.8134 11.4966 2.08008L11.0767 3.64648L12.6421 4.06543C12.9088 4.1369 13.0681 4.41198 12.9966 4.67871C12.925 4.94527 12.6499 5.10368 12.3833 5.03223L10.5347 4.53613L7.99951 5.99902L10.5347 7.46191L12.3833 6.96777C12.65 6.8963 12.9251 7.05456 12.9966 7.32129C13.068 7.58799 12.9088 7.86213 12.6421 7.93359L11.0767 8.35352L11.4966 9.91992C11.5677 10.1865 11.4086 10.4608 11.1421 10.5322C10.8756 10.6033 10.6013 10.4451 10.5298 10.1787L10.0337 8.32812L7.50049 6.86523V9.79297L8.854 11.1465C9.04889 11.3417 9.04905 11.6584 8.854 11.8535C8.65885 12.0487 8.34226 12.0484 8.14697 11.8535L7.00049 10.707L5.854 11.8535C5.65885 12.0487 5.34226 12.0484 5.14697 11.8535C4.95171 11.6583 4.95171 11.3417 5.14697 11.1465L6.50049 9.79297V6.86523L3.96533 8.32812L3.47021 10.1787C3.39865 10.4451 3.12439 10.6034 2.85791 10.5322C2.59128 10.4608 2.43314 10.1866 2.50439 9.91992L2.92334 8.35352L1.35791 7.93359C1.09118 7.86212 0.932919 7.58802 1.00439 7.32129C1.07593 7.05464 1.35001 6.89631 1.6167 6.96777L3.46436 7.46191L5.99951 5.99902L3.46436 4.53613L1.6167 5.03223C1.35014 5.10366 1.07608 4.94513 1.00439 4.67871C0.932919 4.41198 1.09118 4.1369 1.35791 4.06543L2.92334 3.64648L2.50439 2.08008C2.43293 1.81334 2.59118 1.53924 2.85791 1.46777C3.12453 1.39654 3.39878 1.55467 3.47021 1.82129L3.96533 3.66992L6.50049 5.13281V2.20703L5.14697 0.853516C4.95171 0.658253 4.95171 0.341747 5.14697 0.146484C5.34224 -0.0486746 5.65878 -0.0487434 5.854 0.146484L7.00049 1.29297L8.14697 0.146484Z\" fill=\"black\"/>\n</svg>\n\n </button>\n <button\n className={`control-button control-button--anonymise ${isAnonymised ? 'control-button--anonymise-active' : ''}`}\n onClick={() => toggleAnonymise()}\n title={isAnonymised ? 'Show Names' : 'Hide Names'}\n >\n {/* Simple snowflake / asterisk style placeholder icon */}\n <svg width=\"18\" height=\"12\" viewBox=\"0 0 18 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M4.19571 0.9375H13.9316L13.9576 0.939919L13.9055 1.5C13.9576 0.939919 13.958 0.939955 13.9584 0.939992L13.9593 0.940074L13.9612 0.940263L13.966 0.940753L13.9794 0.942218C13.9899 0.943426 14.0036 0.945121 14.0203 0.947429C14.0536 0.952044 14.0989 0.959129 14.1545 0.969722C14.2655 0.990879 14.4186 1.02621 14.5998 1.08426C14.9611 1.20007 15.4415 1.40866 15.9224 1.78153C16.9079 2.54562 17.8125 3.93493 17.8125 6.375C17.8125 8.84977 16.7446 10.2418 15.6228 10.9916C15.0757 11.3573 14.5319 11.5602 14.1264 11.6723C13.9228 11.7285 13.7514 11.7626 13.6282 11.7828C13.5666 11.7929 13.5167 11.7996 13.4807 11.8039C13.4626 11.8061 13.448 11.8076 13.437 11.8087L13.4234 11.81L13.4186 11.8104L13.4168 11.8106L13.416 11.8106C13.4157 11.8107 13.4154 11.8107 13.3704 11.25L13.416 11.8106L13.3929 11.8125H13.3704C12.4693 11.8125 11.7717 11.6348 11.2171 11.3425C10.6627 11.0503 10.2868 10.6623 10.0046 10.2977C9.86569 10.1182 9.74696 9.94078 9.64616 9.78996C9.5407 9.6322 9.46023 9.51197 9.38106 9.41262C9.22707 9.21935 9.16773 9.21939 9.13503 9.21941H9.13398C9.09752 9.21941 9.03241 9.22191 8.87346 9.41718C8.79345 9.51548 8.71127 9.63581 8.60695 9.79107C8.60069 9.80039 8.59437 9.80981 8.58797 9.81934C8.49236 9.96175 8.38151 10.1269 8.25589 10.2929C7.98421 10.6519 7.62551 11.0405 7.10214 11.335C6.57573 11.6313 5.91831 11.8125 5.07599 11.8125H5.0488L5.02173 11.8099L5.07599 11.25C5.02173 11.8099 5.02205 11.8099 5.02173 11.8099L5.0204 11.8097L5.01868 11.8096L5.01405 11.8091L5.00016 11.8076C4.98888 11.8063 4.97357 11.8045 4.95451 11.8019C4.91641 11.7969 4.8632 11.7892 4.79703 11.7779C4.66485 11.7553 4.47999 11.718 4.25972 11.6585C3.82115 11.5401 3.23123 11.3305 2.63538 10.9643C1.42058 10.2176 0.212463 8.83259 0.187947 6.38062C0.163902 3.97575 1.11355 2.587 2.13375 1.81616C2.63171 1.43991 3.12954 1.22329 3.50294 1.10027C3.69026 1.03855 3.84839 0.999684 3.96267 0.975868C4.01989 0.963945 4.06636 0.955744 4.10027 0.950316C4.11724 0.947601 4.13108 0.945576 4.14159 0.944124L4.15484 0.942358L4.15953 0.941769L4.16139 0.941543L4.1622 0.941446C4.16257 0.941403 4.16292 0.941361 4.22872 1.5L4.1622 0.941446L4.19571 0.9375ZM4.26997 2.0625C4.25203 2.06549 4.22575 2.07021 4.19218 2.07721C4.11398 2.09351 3.99723 2.1219 3.85498 2.16877C3.56924 2.26291 3.18912 2.42877 2.81194 2.71376C2.08184 3.2654 1.29234 4.31414 1.31289 6.36938C1.33297 8.37752 2.28763 9.43001 3.22447 10.0058C3.70444 10.3008 4.18756 10.4737 4.55306 10.5724C4.73484 10.6215 4.88477 10.6515 4.98688 10.669C5.03785 10.6778 5.07667 10.6833 5.1013 10.6866C5.10355 10.6869 5.10569 10.6871 5.10771 10.6874C5.76441 10.683 6.21815 10.5416 6.55042 10.3546C6.89104 10.1629 7.13992 9.90327 7.35877 9.61404C7.46458 9.47422 7.55912 9.33345 7.65787 9.18641L7.67313 9.1637C7.77297 9.01508 7.8831 8.85179 8.00097 8.70698C8.23778 8.41606 8.59073 8.09441 9.13398 8.09441C9.6812 8.09441 10.0292 8.42071 10.2609 8.71155C10.3706 8.8492 10.4746 9.00486 10.569 9.14611L10.5815 9.1648C10.6838 9.31787 10.7824 9.46461 10.8943 9.6092C11.1139 9.89292 11.3735 10.1532 11.7416 10.3472C12.1049 10.5387 12.6087 10.6838 13.3424 10.6874C13.3439 10.6873 13.3456 10.6871 13.3473 10.6869C13.368 10.6844 13.4015 10.6799 13.4459 10.6727C13.5349 10.658 13.6667 10.6321 13.8268 10.5879C14.1487 10.4989 14.5748 10.3389 14.9976 10.0563C15.8156 9.50956 16.6875 8.46406 16.6875 6.375C16.6875 4.25124 15.9198 3.20305 15.2331 2.6706C14.8779 2.3952 14.5221 2.24075 14.2564 2.1556C14.124 2.11316 14.0158 2.08853 13.944 2.07485C13.9117 2.0687 13.887 2.0648 13.8709 2.0625H4.26997ZM13.8498 2.05973C13.8494 2.05969 13.8497 2.05972 13.8508 2.05985L13.8498 2.05973Z\" fill={isAnonymised ? \"white\" : \"black\"}/>\n<path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M5.625 5.0625C4.77651 5.0625 4.3125 5.59288 4.3125 6C4.3125 6.40712 4.77651 6.9375 5.625 6.9375C6.47349 6.9375 6.9375 6.40712 6.9375 6C6.9375 5.59288 6.47349 5.0625 5.625 5.0625ZM3.1875 6C3.1875 4.75027 4.40242 3.9375 5.625 3.9375C6.84758 3.9375 8.0625 4.75027 8.0625 6C8.0625 7.24973 6.84758 8.0625 5.625 8.0625C4.40242 8.0625 3.1875 7.24973 3.1875 6Z\" fill={isAnonymised ? \"white\" : \"black\"}/>\n<path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M12.375 5.0625C11.5265 5.0625 11.0625 5.59288 11.0625 6C11.0625 6.40712 11.5265 6.9375 12.375 6.9375C13.2235 6.9375 13.6875 6.40712 13.6875 6C13.6875 5.59288 13.2235 5.0625 12.375 5.0625ZM9.9375 6C9.9375 4.75027 11.1524 3.9375 12.375 3.9375C13.5976 3.9375 14.8125 4.75027 14.8125 6C14.8125 7.24973 13.5976 8.0625 12.375 8.0625C11.1524 8.0625 9.9375 7.24973 9.9375 6Z\" fill={isAnonymised ? \"white\" : \"black\"}/>\n</svg>\n\n </button>\n </div>\n )}\n </div>\n );\n }\n);\n\nTimer.displayName = 'Timer';\n","import React, { useState, useEffect } from 'react';\nimport './ProgressBar.css';\n\nexport interface ProgressBarProps {\n progressEndDate?: number;\n leftTime?: number;\n progressTime?: number;\n className?: string;\n}\n\nexport const ProgressBar: React.FC<ProgressBarProps> = ({ \n progressEndDate, \n leftTime, \n progressTime, \n className = '' \n}) => {\n const [progress, setProgress] = useState(0);\n const [startTime] = useState(Date.now());\n\n useEffect(() => {\n let interval: NodeJS.Timeout | null = null;\n\n if (progressEndDate && !leftTime && !progressTime) {\n const updateProgress = () => {\n const now = Date.now();\n const timeLeft = Math.max(0, progressEndDate - now);\n const totalTime = progressEndDate - startTime;\n const elapsed = now - startTime;\n const progressPercent = Math.max(0, Math.min(100, (elapsed / totalTime) * 100));\n setProgress(progressPercent);\n\n if (timeLeft <= 0) {\n setProgress(100);\n if (interval) clearInterval(interval);\n }\n };\n\n updateProgress();\n interval = setInterval(updateProgress, 100);\n } else if (leftTime !== undefined && progressTime !== undefined) {\n const progressPercent = Math.max(0, Math.min(100, ((progressTime - leftTime) / progressTime) * 100));\n setProgress(progressPercent);\n }\n\n return () => {\n if (interval) clearInterval(interval);\n };\n }, [progressEndDate, leftTime, progressTime, startTime]);\n\n return (\n <div className={`progress-bar ${className}`}>\n <div \n className=\"progress-fill\" \n style={{ width: `${progress}%` }}\n />\n </div>\n );\n};\n\nProgressBar.displayName = 'ProgressBar';\n","import { useState } from 'react';\nimport './Gain.css';\n\nexport function Gain() {\n const [points, setPoints] = useState<number | null>(null);\n\n const handleGainPoints = () => {\n setPoints(200); // example\n setTimeout(() => setPoints(null), 2000); // hide after 2s\n };\n\n return (\n <div className=\"gain\">\n <button onClick={handleGainPoints}>Gain 200</button>\n\n <div className=\"score-area\">{points && <div className=\"points\">+{points}</div>}</div>\n </div>\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { InputNumber } from './InputNumber';\nimport './BuyLine.css';\nimport { Chip } from './Chip';\nimport { ValueWithUnit } from './ValueWithUnit';\n\nconst SendIcon: React.FC<{ className?: string; disabled?: boolean }> = ({\n className,\n disabled,\n}) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n preserveAspectRatio=\"none\"\n width=\"20\"\n height=\"20\"\n overflow=\"visible\"\n className={className}\n viewBox=\"0 0 21 21\"\n fill=\"none\"\n >\n <g id=\"send-email-1\">\n <path\n id=\"Shape\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M1.90273 8.85333C1.37949 8.70573 1.01357 8.2343 1.00037 7.6908C0.987168 7.1473 1.32977 6.65867 1.84523 6.48583L18.5711 1.03083C18.7945 0.958012 19.0398 1.01645 19.2064 1.18215C19.373 1.34785 19.4327 1.5929 19.3611 1.81667L13.9102 18.5508C13.7382 19.0672 13.249 19.4107 12.7049 19.3973C12.1608 19.3839 11.6892 19.0167 11.5427 18.4925L9.67106 10.7167L1.90273 8.85333Z\"\n stroke={disabled ? '#999FA1' : '#009CDF'}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n id=\"Shape_2\"\n d=\"M19.2069 1.18083L9.67106 10.7167\"\n stroke={disabled ? '#999FA1' : '#009CDF'}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n </svg>\n);\n\nconst EditIcon: React.FC<{ className?: string; disabled?: boolean }> = ({\n className,\n disabled,\n}) => (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 25\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M10.1221 5.00073C10.5362 5.00073 10.8719 5.33666 10.8721 5.75073C10.8721 6.16495 10.5363 6.50073 10.1221 6.50073H2.62207C2.20796 6.50073 1.87223 6.83666 1.87207 7.25073V22.2507C1.87207 22.6649 2.20786 23.0007 2.62207 23.0007H17.6221C18.0363 23.0007 18.3721 22.6649 18.3721 22.2507V14.7507C18.3722 14.3367 18.708 14.0007 19.1221 14.0007C19.5362 14.0007 19.8719 14.3367 19.8721 14.7507V22.2507C19.8721 23.4934 18.8647 24.5007 17.6221 24.5007H2.62207C1.37943 24.5007 0.37207 23.4934 0.37207 22.2507V7.25073C0.37223 6.00823 1.37953 5.00073 2.62207 5.00073H10.1221ZM18.501 1.37866C19.6725 0.207539 21.5717 0.207579 22.7432 1.37866C23.9145 2.55026 23.9147 4.45033 22.7432 5.62183L13.1973 15.1677C13.0826 15.2823 12.9339 15.3567 12.7734 15.3796L9.06152 15.9109C8.56668 15.9817 8.14253 15.5571 8.21289 15.0623L8.74219 11.3494C8.76511 11.1888 8.84046 11.0403 8.95508 10.9255L18.501 1.37866ZM21.6826 2.44019C21.0968 1.85439 20.1473 1.85439 19.5615 2.44019L10.1924 11.8093L9.83887 14.2839L12.3135 13.9304L21.6826 4.56128C22.2683 3.9756 22.2681 3.02601 21.6826 2.44019Z\"\n fill={disabled ? '#999FA1' : '#009CDF'}\n />\n </svg>\n);\n\nconst TrashIcon: React.FC<{ className?: string; disabled?: boolean }> = ({\n className,\n disabled,\n}) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n preserveAspectRatio=\"none\"\n width=\"20\"\n height=\"20\"\n overflow=\"visible\"\n className={className}\n viewBox=\"0 0 24 22\"\n fill=\"none\"\n >\n <path\n id=\"color\"\n d=\"M14.6025 0C15.9552 0.000251909 17.0595 1.08982 17.0596 2.44434V3.42188H23.2773C23.6764 3.422 23.9998 3.75048 24 4.15527C24 4.52653 23.7278 4.83328 23.375 4.88184L23.2773 4.88867H20.5312V19.5557C20.531 20.9101 19.426 21.9999 18.0732 22H5.92871C4.57593 22 3.47095 20.9102 3.4707 19.5557V4.88867H0.722656C0.323522 4.88854 0 4.5602 0 4.15527C0.000141537 3.78415 0.272248 3.47726 0.625 3.42871L0.722656 3.42188H6.93945V2.44434C6.93951 1.08966 8.04456 0 9.39746 0H14.6025ZM4.91602 19.5557C4.91625 20.0551 5.30736 20.4737 5.81738 20.5273L5.92773 20.5332H18.0723C18.6355 20.5332 19.0847 20.0908 19.085 19.5557V4.88867H4.91602V19.5557ZM9.39648 8.55566C9.76246 8.55566 10.0654 8.83151 10.1133 9.18945L10.1191 9.28906V16.1338C10.1189 16.5386 9.79557 16.8662 9.39648 16.8662C9.03062 16.8661 8.72852 16.5903 8.68066 16.2324L8.67383 16.1338V9.28906C8.67383 8.88413 8.99735 8.55579 9.39648 8.55566ZM14.6016 8.55566C14.9675 8.55566 15.2705 8.83151 15.3184 9.18945L15.3242 9.28906V16.1328C15.3242 16.5378 15.0008 16.8662 14.6016 16.8662C14.2357 16.8661 13.9336 16.5903 13.8857 16.2324L13.8789 16.1328V9.28906C13.8789 8.88411 14.2024 8.55576 14.6016 8.55566ZM9.39648 1.4668C8.83325 1.46697 8.38483 1.90918 8.38477 2.44434V3.42188H15.6133V2.44434C15.6132 1.94484 15.2229 1.52638 14.7129 1.47266L14.6016 1.4668H9.39648Z\"\n fill={disabled ? '#999FA1' : '#009CDF'}\n />\n </svg>\n);\n\nconst SuccessIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M0.200073 7.99971C0.200073 3.69189 3.69225 0.199707 8.00007 0.199707C12.3079 0.199707 15.8001 3.69189 15.8001 7.99971C15.8001 12.3075 12.3079 15.7997 8.00007 15.7997C3.69225 15.7997 0.200073 12.3075 0.200073 7.99971Z\" fill=\"#4DA466\"/>\n<path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M11.6803 5.68769C11.8527 5.87926 11.8372 6.17433 11.6456 6.34675L7.20112 10.3467C7.02365 10.5065 6.75423 10.5065 6.57676 10.3467L4.35456 8.34674C4.16299 8.17433 4.14746 7.87926 4.31988 7.68769C4.49229 7.49612 4.78736 7.48059 4.97893 7.65301L6.88894 9.37204L11.0212 5.653C11.2128 5.48059 11.5079 5.49612 11.6803 5.68769Z\" fill=\"white\"/>\n</svg>\n);\nconst FailureIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M0.200073 7.99971C0.200073 3.69189 3.69225 0.199707 8.00007 0.199707C12.3079 0.199707 15.8001 3.69189 15.8001 7.99971C15.8001 12.3075 12.3079 15.7997 8.00007 15.7997C3.69225 15.7997 0.200073 12.3075 0.200073 7.99971Z\" fill=\"#EE695C\"/>\n<path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M10.33 5.66989C10.5122 5.85213 10.5122 6.14761 10.33 6.32985L6.32997 10.3299C6.14773 10.5121 5.85225 10.5121 5.67001 10.3299C5.48776 10.1476 5.48776 9.85213 5.67001 9.66989L9.67001 5.66989C9.85225 5.48764 10.1477 5.48764 10.33 5.66989Z\" fill=\"white\"/>\n<path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M5.67001 5.66989C5.85225 5.48764 6.14773 5.48764 6.32997 5.66989L10.33 9.66989C10.5122 9.85213 10.5122 10.1476 10.33 10.3299C10.1477 10.5121 9.85225 10.5121 9.67001 10.3299L5.67001 6.32985C5.48776 6.14761 5.48776 5.85213 5.67001 5.66989Z\" fill=\"white\"/>\n</svg>\n);\nconst PartialIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M0.200073 7.99971C0.200073 3.69189 3.69225 0.199707 8.00007 0.199707C12.3079 0.199707 15.8001 3.69189 15.8001 7.99971C15.8001 12.3075 12.3079 15.7997 8.00007 15.7997C3.69225 15.7997 0.200073 12.3075 0.200073 7.99971Z\" fill=\"#FBA23A\"/>\n<path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M11.6803 5.68769C11.8527 5.87926 11.8372 6.17433 11.6456 6.34675L7.20112 10.3467C7.02365 10.5065 6.75423 10.5065 6.57676 10.3467L4.35456 8.34674C4.16299 8.17433 4.14746 7.87926 4.31988 7.68769C4.49229 7.49612 4.78736 7.48059 4.97893 7.65301L6.88894 9.37204L11.0212 5.653C11.2128 5.48059 11.5079 5.49612 11.6803 5.68769Z\" fill=\"white\"/>\n</svg>\n);\n\nconst SpinnerIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n style={{ animation: 'spin 1s linear infinite' }}\n >\n <path\n d=\"M12 2V6M12 18V22M4.93 4.93L7.76 7.76M16.24 16.24L19.07 19.07M2 12H6M18 12H22M4.93 19.07L7.76 16.24M16.24 7.76L19.07 4.93\"\n stroke=\"#009CDF\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\ninterface BuyLineProps {\n title?: string;\n volume?: string;\n price?: string;\n defaultPrice?: number;\n showSecondInput?: boolean;\n showTrashButton?: boolean;\n disabled?: boolean;\n volumeMax?: { value: number };\n priceMax?: { value: number };\n iconType?: 'send' | 'edit';\n labels?: Array<{\n key: 'volume' | 'price' | 'total';\n label: string;\n }>;\n onVolumeChange?: (value: string) => void;\n onPriceChange?: (value: string) => void;\n onSend?: () => void;\n onClear?: () => void;\n className?: string;\n showStatus?: 'accepted' | 'refused' | 'partial';\n}\n\nexport const BuyLine: React.FC<BuyLineProps> = ({\n title = 'Achat 3',\n volume = '',\n price = '',\n defaultPrice,\n showSecondInput = true,\n showTrashButton = false,\n disabled = false,\n volumeMax,\n priceMax,\n iconType = 'send',\n labels,\n onVolumeChange,\n onPriceChange,\n onSend,\n onClear,\n className = '',\n showStatus,\n}) => {\n const [internalVolume, setInternalVolume] = useState(volume);\n const [internalPrice, setInternalPrice] = useState(price);\n const [showSuccessState, setShowSuccessState] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [volumeHasError, setVolumeHasError] = useState(false);\n const [priceHasError, setPriceHasError] = useState(false);\n\n const handleVolumeChange = (newValue: string) => {\n setInternalVolume(newValue);\n onVolumeChange?.(newValue);\n };\n\n const handleVolumeError = (hasError: boolean) => {\n setVolumeHasError(hasError);\n };\n\n useEffect(() => {\n setInternalVolume(volume);\n }, [volume]);\n\n useEffect(() => {\n setInternalPrice(price);\n }, [price]);\n\n const handlePriceChange = (newValue: string) => {\n setInternalPrice(newValue);\n onPriceChange?.(newValue);\n };\n\n const handlePriceError = (hasError: boolean) => {\n setPriceHasError(hasError);\n };\n\n const handleSend = () => {\n if (internalVolume.trim() !== '' && !volumeHasError && !priceHasError) {\n // Show success state and loading spinner\n setShowSuccessState(true);\n setIsLoading(true);\n\n // Wait 1 second, then execute onSend and cleanup\n setTimeout(() => {\n // Execute the onSend callback\n onSend?.();\n\n // Clear fields and states after successful send\n setInternalVolume('');\n setInternalPrice('');\n setVolumeHasError(false);\n setPriceHasError(false);\n setShowSuccessState(false);\n setIsLoading(false);\n }, 1000);\n }\n };\n\n const handleClear = () => {\n setInternalVolume('');\n setInternalPrice('');\n setVolumeHasError(false);\n setPriceHasError(false);\n setIsLoading(false);\n setShowSuccessState(false);\n onClear?.();\n };\n\n const calculatePrice = () => {\n // Return 0 if there are any validation errors\n if (volumeHasError || priceHasError) {\n return 0;\n }\n\n const volumeNum = parseFloat(internalVolume);\n if (!isNaN(volumeNum)) {\n if (showSecondInput) {\n const priceNum = parseFloat(internalPrice);\n if (!isNaN(priceNum)) {\n return volumeNum * priceNum;\n }\n } else if (defaultPrice !== undefined) {\n return volumeNum * defaultPrice;\n }\n }\n return 0;\n };\n\n const isSendDisabled = internalVolume.trim() === '' || volumeHasError || priceHasError;\n\n return (\n <div className={`buyline ${labels ? 'buyline--has-labels' : ''} ${className}`}>\n {/*labels && (\n <div className=\"buyline__labels\">\n <div className=\"buyline__label buyline__label--title\"></div>\n {labels.map((label) => (\n <>\n <div style={{ width: '64px' }}></div>\n <div key={label.key} className={`buyline__label buyline__label--${label.key}`}>\n {label.label}\n </div>\n </>\n ))}\n </div>\n )*/}\n <div className=\"buyline__container\">\n <div className=\"buyline__content\">\n <div className=\"buyline__inputs\">\n {title && <div className=\"buyline__title\">{title}</div>}\n\n <div className=\"buyline__input_container\">\n {labels?.find((label) => label.key === 'volume') && (\n <div className=\"buyline__label--description\">\n {labels.find((label) => label.key === 'volume')?.label}\n </div>\n )}\n <InputNumber\n label=\"MWh\"\n value={internalVolume}\n onChange={handleVolumeChange}\n onErrorChange={handleVolumeError}\n disabled={disabled}\n min={{ value: 0 }}\n max={volumeMax || { value: 9999 }}\n showSuccess={showSuccessState}\n inputWidth={70}\n />\n </div>\n {showSecondInput && (\n <div className=\"buyline__input_container\">\n {labels?.find((label) => label.key === 'price') && (\n <div className=\"buyline__label--description\">\n {labels.find((label) => label.key === 'price')?.label}\n </div>\n )}\n <InputNumber\n label=\"€/MWh\"\n value={internalPrice}\n onChange={handlePriceChange}\n onErrorChange={handlePriceError}\n disabled={disabled}\n min={{ value: 0 }}\n max={priceMax || { value: 9999 }}\n showSuccess={showSuccessState}\n inputWidth={85}\n />\n </div>\n )}\n </div>\n <div className=\"buyline__recette\">\n {labels?.find((label) => label.key === 'total') && (\n <div className=\"buyline__label--description\">\n {labels.find((label) => label.key === 'total')?.label}\n </div>\n )}\n <div className=\"buyline__total\">\n <Chip width=\"fit-content\" bgColor={calculatePrice() === 0 ? '#F2F4F4' : '#E1F5FD'}>\n <ValueWithUnit\n cost={calculatePrice()}\n textColor={calculatePrice() === 0 ? '#999FA1' : '#005896'}\n type=\"euro\"\n />\n </Chip>\n </div>\n </div>\n </div>\n {showStatus ? (\n <div className=\"buyline__status\">\n {showStatus === 'accepted' ? (\n <SuccessIcon className=\"buyline__status-icon\" />\n ) : showStatus === 'partial' ? (\n <PartialIcon className=\"buyline__status-icon\" />\n ) : (\n <FailureIcon className=\"buyline__status-icon\" />\n )}\n </div>\n ) : (\n <div className=\"buyline__actions\">\n {!disabled && (\n <button\n className={`buyline__send ${isSendDisabled || isLoading ? 'buyline__send--disabled' : ''}`}\n onClick={handleSend}\n disabled={isSendDisabled || isLoading}\n aria-label={isLoading ? 'Sending...' : iconType === 'edit' ? 'Edit' : 'Send'}\n >\n {isLoading ? (\n <SpinnerIcon className=\"buyline__icon\" />\n ) : iconType === 'edit' ? (\n <EditIcon className=\"buyline__icon\" disabled={isSendDisabled} />\n ) : (\n <SendIcon className=\"buyline__icon\" disabled={isSendDisabled} />\n )}\n </button>\n )}\n {showTrashButton && (\n <button\n className=\"buyline__trash\"\n onClick={handleClear}\n disabled={isLoading}\n aria-label=\"Clear\"\n >\n <TrashIcon className=\"buyline__icon\" disabled={isLoading} />\n </button>\n )}\n </div>\n )}\n </div>\n <div className=\"buyline__border\" />\n </div>\n );\n};\n","import React from 'react';\nimport './Button.css';\n\ninterface ButtonProps {\n text: string;\n leftIcon?: string;\n rightIcon?: string;\n onClick?: () => void;\n disabled?: boolean;\n className?: string;\n bgColor?: string;\n textColor?: string;\n size?: 'small' | 'large';\n}\n\nconst getIcon = (iconName: string, color: string = 'white'): React.ReactNode => {\n const iconMap: Record<string, React.ReactNode> = {\n plusIcon: (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8 0C8.27614 0 8.50436 0.205203 8.54048 0.47144L8.54545 0.545455V7.45455H15.4545C15.7558 7.45455 16 7.69875 16 8C16 8.27614 15.7948 8.50436 15.5286 8.54048L15.4545 8.54545H8.54545V15.4545C8.54545 15.7558 8.30125 16 8 16C7.72386 16 7.49564 15.7948 7.45953 15.5286L7.45455 15.4545V8.54545H0.545455C0.244208 8.54545 0 8.30125 0 8C0 7.72386 0.205203 7.49564 0.47144 7.45953L0.545455 7.45455H7.45455V0.545455C7.45455 0.244208 7.69875 0 8 0Z\"\n fill={color}\n />\n </svg>\n ),\n settingIcon: (\n <svg\n width=\"22\"\n height=\"22\"\n viewBox=\"0 0 22 22\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9.78828 3.03085C10.0975 3.37414 10.5379 3.57013 11 3.57013C11.462 3.57013 11.9024 3.37414 12.2116 3.03085L12.995 2.16335C13.4578 1.65028 14.1935 1.48418 14.8319 1.74862C15.4703 2.01307 15.873 2.65078 15.8375 3.34085L15.7775 4.50752C15.754 4.96893 15.927 5.4187 16.2537 5.7454C16.5804 6.07209 17.0302 6.24514 17.4916 6.22168L18.6583 6.16252C19.3475 6.12854 19.9836 6.53156 20.2473 7.16924C20.511 7.80691 20.3452 8.5415 19.8333 9.00418L18.965 9.78835C18.6221 10.0979 18.4265 10.5381 18.4265 11C18.4265 11.4619 18.6221 11.9022 18.965 12.2117L19.8333 12.995C20.3464 13.4579 20.5125 14.1936 20.248 14.832C19.9836 15.4703 19.3459 15.8731 18.6558 15.8375L17.4891 15.7775C17.0279 15.7541 16.5782 15.927 16.2516 16.2535C15.9249 16.58 15.7517 17.0296 15.775 17.4908L15.835 18.6575C15.8684 19.3461 15.4658 19.9815 14.8289 20.2452C14.1919 20.5089 13.458 20.3441 12.995 19.8333L12.2116 18.9658C11.9021 18.623 11.4618 18.4274 11 18.4274C10.5381 18.4274 10.0978 18.623 9.78828 18.9658L9.00495 19.8333C8.54185 20.3424 7.80925 20.5064 7.17332 20.2433C6.53739 19.9803 6.13474 19.3466 6.16662 18.6592L6.22662 17.4925C6.25096 17.03 6.07763 16.579 5.74985 16.2519C5.42206 15.9247 4.9707 15.7523 4.50828 15.7775L3.34162 15.8375C2.65202 15.8719 2.01534 15.4688 1.75157 14.8307C1.4878 14.1926 1.65399 13.4576 2.16662 12.995L3.03495 12.2117C3.37776 11.9022 3.57341 11.4619 3.57341 11C3.57341 10.5381 3.37776 10.0979 3.03495 9.78835L2.16662 9.00418C1.65823 8.54096 1.49469 7.80879 1.75767 7.17327C2.02065 6.53776 2.65373 6.13523 3.34078 6.16668L4.50745 6.22585C4.96977 6.25017 5.42065 6.07695 5.74777 5.74936C6.07489 5.42176 6.24744 4.97063 6.22245 4.50835L6.16662 3.34085C6.13474 2.65339 6.53739 2.01978 7.17332 1.75671C7.80925 1.49363 8.54185 1.65761 9.00495 2.16668L9.78828 3.03085Z\"\n stroke={color}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M10.0625 15.0626C10.0625 14.5448 10.4822 14.1251 11 14.1251C11.5178 14.1251 11.9375 14.5448 11.9375 15.0626C11.9375 15.5803 11.5178 16.0001 11 16.0001C10.4822 16.0001 10.0625 15.5803 10.0625 15.0626Z\"\n fill={color}\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M11 5.37506C11.3452 5.37506 11.625 5.65488 11.625 6.00006V12.2501C11.625 12.5952 11.3452 12.8751 11 12.8751C10.6548 12.8751 10.375 12.5952 10.375 12.2501V6.00006C10.375 5.65488 10.6548 5.37506 11 5.37506Z\"\n fill={color}\n />\n </svg>\n ),\n arrowDownIcon: (\n <svg\n width=\"16\"\n height=\"10\"\n viewBox=\"0 0 16 10\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M15.8235 1.61477C16.065 1.35365 16.0578 0.946887 15.8072 0.694302C15.5566 0.441718 15.153 0.434496 14.8933 0.677901L7.87732 7.74957L1.10614 0.677901C0.847065 0.434503 0.442824 0.441725 0.192211 0.694302C-0.0577526 0.946887 -0.0649185 1.35365 0.176588 1.61477L7.87729 9.5L15.8235 1.61477Z\"\n fill=\"white\"\n />\n </svg>\n ),\n };\n return iconMap[iconName];\n};\n\nexport const Button = ({\n text,\n leftIcon,\n rightIcon,\n onClick,\n disabled = false,\n className = '',\n bgColor,\n textColor,\n size = 'large',\n}: ButtonProps) => {\n const getSizeStyles = (size: 'small' | 'large'): React.CSSProperties => {\n switch (size) {\n case 'small':\n return { height: '32px', padding: '8px 12px' };\n case 'large':\n return { height: '40px', padding: '12px 16px' };\n default:\n return { height: '40px', padding: '12px 16px' };\n }\n };\n\n const buttonStyle: React.CSSProperties = {\n ...getSizeStyles(size),\n ...(bgColor && { backgroundColor: bgColor }),\n ...(textColor && { color: textColor }),\n };\n\n return (\n <button\n className={`button ${className}`}\n onClick={onClick}\n disabled={disabled}\n data-name=\"Button\"\n style={buttonStyle}\n >\n {leftIcon && getIcon(leftIcon, textColor || 'white') && (\n <div className=\"button-icon\" data-name={leftIcon}>\n {getIcon(leftIcon, textColor || 'white')}\n </div>\n )}\n <div className=\"button-text\" style={textColor ? { color: textColor } : {}}>\n <p>{text}</p>\n </div>\n {rightIcon && getIcon(rightIcon, textColor || 'white') && (\n <div className=\"button-icon\" data-name={rightIcon}>\n {getIcon(rightIcon, textColor || 'white')}\n </div>\n )}\n </button>\n );\n};\n","import React, { useState } from 'react';\nimport './Accordion.css';\n\ninterface AccordionProps {\n title: string;\n openedContent?: React.ReactNode;\n closedContent?: React.ReactNode;\n defaultOpen?: boolean;\n className?: string;\n theme?: 'white' | 'blue';\n onToggle?: (isOpen: boolean) => void;\n}\n\nconst ArrowIcon = ({ isOpen, theme }: { isOpen: boolean; theme: 'white' | 'blue' }) => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={`accordion-arrow ${isOpen ? 'accordion-arrow--open' : ''}`}\n >\n <path\n d=\"M4 6L8 10L12 6\"\n stroke={theme === 'blue' ? '#ffffff' : '#11161A'}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\nexport const Accordion = ({\n title,\n openedContent,\n closedContent,\n defaultOpen = false,\n className = '',\n theme = 'white',\n onToggle,\n}: AccordionProps) => {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n\n const handleToggle = () => {\n const newIsOpen = !isOpen;\n setIsOpen(newIsOpen);\n onToggle?.(newIsOpen);\n };\n\n const themeClass = theme === 'blue' ? 'accordion--blue' : 'accordion--white';\n\n return (\n <div className={`accordion ${themeClass} ${className}`} data-name=\"Accordion\">\n <div className=\"accordion-header\" onClick={handleToggle}>\n <div className=\"accordion-title\">\n <p>{title}</p>\n </div>\n <ArrowIcon isOpen={isOpen} theme={theme} />\n </div>\n {((isOpen && openedContent) || (!isOpen && closedContent)) && (\n <div className=\"accordion-content\">\n <div className=\"accordion-content-item\">\n {isOpen ? openedContent : closedContent}\n </div>\n </div>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { Chip } from './Chip';\nimport './Ecart.css';\nimport { ValueWithUnit } from './ValueWithUnit';\n\ninterface EcartProps {\n /** The label text to display before the chip */\n label: string;\n /** The value to display inside the chip */\n value: string;\n /** Background color of the chip */\n chipBgColor?: string;\n /** Text color of the chip content */\n chipTextColor?: string;\n /** Icon to display next to the label - 'plus', 'minus', or none */\n icon?: 'plus' | 'minus';\n /** Style object to apply to the ecart-container */\n style?: React.CSSProperties;\n /** Additional CSS class name */\n className?: string;\n}\n\nconst PlusIcon = () => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"24\" height=\"24\" rx=\"12\" fill=\"#EAECED\" />\n <path\n d=\"M12.8555 11.1641H15.8789V12.875H12.8555V15.8828H11.1445V12.875H8.12109V11.1641H11.1445V8.11719H12.8555V11.1641Z\"\n fill=\"#11161A\"\n />\n </svg>\n);\n\nconst MinusIcon = () => (\n <svg width=\"25\" height=\"24\" viewBox=\"0 0 25 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"0.5\" width=\"24\" height=\"24\" rx=\"12\" fill=\"#EAECED\" />\n <path d=\"M15.1534 11.0396V12.96H9.84656V11.0396H15.1534Z\" fill=\"#11161A\" />\n </svg>\n);\n\nexport const Ecart: React.FC<EcartProps> = ({\n label,\n value,\n chipBgColor = '#d3d64e',\n chipTextColor = '#11161a',\n icon,\n style,\n className = '',\n}) => {\n return (\n <div \n className={`ecart-container ${className}`} \n style={style}\n data-name=\"Ecart\"\n >\n <div className=\"ecart-content\">\n <div className=\"ecart-label\">\n <span>{label}</span>\n </div>\n <div className=\"ecart-icon-container\">\n {icon && (\n <div className=\"ecart-icon-wrapper\">\n {icon === 'plus' ? <PlusIcon /> : <MinusIcon />}\n </div>\n )}\n <div className=\"ecart-value-wrapper\">\n <Chip bgColor={chipBgColor}>\n <ValueWithUnit cost={parseFloat(value)} type=\"megawatt\" textColor={chipTextColor} />\n </Chip>\n </div>\n </div>\n </div>\n </div>\n );\n};\n","import React from 'react';\r\n\r\ninterface IconProps {\r\n className?: string;\r\n size?: number;\r\n color?: string;\r\n disabled?: boolean;\r\n}\r\n\r\n// Send/Email icon from BuyLine\r\nexport const SendIcon: React.FC<IconProps> = ({ className, size = 20, color, disabled }) => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n preserveAspectRatio=\"none\"\r\n width={size}\r\n height={size}\r\n overflow=\"visible\"\r\n className={className}\r\n viewBox=\"0 0 21 21\"\r\n fill=\"none\"\r\n >\r\n <g id=\"send-email-1\">\r\n <path\r\n id=\"Shape\"\r\n fillRule=\"evenodd\"\r\n clipRule=\"evenodd\"\r\n d=\"M1.90273 8.85333C1.37949 8.70573 1.01357 8.2343 1.00037 7.6908C0.987168 7.1473 1.32977 6.65867 1.84523 6.48583L18.5711 1.03083C18.7945 0.958012 19.0398 1.01645 19.2064 1.18215C19.373 1.34785 19.4327 1.5929 19.3611 1.81667L13.9102 18.5508C13.7382 19.0672 13.249 19.4107 12.7049 19.3973C12.1608 19.3839 11.6892 19.0167 11.5427 18.4925L9.67106 10.7167L1.90273 8.85333Z\"\r\n stroke={color || (disabled ? '#999FA1' : '#009CDF')}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n <path\r\n id=\"Shape_2\"\r\n d=\"M19.2069 1.18083L9.67106 10.7167\"\r\n stroke={color || (disabled ? '#999FA1' : '#009CDF')}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </g>\r\n </svg>\r\n);\r\n\r\n// Edit/Pencil icon from BuyLine\r\nexport const EditIcon: React.FC<IconProps> = ({ className, size = 20, color, disabled }) => (\r\n <svg\r\n width={size}\r\n height={size}\r\n viewBox=\"0 0 24 25\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n className={className}\r\n >\r\n <path\r\n d=\"M10.1221 5.00073C10.5362 5.00073 10.8719 5.33666 10.8721 5.75073C10.8721 6.16495 10.5363 6.50073 10.1221 6.50073H2.62207C2.20796 6.50073 1.87223 6.83666 1.87207 7.25073V22.2507C1.87207 22.6649 2.20786 23.0007 2.62207 23.0007H17.6221C18.0363 23.0007 18.3721 22.6649 18.3721 22.2507V14.7507C18.3722 14.3367 18.708 14.0007 19.1221 14.0007C19.5362 14.0007 19.8719 14.3367 19.8721 14.7507V22.2507C19.8721 23.4934 18.8647 24.5007 17.6221 24.5007H2.62207C1.37943 24.5007 0.37207 23.4934 0.37207 22.2507V7.25073C0.37223 6.00823 1.37953 5.00073 2.62207 5.00073H10.1221ZM18.501 1.37866C19.6725 0.207539 21.5717 0.207579 22.7432 1.37866C23.9145 2.55026 23.9147 4.45033 22.7432 5.62183L13.1973 15.1677C13.0826 15.2823 12.9339 15.3567 12.7734 15.3796L9.06152 15.9109C8.56668 15.9817 8.14253 15.5571 8.21289 15.0623L8.74219 11.3494C8.76511 11.1888 8.84046 11.0403 8.95508 10.9255L18.501 1.37866ZM21.6826 2.44019C21.0968 1.85439 20.1473 1.85439 19.5615 2.44019L10.1924 11.8093L9.83887 14.2839L12.3135 13.9304L21.6826 4.56128C22.2683 3.9756 22.2681 3.02601 21.6826 2.44019Z\"\r\n fill={color || (disabled ? '#999FA1' : '#009CDF')}\r\n />\r\n </svg>\r\n);\r\n\r\n// Trash/Delete icon from BuyLine\r\nexport const TrashIcon: React.FC<IconProps> = ({ className, size = 20, color, disabled }) => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n preserveAspectRatio=\"none\"\r\n width={size}\r\n height={size}\r\n overflow=\"visible\"\r\n className={className}\r\n viewBox=\"0 0 24 22\"\r\n fill=\"none\"\r\n >\r\n <path\r\n id=\"color\"\r\n d=\"M14.6025 0C15.9552 0.000251909 17.0595 1.08982 17.0596 2.44434V3.42188H23.2773C23.6764 3.422 23.9998 3.75048 24 4.15527C24 4.52653 23.7278 4.83328 23.375 4.88184L23.2773 4.88867H20.5312V19.5557C20.531 20.9101 19.426 21.9999 18.0732 22H5.92871C4.57593 22 3.47095 20.9102 3.4707 19.5557V4.88867H0.722656C0.323522 4.88854 0 4.5602 0 4.15527C0.000141537 3.78415 0.272248 3.47726 0.625 3.42871L0.722656 3.42188H6.93945V2.44434C6.93951 1.08966 8.04456 0 9.39746 0H14.6025ZM4.91602 19.5557C4.91625 20.0551 5.30736 20.4737 5.81738 20.5273L5.92773 20.5332H18.0723C18.6355 20.5332 19.0847 20.0908 19.085 19.5557V4.88867H4.91602V19.5557ZM9.39648 8.55566C9.76246 8.55566 10.0654 8.83151 10.1133 9.18945L10.1191 9.28906V16.1338C10.1189 16.5386 9.79557 16.8662 9.39648 16.8662C9.03062 16.8661 8.72852 16.5903 8.68066 16.2324L8.67383 16.1338V9.28906C8.67383 8.88413 8.99735 8.55579 9.39648 8.55566ZM14.6016 8.55566C14.9675 8.55566 15.2705 8.83151 15.3184 9.18945L15.3242 9.28906V16.1328C15.3242 16.5378 15.0008 16.8662 14.6016 16.8662C14.2357 16.8661 13.9336 16.5903 13.8857 16.2324L13.8789 16.1328V9.28906C13.8789 8.88411 14.2024 8.55576 14.6016 8.55566ZM9.39648 1.4668C8.83325 1.46697 8.38483 1.90918 8.38477 2.44434V3.42188H15.6133V2.44434C15.6132 1.94484 15.2229 1.52638 14.7129 1.47266L14.6016 1.4668H9.39648Z\"\r\n fill={color || (disabled ? '#999FA1' : '#009CDF')}\r\n />\r\n </svg>\r\n);\r\n\r\n// Success/Checkmark icon from BuyLine (16x16 version)\r\nexport const SuccessIcon: React.FC<IconProps> = ({ className, size = 16, color }) => (\r\n <svg \r\n width={size} \r\n height={size} \r\n viewBox=\"0 0 16 16\" \r\n fill=\"none\" \r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n className={className}\r\n >\r\n <path \r\n fillRule=\"evenodd\" \r\n clipRule=\"evenodd\" \r\n d=\"M0.200073 7.99971C0.200073 3.69189 3.69225 0.199707 8.00007 0.199707C12.3079 0.199707 15.8001 3.69189 15.8001 7.99971C15.8001 12.3075 12.3079 15.7997 8.00007 15.7997C3.69225 15.7997 0.200073 12.3075 0.200073 7.99971Z\" \r\n fill={color || \"#4DA466\"}\r\n />\r\n <path \r\n fillRule=\"evenodd\" \r\n clipRule=\"evenodd\" \r\n d=\"M11.6803 5.68769C11.8527 5.87926 11.8372 6.17433 11.6456 6.34675L7.20112 10.3467C7.02365 10.5065 6.75423 10.5065 6.57676 10.3467L4.35456 8.34674C4.16299 8.17433 4.14746 7.87926 4.31988 7.68769C4.49229 7.49612 4.78736 7.48059 4.97893 7.65301L6.88894 9.37204L11.0212 5.653C11.2128 5.48059 11.5079 5.49612 11.6803 5.68769Z\" \r\n fill=\"white\"\r\n />\r\n </svg>\r\n);\r\n\r\n// Failure/X icon from BuyLine (16x16 version)\r\nexport const FailureIcon: React.FC<IconProps> = ({ className, size = 16, color }) => (\r\n <svg \r\n width={size} \r\n height={size} \r\n viewBox=\"0 0 16 16\" \r\n fill=\"none\" \r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n className={className}\r\n >\r\n <path \r\n fillRule=\"evenodd\" \r\n clipRule=\"evenodd\" \r\n d=\"M0.200073 7.99971C0.200073 3.69189 3.69225 0.199707 8.00007 0.199707C12.3079 0.199707 15.8001 3.69189 15.8001 7.99971C15.8001 12.3075 12.3079 15.7997 8.00007 15.7997C3.69225 15.7997 0.200073 12.3075 0.200073 7.99971Z\" \r\n fill={color || \"#EE695C\"}\r\n />\r\n <path \r\n fillRule=\"evenodd\" \r\n clipRule=\"evenodd\" \r\n d=\"M10.33 5.66989C10.5122 5.85213 10.5122 6.14761 10.33 6.32985L6.32997 10.3299C6.14773 10.5121 5.85225 10.5121 5.67001 10.3299C5.48776 10.1476 5.48776 9.85213 5.67001 9.66989L9.67001 5.66989C9.85225 5.48764 10.1477 5.48764 10.33 5.66989Z\" \r\n fill=\"white\"\r\n />\r\n <path \r\n fillRule=\"evenodd\" \r\n clipRule=\"evenodd\" \r\n d=\"M5.67001 5.66989C5.85225 5.48764 6.14773 5.48764 6.32997 5.66989L10.33 9.66989C10.5122 9.85213 10.5122 10.1476 10.33 10.3299C10.1477 10.5121 9.85225 10.5121 9.67001 10.3299L5.67001 6.32985C5.48776 6.14761 5.48776 5.85213 5.67001 5.66989Z\" \r\n fill=\"white\"\r\n />\r\n </svg>\r\n);\r\n\r\n// Partial/Warning icon from BuyLine (16x16 version)\r\nexport const PartialIcon: React.FC<IconProps> = ({ className, size = 16, color }) => (\r\n <svg \r\n width={size} \r\n height={size} \r\n viewBox=\"0 0 16 16\" \r\n fill=\"none\" \r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n className={className}\r\n >\r\n <path \r\n fillRule=\"evenodd\" \r\n clipRule=\"evenodd\" \r\n d=\"M0.200073 7.99971C0.200073 3.69189 3.69225 0.199707 8.00007 0.199707C12.3079 0.199707 15.8001 3.69189 15.8001 7.99971C15.8001 12.3075 12.3079 15.7997 8.00007 15.7997C3.69225 15.7997 0.200073 12.3075 0.200073 7.99971Z\" \r\n fill={color || \"#FBA23A\"}\r\n />\r\n <path \r\n fillRule=\"evenodd\" \r\n clipRule=\"evenodd\" \r\n d=\"M11.6803 5.68769C11.8527 5.87926 11.8372 6.17433 11.6456 6.34675L7.20112 10.3467C7.02365 10.5065 6.75423 10.5065 6.57676 10.3467L4.35456 8.34674C4.16299 8.17433 4.14746 7.87926 4.31988 7.68769C4.49229 7.49612 4.78736 7.48059 4.97893 7.65301L6.88894 9.37204L11.0212 5.653C11.2128 5.48059 11.5079 5.49612 11.6803 5.68769Z\" \r\n fill=\"white\"\r\n />\r\n </svg>\r\n);\r\n\r\n// Loading spinner icon from BuyLine\r\nexport const SpinnerIcon: React.FC<IconProps> = ({ className, size = 20, color }) => (\r\n <svg\r\n width={size}\r\n height={size}\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n className={className}\r\n style={{ animation: 'spin 1s linear infinite' }}\r\n >\r\n <path\r\n d=\"M12 2V6M12 18V22M4.93 4.93L7.76 7.76M16.24 16.24L19.07 19.07M2 12H6M18 12H22M4.93 19.07L7.76 16.24M16.24 7.76L19.07 4.93\"\r\n stroke={color || \"#009CDF\"}\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n);\r\n\r\n// Plus icon from Button and Ecart components\r\nexport const PlusIcon: React.FC<IconProps> = ({ className, size = 16, color }) => (\r\n <svg\r\n width={size}\r\n height={size}\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n className={className}\r\n >\r\n <path\r\n fillRule=\"evenodd\"\r\n clipRule=\"evenodd\"\r\n d=\"M8 0C8.27614 0 8.50436 0.205203 8.54048 0.47144L8.54545 0.545455V7.45455H15.4545C15.7558 7.45455 16 7.69875 16 8C16 8.27614 15.7948 8.50436 15.5286 8.54048L15.4545 8.54545H8.54545V15.4545C8.54545 15.7558 8.30125 16 8 16C7.72386 16 7.49564 15.7948 7.45953 15.5286L7.45455 15.4545V8.54545H0.545455C0.244208 8.54545 0 8.30125 0 8C0 7.72386 0.205203 7.49564 0.47144 7.45953L0.545455 7.45455H7.45455V0.545455C7.45455 0.244208 7.69875 0 8 0Z\"\r\n fill={color || 'white'}\r\n />\r\n </svg>\r\n);\r\n\r\n// Plus icon with circular background from Ecart component\r\nexport const PlusCircleIcon: React.FC<IconProps> = ({ className, size = 24, color }) => (\r\n <svg \r\n width={size} \r\n height={size} \r\n viewBox=\"0 0 24 24\" \r\n fill=\"none\" \r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n className={className}\r\n >\r\n <rect width=\"24\" height=\"24\" rx=\"12\" fill=\"#EAECED\" />\r\n <path\r\n d=\"M12.8555 11.1641H15.8789V12.875H12.8555V15.8828H11.1445V12.875H8.12109V11.1641H11.1445V8.11719H12.8555V11.1641Z\"\r\n fill={color || \"#11161A\"}\r\n />\r\n </svg>\r\n);\r\n\r\n// Minus icon with circular background from Ecart component\r\nexport const MinusCircleIcon: React.FC<IconProps> = ({ className, size = 24, color }) => (\r\n <svg \r\n width={size} \r\n height={size} \r\n viewBox=\"0 0 25 24\" \r\n fill=\"none\" \r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n className={className}\r\n >\r\n <rect x=\"0.5\" width=\"24\" height=\"24\" rx=\"12\" fill=\"#EAECED\" />\r\n <path d=\"M15.1534 11.0396V12.96H9.84656V11.0396H15.1534Z\" fill={color || \"#11161A\"} />\r\n </svg>\r\n);\r\n\r\n// Arrow down icon from Accordion component\r\nexport const ArrowDownIcon: React.FC<IconProps & { isOpen?: boolean; theme?: 'white' | 'blue' }> = ({ \r\n className, \r\n size = 16, \r\n color,\r\n isOpen = false, \r\n theme = 'white' \r\n}) => (\r\n <svg\r\n width={size}\r\n height={size}\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n className={`${className} ${isOpen ? 'accordion-arrow--open' : ''}`}\r\n >\r\n <path\r\n d=\"M4 6L8 10L12 6\"\r\n stroke={color || (theme === 'blue' ? '#ffffff' : '#11161A')}\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n);\r\n\r\n// Power/Switch icon from Switch component\r\nexport const PowerIcon: React.FC<IconProps & { isOff?: boolean }> = ({ \r\n className, \r\n size = 16, \r\n color,\r\n isOff = false \r\n}) => (\r\n <svg \r\n width={size} \r\n height={size} \r\n viewBox=\"0 0 16 16\" \r\n fill=\"none\" \r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n className={className}\r\n >\r\n <path\r\n d=\"M9.56529 2.85352C9.66365 2.57607 9.96837 2.43116 10.246 2.5293C13.4295 3.65507 15.3392 6.91015 14.7684 10.2383C14.1974 13.5667 11.3114 16 7.93443 16C4.55739 16 1.67151 13.5667 1.10045 10.2383C0.5296 6.91011 2.4393 3.65504 5.62291 2.5293C5.9005 2.43115 6.20523 2.57605 6.30357 2.85352C6.40176 3.13124 6.2561 3.43599 5.97838 3.53418C3.28438 4.48672 1.669 7.2423 2.1522 10.0586C2.63557 12.8747 5.07706 14.9336 7.93443 14.9336C10.7918 14.9336 13.2333 12.8747 13.7167 10.0586C14.1999 7.24233 12.5844 4.48676 9.89049 3.53418C9.61276 3.43599 9.4671 3.13124 9.56529 2.85352ZM7.93443 0C8.22892 3.10447e-05 8.46754 0.238727 8.46763 0.533203V7.4668C8.46763 7.76135 8.22898 8.00095 7.93443 8.00098C7.63986 8.00098 7.40123 7.76137 7.40123 7.4668V0.533203C7.40132 0.238707 7.63991 0 7.93443 0Z\"\r\n fill={color || (isOff ? '#999FA1' : '#009CDF')}\r\n />\r\n </svg>\r\n);\r\n\r\n// Switch thumb/circle from Switch component\r\nexport const SwitchThumbIcon: React.FC<IconProps & { isOff?: boolean }> = ({ \r\n className, \r\n size = 32, \r\n color,\r\n isOff = false \r\n}) => (\r\n <svg \r\n width={size} \r\n height={size} \r\n viewBox=\"0 0 32 32\" \r\n fill=\"none\" \r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n className={className}\r\n >\r\n <circle cx=\"16\" cy=\"16\" r=\"16\" fill={color || (isOff ? 'white' : '#009cdf')} />\r\n </svg>\r\n);\r\n\r\n// Target/Crosshair icon from Timer component\r\nexport const TargetIcon: React.FC<IconProps> = ({ className, size = 16, color }) => (\r\n <svg\r\n width={size}\r\n height={size}\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n className={className}\r\n >\r\n <path\r\n d=\"M16 8C16 8.276 15.776 8.5 15.5 8.5L13.4766 8.5C13.238 11.1345 11.1345 13.238 8.5 13.4766L8.5 15.5C8.5 15.776 8.276 16 8 16C7.724 16 7.5 15.776 7.5 15.5L7.5 13.4766C4.86554 13.238 2.763 11.1345 2.52441 8.5L0.5 8.5C0.224 8.5 -3.61755e-07 8.276 -3.49691e-07 8C-3.29564e-07 7.724 0.224 7.5 0.5 7.5L2.52441 7.5C2.763 4.86555 4.86554 2.76198 7.5 2.52344L7.5 0.5C7.5 0.224 7.724 -3.61755e-07 8 -3.4969e-07C8.276 -3.29563e-07 8.5 0.224 8.5 0.5L8.5 2.52344C11.1345 2.76199 13.238 4.86551 13.4766 7.5L15.5 7.5C15.776 7.5 16 7.724 16 8ZM12.5 8C12.5 5.51867 10.4813 3.5 8 3.5C5.51867 3.5 3.5 5.51867 3.5 8C3.5 10.4813 5.51867 12.5 8 12.5C10.4813 12.5 12.5 10.4813 12.5 8ZM10 8C10 9.10457 9.10457 10 8 10C6.89543 10 6 9.10457 6 8C6 6.89543 6.89543 6 8 6C9.10457 6 10 6.89543 10 8Z\"\r\n fill={color || \"currentColor\"}\r\n />\r\n </svg>\r\n);\r\n\r\n// Previous/Arrow left icon from Timer component\r\nexport const PreviousIcon: React.FC<IconProps> = ({ className, size = 16, color }) => (\r\n <svg\r\n width={size}\r\n height={size}\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n className={className}\r\n >\r\n <path\r\n fillRule=\"evenodd\"\r\n clipRule=\"evenodd\"\r\n d=\"M11.9813 2.39178C12.1589 2.38845 12.3342 2.43251 12.4892 2.51941C12.6441 2.60631 12.7731 2.73291 12.8629 2.88621C12.9527 3.0395 13 3.21395 13 3.3916L12.5 3.3916H13V12.6085C13 12.7862 12.9527 12.9606 12.8629 13.1139C12.7731 13.2672 12.6441 13.3938 12.4892 13.4807C12.3342 13.5676 12.1589 13.6117 11.9813 13.6084C11.8037 13.605 11.6301 13.5545 11.4785 13.4618L3.93741 8.85335C3.79124 8.76403 3.67046 8.63865 3.58667 8.48923C3.50287 8.33982 3.45886 8.17138 3.45886 8.00007C3.45886 7.82877 3.50287 7.66033 3.58667 7.51092C3.67046 7.3615 3.79124 7.23612 3.93741 7.14679L11.4785 2.53832C11.6301 2.44568 11.8037 2.3951 11.9813 2.39178ZM12 3.3916L4.45886 8.00007L4.19814 7.57343L4.45886 8.00007L12 12.6085V3.3916Z\"\r\n fill={color || \"black\"}\r\n />\r\n </svg>\r\n);\r\n\r\n// Next/Arrow right icon from Timer component\r\nexport const NextIcon: React.FC<IconProps> = ({ className, size = 16, color }) => (\r\n <svg\r\n width={size}\r\n height={size}\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n className={className}\r\n >\r\n <path\r\n fillRule=\"evenodd\"\r\n clipRule=\"evenodd\"\r\n d=\"M3.51084 2.51941C3.66579 2.43251 3.84109 2.38845 4.01871 2.39178C4.19633 2.3951 4.36986 2.44568 4.52145 2.53832L12.0626 7.14679C12.2088 7.23612 12.3295 7.3615 12.4133 7.51092C12.4971 7.66033 12.5411 7.82877 12.5411 8.00007C12.5411 8.17138 12.4971 8.33982 12.4133 8.48923C12.3295 8.63865 12.2088 8.76403 12.0626 8.85335L4.52145 13.4618C4.36986 13.5545 4.19633 13.605 4.01871 13.6084C3.84109 13.6117 3.66579 13.5676 3.51084 13.4807C3.3559 13.3938 3.2269 13.2672 3.13711 13.1139C3.04733 12.9606 3 12.7862 3 12.6085V3.3916C3 3.21395 3.04733 3.0395 3.13711 2.88621C3.22689 2.73292 3.35589 2.60631 3.51084 2.51941ZM11.5411 8.00007L4 3.3916V12.6085L11.5411 8.00007Z\"\r\n fill={color || \"black\"}\r\n />\r\n </svg>\r\n);\r\n\r\n// Pause icon from Timer component\r\nexport const PauseIcon: React.FC<IconProps> = ({ className, size = 24, color }) => (\r\n <svg\r\n width={size}\r\n height={size}\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n className={className}\r\n >\r\n <path\r\n fillRule=\"evenodd\"\r\n clipRule=\"evenodd\"\r\n d=\"M12 4.5C7.85786 4.5 4.5 7.85786 4.5 12C4.5 15.1788 6.47789 17.8975 9.27283 18.989C9.65866 19.1397 9.8493 19.5746 9.69862 19.9604C9.54794 20.3463 9.113 20.5369 8.72717 20.3862C5.37607 19.0775 3 15.8172 3 12C3 7.02944 7.02944 3 12 3C16.2192 3 19.7585 5.90255 20.7337 9.81878C20.9078 10.5179 21 11.2487 21 12C21 12.4142 20.6642 12.75 20.25 12.75C19.8358 12.75 19.5 12.4142 19.5 12C19.5 11.3719 19.4229 10.7628 19.2781 10.1812C18.4655 6.91754 15.5141 4.5 12 4.5Z\"\r\n fill={color || \"black\"}\r\n />\r\n </svg>\r\n);\r\n\r\n// Play icon from Timer component\r\nexport const PlayIcon: React.FC<IconProps> = ({ className, size = 24, color }) => (\r\n <svg\r\n width={size}\r\n height={size}\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n className={className}\r\n >\r\n <path\r\n d=\"M20.25 12C20.25 11.3103 20.1654 10.6404 20.0059 10C19.112 6.41005 15.8666 3.75 12 3.75C7.44365 3.75 3.75 7.44365 3.75 12C3.75 15.498 5.92698 18.4875 9 19.6876\"\r\n stroke={color || \"black\"}\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n);\r\n\r\n// Freeze/Snowflake icon from Timer component\r\nexport const FreezeIcon: React.FC<IconProps> = ({ className, size = 14, color }) => (\r\n <svg \r\n width={size} \r\n height=\"12\" \r\n viewBox=\"0 0 14 12\" \r\n fill=\"none\" \r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n className={className}\r\n >\r\n <path \r\n d=\"M8.14697 0.146484C8.34224 -0.0486747 8.65878 -0.0487434 8.854 0.146484C9.04889 0.341739 9.04905 0.658358 8.854 0.853516L7.50049 2.20703V5.13281L10.0337 3.66992L10.5298 1.82129C10.6012 1.5547 10.8755 1.3966 11.1421 1.46777C11.4088 1.53922 11.5679 1.8134 11.4966 2.08008L11.0767 3.64648L12.6421 4.06543C12.9088 4.1369 13.0681 4.41198 12.9966 4.67871C12.925 4.94527 12.6499 5.10368 12.3833 5.03223L10.5347 4.53613L7.99951 5.99902L10.5347 7.46191L12.3833 6.96777C12.65 6.8963 12.9251 7.05456 12.9966 7.32129C13.068 7.58799 12.9088 7.86213 12.6421 7.93359L11.0767 8.35352L11.4966 9.91992C11.5677 10.1865 11.4086 10.4608 11.1421 10.5322C10.8756 10.6033 10.6013 10.4451 10.5298 10.1787L10.0337 8.32812L7.50049 6.86523V9.79297L8.854 11.1465C9.04889 11.3417 9.04905 11.6584 8.854 11.8535C8.65885 12.0487 8.34226 12.0484 8.14697 11.8535L7.00049 10.707L5.854 11.8535C5.65885 12.0487 5.34226 12.0484 5.14697 11.8535C4.95171 11.6583 4.95171 11.3417 5.14697 11.1465L6.50049 9.79297V6.86523L3.96533 8.32812L3.47021 10.1787C3.39865 10.4451 3.12439 10.6034 2.85791 10.5322C2.59128 10.4608 2.43314 10.1866 2.50439 9.91992L2.92334 8.35352L1.35791 7.93359C1.09118 7.86212 0.932919 7.58802 1.00439 7.32129C1.07593 7.05464 1.35001 6.89631 1.6167 6.96777L3.46436 7.46191L5.99951 5.99902L3.46436 4.53613L1.6167 5.03223C1.35014 5.10366 1.07608 4.94513 1.00439 4.67871C0.932919 4.41198 1.09118 4.1369 1.35791 4.06543L2.92334 3.64648L2.50439 2.08008C2.43293 1.81334 2.59118 1.53924 2.85791 1.46777C3.12453 1.39654 3.39878 1.55467 3.47021 1.82129L3.96533 3.66992L6.50049 5.13281V2.20703L5.14697 0.853516C4.95171 0.658253 4.95171 0.341747 5.14697 0.146484C5.34224 -0.0486746 5.65878 -0.0487434 5.854 0.146484L7.00049 1.29297L8.14697 0.146484Z\" \r\n fill={color || \"black\"}\r\n />\r\n </svg>\r\n);\r\n\r\n// Anonymize/Eye icon from Timer component\r\nexport const AnonymizeIcon: React.FC<IconProps & { isAnonymised?: boolean }> = ({ \r\n className, \r\n size = 18, \r\n color,\r\n isAnonymised = false \r\n}) => (\r\n <svg \r\n width={size} \r\n height=\"12\" \r\n viewBox=\"0 0 18 12\" \r\n fill=\"none\" \r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n className={className}\r\n >\r\n <path \r\n fillRule=\"evenodd\" \r\n clipRule=\"evenodd\" \r\n d=\"M4.19571 0.9375H13.9316L13.9576 0.939919L13.9055 1.5C13.9576 0.939919 13.958 0.939955 13.9584 0.939992L13.9593 0.940074L13.9612 0.940263L13.966 0.940753L13.9794 0.942218C13.9899 0.943426 14.0036 0.945121 14.0203 0.947429C14.0536 0.952044 14.0989 0.959129 14.1545 0.969722C14.2655 0.990879 14.4186 1.02621 14.5998 1.08426C14.9611 1.20007 15.4415 1.40866 15.9224 1.78153C16.9079 2.54562 17.8125 3.93493 17.8125 6.375C17.8125 8.84977 16.7446 10.2418 15.6228 10.9916C15.0757 11.3573 14.5319 11.5602 14.1264 11.6723C13.9228 11.7285 13.7514 11.7626 13.6282 11.7828C13.5666 11.7929 13.5167 11.7996 13.4807 11.8039C13.4626 11.8061 13.448 11.8076 13.437 11.8087L13.4234 11.81L13.4186 11.8104L13.4168 11.8106L13.416 11.8106C13.4157 11.8107 13.4154 11.8107 13.3704 11.25L13.416 11.8106L13.3929 11.8125H13.3704C12.4693 11.8125 11.7717 11.6348 11.2171 11.3425C10.6627 11.0503 10.2868 10.6623 10.0046 10.2977C9.86569 10.1182 9.74696 9.94078 9.64616 9.78996C9.5407 9.6322 9.46023 9.51197 9.38106 9.41262C9.22707 9.21935 9.16773 9.21939 9.13503 9.21941H9.13398C9.09752 9.21941 9.03241 9.22191 8.87346 9.41718C8.79345 9.51548 8.71127 9.63581 8.60695 9.79107C8.60069 9.80039 8.59437 9.80981 8.58797 9.81934C8.49236 9.96175 8.38151 10.1269 8.25589 10.2929C7.98421 10.6519 7.62551 11.0405 7.10214 11.335C6.57573 11.6313 5.91831 11.8125 5.07599 11.8125H5.0488L5.02173 11.8099L5.07599 11.25C5.02173 11.8099 5.02205 11.8099 5.02173 11.8099L5.0204 11.8097L5.01868 11.8096L5.01405 11.8091L5.00016 11.8076C4.98888 11.8063 4.97357 11.8045 4.95451 11.8019C4.91641 11.7969 4.8632 11.7892 4.79703 11.7779C4.66485 11.7553 4.47999 11.718 4.25972 11.6585C3.82115 11.5401 3.23123 11.3305 2.63538 10.9643C1.42058 10.2176 0.212463 8.83259 0.187947 6.38062C0.163902 3.97575 1.11355 2.587 2.13375 1.81616C2.63171 1.43991 3.12954 1.22329 3.50294 1.10027C3.69026 1.03855 3.84839 0.999684 3.96267 0.975868C4.01989 0.963945 4.06636 0.955744 4.10027 0.950316C4.11724 0.947601 4.13108 0.945576 4.14159 0.944124L4.15484 0.942358L4.15953 0.941769L4.16139 0.941543L4.1622 0.941446C4.16257 0.941403 4.16292 0.941361 4.22872 1.5L4.1622 0.941446L4.19571 0.9375ZM4.26997 2.0625C4.25203 2.06549 4.22575 2.07021 4.19218 2.07721C4.11398 2.09351 3.99723 2.1219 3.85498 2.16877C3.56924 2.26291 3.18912 2.42877 2.81194 2.71376C2.08184 3.2654 1.29234 4.31414 1.31289 6.36938C1.33297 8.37752 2.28763 9.43001 3.22447 10.0058C3.70444 10.3008 4.18756 10.4737 4.55306 10.5724C4.73484 10.6215 4.88477 10.6515 4.98688 10.669C5.03785 10.6778 5.07667 10.6833 5.1013 10.6866C5.10355 10.6869 5.10569 10.6871 5.10771 10.6874C5.76441 10.683 6.21815 10.5416 6.55042 10.3546C6.89104 10.1629 7.13992 9.90327 7.35877 9.61404C7.46458 9.47422 7.55912 9.33345 7.65787 9.18641L7.67313 9.1637C7.77297 9.01508 7.8831 8.85179 8.00097 8.70698C8.23778 8.41606 8.59073 8.09441 9.13398 8.09441C9.6812 8.09441 10.0292 8.42071 10.2609 8.71155C10.3706 8.8492 10.4746 9.00486 10.569 9.14611L10.5815 9.1648C10.6838 9.31787 10.7824 9.46461 10.8943 9.6092C11.1139 9.89292 11.3735 10.1532 11.7416 10.3472C12.1049 10.5387 12.6087 10.6838 13.3424 10.6874C13.3439 10.6873 13.3456 10.6871 13.3473 10.6869C13.368 10.6844 13.4015 10.6799 13.4459 10.6727C13.5349 10.658 13.6667 10.6321 13.8268 10.5879C14.1487 10.4989 14.5748 10.3389 14.9976 10.0563C15.8156 9.50956 16.6875 8.46406 16.6875 6.375C16.6875 4.25124 15.9198 3.20305 15.2331 2.6706C14.8779 2.3952 14.5221 2.24075 14.2564 2.1556C14.124 2.11316 14.0158 2.08853 13.944 2.07485C13.9117 2.0687 13.887 2.0648 13.8709 2.0625H4.26997ZM13.8498 2.05973C13.8494 2.05969 13.8497 2.05972 13.8508 2.05985L13.8498 2.05973Z\" \r\n fill={color || (isAnonymised ? \"white\" : \"black\")}\r\n />\r\n <path \r\n fillRule=\"evenodd\" \r\n clipRule=\"evenodd\" \r\n d=\"M5.625 5.0625C4.77651 5.0625 4.3125 5.59288 4.3125 6C4.3125 6.40712 4.77651 6.9375 5.625 6.9375C6.47349 6.9375 6.9375 6.40712 6.9375 6C6.9375 5.59288 6.47349 5.0625 5.625 5.0625ZM3.1875 6C3.1875 4.75027 4.40242 3.9375 5.625 3.9375C6.84758 3.9375 8.0625 4.75027 8.0625 6C8.0625 7.24973 6.84758 8.0625 5.625 8.0625C4.40242 8.0625 3.1875 7.24973 3.1875 6Z\" \r\n fill={color || (isAnonymised ? \"white\" : \"black\")}\r\n />\r\n <path \r\n fillRule=\"evenodd\" \r\n clipRule=\"evenodd\" \r\n d=\"M12.375 5.0625C11.5265 5.0625 11.0625 5.59288 11.0625 6C11.0625 6.40712 11.5265 6.9375 12.375 6.9375C13.2235 6.9375 13.6875 6.40712 13.6875 6C13.6875 5.59288 13.2235 5.0625 12.375 5.0625ZM9.9375 6C9.9375 4.75027 11.1524 3.9375 12.375 3.9375C13.5976 3.9375 14.8125 4.75027 14.8125 6C14.8125 7.24973 13.5976 8.0625 12.375 8.0625C11.1524 8.0625 9.9375 7.24973 9.9375 6Z\" \r\n fill={color || (isAnonymised ? \"white\" : \"black\")}\r\n />\r\n </svg>\r\n);\r\n\r\n// User icon\r\nexport const UserIcon: React.FC<IconProps> = ({ className, size = 16, color }) => (\r\n <svg\r\n width={size}\r\n height={size}\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n className={className}\r\n >\r\n <path\r\n d=\"M8.00037 2.66699C9.76603 2.66724 11.1976 4.14551 11.1976 5.96875C11.1975 7.78449 9.77755 9.25735 8.02185 9.26953C10.0979 9.27896 11.9455 10.6336 12.6381 12.6562C12.7286 12.9207 12.5944 13.2112 12.3383 13.3047C12.0823 13.3979 11.8019 13.2592 11.7113 12.9951C11.1554 11.3713 9.66826 10.2853 8.00037 10.2852C6.33234 10.2852 4.84537 11.3712 4.28943 12.9951C4.19884 13.2595 3.91757 13.3981 3.6615 13.3047C3.40536 13.2112 3.27115 12.9207 3.36169 12.6562C4.05415 10.6337 5.90196 9.2791 7.97791 9.26953C6.2223 9.25723 4.80321 7.78442 4.8031 5.96875C4.8031 4.1454 6.23455 2.66706 8.00037 2.66699ZM8.00037 3.68262C6.7779 3.68268 5.7865 4.70644 5.7865 5.96875C5.78661 7.23096 6.77797 8.25384 8.00037 8.25391C9.22262 8.25366 10.2141 7.23085 10.2142 5.96875C10.2142 4.70655 9.22269 3.68286 8.00037 3.68262Z\"\r\n fill={color || \"black\"}\r\n />\r\n </svg>\r\n);\r\n\r\n// Export all icons as a single object for easier imports\r\nexport const Icons = {\r\n Send: SendIcon,\r\n Edit: EditIcon,\r\n Trash: TrashIcon,\r\n Success: SuccessIcon,\r\n Failure: FailureIcon,\r\n Partial: PartialIcon,\r\n Spinner: SpinnerIcon,\r\n Plus: PlusIcon,\r\n PlusCircle: PlusCircleIcon,\r\n MinusCircle: MinusCircleIcon,\r\n ArrowDown: ArrowDownIcon,\r\n Power: PowerIcon,\r\n SwitchThumb: SwitchThumbIcon,\r\n Target: TargetIcon,\r\n Previous: PreviousIcon,\r\n Next: NextIcon,\r\n Pause: PauseIcon,\r\n Play: PlayIcon,\r\n Freeze: FreezeIcon,\r\n Anonymize: AnonymizeIcon,\r\n User: UserIcon,\r\n};\r\n\r\nexport default Icons;"],"names":["InputNumber","_a","label","_b","value","onChange","onErrorChange","_c","disabled","_d","className","_e","required","_f","min","_g","max","_h","showSuccess","inputWidth","_j","useState","internalValue","setInternalValue","_k","isFocused","setIsFocused","_l","isOutOfRange","setIsOutOfRange","_m","calculatedWidth","setCalculatedWidth","inputRef","useRef","labelRef","finalInputWidth","useEffect","current","context","document","createElement","getContext","styles","window","getComputedStyle","font","concat","fontSize","fontFamily","textWidth","measureText","width","calculatedWidth_1","Math","containerClasses","length","filter","Boolean","join","_jsx","_jsxs","style","children","ref","type","e","newValue","target","numValue","parseFloat","isNaN","outOfRange","clampedValue","toString","onFocus","select","onBlur","clampedString","step","ImgOn","isOff","height","viewBox","fill","xmlns","d","SwitchThumb","cx","cy","r","Switch","checked","showIcon","internalChecked","setInternalChecked","isChecked","undefined","switchClasses","wrapperClasses","role","onClick","newChecked","Chip","bgColor","chipClasses","backgroundColor","ProductionUnit","onChangeInput","onChangeSwitch","defaultValue","defaultChecked","unitName","energyCost","checkedImage","uncheckedImage","readonly","unitLabel","editable","currentValue","boxShadow","ValueWithUnit","cost","textColor","val","color","Histogram","relative","barHeight","barWidth","orientation","cornerRadius","showGain","animatedHeight","setAnimatedHeight","animatedWidth","setAnimatedWidth","gainPoints","setGainPoints","_o","isPositiveChange","setIsPositiveChange","previousValueRef","isFirstRender","animationTimerRef","accumulatedChangeRef","animationStartValueRef","targetHeight","targetWidth","changeAmount","clearTimeout","totalChange","isIncrease","abs","setTimeout","startTime","Date","now","animate","elapsed","progress","easeOutQuart","pow","requestAnimationFrame","displayWidth","displayHeight","svgWidth","svgHeight","createRoundedRectPath","x","y","radii","topLeft","topRight","bottomLeft","bottomRight","trim","replace","defaultCornerRadius","corners","id","fillOpacity","opacity","clipPath","ProductionUnitContainer","Avatar","size","__assign","Object","assign","t","s","i","n","arguments","p","prototype","hasOwnProperty","call","apply","this","SuppressedError","formatTime","seconds","minutes","floor","secs","padStart","Timer","React","forwardRef","phases","externalState","onStateChange","onComplete","onPhaseComplete","onTick","onUnfreeze","onUnpause","onPause","onFreeze","onAnonymiseToggle","onStop","onReset","onPrevious","onNext","onPhaseClick","gameActions","user","currentPhase","currentTime","isRunning","isPaused","isFrozen","getCurrentPhaseIndex","useCallback","findIndex","phase","title","indexOf","getPhaseByIndex","index","getPhaseTitle","selectedPhase","setSelectedPhase","isAnonymised","setIsAnonymised","intervalRef","start","currentPhaseIndex","wasUnpausing","wasUnfreezing","pause","freeze","force","nextFrozen","newState","toggleAnonymise","prev","next","stop","reset","setTimerPhases","useImperativeHandle","setPhases","getCurrentTime","getCurrentPhase","setInterval","newTimeMs","phaseDurationMs","duration","willCompletePhase","timeToUpdate","clearInterval","currentPhaseData","currentPhaseDurationMs","currentTimeSeconds","currentPhaseDurationSeconds","isAtEnd","timerClasses","finalRemainingTime","toUpperCase","steps","maxSteps","isActive","isCompleted","hasAction","isClickable","stepClass","handleClick","commonProps","tabIndex","onKeyDown","key","preventDefault","push","rx","transform","renderStepIndicators","targetIndex","fillRule","clipRule","stroke","strokeWidth","strokeMiterlimit","strokeLinecap","strokeLinejoin","displayName","ProgressBar","progressEndDate","leftTime","progressTime","setProgress","interval","progressPercent","updateProgress","timeLeft","totalTime","Gain","points","setPoints","SendIcon","preserveAspectRatio","overflow","EditIcon","TrashIcon","SuccessIcon","FailureIcon","PartialIcon","SpinnerIcon","animation","BuyLine","volume","price","defaultPrice","showSecondInput","showTrashButton","volumeMax","priceMax","iconType","labels","onVolumeChange","onPriceChange","onSend","onClear","showStatus","internalVolume","setInternalVolume","_p","internalPrice","setInternalPrice","_q","showSuccessState","setShowSuccessState","_r","isLoading","setIsLoading","_s","volumeHasError","setVolumeHasError","_t","priceHasError","setPriceHasError","calculatePrice","volumeNum","priceNum","isSendDisabled","find","hasError","getIcon","iconName","plusIcon","settingIcon","arrowDownIcon","Button","text","leftIcon","rightIcon","buttonStyle","padding","getSizeStyles","ArrowIcon","isOpen","theme","Accordion","openedContent","closedContent","defaultOpen","onToggle","setIsOpen","newIsOpen","PlusIcon","MinusIcon","Ecart","chipBgColor","chipTextColor","icon","PlusCircleIcon","MinusCircleIcon","ArrowDownIcon","PowerIcon","SwitchThumbIcon","TargetIcon","PreviousIcon","NextIcon","PauseIcon","PlayIcon","FreezeIcon","AnonymizeIcon","Icons","Send","Edit","Trash","Success","Failure","Partial","Spinner","Plus","PlusCircle","MinusCircle","ArrowDown","Power","Target","Previous","Next","Pause","Play","Freeze","Anonymize","User"],"mappings":"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","x_google_ignoreList":[8]}
|