@kingsimba/nc-ui 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -11
- package/dist/GeneratedIcons-ngKoQh-9.cjs +2 -0
- package/dist/GeneratedIcons-ngKoQh-9.cjs.map +1 -0
- package/dist/{GeneratedIcons-BE4eggsw.js → GeneratedIcons-nvLhDQM5.js} +41 -22
- package/dist/GeneratedIcons-nvLhDQM5.js.map +1 -0
- package/dist/icons.cjs +1 -1
- package/dist/icons.d.ts +5 -0
- package/dist/icons.js +15 -14
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +31 -30
- package/dist/index.js +1490 -1346
- package/dist/index.js.map +1 -1
- package/dist/styles.css +386 -19
- package/package.json +2 -1
- package/dist/GeneratedIcons-B1vmWd9Q.cjs +0 -2
- package/dist/GeneratedIcons-B1vmWd9Q.cjs.map +0 -1
- package/dist/GeneratedIcons-BE4eggsw.js.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/components/ActivityIndicator.tsx","../src/components/Button.tsx","../src/components/Alert.tsx","../src/components/Battery.tsx","../src/components/ButtonGroup.tsx","../src/components/Checkbox.tsx","../src/lib/i18n.ts","../src/components/ComboBox.tsx","../src/components/CommonButtons.tsx","../src/components/ContextMenu.tsx","../src/components/Dialog.tsx","../src/components/Input.tsx","../src/components/ListGroup.tsx","../src/components/MultiSelect.tsx","../src/components/NumberInput.tsx","../src/components/Slider.tsx","../src/components/Tabs.tsx","../src/components/Toggle.tsx","../node_modules/i18next/dist/esm/i18next.js","../src/lib/appI18nFactory.ts","../src/lib/appRegistry.ts","../src/stores/appStateStore.ts","../src/utils/backHandlerRegistry.ts","../src/lib/runningAppsStore.ts","../src/components/app/AppContext.tsx","../node_modules/react-i18next/dist/es/utils.js","../node_modules/react-i18next/dist/es/unescape.js","../node_modules/react-i18next/dist/es/defaults.js","../node_modules/react-i18next/dist/es/i18nInstance.js","../node_modules/react-i18next/dist/es/context.js","../node_modules/react-i18next/dist/es/useTranslation.js","../src/components/app/AppTitleBar.tsx","../src/components/app/AppContainer.tsx","../src/contexts/ViewportContext.tsx","../src/components/app/AppPanel.tsx","../src/components/app/AppTaskbar.tsx","../src/components/app/AppDialog.tsx","../src/components/NavStack.tsx","../node_modules/tailwind-merge/dist/bundle-mjs.mjs","../src/lib/utils.ts"],"sourcesContent":["export interface ActivityIndicatorProps {\n /** Size of the spinner */\n size?: 'small' | 'default' | 'large';\n /** Custom color (defaults to --primary) */\n color?: string;\n /** If true, renders in an overlay that covers the parent element and blocks clicks */\n overlay?: boolean;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * ActivityIndicator - A spinning loading indicator.\n * \n * Usage:\n * 1. Inline spinner: <ActivityIndicator size=\"small\" />\n * 2. Overlay on parent (parent must have position: relative):\n * <div style={{ position: 'relative' }}>\n * <Button>Click me</Button>\n * {isLoading && <ActivityIndicator overlay />}\n * </div>\n * 3. Cover entire dialog: Place overlay ActivityIndicator inside dialog container\n */\nexport function ActivityIndicator({\n size = 'default',\n color,\n overlay = false,\n className = '',\n}: ActivityIndicatorProps) {\n const spinner = (\n <div\n className={`nc-activity-indicator nc-${size} ${className}`}\n style={color ? { borderTopColor: color } : undefined}\n />\n );\n\n if (overlay) {\n return (\n <div className=\"nc-activity-indicator-overlay\">\n {spinner}\n </div>\n );\n }\n\n return spinner;\n}\n","import React from 'react';\nimport { ActivityIndicator } from './ActivityIndicator';\n\nexport type ButtonVariant = 'default' | 'primary' | 'danger' | 'warning' | 'success' | 'ghost';\n\nexport type ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {\n variant?: ButtonVariant;\n block?: boolean;\n size?: 'default' | 'small' | 'large';\n textSelectable?: boolean;\n loading?: boolean;\n};\n\nexport function Button({ variant = 'default', block, size = 'default', className, disabled, textSelectable, loading, onClick, children, ...rest }: ButtonProps) {\n const cls = [\n 'nc-button',\n variant !== 'default' ? `nc-${variant}` : '',\n block ? 'nc-block' : '',\n size === 'small' ? 'nc-small' : '',\n size === 'large' ? 'nc-large' : '',\n (disabled || loading) ? 'nc-disabled' : '',\n textSelectable ? 'nc-text-selectable' : '',\n loading ? 'nc-loading' : '',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ');\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (loading) return;\n // If text is selected, don't trigger click\n if (textSelectable) {\n const selection = window.getSelection();\n if (selection && selection.toString().length > 0) {\n return;\n }\n }\n onClick?.(e);\n };\n\n return (\n <button\n className={cls}\n disabled={disabled || loading}\n onClick={handleClick}\n {...rest}\n >\n {loading && (\n <ActivityIndicator\n size=\"small\"\n className=\"nc-button-spinner\"\n color={variant !== 'default' && variant !== 'ghost' ? 'white' : undefined}\n />\n )}\n {children}\n </button>\n );\n}\n","import { Button, type ButtonVariant } from './Button';\n\nexport type AlertType = 'warning' | 'error';\n\nexport interface AlertProps {\n /** Error or warning code to display */\n code: number;\n /** Alert message text */\n text: string;\n /** Type of alert - determines styling */\n type: AlertType;\n /** Optional action button configuration */\n button?: { text: string; variant?: ButtonVariant };\n /** Callback when action button is clicked */\n onAction?: () => void;\n}\n\nexport function Alert({ code, text, type, button, onAction }: AlertProps) {\n return (\n <div className={`nc-alert nc-${type}`}>\n <span className={`nc-alert-message nc-${type}`}>\n <span className=\"nc-alert-code\">{code}</span>\n {text}\n </span>\n\n {button && (\n <span className=\"nc-alert-action\">\n <Button\n size=\"small\"\n variant={button.variant ?? (type === 'error' ? 'danger' : 'warning')}\n onClick={onAction}\n >\n {button.text}\n </Button>\n </span>\n )}\n </div>\n );\n}\n","export type BatteryStatus = 'charging' | 'discharging' | 'full';\n\nexport interface BatteryProps {\n /** Battery level from 0.0 to 1.0 */\n percentage?: number;\n /** Current battery status */\n status?: BatteryStatus;\n /** Use light colors for dark backgrounds */\n darkMode?: boolean;\n /** Use threshold-based coloring (danger/warning/success) */\n colored?: boolean;\n}\n\nexport function Battery({\n percentage = 0.5,\n status = 'discharging',\n darkMode = false,\n colored = false,\n}: BatteryProps) {\n const percent = Math.max(0, Math.min(1, Number(percentage) || 0));\n\n // Determine fill color based on colored mode and percentage thresholds\n let fillColor: string;\n if (colored) {\n // Threshold-based coloring using CSS variables\n if (percent < 0.1) {\n fillColor = 'var(--nc-danger)';\n } else if (percent < 0.2) {\n fillColor = 'var(--nc-warning)';\n } else {\n fillColor = 'var(--nc-success)';\n }\n } else {\n // Monochrome mode based on darkMode\n fillColor = darkMode ? '#ffffff' : '#000000';\n }\n\n // Semi-transparent background color\n const backgroundColor = darkMode\n ? 'rgba(255, 255, 255, 0.5)'\n : 'rgba(0, 0, 0, 0.2)';\n\n // Reduced default size for compact display in the status bar\n const width = 24; // body width\n const height = 14;\n const capWidth = 2;\n const capSpacing = 0;\n const boltSpace = 12; // extra space to the right for the lightning icon\n\n const innerPadding = 0;\n\n // No outline, so we use full dimensions\n const outlineX = 0;\n const outlineY = 0;\n const outlineWidth = width;\n const outlineHeight = height;\n\n // Fill area sits inside the outline, respecting inner padding.\n const innerHeight = outlineHeight - innerPadding * 2;\n const innerWidth = outlineWidth - innerPadding * 2;\n\n // Corner radius for rounded corners; clamp to a sensible value relative to height\n const cornerRadius = Math.max(1, Math.min(4, outlineHeight / 4));\n\n // Map percentage to visual fill: 0% → 0%, 1-100% → 5%-100% for better visibility at low levels\n const visualPercent = percent === 0 ? 0 : 0.05 + (percent * 0.95);\n\n const svgWidth = width + capWidth + boltSpace;\n // approximate bolt path size for centering and scaling\n const boltPathH = 20;\n const boltScale = 0.65; // Smaller as requested\n const svgHeight = Math.max(height, boltPathH * boltScale);\n const boltTransX = width + capWidth + 1;\n // Center relative to battery height (moves it up compared to centering in expanded SVG)\n const boltTransY = (height - boltPathH * boltScale) / 2;\n\n return (\n <svg\n className=\"nc-battery\"\n width={svgWidth}\n height={svgHeight}\n viewBox={`0 0 ${svgWidth} ${svgHeight}`}\n role=\"img\"\n aria-label={`Battery ${percent === 0 ? '-' : Math.round(percent * 100) + '%'} ${status}`}\n >\n <defs>\n {/* Mask for the fill percentage */}\n <mask id={`nc-battery-fill-mask-${percent}`}>\n <rect x=\"0\" y=\"0\" width={innerWidth * visualPercent} height={innerHeight} fill=\"white\" />\n </mask>\n\n {/* Define a mask using the text as a cutout */}\n <mask id={`nc-battery-text-mask-${percent}`}>\n {/* White background allows everything through */}\n <rect x=\"0\" y=\"0\" width={svgWidth} height={svgHeight} fill=\"white\" />\n {/* Black text cuts a hole in the mask */}\n <text x={outlineX + outlineWidth / 2} y={height - 3} fontSize={11} fontWeight=\"bold\" fill=\"black\" textAnchor=\"middle\">\n {percent === 0 ? '-' : Math.round(percent * 100)}\n </text>\n </mask>\n </defs>\n\n {/* Apply mask to all battery elements to create hollow text effect */}\n <g mask={`url(#nc-battery-text-mask-${percent})`}>\n {/* semi-transparent background */}\n <rect\n x={outlineX}\n y={outlineY}\n rx={cornerRadius}\n ry={cornerRadius}\n width={outlineWidth}\n height={outlineHeight}\n fill={backgroundColor}\n />\n\n {/* filled portion - full width rect with mask to show only the percentage */}\n <rect\n x={outlineX + innerPadding}\n y={outlineY + innerPadding}\n width={innerWidth}\n height={innerHeight}\n fill={fillColor}\n rx={cornerRadius}\n ry={cornerRadius}\n mask={`url(#nc-battery-fill-mask-${percent})`}\n />\n\n {/* cap */}\n <rect\n x={width + capSpacing}\n y={height * 0.26}\n width={capWidth}\n height={height * 0.48}\n rx={0.8}\n ry={0.8}\n fill={percent === 1 ? fillColor : backgroundColor}\n />\n\n {/* charging lightning - positioned to the right of the battery (outside the cap) */}\n {status === 'charging' ? (\n <g transform={`translate(${boltTransX}, ${boltTransY}) scale(${boltScale})`} fill={fillColor}>\n {/* lightning symbol (stylized) */}\n <path d=\"M10 0 L2 11 H8 L5 20 L14 8 H8 L10 0 Z\" />\n </g>\n ) : null}\n </g>\n </svg>\n );\n}\n","export type ButtonGroupSize = 'default' | 'small';\n\nexport interface ButtonGroupProps<T extends string> {\n /** Currently selected value */\n value: T | null;\n /** Callback when selection changes */\n onChange: (value: T) => void;\n /** Available options */\n options: readonly T[];\n /** Disable all buttons */\n disabled?: boolean;\n /** Custom labels for options */\n labels?: Partial<Record<T, string>>;\n /** Size variant */\n size?: ButtonGroupSize;\n}\n\nexport function ButtonGroup<T extends string>({\n value,\n onChange,\n options,\n disabled,\n labels,\n size = 'default',\n}: ButtonGroupProps<T>) {\n return (\n <div className={`nc-button-group ${size === 'small' ? 'nc-small' : ''}`}>\n {options.map((option, idx) => (\n <button\n key={option}\n className={`nc-button-group-item ${value === option ? 'nc-active' : ''} ${idx < options.length - 1 ? 'nc-has-border' : ''}`}\n onClick={() => !disabled && onChange(option)}\n disabled={disabled}\n >\n {labels && labels[option] ? labels[option] : option}\n </button>\n ))}\n </div>\n );\n}\n","import React from 'react';\n\nexport type CheckboxSize = 'default' | 'small';\n\nexport interface CheckboxProps {\n /** Whether the checkbox is checked */\n checked: boolean;\n /** Callback when checkbox value changes */\n onChange: (value: boolean) => void;\n /** Whether the checkbox is disabled */\n disabled?: boolean;\n /** Label text to display next to checkbox */\n label?: string;\n /** Size variant */\n size?: CheckboxSize;\n /** Custom label color */\n labelColor?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Additional CSS class names */\n className?: string;\n}\n\nfunction CheckIcon({ size }: { size: 'default' | 'small' }) {\n return (\n <svg className={`nc-checkbox-icon ${size === 'small' ? 'nc-small' : ''}`} viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M2 6L5 9L10 3\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nexport function Checkbox({ checked, onChange, disabled, label, size = 'default', labelColor, style, className = '' }: CheckboxProps) {\n const isSmall = size === 'small';\n return (\n <label\n className={`nc-checkbox-label ${isSmall ? 'nc-small' : ''} ${disabled ? 'nc-disabled' : ''} ${className}`.trim()}\n style={style}\n onClick={(e) => {\n if (disabled) return;\n e.preventDefault();\n onChange(!checked);\n }}\n >\n <span\n role=\"checkbox\"\n aria-checked={checked}\n tabIndex={0}\n className={`nc-checkbox-box ${isSmall ? 'nc-small' : ''} ${checked ? 'nc-checked' : ''}`}\n onKeyDown={(e) => {\n if (disabled) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onChange(!checked);\n }\n }}\n >\n {checked && <CheckIcon size={size} />}\n </span>\n {label && (\n <span className=\"nc-checkbox-text\" style={labelColor ? { color: labelColor } : undefined}>\n {label}\n </span>\n )}\n </label>\n );\n}\n","/**\n * Simple built-in localization for nc-ui components.\n * Supports: en, zh, de, th, es\n * \n * By default, auto-detects locale from document.documentElement.lang.\n * Can be manually overridden with setLocale().\n */\n\nexport type SupportedLocale = 'en' | 'zh' | 'de' | 'th' | 'es';\n\nconst translations: Record<SupportedLocale, Record<string, string>> = {\n en: {\n default: 'default',\n noResults: 'No results',\n close: 'Close',\n clear: 'Clear',\n open: 'Open',\n ok: 'OK',\n cancel: 'Cancel',\n save: 'Save',\n delete: 'Delete',\n connect: 'Connect',\n gotit: 'Got it',\n },\n zh: {\n default: '默认',\n noResults: '无结果',\n close: '关闭',\n clear: '清除',\n open: '打开',\n ok: '确定',\n cancel: '取消',\n save: '保存',\n delete: '删除',\n connect: '连接',\n gotit: '知道了',\n },\n de: {\n default: 'Standard',\n noResults: 'Keine Ergebnisse',\n close: 'Schließen',\n clear: 'Löschen',\n open: 'Öffnen',\n ok: 'OK',\n cancel: 'Abbrechen',\n save: 'Speichern',\n delete: 'Löschen',\n connect: 'Verbinden',\n gotit: 'Verstanden',\n },\n th: {\n default: 'ค่าเริ่มต้น',\n noResults: 'ไม่พบผลลัพธ์',\n close: 'ปิด',\n clear: 'ล้าง',\n open: 'เปิด',\n ok: 'ตกลง',\n cancel: 'ยกเลิก',\n save: 'บันทึก',\n delete: 'ลบ',\n connect: 'เชื่อมต่อ',\n gotit: 'เข้าใจแล้ว',\n },\n es: {\n default: 'predeterminado',\n noResults: 'Sin resultados',\n close: 'Cerrar',\n clear: 'Borrar',\n open: 'Abrir',\n ok: 'Aceptar',\n cancel: 'Cancelar',\n save: 'Guardar',\n delete: 'Eliminar',\n connect: 'Conectar',\n gotit: 'Entendido',\n },\n};\n\nconst supportedLocales: SupportedLocale[] = ['en', 'zh', 'de', 'th', 'es'];\n\nlet manualLocale: SupportedLocale | null = null;\n\n/**\n * Detect locale from document.documentElement.lang attribute.\n * Falls back to 'en' if not supported.\n */\nfunction detectLocale(): SupportedLocale {\n if (typeof document === 'undefined') return 'en';\n\n const htmlLang = document.documentElement.lang?.toLowerCase() || '';\n // Match exact or prefix (e.g., 'zh-CN' -> 'zh')\n const match = supportedLocales.find(\n (loc) => htmlLang === loc || htmlLang.startsWith(loc + '-')\n );\n return match ?? 'en';\n}\n\n/**\n * Set the locale for nc-ui components manually.\n * Pass `null` to use auto-detection from HTML lang attribute.\n * @param locale - One of: 'en', 'zh', 'de', 'th', 'es', or null for auto\n */\nexport function setLocale(locale: SupportedLocale | null): void {\n manualLocale = locale;\n}\n\n/**\n * Get the current locale.\n * Returns manual locale if set, otherwise detects from HTML lang.\n */\nexport function getLocale(): SupportedLocale {\n return manualLocale ?? detectLocale();\n}\n\n/**\n * Get a translated string by key.\n * Falls back to English if key not found.\n */\nexport function t(key: string): string {\n const locale = getLocale();\n return translations[locale]?.[key] ?? translations.en[key] ?? key;\n}\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { t } from '../lib/i18n';\n\nexport type ComboBoxOption = { label: string; value: string; default?: boolean };\n\nexport interface ComboBoxProps {\n /** Currently selected value */\n value?: string;\n /** Callback when selection changes */\n onChange?: (value: string | undefined) => void;\n /** Placeholder text when no value selected */\n placeholder?: string;\n /** Available options */\n options: ComboBoxOption[];\n /** Whether the combobox is disabled */\n disabled?: boolean;\n /** Label text */\n label?: string;\n /** Whether the selection can be cleared */\n clearable?: boolean;\n /** Whether typing to filter is allowed */\n allowTyping?: boolean;\n /** Dropdown placement preference */\n placement?: 'top' | 'bottom';\n /** Size variant */\n size?: 'default' | 'small';\n /** Custom styles */\n style?: React.CSSProperties;\n /** Additional CSS class names */\n className?: string;\n}\n\nfunction DropdownOption({ option, onChange, selected, highlighted, small }: { option: ComboBoxOption; onChange: (value: string) => void; selected?: boolean; highlighted?: boolean; small?: boolean }) {\n const optionRef = useRef<HTMLDivElement>(null);\n\n // Scroll into view when highlighted\n useEffect(() => {\n if (highlighted && optionRef.current) {\n optionRef.current.scrollIntoView({ block: 'nearest' });\n }\n }, [highlighted]);\n\n return (\n <div\n ref={optionRef}\n className={`nc-combo-dropdown-option ${small ? 'nc-small' : ''} ${highlighted ? 'nc-highlighted' : ''}`}\n role=\"option\"\n onMouseDown={() => onChange(option.value)}\n aria-selected={selected}\n style={{\n cursor: 'pointer',\n background: highlighted ? 'rgba(59,130,246,0.18)' : selected ? 'rgba(59,130,246,0.12)' : undefined,\n }}\n >\n {option.label}\n {option.default && (\n <span style={{ fontSize: '0.85em', color: 'var(--nc-text-weak)', marginLeft: 6 }}>\n ({t('default')})\n </span>\n )}\n </div>\n );\n}\n\nfunction DropdownMenu({\n isOpen,\n options,\n onSelect,\n selectedValue,\n placement = 'bottom',\n anchorRef,\n small,\n highlightedIndex = -1,\n}: {\n isOpen: boolean;\n options: ComboBoxOption[];\n onSelect: (value: string) => void;\n selectedValue?: string;\n placement?: 'top' | 'bottom';\n anchorRef: React.RefObject<HTMLDivElement>;\n small?: boolean;\n highlightedIndex?: number;\n}) {\n const [position, setPosition] = useState({ top: 0, left: 0, width: 0 });\n const [autoPlacement, setAutoPlacement] = useState<'top' | 'bottom'>(placement);\n\n useEffect(() => {\n if (isOpen && anchorRef.current) {\n const rect = anchorRef.current.getBoundingClientRect();\n\n // Auto-detect placement based on available space\n let finalPlacement = placement;\n if (placement === 'bottom') {\n const spaceBelow = window.innerHeight - rect.bottom;\n const spaceAbove = rect.top;\n // If not enough space below (< 320px for dropdown) and more space above, use top\n if (spaceBelow < 320 && spaceAbove > spaceBelow) {\n finalPlacement = 'top';\n }\n }\n\n setAutoPlacement(finalPlacement);\n setPosition({\n top: finalPlacement === 'top' ? rect.top - 4 : rect.bottom + 4,\n left: rect.left,\n width: rect.width,\n });\n }\n }, [isOpen, anchorRef, placement]);\n\n if (!isOpen) return null;\n\n const dropdown = (\n <div\n className=\"nc-combo-dropdown\"\n style={{\n position: 'fixed',\n top: autoPlacement === 'top' ? undefined : position.top,\n bottom: autoPlacement === 'top' ? window.innerHeight - position.top : undefined,\n left: position.left,\n width: position.width,\n zIndex: 1000,\n maxHeight: 300,\n overflowY: 'auto',\n }}\n >\n {options.length === 0 ? (\n <div className={`nc-combo-dropdown-option nc-no-results ${small ? 'nc-small' : ''}`}>{t('noResults')}</div>\n ) : (\n options.map((o, idx) => (\n <DropdownOption key={o.value} option={o} onChange={onSelect} selected={o.value === selectedValue} highlighted={idx === highlightedIndex} small={small} />\n ))\n )}\n </div>\n );\n\n return createPortal(dropdown, document.body);\n}\n\nfunction ClearButton({ onClick, small }: { onClick: () => void; small?: boolean }) {\n return (\n <button\n className={`nc-button nc-ghost nc-combo-button nc-combo-clear ${small ? 'nc-small' : ''}`}\n onClick={onClick}\n onMouseDown={(e) => e.stopPropagation()}\n aria-label=\"Clear selection\"\n >\n ✕\n </button>\n );\n}\n\nfunction ToggleButton({ open, onClick, small }: { open: boolean; onClick: () => void; small?: boolean }) {\n return (\n <button\n className={`nc-button nc-ghost nc-combo-button nc-combo-toggle ${small ? 'nc-small' : ''} ${open ? 'nc-open' : ''}`}\n onClick={onClick}\n onMouseDown={(e) => e.stopPropagation()}\n aria-label={open ? 'Close' : 'Open'}\n >\n ▾\n </button>\n );\n}\n\nexport function ComboBox({\n value,\n onChange,\n placeholder = 'Select…',\n options,\n disabled,\n label,\n clearable = true,\n allowTyping = false,\n placement = 'bottom',\n size = 'default',\n style,\n className,\n}: ComboBoxProps) {\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const anchorRef = useRef<HTMLDivElement | null>(null);\n const isSmall = size === 'small';\n\n const filtered = useMemo(() => {\n const q = query.toLowerCase();\n if (!allowTyping) return options;\n return options.filter((o) => o.label.toLowerCase().includes(q));\n }, [options, query, allowTyping]);\n\n // Reset highlighted index when dropdown opens or filtered options change\n useEffect(() => {\n if (open) {\n setHighlightedIndex(-1);\n }\n }, [open, filtered]);\n\n // Auto-select first option if not clearable and no value is set\n useEffect(() => {\n if (!clearable && !value && options.length > 0 && onChange) {\n const defaultOption = options.find(o => o.default) || options[0];\n onChange(defaultOption.value);\n }\n }, [clearable, value, options, onChange]);\n\n useEffect(() => {\n function onDoc(e: MouseEvent) {\n if (!(e.target instanceof Node)) return;\n if (!inputRef.current) return;\n if (!inputRef.current.parentElement?.contains(e.target)) setOpen(false);\n }\n document.addEventListener('mousedown', onDoc);\n return () => document.removeEventListener('mousedown', onDoc);\n }, []);\n\n const selected = options.find((o) => o.value === value);\n const showClearButton = selected && clearable;\n const showToggle = !disabled && !showClearButton;\n\n const overlayVisible = !(open && allowTyping) && !!selected;\n\n const handleSelect = (newValue: string, fromKeyboard = false) => {\n onChange?.(newValue);\n setOpen(false);\n setQuery('');\n // Blur input when selecting with keyboard to ensure consistent state\n if (fromKeyboard) {\n inputRef.current?.blur();\n }\n };\n\n const handleClear = () => {\n onChange?.(undefined);\n setQuery('');\n setOpen(false);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (!open) {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n setOpen(true);\n e.preventDefault();\n }\n return;\n }\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n setHighlightedIndex((prev) => {\n const next = prev + 1;\n return next >= filtered.length ? 0 : next;\n });\n break;\n case 'ArrowUp':\n e.preventDefault();\n setHighlightedIndex((prev) => {\n const next = prev - 1;\n return next < 0 ? filtered.length - 1 : next;\n });\n break;\n case 'Enter':\n e.preventDefault();\n if (highlightedIndex >= 0 && highlightedIndex < filtered.length) {\n handleSelect(filtered[highlightedIndex].value, true);\n }\n break;\n case 'Escape':\n e.preventDefault();\n setOpen(false);\n setQuery('');\n break;\n }\n };\n\n return (\n <div className={`nc-combo-container ${className || ''}`.trim()} style={{ position: 'relative', ...style }}>\n {label && <span className={`nc-label ${isSmall ? 'nc-small' : ''}`}>{label}</span>}\n <div\n ref={anchorRef}\n style={{ position: 'relative', display: 'flex', alignItems: 'center' }}\n onMouseDown={(e) => {\n if (disabled) return;\n // Clicking on child buttons will stop propagation.\n // If typing is allowed and the click target is the input, let the input handle focus.\n if (allowTyping && e.target === inputRef.current) return;\n setOpen((s) => {\n // When opening with allowTyping, initialize query with selected label\n if (!s && allowTyping && selected) {\n setQuery(selected.label);\n }\n return !s;\n });\n // focus input only when typing is allowed and we're opening\n if (allowTyping && !open) {\n setTimeout(() => {\n inputRef.current?.focus();\n // Select all text so user can easily replace it\n inputRef.current?.select();\n }, 0);\n }\n }}\n >\n <input\n ref={inputRef}\n className={`nc-input ${isSmall ? 'nc-small' : ''}`}\n placeholder={placeholder}\n onFocus={() => {\n if (!disabled && allowTyping) {\n setOpen(true);\n // Initialize query with selected label when focusing\n if (selected) {\n setQuery(selected.label);\n setTimeout(() => inputRef.current?.select(), 0);\n }\n }\n if (!allowTyping) inputRef.current?.blur();\n }}\n onChange={(e) => allowTyping && setQuery(e.target.value)}\n onKeyDown={handleKeyDown}\n value={open && allowTyping ? query : (selected?.label || '')}\n readOnly={disabled || !allowTyping}\n style={{\n width: '100%',\n paddingRight: showToggle || showClearButton ? (isSmall ? 32 : 44) : 12,\n caretColor: allowTyping ? undefined : 'transparent',\n cursor: allowTyping ? undefined : 'pointer',\n userSelect: allowTyping ? undefined : 'none',\n color: overlayVisible ? 'transparent' : 'var(--nc-text)',\n }}\n />\n {/* When not editing, overlay the selected label and a weak \"(default)\" hint */}\n {overlayVisible && (\n <div\n aria-hidden\n style={{\n position: 'absolute',\n left: isSmall ? 8 : 12,\n right: showToggle || showClearButton ? (isSmall ? 12 : 24) : (isSmall ? 8 : 12),\n top: '50%',\n transform: 'translateY(-50%)',\n pointerEvents: 'none',\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n <span className={`nc-combo-overlay-text ${isSmall ? 'nc-small' : ''}`}>{selected?.label}</span>\n {selected?.default && <span className={`nc-combo-overlay-default ${isSmall ? 'nc-small' : ''}`}>({t('default')})</span>}\n </div>\n )}\n {showClearButton && <ClearButton onClick={handleClear} small={isSmall} />}\n {showToggle && <ToggleButton open={open} onClick={() => setOpen((s) => !s)} small={isSmall} />}\n </div>\n <DropdownMenu isOpen={open} options={filtered} onSelect={handleSelect} selectedValue={value} placement={placement} anchorRef={anchorRef} small={isSmall} highlightedIndex={highlightedIndex} />\n </div>\n );\n}\n","import React from 'react';\nimport { RefreshIcon, EditIcon, TrashIcon } from './icons/GeneratedIcons';\nimport { CloseIcon } from './icons/GeneratedIcons';\n\ninterface RefreshButtonProps {\n onClick: () => void;\n loading?: boolean;\n disabled?: boolean;\n size?: 'small' | 'default' | 'large';\n title?: string;\n 'aria-label'?: string;\n}\n\ninterface CloseButtonProps {\n onClick: () => void;\n disabled?: boolean;\n size?: 'small' | 'default' | 'large';\n title?: string;\n 'aria-label'?: string;\n}\n\ninterface EditButtonProps {\n onClick: () => void;\n disabled?: boolean;\n size?: 'small' | 'default' | 'large';\n title?: string;\n 'aria-label'?: string;\n}\n\ninterface TrashButtonProps {\n onClick: () => void;\n disabled?: boolean;\n size?: 'small' | 'default' | 'large';\n title?: string;\n 'aria-label'?: string;\n}\n\n/**\n * A reusable refresh button with spinning animation.\n * Shows a spinning refresh icon when loading.\n */\nexport function RefreshButton({ onClick, loading = false, disabled = false, size = 'default', title, 'aria-label': ariaLabel }: RefreshButtonProps) {\n const iconSize = size === 'small' ? 14 : size === 'large' ? 20 : 18;\n const defaultTitle = loading ? 'Refreshing...' : 'Refresh';\n const defaultAriaLabel = loading ? 'Refreshing' : 'Refresh';\n\n return (\n <button\n className=\"nc-icon-button\"\n onClick={onClick}\n disabled={disabled || loading}\n title={title ?? defaultTitle}\n aria-label={ariaLabel ?? defaultAriaLabel}\n data-size={size}\n >\n <RefreshIcon size={iconSize} className={loading ? 'nc-spinning' : ''} />\n </button>\n );\n}\n\n/**\n * A reusable close button.\n */\nexport function CloseButton({ onClick, disabled = false, size = 'default', title = 'Close', 'aria-label': ariaLabel = 'Close' }: CloseButtonProps) {\n const iconSize = size === 'small' ? 14 : size === 'large' ? 20 : 18;\n\n return (\n <button\n className=\"nc-icon-button nc-icon-button-close\"\n onClick={onClick}\n disabled={disabled}\n title={title}\n aria-label={ariaLabel}\n data-size={size}\n >\n <CloseIcon size={iconSize} />\n </button>\n );\n}\n\n/**\n * A reusable edit button.\n */\nexport function EditButton({ onClick, disabled = false, size = 'default', title = 'Edit', 'aria-label': ariaLabel = 'Edit' }: EditButtonProps) {\n const iconSize = size === 'small' ? 14 : size === 'large' ? 20 : 18;\n\n return (\n <button\n className=\"nc-icon-button nc-icon-button-edit\"\n onClick={onClick}\n disabled={disabled}\n title={title}\n aria-label={ariaLabel}\n data-size={size}\n >\n <EditIcon size={iconSize} />\n </button>\n );\n}\n\n/**\n * A reusable trash button.\n */\nexport function TrashButton({ onClick, disabled = false, size = 'default', title = 'Delete', 'aria-label': ariaLabel = 'Delete' }: TrashButtonProps) {\n const iconSize = size === 'small' ? 14 : size === 'large' ? 20 : 18;\n\n return (\n <button\n className=\"nc-icon-button nc-icon-button-trash\"\n onClick={onClick}\n disabled={disabled}\n title={title}\n aria-label={ariaLabel}\n data-size={size}\n >\n <TrashIcon size={iconSize} />\n </button>\n );\n}\n\ninterface HyperlinkProps {\n onClick?: () => void;\n disabled?: boolean;\n children: React.ReactNode;\n title?: string;\n 'aria-label'?: string;\n size?: 'small' | 'default';\n}\n\n/**\n * A reusable hyperlink component styled as text with primary color.\n * Useful for text-based actions that look like links.\n */\nexport function Hyperlink({ onClick, disabled = false, children, title, 'aria-label': ariaLabel, size = 'default' }: HyperlinkProps) {\n return (\n <button\n className=\"nc-hyperlink\"\n onClick={onClick}\n disabled={disabled}\n title={title}\n aria-label={ariaLabel}\n data-size={size}\n >\n {children}\n </button>\n );\n}\n","import React, { useEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nexport interface ContextMenuOption {\n id: string;\n label: string;\n icon?: React.ReactNode;\n onClick: () => void;\n disabled?: boolean;\n variant?: 'default' | 'danger';\n}\n\nexport interface ContextMenuProps {\n /** Whether the context menu is open */\n open: boolean;\n /** Called when the menu should close */\n onClose: () => void;\n /** Menu options to display */\n options: ContextMenuOption[];\n /** Reference element to anchor the menu position, or the element itself */\n anchorRef?: React.RefObject<HTMLElement>;\n /** Anchor element directly (alternative to anchorRef) */\n anchor?: HTMLElement | null;\n /** Preferred direction: 'down' or 'up' (default: 'down') */\n preferredDirection?: 'down' | 'up';\n}\n\n/**\n * A context menu component that pops relative to an anchor element.\n * Automatically detects available space and positions itself accordingly.\n * Default position is right-down, but switches to right-up when space is limited.\n */\nexport function ContextMenu({\n open,\n onClose,\n options,\n anchorRef,\n anchor,\n preferredDirection = 'down',\n}: ContextMenuProps) {\n const menuRef = useRef<HTMLDivElement>(null);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n\n // Get the anchor element from either ref or prop\n const anchorElement = anchor || anchorRef?.current;\n\n // Update menu position based on anchor and available space\n useEffect(() => {\n if (!open || !anchorElement || !menuRef.current) return;\n\n const anchorRect = anchorElement.getBoundingClientRect();\n const menuRect = menuRef.current.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n\n // Calculate position for down direction (menu below anchor)\n const downTop = anchorRect.bottom + 8; // 8px gap\n const downFits = downTop + menuRect.height <= viewportHeight - 8; // 8px bottom margin\n\n // Determine final direction\n let finalDirection: 'down' | 'up' = preferredDirection;\n if (!downFits && preferredDirection === 'down') {\n finalDirection = 'up';\n } else if (preferredDirection === 'up' && downFits) {\n // Only override if explicitly set to 'up' but down fits perfectly\n finalDirection = 'up';\n }\n\n // Calculate final top position\n let finalTop: number;\n if (finalDirection === 'down') {\n finalTop = downTop;\n } else {\n // Menu above anchor\n finalTop = anchorRect.top - menuRect.height - 8;\n }\n\n // Left position: align menu's left edge with anchor's left edge\n const finalLeft = anchorRect.left;\n\n setPosition({\n top: Math.max(8, finalTop), // Ensure minimum 8px from top\n left: Math.max(8, finalLeft), // Ensure minimum 8px from left\n });\n }, [open, anchorElement, preferredDirection]);\n\n // Handle clicking outside to close\n useEffect(() => {\n if (!open) return;\n\n const handleClickOutside = (e: MouseEvent) => {\n if (\n menuRef.current &&\n !menuRef.current.contains(e.target as Node) &&\n anchorElement &&\n !anchorElement.contains(e.target as Node)\n ) {\n onClose();\n }\n };\n\n const handleEscapeKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onClose();\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n document.addEventListener('keydown', handleEscapeKey);\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('keydown', handleEscapeKey);\n };\n }, [open, onClose, anchorElement]);\n\n if (!open) return null;\n\n const handleOptionClick = (option: ContextMenuOption) => {\n if (!option.disabled) {\n option.onClick();\n onClose();\n }\n };\n\n return createPortal(\n <div\n ref={menuRef}\n className=\"nc-context-menu\"\n style={{\n position: 'fixed',\n top: `${position.top}px`,\n left: `${position.left}px`,\n zIndex: 10000,\n }}\n role=\"menu\"\n >\n {options.map((option) => (\n <button\n key={option.id}\n className={`nc-context-menu-item ${option.variant === 'danger' ? 'nc-danger' : ''} ${option.disabled ? 'nc-disabled' : ''}`}\n onClick={() => handleOptionClick(option)}\n disabled={option.disabled}\n role=\"menuitem\"\n >\n {option.icon && <span className=\"nc-context-menu-icon\">{option.icon}</span>}\n <span className=\"nc-context-menu-label\">{option.label}</span>\n </button>\n ))}\n </div>,\n document.body\n );\n}\n","import React, { createContext, useContext, useEffect, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport { Button, ButtonProps } from './Button';\nimport { CloseButton } from './CommonButtons';\nimport { t } from '../lib/i18n';\n\nexport type DialogFooterType = 'ok' | 'ok-cancel' | 'save-cancel' | 'delete-cancel' | 'connect' | 'close' | 'gotit' | 'custom' | 'none';\n\n// Dialog context for children to access dialog functions\ninterface DialogContextValue {\n /** Close the dialog */\n close: () => void;\n}\n\nconst DialogContext = createContext<DialogContextValue | null>(null);\n\n/**\n * Hook to access dialog context from within a Dialog.\n * Returns the dialog context with close() and other functions.\n * @throws Error if used outside of a Dialog component\n */\nexport function useDialog(): DialogContextValue {\n const ctx = useContext(DialogContext);\n if (!ctx) {\n throw new Error('useDialog must be used inside a Dialog component');\n }\n return ctx;\n}\n\n/**\n * A button that automatically closes the parent Dialog when clicked.\n * Accepts all Button props. Default children uses i18n 'common.close'.\n */\nexport function DialogClose({ children, onClick, ...props }: ButtonProps) {\n const { close } = useDialog();\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n close();\n };\n\n return (\n <Button onClick={handleClick} {...props}>\n {children ?? t('close')}\n </Button>\n );\n}\n\nexport interface DialogProps {\n /** Whether the dialog is open */\n open: boolean;\n /** Called when the dialog should close */\n onClose: () => void;\n /** Dialog title */\n title: string;\n /** Dialog content */\n children: React.ReactNode;\n /** Dialog width - number for pixels, string for CSS value (e.g., '50vw', '80%', 'auto') */\n width?: number | string;\n /** Dialog height - number for pixels, string for CSS value (e.g., '60vh', '70%', 'auto') */\n height?: number | string;\n /** Min width - number for pixels, string for CSS value */\n minWidth?: number | string;\n /** Min height - number for pixels, string for CSS value */\n minHeight?: number | string;\n /** Max width - number for pixels, string for CSS value (default: '95vw') */\n maxWidth?: number | string;\n /** Max height - number for pixels, string for CSS value (default: '95vh') */\n maxHeight?: number | string;\n /** Footer button preset type */\n footerType?: DialogFooterType;\n /** Custom footer content (used when footerType is 'custom') */\n footer?: React.ReactNode;\n /** Called when OK button is clicked */\n onOk?: () => void;\n /** Called when Save button is clicked */\n onSave?: () => void;\n /** Called when Delete button is clicked */\n onDelete?: () => void;\n /** Called when Cancel button is clicked */\n onCancel?: () => void;\n /** Called when Connect button is clicked */\n onConnect?: () => void;\n /** Whether clicking the overlay closes the dialog (default: true) */\n closeOnOverlay?: boolean;\n /** Whether the primary action button is disabled */\n primaryDisabled?: boolean;\n /** \n * Whether to render the dialog in a portal covering the full viewport (default: false).\n * Set to true to use fixed positioning via portal to document.body.\n * Set to false to render inline with absolute positioning within parent container.\n */\n fullScreen?: boolean;\n /** Whether to hide the title bar (default: false) */\n hideTitleBar?: boolean;\n}\n\n/**\n * A reusable modal dialog component with overlay.\n * Renders in a portal to ensure proper z-index stacking.\n */\n// Helper to convert size value to CSS string\nfunction toCssSize(value: number | string | undefined): string | undefined {\n if (value === undefined) return undefined;\n return typeof value === 'number' ? `${value}px` : value;\n}\n\nexport function Dialog({\n open,\n onClose,\n title,\n children,\n width = 360,\n height,\n minWidth,\n minHeight,\n maxWidth = '95vw',\n maxHeight = '95vh',\n footerType = 'ok-cancel',\n footer,\n onOk,\n onSave,\n onDelete,\n onCancel,\n onConnect,\n closeOnOverlay = true,\n primaryDisabled = false,\n fullScreen = false,\n hideTitleBar = false,\n}: DialogProps) {\n const dialogRef = useRef<HTMLDivElement>(null);\n\n // Context value for children to access\n const contextValue: DialogContextValue = { close: onClose };\n\n // Handle overlay click\n const handleOverlayClick = (e: React.MouseEvent) => {\n if (closeOnOverlay && e.target === e.currentTarget) {\n onClose();\n }\n };\n\n // Focus trap - focus dialog when opened\n useEffect(() => {\n if (open && dialogRef.current) {\n dialogRef.current.focus();\n }\n }, [open]);\n\n if (!open) return null;\n\n // Render footer based on footerType\n const renderFooter = () => {\n switch (footerType) {\n case 'ok':\n return (\n <div className=\"nc-dialog-footer\">\n <Button variant=\"primary\" onClick={onOk ?? onClose} disabled={primaryDisabled}>\n {t('ok')}\n </Button>\n </div>\n );\n case 'ok-cancel':\n return (\n <div className=\"nc-dialog-footer\">\n <Button variant=\"primary\" onClick={onOk ?? onClose} disabled={primaryDisabled}>\n {t('ok')}\n </Button>\n <DialogClose variant=\"ghost\" onClick={onCancel}>\n {t('cancel')}\n </DialogClose>\n </div>\n );\n case 'save-cancel':\n return (\n <div className=\"nc-dialog-footer\">\n <Button variant=\"primary\" onClick={onSave} disabled={primaryDisabled}>\n {t('save')}\n </Button>\n <DialogClose variant=\"ghost\" onClick={onCancel}>\n {t('cancel')}\n </DialogClose>\n </div>\n );\n case 'delete-cancel':\n return (\n <div className=\"nc-dialog-footer\">\n <Button variant=\"danger\" onClick={onDelete} disabled={primaryDisabled}>\n {t('delete')}\n </Button>\n <DialogClose variant=\"ghost\" onClick={onCancel}>\n {t('cancel')}\n </DialogClose>\n </div>\n );\n case 'connect':\n return (\n <div className=\"nc-dialog-footer\">\n <Button variant=\"primary\" onClick={onConnect} disabled={primaryDisabled}>\n {t('connect')}\n </Button>\n <DialogClose variant=\"ghost\" onClick={onCancel}>\n {t('cancel')}\n </DialogClose>\n </div>\n );\n case 'close':\n return (\n <div className=\"nc-dialog-footer\">\n <DialogClose variant=\"primary\" />\n </div>\n );\n case 'gotit':\n return (\n <div className=\"nc-dialog-footer\">\n <DialogClose variant=\"primary\">\n {t('gotit')}\n </DialogClose>\n </div>\n );\n case 'custom':\n return <div className=\"nc-dialog-footer\">{footer}</div>;\n case 'none':\n return null;\n default:\n return null;\n }\n };\n\n const dialogContent = (\n <DialogContext.Provider value={contextValue}>\n <div className={`nc-dialog-overlay${fullScreen ? ' nc-fullscreen' : ''}`} onClick={handleOverlayClick}>\n <div\n ref={dialogRef}\n className=\"nc-dialog-container\"\n style={{\n width: toCssSize(width),\n height: toCssSize(height),\n minWidth: toCssSize(minWidth),\n minHeight: toCssSize(minHeight),\n maxWidth: toCssSize(maxWidth),\n maxHeight: toCssSize(maxHeight),\n }}\n tabIndex={-1}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={hideTitleBar ? undefined : \"nc-dialog-title\"}\n >\n {!hideTitleBar && (\n <div className=\"nc-dialog-header\">\n <h3 id=\"nc-dialog-title\" className=\"nc-dialog-title\">{title}</h3>\n <CloseButton onClick={onClose} aria-label=\"Close dialog\" />\n </div>\n )}\n <div className=\"nc-dialog-content\">\n {children}\n </div>\n {renderFooter()}\n </div>\n </div>\n </DialogContext.Provider>\n );\n\n // Render in a portal (default) for proper viewport positioning, or inline if fullScreen=false\n if (fullScreen) {\n return createPortal(dialogContent, document.body);\n }\n return dialogContent;\n}\n","import React, { useRef, useState } from 'react';\nimport { ViewIcon, EyeHiddenIcon } from './icons';\n\nexport interface InputProps {\n /** Current value of the input */\n value?: string;\n /** Callback when value changes */\n onChange?: (value: string) => void;\n /** Callback when Enter key is pressed */\n onEnter?: () => void;\n /** Callback when input is cleared */\n onClear?: () => void;\n /** Placeholder text */\n placeholder?: string;\n /** Whether the input is disabled */\n disabled?: boolean;\n /** Label text displayed above the input */\n label?: string;\n /** Whether to show a clear button when there's a value */\n clearable?: boolean;\n /** Input type (text, password, email, etc.) */\n type?: string;\n /** Additional CSS class names */\n className?: string;\n /** Size variant */\n size?: 'default' | 'small';\n /** Additional inline styles */\n style?: React.CSSProperties;\n /** Whether to show a toggle button for password visibility (only works when type is 'password') */\n showPasswordToggle?: boolean;\n}\n\nfunction ClearButton({ onClick, size = 'default', rightOffset = 4 }: { onClick: () => void; size?: 'default' | 'small'; rightOffset?: number }) {\n const buttonSize = size === 'small' ? 28 : 34;\n return (\n <button\n className=\"nc-button nc-ghost\"\n onClick={onClick}\n onMouseDown={(e) => e.stopPropagation()}\n tabIndex={-1}\n aria-label=\"Clear input\"\n style={{\n position: 'absolute',\n right: rightOffset,\n padding: 0,\n minHeight: 0,\n height: buttonSize,\n width: buttonSize,\n border: 'none',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: size === 'small' ? '12px' : '14px',\n }}\n >\n ✕\n </button>\n );\n}\n\nfunction TogglePasswordButton({ visible, onClick, size = 'default' }: { visible: boolean; onClick: () => void; size?: 'default' | 'small' }) {\n const buttonSize = size === 'small' ? 28 : 34;\n const iconSize = size === 'small' ? 16 : 18;\n return (\n <button\n className=\"nc-button nc-ghost\"\n onClick={onClick}\n onMouseDown={(e) => e.stopPropagation()}\n tabIndex={-1}\n aria-label={visible ? 'Hide password' : 'Show password'}\n style={{\n position: 'absolute',\n right: 4,\n padding: 0,\n minHeight: 0,\n height: buttonSize,\n width: buttonSize,\n border: 'none',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {visible ? <EyeHiddenIcon size={iconSize} /> : <ViewIcon size={iconSize} />}\n </button>\n );\n}\n\nexport function Input({\n value = '',\n onChange,\n onEnter,\n onClear,\n placeholder,\n disabled,\n label,\n clearable = true,\n type = 'text',\n className = '',\n size = 'default',\n style,\n showPasswordToggle = false,\n}: InputProps) {\n const inputRef = useRef<HTMLInputElement | null>(null);\n const [passwordVisible, setPasswordVisible] = useState(false);\n\n const isPasswordType = type === 'password';\n const showToggle = isPasswordType && showPasswordToggle && !disabled;\n const showClearButton = clearable && value && !disabled;\n\n const buttonWidth = size === 'small' ? 32 : 44;\n let paddingRight = 12;\n if (showClearButton && showToggle) {\n paddingRight = buttonWidth * 2;\n } else if (showClearButton || showToggle) {\n paddingRight = buttonWidth;\n }\n\n const handleClear = () => {\n onChange?.('');\n onClear?.();\n inputRef.current?.focus();\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n onEnter?.();\n }\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e.target.value);\n };\n\n const inputClassName = `nc-input ${size === 'small' ? `nc-small ` : ''} ${className}`;\n\n return (\n <div className=\"nc-col\" style={{ position: 'relative', flex: 1, ...style }}>\n {label && <span className=\"nc-label\">{label}</span>}\n <div style={{ position: 'relative', display: 'flex', alignItems: 'center' }}>\n <input\n ref={inputRef}\n type={isPasswordType && passwordVisible ? 'text' : type}\n className={inputClassName}\n placeholder={placeholder}\n value={value}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n style={{\n width: '100%',\n paddingRight,\n }}\n />\n {showClearButton && <ClearButton onClick={handleClear} size={size} rightOffset={showToggle ? buttonWidth + 4 : 4} />}\n {showToggle && <TogglePasswordButton visible={passwordVisible} onClick={() => setPasswordVisible(!passwordVisible)} size={size} />}\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nexport interface ListGroupItemProps {\n /** Content of the list item */\n children: React.ReactNode;\n /** Click handler for the item */\n onClick?: (e: React.MouseEvent<HTMLDivElement>) => void;\n /** Whether to show bottom border (default: true) */\n showBorder?: boolean;\n /** Whether text should be selectable (default: false) */\n selectable?: boolean;\n /** Optional CSS styles to apply to the item */\n style?: React.CSSProperties;\n}\n\n/**\n * A single item within a ListGroup.\n * Can contain any content - fully flexible.\n */\nexport function ListGroupItem({\n children,\n onClick,\n showBorder = true,\n selectable = false,\n style,\n}: ListGroupItemProps) {\n const [isPressed, setIsPressed] = React.useState(false);\n\n const handleClick = (e: React.MouseEvent<HTMLDivElement>) => {\n if (!onClick) return;\n\n // If selectable, don't trigger click when user is selecting text\n if (selectable) {\n const selection = window.getSelection();\n if (selection && selection.toString().length > 0) {\n return;\n }\n }\n onClick(e);\n };\n\n return (\n <div\n onClick={handleClick}\n onMouseDown={() => onClick && setIsPressed(true)}\n onMouseUp={() => setIsPressed(false)}\n onMouseLeave={() => setIsPressed(false)}\n style={{\n cursor: onClick ? 'pointer' : 'default',\n userSelect: selectable ? 'text' : undefined,\n borderBottom: showBorder ? undefined : 'none',\n ...style,\n }}\n className={`nc-list-group-item ${onClick ? 'nc-list-group-item-clickable' : ''} ${isPressed ? 'nc-list-group-item-active' : ''}`}\n >\n <div style={{ flex: 1 }}>{children}</div>\n </div>\n );\n}\n\nexport interface ListGroupProps {\n /** Optional group title */\n title?: string;\n /** Optional tools rendered on the title row (e.g., buttons) */\n titleTools?: React.ReactNode;\n /** Group content (ListGroupItem components or any other content) */\n children: React.ReactNode;\n /** Optional CSS styles to apply to the container */\n style?: React.CSSProperties;\n}\n\n/**\n * A container for grouping list items with a rounded border.\n * Similar to iOS-style grouped lists or Windows 11 settings groups.\n */\nexport function ListGroup({ title, titleTools, children, style }: ListGroupProps) {\n return (\n <div className=\"nc-list-group\" style={style}>\n {(title || titleTools) && (\n <div className='nc-list-group-title'>\n <div>{title}</div>\n {titleTools && (\n <div className=\"nc-list-group-title-tools\">\n {titleTools}\n </div>\n )}\n </div>\n )}\n <div\n className=\"nc-list-group-content\"\n >\n {children}\n </div>\n </div>\n );\n}\n","import { useEffect, useMemo, useRef, useState } from 'react';\n\ntype Option = { label: string; value: string };\n\nexport interface MultiSelectProps {\n /** Array of currently selected values */\n values: string[];\n /** Callback when selection changes */\n onChange: (values: string[]) => void;\n /** Available options to select from */\n options: Option[];\n /** Placeholder text when no items are selected */\n placeholder?: string;\n /** Label text displayed above the select */\n label?: string;\n}\n\nexport function MultiSelect({ values, onChange, options, placeholder = 'Select…', label }: MultiSelectProps) {\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n const ref = useRef<HTMLDivElement | null>(null);\n const filtered = useMemo(() => options.filter((o) => o.label.toLowerCase().includes(query.toLowerCase())), [options, query]);\n\n useEffect(() => {\n function onDoc(e: MouseEvent) {\n if (!(e.target instanceof Node) || !ref.current) return;\n if (!ref.current.contains(e.target)) setOpen(false);\n }\n document.addEventListener('mousedown', onDoc);\n return () => document.removeEventListener('mousedown', onDoc);\n }, []);\n\n const toggle = (v: string) => {\n if (values.includes(v)) onChange(values.filter((x) => x !== v));\n else onChange([...values, v]);\n };\n\n return (\n <div ref={ref} className=\"nc-col\" style={{ position: 'relative' }}>\n {label && <span className=\"nc-label\">{label}</span>}\n <div className=\"nc-row\" style={{ flexWrap: 'wrap', gap: 6, minHeight: 42, alignItems: 'center', border: '1px solid var(--nc-button-border)', borderRadius: 8, background: 'var(--nc-button-bg)', padding: '4px 8px' }}>\n {values.length === 0 && <span className=\"nc-label\">{placeholder}</span>}\n {values.map((v) => {\n const o = options.find((o) => o.value === v);\n if (!o) return null;\n return (\n <span key={v} style={{ padding: '4px 8px', borderRadius: 6, display: 'inline-flex', alignItems: 'center', gap: 4, background: 'var(--nc-button-bg)', border: '1px solid var(--nc-button-border)' }}>\n {o.label}\n <button\n className=\"nc-button nc-ghost\"\n style={{ padding: 0, minHeight: 0, height: 20, width: 20, display: 'inline-flex', alignItems: 'center', justifyContent: 'center', border: 'none' }}\n onClick={() => toggle(v)}\n aria-label={`Remove ${o.label}`}\n >\n ✕\n </button>\n </span>\n );\n })}\n <input\n className=\"nc-input\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n onFocus={() => setOpen(true)}\n style={{ minWidth: 50, border: 'none', background: 'transparent', padding: 4, minHeight: 32, flex: 1 }}\n />\n </div>\n {open && (\n <div className=\"nc-combo-dropdown\" style={{ position: 'absolute', top: '100%', left: 0, right: 0, zIndex: 10, marginTop: 4, boxShadow: '0 4px 12px var(--nc-shadow)' }}>\n {filtered.map((o) => {\n const selected = values.includes(o.value);\n return (\n <div key={o.value} className=\"nc-section nc-row\" style={{ justifyContent: 'space-between', cursor: 'pointer', padding: 12 }} onMouseDown={() => toggle(o.value)}>\n <span>{o.label}</span>\n <span>{selected ? '✔️' : ''}</span>\n </div>\n );\n })}\n {filtered.length === 0 && <div className=\"nc-section nc-label\">No results</div>}\n </div>\n )}\n </div>\n );\n}\n","import React from 'react';\n\nexport interface NumberInputProps {\n /** Current numeric value */\n value: number;\n /** Callback when value changes */\n onChange: (value: number) => void;\n /** Minimum allowed value */\n min?: number;\n /** Maximum allowed value */\n max?: number;\n /** Step increment/decrement value */\n step?: number;\n /** Label text displayed above the input */\n label?: string;\n /** Whether the input is disabled */\n disabled?: boolean;\n /** Size variant */\n size?: 'default' | 'small';\n}\n\nexport function NumberInput({ value, onChange, min, max, step = 1, label, disabled, size = 'default' }: NumberInputProps) {\n const isSmall = size === 'small';\n\n const decrement = () => {\n const newValue = value - step;\n if (min !== undefined && newValue < min) return;\n onChange(parseFloat(newValue.toFixed(10))); // Avoid floating point precision issues\n };\n\n const increment = () => {\n const newValue = value + step;\n if (max !== undefined && newValue > max) return;\n onChange(parseFloat(newValue.toFixed(10)));\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = parseFloat(e.target.value);\n if (isNaN(newValue)) return;\n if (min !== undefined && newValue < min) return;\n if (max !== undefined && newValue > max) return;\n onChange(newValue);\n };\n\n return (\n <div className={`nc-col nc-number-input-col ${isSmall ? 'nc-small' : ''}`}>\n {label && <span className={`nc-label ${isSmall ? 'nc-small' : ''}`}>{label}</span>}\n <div className={`nc-number-input-container ${isSmall ? 'nc-small' : ''}`}>\n <input\n className={`nc-input nc-number-input ${isSmall ? 'nc-small' : ''}`}\n type=\"number\"\n value={value}\n onChange={handleInputChange}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n />\n <button\n className={`nc-button nc-ghost nc-number-input-button ${isSmall ? 'nc-small' : ''}`}\n onClick={decrement}\n disabled={disabled || (min !== undefined && value <= min)}\n >\n −\n </button>\n <button\n className={`nc-button nc-ghost nc-number-input-button ${isSmall ? 'nc-small' : ''}`}\n onClick={increment}\n disabled={disabled || (max !== undefined && value >= max)}\n >\n +\n </button>\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nexport interface SliderProps {\n /** Current value */\n value: number;\n /** Callback when value changes */\n onChange: (value: number) => void;\n /** Minimum value */\n min?: number;\n /** Maximum value */\n max?: number;\n /** Step increment */\n step?: number;\n /** Label text displayed above the slider */\n label?: string;\n /** Whether the slider is disabled */\n disabled?: boolean;\n /** Whether to show the current value next to the slider */\n showValue?: boolean;\n /** Custom formatter for displaying the value */\n formatValue?: (value: number) => string;\n /** Width of the slider track */\n width?: number | string;\n}\n\nexport function Slider({\n value,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n label,\n disabled,\n showValue = true,\n formatValue = (v) => v.toString(),\n width = 200,\n}: SliderProps) {\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = parseFloat(e.target.value);\n onChange(newValue);\n };\n\n // Calculate percentage for styling the track\n const percentage = ((value - min) / (max - min)) * 100;\n\n return (\n <div className=\"nc-col\" style={{ gap: 6 }}>\n {label && <span className=\"nc-label\">{label}</span>}\n <div style={{ display: 'flex', gap: 12, alignItems: 'center' }}>\n <input\n type=\"range\"\n className=\"nc-slider\"\n value={value}\n onChange={handleChange}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n style={{\n width,\n '--nc-slider-percentage': `${percentage}%`,\n } as React.CSSProperties}\n />\n {showValue && (\n <span\n style={{\n color: 'var(--nc-text)',\n fontFamily: 'monospace',\n fontSize: 14,\n minWidth: 60,\n textAlign: 'right',\n }}\n >\n {formatValue(value)}\n </span>\n )}\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nexport interface TabsProps {\n /** Array of tab labels */\n tabs: string[];\n /** Currently active tab label */\n active: string;\n /** Callback when a tab is selected */\n onChange: (tab: string) => void;\n /** Additional CSS class name for the container */\n className?: string;\n /** Optional toolbar content rendered at the end of the tab bar */\n toolbar?: React.ReactNode;\n /** Whether tabs should wrap to multiple lines */\n multiline?: boolean;\n /** Additional inline styles */\n style?: React.CSSProperties;\n}\n\nexport function Tabs({ tabs, active, onChange, className, toolbar, multiline, style }: TabsProps) {\n return (\n <div className={className ? className : 'nc-tab-container'} style={{ display: 'flex', justifyContent: 'space-between', alignItems: multiline ? 'flex-start' : 'center', overflow: 'hidden', ...style }}>\n <div style={{ display: 'flex', flex: '1', alignItems: 'center', minWidth: 0, overflow: 'hidden', flexWrap: multiline ? 'wrap' : 'nowrap' }}>\n {tabs.map((t) => (\n <div\n key={t}\n className={`nc-tab-item ${active === t ? 'nc-active' : ''}`}\n onClick={() => onChange(t)}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') onChange(t); }}\n style={{ flexShrink: multiline ? 1 : 0 }}\n >\n {t.toUpperCase()}\n </div>\n ))}\n <div style={{ flexGrow: 1 }}></div>\n {toolbar && (\n <div style={{ display: 'flex', gap: '8px', height: \"100%\", alignItems: 'center' }}>\n {toolbar}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport default Tabs;\n","export interface ToggleProps {\n /** Whether the toggle is checked/on */\n checked: boolean;\n /** Callback when toggle state changes */\n onChange: (value: boolean) => void;\n /** Whether the toggle is disabled */\n disabled?: boolean;\n /** Label text displayed next to the toggle */\n label?: string;\n}\n\nexport function Toggle({ checked, onChange, disabled, label }: ToggleProps) {\n return (\n <label\n className=\"nc-row\"\n style={{ gap: 10, alignItems: 'center', cursor: disabled ? 'not-allowed' : 'pointer' }}\n >\n {label && <span className=\"nc-label\">{label}</span>}\n\n <span\n role=\"switch\"\n aria-checked={checked}\n tabIndex={0}\n onKeyDown={(e) => {\n if (disabled) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onChange(!checked);\n }\n }}\n onClick={() => !disabled && onChange(!checked)}\n style={{\n position: 'relative',\n width: 56,\n height: 30,\n borderRadius: 18,\n padding: 4,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n border: `2px solid ${checked ? 'var(--nc-primary)' : 'var(--nc-button-border)'}`,\n background: checked ? 'rgba(99,102,241,0.08)' : 'transparent',\n transition: 'border-color 160ms, background 160ms',\n }}\n >\n {/* thumb */}\n <span\n style={{\n width: 22,\n height: 22,\n borderRadius: 12,\n background: checked ? 'var(--nc-text)' : 'var(--nc-muted)',\n transform: `translateX(${checked ? 24 : 0}px)`,\n transition: 'transform 160ms, background 160ms',\n boxShadow: checked ? '0 2px 6px rgba(99,102,241,0.28)' : '0 1px 2px rgba(0,0,0,0.08)',\n border: 'none',\n }}\n />\n </span>\n </label>\n );\n}\n\nexport default Toggle;\n","const isString = obj => typeof obj === 'string';\nconst defer = () => {\n let res;\n let rej;\n const promise = new Promise((resolve, reject) => {\n res = resolve;\n rej = reject;\n });\n promise.resolve = res;\n promise.reject = rej;\n return promise;\n};\nconst makeString = object => {\n if (object == null) return '';\n return '' + object;\n};\nconst copy = (a, s, t) => {\n a.forEach(m => {\n if (s[m]) t[m] = s[m];\n });\n};\nconst lastOfPathSeparatorRegExp = /###/g;\nconst cleanKey = key => key && key.indexOf('###') > -1 ? key.replace(lastOfPathSeparatorRegExp, '.') : key;\nconst canNotTraverseDeeper = object => !object || isString(object);\nconst getLastOfPath = (object, path, Empty) => {\n const stack = !isString(path) ? path : path.split('.');\n let stackIndex = 0;\n while (stackIndex < stack.length - 1) {\n if (canNotTraverseDeeper(object)) return {};\n const key = cleanKey(stack[stackIndex]);\n if (!object[key] && Empty) object[key] = new Empty();\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n object = object[key];\n } else {\n object = {};\n }\n ++stackIndex;\n }\n if (canNotTraverseDeeper(object)) return {};\n return {\n obj: object,\n k: cleanKey(stack[stackIndex])\n };\n};\nconst setPath = (object, path, newValue) => {\n const {\n obj,\n k\n } = getLastOfPath(object, path, Object);\n if (obj !== undefined || path.length === 1) {\n obj[k] = newValue;\n return;\n }\n let e = path[path.length - 1];\n let p = path.slice(0, path.length - 1);\n let last = getLastOfPath(object, p, Object);\n while (last.obj === undefined && p.length) {\n e = `${p[p.length - 1]}.${e}`;\n p = p.slice(0, p.length - 1);\n last = getLastOfPath(object, p, Object);\n if (last && last.obj && typeof last.obj[`${last.k}.${e}`] !== 'undefined') {\n last.obj = undefined;\n }\n }\n last.obj[`${last.k}.${e}`] = newValue;\n};\nconst pushPath = (object, path, newValue, concat) => {\n const {\n obj,\n k\n } = getLastOfPath(object, path, Object);\n obj[k] = obj[k] || [];\n obj[k].push(newValue);\n};\nconst getPath = (object, path) => {\n const {\n obj,\n k\n } = getLastOfPath(object, path);\n if (!obj) return undefined;\n return obj[k];\n};\nconst getPathWithDefaults = (data, defaultData, key) => {\n const value = getPath(data, key);\n if (value !== undefined) {\n return value;\n }\n return getPath(defaultData, key);\n};\nconst deepExtend = (target, source, overwrite) => {\n for (const prop in source) {\n if (prop !== '__proto__' && prop !== 'constructor') {\n if (prop in target) {\n if (isString(target[prop]) || target[prop] instanceof String || isString(source[prop]) || source[prop] instanceof String) {\n if (overwrite) target[prop] = source[prop];\n } else {\n deepExtend(target[prop], source[prop], overwrite);\n }\n } else {\n target[prop] = source[prop];\n }\n }\n }\n return target;\n};\nconst regexEscape = str => str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\nvar _entityMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n};\nconst escape = data => {\n if (isString(data)) {\n return data.replace(/[&<>\"'\\/]/g, s => _entityMap[s]);\n }\n return data;\n};\nclass RegExpCache {\n constructor(capacity) {\n this.capacity = capacity;\n this.regExpMap = new Map();\n this.regExpQueue = [];\n }\n getRegExp(pattern) {\n const regExpFromCache = this.regExpMap.get(pattern);\n if (regExpFromCache !== undefined) {\n return regExpFromCache;\n }\n const regExpNew = new RegExp(pattern);\n if (this.regExpQueue.length === this.capacity) {\n this.regExpMap.delete(this.regExpQueue.shift());\n }\n this.regExpMap.set(pattern, regExpNew);\n this.regExpQueue.push(pattern);\n return regExpNew;\n }\n}\nconst chars = [' ', ',', '?', '!', ';'];\nconst looksLikeObjectPathRegExpCache = new RegExpCache(20);\nconst looksLikeObjectPath = (key, nsSeparator, keySeparator) => {\n nsSeparator = nsSeparator || '';\n keySeparator = keySeparator || '';\n const possibleChars = chars.filter(c => nsSeparator.indexOf(c) < 0 && keySeparator.indexOf(c) < 0);\n if (possibleChars.length === 0) return true;\n const r = looksLikeObjectPathRegExpCache.getRegExp(`(${possibleChars.map(c => c === '?' ? '\\\\?' : c).join('|')})`);\n let matched = !r.test(key);\n if (!matched) {\n const ki = key.indexOf(keySeparator);\n if (ki > 0 && !r.test(key.substring(0, ki))) {\n matched = true;\n }\n }\n return matched;\n};\nconst deepFind = function (obj, path) {\n let keySeparator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '.';\n if (!obj) return undefined;\n if (obj[path]) return obj[path];\n const tokens = path.split(keySeparator);\n let current = obj;\n for (let i = 0; i < tokens.length;) {\n if (!current || typeof current !== 'object') {\n return undefined;\n }\n let next;\n let nextPath = '';\n for (let j = i; j < tokens.length; ++j) {\n if (j !== i) {\n nextPath += keySeparator;\n }\n nextPath += tokens[j];\n next = current[nextPath];\n if (next !== undefined) {\n if (['string', 'number', 'boolean'].indexOf(typeof next) > -1 && j < tokens.length - 1) {\n continue;\n }\n i += j - i + 1;\n break;\n }\n }\n current = next;\n }\n return current;\n};\nconst getCleanedCode = code => code && code.replace('_', '-');\n\nconst consoleLogger = {\n type: 'logger',\n log(args) {\n this.output('log', args);\n },\n warn(args) {\n this.output('warn', args);\n },\n error(args) {\n this.output('error', args);\n },\n output(type, args) {\n if (console && console[type]) console[type].apply(console, args);\n }\n};\nclass Logger {\n constructor(concreteLogger) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.init(concreteLogger, options);\n }\n init(concreteLogger) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.prefix = options.prefix || 'i18next:';\n this.logger = concreteLogger || consoleLogger;\n this.options = options;\n this.debug = options.debug;\n }\n log() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return this.forward(args, 'log', '', true);\n }\n warn() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n return this.forward(args, 'warn', '', true);\n }\n error() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n return this.forward(args, 'error', '');\n }\n deprecate() {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true);\n }\n forward(args, lvl, prefix, debugOnly) {\n if (debugOnly && !this.debug) return null;\n if (isString(args[0])) args[0] = `${prefix}${this.prefix} ${args[0]}`;\n return this.logger[lvl](args);\n }\n create(moduleName) {\n return new Logger(this.logger, {\n ...{\n prefix: `${this.prefix}:${moduleName}:`\n },\n ...this.options\n });\n }\n clone(options) {\n options = options || this.options;\n options.prefix = options.prefix || this.prefix;\n return new Logger(this.logger, options);\n }\n}\nvar baseLogger = new Logger();\n\nclass EventEmitter {\n constructor() {\n this.observers = {};\n }\n on(events, listener) {\n events.split(' ').forEach(event => {\n if (!this.observers[event]) this.observers[event] = new Map();\n const numListeners = this.observers[event].get(listener) || 0;\n this.observers[event].set(listener, numListeners + 1);\n });\n return this;\n }\n off(event, listener) {\n if (!this.observers[event]) return;\n if (!listener) {\n delete this.observers[event];\n return;\n }\n this.observers[event].delete(listener);\n }\n emit(event) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n if (this.observers[event]) {\n const cloned = Array.from(this.observers[event].entries());\n cloned.forEach(_ref => {\n let [observer, numTimesAdded] = _ref;\n for (let i = 0; i < numTimesAdded; i++) {\n observer(...args);\n }\n });\n }\n if (this.observers['*']) {\n const cloned = Array.from(this.observers['*'].entries());\n cloned.forEach(_ref2 => {\n let [observer, numTimesAdded] = _ref2;\n for (let i = 0; i < numTimesAdded; i++) {\n observer.apply(observer, [event, ...args]);\n }\n });\n }\n }\n}\n\nclass ResourceStore extends EventEmitter {\n constructor(data) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n ns: ['translation'],\n defaultNS: 'translation'\n };\n super();\n this.data = data || {};\n this.options = options;\n if (this.options.keySeparator === undefined) {\n this.options.keySeparator = '.';\n }\n if (this.options.ignoreJSONStructure === undefined) {\n this.options.ignoreJSONStructure = true;\n }\n }\n addNamespaces(ns) {\n if (this.options.ns.indexOf(ns) < 0) {\n this.options.ns.push(ns);\n }\n }\n removeNamespaces(ns) {\n const index = this.options.ns.indexOf(ns);\n if (index > -1) {\n this.options.ns.splice(index, 1);\n }\n }\n getResource(lng, ns, key) {\n let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n const ignoreJSONStructure = options.ignoreJSONStructure !== undefined ? options.ignoreJSONStructure : this.options.ignoreJSONStructure;\n let path;\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n } else {\n path = [lng, ns];\n if (key) {\n if (Array.isArray(key)) {\n path.push(...key);\n } else if (isString(key) && keySeparator) {\n path.push(...key.split(keySeparator));\n } else {\n path.push(key);\n }\n }\n }\n const result = getPath(this.data, path);\n if (!result && !ns && !key && lng.indexOf('.') > -1) {\n lng = path[0];\n ns = path[1];\n key = path.slice(2).join('.');\n }\n if (result || !ignoreJSONStructure || !isString(key)) return result;\n return deepFind(this.data && this.data[lng] && this.data[lng][ns], key, keySeparator);\n }\n addResource(lng, ns, key, value) {\n let options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n silent: false\n };\n const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n let path = [lng, ns];\n if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n value = ns;\n ns = path[1];\n }\n this.addNamespaces(ns);\n setPath(this.data, path, value);\n if (!options.silent) this.emit('added', lng, ns, key, value);\n }\n addResources(lng, ns, resources) {\n let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {\n silent: false\n };\n for (const m in resources) {\n if (isString(resources[m]) || Array.isArray(resources[m])) this.addResource(lng, ns, m, resources[m], {\n silent: true\n });\n }\n if (!options.silent) this.emit('added', lng, ns, resources);\n }\n addResourceBundle(lng, ns, resources, deep, overwrite) {\n let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {\n silent: false,\n skipCopy: false\n };\n let path = [lng, ns];\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n deep = resources;\n resources = ns;\n ns = path[1];\n }\n this.addNamespaces(ns);\n let pack = getPath(this.data, path) || {};\n if (!options.skipCopy) resources = JSON.parse(JSON.stringify(resources));\n if (deep) {\n deepExtend(pack, resources, overwrite);\n } else {\n pack = {\n ...pack,\n ...resources\n };\n }\n setPath(this.data, path, pack);\n if (!options.silent) this.emit('added', lng, ns, resources);\n }\n removeResourceBundle(lng, ns) {\n if (this.hasResourceBundle(lng, ns)) {\n delete this.data[lng][ns];\n }\n this.removeNamespaces(ns);\n this.emit('removed', lng, ns);\n }\n hasResourceBundle(lng, ns) {\n return this.getResource(lng, ns) !== undefined;\n }\n getResourceBundle(lng, ns) {\n if (!ns) ns = this.options.defaultNS;\n if (this.options.compatibilityAPI === 'v1') return {\n ...{},\n ...this.getResource(lng, ns)\n };\n return this.getResource(lng, ns);\n }\n getDataByLanguage(lng) {\n return this.data[lng];\n }\n hasLanguageSomeTranslations(lng) {\n const data = this.getDataByLanguage(lng);\n const n = data && Object.keys(data) || [];\n return !!n.find(v => data[v] && Object.keys(data[v]).length > 0);\n }\n toJSON() {\n return this.data;\n }\n}\n\nvar postProcessor = {\n processors: {},\n addPostProcessor(module) {\n this.processors[module.name] = module;\n },\n handle(processors, value, key, options, translator) {\n processors.forEach(processor => {\n if (this.processors[processor]) value = this.processors[processor].process(value, key, options, translator);\n });\n return value;\n }\n};\n\nconst checkedLoadedFor = {};\nclass Translator extends EventEmitter {\n constructor(services) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super();\n copy(['resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector', 'i18nFormat', 'utils'], services, this);\n this.options = options;\n if (this.options.keySeparator === undefined) {\n this.options.keySeparator = '.';\n }\n this.logger = baseLogger.create('translator');\n }\n changeLanguage(lng) {\n if (lng) this.language = lng;\n }\n exists(key) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n interpolation: {}\n };\n if (key === undefined || key === null) {\n return false;\n }\n const resolved = this.resolve(key, options);\n return resolved && resolved.res !== undefined;\n }\n extractFromKey(key, options) {\n let nsSeparator = options.nsSeparator !== undefined ? options.nsSeparator : this.options.nsSeparator;\n if (nsSeparator === undefined) nsSeparator = ':';\n const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n let namespaces = options.ns || this.options.defaultNS || [];\n const wouldCheckForNsInKey = nsSeparator && key.indexOf(nsSeparator) > -1;\n const seemsNaturalLanguage = !this.options.userDefinedKeySeparator && !options.keySeparator && !this.options.userDefinedNsSeparator && !options.nsSeparator && !looksLikeObjectPath(key, nsSeparator, keySeparator);\n if (wouldCheckForNsInKey && !seemsNaturalLanguage) {\n const m = key.match(this.interpolator.nestingRegexp);\n if (m && m.length > 0) {\n return {\n key,\n namespaces: isString(namespaces) ? [namespaces] : namespaces\n };\n }\n const parts = key.split(nsSeparator);\n if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.indexOf(parts[0]) > -1) namespaces = parts.shift();\n key = parts.join(keySeparator);\n }\n return {\n key,\n namespaces: isString(namespaces) ? [namespaces] : namespaces\n };\n }\n translate(keys, options, lastKey) {\n if (typeof options !== 'object' && this.options.overloadTranslationOptionHandler) {\n options = this.options.overloadTranslationOptionHandler(arguments);\n }\n if (typeof options === 'object') options = {\n ...options\n };\n if (!options) options = {};\n if (keys === undefined || keys === null) return '';\n if (!Array.isArray(keys)) keys = [String(keys)];\n const returnDetails = options.returnDetails !== undefined ? options.returnDetails : this.options.returnDetails;\n const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n const {\n key,\n namespaces\n } = this.extractFromKey(keys[keys.length - 1], options);\n const namespace = namespaces[namespaces.length - 1];\n const lng = options.lng || this.language;\n const appendNamespaceToCIMode = options.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;\n if (lng && lng.toLowerCase() === 'cimode') {\n if (appendNamespaceToCIMode) {\n const nsSeparator = options.nsSeparator || this.options.nsSeparator;\n if (returnDetails) {\n return {\n res: `${namespace}${nsSeparator}${key}`,\n usedKey: key,\n exactUsedKey: key,\n usedLng: lng,\n usedNS: namespace,\n usedParams: this.getUsedParamsDetails(options)\n };\n }\n return `${namespace}${nsSeparator}${key}`;\n }\n if (returnDetails) {\n return {\n res: key,\n usedKey: key,\n exactUsedKey: key,\n usedLng: lng,\n usedNS: namespace,\n usedParams: this.getUsedParamsDetails(options)\n };\n }\n return key;\n }\n const resolved = this.resolve(keys, options);\n let res = resolved && resolved.res;\n const resUsedKey = resolved && resolved.usedKey || key;\n const resExactUsedKey = resolved && resolved.exactUsedKey || key;\n const resType = Object.prototype.toString.apply(res);\n const noObject = ['[object Number]', '[object Function]', '[object RegExp]'];\n const joinArrays = options.joinArrays !== undefined ? options.joinArrays : this.options.joinArrays;\n const handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject;\n const handleAsObject = !isString(res) && typeof res !== 'boolean' && typeof res !== 'number';\n if (handleAsObjectInI18nFormat && res && handleAsObject && noObject.indexOf(resType) < 0 && !(isString(joinArrays) && Array.isArray(res))) {\n if (!options.returnObjects && !this.options.returnObjects) {\n if (!this.options.returnedObjectHandler) {\n this.logger.warn('accessing an object - but returnObjects options is not enabled!');\n }\n const r = this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, res, {\n ...options,\n ns: namespaces\n }) : `key '${key} (${this.language})' returned an object instead of string.`;\n if (returnDetails) {\n resolved.res = r;\n resolved.usedParams = this.getUsedParamsDetails(options);\n return resolved;\n }\n return r;\n }\n if (keySeparator) {\n const resTypeIsArray = Array.isArray(res);\n const copy = resTypeIsArray ? [] : {};\n const newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey;\n for (const m in res) {\n if (Object.prototype.hasOwnProperty.call(res, m)) {\n const deepKey = `${newKeyToUse}${keySeparator}${m}`;\n copy[m] = this.translate(deepKey, {\n ...options,\n ...{\n joinArrays: false,\n ns: namespaces\n }\n });\n if (copy[m] === deepKey) copy[m] = res[m];\n }\n }\n res = copy;\n }\n } else if (handleAsObjectInI18nFormat && isString(joinArrays) && Array.isArray(res)) {\n res = res.join(joinArrays);\n if (res) res = this.extendTranslation(res, keys, options, lastKey);\n } else {\n let usedDefault = false;\n let usedKey = false;\n const needsPluralHandling = options.count !== undefined && !isString(options.count);\n const hasDefaultValue = Translator.hasDefaultValue(options);\n const defaultValueSuffix = needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count, options) : '';\n const defaultValueSuffixOrdinalFallback = options.ordinal && needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count, {\n ordinal: false\n }) : '';\n const needsZeroSuffixLookup = needsPluralHandling && !options.ordinal && options.count === 0 && this.pluralResolver.shouldUseIntlApi();\n const defaultValue = needsZeroSuffixLookup && options[`defaultValue${this.options.pluralSeparator}zero`] || options[`defaultValue${defaultValueSuffix}`] || options[`defaultValue${defaultValueSuffixOrdinalFallback}`] || options.defaultValue;\n if (!this.isValidLookup(res) && hasDefaultValue) {\n usedDefault = true;\n res = defaultValue;\n }\n if (!this.isValidLookup(res)) {\n usedKey = true;\n res = key;\n }\n const missingKeyNoValueFallbackToKey = options.missingKeyNoValueFallbackToKey || this.options.missingKeyNoValueFallbackToKey;\n const resForMissing = missingKeyNoValueFallbackToKey && usedKey ? undefined : res;\n const updateMissing = hasDefaultValue && defaultValue !== res && this.options.updateMissing;\n if (usedKey || usedDefault || updateMissing) {\n this.logger.log(updateMissing ? 'updateKey' : 'missingKey', lng, namespace, key, updateMissing ? defaultValue : res);\n if (keySeparator) {\n const fk = this.resolve(key, {\n ...options,\n keySeparator: false\n });\n if (fk && fk.res) this.logger.warn('Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.');\n }\n let lngs = [];\n const fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, options.lng || this.language);\n if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) {\n for (let i = 0; i < fallbackLngs.length; i++) {\n lngs.push(fallbackLngs[i]);\n }\n } else if (this.options.saveMissingTo === 'all') {\n lngs = this.languageUtils.toResolveHierarchy(options.lng || this.language);\n } else {\n lngs.push(options.lng || this.language);\n }\n const send = (l, k, specificDefaultValue) => {\n const defaultForMissing = hasDefaultValue && specificDefaultValue !== res ? specificDefaultValue : resForMissing;\n if (this.options.missingKeyHandler) {\n this.options.missingKeyHandler(l, namespace, k, defaultForMissing, updateMissing, options);\n } else if (this.backendConnector && this.backendConnector.saveMissing) {\n this.backendConnector.saveMissing(l, namespace, k, defaultForMissing, updateMissing, options);\n }\n this.emit('missingKey', l, namespace, k, res);\n };\n if (this.options.saveMissing) {\n if (this.options.saveMissingPlurals && needsPluralHandling) {\n lngs.forEach(language => {\n const suffixes = this.pluralResolver.getSuffixes(language, options);\n if (needsZeroSuffixLookup && options[`defaultValue${this.options.pluralSeparator}zero`] && suffixes.indexOf(`${this.options.pluralSeparator}zero`) < 0) {\n suffixes.push(`${this.options.pluralSeparator}zero`);\n }\n suffixes.forEach(suffix => {\n send([language], key + suffix, options[`defaultValue${suffix}`] || defaultValue);\n });\n });\n } else {\n send(lngs, key, defaultValue);\n }\n }\n }\n res = this.extendTranslation(res, keys, options, resolved, lastKey);\n if (usedKey && res === key && this.options.appendNamespaceToMissingKey) res = `${namespace}:${key}`;\n if ((usedKey || usedDefault) && this.options.parseMissingKeyHandler) {\n if (this.options.compatibilityAPI !== 'v1') {\n res = this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey ? `${namespace}:${key}` : key, usedDefault ? res : undefined);\n } else {\n res = this.options.parseMissingKeyHandler(res);\n }\n }\n }\n if (returnDetails) {\n resolved.res = res;\n resolved.usedParams = this.getUsedParamsDetails(options);\n return resolved;\n }\n return res;\n }\n extendTranslation(res, key, options, resolved, lastKey) {\n var _this = this;\n if (this.i18nFormat && this.i18nFormat.parse) {\n res = this.i18nFormat.parse(res, {\n ...this.options.interpolation.defaultVariables,\n ...options\n }, options.lng || this.language || resolved.usedLng, resolved.usedNS, resolved.usedKey, {\n resolved\n });\n } else if (!options.skipInterpolation) {\n if (options.interpolation) this.interpolator.init({\n ...options,\n ...{\n interpolation: {\n ...this.options.interpolation,\n ...options.interpolation\n }\n }\n });\n const skipOnVariables = isString(res) && (options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables);\n let nestBef;\n if (skipOnVariables) {\n const nb = res.match(this.interpolator.nestingRegexp);\n nestBef = nb && nb.length;\n }\n let data = options.replace && !isString(options.replace) ? options.replace : options;\n if (this.options.interpolation.defaultVariables) data = {\n ...this.options.interpolation.defaultVariables,\n ...data\n };\n res = this.interpolator.interpolate(res, data, options.lng || this.language || resolved.usedLng, options);\n if (skipOnVariables) {\n const na = res.match(this.interpolator.nestingRegexp);\n const nestAft = na && na.length;\n if (nestBef < nestAft) options.nest = false;\n }\n if (!options.lng && this.options.compatibilityAPI !== 'v1' && resolved && resolved.res) options.lng = this.language || resolved.usedLng;\n if (options.nest !== false) res = this.interpolator.nest(res, function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (lastKey && lastKey[0] === args[0] && !options.context) {\n _this.logger.warn(`It seems you are nesting recursively key: ${args[0]} in key: ${key[0]}`);\n return null;\n }\n return _this.translate(...args, key);\n }, options);\n if (options.interpolation) this.interpolator.reset();\n }\n const postProcess = options.postProcess || this.options.postProcess;\n const postProcessorNames = isString(postProcess) ? [postProcess] : postProcess;\n if (res !== undefined && res !== null && postProcessorNames && postProcessorNames.length && options.applyPostProcessor !== false) {\n res = postProcessor.handle(postProcessorNames, res, key, this.options && this.options.postProcessPassResolved ? {\n i18nResolved: {\n ...resolved,\n usedParams: this.getUsedParamsDetails(options)\n },\n ...options\n } : options, this);\n }\n return res;\n }\n resolve(keys) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let found;\n let usedKey;\n let exactUsedKey;\n let usedLng;\n let usedNS;\n if (isString(keys)) keys = [keys];\n keys.forEach(k => {\n if (this.isValidLookup(found)) return;\n const extracted = this.extractFromKey(k, options);\n const key = extracted.key;\n usedKey = key;\n let namespaces = extracted.namespaces;\n if (this.options.fallbackNS) namespaces = namespaces.concat(this.options.fallbackNS);\n const needsPluralHandling = options.count !== undefined && !isString(options.count);\n const needsZeroSuffixLookup = needsPluralHandling && !options.ordinal && options.count === 0 && this.pluralResolver.shouldUseIntlApi();\n const needsContextHandling = options.context !== undefined && (isString(options.context) || typeof options.context === 'number') && options.context !== '';\n const codes = options.lngs ? options.lngs : this.languageUtils.toResolveHierarchy(options.lng || this.language, options.fallbackLng);\n namespaces.forEach(ns => {\n if (this.isValidLookup(found)) return;\n usedNS = ns;\n if (!checkedLoadedFor[`${codes[0]}-${ns}`] && this.utils && this.utils.hasLoadedNamespace && !this.utils.hasLoadedNamespace(usedNS)) {\n checkedLoadedFor[`${codes[0]}-${ns}`] = true;\n this.logger.warn(`key \"${usedKey}\" for languages \"${codes.join(', ')}\" won't get resolved as namespace \"${usedNS}\" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n }\n codes.forEach(code => {\n if (this.isValidLookup(found)) return;\n usedLng = code;\n const finalKeys = [key];\n if (this.i18nFormat && this.i18nFormat.addLookupKeys) {\n this.i18nFormat.addLookupKeys(finalKeys, key, code, ns, options);\n } else {\n let pluralSuffix;\n if (needsPluralHandling) pluralSuffix = this.pluralResolver.getSuffix(code, options.count, options);\n const zeroSuffix = `${this.options.pluralSeparator}zero`;\n const ordinalPrefix = `${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;\n if (needsPluralHandling) {\n finalKeys.push(key + pluralSuffix);\n if (options.ordinal && pluralSuffix.indexOf(ordinalPrefix) === 0) {\n finalKeys.push(key + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n }\n if (needsZeroSuffixLookup) {\n finalKeys.push(key + zeroSuffix);\n }\n }\n if (needsContextHandling) {\n const contextKey = `${key}${this.options.contextSeparator}${options.context}`;\n finalKeys.push(contextKey);\n if (needsPluralHandling) {\n finalKeys.push(contextKey + pluralSuffix);\n if (options.ordinal && pluralSuffix.indexOf(ordinalPrefix) === 0) {\n finalKeys.push(contextKey + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n }\n if (needsZeroSuffixLookup) {\n finalKeys.push(contextKey + zeroSuffix);\n }\n }\n }\n }\n let possibleKey;\n while (possibleKey = finalKeys.pop()) {\n if (!this.isValidLookup(found)) {\n exactUsedKey = possibleKey;\n found = this.getResource(code, ns, possibleKey, options);\n }\n }\n });\n });\n });\n return {\n res: found,\n usedKey,\n exactUsedKey,\n usedLng,\n usedNS\n };\n }\n isValidLookup(res) {\n return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === '');\n }\n getResource(code, ns, key) {\n let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n if (this.i18nFormat && this.i18nFormat.getResource) return this.i18nFormat.getResource(code, ns, key, options);\n return this.resourceStore.getResource(code, ns, key, options);\n }\n getUsedParamsDetails() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const optionsKeys = ['defaultValue', 'ordinal', 'context', 'replace', 'lng', 'lngs', 'fallbackLng', 'ns', 'keySeparator', 'nsSeparator', 'returnObjects', 'returnDetails', 'joinArrays', 'postProcess', 'interpolation'];\n const useOptionsReplaceForData = options.replace && !isString(options.replace);\n let data = useOptionsReplaceForData ? options.replace : options;\n if (useOptionsReplaceForData && typeof options.count !== 'undefined') {\n data.count = options.count;\n }\n if (this.options.interpolation.defaultVariables) {\n data = {\n ...this.options.interpolation.defaultVariables,\n ...data\n };\n }\n if (!useOptionsReplaceForData) {\n data = {\n ...data\n };\n for (const key of optionsKeys) {\n delete data[key];\n }\n }\n return data;\n }\n static hasDefaultValue(options) {\n const prefix = 'defaultValue';\n for (const option in options) {\n if (Object.prototype.hasOwnProperty.call(options, option) && prefix === option.substring(0, prefix.length) && undefined !== options[option]) {\n return true;\n }\n }\n return false;\n }\n}\n\nconst capitalize = string => string.charAt(0).toUpperCase() + string.slice(1);\nclass LanguageUtil {\n constructor(options) {\n this.options = options;\n this.supportedLngs = this.options.supportedLngs || false;\n this.logger = baseLogger.create('languageUtils');\n }\n getScriptPartFromCode(code) {\n code = getCleanedCode(code);\n if (!code || code.indexOf('-') < 0) return null;\n const p = code.split('-');\n if (p.length === 2) return null;\n p.pop();\n if (p[p.length - 1].toLowerCase() === 'x') return null;\n return this.formatLanguageCode(p.join('-'));\n }\n getLanguagePartFromCode(code) {\n code = getCleanedCode(code);\n if (!code || code.indexOf('-') < 0) return code;\n const p = code.split('-');\n return this.formatLanguageCode(p[0]);\n }\n formatLanguageCode(code) {\n if (isString(code) && code.indexOf('-') > -1) {\n if (typeof Intl !== 'undefined' && typeof Intl.getCanonicalLocales !== 'undefined') {\n try {\n let formattedCode = Intl.getCanonicalLocales(code)[0];\n if (formattedCode && this.options.lowerCaseLng) {\n formattedCode = formattedCode.toLowerCase();\n }\n if (formattedCode) return formattedCode;\n } catch (e) {}\n }\n const specialCases = ['hans', 'hant', 'latn', 'cyrl', 'cans', 'mong', 'arab'];\n let p = code.split('-');\n if (this.options.lowerCaseLng) {\n p = p.map(part => part.toLowerCase());\n } else if (p.length === 2) {\n p[0] = p[0].toLowerCase();\n p[1] = p[1].toUpperCase();\n if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n } else if (p.length === 3) {\n p[0] = p[0].toLowerCase();\n if (p[1].length === 2) p[1] = p[1].toUpperCase();\n if (p[0] !== 'sgn' && p[2].length === 2) p[2] = p[2].toUpperCase();\n if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n if (specialCases.indexOf(p[2].toLowerCase()) > -1) p[2] = capitalize(p[2].toLowerCase());\n }\n return p.join('-');\n }\n return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code;\n }\n isSupportedCode(code) {\n if (this.options.load === 'languageOnly' || this.options.nonExplicitSupportedLngs) {\n code = this.getLanguagePartFromCode(code);\n }\n return !this.supportedLngs || !this.supportedLngs.length || this.supportedLngs.indexOf(code) > -1;\n }\n getBestMatchFromCodes(codes) {\n if (!codes) return null;\n let found;\n codes.forEach(code => {\n if (found) return;\n const cleanedLng = this.formatLanguageCode(code);\n if (!this.options.supportedLngs || this.isSupportedCode(cleanedLng)) found = cleanedLng;\n });\n if (!found && this.options.supportedLngs) {\n codes.forEach(code => {\n if (found) return;\n const lngOnly = this.getLanguagePartFromCode(code);\n if (this.isSupportedCode(lngOnly)) return found = lngOnly;\n found = this.options.supportedLngs.find(supportedLng => {\n if (supportedLng === lngOnly) return supportedLng;\n if (supportedLng.indexOf('-') < 0 && lngOnly.indexOf('-') < 0) return;\n if (supportedLng.indexOf('-') > 0 && lngOnly.indexOf('-') < 0 && supportedLng.substring(0, supportedLng.indexOf('-')) === lngOnly) return supportedLng;\n if (supportedLng.indexOf(lngOnly) === 0 && lngOnly.length > 1) return supportedLng;\n });\n });\n }\n if (!found) found = this.getFallbackCodes(this.options.fallbackLng)[0];\n return found;\n }\n getFallbackCodes(fallbacks, code) {\n if (!fallbacks) return [];\n if (typeof fallbacks === 'function') fallbacks = fallbacks(code);\n if (isString(fallbacks)) fallbacks = [fallbacks];\n if (Array.isArray(fallbacks)) return fallbacks;\n if (!code) return fallbacks.default || [];\n let found = fallbacks[code];\n if (!found) found = fallbacks[this.getScriptPartFromCode(code)];\n if (!found) found = fallbacks[this.formatLanguageCode(code)];\n if (!found) found = fallbacks[this.getLanguagePartFromCode(code)];\n if (!found) found = fallbacks.default;\n return found || [];\n }\n toResolveHierarchy(code, fallbackCode) {\n const fallbackCodes = this.getFallbackCodes(fallbackCode || this.options.fallbackLng || [], code);\n const codes = [];\n const addCode = c => {\n if (!c) return;\n if (this.isSupportedCode(c)) {\n codes.push(c);\n } else {\n this.logger.warn(`rejecting language code not found in supportedLngs: ${c}`);\n }\n };\n if (isString(code) && (code.indexOf('-') > -1 || code.indexOf('_') > -1)) {\n if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code));\n if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code));\n if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code));\n } else if (isString(code)) {\n addCode(this.formatLanguageCode(code));\n }\n fallbackCodes.forEach(fc => {\n if (codes.indexOf(fc) < 0) addCode(this.formatLanguageCode(fc));\n });\n return codes;\n }\n}\n\nlet sets = [{\n lngs: ['ach', 'ak', 'am', 'arn', 'br', 'fil', 'gun', 'ln', 'mfe', 'mg', 'mi', 'oc', 'pt', 'pt-BR', 'tg', 'tl', 'ti', 'tr', 'uz', 'wa'],\n nr: [1, 2],\n fc: 1\n}, {\n lngs: ['af', 'an', 'ast', 'az', 'bg', 'bn', 'ca', 'da', 'de', 'dev', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fi', 'fo', 'fur', 'fy', 'gl', 'gu', 'ha', 'hi', 'hu', 'hy', 'ia', 'it', 'kk', 'kn', 'ku', 'lb', 'mai', 'ml', 'mn', 'mr', 'nah', 'nap', 'nb', 'ne', 'nl', 'nn', 'no', 'nso', 'pa', 'pap', 'pms', 'ps', 'pt-PT', 'rm', 'sco', 'se', 'si', 'so', 'son', 'sq', 'sv', 'sw', 'ta', 'te', 'tk', 'ur', 'yo'],\n nr: [1, 2],\n fc: 2\n}, {\n lngs: ['ay', 'bo', 'cgg', 'fa', 'ht', 'id', 'ja', 'jbo', 'ka', 'km', 'ko', 'ky', 'lo', 'ms', 'sah', 'su', 'th', 'tt', 'ug', 'vi', 'wo', 'zh'],\n nr: [1],\n fc: 3\n}, {\n lngs: ['be', 'bs', 'cnr', 'dz', 'hr', 'ru', 'sr', 'uk'],\n nr: [1, 2, 5],\n fc: 4\n}, {\n lngs: ['ar'],\n nr: [0, 1, 2, 3, 11, 100],\n fc: 5\n}, {\n lngs: ['cs', 'sk'],\n nr: [1, 2, 5],\n fc: 6\n}, {\n lngs: ['csb', 'pl'],\n nr: [1, 2, 5],\n fc: 7\n}, {\n lngs: ['cy'],\n nr: [1, 2, 3, 8],\n fc: 8\n}, {\n lngs: ['fr'],\n nr: [1, 2],\n fc: 9\n}, {\n lngs: ['ga'],\n nr: [1, 2, 3, 7, 11],\n fc: 10\n}, {\n lngs: ['gd'],\n nr: [1, 2, 3, 20],\n fc: 11\n}, {\n lngs: ['is'],\n nr: [1, 2],\n fc: 12\n}, {\n lngs: ['jv'],\n nr: [0, 1],\n fc: 13\n}, {\n lngs: ['kw'],\n nr: [1, 2, 3, 4],\n fc: 14\n}, {\n lngs: ['lt'],\n nr: [1, 2, 10],\n fc: 15\n}, {\n lngs: ['lv'],\n nr: [1, 2, 0],\n fc: 16\n}, {\n lngs: ['mk'],\n nr: [1, 2],\n fc: 17\n}, {\n lngs: ['mnk'],\n nr: [0, 1, 2],\n fc: 18\n}, {\n lngs: ['mt'],\n nr: [1, 2, 11, 20],\n fc: 19\n}, {\n lngs: ['or'],\n nr: [2, 1],\n fc: 2\n}, {\n lngs: ['ro'],\n nr: [1, 2, 20],\n fc: 20\n}, {\n lngs: ['sl'],\n nr: [5, 1, 2, 3],\n fc: 21\n}, {\n lngs: ['he', 'iw'],\n nr: [1, 2, 20, 21],\n fc: 22\n}];\nlet _rulesPluralsTypes = {\n 1: n => Number(n > 1),\n 2: n => Number(n != 1),\n 3: n => 0,\n 4: n => Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2),\n 5: n => Number(n == 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5),\n 6: n => Number(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2),\n 7: n => Number(n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2),\n 8: n => Number(n == 1 ? 0 : n == 2 ? 1 : n != 8 && n != 11 ? 2 : 3),\n 9: n => Number(n >= 2),\n 10: n => Number(n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4),\n 11: n => Number(n == 1 || n == 11 ? 0 : n == 2 || n == 12 ? 1 : n > 2 && n < 20 ? 2 : 3),\n 12: n => Number(n % 10 != 1 || n % 100 == 11),\n 13: n => Number(n !== 0),\n 14: n => Number(n == 1 ? 0 : n == 2 ? 1 : n == 3 ? 2 : 3),\n 15: n => Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2),\n 16: n => Number(n % 10 == 1 && n % 100 != 11 ? 0 : n !== 0 ? 1 : 2),\n 17: n => Number(n == 1 || n % 10 == 1 && n % 100 != 11 ? 0 : 1),\n 18: n => Number(n == 0 ? 0 : n == 1 ? 1 : 2),\n 19: n => Number(n == 1 ? 0 : n == 0 || n % 100 > 1 && n % 100 < 11 ? 1 : n % 100 > 10 && n % 100 < 20 ? 2 : 3),\n 20: n => Number(n == 1 ? 0 : n == 0 || n % 100 > 0 && n % 100 < 20 ? 1 : 2),\n 21: n => Number(n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0),\n 22: n => Number(n == 1 ? 0 : n == 2 ? 1 : (n < 0 || n > 10) && n % 10 == 0 ? 2 : 3)\n};\nconst nonIntlVersions = ['v1', 'v2', 'v3'];\nconst intlVersions = ['v4'];\nconst suffixesOrder = {\n zero: 0,\n one: 1,\n two: 2,\n few: 3,\n many: 4,\n other: 5\n};\nconst createRules = () => {\n const rules = {};\n sets.forEach(set => {\n set.lngs.forEach(l => {\n rules[l] = {\n numbers: set.nr,\n plurals: _rulesPluralsTypes[set.fc]\n };\n });\n });\n return rules;\n};\nclass PluralResolver {\n constructor(languageUtils) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.languageUtils = languageUtils;\n this.options = options;\n this.logger = baseLogger.create('pluralResolver');\n if ((!this.options.compatibilityJSON || intlVersions.includes(this.options.compatibilityJSON)) && (typeof Intl === 'undefined' || !Intl.PluralRules)) {\n this.options.compatibilityJSON = 'v3';\n this.logger.error('Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.');\n }\n this.rules = createRules();\n this.pluralRulesCache = {};\n }\n addRule(lng, obj) {\n this.rules[lng] = obj;\n }\n clearCache() {\n this.pluralRulesCache = {};\n }\n getRule(code) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (this.shouldUseIntlApi()) {\n const cleanedCode = getCleanedCode(code === 'dev' ? 'en' : code);\n const type = options.ordinal ? 'ordinal' : 'cardinal';\n const cacheKey = JSON.stringify({\n cleanedCode,\n type\n });\n if (cacheKey in this.pluralRulesCache) {\n return this.pluralRulesCache[cacheKey];\n }\n let rule;\n try {\n rule = new Intl.PluralRules(cleanedCode, {\n type\n });\n } catch (err) {\n if (!code.match(/-|_/)) return;\n const lngPart = this.languageUtils.getLanguagePartFromCode(code);\n rule = this.getRule(lngPart, options);\n }\n this.pluralRulesCache[cacheKey] = rule;\n return rule;\n }\n return this.rules[code] || this.rules[this.languageUtils.getLanguagePartFromCode(code)];\n }\n needsPlural(code) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const rule = this.getRule(code, options);\n if (this.shouldUseIntlApi()) {\n return rule && rule.resolvedOptions().pluralCategories.length > 1;\n }\n return rule && rule.numbers.length > 1;\n }\n getPluralFormsOfKey(code, key) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n return this.getSuffixes(code, options).map(suffix => `${key}${suffix}`);\n }\n getSuffixes(code) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const rule = this.getRule(code, options);\n if (!rule) {\n return [];\n }\n if (this.shouldUseIntlApi()) {\n return rule.resolvedOptions().pluralCategories.sort((pluralCategory1, pluralCategory2) => suffixesOrder[pluralCategory1] - suffixesOrder[pluralCategory2]).map(pluralCategory => `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${pluralCategory}`);\n }\n return rule.numbers.map(number => this.getSuffix(code, number, options));\n }\n getSuffix(code, count) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n const rule = this.getRule(code, options);\n if (rule) {\n if (this.shouldUseIntlApi()) {\n return `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${rule.select(count)}`;\n }\n return this.getSuffixRetroCompatible(rule, count);\n }\n this.logger.warn(`no plural rule found for: ${code}`);\n return '';\n }\n getSuffixRetroCompatible(rule, count) {\n const idx = rule.noAbs ? rule.plurals(count) : rule.plurals(Math.abs(count));\n let suffix = rule.numbers[idx];\n if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n if (suffix === 2) {\n suffix = 'plural';\n } else if (suffix === 1) {\n suffix = '';\n }\n }\n const returnSuffix = () => this.options.prepend && suffix.toString() ? this.options.prepend + suffix.toString() : suffix.toString();\n if (this.options.compatibilityJSON === 'v1') {\n if (suffix === 1) return '';\n if (typeof suffix === 'number') return `_plural_${suffix.toString()}`;\n return returnSuffix();\n } else if (this.options.compatibilityJSON === 'v2') {\n return returnSuffix();\n } else if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n return returnSuffix();\n }\n return this.options.prepend && idx.toString() ? this.options.prepend + idx.toString() : idx.toString();\n }\n shouldUseIntlApi() {\n return !nonIntlVersions.includes(this.options.compatibilityJSON);\n }\n}\n\nconst deepFindWithDefaults = function (data, defaultData, key) {\n let keySeparator = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '.';\n let ignoreJSONStructure = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n let path = getPathWithDefaults(data, defaultData, key);\n if (!path && ignoreJSONStructure && isString(key)) {\n path = deepFind(data, key, keySeparator);\n if (path === undefined) path = deepFind(defaultData, key, keySeparator);\n }\n return path;\n};\nconst regexSafe = val => val.replace(/\\$/g, '$$$$');\nclass Interpolator {\n constructor() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.logger = baseLogger.create('interpolator');\n this.options = options;\n this.format = options.interpolation && options.interpolation.format || (value => value);\n this.init(options);\n }\n init() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (!options.interpolation) options.interpolation = {\n escapeValue: true\n };\n const {\n escape: escape$1,\n escapeValue,\n useRawValueToEscape,\n prefix,\n prefixEscaped,\n suffix,\n suffixEscaped,\n formatSeparator,\n unescapeSuffix,\n unescapePrefix,\n nestingPrefix,\n nestingPrefixEscaped,\n nestingSuffix,\n nestingSuffixEscaped,\n nestingOptionsSeparator,\n maxReplaces,\n alwaysFormat\n } = options.interpolation;\n this.escape = escape$1 !== undefined ? escape$1 : escape;\n this.escapeValue = escapeValue !== undefined ? escapeValue : true;\n this.useRawValueToEscape = useRawValueToEscape !== undefined ? useRawValueToEscape : false;\n this.prefix = prefix ? regexEscape(prefix) : prefixEscaped || '{{';\n this.suffix = suffix ? regexEscape(suffix) : suffixEscaped || '}}';\n this.formatSeparator = formatSeparator || ',';\n this.unescapePrefix = unescapeSuffix ? '' : unescapePrefix || '-';\n this.unescapeSuffix = this.unescapePrefix ? '' : unescapeSuffix || '';\n this.nestingPrefix = nestingPrefix ? regexEscape(nestingPrefix) : nestingPrefixEscaped || regexEscape('$t(');\n this.nestingSuffix = nestingSuffix ? regexEscape(nestingSuffix) : nestingSuffixEscaped || regexEscape(')');\n this.nestingOptionsSeparator = nestingOptionsSeparator || ',';\n this.maxReplaces = maxReplaces || 1000;\n this.alwaysFormat = alwaysFormat !== undefined ? alwaysFormat : false;\n this.resetRegExp();\n }\n reset() {\n if (this.options) this.init(this.options);\n }\n resetRegExp() {\n const getOrResetRegExp = (existingRegExp, pattern) => {\n if (existingRegExp && existingRegExp.source === pattern) {\n existingRegExp.lastIndex = 0;\n return existingRegExp;\n }\n return new RegExp(pattern, 'g');\n };\n this.regexp = getOrResetRegExp(this.regexp, `${this.prefix}(.+?)${this.suffix}`);\n this.regexpUnescape = getOrResetRegExp(this.regexpUnescape, `${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`);\n this.nestingRegexp = getOrResetRegExp(this.nestingRegexp, `${this.nestingPrefix}(.+?)${this.nestingSuffix}`);\n }\n interpolate(str, data, lng, options) {\n let match;\n let value;\n let replaces;\n const defaultData = this.options && this.options.interpolation && this.options.interpolation.defaultVariables || {};\n const handleFormat = key => {\n if (key.indexOf(this.formatSeparator) < 0) {\n const path = deepFindWithDefaults(data, defaultData, key, this.options.keySeparator, this.options.ignoreJSONStructure);\n return this.alwaysFormat ? this.format(path, undefined, lng, {\n ...options,\n ...data,\n interpolationkey: key\n }) : path;\n }\n const p = key.split(this.formatSeparator);\n const k = p.shift().trim();\n const f = p.join(this.formatSeparator).trim();\n return this.format(deepFindWithDefaults(data, defaultData, k, this.options.keySeparator, this.options.ignoreJSONStructure), f, lng, {\n ...options,\n ...data,\n interpolationkey: k\n });\n };\n this.resetRegExp();\n const missingInterpolationHandler = options && options.missingInterpolationHandler || this.options.missingInterpolationHandler;\n const skipOnVariables = options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables;\n const todos = [{\n regex: this.regexpUnescape,\n safeValue: val => regexSafe(val)\n }, {\n regex: this.regexp,\n safeValue: val => this.escapeValue ? regexSafe(this.escape(val)) : regexSafe(val)\n }];\n todos.forEach(todo => {\n replaces = 0;\n while (match = todo.regex.exec(str)) {\n const matchedVar = match[1].trim();\n value = handleFormat(matchedVar);\n if (value === undefined) {\n if (typeof missingInterpolationHandler === 'function') {\n const temp = missingInterpolationHandler(str, match, options);\n value = isString(temp) ? temp : '';\n } else if (options && Object.prototype.hasOwnProperty.call(options, matchedVar)) {\n value = '';\n } else if (skipOnVariables) {\n value = match[0];\n continue;\n } else {\n this.logger.warn(`missed to pass in variable ${matchedVar} for interpolating ${str}`);\n value = '';\n }\n } else if (!isString(value) && !this.useRawValueToEscape) {\n value = makeString(value);\n }\n const safeValue = todo.safeValue(value);\n str = str.replace(match[0], safeValue);\n if (skipOnVariables) {\n todo.regex.lastIndex += value.length;\n todo.regex.lastIndex -= match[0].length;\n } else {\n todo.regex.lastIndex = 0;\n }\n replaces++;\n if (replaces >= this.maxReplaces) {\n break;\n }\n }\n });\n return str;\n }\n nest(str, fc) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n let match;\n let value;\n let clonedOptions;\n const handleHasOptions = (key, inheritedOptions) => {\n const sep = this.nestingOptionsSeparator;\n if (key.indexOf(sep) < 0) return key;\n const c = key.split(new RegExp(`${sep}[ ]*{`));\n let optionsString = `{${c[1]}`;\n key = c[0];\n optionsString = this.interpolate(optionsString, clonedOptions);\n const matchedSingleQuotes = optionsString.match(/'/g);\n const matchedDoubleQuotes = optionsString.match(/\"/g);\n if (matchedSingleQuotes && matchedSingleQuotes.length % 2 === 0 && !matchedDoubleQuotes || matchedDoubleQuotes.length % 2 !== 0) {\n optionsString = optionsString.replace(/'/g, '\"');\n }\n try {\n clonedOptions = JSON.parse(optionsString);\n if (inheritedOptions) clonedOptions = {\n ...inheritedOptions,\n ...clonedOptions\n };\n } catch (e) {\n this.logger.warn(`failed parsing options string in nesting for key ${key}`, e);\n return `${key}${sep}${optionsString}`;\n }\n if (clonedOptions.defaultValue && clonedOptions.defaultValue.indexOf(this.prefix) > -1) delete clonedOptions.defaultValue;\n return key;\n };\n while (match = this.nestingRegexp.exec(str)) {\n let formatters = [];\n clonedOptions = {\n ...options\n };\n clonedOptions = clonedOptions.replace && !isString(clonedOptions.replace) ? clonedOptions.replace : clonedOptions;\n clonedOptions.applyPostProcessor = false;\n delete clonedOptions.defaultValue;\n let doReduce = false;\n if (match[0].indexOf(this.formatSeparator) !== -1 && !/{.*}/.test(match[1])) {\n const r = match[1].split(this.formatSeparator).map(elem => elem.trim());\n match[1] = r.shift();\n formatters = r;\n doReduce = true;\n }\n value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions);\n if (value && match[0] === str && !isString(value)) return value;\n if (!isString(value)) value = makeString(value);\n if (!value) {\n this.logger.warn(`missed to resolve ${match[1]} for nesting ${str}`);\n value = '';\n }\n if (doReduce) {\n value = formatters.reduce((v, f) => this.format(v, f, options.lng, {\n ...options,\n interpolationkey: match[1].trim()\n }), value.trim());\n }\n str = str.replace(match[0], value);\n this.regexp.lastIndex = 0;\n }\n return str;\n }\n}\n\nconst parseFormatStr = formatStr => {\n let formatName = formatStr.toLowerCase().trim();\n const formatOptions = {};\n if (formatStr.indexOf('(') > -1) {\n const p = formatStr.split('(');\n formatName = p[0].toLowerCase().trim();\n const optStr = p[1].substring(0, p[1].length - 1);\n if (formatName === 'currency' && optStr.indexOf(':') < 0) {\n if (!formatOptions.currency) formatOptions.currency = optStr.trim();\n } else if (formatName === 'relativetime' && optStr.indexOf(':') < 0) {\n if (!formatOptions.range) formatOptions.range = optStr.trim();\n } else {\n const opts = optStr.split(';');\n opts.forEach(opt => {\n if (opt) {\n const [key, ...rest] = opt.split(':');\n const val = rest.join(':').trim().replace(/^'+|'+$/g, '');\n const trimmedKey = key.trim();\n if (!formatOptions[trimmedKey]) formatOptions[trimmedKey] = val;\n if (val === 'false') formatOptions[trimmedKey] = false;\n if (val === 'true') formatOptions[trimmedKey] = true;\n if (!isNaN(val)) formatOptions[trimmedKey] = parseInt(val, 10);\n }\n });\n }\n }\n return {\n formatName,\n formatOptions\n };\n};\nconst createCachedFormatter = fn => {\n const cache = {};\n return (val, lng, options) => {\n let optForCache = options;\n if (options && options.interpolationkey && options.formatParams && options.formatParams[options.interpolationkey] && options[options.interpolationkey]) {\n optForCache = {\n ...optForCache,\n [options.interpolationkey]: undefined\n };\n }\n const key = lng + JSON.stringify(optForCache);\n let formatter = cache[key];\n if (!formatter) {\n formatter = fn(getCleanedCode(lng), options);\n cache[key] = formatter;\n }\n return formatter(val);\n };\n};\nclass Formatter {\n constructor() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.logger = baseLogger.create('formatter');\n this.options = options;\n this.formats = {\n number: createCachedFormatter((lng, opt) => {\n const formatter = new Intl.NumberFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n }),\n currency: createCachedFormatter((lng, opt) => {\n const formatter = new Intl.NumberFormat(lng, {\n ...opt,\n style: 'currency'\n });\n return val => formatter.format(val);\n }),\n datetime: createCachedFormatter((lng, opt) => {\n const formatter = new Intl.DateTimeFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n }),\n relativetime: createCachedFormatter((lng, opt) => {\n const formatter = new Intl.RelativeTimeFormat(lng, {\n ...opt\n });\n return val => formatter.format(val, opt.range || 'day');\n }),\n list: createCachedFormatter((lng, opt) => {\n const formatter = new Intl.ListFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n })\n };\n this.init(options);\n }\n init(services) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n interpolation: {}\n };\n this.formatSeparator = options.interpolation.formatSeparator || ',';\n }\n add(name, fc) {\n this.formats[name.toLowerCase().trim()] = fc;\n }\n addCached(name, fc) {\n this.formats[name.toLowerCase().trim()] = createCachedFormatter(fc);\n }\n format(value, format, lng) {\n let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n const formats = format.split(this.formatSeparator);\n if (formats.length > 1 && formats[0].indexOf('(') > 1 && formats[0].indexOf(')') < 0 && formats.find(f => f.indexOf(')') > -1)) {\n const lastIndex = formats.findIndex(f => f.indexOf(')') > -1);\n formats[0] = [formats[0], ...formats.splice(1, lastIndex)].join(this.formatSeparator);\n }\n const result = formats.reduce((mem, f) => {\n const {\n formatName,\n formatOptions\n } = parseFormatStr(f);\n if (this.formats[formatName]) {\n let formatted = mem;\n try {\n const valOptions = options && options.formatParams && options.formatParams[options.interpolationkey] || {};\n const l = valOptions.locale || valOptions.lng || options.locale || options.lng || lng;\n formatted = this.formats[formatName](mem, l, {\n ...formatOptions,\n ...options,\n ...valOptions\n });\n } catch (error) {\n this.logger.warn(error);\n }\n return formatted;\n } else {\n this.logger.warn(`there was no format function for ${formatName}`);\n }\n return mem;\n }, value);\n return result;\n }\n}\n\nconst removePending = (q, name) => {\n if (q.pending[name] !== undefined) {\n delete q.pending[name];\n q.pendingCount--;\n }\n};\nclass Connector extends EventEmitter {\n constructor(backend, store, services) {\n let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n super();\n this.backend = backend;\n this.store = store;\n this.services = services;\n this.languageUtils = services.languageUtils;\n this.options = options;\n this.logger = baseLogger.create('backendConnector');\n this.waitingReads = [];\n this.maxParallelReads = options.maxParallelReads || 10;\n this.readingCalls = 0;\n this.maxRetries = options.maxRetries >= 0 ? options.maxRetries : 5;\n this.retryTimeout = options.retryTimeout >= 1 ? options.retryTimeout : 350;\n this.state = {};\n this.queue = [];\n if (this.backend && this.backend.init) {\n this.backend.init(services, options.backend, options);\n }\n }\n queueLoad(languages, namespaces, options, callback) {\n const toLoad = {};\n const pending = {};\n const toLoadLanguages = {};\n const toLoadNamespaces = {};\n languages.forEach(lng => {\n let hasAllNamespaces = true;\n namespaces.forEach(ns => {\n const name = `${lng}|${ns}`;\n if (!options.reload && this.store.hasResourceBundle(lng, ns)) {\n this.state[name] = 2;\n } else if (this.state[name] < 0) ; else if (this.state[name] === 1) {\n if (pending[name] === undefined) pending[name] = true;\n } else {\n this.state[name] = 1;\n hasAllNamespaces = false;\n if (pending[name] === undefined) pending[name] = true;\n if (toLoad[name] === undefined) toLoad[name] = true;\n if (toLoadNamespaces[ns] === undefined) toLoadNamespaces[ns] = true;\n }\n });\n if (!hasAllNamespaces) toLoadLanguages[lng] = true;\n });\n if (Object.keys(toLoad).length || Object.keys(pending).length) {\n this.queue.push({\n pending,\n pendingCount: Object.keys(pending).length,\n loaded: {},\n errors: [],\n callback\n });\n }\n return {\n toLoad: Object.keys(toLoad),\n pending: Object.keys(pending),\n toLoadLanguages: Object.keys(toLoadLanguages),\n toLoadNamespaces: Object.keys(toLoadNamespaces)\n };\n }\n loaded(name, err, data) {\n const s = name.split('|');\n const lng = s[0];\n const ns = s[1];\n if (err) this.emit('failedLoading', lng, ns, err);\n if (!err && data) {\n this.store.addResourceBundle(lng, ns, data, undefined, undefined, {\n skipCopy: true\n });\n }\n this.state[name] = err ? -1 : 2;\n if (err && data) this.state[name] = 0;\n const loaded = {};\n this.queue.forEach(q => {\n pushPath(q.loaded, [lng], ns);\n removePending(q, name);\n if (err) q.errors.push(err);\n if (q.pendingCount === 0 && !q.done) {\n Object.keys(q.loaded).forEach(l => {\n if (!loaded[l]) loaded[l] = {};\n const loadedKeys = q.loaded[l];\n if (loadedKeys.length) {\n loadedKeys.forEach(n => {\n if (loaded[l][n] === undefined) loaded[l][n] = true;\n });\n }\n });\n q.done = true;\n if (q.errors.length) {\n q.callback(q.errors);\n } else {\n q.callback();\n }\n }\n });\n this.emit('loaded', loaded);\n this.queue = this.queue.filter(q => !q.done);\n }\n read(lng, ns, fcName) {\n let tried = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n let wait = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : this.retryTimeout;\n let callback = arguments.length > 5 ? arguments[5] : undefined;\n if (!lng.length) return callback(null, {});\n if (this.readingCalls >= this.maxParallelReads) {\n this.waitingReads.push({\n lng,\n ns,\n fcName,\n tried,\n wait,\n callback\n });\n return;\n }\n this.readingCalls++;\n const resolver = (err, data) => {\n this.readingCalls--;\n if (this.waitingReads.length > 0) {\n const next = this.waitingReads.shift();\n this.read(next.lng, next.ns, next.fcName, next.tried, next.wait, next.callback);\n }\n if (err && data && tried < this.maxRetries) {\n setTimeout(() => {\n this.read.call(this, lng, ns, fcName, tried + 1, wait * 2, callback);\n }, wait);\n return;\n }\n callback(err, data);\n };\n const fc = this.backend[fcName].bind(this.backend);\n if (fc.length === 2) {\n try {\n const r = fc(lng, ns);\n if (r && typeof r.then === 'function') {\n r.then(data => resolver(null, data)).catch(resolver);\n } else {\n resolver(null, r);\n }\n } catch (err) {\n resolver(err);\n }\n return;\n }\n return fc(lng, ns, resolver);\n }\n prepareLoading(languages, namespaces) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n let callback = arguments.length > 3 ? arguments[3] : undefined;\n if (!this.backend) {\n this.logger.warn('No backend was added via i18next.use. Will not load resources.');\n return callback && callback();\n }\n if (isString(languages)) languages = this.languageUtils.toResolveHierarchy(languages);\n if (isString(namespaces)) namespaces = [namespaces];\n const toLoad = this.queueLoad(languages, namespaces, options, callback);\n if (!toLoad.toLoad.length) {\n if (!toLoad.pending.length) callback();\n return null;\n }\n toLoad.toLoad.forEach(name => {\n this.loadOne(name);\n });\n }\n load(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {}, callback);\n }\n reload(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {\n reload: true\n }, callback);\n }\n loadOne(name) {\n let prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n const s = name.split('|');\n const lng = s[0];\n const ns = s[1];\n this.read(lng, ns, 'read', undefined, undefined, (err, data) => {\n if (err) this.logger.warn(`${prefix}loading namespace ${ns} for language ${lng} failed`, err);\n if (!err && data) this.logger.log(`${prefix}loaded namespace ${ns} for language ${lng}`, data);\n this.loaded(name, err, data);\n });\n }\n saveMissing(languages, namespace, key, fallbackValue, isUpdate) {\n let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n let clb = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : () => {};\n if (this.services.utils && this.services.utils.hasLoadedNamespace && !this.services.utils.hasLoadedNamespace(namespace)) {\n this.logger.warn(`did not save key \"${key}\" as the namespace \"${namespace}\" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n return;\n }\n if (key === undefined || key === null || key === '') return;\n if (this.backend && this.backend.create) {\n const opts = {\n ...options,\n isUpdate\n };\n const fc = this.backend.create.bind(this.backend);\n if (fc.length < 6) {\n try {\n let r;\n if (fc.length === 5) {\n r = fc(languages, namespace, key, fallbackValue, opts);\n } else {\n r = fc(languages, namespace, key, fallbackValue);\n }\n if (r && typeof r.then === 'function') {\n r.then(data => clb(null, data)).catch(clb);\n } else {\n clb(null, r);\n }\n } catch (err) {\n clb(err);\n }\n } else {\n fc(languages, namespace, key, fallbackValue, clb, opts);\n }\n }\n if (!languages || !languages[0]) return;\n this.store.addResource(languages[0], namespace, key, fallbackValue);\n }\n}\n\nconst get = () => ({\n debug: false,\n initImmediate: true,\n ns: ['translation'],\n defaultNS: ['translation'],\n fallbackLng: ['dev'],\n fallbackNS: false,\n supportedLngs: false,\n nonExplicitSupportedLngs: false,\n load: 'all',\n preload: false,\n simplifyPluralSuffix: true,\n keySeparator: '.',\n nsSeparator: ':',\n pluralSeparator: '_',\n contextSeparator: '_',\n partialBundledLanguages: false,\n saveMissing: false,\n updateMissing: false,\n saveMissingTo: 'fallback',\n saveMissingPlurals: true,\n missingKeyHandler: false,\n missingInterpolationHandler: false,\n postProcess: false,\n postProcessPassResolved: false,\n returnNull: false,\n returnEmptyString: true,\n returnObjects: false,\n joinArrays: false,\n returnedObjectHandler: false,\n parseMissingKeyHandler: false,\n appendNamespaceToMissingKey: false,\n appendNamespaceToCIMode: false,\n overloadTranslationOptionHandler: args => {\n let ret = {};\n if (typeof args[1] === 'object') ret = args[1];\n if (isString(args[1])) ret.defaultValue = args[1];\n if (isString(args[2])) ret.tDescription = args[2];\n if (typeof args[2] === 'object' || typeof args[3] === 'object') {\n const options = args[3] || args[2];\n Object.keys(options).forEach(key => {\n ret[key] = options[key];\n });\n }\n return ret;\n },\n interpolation: {\n escapeValue: true,\n format: value => value,\n prefix: '{{',\n suffix: '}}',\n formatSeparator: ',',\n unescapePrefix: '-',\n nestingPrefix: '$t(',\n nestingSuffix: ')',\n nestingOptionsSeparator: ',',\n maxReplaces: 1000,\n skipOnVariables: true\n }\n});\nconst transformOptions = options => {\n if (isString(options.ns)) options.ns = [options.ns];\n if (isString(options.fallbackLng)) options.fallbackLng = [options.fallbackLng];\n if (isString(options.fallbackNS)) options.fallbackNS = [options.fallbackNS];\n if (options.supportedLngs && options.supportedLngs.indexOf('cimode') < 0) {\n options.supportedLngs = options.supportedLngs.concat(['cimode']);\n }\n return options;\n};\n\nconst noop = () => {};\nconst bindMemberFunctions = inst => {\n const mems = Object.getOwnPropertyNames(Object.getPrototypeOf(inst));\n mems.forEach(mem => {\n if (typeof inst[mem] === 'function') {\n inst[mem] = inst[mem].bind(inst);\n }\n });\n};\nclass I18n extends EventEmitter {\n constructor() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let callback = arguments.length > 1 ? arguments[1] : undefined;\n super();\n this.options = transformOptions(options);\n this.services = {};\n this.logger = baseLogger;\n this.modules = {\n external: []\n };\n bindMemberFunctions(this);\n if (callback && !this.isInitialized && !options.isClone) {\n if (!this.options.initImmediate) {\n this.init(options, callback);\n return this;\n }\n setTimeout(() => {\n this.init(options, callback);\n }, 0);\n }\n }\n init() {\n var _this = this;\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let callback = arguments.length > 1 ? arguments[1] : undefined;\n this.isInitializing = true;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n if (!options.defaultNS && options.defaultNS !== false && options.ns) {\n if (isString(options.ns)) {\n options.defaultNS = options.ns;\n } else if (options.ns.indexOf('translation') < 0) {\n options.defaultNS = options.ns[0];\n }\n }\n const defOpts = get();\n this.options = {\n ...defOpts,\n ...this.options,\n ...transformOptions(options)\n };\n if (this.options.compatibilityAPI !== 'v1') {\n this.options.interpolation = {\n ...defOpts.interpolation,\n ...this.options.interpolation\n };\n }\n if (options.keySeparator !== undefined) {\n this.options.userDefinedKeySeparator = options.keySeparator;\n }\n if (options.nsSeparator !== undefined) {\n this.options.userDefinedNsSeparator = options.nsSeparator;\n }\n const createClassOnDemand = ClassOrObject => {\n if (!ClassOrObject) return null;\n if (typeof ClassOrObject === 'function') return new ClassOrObject();\n return ClassOrObject;\n };\n if (!this.options.isClone) {\n if (this.modules.logger) {\n baseLogger.init(createClassOnDemand(this.modules.logger), this.options);\n } else {\n baseLogger.init(null, this.options);\n }\n let formatter;\n if (this.modules.formatter) {\n formatter = this.modules.formatter;\n } else if (typeof Intl !== 'undefined') {\n formatter = Formatter;\n }\n const lu = new LanguageUtil(this.options);\n this.store = new ResourceStore(this.options.resources, this.options);\n const s = this.services;\n s.logger = baseLogger;\n s.resourceStore = this.store;\n s.languageUtils = lu;\n s.pluralResolver = new PluralResolver(lu, {\n prepend: this.options.pluralSeparator,\n compatibilityJSON: this.options.compatibilityJSON,\n simplifyPluralSuffix: this.options.simplifyPluralSuffix\n });\n if (formatter && (!this.options.interpolation.format || this.options.interpolation.format === defOpts.interpolation.format)) {\n s.formatter = createClassOnDemand(formatter);\n s.formatter.init(s, this.options);\n this.options.interpolation.format = s.formatter.format.bind(s.formatter);\n }\n s.interpolator = new Interpolator(this.options);\n s.utils = {\n hasLoadedNamespace: this.hasLoadedNamespace.bind(this)\n };\n s.backendConnector = new Connector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options);\n s.backendConnector.on('*', function (event) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n _this.emit(event, ...args);\n });\n if (this.modules.languageDetector) {\n s.languageDetector = createClassOnDemand(this.modules.languageDetector);\n if (s.languageDetector.init) s.languageDetector.init(s, this.options.detection, this.options);\n }\n if (this.modules.i18nFormat) {\n s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);\n if (s.i18nFormat.init) s.i18nFormat.init(this);\n }\n this.translator = new Translator(this.services, this.options);\n this.translator.on('*', function (event) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n _this.emit(event, ...args);\n });\n this.modules.external.forEach(m => {\n if (m.init) m.init(this);\n });\n }\n this.format = this.options.interpolation.format;\n if (!callback) callback = noop;\n if (this.options.fallbackLng && !this.services.languageDetector && !this.options.lng) {\n const codes = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n if (codes.length > 0 && codes[0] !== 'dev') this.options.lng = codes[0];\n }\n if (!this.services.languageDetector && !this.options.lng) {\n this.logger.warn('init: no languageDetector is used and no lng is defined');\n }\n const storeApi = ['getResource', 'hasResourceBundle', 'getResourceBundle', 'getDataByLanguage'];\n storeApi.forEach(fcName => {\n this[fcName] = function () {\n return _this.store[fcName](...arguments);\n };\n });\n const storeApiChained = ['addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle'];\n storeApiChained.forEach(fcName => {\n this[fcName] = function () {\n _this.store[fcName](...arguments);\n return _this;\n };\n });\n const deferred = defer();\n const load = () => {\n const finish = (err, t) => {\n this.isInitializing = false;\n if (this.isInitialized && !this.initializedStoreOnce) this.logger.warn('init: i18next is already initialized. You should call init just once!');\n this.isInitialized = true;\n if (!this.options.isClone) this.logger.log('initialized', this.options);\n this.emit('initialized', this.options);\n deferred.resolve(t);\n callback(err, t);\n };\n if (this.languages && this.options.compatibilityAPI !== 'v1' && !this.isInitialized) return finish(null, this.t.bind(this));\n this.changeLanguage(this.options.lng, finish);\n };\n if (this.options.resources || !this.options.initImmediate) {\n load();\n } else {\n setTimeout(load, 0);\n }\n return deferred;\n }\n loadResources(language) {\n let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n let usedCallback = callback;\n const usedLng = isString(language) ? language : this.language;\n if (typeof language === 'function') usedCallback = language;\n if (!this.options.resources || this.options.partialBundledLanguages) {\n if (usedLng && usedLng.toLowerCase() === 'cimode' && (!this.options.preload || this.options.preload.length === 0)) return usedCallback();\n const toLoad = [];\n const append = lng => {\n if (!lng) return;\n if (lng === 'cimode') return;\n const lngs = this.services.languageUtils.toResolveHierarchy(lng);\n lngs.forEach(l => {\n if (l === 'cimode') return;\n if (toLoad.indexOf(l) < 0) toLoad.push(l);\n });\n };\n if (!usedLng) {\n const fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n fallbacks.forEach(l => append(l));\n } else {\n append(usedLng);\n }\n if (this.options.preload) {\n this.options.preload.forEach(l => append(l));\n }\n this.services.backendConnector.load(toLoad, this.options.ns, e => {\n if (!e && !this.resolvedLanguage && this.language) this.setResolvedLanguage(this.language);\n usedCallback(e);\n });\n } else {\n usedCallback(null);\n }\n }\n reloadResources(lngs, ns, callback) {\n const deferred = defer();\n if (typeof lngs === 'function') {\n callback = lngs;\n lngs = undefined;\n }\n if (typeof ns === 'function') {\n callback = ns;\n ns = undefined;\n }\n if (!lngs) lngs = this.languages;\n if (!ns) ns = this.options.ns;\n if (!callback) callback = noop;\n this.services.backendConnector.reload(lngs, ns, err => {\n deferred.resolve();\n callback(err);\n });\n return deferred;\n }\n use(module) {\n if (!module) throw new Error('You are passing an undefined module! Please check the object you are passing to i18next.use()');\n if (!module.type) throw new Error('You are passing a wrong module! Please check the object you are passing to i18next.use()');\n if (module.type === 'backend') {\n this.modules.backend = module;\n }\n if (module.type === 'logger' || module.log && module.warn && module.error) {\n this.modules.logger = module;\n }\n if (module.type === 'languageDetector') {\n this.modules.languageDetector = module;\n }\n if (module.type === 'i18nFormat') {\n this.modules.i18nFormat = module;\n }\n if (module.type === 'postProcessor') {\n postProcessor.addPostProcessor(module);\n }\n if (module.type === 'formatter') {\n this.modules.formatter = module;\n }\n if (module.type === '3rdParty') {\n this.modules.external.push(module);\n }\n return this;\n }\n setResolvedLanguage(l) {\n if (!l || !this.languages) return;\n if (['cimode', 'dev'].indexOf(l) > -1) return;\n for (let li = 0; li < this.languages.length; li++) {\n const lngInLngs = this.languages[li];\n if (['cimode', 'dev'].indexOf(lngInLngs) > -1) continue;\n if (this.store.hasLanguageSomeTranslations(lngInLngs)) {\n this.resolvedLanguage = lngInLngs;\n break;\n }\n }\n }\n changeLanguage(lng, callback) {\n var _this2 = this;\n this.isLanguageChangingTo = lng;\n const deferred = defer();\n this.emit('languageChanging', lng);\n const setLngProps = l => {\n this.language = l;\n this.languages = this.services.languageUtils.toResolveHierarchy(l);\n this.resolvedLanguage = undefined;\n this.setResolvedLanguage(l);\n };\n const done = (err, l) => {\n if (l) {\n setLngProps(l);\n this.translator.changeLanguage(l);\n this.isLanguageChangingTo = undefined;\n this.emit('languageChanged', l);\n this.logger.log('languageChanged', l);\n } else {\n this.isLanguageChangingTo = undefined;\n }\n deferred.resolve(function () {\n return _this2.t(...arguments);\n });\n if (callback) callback(err, function () {\n return _this2.t(...arguments);\n });\n };\n const setLng = lngs => {\n if (!lng && !lngs && this.services.languageDetector) lngs = [];\n const l = isString(lngs) ? lngs : this.services.languageUtils.getBestMatchFromCodes(lngs);\n if (l) {\n if (!this.language) {\n setLngProps(l);\n }\n if (!this.translator.language) this.translator.changeLanguage(l);\n if (this.services.languageDetector && this.services.languageDetector.cacheUserLanguage) this.services.languageDetector.cacheUserLanguage(l);\n }\n this.loadResources(l, err => {\n done(err, l);\n });\n };\n if (!lng && this.services.languageDetector && !this.services.languageDetector.async) {\n setLng(this.services.languageDetector.detect());\n } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) {\n if (this.services.languageDetector.detect.length === 0) {\n this.services.languageDetector.detect().then(setLng);\n } else {\n this.services.languageDetector.detect(setLng);\n }\n } else {\n setLng(lng);\n }\n return deferred;\n }\n getFixedT(lng, ns, keyPrefix) {\n var _this3 = this;\n const fixedT = function (key, opts) {\n let options;\n if (typeof opts !== 'object') {\n for (var _len3 = arguments.length, rest = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n rest[_key3 - 2] = arguments[_key3];\n }\n options = _this3.options.overloadTranslationOptionHandler([key, opts].concat(rest));\n } else {\n options = {\n ...opts\n };\n }\n options.lng = options.lng || fixedT.lng;\n options.lngs = options.lngs || fixedT.lngs;\n options.ns = options.ns || fixedT.ns;\n if (options.keyPrefix !== '') options.keyPrefix = options.keyPrefix || keyPrefix || fixedT.keyPrefix;\n const keySeparator = _this3.options.keySeparator || '.';\n let resultKey;\n if (options.keyPrefix && Array.isArray(key)) {\n resultKey = key.map(k => `${options.keyPrefix}${keySeparator}${k}`);\n } else {\n resultKey = options.keyPrefix ? `${options.keyPrefix}${keySeparator}${key}` : key;\n }\n return _this3.t(resultKey, options);\n };\n if (isString(lng)) {\n fixedT.lng = lng;\n } else {\n fixedT.lngs = lng;\n }\n fixedT.ns = ns;\n fixedT.keyPrefix = keyPrefix;\n return fixedT;\n }\n t() {\n return this.translator && this.translator.translate(...arguments);\n }\n exists() {\n return this.translator && this.translator.exists(...arguments);\n }\n setDefaultNamespace(ns) {\n this.options.defaultNS = ns;\n }\n hasLoadedNamespace(ns) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (!this.isInitialized) {\n this.logger.warn('hasLoadedNamespace: i18next was not initialized', this.languages);\n return false;\n }\n if (!this.languages || !this.languages.length) {\n this.logger.warn('hasLoadedNamespace: i18n.languages were undefined or empty', this.languages);\n return false;\n }\n const lng = options.lng || this.resolvedLanguage || this.languages[0];\n const fallbackLng = this.options ? this.options.fallbackLng : false;\n const lastLng = this.languages[this.languages.length - 1];\n if (lng.toLowerCase() === 'cimode') return true;\n const loadNotPending = (l, n) => {\n const loadState = this.services.backendConnector.state[`${l}|${n}`];\n return loadState === -1 || loadState === 0 || loadState === 2;\n };\n if (options.precheck) {\n const preResult = options.precheck(this, loadNotPending);\n if (preResult !== undefined) return preResult;\n }\n if (this.hasResourceBundle(lng, ns)) return true;\n if (!this.services.backendConnector.backend || this.options.resources && !this.options.partialBundledLanguages) return true;\n if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n return false;\n }\n loadNamespaces(ns, callback) {\n const deferred = defer();\n if (!this.options.ns) {\n if (callback) callback();\n return Promise.resolve();\n }\n if (isString(ns)) ns = [ns];\n ns.forEach(n => {\n if (this.options.ns.indexOf(n) < 0) this.options.ns.push(n);\n });\n this.loadResources(err => {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n loadLanguages(lngs, callback) {\n const deferred = defer();\n if (isString(lngs)) lngs = [lngs];\n const preloaded = this.options.preload || [];\n const newLngs = lngs.filter(lng => preloaded.indexOf(lng) < 0 && this.services.languageUtils.isSupportedCode(lng));\n if (!newLngs.length) {\n if (callback) callback();\n return Promise.resolve();\n }\n this.options.preload = preloaded.concat(newLngs);\n this.loadResources(err => {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n dir(lng) {\n if (!lng) lng = this.resolvedLanguage || (this.languages && this.languages.length > 0 ? this.languages[0] : this.language);\n if (!lng) return 'rtl';\n const rtlLngs = ['ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ug', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam', 'ckb'];\n const languageUtils = this.services && this.services.languageUtils || new LanguageUtil(get());\n return rtlLngs.indexOf(languageUtils.getLanguagePartFromCode(lng)) > -1 || lng.toLowerCase().indexOf('-arab') > 1 ? 'rtl' : 'ltr';\n }\n static createInstance() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let callback = arguments.length > 1 ? arguments[1] : undefined;\n return new I18n(options, callback);\n }\n cloneInstance() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n const forkResourceStore = options.forkResourceStore;\n if (forkResourceStore) delete options.forkResourceStore;\n const mergedOptions = {\n ...this.options,\n ...options,\n ...{\n isClone: true\n }\n };\n const clone = new I18n(mergedOptions);\n if (options.debug !== undefined || options.prefix !== undefined) {\n clone.logger = clone.logger.clone(options);\n }\n const membersToCopy = ['store', 'services', 'language'];\n membersToCopy.forEach(m => {\n clone[m] = this[m];\n });\n clone.services = {\n ...this.services\n };\n clone.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n if (forkResourceStore) {\n clone.store = new ResourceStore(this.store.data, mergedOptions);\n clone.services.resourceStore = clone.store;\n }\n clone.translator = new Translator(clone.services, mergedOptions);\n clone.translator.on('*', function (event) {\n for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n clone.emit(event, ...args);\n });\n clone.init(mergedOptions, callback);\n clone.translator.options = mergedOptions;\n clone.translator.backendConnector.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n return clone;\n }\n toJSON() {\n return {\n options: this.options,\n store: this.store,\n language: this.language,\n languages: this.languages,\n resolvedLanguage: this.resolvedLanguage\n };\n }\n}\nconst instance = I18n.createInstance();\ninstance.createInstance = I18n.createInstance;\n\nconst createInstance = instance.createInstance;\nconst dir = instance.dir;\nconst init = instance.init;\nconst loadResources = instance.loadResources;\nconst reloadResources = instance.reloadResources;\nconst use = instance.use;\nconst changeLanguage = instance.changeLanguage;\nconst getFixedT = instance.getFixedT;\nconst t = instance.t;\nconst exists = instance.exists;\nconst setDefaultNamespace = instance.setDefaultNamespace;\nconst hasLoadedNamespace = instance.hasLoadedNamespace;\nconst loadNamespaces = instance.loadNamespaces;\nconst loadLanguages = instance.loadLanguages;\n\nexport { changeLanguage, createInstance, instance as default, dir, exists, getFixedT, hasLoadedNamespace, init, loadLanguages, loadNamespaces, loadResources, reloadResources, setDefaultNamespace, t, use };\n","import i18next from 'i18next';\n\n/**\n * Type for app-specific i18n resources.\n * Supports arbitrary nesting of translation keys and objects.\n * Each key is a language code (e.g., 'en', 'zh'), and the value is an object of translation key-value pairs.\n */\nexport type AppI18nResources = Record<string, Record<string, unknown>>;\n\n/**\n * Factory function to create an isolated i18next instance for an app.\n * This allows apps to have their own translations independent of the global nc-ui i18n system.\n *\n * Features:\n * - Creates isolated i18next instance using createInstance()\n * - Syncs language with document.documentElement.lang\n * - Falls back to English for unsupported languages\n * - Supports string interpolation like {{variableName}}\n *\n * @param resources - Translation resources object with language keys (en, zh, de, th, es, etc.)\n * @returns Initialized i18next instance ready for use with I18nextProvider\n *\n * @example\n * ```typescript\n * const resources = {\n * en: { hello: 'Hello', greeting: 'Hello {{name}}' },\n * zh: { hello: '你好', greeting: '你好 {{name}}' },\n * };\n * const appI18n = createAppI18nFactory(resources);\n * \n * // Use with react-i18next:\n * <I18nextProvider i18n={appI18n}>\n * <YourApp />\n * </I18nextProvider>\n * ```\n */\nexport function createAppI18nFactory(resources: AppI18nResources) {\n // Create isolated instance (not the global singleton)\n const instance = i18next.createInstance();\n\n // Wrap resources in translation namespace structure\n const wrappedResources: Record<string, { translation: Record<string, unknown> }> = {};\n for (const lang in resources) {\n wrappedResources[lang] = { translation: resources[lang] };\n }\n\n // Get initial language from document or fallback\n const initialLang = typeof document !== 'undefined'\n ? document.documentElement.lang || 'en'\n : 'en';\n\n // Initialize the instance\n instance.init({\n resources: wrappedResources,\n lng: initialLang,\n fallbackLng: 'en',\n interpolation: {\n escapeValue: false, // React already escapes by default\n },\n });\n\n // Watch for language changes on document.documentElement.lang\n if (typeof MutationObserver !== 'undefined' && typeof document !== 'undefined') {\n const observer = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'attributes' && mutation.attributeName === 'lang') {\n const newLang = document.documentElement.lang || 'en';\n instance.changeLanguage(newLang);\n }\n }\n });\n observer.observe(document.documentElement, { attributes: true });\n }\n\n return instance;\n}\n","import React from 'react';\n\n/**\n * Definition of an application that can be launched in the right toolbar.\n * App components can use the useApp() hook to access container controls.\n */\nexport interface AppDefinition {\n /** Unique identifier for the app */\n id: string;\n /** i18n key for the display title (e.g., 'apps.calculator' or 'apps.maps.name') */\n titleKey?: string;\n /** Icon component displayed in the toolbar */\n icon: React.ComponentType<{ size?: number; className?: string }>;\n /** The main component to render. Use useApp() hook inside to access container controls. */\n component: React.ComponentType;\n /** Panel width when the app is active (default: 400) */\n width?: number;\n /** Padding inside the app container (default: 0) */\n padding?: number;\n /** If true, hides the title bar and close button. The app cannot be closed once launched. */\n hideTitleBar?: boolean;\n}\n\n/**\n * Registry for all available applications.\n * Apps must be registered before they can be launched.\n */\nclass AppRegistry {\n private apps = new Map<string, AppDefinition>();\n\n /**\n * Register an app definition.\n * Applies default values (e.g., width: 400) if not specified.\n */\n register(app: AppDefinition): void {\n if (this.apps.has(app.id)) {\n console.warn(`App \"${app.id}\" is already registered. Overwriting.`);\n }\n\n this.apps.set(app.id, {\n ...app,\n width: app.width ?? 400,\n padding: app.padding ?? 0,\n });\n }\n\n /**\n * Unregister an app by its id.\n */\n unregister(id: string): void {\n this.apps.delete(id);\n }\n\n /**\n * Get an app definition by id.\n */\n get(id: string): AppDefinition | undefined {\n return this.apps.get(id);\n }\n\n /**\n * Get all registered apps.\n */\n list(): AppDefinition[] {\n return Array.from(this.apps.values());\n }\n\n /**\n * Check if an app is registered.\n */\n has(id: string): boolean {\n return this.apps.has(id);\n }\n}\n\nexport const appRegistry = new AppRegistry();\n","/**\n * Simple store for persisting app state (like active app ID) across sessions.\n * Uses localStorage for persistence.\n */\n\ntype Listener<T> = (value: T) => void;\n\nconst STORAGE_KEY = 'nc-ui-app-state';\n\ninterface AppState {\n activeAppId: string | null;\n}\n\nclass AppStateStore {\n private state: AppState;\n private listeners = new Map<keyof AppState, Set<Listener<any>>>();\n\n constructor() {\n // Load persisted state\n this.state = this.loadState();\n }\n\n private loadState(): AppState {\n try {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n return JSON.parse(stored);\n }\n } catch (e) {\n // ignore parse errors\n }\n return { activeAppId: null };\n }\n\n private saveState(): void {\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(this.state));\n } catch (e) {\n // ignore storage errors\n }\n }\n\n /**\n * Get the currently active app ID.\n */\n getActiveAppId(): string | null {\n return this.state.activeAppId;\n }\n\n /**\n * Set the active app ID (internal use by runningAppsStore).\n */\n _setActiveAppId(appId: string | null): void {\n if (this.state.activeAppId !== appId) {\n this.state.activeAppId = appId;\n this.saveState();\n this.notify('activeAppId', appId);\n }\n }\n\n /**\n * Subscribe to changes of a specific state key.\n */\n subscribe<K extends keyof AppState>(key: K, listener: Listener<AppState[K]>): () => void {\n if (!this.listeners.has(key)) {\n this.listeners.set(key, new Set());\n }\n this.listeners.get(key)!.add(listener);\n return () => {\n this.listeners.get(key)?.delete(listener);\n };\n }\n\n private notify<K extends keyof AppState>(key: K, value: AppState[K]): void {\n this.listeners.get(key)?.forEach((listener) => listener(value));\n }\n}\n\nexport const appStateStore = new AppStateStore();\n","/**\n * Registry for back button handlers.\n * Allows apps to register handlers that are called when the user presses back.\n * Handlers are called in priority order (higher priority first).\n */\n\ntype BackHandler = () => boolean; // Returns true if handled\n\ninterface RegisteredHandler {\n id: string;\n priority: number;\n handler: BackHandler;\n}\n\nclass BackHandlerRegistry {\n private handlers: RegisteredHandler[] = [];\n\n /**\n * Register a back handler.\n * @param id - Unique identifier for this handler\n * @param priority - Higher priority handlers are called first\n * @param handler - Function that returns true if it handled the back action\n * @returns Unsubscribe function\n */\n register(id: string, priority: number, handler: BackHandler): () => void {\n // Remove existing handler with same id\n this.handlers = this.handlers.filter((h) => h.id !== id);\n\n // Add new handler\n this.handlers.push({ id, priority, handler });\n\n // Sort by priority (descending)\n this.handlers.sort((a, b) => b.priority - a.priority);\n\n return () => {\n this.handlers = this.handlers.filter((h) => h.id !== id);\n };\n }\n\n /**\n * Trigger the back action.\n * Calls handlers in priority order until one returns true.\n * @returns true if a handler processed the back action\n */\n handleBack(): boolean {\n for (const { handler } of this.handlers) {\n if (handler()) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Unregister a handler by id.\n */\n unregister(id: string): void {\n this.handlers = this.handlers.filter((h) => h.id !== id);\n }\n}\n\nexport const backHandlerRegistry = new BackHandlerRegistry();\n\n/**\n * Push a browser history entry for the app.\n * This enables the browser back button to close/navigate apps.\n */\nexport function setAppInUrl(appId: string): void {\n if (typeof window !== 'undefined' && window.history) {\n const url = new URL(window.location.href);\n url.searchParams.set('app', appId);\n window.history.pushState({ app: appId }, '', url.toString());\n }\n}\n\n/**\n * Clear the app from the URL when closing.\n */\nexport function clearAppInUrl(): void {\n if (typeof window !== 'undefined' && window.history) {\n const url = new URL(window.location.href);\n url.searchParams.delete('app');\n window.history.replaceState({}, '', url.toString());\n }\n}\n","import { appRegistry, AppDefinition } from './appRegistry';\nimport { appStateStore } from '../stores/appStateStore';\nimport { setAppInUrl, clearAppInUrl } from '../utils/backHandlerRegistry';\n\n/**\n * Options for launching an app.\n */\nexport interface LaunchAppOptions {\n /** If true, the app will be launched but not made active. Default: false */\n launchInBackground?: boolean;\n}\n\n/**\n * Represents a running app instance.\n * @template TRef - The type of the ref object exposed by the app\n */\nexport interface RunningApp<TRef = Record<string, unknown>> {\n /** The app definition id */\n appId: string;\n /** Timestamp when the app was launched */\n launchedAt: number;\n /** Reference object populated by the app component with methods/state */\n ref?: TRef;\n}\n\ntype Listener = () => void;\ntype RefReadyResolver = (app: RunningApp) => void;\n\n/**\n * Store for managing running applications.\n * Only one instance of each app is allowed.\n * Apps are not persisted across page refreshes.\n */\nclass RunningAppsStore {\n private apps: RunningApp[] = [];\n private activeAppId: string | null = null;\n private listeners = new Set<Listener>();\n private refReadyResolvers = new Map<string, RefReadyResolver[]>();\n\n /**\n * Launch an app and wait for it to be ready (ref populated).\n * If already running, activates it (unless launchInBackground is true) and returns the existing app.\n * @template TRef - The type of the ref object exposed by the app (optional, for type safety)\n * @param appId - The app id to launch\n * @param options - Launch options\n * @returns Promise that resolves with the RunningApp when ref is ready, or null if app not found\n */\n async launchApp<TRef = Record<string, unknown>>(\n appId: string,\n options?: LaunchAppOptions\n ): Promise<RunningApp<TRef> | null> {\n const { launchInBackground = false } = options || {};\n\n // Check if app is registered\n if (!appRegistry.has(appId)) {\n console.error(`Cannot launch app \"${appId}\": not registered`);\n return null;\n }\n\n // Check if already running with ref ready\n const existing = this.apps.find((a) => a.appId === appId);\n if (existing) {\n if (!launchInBackground) {\n this.setActiveApp(appId);\n appStateStore._setActiveAppId(appId);\n }\n if (existing.ref) {\n return existing as RunningApp<TRef>;\n }\n // Wait for ref to be ready\n return this.waitForRef(appId) as Promise<RunningApp<TRef>>;\n }\n\n // Launch new instance\n const runningApp: RunningApp = {\n appId,\n launchedAt: Date.now(),\n };\n this.apps.push(runningApp);\n\n if (!launchInBackground) {\n this.activeAppId = appId;\n appStateStore._setActiveAppId(appId);\n setAppInUrl(appId); // Push browser history entry with unique URL\n }\n\n this.notify();\n\n // Wait for ref to be ready\n return this.waitForRef(appId) as Promise<RunningApp<TRef>>;\n }\n\n private waitForRef(appId: string): Promise<RunningApp> {\n return new Promise((resolve) => {\n const resolvers = this.refReadyResolvers.get(appId) || [];\n resolvers.push(resolve);\n this.refReadyResolvers.set(appId, resolvers);\n });\n }\n\n /**\n * Called by app components to register their ref.\n * This resolves any pending launchApp promises.\n */\n setAppRef(appId: string, ref: Record<string, any>): void {\n const app = this.apps.find((a) => a.appId === appId);\n if (!app) {\n console.warn(`Cannot set ref for app \"${appId}\": not running`);\n return;\n }\n app.ref = ref;\n\n // Resolve any pending promises\n const resolvers = this.refReadyResolvers.get(appId);\n if (resolvers) {\n resolvers.forEach((resolve) => resolve(app));\n this.refReadyResolvers.delete(appId);\n }\n }\n\n /**\n * Get a running app by id.\n */\n getApp(appId: string): RunningApp | undefined {\n return this.apps.find((a) => a.appId === appId);\n }\n\n /**\n * Close a running app.\n */\n closeApp(appId: string): void {\n const index = this.apps.findIndex((a) => a.appId === appId);\n if (index === -1) return;\n\n // Clear ref before removing\n const app = this.apps[index];\n if (app.ref) {\n app.ref = undefined;\n }\n\n this.apps.splice(index, 1);\n\n // If the closed app was active, clear active state\n if (this.activeAppId === appId) {\n // On desktop (width >= 768px), go to last app; on mobile, set to null\n const isDesktop = window.innerWidth >= 768;\n this.activeAppId = isDesktop && this.apps.length > 0 ? this.apps[this.apps.length - 1].appId : null;\n appStateStore._setActiveAppId(this.activeAppId);\n // Update URL when app is closed\n if (this.activeAppId) {\n setAppInUrl(this.activeAppId);\n } else {\n clearAppInUrl();\n }\n }\n this.notify();\n }\n\n /**\n * Set the active app by its app id.\n */\n setActiveApp(appId: string | null): void {\n if (appId !== null && !this.apps.find((a) => a.appId === appId)) {\n console.warn(`Cannot activate app \"${appId}\": not running`);\n return;\n }\n if (this.activeAppId !== appId) {\n this.activeAppId = appId;\n this.notify();\n appStateStore._setActiveAppId(appId);\n }\n }\n\n /**\n * Toggle an app: if active, deactivate; if inactive, activate.\n */\n toggleApp(appId: string): void {\n if (this.activeAppId === appId) {\n this.setActiveApp(null);\n } else {\n this.launchApp(appId);\n }\n }\n\n /**\n * Get the currently active app id.\n */\n getActiveAppId(): string | null {\n return this.activeAppId;\n }\n\n /**\n * Get the currently active app definition.\n */\n getActiveApp(): AppDefinition | null {\n if (!this.activeAppId) return null;\n return appRegistry.get(this.activeAppId) ?? null;\n }\n\n /**\n * Get all running apps.\n */\n getRunningApps(): RunningApp[] {\n return [...this.apps];\n }\n\n /**\n * Check if an app is running.\n */\n isRunning(appId: string): boolean {\n return this.apps.some((a) => a.appId === appId);\n }\n\n /**\n * Subscribe to changes.\n */\n subscribe(listener: Listener): () => void {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n private notify(): void {\n this.listeners.forEach((l) => l());\n }\n}\n\nexport const runningAppsStore = new RunningAppsStore();\n","import React, { createContext, useContext } from 'react';\n\n/**\n * Context value for app components.\n * Provides functions to control the app container from any nested component.\n */\nexport interface AppContextValue {\n /** Set the title bar text (should be already translated) */\n setTitle: (title: string) => void;\n /** Set a back button handler. When set, a back arrow appears in the title bar. */\n setBackHandler: (handler: () => void) => void;\n /** Clear the back button handler, hiding the back arrow. */\n clearBackHandler: () => void;\n /** Set toolbar content to render in the title bar (right-aligned, before close button) */\n setToolbar: (toolbar: React.ReactNode) => void;\n /** Clear the toolbar content */\n clearToolbar: () => void;\n /** Hide the back button temporarily (useful when in edit mode) */\n setHideBackButton: (hide: boolean) => void;\n /** Dynamically hide or show the title bar */\n setHideTitleBar: (hide: boolean) => void;\n /** Close the app */\n close: () => void;\n}\n\nexport const AppContext = createContext<AppContextValue | null>(null);\n\n/**\n * Hook to access app context from within an app.\n * Returns functions to control the app container (setTitle, close, etc.)\n * Can be called from any component nested inside an app.\n * @throws Error if used outside of an app component\n */\nexport function useApp(): AppContextValue {\n const ctx = useContext(AppContext);\n if (!ctx) {\n throw new Error('useApp must be used inside an App');\n }\n return ctx;\n}\n","export function warn() {\n if (console && console.warn) {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (isString(args[0])) args[0] = `react-i18next:: ${args[0]}`;\n console.warn(...args);\n }\n}\nconst alreadyWarned = {};\nexport function warnOnce() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n if (isString(args[0]) && alreadyWarned[args[0]]) return;\n if (isString(args[0])) alreadyWarned[args[0]] = new Date();\n warn(...args);\n}\nconst loadedClb = (i18n, cb) => () => {\n if (i18n.isInitialized) {\n cb();\n } else {\n const initialized = () => {\n setTimeout(() => {\n i18n.off('initialized', initialized);\n }, 0);\n cb();\n };\n i18n.on('initialized', initialized);\n }\n};\nexport const loadNamespaces = (i18n, ns, cb) => {\n i18n.loadNamespaces(ns, loadedClb(i18n, cb));\n};\nexport const loadLanguages = (i18n, lng, ns, cb) => {\n if (isString(ns)) ns = [ns];\n ns.forEach(n => {\n if (i18n.options.ns.indexOf(n) < 0) i18n.options.ns.push(n);\n });\n i18n.loadLanguages(lng, loadedClb(i18n, cb));\n};\nconst oldI18nextHasLoadedNamespace = function (ns, i18n) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n const lng = i18n.languages[0];\n const fallbackLng = i18n.options ? i18n.options.fallbackLng : false;\n const lastLng = i18n.languages[i18n.languages.length - 1];\n if (lng.toLowerCase() === 'cimode') return true;\n const loadNotPending = (l, n) => {\n const loadState = i18n.services.backendConnector.state[`${l}|${n}`];\n return loadState === -1 || loadState === 2;\n };\n if (options.bindI18n && options.bindI18n.indexOf('languageChanging') > -1 && i18n.services.backendConnector.backend && i18n.isLanguageChangingTo && !loadNotPending(i18n.isLanguageChangingTo, ns)) return false;\n if (i18n.hasResourceBundle(lng, ns)) return true;\n if (!i18n.services.backendConnector.backend || i18n.options.resources && !i18n.options.partialBundledLanguages) return true;\n if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n return false;\n};\nexport const hasLoadedNamespace = function (ns, i18n) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n if (!i18n.languages || !i18n.languages.length) {\n warnOnce('i18n.languages were undefined or empty', i18n.languages);\n return true;\n }\n const isNewerI18next = i18n.options.ignoreJSONStructure !== undefined;\n if (!isNewerI18next) {\n return oldI18nextHasLoadedNamespace(ns, i18n, options);\n }\n return i18n.hasLoadedNamespace(ns, {\n lng: options.lng,\n precheck: (i18nInstance, loadNotPending) => {\n if (options.bindI18n && options.bindI18n.indexOf('languageChanging') > -1 && i18nInstance.services.backendConnector.backend && i18nInstance.isLanguageChangingTo && !loadNotPending(i18nInstance.isLanguageChangingTo, ns)) return false;\n }\n });\n};\nexport const getDisplayName = Component => Component.displayName || Component.name || (isString(Component) && Component.length > 0 ? Component : 'Unknown');\nexport const isString = obj => typeof obj === 'string';\nexport const isObject = obj => typeof obj === 'object' && obj !== null;","const matchHtmlEntity = /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g;\nconst htmlEntities = {\n '&': '&',\n '&': '&',\n '<': '<',\n '<': '<',\n '>': '>',\n '>': '>',\n ''': \"'\",\n ''': \"'\",\n '"': '\"',\n '"': '\"',\n ' ': ' ',\n ' ': ' ',\n '©': '©',\n '©': '©',\n '®': '®',\n '®': '®',\n '…': '…',\n '…': '…',\n '/': '/',\n '/': '/'\n};\nconst unescapeHtmlEntity = m => htmlEntities[m];\nexport const unescape = text => text.replace(matchHtmlEntity, unescapeHtmlEntity);","import { unescape } from './unescape.js';\nlet defaultOptions = {\n bindI18n: 'languageChanged',\n bindI18nStore: '',\n transEmptyNodeValue: '',\n transSupportBasicHtmlNodes: true,\n transWrapTextNodes: '',\n transKeepBasicHtmlNodesFor: ['br', 'strong', 'i', 'p'],\n useSuspense: true,\n unescape\n};\nexport const setDefaults = function () {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n defaultOptions = {\n ...defaultOptions,\n ...options\n };\n};\nexport const getDefaults = () => defaultOptions;","let i18nInstance;\nexport const setI18n = instance => {\n i18nInstance = instance;\n};\nexport const getI18n = () => i18nInstance;","import { createContext } from 'react';\nimport { getDefaults, setDefaults } from './defaults.js';\nimport { getI18n, setI18n } from './i18nInstance.js';\nimport { initReactI18next } from './initReactI18next.js';\nexport { getDefaults, setDefaults, getI18n, setI18n, initReactI18next };\nexport const I18nContext = createContext();\nexport class ReportNamespaces {\n constructor() {\n this.usedNamespaces = {};\n }\n addUsedNamespaces(namespaces) {\n namespaces.forEach(ns => {\n if (!this.usedNamespaces[ns]) this.usedNamespaces[ns] = true;\n });\n }\n getUsedNamespaces = () => Object.keys(this.usedNamespaces);\n}\nexport const composeInitialProps = ForComponent => async ctx => {\n const componentsInitialProps = ForComponent.getInitialProps ? await ForComponent.getInitialProps(ctx) : {};\n const i18nInitialProps = getInitialProps();\n return {\n ...componentsInitialProps,\n ...i18nInitialProps\n };\n};\nexport const getInitialProps = () => {\n const i18n = getI18n();\n const namespaces = i18n.reportNamespaces ? i18n.reportNamespaces.getUsedNamespaces() : [];\n const ret = {};\n const initialI18nStore = {};\n i18n.languages.forEach(l => {\n initialI18nStore[l] = {};\n namespaces.forEach(ns => {\n initialI18nStore[l][ns] = i18n.getResourceBundle(l, ns) || {};\n });\n });\n ret.initialI18nStore = initialI18nStore;\n ret.initialLanguage = i18n.language;\n return ret;\n};","import { useState, useEffect, useContext, useRef, useCallback } from 'react';\nimport { getI18n, getDefaults, ReportNamespaces, I18nContext } from './context.js';\nimport { warnOnce, loadNamespaces, loadLanguages, hasLoadedNamespace, isString, isObject } from './utils.js';\nconst usePrevious = (value, ignore) => {\n const ref = useRef();\n useEffect(() => {\n ref.current = ignore ? ref.current : value;\n }, [value, ignore]);\n return ref.current;\n};\nconst alwaysNewT = (i18n, language, namespace, keyPrefix) => i18n.getFixedT(language, namespace, keyPrefix);\nconst useMemoizedT = (i18n, language, namespace, keyPrefix) => useCallback(alwaysNewT(i18n, language, namespace, keyPrefix), [i18n, language, namespace, keyPrefix]);\nexport const useTranslation = function (ns) {\n let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const {\n i18n: i18nFromProps\n } = props;\n const {\n i18n: i18nFromContext,\n defaultNS: defaultNSFromContext\n } = useContext(I18nContext) || {};\n const i18n = i18nFromProps || i18nFromContext || getI18n();\n if (i18n && !i18n.reportNamespaces) i18n.reportNamespaces = new ReportNamespaces();\n if (!i18n) {\n warnOnce('You will need to pass in an i18next instance by using initReactI18next');\n const notReadyT = (k, optsOrDefaultValue) => {\n if (isString(optsOrDefaultValue)) return optsOrDefaultValue;\n if (isObject(optsOrDefaultValue) && isString(optsOrDefaultValue.defaultValue)) return optsOrDefaultValue.defaultValue;\n return Array.isArray(k) ? k[k.length - 1] : k;\n };\n const retNotReady = [notReadyT, {}, false];\n retNotReady.t = notReadyT;\n retNotReady.i18n = {};\n retNotReady.ready = false;\n return retNotReady;\n }\n if (i18n.options.react && i18n.options.react.wait !== undefined) warnOnce('It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.');\n const i18nOptions = {\n ...getDefaults(),\n ...i18n.options.react,\n ...props\n };\n const {\n useSuspense,\n keyPrefix\n } = i18nOptions;\n let namespaces = ns || defaultNSFromContext || i18n.options && i18n.options.defaultNS;\n namespaces = isString(namespaces) ? [namespaces] : namespaces || ['translation'];\n if (i18n.reportNamespaces.addUsedNamespaces) i18n.reportNamespaces.addUsedNamespaces(namespaces);\n const ready = (i18n.isInitialized || i18n.initializedStoreOnce) && namespaces.every(n => hasLoadedNamespace(n, i18n, i18nOptions));\n const memoGetT = useMemoizedT(i18n, props.lng || null, i18nOptions.nsMode === 'fallback' ? namespaces : namespaces[0], keyPrefix);\n const getT = () => memoGetT;\n const getNewT = () => alwaysNewT(i18n, props.lng || null, i18nOptions.nsMode === 'fallback' ? namespaces : namespaces[0], keyPrefix);\n const [t, setT] = useState(getT);\n let joinedNS = namespaces.join();\n if (props.lng) joinedNS = `${props.lng}${joinedNS}`;\n const previousJoinedNS = usePrevious(joinedNS);\n const isMounted = useRef(true);\n useEffect(() => {\n const {\n bindI18n,\n bindI18nStore\n } = i18nOptions;\n isMounted.current = true;\n if (!ready && !useSuspense) {\n if (props.lng) {\n loadLanguages(i18n, props.lng, namespaces, () => {\n if (isMounted.current) setT(getNewT);\n });\n } else {\n loadNamespaces(i18n, namespaces, () => {\n if (isMounted.current) setT(getNewT);\n });\n }\n }\n if (ready && previousJoinedNS && previousJoinedNS !== joinedNS && isMounted.current) {\n setT(getNewT);\n }\n const boundReset = () => {\n if (isMounted.current) setT(getNewT);\n };\n if (bindI18n && i18n) i18n.on(bindI18n, boundReset);\n if (bindI18nStore && i18n) i18n.store.on(bindI18nStore, boundReset);\n return () => {\n isMounted.current = false;\n if (bindI18n && i18n) bindI18n.split(' ').forEach(e => i18n.off(e, boundReset));\n if (bindI18nStore && i18n) bindI18nStore.split(' ').forEach(e => i18n.store.off(e, boundReset));\n };\n }, [i18n, joinedNS]);\n useEffect(() => {\n if (isMounted.current && ready) {\n setT(getT);\n }\n }, [i18n, keyPrefix, ready]);\n const ret = [t, i18n, ready];\n ret.t = t;\n ret.i18n = i18n;\n ret.ready = ready;\n if (ready) return ret;\n if (!ready && !useSuspense) return ret;\n throw new Promise(resolve => {\n if (props.lng) {\n loadLanguages(i18n, props.lng, namespaces, () => resolve());\n } else {\n loadNamespaces(i18n, namespaces, () => resolve());\n }\n });\n};","import React from 'react';\nimport { CloseButton } from '../CommonButtons';\n\ninterface AppTitleBarProps {\n title: string;\n onClose: () => void;\n /** If provided, shows a back arrow button on the left */\n onBack?: () => void;\n /** Optional toolbar content to render on the right side (before close button) */\n toolbar?: React.ReactNode;\n /** Whether to hide the back button even when onBack is provided (useful for edit mode) */\n hideBackButton?: boolean;\n}\n\n/**\n * Back arrow icon for navigation\n */\nfunction BackArrowIcon({ size = 16 }: { size?: number }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M19 12H5\" />\n <path d=\"M12 19l-7-7 7-7\" />\n </svg>\n );\n}\n\n/**\n * Title bar component for launched applications.\n * Displays the app title, optional back button, optional toolbar, and a close button.\n */\nexport function AppTitleBar({ title, onClose, onBack, toolbar, hideBackButton }: AppTitleBarProps) {\n const showBackButton = onBack && !hideBackButton;\n\n return (\n <div className=\"nc-app-title-bar\">\n <div className=\"nc-app-title-bar-left\">\n {showBackButton && (\n <button\n className=\"nc-app-title-bar-back\"\n onClick={onBack}\n title=\"Back\"\n aria-label=\"Go back\"\n >\n <BackArrowIcon size={16} />\n </button>\n )}\n <span className=\"nc-app-title-bar-title\">{title}</span>\n </div>\n <div className=\"nc-app-title-bar-right\">\n {toolbar && <div className=\"nc-app-title-bar-toolbar\">{toolbar}</div>}\n <CloseButton onClick={onClose} aria-label=\"Close application\" />\n </div>\n </div>\n );\n}\n","import React, { useState, useCallback, useMemo, useEffect, Suspense } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { appRegistry } from '../../lib/appRegistry';\nimport { AppContext, AppContextValue } from './AppContext';\nimport { AppTitleBar } from './AppTitleBar';\nimport { backHandlerRegistry } from '../../utils/backHandlerRegistry';\nimport { ActivityIndicator } from '../ActivityIndicator';\n\ninterface AppContainerProps {\n /** The app ID to render */\n appId: string;\n /** Whether this app is currently active (visible) */\n isActive: boolean;\n /** Called when the close button is clicked */\n onClose: () => void;\n}\n\ninterface AppErrorState {\n hasError: boolean;\n error?: Error;\n}\n\n/**\n * Error boundary for app loading failures.\n */\nclass AppErrorBoundary extends React.Component<\n { children: React.ReactNode; appId: string },\n AppErrorState\n> {\n constructor(props: { children: React.ReactNode; appId: string }) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError(error: Error): AppErrorState {\n return { hasError: true, error };\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {\n console.error(`Error loading app ${this.props.appId}:`, error, errorInfo);\n }\n\n render() {\n if (this.state.hasError) {\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flex: 1,\n flexDirection: 'column',\n gap: '16px',\n padding: '20px',\n textAlign: 'center',\n color: 'var(--text-secondary)',\n }}\n >\n <div>Failed to load app</div>\n {this.state.error && (\n <div style={{ fontSize: '12px', opacity: 0.7 }}>\n {this.state.error.message}\n </div>\n )}\n </div>\n );\n }\n return this.props.children;\n }\n}\n\n/**\n * Container component that wraps an app with its title bar.\n * Provides AppContext to the app component, allowing any nested\n * component to control the title bar dynamically via useApp() hook.\n */\nexport function AppContainer({ appId, isActive, onClose }: AppContainerProps) {\n const { t } = useTranslation();\n const def = appRegistry.get(appId);\n\n // Dynamic title state - initialized from app definition\n const [title, setTitleState] = useState<string>('');\n const [backHandler, setBackHandlerState] = useState<(() => void) | null>(null);\n const [toolbar, setToolbarState] = useState<React.ReactNode>(null);\n const [hideBackButton, setHideBackButtonState] = useState<boolean>(false);\n const [hideTitleBar, setHideTitleBarState] = useState<boolean>(false);\n\n // Initialize title from definition when it changes\n React.useEffect(() => {\n if (def?.titleKey) {\n setTitleState(t(def.titleKey));\n }\n }, [def, t]);\n\n // Register back handler when app is active (priority 50)\n useEffect(() => {\n if (!isActive) return;\n\n return backHandlerRegistry.register(`app-${appId}`, 50, () => {\n if (backHandler) {\n // Has back handler = can go back in NavStack\n backHandler();\n return true;\n }\n // No back handler = at app root, close the app\n onClose();\n return true;\n });\n }, [isActive, backHandler, onClose, appId]);\n\n // Memoized callbacks for app component\n const setTitle = useCallback((newTitle: string) => {\n setTitleState(newTitle);\n }, []);\n\n const setBackHandler = useCallback((handler: () => void) => {\n setBackHandlerState(() => handler);\n }, []);\n\n const clearBackHandler = useCallback(() => {\n setBackHandlerState(null);\n }, []);\n\n const setToolbar = useCallback((newToolbar: React.ReactNode) => {\n setToolbarState(newToolbar);\n }, []);\n\n const clearToolbar = useCallback(() => {\n setToolbarState(null);\n }, []);\n\n const setHideBackButton = useCallback((hide: boolean) => {\n setHideBackButtonState(hide);\n }, []);\n\n const setHideTitleBar = useCallback((hide: boolean) => {\n setHideTitleBarState(hide);\n }, []);\n\n // Memoize context value to prevent unnecessary re-renders\n const appContextValue: AppContextValue = useMemo(() => ({\n setTitle,\n setBackHandler,\n clearBackHandler,\n setToolbar,\n clearToolbar,\n setHideBackButton,\n setHideTitleBar,\n close: onClose,\n }), [setTitle, setBackHandler, clearBackHandler, setToolbar, clearToolbar, setHideBackButton, setHideTitleBar, onClose]);\n\n if (!def) {\n return null;\n }\n\n const AppComp = def.component;\n // Title bar is shown if both the static definition allows it AND it's not dynamically hidden\n const showTitleBar = !def.hideTitleBar && !hideTitleBar;\n\n return (\n <div\n style={{\n display: isActive ? 'flex' : 'none',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n }}\n >\n {showTitleBar && (\n <AppTitleBar\n title={title}\n onClose={onClose}\n onBack={backHandler ?? undefined}\n toolbar={toolbar}\n hideBackButton={hideBackButton}\n />\n )}\n <div\n className={showTitleBar ? 'nc-app-content-wrapper' : ''}\n style={{\n padding: def.padding,\n flex: 1,\n minHeight: 0,\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: 'var(--nc-bg)',\n position: 'relative',\n }}\n >\n <AppContext.Provider value={appContextValue}>\n <AppErrorBoundary appId={appId}>\n <Suspense\n fallback={\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flex: 1,\n }}\n >\n <ActivityIndicator />\n </div>\n }\n >\n <AppComp />\n </Suspense>\n </AppErrorBoundary>\n </AppContext.Provider>\n </div>\n </div>\n );\n}\n","import { createContext, useContext, useState, useEffect, ReactNode } from 'react';\n\n/**\n * Viewport context value providing responsive breakpoint information.\n */\nexport interface ViewportContextValue {\n /** True if viewport width < 768px */\n isMobile: boolean;\n /** True if viewport width >= 768px and < 1024px */\n isTablet: boolean;\n /** True if viewport width >= 1024px */\n isDesktop: boolean;\n /** Current viewport width in pixels */\n width: number;\n /** Current viewport height in pixels */\n height: number;\n}\n\nconst MOBILE_BREAKPOINT = 768;\nconst TABLET_BREAKPOINT = 1024;\n\nconst defaultValue: ViewportContextValue = {\n isMobile: false,\n isTablet: false,\n isDesktop: true,\n width: typeof window !== 'undefined' ? window.innerWidth : 1024,\n height: typeof window !== 'undefined' ? window.innerHeight : 768,\n};\n\nconst ViewportContext = createContext<ViewportContextValue>(defaultValue);\n\n/**\n * Provider component that tracks viewport size and provides responsive breakpoints.\n */\nexport function ViewportProvider({ children }: { children: ReactNode }) {\n const [viewport, setViewport] = useState<ViewportContextValue>(() => {\n if (typeof window === 'undefined') return defaultValue;\n\n const width = window.innerWidth;\n const height = window.innerHeight;\n return {\n isMobile: width < MOBILE_BREAKPOINT,\n isTablet: width >= MOBILE_BREAKPOINT && width < TABLET_BREAKPOINT,\n isDesktop: width >= TABLET_BREAKPOINT,\n width,\n height,\n };\n });\n\n useEffect(() => {\n const handleResize = () => {\n const width = window.innerWidth;\n const height = window.innerHeight;\n setViewport({\n isMobile: width < MOBILE_BREAKPOINT,\n isTablet: width >= MOBILE_BREAKPOINT && width < TABLET_BREAKPOINT,\n isDesktop: width >= TABLET_BREAKPOINT,\n width,\n height,\n });\n };\n\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n return (\n <ViewportContext.Provider value={viewport}>\n {children}\n </ViewportContext.Provider>\n );\n}\n\n/**\n * Hook to access viewport information.\n */\nexport function useViewport(): ViewportContextValue {\n return useContext(ViewportContext);\n}\n","import React, { useState, useEffect } from 'react';\nimport { appStateStore } from '../../stores/appStateStore';\nimport { runningAppsStore, RunningApp } from '../../lib/runningAppsStore';\nimport { appRegistry } from '../../lib/appRegistry';\nimport { AppContainer } from './AppContainer';\nimport { useViewport } from '../../contexts/ViewportContext';\n\n/**\n * AppPanel component - Renders the right-side panel that displays running apps.\n * Each running app is rendered via AppContainer, but only the active app is visible.\n * On mobile devices, the panel overlays on top of the main area.\n * On desktop, the panel sits inline next to the main area.\n */\nexport function AppPanel() {\n const { isMobile } = useViewport();\n const [activeAppId, setActiveAppId] = useState<string | null>(() => appStateStore.getActiveAppId());\n const [runningApps, setRunningApps] = useState<RunningApp[]>(() => runningAppsStore.getRunningApps());\n\n // Subscribe to appStateStore for active app\n useEffect(() => {\n const unsubActiveApp = appStateStore.subscribe('activeAppId', (appId) => {\n setActiveAppId(appId);\n });\n return () => {\n unsubActiveApp();\n };\n }, []);\n\n // Subscribe to runningAppsStore\n useEffect(() => {\n const unsub = runningAppsStore.subscribe(() => {\n setRunningApps(runningAppsStore.getRunningApps());\n });\n return unsub;\n }, []);\n\n // Launch the persisted active app on mount (if not already running)\n // Skip restoration if URL parameters are present (for deep linking)\n useEffect(() => {\n const params = new URLSearchParams(window.location.search);\n const hasAppParam = params.has('app');\n\n if (!hasAppParam) {\n const persistedAppId = appStateStore.getActiveAppId();\n if (persistedAppId && !runningAppsStore.isRunning(persistedAppId)) {\n runningAppsStore.launchApp(persistedAppId);\n }\n }\n }, []);\n\n const onCloseApp = (appId: string) => {\n runningAppsStore.closeApp(appId);\n };\n\n const activeAppDef = activeAppId ? appRegistry.get(activeAppId) : null;\n const defaultPanelWidth = 400;\n const fullPanelWidth = activeAppDef?.width ?? defaultPanelWidth;\n const expanded = activeAppId !== null;\n\n // Mobile: overlay on top, Desktop: inline positioning\n const panelStyle: React.CSSProperties = {\n overflow: 'hidden',\n width: expanded ? (isMobile ? '100%' : fullPanelWidth) : 0,\n flexShrink: 0,\n display: expanded ? 'flex' : 'none',\n flexDirection: 'column',\n position: isMobile && expanded ? 'absolute' : 'relative',\n top: isMobile && expanded ? 0 : undefined,\n left: isMobile && expanded ? 0 : undefined,\n right: isMobile && expanded ? 0 : undefined,\n bottom: isMobile && expanded ? 56 : undefined,\n zIndex: isMobile && expanded ? 10 : undefined,\n maxHeight: isMobile && expanded ? 'calc(100% - 56px)' : '100%',\n borderRight: expanded && !isMobile ? '1px solid var(--nc-border)' : undefined,\n };\n\n return (\n <div className=\"panel\" style={panelStyle}>\n {/* Render all running apps via AppContainer */}\n {runningApps.map((ra) => (\n <AppContainer\n key={ra.appId}\n appId={ra.appId}\n isActive={activeAppId === ra.appId}\n onClose={() => onCloseApp(ra.appId)}\n />\n ))}\n </div>\n );\n}\n","import { useState, useEffect } from 'react';\r\nimport { appStateStore } from '../../stores/appStateStore';\r\nimport { runningAppsStore, RunningApp } from '../../lib/runningAppsStore';\r\nimport { appRegistry, AppDefinition } from '../../lib/appRegistry';\r\nimport { useViewport } from '../../contexts/ViewportContext';\r\n\r\nexport interface AppTaskbarProps {\r\n /** Array of app IDs to pin to the taskbar (always visible) */\r\n pinnedAppIds: string[];\r\n /** Optional className for the taskbar container */\r\n className?: string;\r\n}\r\n\r\n/**\r\n * AppTaskbar component - A Windows 11-style taskbar for launching and switching apps.\r\n * Displays pinned app icons that are always visible, plus any running non-pinned apps.\r\n * Clicking an icon launches the app or toggles its active state if already running.\r\n */\r\nexport function AppTaskbar({ pinnedAppIds, className = '' }: AppTaskbarProps) {\r\n const { isMobile } = useViewport();\r\n const [activeAppId, setActiveAppId] = useState<string | null>(() => appStateStore.getActiveAppId());\r\n const [runningApps, setRunningApps] = useState<RunningApp[]>(() => runningAppsStore.getRunningApps());\r\n\r\n // Subscribe to appStateStore for active app\r\n useEffect(() => {\r\n const unsubActiveApp = appStateStore.subscribe('activeAppId', (appId) => {\r\n setActiveAppId(appId);\r\n });\r\n return () => {\r\n unsubActiveApp();\r\n };\r\n }, []);\r\n\r\n // Subscribe to runningAppsStore\r\n useEffect(() => {\r\n const unsub = runningAppsStore.subscribe(() => {\r\n setRunningApps(runningAppsStore.getRunningApps());\r\n });\r\n return unsub;\r\n }, []);\r\n\r\n const onClickApp = (appId: string) => {\r\n // If clicking on the active app, deactivate it\r\n if (activeAppId === appId) {\r\n runningAppsStore.setActiveApp(null);\r\n } else {\r\n runningAppsStore.launchApp(appId);\r\n }\r\n };\r\n\r\n // Get pinned app definitions\r\n const pinnedAppDefs = pinnedAppIds\r\n .map(id => appRegistry.get(id))\r\n .filter((def): def is AppDefinition => !!def);\r\n\r\n // Get non-pinned running app definitions (apps that are running but not pinned)\r\n const nonPinnedRunningAppDefs = runningApps\r\n .filter(ra => !pinnedAppIds.includes(ra.appId))\r\n .map(ra => ({ running: ra, def: appRegistry.get(ra.appId) }))\r\n .filter((item): item is { running: RunningApp; def: AppDefinition } => !!item.def);\r\n\r\n // Check if an app is running\r\n const isAppRunning = (appId: string) => runningApps.some(ra => ra.appId === appId);\r\n\r\n const iconSize = isMobile ? 24 : 28;\r\n\r\n return (\r\n <div className={`nc-app-taskbar ${isMobile ? 'nc-mobile' : 'nc-desktop'} ${className}`}>\r\n {/* Pinned app icons (always visible) */}\r\n {pinnedAppDefs.map((def) => {\r\n const Icon = def.icon;\r\n const isActive = activeAppId === def.id;\r\n const isRunning = isAppRunning(def.id);\r\n\r\n return (\r\n <button\r\n key={def.id}\r\n className={`nc-app-taskbar-button ${isActive ? 'nc-active' : ''} ${isRunning ? 'nc-running' : ''}`}\r\n onClick={() => onClickApp(def.id)}\r\n title={def.titleKey || def.id}\r\n >\r\n <Icon size={iconSize} />\r\n {isRunning && <span className=\"nc-app-taskbar-indicator\" />}\r\n </button>\r\n );\r\n })}\r\n\r\n {/* Separator between pinned and non-pinned running apps */}\r\n {nonPinnedRunningAppDefs.length > 0 && (\r\n <div className=\"nc-app-taskbar-separator\" />\r\n )}\r\n\r\n {/* Non-pinned running app icons */}\r\n {nonPinnedRunningAppDefs.map(({ running, def }) => {\r\n const Icon = def.icon;\r\n const isActive = activeAppId === running.appId;\r\n\r\n return (\r\n <button\r\n key={running.appId}\r\n className={`nc-app-taskbar-button ${isActive ? 'nc-active' : ''} nc-running`}\r\n onClick={() => onClickApp(running.appId)}\r\n title={def.titleKey || def.id}\r\n >\r\n <Icon size={iconSize} />\r\n <span className=\"nc-app-taskbar-indicator\" />\r\n </button>\r\n );\r\n })}\r\n </div>\r\n );\r\n}\r\n","import React, { useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { AppContainer } from './AppContainer';\nimport { backHandlerRegistry } from '../../utils/backHandlerRegistry';\n\nexport interface AppDialogProps {\n /** The app ID to render */\n appId: string;\n /** Whether the dialog is open */\n open: boolean;\n /** Called when the dialog should close */\n onClose: () => void;\n /** Whether clicking the backdrop closes the dialog (default: false) */\n closeOnBackdrop?: boolean;\n /** Optional CSS class name for the dialog container */\n className?: string;\n /** Maximum width in pixels (default: 1200) */\n maxWidth?: number;\n /** Maximum height in pixels (default: 900) */\n maxHeight?: number;\n}\n\n/**\n * Renders an app in a fullscreen portal overlay without using the Dialog component.\n * Uses AppContainer directly to preserve all app functionality (title bar, AppContext, back handlers).\n */\nexport function AppDialog({\n appId,\n open,\n onClose,\n closeOnBackdrop = false,\n className = '',\n maxWidth = 1200,\n maxHeight = 900,\n}: AppDialogProps) {\n // Handle backdrop click\n const handleBackdropClick = (e: React.MouseEvent) => {\n if (closeOnBackdrop && e.target === e.currentTarget) {\n onClose();\n }\n };\n\n // Register back handler when dialog is open (priority 100 - highest, same as Dialog)\n useEffect(() => {\n if (!open) return;\n\n const dialogId = `app-dialog-${appId}-${Date.now()}`;\n return backHandlerRegistry.register(dialogId, 100, () => {\n onClose();\n return true;\n });\n }, [open, onClose, appId]);\n\n if (!open) return null;\n\n const content = (\n <div\n className=\"nc-dialog-overlay nc-fullscreen\"\n onClick={handleBackdropClick}\n >\n <div\n className={`nc-app-dialog-container ${className}`}\n style={{\n maxWidth: `${maxWidth}px`,\n maxHeight: `${maxHeight}px`,\n }}\n onClick={(e) => e.stopPropagation()}\n >\n <AppContainer\n appId={appId}\n isActive={true}\n onClose={onClose}\n />\n </div>\n </div>\n );\n\n return createPortal(content, document.body);\n}\n","import React, { createContext, useContext, useState, useCallback, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useApp } from './app/AppContext';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface NavView {\n /** Unique identifier for the view */\n id: string;\n /** i18n key for the title (preferred - updates on language change) */\n titleKey?: string;\n /** Static title string (used when titleKey is not provided, e.g., for dynamic data like SSID) */\n title?: string;\n /** The view component to render */\n component: React.ReactNode;\n}\n\nexport interface NavStackContextValue {\n /** Push a new view onto the stack */\n push: (view: NavView) => void;\n /** Go back one level (pop the current view) */\n pop: () => void;\n /** Reset to root view (clear entire stack) */\n reset: () => void;\n /** Current stack depth (1 = root only) */\n depth: number;\n /** Whether back navigation is possible */\n canGoBack: boolean;\n /** Current view's title */\n currentTitle: string;\n}\n\n/**\n * Per-view context for toolbar management.\n * Each view gets its own setToolbar/clearToolbar that only affects its stack slot.\n */\nexport interface NavViewContextValue {\n /** Set toolbar for THIS view only */\n setToolbar: (toolbar: React.ReactNode) => void;\n /** Clear toolbar for THIS view */\n clearToolbar: () => void;\n}\n\ninterface NavStackProviderProps {\n /** The root view (always shown at the bottom of the stack) */\n rootView: NavView;\n /** Child components (typically NavStackContainer) */\n children: React.ReactNode;\n}\n\n// ============================================================================\n// Context\n// ============================================================================\n\nconst NavStackContext = createContext<NavStackContextValue | null>(null);\nconst NavViewContext = createContext<NavViewContextValue | null>(null);\n\n/**\n * Hook to access navigation stack controls.\n * Must be used within a NavStackProvider.\n */\nexport function useNavStack(): NavStackContextValue {\n const context = useContext(NavStackContext);\n if (!context) {\n throw new Error('useNavStack must be used within a NavStackProvider');\n }\n return context;\n}\n\n/**\n * Hook to access per-view toolbar controls.\n * Must be used within a NavStack view.\n */\nexport function useNavView(): NavViewContextValue {\n const context = useContext(NavViewContext);\n if (!context) {\n throw new Error('useNavView must be used within NavStack');\n }\n return context;\n}\n\n// ============================================================================\n// Internal Context for Provider Communication\n// ============================================================================\n\ninterface NavStackInternalValue {\n stack: NavView[];\n toolbarStack: (React.ReactNode | null)[];\n updateToolbar: (index: number, toolbar: React.ReactNode) => void;\n clearToolbarAt: (index: number) => void;\n topIndex: number;\n}\n\nconst NavStackInternalContext = createContext<NavStackInternalValue | null>(null);\n\n// ============================================================================\n// NavStackProvider\n// ============================================================================\n\n/**\n * Provides navigation stack context to child components.\n * Manages the view stack and exposes push/pop/reset operations.\n * Syncs title and back button with AppContainer via useApp() hook.\n * Also manages a parallel toolbar stack for stack-based toolbar management.\n */\nexport function NavStackProvider({ rootView, children }: NavStackProviderProps) {\n const { t } = useTranslation();\n const appContext = useApp();\n const [stack, setStack] = useState<NavView[]>([rootView]);\n const [toolbarStack, setToolbarStack] = useState<(React.ReactNode | null)[]>([null]);\n\n const updateToolbar = useCallback((index: number, toolbar: React.ReactNode) => {\n setToolbarStack((prev) => {\n const newStack = [...prev];\n newStack[index] = toolbar;\n return newStack;\n });\n }, []);\n\n const clearToolbarAt = useCallback((index: number) => {\n setToolbarStack((prev) => {\n const newStack = [...prev];\n newStack[index] = null;\n return newStack;\n });\n }, []);\n\n const push = useCallback((view: NavView) => {\n setStack((prev) => [...prev, view]);\n setToolbarStack((prev) => [...prev, null]); // New view starts with no toolbar\n }, []);\n\n const pop = useCallback(() => {\n setStack((prev) => {\n if (prev.length <= 1) return prev;\n return prev.slice(0, -1);\n });\n setToolbarStack((prev) => prev.slice(0, -1)); // Remove toolbar slot\n }, []);\n\n const reset = useCallback(() => {\n setStack([rootView]);\n setToolbarStack([null]);\n }, [rootView]);\n\n const depth = stack.length;\n const canGoBack = depth > 1;\n const topIndex = stack.length - 1;\n\n // Get current view and resolve title (titleKey takes precedence)\n const currentView = stack[stack.length - 1];\n const currentTitle = currentView?.titleKey\n ? t(currentView.titleKey)\n : (currentView?.title ?? '');\n\n // Sync with AppContainer title bar\n useEffect(() => {\n appContext.setTitle(currentTitle);\n }, [currentTitle, appContext]);\n\n // Sync back handler with AppContainer\n useEffect(() => {\n if (canGoBack) {\n appContext.setBackHandler(pop);\n } else {\n appContext.clearBackHandler();\n }\n }, [canGoBack, pop, appContext]);\n\n // Sync top toolbar to AppContainer\n useEffect(() => {\n const topToolbar = toolbarStack[toolbarStack.length - 1];\n if (topToolbar) {\n appContext.setToolbar(topToolbar);\n } else {\n appContext.clearToolbar();\n }\n }, [toolbarStack, appContext]);\n\n const contextValue: NavStackContextValue = {\n push,\n pop,\n reset,\n depth,\n canGoBack,\n currentTitle,\n };\n\n const internalValue: NavStackInternalValue = {\n stack,\n toolbarStack,\n updateToolbar,\n clearToolbarAt,\n topIndex,\n };\n\n return (\n <NavStackContext.Provider value={contextValue}>\n <NavStackInternalContext.Provider value={internalValue}>\n {children}\n </NavStackInternalContext.Provider>\n </NavStackContext.Provider>\n );\n}\n\n// ============================================================================\n// NavViewProvider (Wraps Each View)\n// ============================================================================\n\ninterface NavViewProviderProps {\n index: number;\n children: React.ReactNode;\n}\n\nfunction NavViewProvider({ index, children }: NavViewProviderProps) {\n const internalContext = useContext(NavStackInternalContext);\n\n if (!internalContext) {\n throw new Error('NavViewProvider must be used within NavStackProvider');\n }\n\n const { updateToolbar, clearToolbarAt, topIndex } = internalContext;\n\n // Only allow updates if this view is the active (top) view\n const setToolbar = useCallback((toolbar: React.ReactNode) => {\n if (index === topIndex) {\n updateToolbar(index, toolbar);\n }\n }, [index, topIndex, updateToolbar]);\n\n const clearToolbar = useCallback(() => {\n if (index === topIndex) {\n clearToolbarAt(index);\n }\n }, [index, topIndex, clearToolbarAt]);\n\n const contextValue: NavViewContextValue = {\n setToolbar,\n clearToolbar,\n };\n\n return (\n <NavViewContext.Provider value={contextValue}>\n {children}\n </NavViewContext.Provider>\n );\n}\n\n// ============================================================================\n// NavStackContainer\n// ============================================================================\n\n/**\n * Renders the views in the navigation stack.\n * All views in the stack remain mounted (hidden with CSS) to preserve state.\n * Title bar is now handled by AppContainer, so showTitleBar is removed.\n * Each view is wrapped with NavViewProvider for stack-based toolbar management.\n */\nexport function NavStackContainer() {\n const navContext = useContext(NavStackContext);\n const internalContext = useContext(NavStackInternalContext);\n\n if (!navContext || !internalContext) {\n throw new Error('NavStackContainer must be used within a NavStackProvider');\n }\n\n const { stack } = internalContext;\n\n return (\n <div className=\"nav-stack-container\">\n <div className=\"nav-stack-content\">\n {/* Render all views but only show the current one */}\n {stack.map((view, index) => {\n const isActive = index === stack.length - 1;\n return (\n <NavViewProvider key={view.id} index={index}>\n <div\n style={{ display: isActive ? 'flex' : 'none', flexDirection: 'column', height: '100%' }}\n >\n {view.component}\n </div>\n </NavViewProvider>\n );\n })}\n </div>\n </div>\n );\n}\n","const CLASS_PART_SEPARATOR = '-';\nconst createClassGroupUtils = config => {\n const classMap = createClassMap(config);\n const {\n conflictingClassGroups,\n conflictingClassGroupModifiers\n } = config;\n const getClassGroupId = className => {\n const classParts = className.split(CLASS_PART_SEPARATOR);\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.\n if (classParts[0] === '' && classParts.length !== 1) {\n classParts.shift();\n }\n return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className);\n };\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n const conflicts = conflictingClassGroups[classGroupId] || [];\n if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {\n return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]];\n }\n return conflicts;\n };\n return {\n getClassGroupId,\n getConflictingClassGroupIds\n };\n};\nconst getGroupRecursive = (classParts, classPartObject) => {\n if (classParts.length === 0) {\n return classPartObject.classGroupId;\n }\n const currentClassPart = classParts[0];\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n const classGroupFromNextClassPart = nextClassPartObject ? getGroupRecursive(classParts.slice(1), nextClassPartObject) : undefined;\n if (classGroupFromNextClassPart) {\n return classGroupFromNextClassPart;\n }\n if (classPartObject.validators.length === 0) {\n return undefined;\n }\n const classRest = classParts.join(CLASS_PART_SEPARATOR);\n return classPartObject.validators.find(({\n validator\n }) => validator(classRest))?.classGroupId;\n};\nconst arbitraryPropertyRegex = /^\\[(.+)\\]$/;\nconst getGroupIdForArbitraryProperty = className => {\n if (arbitraryPropertyRegex.test(className)) {\n const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)[1];\n const property = arbitraryPropertyClassName?.substring(0, arbitraryPropertyClassName.indexOf(':'));\n if (property) {\n // I use two dots here because one dot is used as prefix for class groups in plugins\n return 'arbitrary..' + property;\n }\n }\n};\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n const {\n theme,\n prefix\n } = config;\n const classMap = {\n nextPart: new Map(),\n validators: []\n };\n const prefixedClassGroupEntries = getPrefixedClassGroupEntries(Object.entries(config.classGroups), prefix);\n prefixedClassGroupEntries.forEach(([classGroupId, classGroup]) => {\n processClassesRecursively(classGroup, classMap, classGroupId, theme);\n });\n return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n classGroup.forEach(classDefinition => {\n if (typeof classDefinition === 'string') {\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n return;\n }\n if (typeof classDefinition === 'function') {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n classPartObject.validators.push({\n validator: classDefinition,\n classGroupId\n });\n return;\n }\n Object.entries(classDefinition).forEach(([key, classGroup]) => {\n processClassesRecursively(classGroup, getPart(classPartObject, key), classGroupId, theme);\n });\n });\n};\nconst getPart = (classPartObject, path) => {\n let currentClassPartObject = classPartObject;\n path.split(CLASS_PART_SEPARATOR).forEach(pathPart => {\n if (!currentClassPartObject.nextPart.has(pathPart)) {\n currentClassPartObject.nextPart.set(pathPart, {\n nextPart: new Map(),\n validators: []\n });\n }\n currentClassPartObject = currentClassPartObject.nextPart.get(pathPart);\n });\n return currentClassPartObject;\n};\nconst isThemeGetter = func => func.isThemeGetter;\nconst getPrefixedClassGroupEntries = (classGroupEntries, prefix) => {\n if (!prefix) {\n return classGroupEntries;\n }\n return classGroupEntries.map(([classGroupId, classGroup]) => {\n const prefixedClassGroup = classGroup.map(classDefinition => {\n if (typeof classDefinition === 'string') {\n return prefix + classDefinition;\n }\n if (typeof classDefinition === 'object') {\n return Object.fromEntries(Object.entries(classDefinition).map(([key, value]) => [prefix + key, value]));\n }\n return classDefinition;\n });\n return [classGroupId, prefixedClassGroup];\n });\n};\n\n// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance\nconst createLruCache = maxCacheSize => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {}\n };\n }\n let cacheSize = 0;\n let cache = new Map();\n let previousCache = new Map();\n const update = (key, value) => {\n cache.set(key, value);\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = new Map();\n }\n };\n return {\n get(key) {\n let value = cache.get(key);\n if (value !== undefined) {\n return value;\n }\n if ((value = previousCache.get(key)) !== undefined) {\n update(key, value);\n return value;\n }\n },\n set(key, value) {\n if (cache.has(key)) {\n cache.set(key, value);\n } else {\n update(key, value);\n }\n }\n };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst createParseClassName = config => {\n const {\n separator,\n experimentalParseClassName\n } = config;\n const isSeparatorSingleCharacter = separator.length === 1;\n const firstSeparatorCharacter = separator[0];\n const separatorLength = separator.length;\n // parseClassName inspired by https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n const parseClassName = className => {\n const modifiers = [];\n let bracketDepth = 0;\n let modifierStart = 0;\n let postfixModifierPosition;\n for (let index = 0; index < className.length; index++) {\n let currentCharacter = className[index];\n if (bracketDepth === 0) {\n if (currentCharacter === firstSeparatorCharacter && (isSeparatorSingleCharacter || className.slice(index, index + separatorLength) === separator)) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + separatorLength;\n continue;\n }\n if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') {\n bracketDepth++;\n } else if (currentCharacter === ']') {\n bracketDepth--;\n }\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart);\n const hasImportantModifier = baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER);\n const baseClassName = hasImportantModifier ? baseClassNameWithImportantModifier.substring(1) : baseClassNameWithImportantModifier;\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n };\n };\n if (experimentalParseClassName) {\n return className => experimentalParseClassName({\n className,\n parseClassName\n });\n }\n return parseClassName;\n};\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst sortModifiers = modifiers => {\n if (modifiers.length <= 1) {\n return modifiers;\n }\n const sortedModifiers = [];\n let unsortedModifiers = [];\n modifiers.forEach(modifier => {\n const isArbitraryVariant = modifier[0] === '[';\n if (isArbitraryVariant) {\n sortedModifiers.push(...unsortedModifiers.sort(), modifier);\n unsortedModifiers = [];\n } else {\n unsortedModifiers.push(modifier);\n }\n });\n sortedModifiers.push(...unsortedModifiers.sort());\n return sortedModifiers;\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n ...createClassGroupUtils(config)\n});\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n let hasPostfixModifier = Boolean(maybePostfixModifierPosition);\n let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n hasPostfixModifier = false;\n }\n const variantModifier = sortModifiers(modifiers).join(':');\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n const classId = modifierId + classGroupId;\n if (classGroupsInConflict.includes(classId)) {\n // Tailwind class omitted due to conflict\n continue;\n }\n classGroupsInConflict.push(classId);\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i];\n classGroupsInConflict.push(modifierId + group);\n }\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n }\n return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nfunction twJoin() {\n let index = 0;\n let argument;\n let resolvedValue;\n let string = '';\n while (index < arguments.length) {\n if (argument = arguments[index++]) {\n if (resolvedValue = toValue(argument)) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n}\nconst toValue = mix => {\n if (typeof mix === 'string') {\n return mix;\n }\n let resolvedValue;\n let string = '';\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nfunction createTailwindMerge(createConfigFirst, ...createConfigRest) {\n let configUtils;\n let cacheGet;\n let cacheSet;\n let functionToCall = initTailwindMerge;\n function initTailwindMerge(classList) {\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n }\n function tailwindMerge(classList) {\n const cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n const result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n }\n return function callTailwindMerge() {\n return functionToCall(twJoin.apply(null, arguments));\n };\n}\nconst fromTheme = key => {\n const themeGetter = theme => theme[key] || [];\n themeGetter.isThemeGetter = true;\n return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:([a-z-]+):)?(.+)\\]$/i;\nconst fractionRegex = /^\\d+\\/\\d+$/;\nconst stringLengths = /*#__PURE__*/new Set(['px', 'full', 'screen']);\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch))\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isLength = value => isNumber(value) || stringLengths.has(value) || fractionRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, 'length', isLengthOnly);\nconst isNumber = value => Boolean(value) && !Number.isNaN(Number(value));\nconst isArbitraryNumber = value => getIsArbitraryValue(value, 'number', isNumber);\nconst isInteger = value => Boolean(value) && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst sizeLabels = /*#__PURE__*/new Set(['length', 'size', 'percentage']);\nconst isArbitrarySize = value => getIsArbitraryValue(value, sizeLabels, isNever);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, 'position', isNever);\nconst imageLabels = /*#__PURE__*/new Set(['image', 'url']);\nconst isArbitraryImage = value => getIsArbitraryValue(value, imageLabels, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, '', isShadow);\nconst isAny = () => true;\nconst getIsArbitraryValue = (value, label, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return typeof label === 'string' ? result[1] === label : label.has(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isInteger,\n isLength,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n const colors = fromTheme('colors');\n const spacing = fromTheme('spacing');\n const blur = fromTheme('blur');\n const brightness = fromTheme('brightness');\n const borderColor = fromTheme('borderColor');\n const borderRadius = fromTheme('borderRadius');\n const borderSpacing = fromTheme('borderSpacing');\n const borderWidth = fromTheme('borderWidth');\n const contrast = fromTheme('contrast');\n const grayscale = fromTheme('grayscale');\n const hueRotate = fromTheme('hueRotate');\n const invert = fromTheme('invert');\n const gap = fromTheme('gap');\n const gradientColorStops = fromTheme('gradientColorStops');\n const gradientColorStopPositions = fromTheme('gradientColorStopPositions');\n const inset = fromTheme('inset');\n const margin = fromTheme('margin');\n const opacity = fromTheme('opacity');\n const padding = fromTheme('padding');\n const saturate = fromTheme('saturate');\n const scale = fromTheme('scale');\n const sepia = fromTheme('sepia');\n const skew = fromTheme('skew');\n const space = fromTheme('space');\n const translate = fromTheme('translate');\n const getOverscroll = () => ['auto', 'contain', 'none'];\n const getOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const getSpacingWithAutoAndArbitrary = () => ['auto', isArbitraryValue, spacing];\n const getSpacingWithArbitrary = () => [isArbitraryValue, spacing];\n const getLengthWithEmptyAndArbitrary = () => ['', isLength, isArbitraryLength];\n const getNumberWithAutoAndArbitrary = () => ['auto', isNumber, isArbitraryValue];\n const getPositions = () => ['bottom', 'center', 'left', 'left-bottom', 'left-top', 'right', 'right-bottom', 'right-top', 'top'];\n const getLineStyles = () => ['solid', 'dashed', 'dotted', 'double', 'none'];\n const getBlendModes = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const getAlign = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch'];\n const getZeroAndEmpty = () => ['', '0', isArbitraryValue];\n const getBreaks = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const getNumberAndArbitrary = () => [isNumber, isArbitraryValue];\n return {\n cacheSize: 500,\n separator: ':',\n theme: {\n colors: [isAny],\n spacing: [isLength, isArbitraryLength],\n blur: ['none', '', isTshirtSize, isArbitraryValue],\n brightness: getNumberAndArbitrary(),\n borderColor: [colors],\n borderRadius: ['none', '', 'full', isTshirtSize, isArbitraryValue],\n borderSpacing: getSpacingWithArbitrary(),\n borderWidth: getLengthWithEmptyAndArbitrary(),\n contrast: getNumberAndArbitrary(),\n grayscale: getZeroAndEmpty(),\n hueRotate: getNumberAndArbitrary(),\n invert: getZeroAndEmpty(),\n gap: getSpacingWithArbitrary(),\n gradientColorStops: [colors],\n gradientColorStopPositions: [isPercent, isArbitraryLength],\n inset: getSpacingWithAutoAndArbitrary(),\n margin: getSpacingWithAutoAndArbitrary(),\n opacity: getNumberAndArbitrary(),\n padding: getSpacingWithArbitrary(),\n saturate: getNumberAndArbitrary(),\n scale: getNumberAndArbitrary(),\n sepia: getZeroAndEmpty(),\n skew: getNumberAndArbitrary(),\n space: getSpacingWithArbitrary(),\n translate: getSpacingWithArbitrary()\n },\n classGroups: {\n // Layout\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', 'video', isArbitraryValue]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isTshirtSize]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': getBreaks()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': getBreaks()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: [...getPositions(), isArbitraryValue]\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: getOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': getOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': getOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: getOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': getOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': getOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Top / Right / Bottom / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: [inset]\n }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': [inset]\n }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': [inset]\n }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{\n start: [inset]\n }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{\n end: [inset]\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: [inset]\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: [inset]\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: [inset]\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: [inset]\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: ['auto', isInteger, isArbitraryValue]\n }],\n // Flexbox and Grid\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: getSpacingWithAutoAndArbitrary()\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['wrap', 'wrap-reverse', 'nowrap']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: ['1', 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: getZeroAndEmpty()\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: getZeroAndEmpty()\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: ['first', 'last', 'none', isInteger, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': [isAny]\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: ['auto', {\n span: ['full', isInteger, isArbitraryValue]\n }, isArbitraryValue]\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': [isAny]\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: ['auto', {\n span: [isInteger, isArbitraryValue]\n }, isArbitraryValue]\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': ['auto', 'min', 'max', 'fr', isArbitraryValue]\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': ['auto', 'min', 'max', 'fr', isArbitraryValue]\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: [gap]\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': [gap]\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': [gap]\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: ['normal', ...getAlign()]\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': ['start', 'end', 'center', 'stretch']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', 'start', 'end', 'center', 'stretch']\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...getAlign(), 'baseline']\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: ['start', 'end', 'center', 'baseline', 'stretch']\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', 'start', 'end', 'center', 'stretch', 'baseline']\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': [...getAlign(), 'baseline']\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': ['start', 'end', 'center', 'baseline', 'stretch']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', 'start', 'end', 'center', 'stretch']\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: [padding]\n }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: [padding]\n }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: [padding]\n }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: [padding]\n }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: [padding]\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: [padding]\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: [padding]\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: [padding]\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: [padding]\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: [margin]\n }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: [margin]\n }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: [margin]\n }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: [margin]\n }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: [margin]\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: [margin]\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: [margin]\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: [margin]\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: [margin]\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x': [{\n 'space-x': [space]\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y': [{\n 'space-y': [space]\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y-reverse': ['space-y-reverse'],\n // Sizing\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: ['auto', 'min', 'max', 'fit', 'svw', 'lvw', 'dvw', isArbitraryValue, spacing]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [isArbitraryValue, spacing, 'min', 'max', 'fit']\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [isArbitraryValue, spacing, 'none', 'full', 'min', 'max', 'fit', 'prose', {\n screen: [isTshirtSize]\n }, isTshirtSize]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Size\n * @see https://tailwindcss.com/docs/size\n */\n size: [{\n size: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit']\n }],\n // Typography\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', isTshirtSize, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black', isArbitraryNumber]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isAny]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest', isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': ['none', isNumber, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose', isLength, isArbitraryValue]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryValue]\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['none', 'disc', 'decimal', isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: [colors]\n }],\n /**\n * Placeholder Opacity\n * @see https://tailwindcss.com/docs/placeholder-opacity\n */\n 'placeholder-opacity': [{\n 'placeholder-opacity': [opacity]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: [colors]\n }],\n /**\n * Text Opacity\n * @see https://tailwindcss.com/docs/text-opacity\n */\n 'text-opacity': [{\n 'text-opacity': [opacity]\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...getLineStyles(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: ['auto', 'from-font', isLength, isArbitraryLength]\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': ['auto', isLength, isArbitraryValue]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: [colors]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: getSpacingWithArbitrary()\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryValue]\n }],\n // Backgrounds\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Opacity\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/background-opacity\n */\n 'bg-opacity': [{\n 'bg-opacity': [opacity]\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: [...getPositions(), isArbitraryPosition]\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: ['no-repeat', {\n repeat: ['', 'x', 'y', 'round', 'space']\n }]\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: ['auto', 'cover', 'contain', isArbitrarySize]\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n 'gradient-to': ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: [colors]\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: [gradientColorStops]\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: [gradientColorStops]\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: [gradientColorStops]\n }],\n // Borders\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: [borderRadius]\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': [borderRadius]\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': [borderRadius]\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': [borderRadius]\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': [borderRadius]\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': [borderRadius]\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': [borderRadius]\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': [borderRadius]\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': [borderRadius]\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': [borderRadius]\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': [borderRadius]\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': [borderRadius]\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': [borderRadius]\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': [borderRadius]\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': [borderRadius]\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: [borderWidth]\n }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': [borderWidth]\n }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': [borderWidth]\n }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': [borderWidth]\n }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': [borderWidth]\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': [borderWidth]\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': [borderWidth]\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': [borderWidth]\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': [borderWidth]\n }],\n /**\n * Border Opacity\n * @see https://tailwindcss.com/docs/border-opacity\n */\n 'border-opacity': [{\n 'border-opacity': [opacity]\n }],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...getLineStyles(), 'hidden']\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x': [{\n 'divide-x': [borderWidth]\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y': [{\n 'divide-y': [borderWidth]\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Divide Opacity\n * @see https://tailwindcss.com/docs/divide-opacity\n */\n 'divide-opacity': [{\n 'divide-opacity': [opacity]\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/divide-style\n */\n 'divide-style': [{\n divide: getLineStyles()\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: [borderColor]\n }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': [borderColor]\n }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': [borderColor]\n }],\n /**\n * Border Color S\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': [borderColor]\n }],\n /**\n * Border Color E\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': [borderColor]\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': [borderColor]\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': [borderColor]\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': [borderColor]\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': [borderColor]\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: [borderColor]\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: ['', ...getLineStyles()]\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isLength, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: [isLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: [colors]\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w': [{\n ring: getLengthWithEmptyAndArbitrary()\n }],\n /**\n * Ring Width Inset\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/ring-color\n */\n 'ring-color': [{\n ring: [colors]\n }],\n /**\n * Ring Opacity\n * @see https://tailwindcss.com/docs/ring-opacity\n */\n 'ring-opacity': [{\n 'ring-opacity': [opacity]\n }],\n /**\n * Ring Offset Width\n * @see https://tailwindcss.com/docs/ring-offset-width\n */\n 'ring-offset-w': [{\n 'ring-offset': [isLength, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://tailwindcss.com/docs/ring-offset-color\n */\n 'ring-offset-color': [{\n 'ring-offset': [colors]\n }],\n // Effects\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: ['', 'inner', 'none', isTshirtSize, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow-color\n */\n 'shadow-color': [{\n shadow: [isAny]\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [opacity]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...getBlendModes(), 'plus-lighter', 'plus-darker']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': getBlendModes()\n }],\n // Filters\n /**\n * Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: ['', 'none']\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: [blur]\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [brightness]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [contrast]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': ['', 'none', isTshirtSize, isArbitraryValue]\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: [grayscale]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [hueRotate]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: [invert]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [saturate]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: [sepia]\n }],\n /**\n * Backdrop Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': ['', 'none']\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': [blur]\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [brightness]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [contrast]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': [grayscale]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [hueRotate]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': [invert]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [opacity]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [saturate]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': [sepia]\n }],\n // Tables\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': [borderSpacing]\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': [borderSpacing]\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': [borderSpacing]\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // Transitions and Animation\n /**\n * Tranisition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['none', 'all', '', 'colors', 'opacity', 'shadow', 'transform', isArbitraryValue]\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: getNumberAndArbitrary()\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'in', 'out', 'in-out', isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: getNumberAndArbitrary()\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', 'spin', 'ping', 'pulse', 'bounce', isArbitraryValue]\n }],\n // Transforms\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: ['', 'gpu', 'none']\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: [scale]\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': [scale]\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': [scale]\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: [isInteger, isArbitraryValue]\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': [translate]\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': [translate]\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': [skew]\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': [skew]\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: ['center', 'top', 'top-right', 'right', 'bottom-right', 'bottom', 'bottom-left', 'left', 'top-left', isArbitraryValue]\n }],\n // Interactivity\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: ['auto', colors]\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryValue]\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: [colors]\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['none', 'auto']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', 'y', 'x', '']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryValue]\n }],\n // SVG\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: [colors, 'none']\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: [colors, 'none']\n }],\n // Accessibility\n /**\n * Screen Readers\n * @see https://tailwindcss.com/docs/screen-readers\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': ['border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': ['border-color-s', 'border-color-e', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch']\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading']\n }\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n separator,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'separator', separator);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n for (const configKey in override) {\n overrideConfigProperties(baseConfig[configKey], override[configKey]);\n }\n for (const key in extend) {\n mergeConfigProperties(baseConfig[key], extend[key]);\n }\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = (baseObject[key] || []).concat(mergeValue);\n }\n }\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","import { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n"],"names":["ActivityIndicator","size","color","overlay","className","spinner","jsx","Button","variant","block","disabled","textSelectable","loading","onClick","children","rest","cls","jsxs","e","selection","Alert","code","text","type","button","onAction","Battery","percentage","status","darkMode","colored","percent","fillColor","backgroundColor","width","height","capWidth","capSpacing","boltSpace","innerPadding","outlineX","outlineY","outlineWidth","outlineHeight","innerHeight","innerWidth","cornerRadius","visualPercent","svgWidth","boltPathH","boltScale","svgHeight","boltTransX","boltTransY","ButtonGroup","value","onChange","options","labels","option","idx","CheckIcon","Checkbox","checked","label","labelColor","style","isSmall","translations","supportedLocales","manualLocale","detectLocale","htmlLang","_a","loc","setLocale","locale","getLocale","t","key","DropdownOption","selected","highlighted","small","optionRef","useRef","useEffect","DropdownMenu","isOpen","onSelect","selectedValue","placement","anchorRef","highlightedIndex","position","setPosition","useState","autoPlacement","setAutoPlacement","rect","finalPlacement","spaceBelow","spaceAbove","dropdown","o","createPortal","ClearButton","ToggleButton","open","ComboBox","placeholder","clearable","allowTyping","setOpen","query","setQuery","setHighlightedIndex","inputRef","filtered","useMemo","q","defaultOption","onDoc","showClearButton","showToggle","overlayVisible","handleSelect","newValue","fromKeyboard","handleClear","handleKeyDown","prev","next","s","_b","RefreshButton","title","ariaLabel","RefreshIcon","CloseButton","CloseIcon","EditButton","EditIcon","TrashButton","TrashIcon","Hyperlink","ContextMenu","onClose","anchor","preferredDirection","menuRef","anchorElement","anchorRect","menuRect","viewportHeight","downTop","downFits","finalDirection","finalTop","finalLeft","handleClickOutside","handleEscapeKey","handleOptionClick","DialogContext","createContext","useDialog","ctx","useContext","DialogClose","props","close","toCssSize","Dialog","minWidth","minHeight","maxWidth","maxHeight","footerType","footer","onOk","onSave","onDelete","onCancel","onConnect","closeOnOverlay","primaryDisabled","fullScreen","hideTitleBar","dialogRef","contextValue","handleOverlayClick","renderFooter","dialogContent","rightOffset","buttonSize","TogglePasswordButton","visible","iconSize","EyeHiddenIcon","ViewIcon","Input","onEnter","onClear","showPasswordToggle","passwordVisible","setPasswordVisible","isPasswordType","buttonWidth","paddingRight","handleChange","inputClassName","ListGroupItem","showBorder","selectable","isPressed","setIsPressed","React","ListGroup","titleTools","MultiSelect","values","ref","toggle","v","x","NumberInput","min","max","step","decrement","increment","Slider","showValue","formatValue","Tabs","tabs","active","toolbar","multiline","Toggle","isString","obj","defer","res","rej","promise","resolve","reject","makeString","object","copy","a","m","lastOfPathSeparatorRegExp","cleanKey","canNotTraverseDeeper","getLastOfPath","path","Empty","stack","stackIndex","setPath","k","p","last","pushPath","concat","getPath","getPathWithDefaults","data","defaultData","deepExtend","target","source","overwrite","prop","regexEscape","str","_entityMap","escape","RegExpCache","capacity","pattern","regExpFromCache","regExpNew","chars","looksLikeObjectPathRegExpCache","looksLikeObjectPath","nsSeparator","keySeparator","possibleChars","c","matched","ki","deepFind","tokens","current","nextPath","j","getCleanedCode","consoleLogger","args","Logger","concreteLogger","_len","_key","_len2","_key2","_len3","_key3","_len4","_key4","lvl","prefix","debugOnly","moduleName","baseLogger","EventEmitter","events","listener","event","numListeners","_ref","observer","numTimesAdded","i","_ref2","ResourceStore","ns","index","lng","ignoreJSONStructure","result","resources","deep","pack","postProcessor","module","processors","translator","processor","checkedLoadedFor","Translator","services","resolved","namespaces","wouldCheckForNsInKey","seemsNaturalLanguage","parts","keys","lastKey","returnDetails","namespace","appendNamespaceToCIMode","resUsedKey","resExactUsedKey","resType","noObject","joinArrays","handleAsObjectInI18nFormat","handleAsObject","r","resTypeIsArray","newKeyToUse","deepKey","usedDefault","usedKey","needsPluralHandling","hasDefaultValue","defaultValueSuffix","defaultValueSuffixOrdinalFallback","needsZeroSuffixLookup","defaultValue","resForMissing","updateMissing","fk","lngs","fallbackLngs","send","l","specificDefaultValue","defaultForMissing","language","suffixes","suffix","_this","skipOnVariables","nestBef","nb","na","nestAft","postProcess","postProcessorNames","found","exactUsedKey","usedLng","usedNS","extracted","needsContextHandling","codes","finalKeys","pluralSuffix","zeroSuffix","ordinalPrefix","contextKey","possibleKey","optionsKeys","useOptionsReplaceForData","capitalize","string","LanguageUtil","formattedCode","specialCases","part","cleanedLng","lngOnly","supportedLng","fallbacks","fallbackCode","fallbackCodes","addCode","fc","sets","_rulesPluralsTypes","nonIntlVersions","intlVersions","suffixesOrder","createRules","rules","set","PluralResolver","languageUtils","cleanedCode","cacheKey","rule","lngPart","pluralCategory1","pluralCategory2","pluralCategory","number","count","returnSuffix","deepFindWithDefaults","regexSafe","val","Interpolator","escape$1","escapeValue","useRawValueToEscape","prefixEscaped","suffixEscaped","formatSeparator","unescapeSuffix","unescapePrefix","nestingPrefix","nestingPrefixEscaped","nestingSuffix","nestingSuffixEscaped","nestingOptionsSeparator","maxReplaces","alwaysFormat","getOrResetRegExp","existingRegExp","match","replaces","handleFormat","f","missingInterpolationHandler","todo","matchedVar","temp","safeValue","clonedOptions","handleHasOptions","inheritedOptions","sep","optionsString","matchedSingleQuotes","matchedDoubleQuotes","formatters","doReduce","elem","parseFormatStr","formatStr","formatName","formatOptions","optStr","opt","trimmedKey","createCachedFormatter","fn","cache","optForCache","formatter","Formatter","name","format","formats","lastIndex","mem","formatted","valOptions","error","removePending","Connector","backend","store","languages","callback","toLoad","pending","toLoadLanguages","toLoadNamespaces","hasAllNamespaces","err","loaded","loadedKeys","n","fcName","tried","wait","resolver","fallbackValue","isUpdate","clb","opts","get","ret","transformOptions","noop","bindMemberFunctions","inst","I18n","defOpts","createClassOnDemand","ClassOrObject","lu","deferred","load","finish","usedCallback","append","li","lngInLngs","_this2","setLngProps","done","setLng","keyPrefix","_this3","fixedT","resultKey","fallbackLng","lastLng","loadNotPending","loadState","preResult","preloaded","newLngs","rtlLngs","forkResourceStore","mergedOptions","clone","instance","createAppI18nFactory","i18next","wrappedResources","lang","initialLang","mutations","mutation","newLang","AppRegistry","__publicField","app","id","appRegistry","STORAGE_KEY","AppStateStore","stored","appId","appStateStore","BackHandlerRegistry","priority","handler","h","b","backHandlerRegistry","setAppInUrl","url","clearAppInUrl","RunningAppsStore","launchInBackground","existing","runningApp","resolvers","isDesktop","runningAppsStore","AppContext","useApp","warn","alreadyWarned","warnOnce","loadedClb","i18n","cb","initialized","loadNamespaces","loadLanguages","oldI18nextHasLoadedNamespace","hasLoadedNamespace","i18nInstance","isObject","matchHtmlEntity","htmlEntities","unescapeHtmlEntity","unescape","defaultOptions","getDefaults","getI18n","I18nContext","ReportNamespaces","usePrevious","ignore","alwaysNewT","useMemoizedT","useCallback","useTranslation","i18nFromProps","i18nFromContext","defaultNSFromContext","notReadyT","optsOrDefaultValue","retNotReady","i18nOptions","useSuspense","ready","memoGetT","getT","getNewT","setT","joinedNS","previousJoinedNS","isMounted","bindI18n","bindI18nStore","boundReset","BackArrowIcon","AppTitleBar","onBack","hideBackButton","AppErrorBoundary","errorInfo","AppContainer","isActive","def","setTitleState","backHandler","setBackHandlerState","setToolbarState","setHideBackButtonState","setHideTitleBarState","setTitle","newTitle","setBackHandler","clearBackHandler","setToolbar","newToolbar","clearToolbar","setHideBackButton","hide","setHideTitleBar","appContextValue","AppComp","showTitleBar","Suspense","MOBILE_BREAKPOINT","TABLET_BREAKPOINT","ViewportContext","ViewportProvider","viewport","setViewport","handleResize","useViewport","AppPanel","isMobile","activeAppId","setActiveAppId","runningApps","setRunningApps","unsubActiveApp","persistedAppId","onCloseApp","activeAppDef","fullPanelWidth","expanded","ra","AppTaskbar","pinnedAppIds","onClickApp","pinnedAppDefs","nonPinnedRunningAppDefs","item","isAppRunning","Icon","isRunning","running","AppDialog","closeOnBackdrop","handleBackdropClick","dialogId","content","NavStackContext","NavViewContext","useNavStack","context","useNavView","NavStackInternalContext","NavStackProvider","rootView","appContext","setStack","toolbarStack","setToolbarStack","updateToolbar","newStack","clearToolbarAt","push","view","pop","reset","depth","canGoBack","topIndex","currentView","currentTitle","topToolbar","internalValue","NavViewProvider","internalContext","NavStackContainer","navContext","CLASS_PART_SEPARATOR","createClassGroupUtils","config","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","classParts","getGroupRecursive","getGroupIdForArbitraryProperty","classGroupId","hasPostfixModifier","conflicts","classPartObject","currentClassPart","nextClassPartObject","classGroupFromNextClassPart","classRest","validator","arbitraryPropertyRegex","arbitraryPropertyClassName","property","theme","getPrefixedClassGroupEntries","classGroup","processClassesRecursively","classDefinition","classPartObjectToEdit","getPart","isThemeGetter","currentClassPartObject","pathPart","func","classGroupEntries","prefixedClassGroup","createLruCache","maxCacheSize","cacheSize","previousCache","update","IMPORTANT_MODIFIER","createParseClassName","separator","experimentalParseClassName","isSeparatorSingleCharacter","firstSeparatorCharacter","separatorLength","parseClassName","modifiers","bracketDepth","modifierStart","postfixModifierPosition","currentCharacter","baseClassNameWithImportantModifier","hasImportantModifier","baseClassName","maybePostfixModifierPosition","sortModifiers","sortedModifiers","unsortedModifiers","modifier","createConfigUtils","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","getClassGroupId","getConflictingClassGroupIds","classGroupsInConflict","classNames","originalClassName","variantModifier","modifierId","classId","conflictGroups","group","twJoin","argument","resolvedValue","toValue","mix","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","fromTheme","themeGetter","arbitraryValueRegex","fractionRegex","stringLengths","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isLength","isNumber","isArbitraryLength","getIsArbitraryValue","isLengthOnly","isArbitraryNumber","isInteger","isPercent","isArbitraryValue","isTshirtSize","sizeLabels","isArbitrarySize","isNever","isArbitraryPosition","imageLabels","isArbitraryImage","isImage","isArbitraryShadow","isShadow","isAny","testValue","getDefaultConfig","colors","spacing","blur","brightness","borderColor","borderRadius","borderSpacing","borderWidth","contrast","grayscale","hueRotate","invert","gap","gradientColorStops","gradientColorStopPositions","inset","margin","opacity","padding","saturate","scale","sepia","skew","space","translate","getOverscroll","getOverflow","getSpacingWithAutoAndArbitrary","getSpacingWithArbitrary","getLengthWithEmptyAndArbitrary","getNumberWithAutoAndArbitrary","getPositions","getLineStyles","getBlendModes","getAlign","getZeroAndEmpty","getBreaks","getNumberAndArbitrary","twMerge","cn","inputs","clsx"],"mappings":"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","x_google_ignoreList":[18,25,26,27,28,29,30,38]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/components/ActivityIndicator.tsx","../src/components/Button.tsx","../src/components/Alert.tsx","../src/components/Battery.tsx","../src/components/ButtonGroup.tsx","../src/components/Checkbox.tsx","../node_modules/react-i18next/dist/es/utils.js","../node_modules/react-i18next/dist/es/unescape.js","../node_modules/react-i18next/dist/es/defaults.js","../node_modules/react-i18next/dist/es/i18nInstance.js","../node_modules/react-i18next/dist/es/context.js","../node_modules/react-i18next/dist/es/useTranslation.js","../src/components/ComboBox.tsx","../src/components/CommonButtons.tsx","../src/components/ContextMenu.tsx","../src/components/Dialog.tsx","../src/components/Input.tsx","../src/components/ListGroup.tsx","../src/components/MultiSelect.tsx","../src/components/NumberInput.tsx","../src/components/Slider.tsx","../src/components/Tabs.tsx","../src/components/Toggle.tsx","../src/stores/notificationStore.ts","../src/components/Notification.tsx","../src/components/NotificationContainer.tsx","../src/lib/notificationManager.ts","../node_modules/i18next/dist/esm/i18next.js","../src/lib/appI18nFactory.ts","../src/lib/appRegistry.ts","../src/stores/appStateStore.ts","../src/utils/backHandlerRegistry.ts","../src/lib/runningAppsStore.ts","../src/components/app/AppContext.tsx","../src/components/app/AppTitleBar.tsx","../src/components/app/AppContainer.tsx","../src/contexts/ViewportContext.tsx","../src/components/app/AppPanel.tsx","../src/components/app/AppTaskbar.tsx","../src/components/app/AppDialog.tsx","../src/components/NavStack.tsx","../node_modules/tailwind-merge/dist/bundle-mjs.mjs","../src/lib/utils.ts"],"sourcesContent":["export interface ActivityIndicatorProps {\n /** Size of the spinner */\n size?: 'small' | 'default' | 'large';\n /** Custom color (defaults to --primary) */\n color?: string;\n /** If true, renders in an overlay that covers the parent element and blocks clicks */\n overlay?: boolean;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * ActivityIndicator - A spinning loading indicator.\n * \n * Usage:\n * 1. Inline spinner: <ActivityIndicator size=\"small\" />\n * 2. Overlay on parent (parent must have position: relative):\n * <div style={{ position: 'relative' }}>\n * <Button>Click me</Button>\n * {isLoading && <ActivityIndicator overlay />}\n * </div>\n * 3. Cover entire dialog: Place overlay ActivityIndicator inside dialog container\n */\nexport function ActivityIndicator({\n size = 'default',\n color,\n overlay = false,\n className = '',\n}: ActivityIndicatorProps) {\n const spinner = (\n <svg\n className={`nc-activity-indicator nc-${size} ${className}`}\n viewBox=\"0 0 50 50\"\n style={color ? { color } : undefined}\n >\n <circle\n className=\"nc-activity-indicator-circle\"\n cx=\"25\"\n cy=\"25\"\n r=\"20\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"5\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n\n if (overlay) {\n return (\n <div className=\"nc-activity-indicator-overlay\">\n {spinner}\n </div>\n );\n }\n\n return spinner;\n}\n","import React from 'react';\nimport { ActivityIndicator } from './ActivityIndicator';\n\nexport type ButtonVariant = 'default' | 'primary' | 'danger' | 'warning' | 'success' | 'ghost';\n\nexport type ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {\n variant?: ButtonVariant;\n block?: boolean;\n size?: 'default' | 'small' | 'large';\n textSelectable?: boolean;\n loading?: boolean;\n};\n\nexport function Button({ variant = 'default', block, size = 'default', className, disabled, textSelectable, loading, onClick, children, ...rest }: ButtonProps) {\n const cls = [\n 'nc-button',\n variant !== 'default' ? `nc-${variant}` : '',\n block ? 'nc-block' : '',\n size === 'small' ? 'nc-small' : '',\n size === 'large' ? 'nc-large' : '',\n (disabled || loading) ? 'nc-disabled' : '',\n textSelectable ? 'nc-text-selectable' : '',\n loading ? 'nc-loading' : '',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ');\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (loading) return;\n // If text is selected, don't trigger click\n if (textSelectable) {\n const selection = window.getSelection();\n if (selection && selection.toString().length > 0) {\n return;\n }\n }\n onClick?.(e);\n };\n\n return (\n <button\n className={cls}\n disabled={disabled || loading}\n onClick={handleClick}\n {...rest}\n >\n {loading && (\n <ActivityIndicator\n size=\"small\"\n className=\"nc-button-spinner\"\n color={variant !== 'default' && variant !== 'ghost' ? 'white' : undefined}\n />\n )}\n {children}\n </button>\n );\n}\n","import { Button, type ButtonVariant } from './Button';\n\nexport type AlertType = 'warning' | 'error';\n\nexport interface AlertProps {\n /** Error or warning code to display */\n code: number;\n /** Alert message text */\n text: string;\n /** Type of alert - determines styling */\n type: AlertType;\n /** Optional action button configuration */\n button?: { text: string; variant?: ButtonVariant };\n /** Callback when action button is clicked */\n onAction?: () => void;\n}\n\nexport function Alert({ code, text, type, button, onAction }: AlertProps) {\n return (\n <div className={`nc-alert nc-${type}`}>\n <span className={`nc-alert-message nc-${type}`}>\n <span className=\"nc-alert-code\">{code}</span>\n {text}\n </span>\n\n {button && (\n <span className=\"nc-alert-action\">\n <Button\n size=\"small\"\n variant={button.variant ?? (type === 'error' ? 'danger' : 'warning')}\n onClick={onAction}\n >\n {button.text}\n </Button>\n </span>\n )}\n </div>\n );\n}\n","export type BatteryStatus = 'charging' | 'discharging' | 'full';\n\nexport interface BatteryProps {\n /** Battery level from 0.0 to 1.0 */\n percentage?: number;\n /** Current battery status */\n status?: BatteryStatus;\n /** Use light colors for dark backgrounds */\n darkMode?: boolean;\n /** Use threshold-based coloring (danger/warning/success) */\n colored?: boolean;\n}\n\nexport function Battery({\n percentage = 0.5,\n status = 'discharging',\n darkMode = false,\n colored = false,\n}: BatteryProps) {\n const percent = Math.max(0, Math.min(1, Number(percentage) || 0));\n\n // Determine fill color based on colored mode and percentage thresholds\n let fillColor: string;\n if (colored) {\n // Threshold-based coloring using CSS variables\n if (percent < 0.1) {\n fillColor = 'var(--nc-danger)';\n } else if (percent < 0.2) {\n fillColor = 'var(--nc-warning)';\n } else {\n fillColor = 'var(--nc-success)';\n }\n } else {\n // Monochrome mode based on darkMode\n fillColor = darkMode ? '#ffffff' : '#000000';\n }\n\n // Semi-transparent background color\n const backgroundColor = darkMode\n ? 'rgba(255, 255, 255, 0.5)'\n : 'rgba(0, 0, 0, 0.2)';\n\n // Reduced default size for compact display in the status bar\n const width = 24; // body width\n const height = 14;\n const capWidth = 2;\n const capSpacing = 0;\n const boltSpace = 12; // extra space to the right for the lightning icon\n\n const innerPadding = 0;\n\n // No outline, so we use full dimensions\n const outlineX = 0;\n const outlineY = 0;\n const outlineWidth = width;\n const outlineHeight = height;\n\n // Fill area sits inside the outline, respecting inner padding.\n const innerHeight = outlineHeight - innerPadding * 2;\n const innerWidth = outlineWidth - innerPadding * 2;\n\n // Corner radius for rounded corners; clamp to a sensible value relative to height\n const cornerRadius = Math.max(1, Math.min(4, outlineHeight / 4));\n\n // Map percentage to visual fill: 0% → 0%, 1-100% → 5%-100% for better visibility at low levels\n const visualPercent = percent === 0 ? 0 : 0.05 + (percent * 0.95);\n\n const svgWidth = width + capWidth + boltSpace;\n // approximate bolt path size for centering and scaling\n const boltPathH = 20;\n const boltScale = 0.65; // Smaller as requested\n const svgHeight = Math.max(height, boltPathH * boltScale);\n const boltTransX = width + capWidth + 1;\n // Center relative to battery height (moves it up compared to centering in expanded SVG)\n const boltTransY = (height - boltPathH * boltScale) / 2;\n\n return (\n <svg\n className=\"nc-battery\"\n width={svgWidth}\n height={svgHeight}\n viewBox={`0 0 ${svgWidth} ${svgHeight}`}\n role=\"img\"\n aria-label={`Battery ${percent === 0 ? '-' : Math.round(percent * 100) + '%'} ${status}`}\n >\n <defs>\n {/* Mask for the fill percentage */}\n <mask id={`nc-battery-fill-mask-${percent}`}>\n <rect x=\"0\" y=\"0\" width={innerWidth * visualPercent} height={innerHeight} fill=\"white\" />\n </mask>\n\n {/* Define a mask using the text as a cutout */}\n <mask id={`nc-battery-text-mask-${percent}`}>\n {/* White background allows everything through */}\n <rect x=\"0\" y=\"0\" width={svgWidth} height={svgHeight} fill=\"white\" />\n {/* Black text cuts a hole in the mask */}\n <text x={outlineX + outlineWidth / 2} y={height - 3} fontSize={11} fontWeight=\"bold\" fill=\"black\" textAnchor=\"middle\">\n {percent === 0 ? '-' : Math.round(percent * 100)}\n </text>\n </mask>\n </defs>\n\n {/* Apply mask to all battery elements to create hollow text effect */}\n <g mask={`url(#nc-battery-text-mask-${percent})`}>\n {/* semi-transparent background */}\n <rect\n x={outlineX}\n y={outlineY}\n rx={cornerRadius}\n ry={cornerRadius}\n width={outlineWidth}\n height={outlineHeight}\n fill={backgroundColor}\n />\n\n {/* filled portion - full width rect with mask to show only the percentage */}\n <rect\n x={outlineX + innerPadding}\n y={outlineY + innerPadding}\n width={innerWidth}\n height={innerHeight}\n fill={fillColor}\n rx={cornerRadius}\n ry={cornerRadius}\n mask={`url(#nc-battery-fill-mask-${percent})`}\n />\n\n {/* cap */}\n <rect\n x={width + capSpacing}\n y={height * 0.26}\n width={capWidth}\n height={height * 0.48}\n rx={0.8}\n ry={0.8}\n fill={percent === 1 ? fillColor : backgroundColor}\n />\n\n {/* charging lightning - positioned to the right of the battery (outside the cap) */}\n {status === 'charging' ? (\n <g transform={`translate(${boltTransX}, ${boltTransY}) scale(${boltScale})`} fill={fillColor}>\n {/* lightning symbol (stylized) */}\n <path d=\"M10 0 L2 11 H8 L5 20 L14 8 H8 L10 0 Z\" />\n </g>\n ) : null}\n </g>\n </svg>\n );\n}\n","export type ButtonGroupSize = 'default' | 'small';\n\nexport interface ButtonGroupProps<T extends string> {\n /** Currently selected value */\n value: T | null;\n /** Callback when selection changes */\n onChange: (value: T) => void;\n /** Available options */\n options: readonly T[];\n /** Disable all buttons */\n disabled?: boolean;\n /** Custom labels for options */\n labels?: Partial<Record<T, string>>;\n /** Size variant */\n size?: ButtonGroupSize;\n}\n\nexport function ButtonGroup<T extends string>({\n value,\n onChange,\n options,\n disabled,\n labels,\n size = 'default',\n}: ButtonGroupProps<T>) {\n return (\n <div className={`nc-button-group ${size === 'small' ? 'nc-small' : ''}`}>\n {options.map((option, idx) => (\n <button\n key={option}\n className={`nc-button-group-item ${value === option ? 'nc-active' : ''} ${idx < options.length - 1 ? 'nc-has-border' : ''}`}\n onClick={() => !disabled && onChange(option)}\n disabled={disabled}\n >\n {labels && labels[option] ? labels[option] : option}\n </button>\n ))}\n </div>\n );\n}\n","import React from 'react';\n\nexport type CheckboxSize = 'default' | 'small';\n\nexport interface CheckboxProps {\n /** Whether the checkbox is checked */\n checked: boolean;\n /** Callback when checkbox value changes */\n onChange: (value: boolean) => void;\n /** Whether the checkbox is disabled */\n disabled?: boolean;\n /** Label text to display next to checkbox */\n label?: string;\n /** Size variant */\n size?: CheckboxSize;\n /** Custom label color */\n labelColor?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Additional CSS class names */\n className?: string;\n}\n\nfunction CheckIcon({ size }: { size: 'default' | 'small' }) {\n return (\n <svg className={`nc-checkbox-icon ${size === 'small' ? 'nc-small' : ''}`} viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M2 6L5 9L10 3\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nexport function Checkbox({ checked, onChange, disabled, label, size = 'default', labelColor, style, className = '' }: CheckboxProps) {\n const isSmall = size === 'small';\n return (\n <label\n className={`nc-checkbox-label ${isSmall ? 'nc-small' : ''} ${disabled ? 'nc-disabled' : ''} ${className}`.trim()}\n style={style}\n onClick={(e) => {\n if (disabled) return;\n e.preventDefault();\n onChange(!checked);\n }}\n >\n <span\n role=\"checkbox\"\n aria-checked={checked}\n tabIndex={0}\n className={`nc-checkbox-box ${isSmall ? 'nc-small' : ''} ${checked ? 'nc-checked' : ''}`}\n onKeyDown={(e) => {\n if (disabled) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onChange(!checked);\n }\n }}\n >\n {checked && <CheckIcon size={size} />}\n </span>\n {label && (\n <span className=\"nc-checkbox-text\" style={labelColor ? { color: labelColor } : undefined}>\n {label}\n </span>\n )}\n </label>\n );\n}\n","export function warn() {\n if (console && console.warn) {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (isString(args[0])) args[0] = `react-i18next:: ${args[0]}`;\n console.warn(...args);\n }\n}\nconst alreadyWarned = {};\nexport function warnOnce() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n if (isString(args[0]) && alreadyWarned[args[0]]) return;\n if (isString(args[0])) alreadyWarned[args[0]] = new Date();\n warn(...args);\n}\nconst loadedClb = (i18n, cb) => () => {\n if (i18n.isInitialized) {\n cb();\n } else {\n const initialized = () => {\n setTimeout(() => {\n i18n.off('initialized', initialized);\n }, 0);\n cb();\n };\n i18n.on('initialized', initialized);\n }\n};\nexport const loadNamespaces = (i18n, ns, cb) => {\n i18n.loadNamespaces(ns, loadedClb(i18n, cb));\n};\nexport const loadLanguages = (i18n, lng, ns, cb) => {\n if (isString(ns)) ns = [ns];\n ns.forEach(n => {\n if (i18n.options.ns.indexOf(n) < 0) i18n.options.ns.push(n);\n });\n i18n.loadLanguages(lng, loadedClb(i18n, cb));\n};\nconst oldI18nextHasLoadedNamespace = function (ns, i18n) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n const lng = i18n.languages[0];\n const fallbackLng = i18n.options ? i18n.options.fallbackLng : false;\n const lastLng = i18n.languages[i18n.languages.length - 1];\n if (lng.toLowerCase() === 'cimode') return true;\n const loadNotPending = (l, n) => {\n const loadState = i18n.services.backendConnector.state[`${l}|${n}`];\n return loadState === -1 || loadState === 2;\n };\n if (options.bindI18n && options.bindI18n.indexOf('languageChanging') > -1 && i18n.services.backendConnector.backend && i18n.isLanguageChangingTo && !loadNotPending(i18n.isLanguageChangingTo, ns)) return false;\n if (i18n.hasResourceBundle(lng, ns)) return true;\n if (!i18n.services.backendConnector.backend || i18n.options.resources && !i18n.options.partialBundledLanguages) return true;\n if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n return false;\n};\nexport const hasLoadedNamespace = function (ns, i18n) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n if (!i18n.languages || !i18n.languages.length) {\n warnOnce('i18n.languages were undefined or empty', i18n.languages);\n return true;\n }\n const isNewerI18next = i18n.options.ignoreJSONStructure !== undefined;\n if (!isNewerI18next) {\n return oldI18nextHasLoadedNamespace(ns, i18n, options);\n }\n return i18n.hasLoadedNamespace(ns, {\n lng: options.lng,\n precheck: (i18nInstance, loadNotPending) => {\n if (options.bindI18n && options.bindI18n.indexOf('languageChanging') > -1 && i18nInstance.services.backendConnector.backend && i18nInstance.isLanguageChangingTo && !loadNotPending(i18nInstance.isLanguageChangingTo, ns)) return false;\n }\n });\n};\nexport const getDisplayName = Component => Component.displayName || Component.name || (isString(Component) && Component.length > 0 ? Component : 'Unknown');\nexport const isString = obj => typeof obj === 'string';\nexport const isObject = obj => typeof obj === 'object' && obj !== null;","const matchHtmlEntity = /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g;\nconst htmlEntities = {\n '&': '&',\n '&': '&',\n '<': '<',\n '<': '<',\n '>': '>',\n '>': '>',\n ''': \"'\",\n ''': \"'\",\n '"': '\"',\n '"': '\"',\n ' ': ' ',\n ' ': ' ',\n '©': '©',\n '©': '©',\n '®': '®',\n '®': '®',\n '…': '…',\n '…': '…',\n '/': '/',\n '/': '/'\n};\nconst unescapeHtmlEntity = m => htmlEntities[m];\nexport const unescape = text => text.replace(matchHtmlEntity, unescapeHtmlEntity);","import { unescape } from './unescape.js';\nlet defaultOptions = {\n bindI18n: 'languageChanged',\n bindI18nStore: '',\n transEmptyNodeValue: '',\n transSupportBasicHtmlNodes: true,\n transWrapTextNodes: '',\n transKeepBasicHtmlNodesFor: ['br', 'strong', 'i', 'p'],\n useSuspense: true,\n unescape\n};\nexport const setDefaults = function () {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n defaultOptions = {\n ...defaultOptions,\n ...options\n };\n};\nexport const getDefaults = () => defaultOptions;","let i18nInstance;\nexport const setI18n = instance => {\n i18nInstance = instance;\n};\nexport const getI18n = () => i18nInstance;","import { createContext } from 'react';\nimport { getDefaults, setDefaults } from './defaults.js';\nimport { getI18n, setI18n } from './i18nInstance.js';\nimport { initReactI18next } from './initReactI18next.js';\nexport { getDefaults, setDefaults, getI18n, setI18n, initReactI18next };\nexport const I18nContext = createContext();\nexport class ReportNamespaces {\n constructor() {\n this.usedNamespaces = {};\n }\n addUsedNamespaces(namespaces) {\n namespaces.forEach(ns => {\n if (!this.usedNamespaces[ns]) this.usedNamespaces[ns] = true;\n });\n }\n getUsedNamespaces = () => Object.keys(this.usedNamespaces);\n}\nexport const composeInitialProps = ForComponent => async ctx => {\n const componentsInitialProps = ForComponent.getInitialProps ? await ForComponent.getInitialProps(ctx) : {};\n const i18nInitialProps = getInitialProps();\n return {\n ...componentsInitialProps,\n ...i18nInitialProps\n };\n};\nexport const getInitialProps = () => {\n const i18n = getI18n();\n const namespaces = i18n.reportNamespaces ? i18n.reportNamespaces.getUsedNamespaces() : [];\n const ret = {};\n const initialI18nStore = {};\n i18n.languages.forEach(l => {\n initialI18nStore[l] = {};\n namespaces.forEach(ns => {\n initialI18nStore[l][ns] = i18n.getResourceBundle(l, ns) || {};\n });\n });\n ret.initialI18nStore = initialI18nStore;\n ret.initialLanguage = i18n.language;\n return ret;\n};","import { useState, useEffect, useContext, useRef, useCallback } from 'react';\nimport { getI18n, getDefaults, ReportNamespaces, I18nContext } from './context.js';\nimport { warnOnce, loadNamespaces, loadLanguages, hasLoadedNamespace, isString, isObject } from './utils.js';\nconst usePrevious = (value, ignore) => {\n const ref = useRef();\n useEffect(() => {\n ref.current = ignore ? ref.current : value;\n }, [value, ignore]);\n return ref.current;\n};\nconst alwaysNewT = (i18n, language, namespace, keyPrefix) => i18n.getFixedT(language, namespace, keyPrefix);\nconst useMemoizedT = (i18n, language, namespace, keyPrefix) => useCallback(alwaysNewT(i18n, language, namespace, keyPrefix), [i18n, language, namespace, keyPrefix]);\nexport const useTranslation = function (ns) {\n let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const {\n i18n: i18nFromProps\n } = props;\n const {\n i18n: i18nFromContext,\n defaultNS: defaultNSFromContext\n } = useContext(I18nContext) || {};\n const i18n = i18nFromProps || i18nFromContext || getI18n();\n if (i18n && !i18n.reportNamespaces) i18n.reportNamespaces = new ReportNamespaces();\n if (!i18n) {\n warnOnce('You will need to pass in an i18next instance by using initReactI18next');\n const notReadyT = (k, optsOrDefaultValue) => {\n if (isString(optsOrDefaultValue)) return optsOrDefaultValue;\n if (isObject(optsOrDefaultValue) && isString(optsOrDefaultValue.defaultValue)) return optsOrDefaultValue.defaultValue;\n return Array.isArray(k) ? k[k.length - 1] : k;\n };\n const retNotReady = [notReadyT, {}, false];\n retNotReady.t = notReadyT;\n retNotReady.i18n = {};\n retNotReady.ready = false;\n return retNotReady;\n }\n if (i18n.options.react && i18n.options.react.wait !== undefined) warnOnce('It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.');\n const i18nOptions = {\n ...getDefaults(),\n ...i18n.options.react,\n ...props\n };\n const {\n useSuspense,\n keyPrefix\n } = i18nOptions;\n let namespaces = ns || defaultNSFromContext || i18n.options && i18n.options.defaultNS;\n namespaces = isString(namespaces) ? [namespaces] : namespaces || ['translation'];\n if (i18n.reportNamespaces.addUsedNamespaces) i18n.reportNamespaces.addUsedNamespaces(namespaces);\n const ready = (i18n.isInitialized || i18n.initializedStoreOnce) && namespaces.every(n => hasLoadedNamespace(n, i18n, i18nOptions));\n const memoGetT = useMemoizedT(i18n, props.lng || null, i18nOptions.nsMode === 'fallback' ? namespaces : namespaces[0], keyPrefix);\n const getT = () => memoGetT;\n const getNewT = () => alwaysNewT(i18n, props.lng || null, i18nOptions.nsMode === 'fallback' ? namespaces : namespaces[0], keyPrefix);\n const [t, setT] = useState(getT);\n let joinedNS = namespaces.join();\n if (props.lng) joinedNS = `${props.lng}${joinedNS}`;\n const previousJoinedNS = usePrevious(joinedNS);\n const isMounted = useRef(true);\n useEffect(() => {\n const {\n bindI18n,\n bindI18nStore\n } = i18nOptions;\n isMounted.current = true;\n if (!ready && !useSuspense) {\n if (props.lng) {\n loadLanguages(i18n, props.lng, namespaces, () => {\n if (isMounted.current) setT(getNewT);\n });\n } else {\n loadNamespaces(i18n, namespaces, () => {\n if (isMounted.current) setT(getNewT);\n });\n }\n }\n if (ready && previousJoinedNS && previousJoinedNS !== joinedNS && isMounted.current) {\n setT(getNewT);\n }\n const boundReset = () => {\n if (isMounted.current) setT(getNewT);\n };\n if (bindI18n && i18n) i18n.on(bindI18n, boundReset);\n if (bindI18nStore && i18n) i18n.store.on(bindI18nStore, boundReset);\n return () => {\n isMounted.current = false;\n if (bindI18n && i18n) bindI18n.split(' ').forEach(e => i18n.off(e, boundReset));\n if (bindI18nStore && i18n) bindI18nStore.split(' ').forEach(e => i18n.store.off(e, boundReset));\n };\n }, [i18n, joinedNS]);\n useEffect(() => {\n if (isMounted.current && ready) {\n setT(getT);\n }\n }, [i18n, keyPrefix, ready]);\n const ret = [t, i18n, ready];\n ret.t = t;\n ret.i18n = i18n;\n ret.ready = ready;\n if (ready) return ret;\n if (!ready && !useSuspense) return ret;\n throw new Promise(resolve => {\n if (props.lng) {\n loadLanguages(i18n, props.lng, namespaces, () => resolve());\n } else {\n loadNamespaces(i18n, namespaces, () => resolve());\n }\n });\n};","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useTranslation } from 'react-i18next';\n\nexport type ComboBoxOption = { label: string; value: string; default?: boolean };\n\nexport interface ComboBoxProps {\n /** Currently selected value */\n value?: string;\n /** Callback when selection changes */\n onChange?: (value: string | undefined) => void;\n /** Placeholder text when no value selected */\n placeholder?: string;\n /** Available options */\n options: ComboBoxOption[];\n /** Whether the combobox is disabled */\n disabled?: boolean;\n /** Label text */\n label?: string;\n /** Whether the selection can be cleared */\n clearable?: boolean;\n /** Whether typing to filter is allowed */\n allowTyping?: boolean;\n /** Dropdown placement preference */\n placement?: 'top' | 'bottom';\n /** Size variant */\n size?: 'default' | 'small';\n /** Custom styles */\n style?: React.CSSProperties;\n /** Additional CSS class names */\n className?: string;\n}\n\nfunction DropdownOption({ option, onChange, selected, highlighted, small }: { option: ComboBoxOption; onChange: (value: string) => void; selected?: boolean; highlighted?: boolean; small?: boolean }) {\n const optionRef = useRef<HTMLDivElement>(null);\n const { t } = useTranslation();\n\n // Scroll into view when highlighted\n useEffect(() => {\n if (highlighted && optionRef.current) {\n optionRef.current.scrollIntoView({ block: 'nearest' });\n }\n }, [highlighted]);\n\n return (\n <div\n ref={optionRef}\n className={`nc-combo-dropdown-option ${small ? 'nc-small' : ''} ${highlighted ? 'nc-highlighted' : ''}`}\n role=\"option\"\n onMouseDown={() => onChange(option.value)}\n aria-selected={selected}\n style={{\n cursor: 'pointer',\n background: highlighted ? 'rgba(59,130,246,0.18)' : selected ? 'rgba(59,130,246,0.12)' : undefined,\n }}\n >\n {option.label}\n {option.default && (\n <span style={{ fontSize: '0.85em', color: 'var(--nc-text-weak)', marginLeft: 6 }}>\n ({t('common.default')})\n </span>\n )}\n </div>\n );\n}\n\nfunction DropdownMenu({\n isOpen,\n options,\n onSelect,\n selectedValue,\n placement = 'bottom',\n anchorRef,\n small,\n highlightedIndex = -1,\n}: {\n isOpen: boolean;\n options: ComboBoxOption[];\n onSelect: (value: string) => void;\n selectedValue?: string;\n placement?: 'top' | 'bottom';\n anchorRef: React.RefObject<HTMLDivElement>;\n small?: boolean;\n highlightedIndex?: number;\n}) {\n const [position, setPosition] = useState({ top: 0, left: 0, width: 0 });\n const [autoPlacement, setAutoPlacement] = useState<'top' | 'bottom'>(placement);\n const { t } = useTranslation();\n\n useEffect(() => {\n if (isOpen && anchorRef.current) {\n const rect = anchorRef.current.getBoundingClientRect();\n\n // Auto-detect placement based on available space\n let finalPlacement = placement;\n if (placement === 'bottom') {\n const spaceBelow = window.innerHeight - rect.bottom;\n const spaceAbove = rect.top;\n // If not enough space below (< 320px for dropdown) and more space above, use top\n if (spaceBelow < 320 && spaceAbove > spaceBelow) {\n finalPlacement = 'top';\n }\n }\n\n setAutoPlacement(finalPlacement);\n setPosition({\n top: finalPlacement === 'top' ? rect.top - 4 : rect.bottom + 4,\n left: rect.left,\n width: rect.width,\n });\n }\n }, [isOpen, anchorRef, placement]);\n\n if (!isOpen) return null;\n\n const dropdown = (\n <div\n className=\"nc-combo-dropdown\"\n style={{\n position: 'fixed',\n top: autoPlacement === 'top' ? undefined : position.top,\n bottom: autoPlacement === 'top' ? window.innerHeight - position.top : undefined,\n left: position.left,\n width: position.width,\n zIndex: 1000,\n maxHeight: 300,\n overflowY: 'auto',\n }}\n >\n {options.length === 0 ? (\n <div className={`nc-combo-dropdown-option nc-no-results ${small ? 'nc-small' : ''}`}>{t('common.noResults')}</div>\n ) : (\n options.map((o, idx) => (\n <DropdownOption key={o.value} option={o} onChange={onSelect} selected={o.value === selectedValue} highlighted={idx === highlightedIndex} small={small} />\n ))\n )}\n </div>\n );\n\n return createPortal(dropdown, document.body);\n}\n\nfunction ClearButton({ onClick, small }: { onClick: () => void; small?: boolean }) {\n return (\n <button\n className={`nc-button nc-ghost nc-combo-button nc-combo-clear ${small ? 'nc-small' : ''}`}\n onClick={onClick}\n onMouseDown={(e) => e.stopPropagation()}\n aria-label=\"Clear selection\"\n >\n ✕\n </button>\n );\n}\n\nfunction ToggleButton({ open, onClick, small }: { open: boolean; onClick: () => void; small?: boolean }) {\n return (\n <button\n className={`nc-button nc-ghost nc-combo-button nc-combo-toggle ${small ? 'nc-small' : ''} ${open ? 'nc-open' : ''}`}\n onClick={onClick}\n onMouseDown={(e) => e.stopPropagation()}\n aria-label={open ? 'Close' : 'Open'}\n >\n ▾\n </button>\n );\n}\n\nexport function ComboBox({\n value,\n onChange,\n placeholder = 'Select…',\n options,\n disabled,\n label,\n clearable = true,\n allowTyping = false,\n placement = 'bottom',\n size = 'default',\n style,\n className,\n}: ComboBoxProps) {\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const anchorRef = useRef<HTMLDivElement | null>(null);\n const isSmall = size === 'small';\n const { t } = useTranslation();\n\n const filtered = useMemo(() => {\n const q = query.toLowerCase();\n if (!allowTyping) return options;\n return options.filter((o) => o.label.toLowerCase().includes(q));\n }, [options, query, allowTyping]);\n\n // Reset highlighted index when dropdown opens or filtered options change\n useEffect(() => {\n if (open) {\n setHighlightedIndex(-1);\n }\n }, [open, filtered]);\n\n // Auto-select first option if not clearable and no value is set\n useEffect(() => {\n if (!clearable && !value && options.length > 0 && onChange) {\n const defaultOption = options.find(o => o.default) || options[0];\n onChange(defaultOption.value);\n }\n }, [clearable, value, options, onChange]);\n\n useEffect(() => {\n function onDoc(e: MouseEvent) {\n if (!(e.target instanceof Node)) return;\n if (!inputRef.current) return;\n if (!inputRef.current.parentElement?.contains(e.target)) setOpen(false);\n }\n document.addEventListener('mousedown', onDoc);\n return () => document.removeEventListener('mousedown', onDoc);\n }, []);\n\n const selected = options.find((o) => o.value === value);\n const showClearButton = selected && clearable;\n const showToggle = !disabled && !showClearButton;\n\n const overlayVisible = !(open && allowTyping) && !!selected;\n\n const handleSelect = (newValue: string, fromKeyboard = false) => {\n onChange?.(newValue);\n setOpen(false);\n setQuery('');\n // Blur input when selecting with keyboard to ensure consistent state\n if (fromKeyboard) {\n inputRef.current?.blur();\n }\n };\n\n const handleClear = () => {\n onChange?.(undefined);\n setQuery('');\n setOpen(false);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (!open) {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n setOpen(true);\n e.preventDefault();\n }\n return;\n }\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n setHighlightedIndex((prev) => {\n const next = prev + 1;\n return next >= filtered.length ? 0 : next;\n });\n break;\n case 'ArrowUp':\n e.preventDefault();\n setHighlightedIndex((prev) => {\n const next = prev - 1;\n return next < 0 ? filtered.length - 1 : next;\n });\n break;\n case 'Enter':\n e.preventDefault();\n if (highlightedIndex >= 0 && highlightedIndex < filtered.length) {\n handleSelect(filtered[highlightedIndex].value, true);\n }\n break;\n case 'Escape':\n e.preventDefault();\n setOpen(false);\n setQuery('');\n break;\n }\n };\n\n return (\n <div className={`nc-combo-container ${className || ''}`.trim()} style={{ position: 'relative', ...style }}>\n {label && <span className={`nc-label ${isSmall ? 'nc-small' : ''}`}>{label}</span>}\n <div\n ref={anchorRef}\n style={{ position: 'relative', display: 'flex', alignItems: 'center' }}\n onMouseDown={(e) => {\n if (disabled) return;\n // Clicking on child buttons will stop propagation.\n // If typing is allowed and the click target is the input, let the input handle focus.\n if (allowTyping && e.target === inputRef.current) return;\n setOpen((s) => {\n // When opening with allowTyping, initialize query with selected label\n if (!s && allowTyping && selected) {\n setQuery(selected.label);\n }\n return !s;\n });\n // focus input only when typing is allowed and we're opening\n if (allowTyping && !open) {\n setTimeout(() => {\n inputRef.current?.focus();\n // Select all text so user can easily replace it\n inputRef.current?.select();\n }, 0);\n }\n }}\n >\n <input\n ref={inputRef}\n className={`nc-input ${isSmall ? 'nc-small' : ''}`}\n placeholder={placeholder}\n onFocus={() => {\n if (!disabled && allowTyping) {\n setOpen(true);\n // Initialize query with selected label when focusing\n if (selected) {\n setQuery(selected.label);\n setTimeout(() => inputRef.current?.select(), 0);\n }\n }\n if (!allowTyping) inputRef.current?.blur();\n }}\n onChange={(e) => allowTyping && setQuery(e.target.value)}\n onKeyDown={handleKeyDown}\n value={open && allowTyping ? query : (selected?.label || '')}\n readOnly={disabled || !allowTyping}\n style={{\n width: '100%',\n paddingRight: showToggle || showClearButton ? (isSmall ? 32 : 44) : 12,\n caretColor: allowTyping ? undefined : 'transparent',\n cursor: allowTyping ? undefined : 'pointer',\n userSelect: allowTyping ? undefined : 'none',\n color: overlayVisible ? 'transparent' : 'var(--nc-text)',\n }}\n />\n {/* When not editing, overlay the selected label and a weak \"(default)\" hint */}\n {overlayVisible && (\n <div\n aria-hidden\n style={{\n position: 'absolute',\n left: isSmall ? 8 : 12,\n right: showToggle || showClearButton ? (isSmall ? 12 : 24) : (isSmall ? 8 : 12),\n top: '50%',\n transform: 'translateY(-50%)',\n pointerEvents: 'none',\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n <span className={`nc-combo-overlay-text ${isSmall ? 'nc-small' : ''}`}>{selected?.label}</span>\n {selected?.default && <span className={`nc-combo-overlay-default ${isSmall ? 'nc-small' : ''}`}>({t('common.default')})</span>}\n </div>\n )}\n {showClearButton && <ClearButton onClick={handleClear} small={isSmall} />}\n {showToggle && <ToggleButton open={open} onClick={() => setOpen((s) => !s)} small={isSmall} />}\n </div>\n <DropdownMenu isOpen={open} options={filtered} onSelect={handleSelect} selectedValue={value} placement={placement} anchorRef={anchorRef} small={isSmall} highlightedIndex={highlightedIndex} />\n </div>\n );\n}\n","import React from 'react';\nimport { RefreshIcon, EditIcon, TrashIcon } from './icons/GeneratedIcons';\nimport { CloseIcon } from './icons/GeneratedIcons';\n\ninterface RefreshButtonProps {\n onClick: () => void;\n loading?: boolean;\n disabled?: boolean;\n size?: 'small' | 'default' | 'large';\n title?: string;\n 'aria-label'?: string;\n}\n\ninterface CloseButtonProps {\n onClick: () => void;\n disabled?: boolean;\n size?: 'small' | 'default' | 'large';\n title?: string;\n 'aria-label'?: string;\n}\n\ninterface EditButtonProps {\n onClick: () => void;\n disabled?: boolean;\n size?: 'small' | 'default' | 'large';\n title?: string;\n 'aria-label'?: string;\n}\n\ninterface TrashButtonProps {\n onClick: () => void;\n disabled?: boolean;\n size?: 'small' | 'default' | 'large';\n title?: string;\n 'aria-label'?: string;\n}\n\n/**\n * A reusable refresh button with spinning animation.\n * Shows a spinning refresh icon when loading.\n */\nexport function RefreshButton({ onClick, loading = false, disabled = false, size = 'default', title, 'aria-label': ariaLabel }: RefreshButtonProps) {\n const iconSize = size === 'small' ? 14 : size === 'large' ? 20 : 18;\n const defaultTitle = loading ? 'Refreshing...' : 'Refresh';\n const defaultAriaLabel = loading ? 'Refreshing' : 'Refresh';\n\n return (\n <button\n className=\"nc-icon-button\"\n onClick={onClick}\n disabled={disabled || loading}\n title={title ?? defaultTitle}\n aria-label={ariaLabel ?? defaultAriaLabel}\n data-size={size}\n >\n <RefreshIcon size={iconSize} className={loading ? 'nc-spinning' : ''} />\n </button>\n );\n}\n\n/**\n * A reusable close button.\n */\nexport function CloseButton({ onClick, disabled = false, size = 'default', title = 'Close', 'aria-label': ariaLabel = 'Close' }: CloseButtonProps) {\n const iconSize = size === 'small' ? 14 : size === 'large' ? 20 : 18;\n\n return (\n <button\n className=\"nc-icon-button nc-icon-button-close\"\n onClick={onClick}\n disabled={disabled}\n title={title}\n aria-label={ariaLabel}\n data-size={size}\n >\n <CloseIcon size={iconSize} />\n </button>\n );\n}\n\n/**\n * A reusable edit button.\n */\nexport function EditButton({ onClick, disabled = false, size = 'default', title = 'Edit', 'aria-label': ariaLabel = 'Edit' }: EditButtonProps) {\n const iconSize = size === 'small' ? 14 : size === 'large' ? 20 : 18;\n\n return (\n <button\n className=\"nc-icon-button nc-icon-button-edit\"\n onClick={onClick}\n disabled={disabled}\n title={title}\n aria-label={ariaLabel}\n data-size={size}\n >\n <EditIcon size={iconSize} />\n </button>\n );\n}\n\n/**\n * A reusable trash button.\n */\nexport function TrashButton({ onClick, disabled = false, size = 'default', title = 'Delete', 'aria-label': ariaLabel = 'Delete' }: TrashButtonProps) {\n const iconSize = size === 'small' ? 14 : size === 'large' ? 20 : 18;\n\n return (\n <button\n className=\"nc-icon-button nc-icon-button-trash\"\n onClick={onClick}\n disabled={disabled}\n title={title}\n aria-label={ariaLabel}\n data-size={size}\n >\n <TrashIcon size={iconSize} />\n </button>\n );\n}\n\ninterface HyperlinkProps {\n onClick?: () => void;\n disabled?: boolean;\n children: React.ReactNode;\n title?: string;\n 'aria-label'?: string;\n size?: 'small' | 'default';\n}\n\n/**\n * A reusable hyperlink component styled as text with primary color.\n * Useful for text-based actions that look like links.\n */\nexport function Hyperlink({ onClick, disabled = false, children, title, 'aria-label': ariaLabel, size = 'default' }: HyperlinkProps) {\n return (\n <button\n className=\"nc-hyperlink\"\n onClick={onClick}\n disabled={disabled}\n title={title}\n aria-label={ariaLabel}\n data-size={size}\n >\n {children}\n </button>\n );\n}\n","import React, { useEffect, useRef, useState } from 'react';\r\nimport { createPortal } from 'react-dom';\r\n\r\nexport interface ContextMenuOption {\r\n id: string;\r\n label: string;\r\n icon?: React.ReactNode;\r\n onClick: () => void;\r\n disabled?: boolean;\r\n variant?: 'default' | 'danger';\r\n}\r\n\r\nexport interface ContextMenuProps {\r\n /** Whether the context menu is open */\r\n open: boolean;\r\n /** Called when the menu should close */\r\n onClose: () => void;\r\n /** Menu options to display */\r\n options: ContextMenuOption[];\r\n /** Reference element to anchor the menu position, or the element itself */\r\n anchorRef?: React.RefObject<HTMLElement>;\r\n /** Anchor element directly (alternative to anchorRef) */\r\n anchor?: HTMLElement | null;\r\n /** Preferred direction: 'down' or 'up' (default: 'down') */\r\n preferredDirection?: 'down' | 'up';\r\n}\r\n\r\n/**\r\n * A context menu component that pops relative to an anchor element.\r\n * Automatically detects available space and positions itself accordingly.\r\n * Default position is right-down, but switches to right-up when space is limited.\r\n */\r\nexport function ContextMenu({\r\n open,\r\n onClose,\r\n options,\r\n anchorRef,\r\n anchor,\r\n preferredDirection = 'down',\r\n}: ContextMenuProps) {\r\n const menuRef = useRef<HTMLDivElement>(null);\r\n const [position, setPosition] = useState({ top: 0, left: 0 });\r\n\r\n // Get the anchor element from either ref or prop\r\n const anchorElement = anchor || anchorRef?.current;\r\n\r\n // Update menu position based on anchor and available space\r\n useEffect(() => {\r\n if (!open || !anchorElement || !menuRef.current) return;\r\n\r\n const anchorRect = anchorElement.getBoundingClientRect();\r\n const menuRect = menuRef.current.getBoundingClientRect();\r\n const viewportHeight = window.innerHeight;\r\n\r\n // Calculate position for down direction (menu below anchor)\r\n const downTop = anchorRect.bottom + 8; // 8px gap\r\n const downFits = downTop + menuRect.height <= viewportHeight - 8; // 8px bottom margin\r\n\r\n // Determine final direction\r\n let finalDirection: 'down' | 'up' = preferredDirection;\r\n if (!downFits && preferredDirection === 'down') {\r\n finalDirection = 'up';\r\n } else if (preferredDirection === 'up' && downFits) {\r\n // Only override if explicitly set to 'up' but down fits perfectly\r\n finalDirection = 'up';\r\n }\r\n\r\n // Calculate final top position\r\n let finalTop: number;\r\n if (finalDirection === 'down') {\r\n finalTop = downTop;\r\n } else {\r\n // Menu above anchor\r\n finalTop = anchorRect.top - menuRect.height - 8;\r\n }\r\n\r\n // Left position: align menu's left edge with anchor's left edge\r\n const finalLeft = anchorRect.left;\r\n\r\n setPosition({\r\n top: Math.max(8, finalTop), // Ensure minimum 8px from top\r\n left: Math.max(8, finalLeft), // Ensure minimum 8px from left\r\n });\r\n }, [open, anchorElement, preferredDirection]);\r\n\r\n // Handle clicking outside to close\r\n useEffect(() => {\r\n if (!open) return;\r\n\r\n const handleClickOutside = (e: MouseEvent) => {\r\n if (\r\n menuRef.current &&\r\n !menuRef.current.contains(e.target as Node) &&\r\n anchorElement &&\r\n !anchorElement.contains(e.target as Node)\r\n ) {\r\n onClose();\r\n }\r\n };\r\n\r\n const handleEscapeKey = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') {\r\n onClose();\r\n }\r\n };\r\n\r\n document.addEventListener('mousedown', handleClickOutside);\r\n document.addEventListener('keydown', handleEscapeKey);\r\n\r\n return () => {\r\n document.removeEventListener('mousedown', handleClickOutside);\r\n document.removeEventListener('keydown', handleEscapeKey);\r\n };\r\n }, [open, onClose, anchorElement]);\r\n\r\n if (!open) return null;\r\n\r\n const handleOptionClick = (option: ContextMenuOption) => {\r\n if (!option.disabled) {\r\n option.onClick();\r\n onClose();\r\n }\r\n };\r\n\r\n return createPortal(\r\n <div\r\n ref={menuRef}\r\n className=\"nc-context-menu\"\r\n style={{\r\n position: 'fixed',\r\n top: `${position.top}px`,\r\n left: `${position.left}px`,\r\n zIndex: 10000,\r\n }}\r\n role=\"menu\"\r\n >\r\n {options.map((option) => (\r\n <button\r\n key={option.id}\r\n className={`nc-context-menu-item ${option.variant === 'danger' ? 'nc-danger' : ''} ${option.disabled ? 'nc-disabled' : ''}`}\r\n onClick={() => handleOptionClick(option)}\r\n disabled={option.disabled}\r\n role=\"menuitem\"\r\n >\r\n {option.icon && <span className=\"nc-context-menu-icon\">{option.icon}</span>}\r\n <span className=\"nc-context-menu-label\">{option.label}</span>\r\n </button>\r\n ))}\r\n </div>,\r\n document.body\r\n );\r\n}\r\n","import React, { createContext, useContext, useEffect, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useTranslation } from 'react-i18next';\nimport { Button, ButtonProps } from './Button';\nimport { CloseButton } from './CommonButtons';\n\nexport type DialogFooterType = 'ok' | 'ok-cancel' | 'save-cancel' | 'delete-cancel' | 'connect' | 'close' | 'gotit' | 'custom' | 'none';\n\n// Dialog context for children to access dialog functions\ninterface DialogContextValue {\n /** Close the dialog */\n close: () => void;\n}\n\nconst DialogContext = createContext<DialogContextValue | null>(null);\n\n/**\n * Hook to access dialog context from within a Dialog.\n * Returns the dialog context with close() and other functions.\n * @throws Error if used outside of a Dialog component\n */\nexport function useDialog(): DialogContextValue {\n const ctx = useContext(DialogContext);\n if (!ctx) {\n throw new Error('useDialog must be used inside a Dialog component');\n }\n return ctx;\n}\n\n/**\n * A button that automatically closes the parent Dialog when clicked.\n * Accepts all Button props. Default children uses i18n 'common.close'.\n */\nexport function DialogClose({ children, onClick, ...props }: ButtonProps) {\n const { close } = useDialog();\n const { t } = useTranslation();\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n close();\n };\n\n return (\n <Button onClick={handleClick} {...props}>\n {children ?? t('common.close')}\n </Button>\n );\n}\n\nexport interface DialogProps {\n /** Whether the dialog is open */\n open: boolean;\n /** Called when the dialog should close */\n onClose: () => void;\n /** Dialog title */\n title: string;\n /** Dialog content */\n children: React.ReactNode;\n /** Dialog width - number for pixels, string for CSS value (e.g., '50vw', '80%', 'auto') */\n width?: number | string;\n /** Dialog height - number for pixels, string for CSS value (e.g., '60vh', '70%', 'auto') */\n height?: number | string;\n /** Min width - number for pixels, string for CSS value */\n minWidth?: number | string;\n /** Min height - number for pixels, string for CSS value */\n minHeight?: number | string;\n /** Max width - number for pixels, string for CSS value (default: '95vw') */\n maxWidth?: number | string;\n /** Max height - number for pixels, string for CSS value (default: '95vh') */\n maxHeight?: number | string;\n /** Footer button preset type */\n footerType?: DialogFooterType;\n /** Custom footer content (used when footerType is 'custom') */\n footer?: React.ReactNode;\n /** Called when OK button is clicked */\n onOk?: () => void;\n /** Called when Save button is clicked */\n onSave?: () => void;\n /** Called when Delete button is clicked */\n onDelete?: () => void;\n /** Called when Cancel button is clicked */\n onCancel?: () => void;\n /** Called when Connect button is clicked */\n onConnect?: () => void;\n /** Whether clicking the overlay closes the dialog (default: true) */\n closeOnOverlay?: boolean;\n /** Whether the primary action button is disabled */\n primaryDisabled?: boolean;\n /** \n * Whether to render the dialog in a portal covering the full viewport (default: false).\n * Set to true to use fixed positioning via portal to document.body.\n * Set to false to render inline with absolute positioning within parent container.\n */\n fullScreen?: boolean;\n /** Whether to hide the title bar (default: false) */\n hideTitleBar?: boolean;\n}\n\n/**\n * A reusable modal dialog component with overlay.\n * Renders in a portal to ensure proper z-index stacking.\n */\n// Helper to convert size value to CSS string\nfunction toCssSize(value: number | string | undefined): string | undefined {\n if (value === undefined) return undefined;\n return typeof value === 'number' ? `${value}px` : value;\n}\n\nexport function Dialog({\n open,\n onClose,\n title,\n children,\n width = 360,\n height,\n minWidth,\n minHeight,\n maxWidth = '95vw',\n maxHeight = '95vh',\n footerType = 'ok-cancel',\n footer,\n onOk,\n onSave,\n onDelete,\n onCancel,\n onConnect,\n closeOnOverlay = true,\n primaryDisabled = false,\n fullScreen = false,\n hideTitleBar = false,\n}: DialogProps) {\n const dialogRef = useRef<HTMLDivElement>(null);\n const { t } = useTranslation();\n\n // Context value for children to access\n const contextValue: DialogContextValue = { close: onClose };\n\n // Handle overlay click\n const handleOverlayClick = (e: React.MouseEvent) => {\n if (closeOnOverlay && e.target === e.currentTarget) {\n onClose();\n }\n };\n\n // Focus trap - focus dialog when opened\n useEffect(() => {\n if (open && dialogRef.current) {\n dialogRef.current.focus();\n }\n }, [open]);\n\n if (!open) return null;\n\n // Render footer based on footerType\n const renderFooter = () => {\n switch (footerType) {\n case 'ok':\n return (\n <div className=\"nc-dialog-footer\">\n <Button variant=\"primary\" onClick={onOk ?? onClose} disabled={primaryDisabled}>\n {t('common.ok')}\n </Button>\n </div>\n );\n case 'ok-cancel':\n return (\n <div className=\"nc-dialog-footer\">\n <Button variant=\"primary\" onClick={onOk ?? onClose} disabled={primaryDisabled}>\n {t('common.ok')}\n </Button>\n <DialogClose variant=\"ghost\" onClick={onCancel}>\n {t('common.cancel')}\n </DialogClose>\n </div>\n );\n case 'save-cancel':\n return (\n <div className=\"nc-dialog-footer\">\n <Button variant=\"primary\" onClick={onSave} disabled={primaryDisabled}>\n {t('common.save')}\n </Button>\n <DialogClose variant=\"ghost\" onClick={onCancel}>\n {t('common.cancel')}\n </DialogClose>\n </div>\n );\n case 'delete-cancel':\n return (\n <div className=\"nc-dialog-footer\">\n <Button variant=\"danger\" onClick={onDelete} disabled={primaryDisabled}>\n {t('common.delete')}\n </Button>\n <DialogClose variant=\"ghost\" onClick={onCancel}>\n {t('common.cancel')}\n </DialogClose>\n </div>\n );\n case 'connect':\n return (\n <div className=\"nc-dialog-footer\">\n <Button variant=\"primary\" onClick={onConnect} disabled={primaryDisabled}>\n {t('common.connect')}\n </Button>\n <DialogClose variant=\"ghost\" onClick={onCancel}>\n {t('common.cancel')}\n </DialogClose>\n </div>\n );\n case 'close':\n return (\n <div className=\"nc-dialog-footer\">\n <DialogClose variant=\"primary\" />\n </div>\n );\n case 'gotit':\n return (\n <div className=\"nc-dialog-footer\">\n <DialogClose variant=\"primary\">\n {t('common.gotit')}\n </DialogClose>\n </div>\n );\n case 'custom':\n return <div className=\"nc-dialog-footer\">{footer}</div>;\n case 'none':\n return null;\n default:\n return null;\n }\n };\n\n const dialogContent = (\n <DialogContext.Provider value={contextValue}>\n <div className={`nc-dialog-overlay${fullScreen ? ' nc-fullscreen' : ''}`} onClick={handleOverlayClick}>\n <div\n ref={dialogRef}\n className=\"nc-dialog-container\"\n style={{\n width: toCssSize(width),\n height: toCssSize(height),\n minWidth: toCssSize(minWidth),\n minHeight: toCssSize(minHeight),\n maxWidth: toCssSize(maxWidth),\n maxHeight: toCssSize(maxHeight),\n }}\n tabIndex={-1}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={hideTitleBar ? undefined : \"nc-dialog-title\"}\n >\n {!hideTitleBar && (\n <div className=\"nc-dialog-header\">\n <h3 id=\"nc-dialog-title\" className=\"nc-dialog-title\">{title}</h3>\n <CloseButton onClick={onClose} aria-label=\"Close dialog\" />\n </div>\n )}\n <div className=\"nc-dialog-content\">\n {children}\n </div>\n {renderFooter()}\n </div>\n </div>\n </DialogContext.Provider>\n );\n\n // Render in a portal (default) for proper viewport positioning, or inline if fullScreen=false\n if (fullScreen) {\n return createPortal(dialogContent, document.body);\n }\n return dialogContent;\n}\n","import React, { useRef, useState } from 'react';\nimport { ViewIcon, EyeHiddenIcon } from './icons';\n\nexport interface InputProps {\n /** Current value of the input */\n value?: string;\n /** Callback when value changes */\n onChange?: (value: string) => void;\n /** Callback when Enter key is pressed */\n onEnter?: () => void;\n /** Callback when input is cleared */\n onClear?: () => void;\n /** Placeholder text */\n placeholder?: string;\n /** Whether the input is disabled */\n disabled?: boolean;\n /** Label text displayed above the input */\n label?: string;\n /** Whether to show a clear button when there's a value */\n clearable?: boolean;\n /** Input type (text, password, email, etc.) */\n type?: string;\n /** Additional CSS class names */\n className?: string;\n /** Size variant */\n size?: 'default' | 'small';\n /** Additional inline styles */\n style?: React.CSSProperties;\n /** Whether to show a toggle button for password visibility (only works when type is 'password') */\n showPasswordToggle?: boolean;\n /** Whether to use a textarea for multiline input */\n multiline?: boolean;\n /** Number of rows for multiline input */\n rows?: number;\n}\n\nfunction ClearButton({ onClick, size = 'default', rightOffset = 4 }: { onClick: () => void; size?: 'default' | 'small'; rightOffset?: number }) {\n const buttonSize = size === 'small' ? 28 : 34;\n return (\n <button\n className=\"nc-button nc-ghost\"\n onClick={onClick}\n onMouseDown={(e) => e.stopPropagation()}\n tabIndex={-1}\n aria-label=\"Clear input\"\n style={{\n position: 'absolute',\n right: rightOffset,\n padding: 0,\n minHeight: 0,\n height: buttonSize,\n width: buttonSize,\n border: 'none',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: size === 'small' ? '12px' : '14px',\n }}\n >\n ✕\n </button>\n );\n}\n\nfunction TogglePasswordButton({ visible, onClick, size = 'default' }: { visible: boolean; onClick: () => void; size?: 'default' | 'small' }) {\n const buttonSize = size === 'small' ? 28 : 34;\n const iconSize = size === 'small' ? 16 : 18;\n return (\n <button\n className=\"nc-button nc-ghost\"\n onClick={onClick}\n onMouseDown={(e) => e.stopPropagation()}\n tabIndex={-1}\n aria-label={visible ? 'Hide password' : 'Show password'}\n style={{\n position: 'absolute',\n right: 4,\n padding: 0,\n minHeight: 0,\n height: buttonSize,\n width: buttonSize,\n border: 'none',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {visible ? <EyeHiddenIcon size={iconSize} /> : <ViewIcon size={iconSize} />}\n </button>\n );\n}\n\nexport function Input({\n value = '',\n onChange,\n onEnter,\n onClear,\n placeholder,\n disabled,\n label,\n clearable = true,\n type = 'text',\n className = '',\n size = 'default',\n style,\n showPasswordToggle = false,\n multiline = false,\n rows = 3,\n}: InputProps) {\n const inputRef = useRef<HTMLInputElement | null>(null);\n const textareaRef = useRef<HTMLTextAreaElement | null>(null);\n const [passwordVisible, setPasswordVisible] = useState(false);\n\n const isPasswordType = type === 'password';\n const showToggle = isPasswordType && showPasswordToggle && !disabled && !multiline;\n const showClearButton = clearable && value && !disabled;\n\n const buttonWidth = size === 'small' ? 32 : 44;\n let paddingRight = 12;\n if (showClearButton && showToggle) {\n paddingRight = buttonWidth * 2;\n } else if (showClearButton || showToggle) {\n paddingRight = buttonWidth;\n }\n\n const handleClear = () => {\n onChange?.('');\n onClear?.();\n if (multiline) {\n textareaRef.current?.focus();\n } else {\n inputRef.current?.focus();\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n if (e.key === 'Enter' && !multiline) {\n onEnter?.();\n }\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n onChange?.(e.target.value);\n };\n\n const inputClassName = `nc-input ${size === 'small' ? `nc-small ` : ''} ${className}`;\n\n return (\n <div className=\"nc-col\" style={{ position: 'relative', flex: 1, ...style }}>\n {label && <span className=\"nc-label\">{label}</span>}\n <div style={{ position: 'relative', display: 'flex', alignItems: multiline ? 'flex-start' : 'center' }}>\n {multiline ? (\n <textarea\n ref={textareaRef}\n className={inputClassName}\n placeholder={placeholder}\n value={value}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n rows={rows}\n style={{\n width: '100%',\n paddingRight,\n resize: 'vertical',\n }}\n />\n ) : (\n <input\n ref={inputRef}\n type={isPasswordType && passwordVisible ? 'text' : type}\n className={inputClassName}\n placeholder={placeholder}\n value={value}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n style={{\n width: '100%',\n paddingRight,\n }}\n />\n )}\n {showClearButton && <ClearButton onClick={handleClear} size={size} rightOffset={showToggle ? buttonWidth + 4 : 4} />}\n {showToggle && <TogglePasswordButton visible={passwordVisible} onClick={() => setPasswordVisible(!passwordVisible)} size={size} />}\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nexport interface ListGroupItemProps {\n /** Content of the list item */\n children: React.ReactNode;\n /** Click handler for the item */\n onClick?: (e: React.MouseEvent<HTMLDivElement>) => void;\n /** Whether to show bottom border (default: true) */\n showBorder?: boolean;\n /** Whether text should be selectable (default: false) */\n selectable?: boolean;\n /** Optional CSS styles to apply to the item */\n style?: React.CSSProperties;\n}\n\n/**\n * A single item within a ListGroup.\n * Can contain any content - fully flexible.\n */\nexport function ListGroupItem({\n children,\n onClick,\n showBorder = true,\n selectable = false,\n style,\n}: ListGroupItemProps) {\n const [isPressed, setIsPressed] = React.useState(false);\n\n const handleClick = (e: React.MouseEvent<HTMLDivElement>) => {\n if (!onClick) return;\n\n // If selectable, don't trigger click when user is selecting text\n if (selectable) {\n const selection = window.getSelection();\n if (selection && selection.toString().length > 0) {\n return;\n }\n }\n onClick(e);\n };\n\n return (\n <div\n onClick={handleClick}\n onMouseDown={() => onClick && setIsPressed(true)}\n onMouseUp={() => setIsPressed(false)}\n onMouseLeave={() => setIsPressed(false)}\n style={{\n cursor: onClick ? 'pointer' : 'default',\n userSelect: selectable ? 'text' : undefined,\n borderBottom: showBorder ? undefined : 'none',\n ...style,\n }}\n className={`nc-list-group-item ${onClick ? 'nc-list-group-item-clickable' : ''} ${isPressed ? 'nc-list-group-item-active' : ''}`}\n >\n <div style={{ flex: 1 }}>{children}</div>\n </div>\n );\n}\n\nexport interface ListGroupProps {\n /** Optional group title */\n title?: string;\n /** Optional tools rendered on the title row (e.g., buttons) */\n titleTools?: React.ReactNode;\n /** Group content (ListGroupItem components or any other content) */\n children: React.ReactNode;\n /** Optional CSS styles to apply to the container */\n style?: React.CSSProperties;\n}\n\n/**\n * A container for grouping list items with a rounded border.\n * Similar to iOS-style grouped lists or Windows 11 settings groups.\n */\nexport function ListGroup({ title, titleTools, children, style }: ListGroupProps) {\n return (\n <div className=\"nc-list-group\" style={style}>\n {(title || titleTools) && (\n <div className='nc-list-group-title'>\n <div>{title}</div>\n {titleTools && (\n <div className=\"nc-list-group-title-tools\">\n {titleTools}\n </div>\n )}\n </div>\n )}\n <div\n className=\"nc-list-group-content\"\n >\n {children}\n </div>\n </div>\n );\n}\n","import { useEffect, useMemo, useRef, useState } from 'react';\n\ntype Option = { label: string; value: string };\n\nexport interface MultiSelectProps {\n /** Array of currently selected values */\n values: string[];\n /** Callback when selection changes */\n onChange: (values: string[]) => void;\n /** Available options to select from */\n options: Option[];\n /** Placeholder text when no items are selected */\n placeholder?: string;\n /** Label text displayed above the select */\n label?: string;\n}\n\nexport function MultiSelect({ values, onChange, options, placeholder = 'Select…', label }: MultiSelectProps) {\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n const ref = useRef<HTMLDivElement | null>(null);\n const filtered = useMemo(() => options.filter((o) => o.label.toLowerCase().includes(query.toLowerCase())), [options, query]);\n\n useEffect(() => {\n function onDoc(e: MouseEvent) {\n if (!(e.target instanceof Node) || !ref.current) return;\n if (!ref.current.contains(e.target)) setOpen(false);\n }\n document.addEventListener('mousedown', onDoc);\n return () => document.removeEventListener('mousedown', onDoc);\n }, []);\n\n const toggle = (v: string) => {\n if (values.includes(v)) onChange(values.filter((x) => x !== v));\n else onChange([...values, v]);\n };\n\n return (\n <div ref={ref} className=\"nc-col\" style={{ position: 'relative' }}>\n {label && <span className=\"nc-label\">{label}</span>}\n <div className=\"nc-row\" style={{ flexWrap: 'wrap', gap: 6, minHeight: 42, alignItems: 'center', border: '1px solid var(--nc-button-border)', borderRadius: 8, background: 'var(--nc-button-bg)', padding: '4px 8px' }}>\n {values.length === 0 && <span className=\"nc-label\">{placeholder}</span>}\n {values.map((v) => {\n const o = options.find((o) => o.value === v);\n if (!o) return null;\n return (\n <span key={v} style={{ padding: '4px 8px', borderRadius: 6, display: 'inline-flex', alignItems: 'center', gap: 4, background: 'var(--nc-button-bg)', border: '1px solid var(--nc-button-border)' }}>\n {o.label}\n <button\n className=\"nc-button nc-ghost\"\n style={{ padding: 0, minHeight: 0, height: 20, width: 20, display: 'inline-flex', alignItems: 'center', justifyContent: 'center', border: 'none' }}\n onClick={() => toggle(v)}\n aria-label={`Remove ${o.label}`}\n >\n ✕\n </button>\n </span>\n );\n })}\n <input\n className=\"nc-input\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n onFocus={() => setOpen(true)}\n style={{ minWidth: 50, border: 'none', background: 'transparent', padding: 4, minHeight: 32, flex: 1 }}\n />\n </div>\n {open && (\n <div className=\"nc-combo-dropdown\" style={{ position: 'absolute', top: '100%', left: 0, right: 0, zIndex: 10, marginTop: 4, boxShadow: '0 4px 12px var(--nc-shadow)' }}>\n {filtered.map((o) => {\n const selected = values.includes(o.value);\n return (\n <div key={o.value} className=\"nc-section nc-row\" style={{ justifyContent: 'space-between', cursor: 'pointer', padding: 12 }} onMouseDown={() => toggle(o.value)}>\n <span>{o.label}</span>\n <span>{selected ? '✔️' : ''}</span>\n </div>\n );\n })}\n {filtered.length === 0 && <div className=\"nc-section nc-label\">No results</div>}\n </div>\n )}\n </div>\n );\n}\n","import React from 'react';\n\nexport interface NumberInputProps {\n /** Current numeric value */\n value: number;\n /** Callback when value changes */\n onChange: (value: number) => void;\n /** Minimum allowed value */\n min?: number;\n /** Maximum allowed value */\n max?: number;\n /** Step increment/decrement value */\n step?: number;\n /** Label text displayed above the input */\n label?: string;\n /** Whether the input is disabled */\n disabled?: boolean;\n /** Size variant */\n size?: 'default' | 'small';\n}\n\nexport function NumberInput({ value, onChange, min, max, step = 1, label, disabled, size = 'default' }: NumberInputProps) {\n const isSmall = size === 'small';\n\n const decrement = () => {\n const newValue = value - step;\n if (min !== undefined && newValue < min) return;\n onChange(parseFloat(newValue.toFixed(10))); // Avoid floating point precision issues\n };\n\n const increment = () => {\n const newValue = value + step;\n if (max !== undefined && newValue > max) return;\n onChange(parseFloat(newValue.toFixed(10)));\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = parseFloat(e.target.value);\n if (isNaN(newValue)) return;\n if (min !== undefined && newValue < min) return;\n if (max !== undefined && newValue > max) return;\n onChange(newValue);\n };\n\n return (\n <div className={`nc-col nc-number-input-col ${isSmall ? 'nc-small' : ''}`}>\n {label && <span className={`nc-label ${isSmall ? 'nc-small' : ''}`}>{label}</span>}\n <div className={`nc-number-input-container ${isSmall ? 'nc-small' : ''}`}>\n <input\n className={`nc-input nc-number-input ${isSmall ? 'nc-small' : ''}`}\n type=\"number\"\n value={value}\n onChange={handleInputChange}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n />\n <button\n className={`nc-button nc-ghost nc-number-input-button ${isSmall ? 'nc-small' : ''}`}\n onClick={decrement}\n disabled={disabled || (min !== undefined && value <= min)}\n >\n −\n </button>\n <button\n className={`nc-button nc-ghost nc-number-input-button ${isSmall ? 'nc-small' : ''}`}\n onClick={increment}\n disabled={disabled || (max !== undefined && value >= max)}\n >\n +\n </button>\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nexport interface SliderProps {\n /** Current value */\n value: number;\n /** Callback when value changes */\n onChange: (value: number) => void;\n /** Minimum value */\n min?: number;\n /** Maximum value */\n max?: number;\n /** Step increment */\n step?: number;\n /** Label text displayed above the slider */\n label?: string;\n /** Whether the slider is disabled */\n disabled?: boolean;\n /** Whether to show the current value next to the slider */\n showValue?: boolean;\n /** Custom formatter for displaying the value */\n formatValue?: (value: number) => string;\n /** Width of the slider track */\n width?: number | string;\n}\n\nexport function Slider({\n value,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n label,\n disabled,\n showValue = true,\n formatValue = (v) => v.toString(),\n width = 200,\n}: SliderProps) {\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = parseFloat(e.target.value);\n onChange(newValue);\n };\n\n // Calculate percentage for styling the track\n const percentage = ((value - min) / (max - min)) * 100;\n\n return (\n <div className=\"nc-col\" style={{ gap: 6 }}>\n {label && <span className=\"nc-label\">{label}</span>}\n <div style={{ display: 'flex', gap: 12, alignItems: 'center' }}>\n <input\n type=\"range\"\n className=\"nc-slider\"\n value={value}\n onChange={handleChange}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n style={{\n width,\n '--nc-slider-percentage': `${percentage}%`,\n } as React.CSSProperties}\n />\n {showValue && (\n <span\n style={{\n color: 'var(--nc-text)',\n fontFamily: 'monospace',\n fontSize: 14,\n minWidth: 60,\n textAlign: 'right',\n }}\n >\n {formatValue(value)}\n </span>\n )}\n </div>\n </div>\n );\n}\n","import React, { useRef, useState, useEffect } from 'react';\nimport { ChevronLeftIcon, ChevronRightIcon, ChevronDownIcon } from './icons';\n\n// ChevronUpIcon - defined inline since it's not in GeneratedIcons\nconst ChevronUpIcon = ({ size = 24, className, style }: { size?: number; className?: string; style?: React.CSSProperties }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className} style={style}>\n <polyline points=\"18 15 12 9 6 15\" />\n </svg>\n);\n\nexport interface TabsProps {\n /** Array of tab labels */\n tabs: string[];\n /** Currently active tab label */\n active: string;\n /** Callback when a tab is selected */\n onChange: (tab: string) => void;\n /** Additional CSS class name for the container */\n className?: string;\n /** Optional toolbar content rendered at the end of the tab bar */\n toolbar?: React.ReactNode;\n /** Whether tabs should wrap to multiple lines */\n multiline?: boolean;\n /** Tab orientation: horizontal (default), verticalLeft, or verticalRight */\n orientation?: 'horizontal' | 'verticalLeft' | 'verticalRight';\n /** Additional inline styles */\n style?: React.CSSProperties;\n}\n\nexport function Tabs({ tabs, active, onChange, className, toolbar, multiline, orientation = 'horizontal', style }: TabsProps) {\n const scrollRef = useRef<HTMLDivElement>(null);\n const [canScrollStart, setCanScrollStart] = useState(false);\n const [canScrollEnd, setCanScrollEnd] = useState(false);\n const isVertical = orientation === 'verticalLeft' || orientation === 'verticalRight';\n\n // Mouse drag scrolling state\n const isDragging = useRef(false);\n const startPos = useRef(0);\n const scrollStartPos = useRef(0);\n const hasDragged = useRef(false);\n\n useEffect(() => {\n const checkScroll = () => {\n if (scrollRef.current) {\n if (isVertical) {\n const { scrollTop, scrollHeight, clientHeight } = scrollRef.current;\n setCanScrollStart(scrollTop > 1);\n setCanScrollEnd(scrollTop < scrollHeight - clientHeight - 1);\n } else {\n const { scrollLeft, scrollWidth, clientWidth } = scrollRef.current;\n setCanScrollStart(scrollLeft > 1);\n setCanScrollEnd(scrollLeft < scrollWidth - clientWidth - 1);\n }\n }\n };\n\n const el = scrollRef.current;\n if (el) {\n checkScroll();\n el.addEventListener('scroll', checkScroll);\n window.addEventListener('resize', checkScroll);\n return () => {\n el.removeEventListener('scroll', checkScroll);\n window.removeEventListener('resize', checkScroll);\n };\n }\n }, [tabs, isVertical]);\n\n // Mouse drag scrolling handlers\n const handleMouseDown = (e: React.MouseEvent) => {\n if (!scrollRef.current) return;\n isDragging.current = true;\n hasDragged.current = false;\n startPos.current = isVertical ? e.clientY : e.clientX;\n scrollStartPos.current = isVertical ? scrollRef.current.scrollTop : scrollRef.current.scrollLeft;\n scrollRef.current.style.cursor = 'grabbing';\n scrollRef.current.style.userSelect = 'none';\n };\n\n const handleMouseMove = (e: React.MouseEvent) => {\n if (!isDragging.current || !scrollRef.current) return;\n const currentPos = isVertical ? e.clientY : e.clientX;\n const diff = startPos.current - currentPos;\n if (Math.abs(diff) > 3) hasDragged.current = true;\n if (isVertical) {\n scrollRef.current.scrollTop = scrollStartPos.current + diff;\n } else {\n scrollRef.current.scrollLeft = scrollStartPos.current + diff;\n }\n };\n\n const handleMouseUp = () => {\n if (!scrollRef.current) return;\n isDragging.current = false;\n scrollRef.current.style.cursor = '';\n scrollRef.current.style.userSelect = '';\n };\n\n const handleMouseLeave = () => {\n handleMouseUp();\n };\n\n // Convert vertical wheel to horizontal scroll in horizontal mode\n useEffect(() => {\n const el = scrollRef.current;\n if (!el || isVertical) return;\n\n const handleWheel = (e: WheelEvent) => {\n if (e.deltaY !== 0) {\n e.preventDefault();\n el.scrollLeft += e.deltaY * 0.3;\n }\n };\n\n el.addEventListener('wheel', handleWheel, { passive: false });\n return () => {\n el.removeEventListener('wheel', handleWheel);\n };\n }, [isVertical]);\n\n const handleTabClick = (tab: string) => {\n // Ignore click if user was dragging\n if (hasDragged.current) return;\n onChange(tab);\n };\n\n return (\n <div className={`nc-tab-container ${isVertical ? `nc-vertical nc-${orientation}` : ''} ${className || ''}`} style={style}>\n <div className=\"nc-tab-scroll-wrapper\">\n {canScrollStart && (\n <div className={`nc-tab-scroll-indicator ${isVertical ? 'nc-top' : 'nc-left'}`}>\n {isVertical ? <ChevronUpIcon size={16} /> : <ChevronLeftIcon size={16} />}\n </div>\n )}\n <div\n ref={scrollRef}\n className={`nc-tab-scroll ${multiline ? 'nc-multiline' : ''}`}\n onMouseDown={handleMouseDown}\n onMouseMove={handleMouseMove}\n onMouseUp={handleMouseUp}\n onMouseLeave={handleMouseLeave}\n style={{ cursor: 'grab' }}\n >\n {tabs.map((t) => (\n <div\n key={t}\n className={`nc-tab-item ${active === t ? 'nc-active' : ''}`}\n onClick={() => handleTabClick(t)}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') onChange(t); }}\n >\n {isVertical ? t : t.toUpperCase()}\n </div>\n ))}\n </div>\n {canScrollEnd && (\n <div className={`nc-tab-scroll-indicator ${isVertical ? 'nc-bottom' : 'nc-right'}`}>\n {isVertical ? <ChevronDownIcon size={16} /> : <ChevronRightIcon size={16} />}\n </div>\n )}\n </div>\n {toolbar && (\n <div className=\"nc-tab-toolbar\">\n {toolbar}\n </div>\n )}\n </div>\n );\n}\n\nexport default Tabs;\n","export interface ToggleProps {\n /** Whether the toggle is checked/on */\n checked: boolean;\n /** Callback when toggle state changes */\n onChange: (value: boolean) => void;\n /** Whether the toggle is disabled */\n disabled?: boolean;\n /** Label text displayed next to the toggle */\n label?: string;\n}\n\nexport function Toggle({ checked, onChange, disabled, label }: ToggleProps) {\n return (\n <label\n className=\"nc-row\"\n style={{ gap: 10, alignItems: 'center', cursor: disabled ? 'not-allowed' : 'pointer' }}\n >\n {label && <span className=\"nc-label\">{label}</span>}\n\n <span\n role=\"switch\"\n aria-checked={checked}\n tabIndex={0}\n onKeyDown={(e) => {\n if (disabled) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onChange(!checked);\n }\n }}\n onClick={() => !disabled && onChange(!checked)}\n style={{\n position: 'relative',\n width: 56,\n height: 30,\n borderRadius: 18,\n padding: 4,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n border: `2px solid ${checked ? 'var(--nc-primary)' : 'var(--nc-button-border)'}`,\n background: checked ? 'rgba(99,102,241,0.08)' : 'transparent',\n transition: 'border-color 160ms, background 160ms',\n }}\n >\n {/* thumb */}\n <span\n style={{\n width: 22,\n height: 22,\n borderRadius: 12,\n background: checked ? 'var(--nc-text)' : 'var(--nc-muted)',\n transform: `translateX(${checked ? 24 : 0}px)`,\n transition: 'transform 160ms, background 160ms',\n boxShadow: checked ? '0 2px 6px rgba(99,102,241,0.28)' : '0 1px 2px rgba(0,0,0,0.08)',\n border: 'none',\n }}\n />\n </span>\n </label>\n );\n}\n\nexport default Toggle;\n","export interface Notification {\n id: string;\n title?: string;\n message: string;\n type?: 'warning' | 'danger' | 'success' | null;\n dismissible?: boolean;\n lastingTime?: number; // in milliseconds\n isRemoving?: boolean; // Internal flag for fade animation\n}\n\ntype Subscriber = (notifications: Notification[]) => void;\n\nlet state: { notifications: Notification[] } = { notifications: [] };\nconst subscribers = new Set<Subscriber>();\nconst removalTimeouts = new Map<string, number>();\n\nfunction notify() {\n const snap = state.notifications.slice();\n for (const s of Array.from(subscribers)) {\n try {\n s(snap);\n } catch (e) {\n // ignore subscriber errors\n }\n }\n}\n\nexport function subscribe(fn: Subscriber) {\n subscribers.add(fn);\n try {\n fn(state.notifications.slice());\n } catch (e) {\n // ignore\n }\n return () => {\n subscribers.delete(fn);\n };\n}\n\nexport function addNotification(notification: Omit<Notification, 'id'>): string {\n const id = `notification-${Date.now()}-${Math.random()}`;\n const newNotification: Notification = {\n id,\n dismissible: true,\n lastingTime: 5000,\n ...notification,\n };\n\n state.notifications = [newNotification, ...state.notifications];\n notify();\n\n // Auto-remove after lastingTime if specified\n if (newNotification.lastingTime && newNotification.lastingTime > 0) {\n setTimeout(() => {\n removeNotification(id);\n }, newNotification.lastingTime);\n }\n\n return id;\n}\n\nexport function removeNotification(id: string): void {\n // Mark notification as removing (for fade animation)\n const notification = state.notifications.find((n) => n.id === id);\n if (!notification) return;\n\n notification.isRemoving = true;\n notify();\n\n // Actually remove after animation duration\n const timeoutId = window.setTimeout(() => {\n state.notifications = state.notifications.filter((n) => n.id !== id);\n notify();\n removalTimeouts.delete(id);\n }, 300); // Match the CSS transition duration\n\n removalTimeouts.set(id, timeoutId);\n}\n","import { useTranslation } from 'react-i18next';\nimport { CloseIcon } from './icons/GeneratedIcons';\nimport { Notification as NotificationType, removeNotification } from '../stores/notificationStore';\n\ninterface NotificationProps {\n notification: NotificationType;\n}\n\nexport function Notification({ notification }: NotificationProps) {\n const { t } = useTranslation();\n\n // Determine title based on type if not provided\n const getTitle = () => {\n if (notification.title) return notification.title;\n\n switch (notification.type) {\n case 'success':\n return t('common.success');\n case 'danger':\n return t('common.error');\n case 'warning':\n return t('common.warning');\n default:\n return t('common.info');\n }\n };\n\n const handleDismiss = () => {\n removeNotification(notification.id);\n };\n\n return (\n <div\n className={`nc-notification nc-notification-${notification.type || 'info'}`}\n >\n <div className=\"nc-notification-content\">\n <div className=\"nc-notification-body\" style={{ paddingRight: notification.dismissible ? '8px' : '0' }}>\n <div className=\"nc-notification-title\">\n {getTitle()}\n </div>\n <div className=\"nc-notification-message\">\n {notification.message}\n </div>\n </div>\n {notification.dismissible && (\n <button\n className=\"nc-notification-dismiss\"\n onClick={handleDismiss}\n >\n <CloseIcon size={16} />\n </button>\n )}\n </div>\n </div>\n );\n}\n","import { useEffect, useState, useRef } from 'react';\nimport { subscribe, Notification as NotificationType } from '../stores/notificationStore';\nimport { Notification } from './Notification';\n\nexport function NotificationContainer() {\n const [notifications, setNotifications] = useState<NotificationType[]>([]);\n const [positions, setPositions] = useState<Map<string, number>>(new Map());\n const [entering, setEntering] = useState<Set<string>>(new Set());\n const containerRef = useRef<HTMLDivElement>(null);\n const prevNotificationsRef = useRef<NotificationType[]>([]);\n\n useEffect(() => {\n const unsubscribe = subscribe((notifs) => {\n // Detect new notifications\n const prevIds = new Set(prevNotificationsRef.current.map(n => n.id));\n const newIds = notifs.filter(n => !prevIds.has(n.id)).map(n => n.id);\n\n if (newIds.length > 0) {\n // Add new notifications immediately\n setNotifications(notifs);\n setEntering(new Set(newIds));\n\n // Trigger animation on next frame\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n setEntering(new Set());\n });\n });\n } else {\n setNotifications(notifs);\n }\n\n prevNotificationsRef.current = notifs;\n });\n return unsubscribe;\n }, []);\n\n // Calculate positions for each notification based on their rendered heights\n useEffect(() => {\n if (!containerRef.current) return;\n\n const newPositions = new Map<string, number>();\n let currentY = 0;\n\n const children = containerRef.current.children;\n\n // Calculate positions for all notifications\n notifications.forEach((notif, index) => {\n newPositions.set(notif.id, currentY);\n if (children[index]) {\n const height = (children[index] as HTMLElement).offsetHeight;\n // Only add gap if not removing (collapsing space)\n if (!notif.isRemoving) {\n currentY += height + 12; // 12px gap between notifications\n }\n }\n });\n\n setPositions(newPositions);\n }, [notifications]);\n\n return (\n <div\n style={{\n position: 'fixed',\n top: '16px',\n left: '16px',\n zIndex: 9999,\n pointerEvents: 'none',\n }}\n >\n <div\n ref={containerRef}\n style={{\n pointerEvents: 'auto',\n position: 'relative',\n }}\n >\n {notifications.map((notification) => {\n const isEntering = entering.has(notification.id);\n const isLeaving = notification.isRemoving;\n const targetY = positions.get(notification.id) || 0;\n\n return (\n <div\n key={notification.id}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n transform: isEntering\n ? `translateY(-120px)`\n : `translateY(${targetY}px)`,\n // Only animate transform when not leaving, animate opacity always\n transition: isLeaving\n ? 'opacity 300ms ease-out'\n : 'transform 300ms ease-out, opacity 300ms ease-out',\n opacity: isLeaving ? 0 : 1,\n width: '100%',\n }}\n >\n <Notification notification={notification} />\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","import {\n addNotification,\n type Notification,\n} from '../stores/notificationStore';\n\nexport const notificationManager = {\n show: (notification: Omit<Notification, 'id'>): string => {\n return addNotification(notification);\n },\n};\n","const isString = obj => typeof obj === 'string';\nconst defer = () => {\n let res;\n let rej;\n const promise = new Promise((resolve, reject) => {\n res = resolve;\n rej = reject;\n });\n promise.resolve = res;\n promise.reject = rej;\n return promise;\n};\nconst makeString = object => {\n if (object == null) return '';\n return '' + object;\n};\nconst copy = (a, s, t) => {\n a.forEach(m => {\n if (s[m]) t[m] = s[m];\n });\n};\nconst lastOfPathSeparatorRegExp = /###/g;\nconst cleanKey = key => key && key.indexOf('###') > -1 ? key.replace(lastOfPathSeparatorRegExp, '.') : key;\nconst canNotTraverseDeeper = object => !object || isString(object);\nconst getLastOfPath = (object, path, Empty) => {\n const stack = !isString(path) ? path : path.split('.');\n let stackIndex = 0;\n while (stackIndex < stack.length - 1) {\n if (canNotTraverseDeeper(object)) return {};\n const key = cleanKey(stack[stackIndex]);\n if (!object[key] && Empty) object[key] = new Empty();\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n object = object[key];\n } else {\n object = {};\n }\n ++stackIndex;\n }\n if (canNotTraverseDeeper(object)) return {};\n return {\n obj: object,\n k: cleanKey(stack[stackIndex])\n };\n};\nconst setPath = (object, path, newValue) => {\n const {\n obj,\n k\n } = getLastOfPath(object, path, Object);\n if (obj !== undefined || path.length === 1) {\n obj[k] = newValue;\n return;\n }\n let e = path[path.length - 1];\n let p = path.slice(0, path.length - 1);\n let last = getLastOfPath(object, p, Object);\n while (last.obj === undefined && p.length) {\n e = `${p[p.length - 1]}.${e}`;\n p = p.slice(0, p.length - 1);\n last = getLastOfPath(object, p, Object);\n if (last && last.obj && typeof last.obj[`${last.k}.${e}`] !== 'undefined') {\n last.obj = undefined;\n }\n }\n last.obj[`${last.k}.${e}`] = newValue;\n};\nconst pushPath = (object, path, newValue, concat) => {\n const {\n obj,\n k\n } = getLastOfPath(object, path, Object);\n obj[k] = obj[k] || [];\n obj[k].push(newValue);\n};\nconst getPath = (object, path) => {\n const {\n obj,\n k\n } = getLastOfPath(object, path);\n if (!obj) return undefined;\n return obj[k];\n};\nconst getPathWithDefaults = (data, defaultData, key) => {\n const value = getPath(data, key);\n if (value !== undefined) {\n return value;\n }\n return getPath(defaultData, key);\n};\nconst deepExtend = (target, source, overwrite) => {\n for (const prop in source) {\n if (prop !== '__proto__' && prop !== 'constructor') {\n if (prop in target) {\n if (isString(target[prop]) || target[prop] instanceof String || isString(source[prop]) || source[prop] instanceof String) {\n if (overwrite) target[prop] = source[prop];\n } else {\n deepExtend(target[prop], source[prop], overwrite);\n }\n } else {\n target[prop] = source[prop];\n }\n }\n }\n return target;\n};\nconst regexEscape = str => str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\nvar _entityMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n};\nconst escape = data => {\n if (isString(data)) {\n return data.replace(/[&<>\"'\\/]/g, s => _entityMap[s]);\n }\n return data;\n};\nclass RegExpCache {\n constructor(capacity) {\n this.capacity = capacity;\n this.regExpMap = new Map();\n this.regExpQueue = [];\n }\n getRegExp(pattern) {\n const regExpFromCache = this.regExpMap.get(pattern);\n if (regExpFromCache !== undefined) {\n return regExpFromCache;\n }\n const regExpNew = new RegExp(pattern);\n if (this.regExpQueue.length === this.capacity) {\n this.regExpMap.delete(this.regExpQueue.shift());\n }\n this.regExpMap.set(pattern, regExpNew);\n this.regExpQueue.push(pattern);\n return regExpNew;\n }\n}\nconst chars = [' ', ',', '?', '!', ';'];\nconst looksLikeObjectPathRegExpCache = new RegExpCache(20);\nconst looksLikeObjectPath = (key, nsSeparator, keySeparator) => {\n nsSeparator = nsSeparator || '';\n keySeparator = keySeparator || '';\n const possibleChars = chars.filter(c => nsSeparator.indexOf(c) < 0 && keySeparator.indexOf(c) < 0);\n if (possibleChars.length === 0) return true;\n const r = looksLikeObjectPathRegExpCache.getRegExp(`(${possibleChars.map(c => c === '?' ? '\\\\?' : c).join('|')})`);\n let matched = !r.test(key);\n if (!matched) {\n const ki = key.indexOf(keySeparator);\n if (ki > 0 && !r.test(key.substring(0, ki))) {\n matched = true;\n }\n }\n return matched;\n};\nconst deepFind = function (obj, path) {\n let keySeparator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '.';\n if (!obj) return undefined;\n if (obj[path]) return obj[path];\n const tokens = path.split(keySeparator);\n let current = obj;\n for (let i = 0; i < tokens.length;) {\n if (!current || typeof current !== 'object') {\n return undefined;\n }\n let next;\n let nextPath = '';\n for (let j = i; j < tokens.length; ++j) {\n if (j !== i) {\n nextPath += keySeparator;\n }\n nextPath += tokens[j];\n next = current[nextPath];\n if (next !== undefined) {\n if (['string', 'number', 'boolean'].indexOf(typeof next) > -1 && j < tokens.length - 1) {\n continue;\n }\n i += j - i + 1;\n break;\n }\n }\n current = next;\n }\n return current;\n};\nconst getCleanedCode = code => code && code.replace('_', '-');\n\nconst consoleLogger = {\n type: 'logger',\n log(args) {\n this.output('log', args);\n },\n warn(args) {\n this.output('warn', args);\n },\n error(args) {\n this.output('error', args);\n },\n output(type, args) {\n if (console && console[type]) console[type].apply(console, args);\n }\n};\nclass Logger {\n constructor(concreteLogger) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.init(concreteLogger, options);\n }\n init(concreteLogger) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.prefix = options.prefix || 'i18next:';\n this.logger = concreteLogger || consoleLogger;\n this.options = options;\n this.debug = options.debug;\n }\n log() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return this.forward(args, 'log', '', true);\n }\n warn() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n return this.forward(args, 'warn', '', true);\n }\n error() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n return this.forward(args, 'error', '');\n }\n deprecate() {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true);\n }\n forward(args, lvl, prefix, debugOnly) {\n if (debugOnly && !this.debug) return null;\n if (isString(args[0])) args[0] = `${prefix}${this.prefix} ${args[0]}`;\n return this.logger[lvl](args);\n }\n create(moduleName) {\n return new Logger(this.logger, {\n ...{\n prefix: `${this.prefix}:${moduleName}:`\n },\n ...this.options\n });\n }\n clone(options) {\n options = options || this.options;\n options.prefix = options.prefix || this.prefix;\n return new Logger(this.logger, options);\n }\n}\nvar baseLogger = new Logger();\n\nclass EventEmitter {\n constructor() {\n this.observers = {};\n }\n on(events, listener) {\n events.split(' ').forEach(event => {\n if (!this.observers[event]) this.observers[event] = new Map();\n const numListeners = this.observers[event].get(listener) || 0;\n this.observers[event].set(listener, numListeners + 1);\n });\n return this;\n }\n off(event, listener) {\n if (!this.observers[event]) return;\n if (!listener) {\n delete this.observers[event];\n return;\n }\n this.observers[event].delete(listener);\n }\n emit(event) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n if (this.observers[event]) {\n const cloned = Array.from(this.observers[event].entries());\n cloned.forEach(_ref => {\n let [observer, numTimesAdded] = _ref;\n for (let i = 0; i < numTimesAdded; i++) {\n observer(...args);\n }\n });\n }\n if (this.observers['*']) {\n const cloned = Array.from(this.observers['*'].entries());\n cloned.forEach(_ref2 => {\n let [observer, numTimesAdded] = _ref2;\n for (let i = 0; i < numTimesAdded; i++) {\n observer.apply(observer, [event, ...args]);\n }\n });\n }\n }\n}\n\nclass ResourceStore extends EventEmitter {\n constructor(data) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n ns: ['translation'],\n defaultNS: 'translation'\n };\n super();\n this.data = data || {};\n this.options = options;\n if (this.options.keySeparator === undefined) {\n this.options.keySeparator = '.';\n }\n if (this.options.ignoreJSONStructure === undefined) {\n this.options.ignoreJSONStructure = true;\n }\n }\n addNamespaces(ns) {\n if (this.options.ns.indexOf(ns) < 0) {\n this.options.ns.push(ns);\n }\n }\n removeNamespaces(ns) {\n const index = this.options.ns.indexOf(ns);\n if (index > -1) {\n this.options.ns.splice(index, 1);\n }\n }\n getResource(lng, ns, key) {\n let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n const ignoreJSONStructure = options.ignoreJSONStructure !== undefined ? options.ignoreJSONStructure : this.options.ignoreJSONStructure;\n let path;\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n } else {\n path = [lng, ns];\n if (key) {\n if (Array.isArray(key)) {\n path.push(...key);\n } else if (isString(key) && keySeparator) {\n path.push(...key.split(keySeparator));\n } else {\n path.push(key);\n }\n }\n }\n const result = getPath(this.data, path);\n if (!result && !ns && !key && lng.indexOf('.') > -1) {\n lng = path[0];\n ns = path[1];\n key = path.slice(2).join('.');\n }\n if (result || !ignoreJSONStructure || !isString(key)) return result;\n return deepFind(this.data && this.data[lng] && this.data[lng][ns], key, keySeparator);\n }\n addResource(lng, ns, key, value) {\n let options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n silent: false\n };\n const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n let path = [lng, ns];\n if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n value = ns;\n ns = path[1];\n }\n this.addNamespaces(ns);\n setPath(this.data, path, value);\n if (!options.silent) this.emit('added', lng, ns, key, value);\n }\n addResources(lng, ns, resources) {\n let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {\n silent: false\n };\n for (const m in resources) {\n if (isString(resources[m]) || Array.isArray(resources[m])) this.addResource(lng, ns, m, resources[m], {\n silent: true\n });\n }\n if (!options.silent) this.emit('added', lng, ns, resources);\n }\n addResourceBundle(lng, ns, resources, deep, overwrite) {\n let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {\n silent: false,\n skipCopy: false\n };\n let path = [lng, ns];\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n deep = resources;\n resources = ns;\n ns = path[1];\n }\n this.addNamespaces(ns);\n let pack = getPath(this.data, path) || {};\n if (!options.skipCopy) resources = JSON.parse(JSON.stringify(resources));\n if (deep) {\n deepExtend(pack, resources, overwrite);\n } else {\n pack = {\n ...pack,\n ...resources\n };\n }\n setPath(this.data, path, pack);\n if (!options.silent) this.emit('added', lng, ns, resources);\n }\n removeResourceBundle(lng, ns) {\n if (this.hasResourceBundle(lng, ns)) {\n delete this.data[lng][ns];\n }\n this.removeNamespaces(ns);\n this.emit('removed', lng, ns);\n }\n hasResourceBundle(lng, ns) {\n return this.getResource(lng, ns) !== undefined;\n }\n getResourceBundle(lng, ns) {\n if (!ns) ns = this.options.defaultNS;\n if (this.options.compatibilityAPI === 'v1') return {\n ...{},\n ...this.getResource(lng, ns)\n };\n return this.getResource(lng, ns);\n }\n getDataByLanguage(lng) {\n return this.data[lng];\n }\n hasLanguageSomeTranslations(lng) {\n const data = this.getDataByLanguage(lng);\n const n = data && Object.keys(data) || [];\n return !!n.find(v => data[v] && Object.keys(data[v]).length > 0);\n }\n toJSON() {\n return this.data;\n }\n}\n\nvar postProcessor = {\n processors: {},\n addPostProcessor(module) {\n this.processors[module.name] = module;\n },\n handle(processors, value, key, options, translator) {\n processors.forEach(processor => {\n if (this.processors[processor]) value = this.processors[processor].process(value, key, options, translator);\n });\n return value;\n }\n};\n\nconst checkedLoadedFor = {};\nclass Translator extends EventEmitter {\n constructor(services) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super();\n copy(['resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector', 'i18nFormat', 'utils'], services, this);\n this.options = options;\n if (this.options.keySeparator === undefined) {\n this.options.keySeparator = '.';\n }\n this.logger = baseLogger.create('translator');\n }\n changeLanguage(lng) {\n if (lng) this.language = lng;\n }\n exists(key) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n interpolation: {}\n };\n if (key === undefined || key === null) {\n return false;\n }\n const resolved = this.resolve(key, options);\n return resolved && resolved.res !== undefined;\n }\n extractFromKey(key, options) {\n let nsSeparator = options.nsSeparator !== undefined ? options.nsSeparator : this.options.nsSeparator;\n if (nsSeparator === undefined) nsSeparator = ':';\n const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n let namespaces = options.ns || this.options.defaultNS || [];\n const wouldCheckForNsInKey = nsSeparator && key.indexOf(nsSeparator) > -1;\n const seemsNaturalLanguage = !this.options.userDefinedKeySeparator && !options.keySeparator && !this.options.userDefinedNsSeparator && !options.nsSeparator && !looksLikeObjectPath(key, nsSeparator, keySeparator);\n if (wouldCheckForNsInKey && !seemsNaturalLanguage) {\n const m = key.match(this.interpolator.nestingRegexp);\n if (m && m.length > 0) {\n return {\n key,\n namespaces: isString(namespaces) ? [namespaces] : namespaces\n };\n }\n const parts = key.split(nsSeparator);\n if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.indexOf(parts[0]) > -1) namespaces = parts.shift();\n key = parts.join(keySeparator);\n }\n return {\n key,\n namespaces: isString(namespaces) ? [namespaces] : namespaces\n };\n }\n translate(keys, options, lastKey) {\n if (typeof options !== 'object' && this.options.overloadTranslationOptionHandler) {\n options = this.options.overloadTranslationOptionHandler(arguments);\n }\n if (typeof options === 'object') options = {\n ...options\n };\n if (!options) options = {};\n if (keys === undefined || keys === null) return '';\n if (!Array.isArray(keys)) keys = [String(keys)];\n const returnDetails = options.returnDetails !== undefined ? options.returnDetails : this.options.returnDetails;\n const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n const {\n key,\n namespaces\n } = this.extractFromKey(keys[keys.length - 1], options);\n const namespace = namespaces[namespaces.length - 1];\n const lng = options.lng || this.language;\n const appendNamespaceToCIMode = options.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;\n if (lng && lng.toLowerCase() === 'cimode') {\n if (appendNamespaceToCIMode) {\n const nsSeparator = options.nsSeparator || this.options.nsSeparator;\n if (returnDetails) {\n return {\n res: `${namespace}${nsSeparator}${key}`,\n usedKey: key,\n exactUsedKey: key,\n usedLng: lng,\n usedNS: namespace,\n usedParams: this.getUsedParamsDetails(options)\n };\n }\n return `${namespace}${nsSeparator}${key}`;\n }\n if (returnDetails) {\n return {\n res: key,\n usedKey: key,\n exactUsedKey: key,\n usedLng: lng,\n usedNS: namespace,\n usedParams: this.getUsedParamsDetails(options)\n };\n }\n return key;\n }\n const resolved = this.resolve(keys, options);\n let res = resolved && resolved.res;\n const resUsedKey = resolved && resolved.usedKey || key;\n const resExactUsedKey = resolved && resolved.exactUsedKey || key;\n const resType = Object.prototype.toString.apply(res);\n const noObject = ['[object Number]', '[object Function]', '[object RegExp]'];\n const joinArrays = options.joinArrays !== undefined ? options.joinArrays : this.options.joinArrays;\n const handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject;\n const handleAsObject = !isString(res) && typeof res !== 'boolean' && typeof res !== 'number';\n if (handleAsObjectInI18nFormat && res && handleAsObject && noObject.indexOf(resType) < 0 && !(isString(joinArrays) && Array.isArray(res))) {\n if (!options.returnObjects && !this.options.returnObjects) {\n if (!this.options.returnedObjectHandler) {\n this.logger.warn('accessing an object - but returnObjects options is not enabled!');\n }\n const r = this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, res, {\n ...options,\n ns: namespaces\n }) : `key '${key} (${this.language})' returned an object instead of string.`;\n if (returnDetails) {\n resolved.res = r;\n resolved.usedParams = this.getUsedParamsDetails(options);\n return resolved;\n }\n return r;\n }\n if (keySeparator) {\n const resTypeIsArray = Array.isArray(res);\n const copy = resTypeIsArray ? [] : {};\n const newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey;\n for (const m in res) {\n if (Object.prototype.hasOwnProperty.call(res, m)) {\n const deepKey = `${newKeyToUse}${keySeparator}${m}`;\n copy[m] = this.translate(deepKey, {\n ...options,\n ...{\n joinArrays: false,\n ns: namespaces\n }\n });\n if (copy[m] === deepKey) copy[m] = res[m];\n }\n }\n res = copy;\n }\n } else if (handleAsObjectInI18nFormat && isString(joinArrays) && Array.isArray(res)) {\n res = res.join(joinArrays);\n if (res) res = this.extendTranslation(res, keys, options, lastKey);\n } else {\n let usedDefault = false;\n let usedKey = false;\n const needsPluralHandling = options.count !== undefined && !isString(options.count);\n const hasDefaultValue = Translator.hasDefaultValue(options);\n const defaultValueSuffix = needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count, options) : '';\n const defaultValueSuffixOrdinalFallback = options.ordinal && needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count, {\n ordinal: false\n }) : '';\n const needsZeroSuffixLookup = needsPluralHandling && !options.ordinal && options.count === 0 && this.pluralResolver.shouldUseIntlApi();\n const defaultValue = needsZeroSuffixLookup && options[`defaultValue${this.options.pluralSeparator}zero`] || options[`defaultValue${defaultValueSuffix}`] || options[`defaultValue${defaultValueSuffixOrdinalFallback}`] || options.defaultValue;\n if (!this.isValidLookup(res) && hasDefaultValue) {\n usedDefault = true;\n res = defaultValue;\n }\n if (!this.isValidLookup(res)) {\n usedKey = true;\n res = key;\n }\n const missingKeyNoValueFallbackToKey = options.missingKeyNoValueFallbackToKey || this.options.missingKeyNoValueFallbackToKey;\n const resForMissing = missingKeyNoValueFallbackToKey && usedKey ? undefined : res;\n const updateMissing = hasDefaultValue && defaultValue !== res && this.options.updateMissing;\n if (usedKey || usedDefault || updateMissing) {\n this.logger.log(updateMissing ? 'updateKey' : 'missingKey', lng, namespace, key, updateMissing ? defaultValue : res);\n if (keySeparator) {\n const fk = this.resolve(key, {\n ...options,\n keySeparator: false\n });\n if (fk && fk.res) this.logger.warn('Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.');\n }\n let lngs = [];\n const fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, options.lng || this.language);\n if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) {\n for (let i = 0; i < fallbackLngs.length; i++) {\n lngs.push(fallbackLngs[i]);\n }\n } else if (this.options.saveMissingTo === 'all') {\n lngs = this.languageUtils.toResolveHierarchy(options.lng || this.language);\n } else {\n lngs.push(options.lng || this.language);\n }\n const send = (l, k, specificDefaultValue) => {\n const defaultForMissing = hasDefaultValue && specificDefaultValue !== res ? specificDefaultValue : resForMissing;\n if (this.options.missingKeyHandler) {\n this.options.missingKeyHandler(l, namespace, k, defaultForMissing, updateMissing, options);\n } else if (this.backendConnector && this.backendConnector.saveMissing) {\n this.backendConnector.saveMissing(l, namespace, k, defaultForMissing, updateMissing, options);\n }\n this.emit('missingKey', l, namespace, k, res);\n };\n if (this.options.saveMissing) {\n if (this.options.saveMissingPlurals && needsPluralHandling) {\n lngs.forEach(language => {\n const suffixes = this.pluralResolver.getSuffixes(language, options);\n if (needsZeroSuffixLookup && options[`defaultValue${this.options.pluralSeparator}zero`] && suffixes.indexOf(`${this.options.pluralSeparator}zero`) < 0) {\n suffixes.push(`${this.options.pluralSeparator}zero`);\n }\n suffixes.forEach(suffix => {\n send([language], key + suffix, options[`defaultValue${suffix}`] || defaultValue);\n });\n });\n } else {\n send(lngs, key, defaultValue);\n }\n }\n }\n res = this.extendTranslation(res, keys, options, resolved, lastKey);\n if (usedKey && res === key && this.options.appendNamespaceToMissingKey) res = `${namespace}:${key}`;\n if ((usedKey || usedDefault) && this.options.parseMissingKeyHandler) {\n if (this.options.compatibilityAPI !== 'v1') {\n res = this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey ? `${namespace}:${key}` : key, usedDefault ? res : undefined);\n } else {\n res = this.options.parseMissingKeyHandler(res);\n }\n }\n }\n if (returnDetails) {\n resolved.res = res;\n resolved.usedParams = this.getUsedParamsDetails(options);\n return resolved;\n }\n return res;\n }\n extendTranslation(res, key, options, resolved, lastKey) {\n var _this = this;\n if (this.i18nFormat && this.i18nFormat.parse) {\n res = this.i18nFormat.parse(res, {\n ...this.options.interpolation.defaultVariables,\n ...options\n }, options.lng || this.language || resolved.usedLng, resolved.usedNS, resolved.usedKey, {\n resolved\n });\n } else if (!options.skipInterpolation) {\n if (options.interpolation) this.interpolator.init({\n ...options,\n ...{\n interpolation: {\n ...this.options.interpolation,\n ...options.interpolation\n }\n }\n });\n const skipOnVariables = isString(res) && (options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables);\n let nestBef;\n if (skipOnVariables) {\n const nb = res.match(this.interpolator.nestingRegexp);\n nestBef = nb && nb.length;\n }\n let data = options.replace && !isString(options.replace) ? options.replace : options;\n if (this.options.interpolation.defaultVariables) data = {\n ...this.options.interpolation.defaultVariables,\n ...data\n };\n res = this.interpolator.interpolate(res, data, options.lng || this.language || resolved.usedLng, options);\n if (skipOnVariables) {\n const na = res.match(this.interpolator.nestingRegexp);\n const nestAft = na && na.length;\n if (nestBef < nestAft) options.nest = false;\n }\n if (!options.lng && this.options.compatibilityAPI !== 'v1' && resolved && resolved.res) options.lng = this.language || resolved.usedLng;\n if (options.nest !== false) res = this.interpolator.nest(res, function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (lastKey && lastKey[0] === args[0] && !options.context) {\n _this.logger.warn(`It seems you are nesting recursively key: ${args[0]} in key: ${key[0]}`);\n return null;\n }\n return _this.translate(...args, key);\n }, options);\n if (options.interpolation) this.interpolator.reset();\n }\n const postProcess = options.postProcess || this.options.postProcess;\n const postProcessorNames = isString(postProcess) ? [postProcess] : postProcess;\n if (res !== undefined && res !== null && postProcessorNames && postProcessorNames.length && options.applyPostProcessor !== false) {\n res = postProcessor.handle(postProcessorNames, res, key, this.options && this.options.postProcessPassResolved ? {\n i18nResolved: {\n ...resolved,\n usedParams: this.getUsedParamsDetails(options)\n },\n ...options\n } : options, this);\n }\n return res;\n }\n resolve(keys) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let found;\n let usedKey;\n let exactUsedKey;\n let usedLng;\n let usedNS;\n if (isString(keys)) keys = [keys];\n keys.forEach(k => {\n if (this.isValidLookup(found)) return;\n const extracted = this.extractFromKey(k, options);\n const key = extracted.key;\n usedKey = key;\n let namespaces = extracted.namespaces;\n if (this.options.fallbackNS) namespaces = namespaces.concat(this.options.fallbackNS);\n const needsPluralHandling = options.count !== undefined && !isString(options.count);\n const needsZeroSuffixLookup = needsPluralHandling && !options.ordinal && options.count === 0 && this.pluralResolver.shouldUseIntlApi();\n const needsContextHandling = options.context !== undefined && (isString(options.context) || typeof options.context === 'number') && options.context !== '';\n const codes = options.lngs ? options.lngs : this.languageUtils.toResolveHierarchy(options.lng || this.language, options.fallbackLng);\n namespaces.forEach(ns => {\n if (this.isValidLookup(found)) return;\n usedNS = ns;\n if (!checkedLoadedFor[`${codes[0]}-${ns}`] && this.utils && this.utils.hasLoadedNamespace && !this.utils.hasLoadedNamespace(usedNS)) {\n checkedLoadedFor[`${codes[0]}-${ns}`] = true;\n this.logger.warn(`key \"${usedKey}\" for languages \"${codes.join(', ')}\" won't get resolved as namespace \"${usedNS}\" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n }\n codes.forEach(code => {\n if (this.isValidLookup(found)) return;\n usedLng = code;\n const finalKeys = [key];\n if (this.i18nFormat && this.i18nFormat.addLookupKeys) {\n this.i18nFormat.addLookupKeys(finalKeys, key, code, ns, options);\n } else {\n let pluralSuffix;\n if (needsPluralHandling) pluralSuffix = this.pluralResolver.getSuffix(code, options.count, options);\n const zeroSuffix = `${this.options.pluralSeparator}zero`;\n const ordinalPrefix = `${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;\n if (needsPluralHandling) {\n finalKeys.push(key + pluralSuffix);\n if (options.ordinal && pluralSuffix.indexOf(ordinalPrefix) === 0) {\n finalKeys.push(key + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n }\n if (needsZeroSuffixLookup) {\n finalKeys.push(key + zeroSuffix);\n }\n }\n if (needsContextHandling) {\n const contextKey = `${key}${this.options.contextSeparator}${options.context}`;\n finalKeys.push(contextKey);\n if (needsPluralHandling) {\n finalKeys.push(contextKey + pluralSuffix);\n if (options.ordinal && pluralSuffix.indexOf(ordinalPrefix) === 0) {\n finalKeys.push(contextKey + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n }\n if (needsZeroSuffixLookup) {\n finalKeys.push(contextKey + zeroSuffix);\n }\n }\n }\n }\n let possibleKey;\n while (possibleKey = finalKeys.pop()) {\n if (!this.isValidLookup(found)) {\n exactUsedKey = possibleKey;\n found = this.getResource(code, ns, possibleKey, options);\n }\n }\n });\n });\n });\n return {\n res: found,\n usedKey,\n exactUsedKey,\n usedLng,\n usedNS\n };\n }\n isValidLookup(res) {\n return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === '');\n }\n getResource(code, ns, key) {\n let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n if (this.i18nFormat && this.i18nFormat.getResource) return this.i18nFormat.getResource(code, ns, key, options);\n return this.resourceStore.getResource(code, ns, key, options);\n }\n getUsedParamsDetails() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const optionsKeys = ['defaultValue', 'ordinal', 'context', 'replace', 'lng', 'lngs', 'fallbackLng', 'ns', 'keySeparator', 'nsSeparator', 'returnObjects', 'returnDetails', 'joinArrays', 'postProcess', 'interpolation'];\n const useOptionsReplaceForData = options.replace && !isString(options.replace);\n let data = useOptionsReplaceForData ? options.replace : options;\n if (useOptionsReplaceForData && typeof options.count !== 'undefined') {\n data.count = options.count;\n }\n if (this.options.interpolation.defaultVariables) {\n data = {\n ...this.options.interpolation.defaultVariables,\n ...data\n };\n }\n if (!useOptionsReplaceForData) {\n data = {\n ...data\n };\n for (const key of optionsKeys) {\n delete data[key];\n }\n }\n return data;\n }\n static hasDefaultValue(options) {\n const prefix = 'defaultValue';\n for (const option in options) {\n if (Object.prototype.hasOwnProperty.call(options, option) && prefix === option.substring(0, prefix.length) && undefined !== options[option]) {\n return true;\n }\n }\n return false;\n }\n}\n\nconst capitalize = string => string.charAt(0).toUpperCase() + string.slice(1);\nclass LanguageUtil {\n constructor(options) {\n this.options = options;\n this.supportedLngs = this.options.supportedLngs || false;\n this.logger = baseLogger.create('languageUtils');\n }\n getScriptPartFromCode(code) {\n code = getCleanedCode(code);\n if (!code || code.indexOf('-') < 0) return null;\n const p = code.split('-');\n if (p.length === 2) return null;\n p.pop();\n if (p[p.length - 1].toLowerCase() === 'x') return null;\n return this.formatLanguageCode(p.join('-'));\n }\n getLanguagePartFromCode(code) {\n code = getCleanedCode(code);\n if (!code || code.indexOf('-') < 0) return code;\n const p = code.split('-');\n return this.formatLanguageCode(p[0]);\n }\n formatLanguageCode(code) {\n if (isString(code) && code.indexOf('-') > -1) {\n if (typeof Intl !== 'undefined' && typeof Intl.getCanonicalLocales !== 'undefined') {\n try {\n let formattedCode = Intl.getCanonicalLocales(code)[0];\n if (formattedCode && this.options.lowerCaseLng) {\n formattedCode = formattedCode.toLowerCase();\n }\n if (formattedCode) return formattedCode;\n } catch (e) {}\n }\n const specialCases = ['hans', 'hant', 'latn', 'cyrl', 'cans', 'mong', 'arab'];\n let p = code.split('-');\n if (this.options.lowerCaseLng) {\n p = p.map(part => part.toLowerCase());\n } else if (p.length === 2) {\n p[0] = p[0].toLowerCase();\n p[1] = p[1].toUpperCase();\n if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n } else if (p.length === 3) {\n p[0] = p[0].toLowerCase();\n if (p[1].length === 2) p[1] = p[1].toUpperCase();\n if (p[0] !== 'sgn' && p[2].length === 2) p[2] = p[2].toUpperCase();\n if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n if (specialCases.indexOf(p[2].toLowerCase()) > -1) p[2] = capitalize(p[2].toLowerCase());\n }\n return p.join('-');\n }\n return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code;\n }\n isSupportedCode(code) {\n if (this.options.load === 'languageOnly' || this.options.nonExplicitSupportedLngs) {\n code = this.getLanguagePartFromCode(code);\n }\n return !this.supportedLngs || !this.supportedLngs.length || this.supportedLngs.indexOf(code) > -1;\n }\n getBestMatchFromCodes(codes) {\n if (!codes) return null;\n let found;\n codes.forEach(code => {\n if (found) return;\n const cleanedLng = this.formatLanguageCode(code);\n if (!this.options.supportedLngs || this.isSupportedCode(cleanedLng)) found = cleanedLng;\n });\n if (!found && this.options.supportedLngs) {\n codes.forEach(code => {\n if (found) return;\n const lngOnly = this.getLanguagePartFromCode(code);\n if (this.isSupportedCode(lngOnly)) return found = lngOnly;\n found = this.options.supportedLngs.find(supportedLng => {\n if (supportedLng === lngOnly) return supportedLng;\n if (supportedLng.indexOf('-') < 0 && lngOnly.indexOf('-') < 0) return;\n if (supportedLng.indexOf('-') > 0 && lngOnly.indexOf('-') < 0 && supportedLng.substring(0, supportedLng.indexOf('-')) === lngOnly) return supportedLng;\n if (supportedLng.indexOf(lngOnly) === 0 && lngOnly.length > 1) return supportedLng;\n });\n });\n }\n if (!found) found = this.getFallbackCodes(this.options.fallbackLng)[0];\n return found;\n }\n getFallbackCodes(fallbacks, code) {\n if (!fallbacks) return [];\n if (typeof fallbacks === 'function') fallbacks = fallbacks(code);\n if (isString(fallbacks)) fallbacks = [fallbacks];\n if (Array.isArray(fallbacks)) return fallbacks;\n if (!code) return fallbacks.default || [];\n let found = fallbacks[code];\n if (!found) found = fallbacks[this.getScriptPartFromCode(code)];\n if (!found) found = fallbacks[this.formatLanguageCode(code)];\n if (!found) found = fallbacks[this.getLanguagePartFromCode(code)];\n if (!found) found = fallbacks.default;\n return found || [];\n }\n toResolveHierarchy(code, fallbackCode) {\n const fallbackCodes = this.getFallbackCodes(fallbackCode || this.options.fallbackLng || [], code);\n const codes = [];\n const addCode = c => {\n if (!c) return;\n if (this.isSupportedCode(c)) {\n codes.push(c);\n } else {\n this.logger.warn(`rejecting language code not found in supportedLngs: ${c}`);\n }\n };\n if (isString(code) && (code.indexOf('-') > -1 || code.indexOf('_') > -1)) {\n if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code));\n if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code));\n if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code));\n } else if (isString(code)) {\n addCode(this.formatLanguageCode(code));\n }\n fallbackCodes.forEach(fc => {\n if (codes.indexOf(fc) < 0) addCode(this.formatLanguageCode(fc));\n });\n return codes;\n }\n}\n\nlet sets = [{\n lngs: ['ach', 'ak', 'am', 'arn', 'br', 'fil', 'gun', 'ln', 'mfe', 'mg', 'mi', 'oc', 'pt', 'pt-BR', 'tg', 'tl', 'ti', 'tr', 'uz', 'wa'],\n nr: [1, 2],\n fc: 1\n}, {\n lngs: ['af', 'an', 'ast', 'az', 'bg', 'bn', 'ca', 'da', 'de', 'dev', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fi', 'fo', 'fur', 'fy', 'gl', 'gu', 'ha', 'hi', 'hu', 'hy', 'ia', 'it', 'kk', 'kn', 'ku', 'lb', 'mai', 'ml', 'mn', 'mr', 'nah', 'nap', 'nb', 'ne', 'nl', 'nn', 'no', 'nso', 'pa', 'pap', 'pms', 'ps', 'pt-PT', 'rm', 'sco', 'se', 'si', 'so', 'son', 'sq', 'sv', 'sw', 'ta', 'te', 'tk', 'ur', 'yo'],\n nr: [1, 2],\n fc: 2\n}, {\n lngs: ['ay', 'bo', 'cgg', 'fa', 'ht', 'id', 'ja', 'jbo', 'ka', 'km', 'ko', 'ky', 'lo', 'ms', 'sah', 'su', 'th', 'tt', 'ug', 'vi', 'wo', 'zh'],\n nr: [1],\n fc: 3\n}, {\n lngs: ['be', 'bs', 'cnr', 'dz', 'hr', 'ru', 'sr', 'uk'],\n nr: [1, 2, 5],\n fc: 4\n}, {\n lngs: ['ar'],\n nr: [0, 1, 2, 3, 11, 100],\n fc: 5\n}, {\n lngs: ['cs', 'sk'],\n nr: [1, 2, 5],\n fc: 6\n}, {\n lngs: ['csb', 'pl'],\n nr: [1, 2, 5],\n fc: 7\n}, {\n lngs: ['cy'],\n nr: [1, 2, 3, 8],\n fc: 8\n}, {\n lngs: ['fr'],\n nr: [1, 2],\n fc: 9\n}, {\n lngs: ['ga'],\n nr: [1, 2, 3, 7, 11],\n fc: 10\n}, {\n lngs: ['gd'],\n nr: [1, 2, 3, 20],\n fc: 11\n}, {\n lngs: ['is'],\n nr: [1, 2],\n fc: 12\n}, {\n lngs: ['jv'],\n nr: [0, 1],\n fc: 13\n}, {\n lngs: ['kw'],\n nr: [1, 2, 3, 4],\n fc: 14\n}, {\n lngs: ['lt'],\n nr: [1, 2, 10],\n fc: 15\n}, {\n lngs: ['lv'],\n nr: [1, 2, 0],\n fc: 16\n}, {\n lngs: ['mk'],\n nr: [1, 2],\n fc: 17\n}, {\n lngs: ['mnk'],\n nr: [0, 1, 2],\n fc: 18\n}, {\n lngs: ['mt'],\n nr: [1, 2, 11, 20],\n fc: 19\n}, {\n lngs: ['or'],\n nr: [2, 1],\n fc: 2\n}, {\n lngs: ['ro'],\n nr: [1, 2, 20],\n fc: 20\n}, {\n lngs: ['sl'],\n nr: [5, 1, 2, 3],\n fc: 21\n}, {\n lngs: ['he', 'iw'],\n nr: [1, 2, 20, 21],\n fc: 22\n}];\nlet _rulesPluralsTypes = {\n 1: n => Number(n > 1),\n 2: n => Number(n != 1),\n 3: n => 0,\n 4: n => Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2),\n 5: n => Number(n == 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5),\n 6: n => Number(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2),\n 7: n => Number(n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2),\n 8: n => Number(n == 1 ? 0 : n == 2 ? 1 : n != 8 && n != 11 ? 2 : 3),\n 9: n => Number(n >= 2),\n 10: n => Number(n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4),\n 11: n => Number(n == 1 || n == 11 ? 0 : n == 2 || n == 12 ? 1 : n > 2 && n < 20 ? 2 : 3),\n 12: n => Number(n % 10 != 1 || n % 100 == 11),\n 13: n => Number(n !== 0),\n 14: n => Number(n == 1 ? 0 : n == 2 ? 1 : n == 3 ? 2 : 3),\n 15: n => Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2),\n 16: n => Number(n % 10 == 1 && n % 100 != 11 ? 0 : n !== 0 ? 1 : 2),\n 17: n => Number(n == 1 || n % 10 == 1 && n % 100 != 11 ? 0 : 1),\n 18: n => Number(n == 0 ? 0 : n == 1 ? 1 : 2),\n 19: n => Number(n == 1 ? 0 : n == 0 || n % 100 > 1 && n % 100 < 11 ? 1 : n % 100 > 10 && n % 100 < 20 ? 2 : 3),\n 20: n => Number(n == 1 ? 0 : n == 0 || n % 100 > 0 && n % 100 < 20 ? 1 : 2),\n 21: n => Number(n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0),\n 22: n => Number(n == 1 ? 0 : n == 2 ? 1 : (n < 0 || n > 10) && n % 10 == 0 ? 2 : 3)\n};\nconst nonIntlVersions = ['v1', 'v2', 'v3'];\nconst intlVersions = ['v4'];\nconst suffixesOrder = {\n zero: 0,\n one: 1,\n two: 2,\n few: 3,\n many: 4,\n other: 5\n};\nconst createRules = () => {\n const rules = {};\n sets.forEach(set => {\n set.lngs.forEach(l => {\n rules[l] = {\n numbers: set.nr,\n plurals: _rulesPluralsTypes[set.fc]\n };\n });\n });\n return rules;\n};\nclass PluralResolver {\n constructor(languageUtils) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.languageUtils = languageUtils;\n this.options = options;\n this.logger = baseLogger.create('pluralResolver');\n if ((!this.options.compatibilityJSON || intlVersions.includes(this.options.compatibilityJSON)) && (typeof Intl === 'undefined' || !Intl.PluralRules)) {\n this.options.compatibilityJSON = 'v3';\n this.logger.error('Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.');\n }\n this.rules = createRules();\n this.pluralRulesCache = {};\n }\n addRule(lng, obj) {\n this.rules[lng] = obj;\n }\n clearCache() {\n this.pluralRulesCache = {};\n }\n getRule(code) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (this.shouldUseIntlApi()) {\n const cleanedCode = getCleanedCode(code === 'dev' ? 'en' : code);\n const type = options.ordinal ? 'ordinal' : 'cardinal';\n const cacheKey = JSON.stringify({\n cleanedCode,\n type\n });\n if (cacheKey in this.pluralRulesCache) {\n return this.pluralRulesCache[cacheKey];\n }\n let rule;\n try {\n rule = new Intl.PluralRules(cleanedCode, {\n type\n });\n } catch (err) {\n if (!code.match(/-|_/)) return;\n const lngPart = this.languageUtils.getLanguagePartFromCode(code);\n rule = this.getRule(lngPart, options);\n }\n this.pluralRulesCache[cacheKey] = rule;\n return rule;\n }\n return this.rules[code] || this.rules[this.languageUtils.getLanguagePartFromCode(code)];\n }\n needsPlural(code) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const rule = this.getRule(code, options);\n if (this.shouldUseIntlApi()) {\n return rule && rule.resolvedOptions().pluralCategories.length > 1;\n }\n return rule && rule.numbers.length > 1;\n }\n getPluralFormsOfKey(code, key) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n return this.getSuffixes(code, options).map(suffix => `${key}${suffix}`);\n }\n getSuffixes(code) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const rule = this.getRule(code, options);\n if (!rule) {\n return [];\n }\n if (this.shouldUseIntlApi()) {\n return rule.resolvedOptions().pluralCategories.sort((pluralCategory1, pluralCategory2) => suffixesOrder[pluralCategory1] - suffixesOrder[pluralCategory2]).map(pluralCategory => `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${pluralCategory}`);\n }\n return rule.numbers.map(number => this.getSuffix(code, number, options));\n }\n getSuffix(code, count) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n const rule = this.getRule(code, options);\n if (rule) {\n if (this.shouldUseIntlApi()) {\n return `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${rule.select(count)}`;\n }\n return this.getSuffixRetroCompatible(rule, count);\n }\n this.logger.warn(`no plural rule found for: ${code}`);\n return '';\n }\n getSuffixRetroCompatible(rule, count) {\n const idx = rule.noAbs ? rule.plurals(count) : rule.plurals(Math.abs(count));\n let suffix = rule.numbers[idx];\n if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n if (suffix === 2) {\n suffix = 'plural';\n } else if (suffix === 1) {\n suffix = '';\n }\n }\n const returnSuffix = () => this.options.prepend && suffix.toString() ? this.options.prepend + suffix.toString() : suffix.toString();\n if (this.options.compatibilityJSON === 'v1') {\n if (suffix === 1) return '';\n if (typeof suffix === 'number') return `_plural_${suffix.toString()}`;\n return returnSuffix();\n } else if (this.options.compatibilityJSON === 'v2') {\n return returnSuffix();\n } else if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n return returnSuffix();\n }\n return this.options.prepend && idx.toString() ? this.options.prepend + idx.toString() : idx.toString();\n }\n shouldUseIntlApi() {\n return !nonIntlVersions.includes(this.options.compatibilityJSON);\n }\n}\n\nconst deepFindWithDefaults = function (data, defaultData, key) {\n let keySeparator = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '.';\n let ignoreJSONStructure = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n let path = getPathWithDefaults(data, defaultData, key);\n if (!path && ignoreJSONStructure && isString(key)) {\n path = deepFind(data, key, keySeparator);\n if (path === undefined) path = deepFind(defaultData, key, keySeparator);\n }\n return path;\n};\nconst regexSafe = val => val.replace(/\\$/g, '$$$$');\nclass Interpolator {\n constructor() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.logger = baseLogger.create('interpolator');\n this.options = options;\n this.format = options.interpolation && options.interpolation.format || (value => value);\n this.init(options);\n }\n init() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (!options.interpolation) options.interpolation = {\n escapeValue: true\n };\n const {\n escape: escape$1,\n escapeValue,\n useRawValueToEscape,\n prefix,\n prefixEscaped,\n suffix,\n suffixEscaped,\n formatSeparator,\n unescapeSuffix,\n unescapePrefix,\n nestingPrefix,\n nestingPrefixEscaped,\n nestingSuffix,\n nestingSuffixEscaped,\n nestingOptionsSeparator,\n maxReplaces,\n alwaysFormat\n } = options.interpolation;\n this.escape = escape$1 !== undefined ? escape$1 : escape;\n this.escapeValue = escapeValue !== undefined ? escapeValue : true;\n this.useRawValueToEscape = useRawValueToEscape !== undefined ? useRawValueToEscape : false;\n this.prefix = prefix ? regexEscape(prefix) : prefixEscaped || '{{';\n this.suffix = suffix ? regexEscape(suffix) : suffixEscaped || '}}';\n this.formatSeparator = formatSeparator || ',';\n this.unescapePrefix = unescapeSuffix ? '' : unescapePrefix || '-';\n this.unescapeSuffix = this.unescapePrefix ? '' : unescapeSuffix || '';\n this.nestingPrefix = nestingPrefix ? regexEscape(nestingPrefix) : nestingPrefixEscaped || regexEscape('$t(');\n this.nestingSuffix = nestingSuffix ? regexEscape(nestingSuffix) : nestingSuffixEscaped || regexEscape(')');\n this.nestingOptionsSeparator = nestingOptionsSeparator || ',';\n this.maxReplaces = maxReplaces || 1000;\n this.alwaysFormat = alwaysFormat !== undefined ? alwaysFormat : false;\n this.resetRegExp();\n }\n reset() {\n if (this.options) this.init(this.options);\n }\n resetRegExp() {\n const getOrResetRegExp = (existingRegExp, pattern) => {\n if (existingRegExp && existingRegExp.source === pattern) {\n existingRegExp.lastIndex = 0;\n return existingRegExp;\n }\n return new RegExp(pattern, 'g');\n };\n this.regexp = getOrResetRegExp(this.regexp, `${this.prefix}(.+?)${this.suffix}`);\n this.regexpUnescape = getOrResetRegExp(this.regexpUnescape, `${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`);\n this.nestingRegexp = getOrResetRegExp(this.nestingRegexp, `${this.nestingPrefix}(.+?)${this.nestingSuffix}`);\n }\n interpolate(str, data, lng, options) {\n let match;\n let value;\n let replaces;\n const defaultData = this.options && this.options.interpolation && this.options.interpolation.defaultVariables || {};\n const handleFormat = key => {\n if (key.indexOf(this.formatSeparator) < 0) {\n const path = deepFindWithDefaults(data, defaultData, key, this.options.keySeparator, this.options.ignoreJSONStructure);\n return this.alwaysFormat ? this.format(path, undefined, lng, {\n ...options,\n ...data,\n interpolationkey: key\n }) : path;\n }\n const p = key.split(this.formatSeparator);\n const k = p.shift().trim();\n const f = p.join(this.formatSeparator).trim();\n return this.format(deepFindWithDefaults(data, defaultData, k, this.options.keySeparator, this.options.ignoreJSONStructure), f, lng, {\n ...options,\n ...data,\n interpolationkey: k\n });\n };\n this.resetRegExp();\n const missingInterpolationHandler = options && options.missingInterpolationHandler || this.options.missingInterpolationHandler;\n const skipOnVariables = options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables;\n const todos = [{\n regex: this.regexpUnescape,\n safeValue: val => regexSafe(val)\n }, {\n regex: this.regexp,\n safeValue: val => this.escapeValue ? regexSafe(this.escape(val)) : regexSafe(val)\n }];\n todos.forEach(todo => {\n replaces = 0;\n while (match = todo.regex.exec(str)) {\n const matchedVar = match[1].trim();\n value = handleFormat(matchedVar);\n if (value === undefined) {\n if (typeof missingInterpolationHandler === 'function') {\n const temp = missingInterpolationHandler(str, match, options);\n value = isString(temp) ? temp : '';\n } else if (options && Object.prototype.hasOwnProperty.call(options, matchedVar)) {\n value = '';\n } else if (skipOnVariables) {\n value = match[0];\n continue;\n } else {\n this.logger.warn(`missed to pass in variable ${matchedVar} for interpolating ${str}`);\n value = '';\n }\n } else if (!isString(value) && !this.useRawValueToEscape) {\n value = makeString(value);\n }\n const safeValue = todo.safeValue(value);\n str = str.replace(match[0], safeValue);\n if (skipOnVariables) {\n todo.regex.lastIndex += value.length;\n todo.regex.lastIndex -= match[0].length;\n } else {\n todo.regex.lastIndex = 0;\n }\n replaces++;\n if (replaces >= this.maxReplaces) {\n break;\n }\n }\n });\n return str;\n }\n nest(str, fc) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n let match;\n let value;\n let clonedOptions;\n const handleHasOptions = (key, inheritedOptions) => {\n const sep = this.nestingOptionsSeparator;\n if (key.indexOf(sep) < 0) return key;\n const c = key.split(new RegExp(`${sep}[ ]*{`));\n let optionsString = `{${c[1]}`;\n key = c[0];\n optionsString = this.interpolate(optionsString, clonedOptions);\n const matchedSingleQuotes = optionsString.match(/'/g);\n const matchedDoubleQuotes = optionsString.match(/\"/g);\n if (matchedSingleQuotes && matchedSingleQuotes.length % 2 === 0 && !matchedDoubleQuotes || matchedDoubleQuotes.length % 2 !== 0) {\n optionsString = optionsString.replace(/'/g, '\"');\n }\n try {\n clonedOptions = JSON.parse(optionsString);\n if (inheritedOptions) clonedOptions = {\n ...inheritedOptions,\n ...clonedOptions\n };\n } catch (e) {\n this.logger.warn(`failed parsing options string in nesting for key ${key}`, e);\n return `${key}${sep}${optionsString}`;\n }\n if (clonedOptions.defaultValue && clonedOptions.defaultValue.indexOf(this.prefix) > -1) delete clonedOptions.defaultValue;\n return key;\n };\n while (match = this.nestingRegexp.exec(str)) {\n let formatters = [];\n clonedOptions = {\n ...options\n };\n clonedOptions = clonedOptions.replace && !isString(clonedOptions.replace) ? clonedOptions.replace : clonedOptions;\n clonedOptions.applyPostProcessor = false;\n delete clonedOptions.defaultValue;\n let doReduce = false;\n if (match[0].indexOf(this.formatSeparator) !== -1 && !/{.*}/.test(match[1])) {\n const r = match[1].split(this.formatSeparator).map(elem => elem.trim());\n match[1] = r.shift();\n formatters = r;\n doReduce = true;\n }\n value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions);\n if (value && match[0] === str && !isString(value)) return value;\n if (!isString(value)) value = makeString(value);\n if (!value) {\n this.logger.warn(`missed to resolve ${match[1]} for nesting ${str}`);\n value = '';\n }\n if (doReduce) {\n value = formatters.reduce((v, f) => this.format(v, f, options.lng, {\n ...options,\n interpolationkey: match[1].trim()\n }), value.trim());\n }\n str = str.replace(match[0], value);\n this.regexp.lastIndex = 0;\n }\n return str;\n }\n}\n\nconst parseFormatStr = formatStr => {\n let formatName = formatStr.toLowerCase().trim();\n const formatOptions = {};\n if (formatStr.indexOf('(') > -1) {\n const p = formatStr.split('(');\n formatName = p[0].toLowerCase().trim();\n const optStr = p[1].substring(0, p[1].length - 1);\n if (formatName === 'currency' && optStr.indexOf(':') < 0) {\n if (!formatOptions.currency) formatOptions.currency = optStr.trim();\n } else if (formatName === 'relativetime' && optStr.indexOf(':') < 0) {\n if (!formatOptions.range) formatOptions.range = optStr.trim();\n } else {\n const opts = optStr.split(';');\n opts.forEach(opt => {\n if (opt) {\n const [key, ...rest] = opt.split(':');\n const val = rest.join(':').trim().replace(/^'+|'+$/g, '');\n const trimmedKey = key.trim();\n if (!formatOptions[trimmedKey]) formatOptions[trimmedKey] = val;\n if (val === 'false') formatOptions[trimmedKey] = false;\n if (val === 'true') formatOptions[trimmedKey] = true;\n if (!isNaN(val)) formatOptions[trimmedKey] = parseInt(val, 10);\n }\n });\n }\n }\n return {\n formatName,\n formatOptions\n };\n};\nconst createCachedFormatter = fn => {\n const cache = {};\n return (val, lng, options) => {\n let optForCache = options;\n if (options && options.interpolationkey && options.formatParams && options.formatParams[options.interpolationkey] && options[options.interpolationkey]) {\n optForCache = {\n ...optForCache,\n [options.interpolationkey]: undefined\n };\n }\n const key = lng + JSON.stringify(optForCache);\n let formatter = cache[key];\n if (!formatter) {\n formatter = fn(getCleanedCode(lng), options);\n cache[key] = formatter;\n }\n return formatter(val);\n };\n};\nclass Formatter {\n constructor() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.logger = baseLogger.create('formatter');\n this.options = options;\n this.formats = {\n number: createCachedFormatter((lng, opt) => {\n const formatter = new Intl.NumberFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n }),\n currency: createCachedFormatter((lng, opt) => {\n const formatter = new Intl.NumberFormat(lng, {\n ...opt,\n style: 'currency'\n });\n return val => formatter.format(val);\n }),\n datetime: createCachedFormatter((lng, opt) => {\n const formatter = new Intl.DateTimeFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n }),\n relativetime: createCachedFormatter((lng, opt) => {\n const formatter = new Intl.RelativeTimeFormat(lng, {\n ...opt\n });\n return val => formatter.format(val, opt.range || 'day');\n }),\n list: createCachedFormatter((lng, opt) => {\n const formatter = new Intl.ListFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n })\n };\n this.init(options);\n }\n init(services) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n interpolation: {}\n };\n this.formatSeparator = options.interpolation.formatSeparator || ',';\n }\n add(name, fc) {\n this.formats[name.toLowerCase().trim()] = fc;\n }\n addCached(name, fc) {\n this.formats[name.toLowerCase().trim()] = createCachedFormatter(fc);\n }\n format(value, format, lng) {\n let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n const formats = format.split(this.formatSeparator);\n if (formats.length > 1 && formats[0].indexOf('(') > 1 && formats[0].indexOf(')') < 0 && formats.find(f => f.indexOf(')') > -1)) {\n const lastIndex = formats.findIndex(f => f.indexOf(')') > -1);\n formats[0] = [formats[0], ...formats.splice(1, lastIndex)].join(this.formatSeparator);\n }\n const result = formats.reduce((mem, f) => {\n const {\n formatName,\n formatOptions\n } = parseFormatStr(f);\n if (this.formats[formatName]) {\n let formatted = mem;\n try {\n const valOptions = options && options.formatParams && options.formatParams[options.interpolationkey] || {};\n const l = valOptions.locale || valOptions.lng || options.locale || options.lng || lng;\n formatted = this.formats[formatName](mem, l, {\n ...formatOptions,\n ...options,\n ...valOptions\n });\n } catch (error) {\n this.logger.warn(error);\n }\n return formatted;\n } else {\n this.logger.warn(`there was no format function for ${formatName}`);\n }\n return mem;\n }, value);\n return result;\n }\n}\n\nconst removePending = (q, name) => {\n if (q.pending[name] !== undefined) {\n delete q.pending[name];\n q.pendingCount--;\n }\n};\nclass Connector extends EventEmitter {\n constructor(backend, store, services) {\n let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n super();\n this.backend = backend;\n this.store = store;\n this.services = services;\n this.languageUtils = services.languageUtils;\n this.options = options;\n this.logger = baseLogger.create('backendConnector');\n this.waitingReads = [];\n this.maxParallelReads = options.maxParallelReads || 10;\n this.readingCalls = 0;\n this.maxRetries = options.maxRetries >= 0 ? options.maxRetries : 5;\n this.retryTimeout = options.retryTimeout >= 1 ? options.retryTimeout : 350;\n this.state = {};\n this.queue = [];\n if (this.backend && this.backend.init) {\n this.backend.init(services, options.backend, options);\n }\n }\n queueLoad(languages, namespaces, options, callback) {\n const toLoad = {};\n const pending = {};\n const toLoadLanguages = {};\n const toLoadNamespaces = {};\n languages.forEach(lng => {\n let hasAllNamespaces = true;\n namespaces.forEach(ns => {\n const name = `${lng}|${ns}`;\n if (!options.reload && this.store.hasResourceBundle(lng, ns)) {\n this.state[name] = 2;\n } else if (this.state[name] < 0) ; else if (this.state[name] === 1) {\n if (pending[name] === undefined) pending[name] = true;\n } else {\n this.state[name] = 1;\n hasAllNamespaces = false;\n if (pending[name] === undefined) pending[name] = true;\n if (toLoad[name] === undefined) toLoad[name] = true;\n if (toLoadNamespaces[ns] === undefined) toLoadNamespaces[ns] = true;\n }\n });\n if (!hasAllNamespaces) toLoadLanguages[lng] = true;\n });\n if (Object.keys(toLoad).length || Object.keys(pending).length) {\n this.queue.push({\n pending,\n pendingCount: Object.keys(pending).length,\n loaded: {},\n errors: [],\n callback\n });\n }\n return {\n toLoad: Object.keys(toLoad),\n pending: Object.keys(pending),\n toLoadLanguages: Object.keys(toLoadLanguages),\n toLoadNamespaces: Object.keys(toLoadNamespaces)\n };\n }\n loaded(name, err, data) {\n const s = name.split('|');\n const lng = s[0];\n const ns = s[1];\n if (err) this.emit('failedLoading', lng, ns, err);\n if (!err && data) {\n this.store.addResourceBundle(lng, ns, data, undefined, undefined, {\n skipCopy: true\n });\n }\n this.state[name] = err ? -1 : 2;\n if (err && data) this.state[name] = 0;\n const loaded = {};\n this.queue.forEach(q => {\n pushPath(q.loaded, [lng], ns);\n removePending(q, name);\n if (err) q.errors.push(err);\n if (q.pendingCount === 0 && !q.done) {\n Object.keys(q.loaded).forEach(l => {\n if (!loaded[l]) loaded[l] = {};\n const loadedKeys = q.loaded[l];\n if (loadedKeys.length) {\n loadedKeys.forEach(n => {\n if (loaded[l][n] === undefined) loaded[l][n] = true;\n });\n }\n });\n q.done = true;\n if (q.errors.length) {\n q.callback(q.errors);\n } else {\n q.callback();\n }\n }\n });\n this.emit('loaded', loaded);\n this.queue = this.queue.filter(q => !q.done);\n }\n read(lng, ns, fcName) {\n let tried = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n let wait = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : this.retryTimeout;\n let callback = arguments.length > 5 ? arguments[5] : undefined;\n if (!lng.length) return callback(null, {});\n if (this.readingCalls >= this.maxParallelReads) {\n this.waitingReads.push({\n lng,\n ns,\n fcName,\n tried,\n wait,\n callback\n });\n return;\n }\n this.readingCalls++;\n const resolver = (err, data) => {\n this.readingCalls--;\n if (this.waitingReads.length > 0) {\n const next = this.waitingReads.shift();\n this.read(next.lng, next.ns, next.fcName, next.tried, next.wait, next.callback);\n }\n if (err && data && tried < this.maxRetries) {\n setTimeout(() => {\n this.read.call(this, lng, ns, fcName, tried + 1, wait * 2, callback);\n }, wait);\n return;\n }\n callback(err, data);\n };\n const fc = this.backend[fcName].bind(this.backend);\n if (fc.length === 2) {\n try {\n const r = fc(lng, ns);\n if (r && typeof r.then === 'function') {\n r.then(data => resolver(null, data)).catch(resolver);\n } else {\n resolver(null, r);\n }\n } catch (err) {\n resolver(err);\n }\n return;\n }\n return fc(lng, ns, resolver);\n }\n prepareLoading(languages, namespaces) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n let callback = arguments.length > 3 ? arguments[3] : undefined;\n if (!this.backend) {\n this.logger.warn('No backend was added via i18next.use. Will not load resources.');\n return callback && callback();\n }\n if (isString(languages)) languages = this.languageUtils.toResolveHierarchy(languages);\n if (isString(namespaces)) namespaces = [namespaces];\n const toLoad = this.queueLoad(languages, namespaces, options, callback);\n if (!toLoad.toLoad.length) {\n if (!toLoad.pending.length) callback();\n return null;\n }\n toLoad.toLoad.forEach(name => {\n this.loadOne(name);\n });\n }\n load(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {}, callback);\n }\n reload(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {\n reload: true\n }, callback);\n }\n loadOne(name) {\n let prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n const s = name.split('|');\n const lng = s[0];\n const ns = s[1];\n this.read(lng, ns, 'read', undefined, undefined, (err, data) => {\n if (err) this.logger.warn(`${prefix}loading namespace ${ns} for language ${lng} failed`, err);\n if (!err && data) this.logger.log(`${prefix}loaded namespace ${ns} for language ${lng}`, data);\n this.loaded(name, err, data);\n });\n }\n saveMissing(languages, namespace, key, fallbackValue, isUpdate) {\n let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n let clb = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : () => {};\n if (this.services.utils && this.services.utils.hasLoadedNamespace && !this.services.utils.hasLoadedNamespace(namespace)) {\n this.logger.warn(`did not save key \"${key}\" as the namespace \"${namespace}\" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n return;\n }\n if (key === undefined || key === null || key === '') return;\n if (this.backend && this.backend.create) {\n const opts = {\n ...options,\n isUpdate\n };\n const fc = this.backend.create.bind(this.backend);\n if (fc.length < 6) {\n try {\n let r;\n if (fc.length === 5) {\n r = fc(languages, namespace, key, fallbackValue, opts);\n } else {\n r = fc(languages, namespace, key, fallbackValue);\n }\n if (r && typeof r.then === 'function') {\n r.then(data => clb(null, data)).catch(clb);\n } else {\n clb(null, r);\n }\n } catch (err) {\n clb(err);\n }\n } else {\n fc(languages, namespace, key, fallbackValue, clb, opts);\n }\n }\n if (!languages || !languages[0]) return;\n this.store.addResource(languages[0], namespace, key, fallbackValue);\n }\n}\n\nconst get = () => ({\n debug: false,\n initImmediate: true,\n ns: ['translation'],\n defaultNS: ['translation'],\n fallbackLng: ['dev'],\n fallbackNS: false,\n supportedLngs: false,\n nonExplicitSupportedLngs: false,\n load: 'all',\n preload: false,\n simplifyPluralSuffix: true,\n keySeparator: '.',\n nsSeparator: ':',\n pluralSeparator: '_',\n contextSeparator: '_',\n partialBundledLanguages: false,\n saveMissing: false,\n updateMissing: false,\n saveMissingTo: 'fallback',\n saveMissingPlurals: true,\n missingKeyHandler: false,\n missingInterpolationHandler: false,\n postProcess: false,\n postProcessPassResolved: false,\n returnNull: false,\n returnEmptyString: true,\n returnObjects: false,\n joinArrays: false,\n returnedObjectHandler: false,\n parseMissingKeyHandler: false,\n appendNamespaceToMissingKey: false,\n appendNamespaceToCIMode: false,\n overloadTranslationOptionHandler: args => {\n let ret = {};\n if (typeof args[1] === 'object') ret = args[1];\n if (isString(args[1])) ret.defaultValue = args[1];\n if (isString(args[2])) ret.tDescription = args[2];\n if (typeof args[2] === 'object' || typeof args[3] === 'object') {\n const options = args[3] || args[2];\n Object.keys(options).forEach(key => {\n ret[key] = options[key];\n });\n }\n return ret;\n },\n interpolation: {\n escapeValue: true,\n format: value => value,\n prefix: '{{',\n suffix: '}}',\n formatSeparator: ',',\n unescapePrefix: '-',\n nestingPrefix: '$t(',\n nestingSuffix: ')',\n nestingOptionsSeparator: ',',\n maxReplaces: 1000,\n skipOnVariables: true\n }\n});\nconst transformOptions = options => {\n if (isString(options.ns)) options.ns = [options.ns];\n if (isString(options.fallbackLng)) options.fallbackLng = [options.fallbackLng];\n if (isString(options.fallbackNS)) options.fallbackNS = [options.fallbackNS];\n if (options.supportedLngs && options.supportedLngs.indexOf('cimode') < 0) {\n options.supportedLngs = options.supportedLngs.concat(['cimode']);\n }\n return options;\n};\n\nconst noop = () => {};\nconst bindMemberFunctions = inst => {\n const mems = Object.getOwnPropertyNames(Object.getPrototypeOf(inst));\n mems.forEach(mem => {\n if (typeof inst[mem] === 'function') {\n inst[mem] = inst[mem].bind(inst);\n }\n });\n};\nclass I18n extends EventEmitter {\n constructor() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let callback = arguments.length > 1 ? arguments[1] : undefined;\n super();\n this.options = transformOptions(options);\n this.services = {};\n this.logger = baseLogger;\n this.modules = {\n external: []\n };\n bindMemberFunctions(this);\n if (callback && !this.isInitialized && !options.isClone) {\n if (!this.options.initImmediate) {\n this.init(options, callback);\n return this;\n }\n setTimeout(() => {\n this.init(options, callback);\n }, 0);\n }\n }\n init() {\n var _this = this;\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let callback = arguments.length > 1 ? arguments[1] : undefined;\n this.isInitializing = true;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n if (!options.defaultNS && options.defaultNS !== false && options.ns) {\n if (isString(options.ns)) {\n options.defaultNS = options.ns;\n } else if (options.ns.indexOf('translation') < 0) {\n options.defaultNS = options.ns[0];\n }\n }\n const defOpts = get();\n this.options = {\n ...defOpts,\n ...this.options,\n ...transformOptions(options)\n };\n if (this.options.compatibilityAPI !== 'v1') {\n this.options.interpolation = {\n ...defOpts.interpolation,\n ...this.options.interpolation\n };\n }\n if (options.keySeparator !== undefined) {\n this.options.userDefinedKeySeparator = options.keySeparator;\n }\n if (options.nsSeparator !== undefined) {\n this.options.userDefinedNsSeparator = options.nsSeparator;\n }\n const createClassOnDemand = ClassOrObject => {\n if (!ClassOrObject) return null;\n if (typeof ClassOrObject === 'function') return new ClassOrObject();\n return ClassOrObject;\n };\n if (!this.options.isClone) {\n if (this.modules.logger) {\n baseLogger.init(createClassOnDemand(this.modules.logger), this.options);\n } else {\n baseLogger.init(null, this.options);\n }\n let formatter;\n if (this.modules.formatter) {\n formatter = this.modules.formatter;\n } else if (typeof Intl !== 'undefined') {\n formatter = Formatter;\n }\n const lu = new LanguageUtil(this.options);\n this.store = new ResourceStore(this.options.resources, this.options);\n const s = this.services;\n s.logger = baseLogger;\n s.resourceStore = this.store;\n s.languageUtils = lu;\n s.pluralResolver = new PluralResolver(lu, {\n prepend: this.options.pluralSeparator,\n compatibilityJSON: this.options.compatibilityJSON,\n simplifyPluralSuffix: this.options.simplifyPluralSuffix\n });\n if (formatter && (!this.options.interpolation.format || this.options.interpolation.format === defOpts.interpolation.format)) {\n s.formatter = createClassOnDemand(formatter);\n s.formatter.init(s, this.options);\n this.options.interpolation.format = s.formatter.format.bind(s.formatter);\n }\n s.interpolator = new Interpolator(this.options);\n s.utils = {\n hasLoadedNamespace: this.hasLoadedNamespace.bind(this)\n };\n s.backendConnector = new Connector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options);\n s.backendConnector.on('*', function (event) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n _this.emit(event, ...args);\n });\n if (this.modules.languageDetector) {\n s.languageDetector = createClassOnDemand(this.modules.languageDetector);\n if (s.languageDetector.init) s.languageDetector.init(s, this.options.detection, this.options);\n }\n if (this.modules.i18nFormat) {\n s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);\n if (s.i18nFormat.init) s.i18nFormat.init(this);\n }\n this.translator = new Translator(this.services, this.options);\n this.translator.on('*', function (event) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n _this.emit(event, ...args);\n });\n this.modules.external.forEach(m => {\n if (m.init) m.init(this);\n });\n }\n this.format = this.options.interpolation.format;\n if (!callback) callback = noop;\n if (this.options.fallbackLng && !this.services.languageDetector && !this.options.lng) {\n const codes = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n if (codes.length > 0 && codes[0] !== 'dev') this.options.lng = codes[0];\n }\n if (!this.services.languageDetector && !this.options.lng) {\n this.logger.warn('init: no languageDetector is used and no lng is defined');\n }\n const storeApi = ['getResource', 'hasResourceBundle', 'getResourceBundle', 'getDataByLanguage'];\n storeApi.forEach(fcName => {\n this[fcName] = function () {\n return _this.store[fcName](...arguments);\n };\n });\n const storeApiChained = ['addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle'];\n storeApiChained.forEach(fcName => {\n this[fcName] = function () {\n _this.store[fcName](...arguments);\n return _this;\n };\n });\n const deferred = defer();\n const load = () => {\n const finish = (err, t) => {\n this.isInitializing = false;\n if (this.isInitialized && !this.initializedStoreOnce) this.logger.warn('init: i18next is already initialized. You should call init just once!');\n this.isInitialized = true;\n if (!this.options.isClone) this.logger.log('initialized', this.options);\n this.emit('initialized', this.options);\n deferred.resolve(t);\n callback(err, t);\n };\n if (this.languages && this.options.compatibilityAPI !== 'v1' && !this.isInitialized) return finish(null, this.t.bind(this));\n this.changeLanguage(this.options.lng, finish);\n };\n if (this.options.resources || !this.options.initImmediate) {\n load();\n } else {\n setTimeout(load, 0);\n }\n return deferred;\n }\n loadResources(language) {\n let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n let usedCallback = callback;\n const usedLng = isString(language) ? language : this.language;\n if (typeof language === 'function') usedCallback = language;\n if (!this.options.resources || this.options.partialBundledLanguages) {\n if (usedLng && usedLng.toLowerCase() === 'cimode' && (!this.options.preload || this.options.preload.length === 0)) return usedCallback();\n const toLoad = [];\n const append = lng => {\n if (!lng) return;\n if (lng === 'cimode') return;\n const lngs = this.services.languageUtils.toResolveHierarchy(lng);\n lngs.forEach(l => {\n if (l === 'cimode') return;\n if (toLoad.indexOf(l) < 0) toLoad.push(l);\n });\n };\n if (!usedLng) {\n const fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n fallbacks.forEach(l => append(l));\n } else {\n append(usedLng);\n }\n if (this.options.preload) {\n this.options.preload.forEach(l => append(l));\n }\n this.services.backendConnector.load(toLoad, this.options.ns, e => {\n if (!e && !this.resolvedLanguage && this.language) this.setResolvedLanguage(this.language);\n usedCallback(e);\n });\n } else {\n usedCallback(null);\n }\n }\n reloadResources(lngs, ns, callback) {\n const deferred = defer();\n if (typeof lngs === 'function') {\n callback = lngs;\n lngs = undefined;\n }\n if (typeof ns === 'function') {\n callback = ns;\n ns = undefined;\n }\n if (!lngs) lngs = this.languages;\n if (!ns) ns = this.options.ns;\n if (!callback) callback = noop;\n this.services.backendConnector.reload(lngs, ns, err => {\n deferred.resolve();\n callback(err);\n });\n return deferred;\n }\n use(module) {\n if (!module) throw new Error('You are passing an undefined module! Please check the object you are passing to i18next.use()');\n if (!module.type) throw new Error('You are passing a wrong module! Please check the object you are passing to i18next.use()');\n if (module.type === 'backend') {\n this.modules.backend = module;\n }\n if (module.type === 'logger' || module.log && module.warn && module.error) {\n this.modules.logger = module;\n }\n if (module.type === 'languageDetector') {\n this.modules.languageDetector = module;\n }\n if (module.type === 'i18nFormat') {\n this.modules.i18nFormat = module;\n }\n if (module.type === 'postProcessor') {\n postProcessor.addPostProcessor(module);\n }\n if (module.type === 'formatter') {\n this.modules.formatter = module;\n }\n if (module.type === '3rdParty') {\n this.modules.external.push(module);\n }\n return this;\n }\n setResolvedLanguage(l) {\n if (!l || !this.languages) return;\n if (['cimode', 'dev'].indexOf(l) > -1) return;\n for (let li = 0; li < this.languages.length; li++) {\n const lngInLngs = this.languages[li];\n if (['cimode', 'dev'].indexOf(lngInLngs) > -1) continue;\n if (this.store.hasLanguageSomeTranslations(lngInLngs)) {\n this.resolvedLanguage = lngInLngs;\n break;\n }\n }\n }\n changeLanguage(lng, callback) {\n var _this2 = this;\n this.isLanguageChangingTo = lng;\n const deferred = defer();\n this.emit('languageChanging', lng);\n const setLngProps = l => {\n this.language = l;\n this.languages = this.services.languageUtils.toResolveHierarchy(l);\n this.resolvedLanguage = undefined;\n this.setResolvedLanguage(l);\n };\n const done = (err, l) => {\n if (l) {\n setLngProps(l);\n this.translator.changeLanguage(l);\n this.isLanguageChangingTo = undefined;\n this.emit('languageChanged', l);\n this.logger.log('languageChanged', l);\n } else {\n this.isLanguageChangingTo = undefined;\n }\n deferred.resolve(function () {\n return _this2.t(...arguments);\n });\n if (callback) callback(err, function () {\n return _this2.t(...arguments);\n });\n };\n const setLng = lngs => {\n if (!lng && !lngs && this.services.languageDetector) lngs = [];\n const l = isString(lngs) ? lngs : this.services.languageUtils.getBestMatchFromCodes(lngs);\n if (l) {\n if (!this.language) {\n setLngProps(l);\n }\n if (!this.translator.language) this.translator.changeLanguage(l);\n if (this.services.languageDetector && this.services.languageDetector.cacheUserLanguage) this.services.languageDetector.cacheUserLanguage(l);\n }\n this.loadResources(l, err => {\n done(err, l);\n });\n };\n if (!lng && this.services.languageDetector && !this.services.languageDetector.async) {\n setLng(this.services.languageDetector.detect());\n } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) {\n if (this.services.languageDetector.detect.length === 0) {\n this.services.languageDetector.detect().then(setLng);\n } else {\n this.services.languageDetector.detect(setLng);\n }\n } else {\n setLng(lng);\n }\n return deferred;\n }\n getFixedT(lng, ns, keyPrefix) {\n var _this3 = this;\n const fixedT = function (key, opts) {\n let options;\n if (typeof opts !== 'object') {\n for (var _len3 = arguments.length, rest = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n rest[_key3 - 2] = arguments[_key3];\n }\n options = _this3.options.overloadTranslationOptionHandler([key, opts].concat(rest));\n } else {\n options = {\n ...opts\n };\n }\n options.lng = options.lng || fixedT.lng;\n options.lngs = options.lngs || fixedT.lngs;\n options.ns = options.ns || fixedT.ns;\n if (options.keyPrefix !== '') options.keyPrefix = options.keyPrefix || keyPrefix || fixedT.keyPrefix;\n const keySeparator = _this3.options.keySeparator || '.';\n let resultKey;\n if (options.keyPrefix && Array.isArray(key)) {\n resultKey = key.map(k => `${options.keyPrefix}${keySeparator}${k}`);\n } else {\n resultKey = options.keyPrefix ? `${options.keyPrefix}${keySeparator}${key}` : key;\n }\n return _this3.t(resultKey, options);\n };\n if (isString(lng)) {\n fixedT.lng = lng;\n } else {\n fixedT.lngs = lng;\n }\n fixedT.ns = ns;\n fixedT.keyPrefix = keyPrefix;\n return fixedT;\n }\n t() {\n return this.translator && this.translator.translate(...arguments);\n }\n exists() {\n return this.translator && this.translator.exists(...arguments);\n }\n setDefaultNamespace(ns) {\n this.options.defaultNS = ns;\n }\n hasLoadedNamespace(ns) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (!this.isInitialized) {\n this.logger.warn('hasLoadedNamespace: i18next was not initialized', this.languages);\n return false;\n }\n if (!this.languages || !this.languages.length) {\n this.logger.warn('hasLoadedNamespace: i18n.languages were undefined or empty', this.languages);\n return false;\n }\n const lng = options.lng || this.resolvedLanguage || this.languages[0];\n const fallbackLng = this.options ? this.options.fallbackLng : false;\n const lastLng = this.languages[this.languages.length - 1];\n if (lng.toLowerCase() === 'cimode') return true;\n const loadNotPending = (l, n) => {\n const loadState = this.services.backendConnector.state[`${l}|${n}`];\n return loadState === -1 || loadState === 0 || loadState === 2;\n };\n if (options.precheck) {\n const preResult = options.precheck(this, loadNotPending);\n if (preResult !== undefined) return preResult;\n }\n if (this.hasResourceBundle(lng, ns)) return true;\n if (!this.services.backendConnector.backend || this.options.resources && !this.options.partialBundledLanguages) return true;\n if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n return false;\n }\n loadNamespaces(ns, callback) {\n const deferred = defer();\n if (!this.options.ns) {\n if (callback) callback();\n return Promise.resolve();\n }\n if (isString(ns)) ns = [ns];\n ns.forEach(n => {\n if (this.options.ns.indexOf(n) < 0) this.options.ns.push(n);\n });\n this.loadResources(err => {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n loadLanguages(lngs, callback) {\n const deferred = defer();\n if (isString(lngs)) lngs = [lngs];\n const preloaded = this.options.preload || [];\n const newLngs = lngs.filter(lng => preloaded.indexOf(lng) < 0 && this.services.languageUtils.isSupportedCode(lng));\n if (!newLngs.length) {\n if (callback) callback();\n return Promise.resolve();\n }\n this.options.preload = preloaded.concat(newLngs);\n this.loadResources(err => {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n dir(lng) {\n if (!lng) lng = this.resolvedLanguage || (this.languages && this.languages.length > 0 ? this.languages[0] : this.language);\n if (!lng) return 'rtl';\n const rtlLngs = ['ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ug', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam', 'ckb'];\n const languageUtils = this.services && this.services.languageUtils || new LanguageUtil(get());\n return rtlLngs.indexOf(languageUtils.getLanguagePartFromCode(lng)) > -1 || lng.toLowerCase().indexOf('-arab') > 1 ? 'rtl' : 'ltr';\n }\n static createInstance() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let callback = arguments.length > 1 ? arguments[1] : undefined;\n return new I18n(options, callback);\n }\n cloneInstance() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n const forkResourceStore = options.forkResourceStore;\n if (forkResourceStore) delete options.forkResourceStore;\n const mergedOptions = {\n ...this.options,\n ...options,\n ...{\n isClone: true\n }\n };\n const clone = new I18n(mergedOptions);\n if (options.debug !== undefined || options.prefix !== undefined) {\n clone.logger = clone.logger.clone(options);\n }\n const membersToCopy = ['store', 'services', 'language'];\n membersToCopy.forEach(m => {\n clone[m] = this[m];\n });\n clone.services = {\n ...this.services\n };\n clone.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n if (forkResourceStore) {\n clone.store = new ResourceStore(this.store.data, mergedOptions);\n clone.services.resourceStore = clone.store;\n }\n clone.translator = new Translator(clone.services, mergedOptions);\n clone.translator.on('*', function (event) {\n for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n clone.emit(event, ...args);\n });\n clone.init(mergedOptions, callback);\n clone.translator.options = mergedOptions;\n clone.translator.backendConnector.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n return clone;\n }\n toJSON() {\n return {\n options: this.options,\n store: this.store,\n language: this.language,\n languages: this.languages,\n resolvedLanguage: this.resolvedLanguage\n };\n }\n}\nconst instance = I18n.createInstance();\ninstance.createInstance = I18n.createInstance;\n\nconst createInstance = instance.createInstance;\nconst dir = instance.dir;\nconst init = instance.init;\nconst loadResources = instance.loadResources;\nconst reloadResources = instance.reloadResources;\nconst use = instance.use;\nconst changeLanguage = instance.changeLanguage;\nconst getFixedT = instance.getFixedT;\nconst t = instance.t;\nconst exists = instance.exists;\nconst setDefaultNamespace = instance.setDefaultNamespace;\nconst hasLoadedNamespace = instance.hasLoadedNamespace;\nconst loadNamespaces = instance.loadNamespaces;\nconst loadLanguages = instance.loadLanguages;\n\nexport { changeLanguage, createInstance, instance as default, dir, exists, getFixedT, hasLoadedNamespace, init, loadLanguages, loadNamespaces, loadResources, reloadResources, setDefaultNamespace, t, use };\n","import i18next from 'i18next';\r\n\r\n/**\r\n * Type for app-specific i18n resources.\r\n * Supports arbitrary nesting of translation keys and objects.\r\n * Each key is a language code (e.g., 'en', 'zh'), and the value is an object of translation key-value pairs.\r\n */\r\nexport type AppI18nResources = Record<string, Record<string, unknown>>;\r\n\r\n/**\r\n * Factory function to create an isolated i18next instance for an app.\r\n * This allows apps to have their own translations independent of the global nc-ui i18n system.\r\n *\r\n * Features:\r\n * - Creates isolated i18next instance using createInstance()\r\n * - Syncs language with document.documentElement.lang\r\n * - Falls back to English for unsupported languages\r\n * - Supports string interpolation like {{variableName}}\r\n *\r\n * @param resources - Translation resources object with language keys (en, zh, de, th, es, etc.)\r\n * @returns Initialized i18next instance ready for use with I18nextProvider\r\n *\r\n * @example\r\n * ```typescript\r\n * const resources = {\r\n * en: { hello: 'Hello', greeting: 'Hello {{name}}' },\r\n * zh: { hello: '你好', greeting: '你好 {{name}}' },\r\n * };\r\n * const appI18n = createAppI18nFactory(resources);\r\n * \r\n * // Use with react-i18next:\r\n * <I18nextProvider i18n={appI18n}>\r\n * <YourApp />\r\n * </I18nextProvider>\r\n * ```\r\n */\r\nexport function createAppI18nFactory(resources: AppI18nResources) {\r\n // Create isolated instance (not the global singleton)\r\n const instance = i18next.createInstance();\r\n\r\n // Wrap resources in translation namespace structure\r\n const wrappedResources: Record<string, { translation: Record<string, unknown> }> = {};\r\n for (const lang in resources) {\r\n wrappedResources[lang] = { translation: resources[lang] };\r\n }\r\n\r\n // Get initial language from document or fallback\r\n const initialLang = typeof document !== 'undefined'\r\n ? document.documentElement.lang || 'en'\r\n : 'en';\r\n\r\n // Initialize the instance\r\n instance.init({\r\n resources: wrappedResources,\r\n lng: initialLang,\r\n fallbackLng: 'en',\r\n interpolation: {\r\n escapeValue: false, // React already escapes by default\r\n },\r\n });\r\n\r\n // Watch for language changes on document.documentElement.lang\r\n if (typeof MutationObserver !== 'undefined' && typeof document !== 'undefined') {\r\n const observer = new MutationObserver((mutations) => {\r\n for (const mutation of mutations) {\r\n if (mutation.type === 'attributes' && mutation.attributeName === 'lang') {\r\n const newLang = document.documentElement.lang || 'en';\r\n instance.changeLanguage(newLang);\r\n }\r\n }\r\n });\r\n observer.observe(document.documentElement, { attributes: true });\r\n }\r\n\r\n return instance;\r\n}\r\n","import React from 'react';\n\n/**\n * Definition of an application that can be launched in the right toolbar.\n * App components can use the useApp() hook to access container controls.\n */\nexport interface AppDefinition {\n /** Unique identifier for the app */\n id: string;\n /** i18n key for the display title (e.g., 'apps.calculator' or 'apps.maps.name') */\n titleKey?: string;\n /** Icon component displayed in the toolbar */\n icon: React.ComponentType<{ size?: number; className?: string }>;\n /** The main component to render. Use useApp() hook inside to access container controls. */\n component: React.ComponentType;\n /** Panel width when the app is active (default: 400) */\n width?: number;\n /** Padding inside the app container (default: 0) */\n padding?: number;\n /** If true, hides the title bar and close button. The app cannot be closed once launched. */\n hideTitleBar?: boolean;\n}\n\n/**\n * Registry for all available applications.\n * Apps must be registered before they can be launched.\n */\nclass AppRegistry {\n private apps = new Map<string, AppDefinition>();\n\n /**\n * Register an app definition.\n * Applies default values (e.g., width: 400) if not specified.\n */\n register(app: AppDefinition): void {\n if (this.apps.has(app.id)) {\n console.warn(`App \"${app.id}\" is already registered. Overwriting.`);\n }\n\n this.apps.set(app.id, {\n ...app,\n width: app.width ?? 400,\n padding: app.padding ?? 0,\n });\n }\n\n /**\n * Unregister an app by its id.\n */\n unregister(id: string): void {\n this.apps.delete(id);\n }\n\n /**\n * Get an app definition by id.\n */\n get(id: string): AppDefinition | undefined {\n return this.apps.get(id);\n }\n\n /**\n * Get all registered apps.\n */\n list(): AppDefinition[] {\n return Array.from(this.apps.values());\n }\n\n /**\n * Check if an app is registered.\n */\n has(id: string): boolean {\n return this.apps.has(id);\n }\n}\n\nexport const appRegistry = new AppRegistry();\n","/**\r\n * Simple store for persisting app state (like active app ID) across sessions.\r\n * Uses localStorage for persistence.\r\n */\r\n\r\ntype Listener<T> = (value: T) => void;\r\n\r\nconst STORAGE_KEY = 'nc-ui-app-state';\r\n\r\ninterface AppState {\r\n activeAppId: string | null;\r\n}\r\n\r\nclass AppStateStore {\r\n private state: AppState;\r\n private listeners = new Map<keyof AppState, Set<Listener<any>>>();\r\n\r\n constructor() {\r\n // Load persisted state\r\n this.state = this.loadState();\r\n }\r\n\r\n private loadState(): AppState {\r\n try {\r\n const stored = localStorage.getItem(STORAGE_KEY);\r\n if (stored) {\r\n return JSON.parse(stored);\r\n }\r\n } catch (e) {\r\n // ignore parse errors\r\n }\r\n return { activeAppId: null };\r\n }\r\n\r\n private saveState(): void {\r\n try {\r\n localStorage.setItem(STORAGE_KEY, JSON.stringify(this.state));\r\n } catch (e) {\r\n // ignore storage errors\r\n }\r\n }\r\n\r\n /**\r\n * Get the currently active app ID.\r\n */\r\n getActiveAppId(): string | null {\r\n return this.state.activeAppId;\r\n }\r\n\r\n /**\r\n * Set the active app ID (internal use by runningAppsStore).\r\n */\r\n _setActiveAppId(appId: string | null): void {\r\n if (this.state.activeAppId !== appId) {\r\n this.state.activeAppId = appId;\r\n this.saveState();\r\n this.notify('activeAppId', appId);\r\n }\r\n }\r\n\r\n /**\r\n * Subscribe to changes of a specific state key.\r\n */\r\n subscribe<K extends keyof AppState>(key: K, listener: Listener<AppState[K]>): () => void {\r\n if (!this.listeners.has(key)) {\r\n this.listeners.set(key, new Set());\r\n }\r\n this.listeners.get(key)!.add(listener);\r\n return () => {\r\n this.listeners.get(key)?.delete(listener);\r\n };\r\n }\r\n\r\n private notify<K extends keyof AppState>(key: K, value: AppState[K]): void {\r\n this.listeners.get(key)?.forEach((listener) => listener(value));\r\n }\r\n}\r\n\r\nexport const appStateStore = new AppStateStore();\r\n","/**\r\n * Registry for back button handlers.\r\n * Allows apps to register handlers that are called when the user presses back.\r\n * Handlers are called in priority order (higher priority first).\r\n */\r\n\r\ntype BackHandler = () => boolean; // Returns true if handled\r\n\r\ninterface RegisteredHandler {\r\n id: string;\r\n priority: number;\r\n handler: BackHandler;\r\n}\r\n\r\nclass BackHandlerRegistry {\r\n private handlers: RegisteredHandler[] = [];\r\n\r\n /**\r\n * Register a back handler.\r\n * @param id - Unique identifier for this handler\r\n * @param priority - Higher priority handlers are called first\r\n * @param handler - Function that returns true if it handled the back action\r\n * @returns Unsubscribe function\r\n */\r\n register(id: string, priority: number, handler: BackHandler): () => void {\r\n // Remove existing handler with same id\r\n this.handlers = this.handlers.filter((h) => h.id !== id);\r\n\r\n // Add new handler\r\n this.handlers.push({ id, priority, handler });\r\n\r\n // Sort by priority (descending)\r\n this.handlers.sort((a, b) => b.priority - a.priority);\r\n\r\n return () => {\r\n this.handlers = this.handlers.filter((h) => h.id !== id);\r\n };\r\n }\r\n\r\n /**\r\n * Trigger the back action.\r\n * Calls handlers in priority order until one returns true.\r\n * @returns true if a handler processed the back action\r\n */\r\n handleBack(): boolean {\r\n for (const { handler } of this.handlers) {\r\n if (handler()) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Unregister a handler by id.\r\n */\r\n unregister(id: string): void {\r\n this.handlers = this.handlers.filter((h) => h.id !== id);\r\n }\r\n}\r\n\r\nexport const backHandlerRegistry = new BackHandlerRegistry();\r\n\r\n/**\r\n * Push a browser history entry for the app.\r\n * This enables the browser back button to close/navigate apps.\r\n */\r\nexport function setAppInUrl(appId: string): void {\r\n if (typeof window !== 'undefined' && window.history) {\r\n const url = new URL(window.location.href);\r\n url.searchParams.set('app', appId);\r\n window.history.pushState({ app: appId }, '', url.toString());\r\n }\r\n}\r\n\r\n/**\r\n * Clear the app from the URL when closing.\r\n */\r\nexport function clearAppInUrl(): void {\r\n if (typeof window !== 'undefined' && window.history) {\r\n const url = new URL(window.location.href);\r\n url.searchParams.delete('app');\r\n window.history.replaceState({}, '', url.toString());\r\n }\r\n}\r\n","import { appRegistry, AppDefinition } from './appRegistry';\nimport { appStateStore } from '../stores/appStateStore';\nimport { setAppInUrl, clearAppInUrl } from '../utils/backHandlerRegistry';\n\n/**\n * Options for launching an app.\n */\nexport interface LaunchAppOptions {\n /** If true, the app will be launched but not made active. Default: false */\n launchInBackground?: boolean;\n}\n\n/**\n * Represents a running app instance.\n * @template TRef - The type of the ref object exposed by the app\n */\nexport interface RunningApp<TRef = Record<string, unknown>> {\n /** The app definition id */\n appId: string;\n /** Timestamp when the app was launched */\n launchedAt: number;\n /** Reference object populated by the app component with methods/state */\n ref?: TRef;\n}\n\ntype Listener = () => void;\ntype RefReadyResolver = (app: RunningApp) => void;\n\n/**\n * Store for managing running applications.\n * Only one instance of each app is allowed.\n * Apps are not persisted across page refreshes.\n */\nclass RunningAppsStore {\n private apps: RunningApp[] = [];\n private activeAppId: string | null = null;\n private listeners = new Set<Listener>();\n private refReadyResolvers = new Map<string, RefReadyResolver[]>();\n\n /**\n * Launch an app and wait for it to be ready (ref populated).\n * If already running, activates it (unless launchInBackground is true) and returns the existing app.\n * @template TRef - The type of the ref object exposed by the app (optional, for type safety)\n * @param appId - The app id to launch\n * @param options - Launch options\n * @returns Promise that resolves with the RunningApp when ref is ready, or null if app not found\n */\n async launchApp<TRef = Record<string, unknown>>(\n appId: string,\n options?: LaunchAppOptions\n ): Promise<RunningApp<TRef> | null> {\n const { launchInBackground = false } = options || {};\n\n // Check if app is registered\n if (!appRegistry.has(appId)) {\n console.error(`Cannot launch app \"${appId}\": not registered`);\n return null;\n }\n\n // Check if already running with ref ready\n const existing = this.apps.find((a) => a.appId === appId);\n if (existing) {\n if (!launchInBackground) {\n this.setActiveApp(appId);\n appStateStore._setActiveAppId(appId);\n }\n if (existing.ref) {\n return existing as RunningApp<TRef>;\n }\n // Wait for ref to be ready\n return this.waitForRef(appId) as Promise<RunningApp<TRef>>;\n }\n\n // Launch new instance\n const runningApp: RunningApp = {\n appId,\n launchedAt: Date.now(),\n };\n this.apps.push(runningApp);\n\n if (!launchInBackground) {\n this.activeAppId = appId;\n appStateStore._setActiveAppId(appId);\n setAppInUrl(appId); // Push browser history entry with unique URL\n }\n\n this.notify();\n\n // Wait for ref to be ready\n return this.waitForRef(appId) as Promise<RunningApp<TRef>>;\n }\n\n private waitForRef(appId: string): Promise<RunningApp> {\n return new Promise((resolve) => {\n const resolvers = this.refReadyResolvers.get(appId) || [];\n resolvers.push(resolve);\n this.refReadyResolvers.set(appId, resolvers);\n });\n }\n\n /**\n * Called by app components to register their ref.\n * This resolves any pending launchApp promises.\n */\n setAppRef(appId: string, ref: Record<string, any>): void {\n const app = this.apps.find((a) => a.appId === appId);\n if (!app) {\n console.warn(`Cannot set ref for app \"${appId}\": not running`);\n return;\n }\n app.ref = ref;\n\n // Resolve any pending promises\n const resolvers = this.refReadyResolvers.get(appId);\n if (resolvers) {\n resolvers.forEach((resolve) => resolve(app));\n this.refReadyResolvers.delete(appId);\n }\n }\n\n /**\n * Get a running app by id.\n */\n getApp(appId: string): RunningApp | undefined {\n return this.apps.find((a) => a.appId === appId);\n }\n\n /**\n * Close a running app.\n */\n closeApp(appId: string): void {\n const index = this.apps.findIndex((a) => a.appId === appId);\n if (index === -1) return;\n\n // Clear ref before removing\n const app = this.apps[index];\n if (app.ref) {\n app.ref = undefined;\n }\n\n this.apps.splice(index, 1);\n\n // If the closed app was active, clear active state\n if (this.activeAppId === appId) {\n // On desktop (width >= 768px), go to last app; on mobile, set to null\n const isDesktop = window.innerWidth >= 768;\n this.activeAppId = isDesktop && this.apps.length > 0 ? this.apps[this.apps.length - 1].appId : null;\n appStateStore._setActiveAppId(this.activeAppId);\n // Update URL when app is closed\n if (this.activeAppId) {\n setAppInUrl(this.activeAppId);\n } else {\n clearAppInUrl();\n }\n }\n this.notify();\n }\n\n /**\n * Set the active app by its app id.\n */\n setActiveApp(appId: string | null): void {\n if (appId !== null && !this.apps.find((a) => a.appId === appId)) {\n console.warn(`Cannot activate app \"${appId}\": not running`);\n return;\n }\n if (this.activeAppId !== appId) {\n this.activeAppId = appId;\n this.notify();\n appStateStore._setActiveAppId(appId);\n }\n }\n\n /**\n * Toggle an app: if active, deactivate; if inactive, activate.\n */\n toggleApp(appId: string): void {\n if (this.activeAppId === appId) {\n this.setActiveApp(null);\n } else {\n this.launchApp(appId);\n }\n }\n\n /**\n * Get the currently active app id.\n */\n getActiveAppId(): string | null {\n return this.activeAppId;\n }\n\n /**\n * Get the currently active app definition.\n */\n getActiveApp(): AppDefinition | null {\n if (!this.activeAppId) return null;\n return appRegistry.get(this.activeAppId) ?? null;\n }\n\n /**\n * Get all running apps.\n */\n getRunningApps(): RunningApp[] {\n return [...this.apps];\n }\n\n /**\n * Check if an app is running.\n */\n isRunning(appId: string): boolean {\n return this.apps.some((a) => a.appId === appId);\n }\n\n /**\n * Subscribe to changes.\n */\n subscribe(listener: Listener): () => void {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n private notify(): void {\n this.listeners.forEach((l) => l());\n }\n}\n\nexport const runningAppsStore = new RunningAppsStore();\n","import React, { createContext, useContext } from 'react';\n\n/**\n * Context value for app components.\n * Provides functions to control the app container from any nested component.\n */\nexport interface AppContextValue {\n /** Set the title bar text (should be already translated) */\n setTitle: (title: string) => void;\n /** Set a back button handler. When set, a back arrow appears in the title bar. */\n setBackHandler: (handler: () => void) => void;\n /** Clear the back button handler, hiding the back arrow. */\n clearBackHandler: () => void;\n /** Set toolbar content to render in the title bar (right-aligned, before close button) */\n setToolbar: (toolbar: React.ReactNode) => void;\n /** Clear the toolbar content */\n clearToolbar: () => void;\n /** Hide the back button temporarily (useful when in edit mode) */\n setHideBackButton: (hide: boolean) => void;\n /** Dynamically hide or show the title bar */\n setHideTitleBar: (hide: boolean) => void;\n /** Close the app */\n close: () => void;\n}\n\nexport const AppContext = createContext<AppContextValue | null>(null);\n\n/**\n * Hook to access app context from within an app.\n * Returns functions to control the app container (setTitle, close, etc.)\n * Can be called from any component nested inside an app.\n * @throws Error if used outside of an app component\n */\nexport function useApp(): AppContextValue {\n const ctx = useContext(AppContext);\n if (!ctx) {\n throw new Error('useApp must be used inside an App');\n }\n return ctx;\n}\n","import React from 'react';\nimport { CloseButton } from '../CommonButtons';\n\ninterface AppTitleBarProps {\n title: string;\n onClose: () => void;\n /** If provided, shows a back arrow button on the left */\n onBack?: () => void;\n /** Optional toolbar content to render on the right side (before close button) */\n toolbar?: React.ReactNode;\n /** Whether to hide the back button even when onBack is provided (useful for edit mode) */\n hideBackButton?: boolean;\n}\n\n/**\n * Back arrow icon for navigation\n */\nfunction BackArrowIcon({ size = 16 }: { size?: number }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M19 12H5\" />\n <path d=\"M12 19l-7-7 7-7\" />\n </svg>\n );\n}\n\n/**\n * Title bar component for launched applications.\n * Displays the app title, optional back button, optional toolbar, and a close button.\n */\nexport function AppTitleBar({ title, onClose, onBack, toolbar, hideBackButton }: AppTitleBarProps) {\n const showBackButton = onBack && !hideBackButton;\n\n return (\n <div className=\"nc-app-title-bar\">\n <div className=\"nc-app-title-bar-left\">\n {showBackButton && (\n <button\n className=\"nc-app-title-bar-back\"\n onClick={onBack}\n title=\"Back\"\n aria-label=\"Go back\"\n >\n <BackArrowIcon size={16} />\n </button>\n )}\n <span className=\"nc-app-title-bar-title\">{title}</span>\n </div>\n <div className=\"nc-app-title-bar-right\">\n {toolbar && <div className=\"nc-app-title-bar-toolbar\">{toolbar}</div>}\n <CloseButton onClick={onClose} aria-label=\"Close application\" />\n </div>\n </div>\n );\n}\n","import React, { useState, useCallback, useMemo, useEffect, Suspense } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { appRegistry } from '../../lib/appRegistry';\nimport { AppContext, AppContextValue } from './AppContext';\nimport { AppTitleBar } from './AppTitleBar';\nimport { backHandlerRegistry } from '../../utils/backHandlerRegistry';\nimport { ActivityIndicator } from '../ActivityIndicator';\n\ninterface AppContainerProps {\n /** The app ID to render */\n appId: string;\n /** Whether this app is currently active (visible) */\n isActive: boolean;\n /** Called when the close button is clicked */\n onClose: () => void;\n}\n\ninterface AppErrorState {\n hasError: boolean;\n error?: Error;\n}\n\n/**\n * Error boundary for app loading failures.\n */\nclass AppErrorBoundary extends React.Component<\n { children: React.ReactNode; appId: string },\n AppErrorState\n> {\n constructor(props: { children: React.ReactNode; appId: string }) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError(error: Error): AppErrorState {\n return { hasError: true, error };\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {\n console.error(`Error loading app ${this.props.appId}:`, error, errorInfo);\n }\n\n render() {\n if (this.state.hasError) {\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flex: 1,\n flexDirection: 'column',\n gap: '16px',\n padding: '20px',\n textAlign: 'center',\n color: 'var(--text-secondary)',\n }}\n >\n <div>Failed to load app</div>\n {this.state.error && (\n <div style={{ fontSize: '12px', opacity: 0.7 }}>\n {this.state.error.message}\n </div>\n )}\n </div>\n );\n }\n return this.props.children;\n }\n}\n\n/**\n * Container component that wraps an app with its title bar.\n * Provides AppContext to the app component, allowing any nested\n * component to control the title bar dynamically via useApp() hook.\n */\nexport function AppContainer({ appId, isActive, onClose }: AppContainerProps) {\n const { t } = useTranslation();\n const def = appRegistry.get(appId);\n\n // Dynamic title state - initialized from app definition\n const [title, setTitleState] = useState<string>('');\n const [backHandler, setBackHandlerState] = useState<(() => void) | null>(null);\n const [toolbar, setToolbarState] = useState<React.ReactNode>(null);\n const [hideBackButton, setHideBackButtonState] = useState<boolean>(false);\n const [hideTitleBar, setHideTitleBarState] = useState<boolean>(false);\n\n // Initialize title from definition when it changes\n React.useEffect(() => {\n if (def?.titleKey) {\n setTitleState(t(def.titleKey));\n }\n }, [def, t]);\n\n // Register back handler when app is active (priority 50)\n useEffect(() => {\n if (!isActive) return;\n\n return backHandlerRegistry.register(`app-${appId}`, 50, () => {\n if (backHandler) {\n // Has back handler = can go back in NavStack\n backHandler();\n return true;\n }\n // No back handler = at app root, close the app\n onClose();\n return true;\n });\n }, [isActive, backHandler, onClose, appId]);\n\n // Memoized callbacks for app component\n const setTitle = useCallback((newTitle: string) => {\n setTitleState(newTitle);\n }, []);\n\n const setBackHandler = useCallback((handler: () => void) => {\n setBackHandlerState(() => handler);\n }, []);\n\n const clearBackHandler = useCallback(() => {\n setBackHandlerState(null);\n }, []);\n\n const setToolbar = useCallback((newToolbar: React.ReactNode) => {\n setToolbarState(newToolbar);\n }, []);\n\n const clearToolbar = useCallback(() => {\n setToolbarState(null);\n }, []);\n\n const setHideBackButton = useCallback((hide: boolean) => {\n setHideBackButtonState(hide);\n }, []);\n\n const setHideTitleBar = useCallback((hide: boolean) => {\n setHideTitleBarState(hide);\n }, []);\n\n // Memoize context value to prevent unnecessary re-renders\n const appContextValue: AppContextValue = useMemo(() => ({\n setTitle,\n setBackHandler,\n clearBackHandler,\n setToolbar,\n clearToolbar,\n setHideBackButton,\n setHideTitleBar,\n close: onClose,\n }), [setTitle, setBackHandler, clearBackHandler, setToolbar, clearToolbar, setHideBackButton, setHideTitleBar, onClose]);\n\n if (!def) {\n return null;\n }\n\n const AppComp = def.component;\n // Title bar is shown if both the static definition allows it AND it's not dynamically hidden\n const showTitleBar = !def.hideTitleBar && !hideTitleBar;\n\n return (\n <div\n style={{\n display: isActive ? 'flex' : 'none',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n }}\n >\n {showTitleBar && (\n <AppTitleBar\n title={title}\n onClose={onClose}\n onBack={backHandler ?? undefined}\n toolbar={toolbar}\n hideBackButton={hideBackButton}\n />\n )}\n <div\n className={showTitleBar ? 'nc-app-content-wrapper' : ''}\n style={{\n padding: def.padding,\n flex: 1,\n minHeight: 0,\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: 'var(--nc-bg-secondary)',\n position: 'relative',\n }}\n >\n <AppContext.Provider value={appContextValue}>\n <AppErrorBoundary appId={appId}>\n <Suspense\n fallback={\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flex: 1,\n }}\n >\n <ActivityIndicator />\n </div>\n }\n >\n <AppComp />\n </Suspense>\n </AppErrorBoundary>\n </AppContext.Provider>\n </div>\n </div>\n );\n}\n","import { createContext, useContext, useState, useEffect, ReactNode } from 'react';\r\n\r\n/**\r\n * Viewport context value providing responsive breakpoint information.\r\n */\r\nexport interface ViewportContextValue {\r\n /** True if viewport width < 768px */\r\n isMobile: boolean;\r\n /** True if viewport width >= 768px and < 1024px */\r\n isTablet: boolean;\r\n /** True if viewport width >= 1024px */\r\n isDesktop: boolean;\r\n /** Current viewport width in pixels */\r\n width: number;\r\n /** Current viewport height in pixels */\r\n height: number;\r\n}\r\n\r\nconst MOBILE_BREAKPOINT = 768;\r\nconst TABLET_BREAKPOINT = 1024;\r\n\r\nconst defaultValue: ViewportContextValue = {\r\n isMobile: false,\r\n isTablet: false,\r\n isDesktop: true,\r\n width: typeof window !== 'undefined' ? window.innerWidth : 1024,\r\n height: typeof window !== 'undefined' ? window.innerHeight : 768,\r\n};\r\n\r\nconst ViewportContext = createContext<ViewportContextValue>(defaultValue);\r\n\r\n/**\r\n * Provider component that tracks viewport size and provides responsive breakpoints.\r\n */\r\nexport function ViewportProvider({ children }: { children: ReactNode }) {\r\n const [viewport, setViewport] = useState<ViewportContextValue>(() => {\r\n if (typeof window === 'undefined') return defaultValue;\r\n\r\n const width = window.innerWidth;\r\n const height = window.innerHeight;\r\n return {\r\n isMobile: width < MOBILE_BREAKPOINT,\r\n isTablet: width >= MOBILE_BREAKPOINT && width < TABLET_BREAKPOINT,\r\n isDesktop: width >= TABLET_BREAKPOINT,\r\n width,\r\n height,\r\n };\r\n });\r\n\r\n useEffect(() => {\r\n const handleResize = () => {\r\n const width = window.innerWidth;\r\n const height = window.innerHeight;\r\n setViewport({\r\n isMobile: width < MOBILE_BREAKPOINT,\r\n isTablet: width >= MOBILE_BREAKPOINT && width < TABLET_BREAKPOINT,\r\n isDesktop: width >= TABLET_BREAKPOINT,\r\n width,\r\n height,\r\n });\r\n };\r\n\r\n window.addEventListener('resize', handleResize);\r\n return () => window.removeEventListener('resize', handleResize);\r\n }, []);\r\n\r\n return (\r\n <ViewportContext.Provider value={viewport}>\r\n {children}\r\n </ViewportContext.Provider>\r\n );\r\n}\r\n\r\n/**\r\n * Hook to access viewport information.\r\n */\r\nexport function useViewport(): ViewportContextValue {\r\n return useContext(ViewportContext);\r\n}\r\n","import React, { useState, useEffect } from 'react';\nimport { appStateStore } from '../../stores/appStateStore';\nimport { runningAppsStore, RunningApp } from '../../lib/runningAppsStore';\nimport { appRegistry } from '../../lib/appRegistry';\nimport { AppContainer } from './AppContainer';\nimport { useViewport } from '../../contexts/ViewportContext';\n\n/**\n * AppPanel component - Renders the right-side panel that displays running apps.\n * Each running app is rendered via AppContainer, but only the active app is visible.\n * On mobile devices, the panel overlays on top of the main area.\n * On desktop, the panel sits inline next to the main area.\n */\nexport function AppPanel() {\n const { isMobile } = useViewport();\n const [activeAppId, setActiveAppId] = useState<string | null>(() => appStateStore.getActiveAppId());\n const [runningApps, setRunningApps] = useState<RunningApp[]>(() => runningAppsStore.getRunningApps());\n\n // Subscribe to appStateStore for active app\n useEffect(() => {\n const unsubActiveApp = appStateStore.subscribe('activeAppId', (appId) => {\n setActiveAppId(appId);\n });\n return () => {\n unsubActiveApp();\n };\n }, []);\n\n // Subscribe to runningAppsStore\n useEffect(() => {\n const unsub = runningAppsStore.subscribe(() => {\n setRunningApps(runningAppsStore.getRunningApps());\n });\n return unsub;\n }, []);\n\n // Launch the persisted active app on mount (if not already running)\n // Skip restoration if URL parameters are present (for deep linking)\n useEffect(() => {\n const params = new URLSearchParams(window.location.search);\n const hasAppParam = params.has('app');\n\n if (!hasAppParam) {\n const persistedAppId = appStateStore.getActiveAppId();\n if (persistedAppId && !runningAppsStore.isRunning(persistedAppId)) {\n runningAppsStore.launchApp(persistedAppId);\n }\n }\n }, []);\n\n const onCloseApp = (appId: string) => {\n runningAppsStore.closeApp(appId);\n };\n\n const activeAppDef = activeAppId ? appRegistry.get(activeAppId) : null;\n const defaultPanelWidth = 400;\n const fullPanelWidth = activeAppDef?.width ?? defaultPanelWidth;\n const expanded = activeAppId !== null;\n\n // Mobile: overlay on top, Desktop: inline positioning\n const panelStyle: React.CSSProperties = {\n overflow: 'hidden',\n width: expanded ? (isMobile ? '100%' : fullPanelWidth) : 0,\n flexShrink: 0,\n display: expanded ? 'flex' : 'none',\n flexDirection: 'column',\n position: isMobile && expanded ? 'absolute' : 'relative',\n top: isMobile && expanded ? 0 : undefined,\n left: isMobile && expanded ? 0 : undefined,\n right: isMobile && expanded ? 0 : undefined,\n bottom: isMobile && expanded ? 56 : undefined,\n zIndex: isMobile && expanded ? 10 : undefined,\n maxHeight: isMobile && expanded ? 'calc(100% - 56px)' : '100%',\n borderRight: expanded && !isMobile ? '1px solid var(--nc-border)' : undefined,\n };\n\n return (\n <div className=\"panel\" style={panelStyle}>\n {/* Render all running apps via AppContainer */}\n {runningApps.map((ra) => (\n <AppContainer\n key={ra.appId}\n appId={ra.appId}\n isActive={activeAppId === ra.appId}\n onClose={() => onCloseApp(ra.appId)}\n />\n ))}\n </div>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { appStateStore } from '../../stores/appStateStore';\nimport { runningAppsStore, RunningApp } from '../../lib/runningAppsStore';\nimport { appRegistry, AppDefinition } from '../../lib/appRegistry';\nimport { useViewport } from '../../contexts/ViewportContext';\n\nexport interface AppTaskbarProps {\n /** Array of app IDs to pin to the taskbar (always visible) */\n pinnedAppIds: string[];\n /** Optional className for the taskbar container */\n className?: string;\n}\n\n/**\n * AppTaskbar component - A Windows 11-style taskbar for launching and switching apps.\n * Displays pinned app icons that are always visible, plus any running non-pinned apps.\n * Clicking an icon launches the app or toggles its active state if already running.\n */\nexport function AppTaskbar({ pinnedAppIds, className = '' }: AppTaskbarProps) {\n const { isMobile } = useViewport();\n const [activeAppId, setActiveAppId] = useState<string | null>(() => appStateStore.getActiveAppId());\n const [runningApps, setRunningApps] = useState<RunningApp[]>(() => runningAppsStore.getRunningApps());\n\n // Subscribe to appStateStore for active app\n useEffect(() => {\n const unsubActiveApp = appStateStore.subscribe('activeAppId', (appId) => {\n setActiveAppId(appId);\n });\n return () => {\n unsubActiveApp();\n };\n }, []);\n\n // Subscribe to runningAppsStore\n useEffect(() => {\n const unsub = runningAppsStore.subscribe(() => {\n setRunningApps(runningAppsStore.getRunningApps());\n });\n return unsub;\n }, []);\n\n const onClickApp = (appId: string) => {\n // If clicking on the active app, deactivate it\n if (activeAppId === appId) {\n runningAppsStore.setActiveApp(null);\n } else {\n runningAppsStore.launchApp(appId);\n }\n };\n\n // Get pinned app definitions\n const pinnedAppDefs = pinnedAppIds\n .map(id => appRegistry.get(id))\n .filter((def): def is AppDefinition => !!def);\n\n // Get non-pinned running app definitions (apps that are running but not pinned)\n const nonPinnedRunningAppDefs = runningApps\n .filter(ra => !pinnedAppIds.includes(ra.appId))\n .map(ra => ({ running: ra, def: appRegistry.get(ra.appId) }))\n .filter((item): item is { running: RunningApp; def: AppDefinition } => !!item.def);\n\n // Check if an app is running\n const isAppRunning = (appId: string) => runningApps.some(ra => ra.appId === appId);\n\n const iconSize = isMobile ? 24 : 28;\n\n return (\n <div className={`nc-app-taskbar ${isMobile ? 'nc-mobile' : 'nc-desktop'} ${className}`}>\n {/* Pinned app icons (always visible) */}\n {pinnedAppDefs.map((def) => {\n const Icon = def.icon;\n const isActive = activeAppId === def.id;\n const isRunning = isAppRunning(def.id);\n\n return (\n <button\n key={def.id}\n className={`nc-app-taskbar-button ${isActive ? 'nc-active' : ''} ${isRunning ? 'nc-running' : ''}`}\n onClick={() => onClickApp(def.id)}\n title={def.titleKey || def.id}\n >\n <Icon size={iconSize} />\n {isRunning && <span className=\"nc-app-taskbar-indicator\" />}\n </button>\n );\n })}\n\n {/* Separator between pinned and non-pinned running apps */}\n {nonPinnedRunningAppDefs.length > 0 && (\n <div className=\"nc-app-taskbar-separator\" />\n )}\n\n {/* Non-pinned running app icons */}\n {nonPinnedRunningAppDefs.map(({ running, def }) => {\n const Icon = def.icon;\n const isActive = activeAppId === running.appId;\n\n return (\n <button\n key={running.appId}\n className={`nc-app-taskbar-button ${isActive ? 'nc-active' : ''} nc-running`}\n onClick={() => onClickApp(running.appId)}\n title={def.titleKey || def.id}\n >\n <Icon size={iconSize} />\n <span className=\"nc-app-taskbar-indicator\" />\n </button>\n );\n })}\n </div>\n );\n}\n","import React, { useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { AppContainer } from './AppContainer';\nimport { backHandlerRegistry } from '../../utils/backHandlerRegistry';\n\nexport interface AppDialogProps {\n /** The app ID to render */\n appId: string;\n /** Whether the dialog is open */\n open: boolean;\n /** Called when the dialog should close */\n onClose: () => void;\n /** Whether clicking the backdrop closes the dialog (default: false) */\n closeOnBackdrop?: boolean;\n /** Optional CSS class name for the dialog container */\n className?: string;\n /** Maximum width in pixels (default: 1200) */\n maxWidth?: number;\n /** Maximum height in pixels (default: 900) */\n maxHeight?: number;\n}\n\n/**\n * Renders an app in a fullscreen portal overlay without using the Dialog component.\n * Uses AppContainer directly to preserve all app functionality (title bar, AppContext, back handlers).\n */\nexport function AppDialog({\n appId,\n open,\n onClose,\n closeOnBackdrop = false,\n className = '',\n maxWidth = 1200,\n maxHeight = 900,\n}: AppDialogProps) {\n // Handle backdrop click\n const handleBackdropClick = (e: React.MouseEvent) => {\n if (closeOnBackdrop && e.target === e.currentTarget) {\n onClose();\n }\n };\n\n // Register back handler when dialog is open (priority 100 - highest, same as Dialog)\n useEffect(() => {\n if (!open) return;\n\n const dialogId = `app-dialog-${appId}-${Date.now()}`;\n return backHandlerRegistry.register(dialogId, 100, () => {\n onClose();\n return true;\n });\n }, [open, onClose, appId]);\n\n if (!open) return null;\n\n const content = (\n <div\n className=\"nc-dialog-overlay nc-fullscreen\"\n onClick={handleBackdropClick}\n >\n <div\n className={`nc-app-dialog-container ${className}`}\n style={{\n maxWidth: `${maxWidth}px`,\n maxHeight: `${maxHeight}px`,\n }}\n onClick={(e) => e.stopPropagation()}\n >\n <AppContainer\n appId={appId}\n isActive={true}\n onClose={onClose}\n />\n </div>\n </div>\n );\n\n return createPortal(content, document.body);\n}\n","import React, { createContext, useContext, useState, useCallback, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useApp } from './app/AppContext';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface NavView {\n /** Unique identifier for the view */\n id: string;\n /** i18n key for the title (preferred - updates on language change) */\n titleKey?: string;\n /** Static title string (used when titleKey is not provided, e.g., for dynamic data like SSID) */\n title?: string;\n /** The view component to render */\n component: React.ReactNode;\n}\n\nexport interface NavStackContextValue {\n /** Push a new view onto the stack */\n push: (view: NavView) => void;\n /** Go back one level (pop the current view) */\n pop: () => void;\n /** Reset to root view (clear entire stack) */\n reset: () => void;\n /** Current stack depth (1 = root only) */\n depth: number;\n /** Whether back navigation is possible */\n canGoBack: boolean;\n /** Current view's title */\n currentTitle: string;\n}\n\n/**\n * Per-view context for toolbar management.\n * Each view gets its own setToolbar/clearToolbar that only affects its stack slot.\n */\nexport interface NavViewContextValue {\n /** Set toolbar for THIS view only */\n setToolbar: (toolbar: React.ReactNode) => void;\n /** Clear toolbar for THIS view */\n clearToolbar: () => void;\n}\n\ninterface NavStackProviderProps {\n /** The root view (always shown at the bottom of the stack) */\n rootView: NavView;\n /** Child components (typically NavStackContainer) */\n children: React.ReactNode;\n}\n\n// ============================================================================\n// Context\n// ============================================================================\n\nconst NavStackContext = createContext<NavStackContextValue | null>(null);\nconst NavViewContext = createContext<NavViewContextValue | null>(null);\n\n/**\n * Hook to access navigation stack controls.\n * Must be used within a NavStackProvider.\n */\nexport function useNavStack(): NavStackContextValue {\n const context = useContext(NavStackContext);\n if (!context) {\n throw new Error('useNavStack must be used within a NavStackProvider');\n }\n return context;\n}\n\n/**\n * Hook to access per-view toolbar controls.\n * Must be used within a NavStack view.\n */\nexport function useNavView(): NavViewContextValue {\n const context = useContext(NavViewContext);\n if (!context) {\n throw new Error('useNavView must be used within NavStack');\n }\n return context;\n}\n\n// ============================================================================\n// Internal Context for Provider Communication\n// ============================================================================\n\ninterface NavStackInternalValue {\n stack: NavView[];\n toolbarStack: (React.ReactNode | null)[];\n updateToolbar: (index: number, toolbar: React.ReactNode) => void;\n clearToolbarAt: (index: number) => void;\n topIndex: number;\n}\n\nconst NavStackInternalContext = createContext<NavStackInternalValue | null>(null);\n\n// ============================================================================\n// NavStackProvider\n// ============================================================================\n\n/**\n * Provides navigation stack context to child components.\n * Manages the view stack and exposes push/pop/reset operations.\n * Syncs title and back button with AppContainer via useApp() hook.\n * Also manages a parallel toolbar stack for stack-based toolbar management.\n */\nexport function NavStackProvider({ rootView, children }: NavStackProviderProps) {\n const { t } = useTranslation();\n const appContext = useApp();\n const [stack, setStack] = useState<NavView[]>([rootView]);\n const [toolbarStack, setToolbarStack] = useState<(React.ReactNode | null)[]>([null]);\n\n const updateToolbar = useCallback((index: number, toolbar: React.ReactNode) => {\n setToolbarStack((prev) => {\n const newStack = [...prev];\n newStack[index] = toolbar;\n return newStack;\n });\n }, []);\n\n const clearToolbarAt = useCallback((index: number) => {\n setToolbarStack((prev) => {\n const newStack = [...prev];\n newStack[index] = null;\n return newStack;\n });\n }, []);\n\n const push = useCallback((view: NavView) => {\n setStack((prev) => [...prev, view]);\n setToolbarStack((prev) => [...prev, null]); // New view starts with no toolbar\n }, []);\n\n const pop = useCallback(() => {\n setStack((prev) => {\n if (prev.length <= 1) return prev;\n return prev.slice(0, -1);\n });\n setToolbarStack((prev) => prev.slice(0, -1)); // Remove toolbar slot\n }, []);\n\n const reset = useCallback(() => {\n setStack([rootView]);\n setToolbarStack([null]);\n }, [rootView]);\n\n const depth = stack.length;\n const canGoBack = depth > 1;\n const topIndex = stack.length - 1;\n\n // Get current view and resolve title (titleKey takes precedence)\n const currentView = stack[stack.length - 1];\n const currentTitle = currentView?.titleKey\n ? t(currentView.titleKey)\n : (currentView?.title ?? '');\n\n // Sync with AppContainer title bar\n useEffect(() => {\n appContext.setTitle(currentTitle);\n }, [currentTitle, appContext]);\n\n // Sync back handler with AppContainer\n useEffect(() => {\n if (canGoBack) {\n appContext.setBackHandler(pop);\n } else {\n appContext.clearBackHandler();\n }\n }, [canGoBack, pop, appContext]);\n\n // Sync top toolbar to AppContainer\n useEffect(() => {\n const topToolbar = toolbarStack[toolbarStack.length - 1];\n if (topToolbar) {\n appContext.setToolbar(topToolbar);\n } else {\n appContext.clearToolbar();\n }\n }, [toolbarStack, appContext]);\n\n const contextValue: NavStackContextValue = {\n push,\n pop,\n reset,\n depth,\n canGoBack,\n currentTitle,\n };\n\n const internalValue: NavStackInternalValue = {\n stack,\n toolbarStack,\n updateToolbar,\n clearToolbarAt,\n topIndex,\n };\n\n return (\n <NavStackContext.Provider value={contextValue}>\n <NavStackInternalContext.Provider value={internalValue}>\n {children}\n </NavStackInternalContext.Provider>\n </NavStackContext.Provider>\n );\n}\n\n// ============================================================================\n// NavViewProvider (Wraps Each View)\n// ============================================================================\n\ninterface NavViewProviderProps {\n index: number;\n children: React.ReactNode;\n}\n\nfunction NavViewProvider({ index, children }: NavViewProviderProps) {\n const internalContext = useContext(NavStackInternalContext);\n\n if (!internalContext) {\n throw new Error('NavViewProvider must be used within NavStackProvider');\n }\n\n const { updateToolbar, clearToolbarAt, topIndex } = internalContext;\n\n // Only allow updates if this view is the active (top) view\n const setToolbar = useCallback((toolbar: React.ReactNode) => {\n if (index === topIndex) {\n updateToolbar(index, toolbar);\n }\n }, [index, topIndex, updateToolbar]);\n\n const clearToolbar = useCallback(() => {\n if (index === topIndex) {\n clearToolbarAt(index);\n }\n }, [index, topIndex, clearToolbarAt]);\n\n const contextValue: NavViewContextValue = {\n setToolbar,\n clearToolbar,\n };\n\n return (\n <NavViewContext.Provider value={contextValue}>\n {children}\n </NavViewContext.Provider>\n );\n}\n\n// ============================================================================\n// NavStackContainer\n// ============================================================================\n\n/**\n * Renders the views in the navigation stack.\n * All views in the stack remain mounted (hidden with CSS) to preserve state.\n * Title bar is now handled by AppContainer, so showTitleBar is removed.\n * Each view is wrapped with NavViewProvider for stack-based toolbar management.\n */\nexport function NavStackContainer() {\n const navContext = useContext(NavStackContext);\n const internalContext = useContext(NavStackInternalContext);\n\n if (!navContext || !internalContext) {\n throw new Error('NavStackContainer must be used within a NavStackProvider');\n }\n\n const { stack } = internalContext;\n\n return (\n <div className=\"nav-stack-container\">\n <div className=\"nav-stack-content\">\n {/* Render all views but only show the current one */}\n {stack.map((view, index) => {\n const isActive = index === stack.length - 1;\n return (\n <NavViewProvider key={view.id} index={index}>\n <div\n style={{ display: isActive ? 'flex' : 'none', flexDirection: 'column', height: '100%' }}\n >\n {view.component}\n </div>\n </NavViewProvider>\n );\n })}\n </div>\n </div>\n );\n}\n","const CLASS_PART_SEPARATOR = '-';\nconst createClassGroupUtils = config => {\n const classMap = createClassMap(config);\n const {\n conflictingClassGroups,\n conflictingClassGroupModifiers\n } = config;\n const getClassGroupId = className => {\n const classParts = className.split(CLASS_PART_SEPARATOR);\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.\n if (classParts[0] === '' && classParts.length !== 1) {\n classParts.shift();\n }\n return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className);\n };\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n const conflicts = conflictingClassGroups[classGroupId] || [];\n if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {\n return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]];\n }\n return conflicts;\n };\n return {\n getClassGroupId,\n getConflictingClassGroupIds\n };\n};\nconst getGroupRecursive = (classParts, classPartObject) => {\n if (classParts.length === 0) {\n return classPartObject.classGroupId;\n }\n const currentClassPart = classParts[0];\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n const classGroupFromNextClassPart = nextClassPartObject ? getGroupRecursive(classParts.slice(1), nextClassPartObject) : undefined;\n if (classGroupFromNextClassPart) {\n return classGroupFromNextClassPart;\n }\n if (classPartObject.validators.length === 0) {\n return undefined;\n }\n const classRest = classParts.join(CLASS_PART_SEPARATOR);\n return classPartObject.validators.find(({\n validator\n }) => validator(classRest))?.classGroupId;\n};\nconst arbitraryPropertyRegex = /^\\[(.+)\\]$/;\nconst getGroupIdForArbitraryProperty = className => {\n if (arbitraryPropertyRegex.test(className)) {\n const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)[1];\n const property = arbitraryPropertyClassName?.substring(0, arbitraryPropertyClassName.indexOf(':'));\n if (property) {\n // I use two dots here because one dot is used as prefix for class groups in plugins\n return 'arbitrary..' + property;\n }\n }\n};\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n const {\n theme,\n prefix\n } = config;\n const classMap = {\n nextPart: new Map(),\n validators: []\n };\n const prefixedClassGroupEntries = getPrefixedClassGroupEntries(Object.entries(config.classGroups), prefix);\n prefixedClassGroupEntries.forEach(([classGroupId, classGroup]) => {\n processClassesRecursively(classGroup, classMap, classGroupId, theme);\n });\n return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n classGroup.forEach(classDefinition => {\n if (typeof classDefinition === 'string') {\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n return;\n }\n if (typeof classDefinition === 'function') {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n classPartObject.validators.push({\n validator: classDefinition,\n classGroupId\n });\n return;\n }\n Object.entries(classDefinition).forEach(([key, classGroup]) => {\n processClassesRecursively(classGroup, getPart(classPartObject, key), classGroupId, theme);\n });\n });\n};\nconst getPart = (classPartObject, path) => {\n let currentClassPartObject = classPartObject;\n path.split(CLASS_PART_SEPARATOR).forEach(pathPart => {\n if (!currentClassPartObject.nextPart.has(pathPart)) {\n currentClassPartObject.nextPart.set(pathPart, {\n nextPart: new Map(),\n validators: []\n });\n }\n currentClassPartObject = currentClassPartObject.nextPart.get(pathPart);\n });\n return currentClassPartObject;\n};\nconst isThemeGetter = func => func.isThemeGetter;\nconst getPrefixedClassGroupEntries = (classGroupEntries, prefix) => {\n if (!prefix) {\n return classGroupEntries;\n }\n return classGroupEntries.map(([classGroupId, classGroup]) => {\n const prefixedClassGroup = classGroup.map(classDefinition => {\n if (typeof classDefinition === 'string') {\n return prefix + classDefinition;\n }\n if (typeof classDefinition === 'object') {\n return Object.fromEntries(Object.entries(classDefinition).map(([key, value]) => [prefix + key, value]));\n }\n return classDefinition;\n });\n return [classGroupId, prefixedClassGroup];\n });\n};\n\n// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance\nconst createLruCache = maxCacheSize => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {}\n };\n }\n let cacheSize = 0;\n let cache = new Map();\n let previousCache = new Map();\n const update = (key, value) => {\n cache.set(key, value);\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = new Map();\n }\n };\n return {\n get(key) {\n let value = cache.get(key);\n if (value !== undefined) {\n return value;\n }\n if ((value = previousCache.get(key)) !== undefined) {\n update(key, value);\n return value;\n }\n },\n set(key, value) {\n if (cache.has(key)) {\n cache.set(key, value);\n } else {\n update(key, value);\n }\n }\n };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst createParseClassName = config => {\n const {\n separator,\n experimentalParseClassName\n } = config;\n const isSeparatorSingleCharacter = separator.length === 1;\n const firstSeparatorCharacter = separator[0];\n const separatorLength = separator.length;\n // parseClassName inspired by https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n const parseClassName = className => {\n const modifiers = [];\n let bracketDepth = 0;\n let modifierStart = 0;\n let postfixModifierPosition;\n for (let index = 0; index < className.length; index++) {\n let currentCharacter = className[index];\n if (bracketDepth === 0) {\n if (currentCharacter === firstSeparatorCharacter && (isSeparatorSingleCharacter || className.slice(index, index + separatorLength) === separator)) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + separatorLength;\n continue;\n }\n if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') {\n bracketDepth++;\n } else if (currentCharacter === ']') {\n bracketDepth--;\n }\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart);\n const hasImportantModifier = baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER);\n const baseClassName = hasImportantModifier ? baseClassNameWithImportantModifier.substring(1) : baseClassNameWithImportantModifier;\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n };\n };\n if (experimentalParseClassName) {\n return className => experimentalParseClassName({\n className,\n parseClassName\n });\n }\n return parseClassName;\n};\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst sortModifiers = modifiers => {\n if (modifiers.length <= 1) {\n return modifiers;\n }\n const sortedModifiers = [];\n let unsortedModifiers = [];\n modifiers.forEach(modifier => {\n const isArbitraryVariant = modifier[0] === '[';\n if (isArbitraryVariant) {\n sortedModifiers.push(...unsortedModifiers.sort(), modifier);\n unsortedModifiers = [];\n } else {\n unsortedModifiers.push(modifier);\n }\n });\n sortedModifiers.push(...unsortedModifiers.sort());\n return sortedModifiers;\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n ...createClassGroupUtils(config)\n});\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n let hasPostfixModifier = Boolean(maybePostfixModifierPosition);\n let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n hasPostfixModifier = false;\n }\n const variantModifier = sortModifiers(modifiers).join(':');\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n const classId = modifierId + classGroupId;\n if (classGroupsInConflict.includes(classId)) {\n // Tailwind class omitted due to conflict\n continue;\n }\n classGroupsInConflict.push(classId);\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i];\n classGroupsInConflict.push(modifierId + group);\n }\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n }\n return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nfunction twJoin() {\n let index = 0;\n let argument;\n let resolvedValue;\n let string = '';\n while (index < arguments.length) {\n if (argument = arguments[index++]) {\n if (resolvedValue = toValue(argument)) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n}\nconst toValue = mix => {\n if (typeof mix === 'string') {\n return mix;\n }\n let resolvedValue;\n let string = '';\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nfunction createTailwindMerge(createConfigFirst, ...createConfigRest) {\n let configUtils;\n let cacheGet;\n let cacheSet;\n let functionToCall = initTailwindMerge;\n function initTailwindMerge(classList) {\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n }\n function tailwindMerge(classList) {\n const cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n const result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n }\n return function callTailwindMerge() {\n return functionToCall(twJoin.apply(null, arguments));\n };\n}\nconst fromTheme = key => {\n const themeGetter = theme => theme[key] || [];\n themeGetter.isThemeGetter = true;\n return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:([a-z-]+):)?(.+)\\]$/i;\nconst fractionRegex = /^\\d+\\/\\d+$/;\nconst stringLengths = /*#__PURE__*/new Set(['px', 'full', 'screen']);\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch))\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isLength = value => isNumber(value) || stringLengths.has(value) || fractionRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, 'length', isLengthOnly);\nconst isNumber = value => Boolean(value) && !Number.isNaN(Number(value));\nconst isArbitraryNumber = value => getIsArbitraryValue(value, 'number', isNumber);\nconst isInteger = value => Boolean(value) && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst sizeLabels = /*#__PURE__*/new Set(['length', 'size', 'percentage']);\nconst isArbitrarySize = value => getIsArbitraryValue(value, sizeLabels, isNever);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, 'position', isNever);\nconst imageLabels = /*#__PURE__*/new Set(['image', 'url']);\nconst isArbitraryImage = value => getIsArbitraryValue(value, imageLabels, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, '', isShadow);\nconst isAny = () => true;\nconst getIsArbitraryValue = (value, label, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return typeof label === 'string' ? result[1] === label : label.has(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isInteger,\n isLength,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n const colors = fromTheme('colors');\n const spacing = fromTheme('spacing');\n const blur = fromTheme('blur');\n const brightness = fromTheme('brightness');\n const borderColor = fromTheme('borderColor');\n const borderRadius = fromTheme('borderRadius');\n const borderSpacing = fromTheme('borderSpacing');\n const borderWidth = fromTheme('borderWidth');\n const contrast = fromTheme('contrast');\n const grayscale = fromTheme('grayscale');\n const hueRotate = fromTheme('hueRotate');\n const invert = fromTheme('invert');\n const gap = fromTheme('gap');\n const gradientColorStops = fromTheme('gradientColorStops');\n const gradientColorStopPositions = fromTheme('gradientColorStopPositions');\n const inset = fromTheme('inset');\n const margin = fromTheme('margin');\n const opacity = fromTheme('opacity');\n const padding = fromTheme('padding');\n const saturate = fromTheme('saturate');\n const scale = fromTheme('scale');\n const sepia = fromTheme('sepia');\n const skew = fromTheme('skew');\n const space = fromTheme('space');\n const translate = fromTheme('translate');\n const getOverscroll = () => ['auto', 'contain', 'none'];\n const getOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const getSpacingWithAutoAndArbitrary = () => ['auto', isArbitraryValue, spacing];\n const getSpacingWithArbitrary = () => [isArbitraryValue, spacing];\n const getLengthWithEmptyAndArbitrary = () => ['', isLength, isArbitraryLength];\n const getNumberWithAutoAndArbitrary = () => ['auto', isNumber, isArbitraryValue];\n const getPositions = () => ['bottom', 'center', 'left', 'left-bottom', 'left-top', 'right', 'right-bottom', 'right-top', 'top'];\n const getLineStyles = () => ['solid', 'dashed', 'dotted', 'double', 'none'];\n const getBlendModes = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const getAlign = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch'];\n const getZeroAndEmpty = () => ['', '0', isArbitraryValue];\n const getBreaks = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const getNumberAndArbitrary = () => [isNumber, isArbitraryValue];\n return {\n cacheSize: 500,\n separator: ':',\n theme: {\n colors: [isAny],\n spacing: [isLength, isArbitraryLength],\n blur: ['none', '', isTshirtSize, isArbitraryValue],\n brightness: getNumberAndArbitrary(),\n borderColor: [colors],\n borderRadius: ['none', '', 'full', isTshirtSize, isArbitraryValue],\n borderSpacing: getSpacingWithArbitrary(),\n borderWidth: getLengthWithEmptyAndArbitrary(),\n contrast: getNumberAndArbitrary(),\n grayscale: getZeroAndEmpty(),\n hueRotate: getNumberAndArbitrary(),\n invert: getZeroAndEmpty(),\n gap: getSpacingWithArbitrary(),\n gradientColorStops: [colors],\n gradientColorStopPositions: [isPercent, isArbitraryLength],\n inset: getSpacingWithAutoAndArbitrary(),\n margin: getSpacingWithAutoAndArbitrary(),\n opacity: getNumberAndArbitrary(),\n padding: getSpacingWithArbitrary(),\n saturate: getNumberAndArbitrary(),\n scale: getNumberAndArbitrary(),\n sepia: getZeroAndEmpty(),\n skew: getNumberAndArbitrary(),\n space: getSpacingWithArbitrary(),\n translate: getSpacingWithArbitrary()\n },\n classGroups: {\n // Layout\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', 'video', isArbitraryValue]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isTshirtSize]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': getBreaks()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': getBreaks()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: [...getPositions(), isArbitraryValue]\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: getOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': getOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': getOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: getOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': getOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': getOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Top / Right / Bottom / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: [inset]\n }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': [inset]\n }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': [inset]\n }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{\n start: [inset]\n }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{\n end: [inset]\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: [inset]\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: [inset]\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: [inset]\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: [inset]\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: ['auto', isInteger, isArbitraryValue]\n }],\n // Flexbox and Grid\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: getSpacingWithAutoAndArbitrary()\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['wrap', 'wrap-reverse', 'nowrap']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: ['1', 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: getZeroAndEmpty()\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: getZeroAndEmpty()\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: ['first', 'last', 'none', isInteger, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': [isAny]\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: ['auto', {\n span: ['full', isInteger, isArbitraryValue]\n }, isArbitraryValue]\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': [isAny]\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: ['auto', {\n span: [isInteger, isArbitraryValue]\n }, isArbitraryValue]\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': ['auto', 'min', 'max', 'fr', isArbitraryValue]\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': ['auto', 'min', 'max', 'fr', isArbitraryValue]\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: [gap]\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': [gap]\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': [gap]\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: ['normal', ...getAlign()]\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': ['start', 'end', 'center', 'stretch']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', 'start', 'end', 'center', 'stretch']\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...getAlign(), 'baseline']\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: ['start', 'end', 'center', 'baseline', 'stretch']\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', 'start', 'end', 'center', 'stretch', 'baseline']\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': [...getAlign(), 'baseline']\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': ['start', 'end', 'center', 'baseline', 'stretch']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', 'start', 'end', 'center', 'stretch']\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: [padding]\n }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: [padding]\n }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: [padding]\n }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: [padding]\n }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: [padding]\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: [padding]\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: [padding]\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: [padding]\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: [padding]\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: [margin]\n }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: [margin]\n }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: [margin]\n }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: [margin]\n }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: [margin]\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: [margin]\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: [margin]\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: [margin]\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: [margin]\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x': [{\n 'space-x': [space]\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y': [{\n 'space-y': [space]\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y-reverse': ['space-y-reverse'],\n // Sizing\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: ['auto', 'min', 'max', 'fit', 'svw', 'lvw', 'dvw', isArbitraryValue, spacing]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [isArbitraryValue, spacing, 'min', 'max', 'fit']\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [isArbitraryValue, spacing, 'none', 'full', 'min', 'max', 'fit', 'prose', {\n screen: [isTshirtSize]\n }, isTshirtSize]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Size\n * @see https://tailwindcss.com/docs/size\n */\n size: [{\n size: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit']\n }],\n // Typography\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', isTshirtSize, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black', isArbitraryNumber]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isAny]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest', isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': ['none', isNumber, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose', isLength, isArbitraryValue]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryValue]\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['none', 'disc', 'decimal', isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: [colors]\n }],\n /**\n * Placeholder Opacity\n * @see https://tailwindcss.com/docs/placeholder-opacity\n */\n 'placeholder-opacity': [{\n 'placeholder-opacity': [opacity]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: [colors]\n }],\n /**\n * Text Opacity\n * @see https://tailwindcss.com/docs/text-opacity\n */\n 'text-opacity': [{\n 'text-opacity': [opacity]\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...getLineStyles(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: ['auto', 'from-font', isLength, isArbitraryLength]\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': ['auto', isLength, isArbitraryValue]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: [colors]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: getSpacingWithArbitrary()\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryValue]\n }],\n // Backgrounds\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Opacity\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/background-opacity\n */\n 'bg-opacity': [{\n 'bg-opacity': [opacity]\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: [...getPositions(), isArbitraryPosition]\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: ['no-repeat', {\n repeat: ['', 'x', 'y', 'round', 'space']\n }]\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: ['auto', 'cover', 'contain', isArbitrarySize]\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n 'gradient-to': ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: [colors]\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: [gradientColorStops]\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: [gradientColorStops]\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: [gradientColorStops]\n }],\n // Borders\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: [borderRadius]\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': [borderRadius]\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': [borderRadius]\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': [borderRadius]\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': [borderRadius]\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': [borderRadius]\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': [borderRadius]\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': [borderRadius]\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': [borderRadius]\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': [borderRadius]\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': [borderRadius]\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': [borderRadius]\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': [borderRadius]\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': [borderRadius]\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': [borderRadius]\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: [borderWidth]\n }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': [borderWidth]\n }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': [borderWidth]\n }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': [borderWidth]\n }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': [borderWidth]\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': [borderWidth]\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': [borderWidth]\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': [borderWidth]\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': [borderWidth]\n }],\n /**\n * Border Opacity\n * @see https://tailwindcss.com/docs/border-opacity\n */\n 'border-opacity': [{\n 'border-opacity': [opacity]\n }],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...getLineStyles(), 'hidden']\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x': [{\n 'divide-x': [borderWidth]\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y': [{\n 'divide-y': [borderWidth]\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Divide Opacity\n * @see https://tailwindcss.com/docs/divide-opacity\n */\n 'divide-opacity': [{\n 'divide-opacity': [opacity]\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/divide-style\n */\n 'divide-style': [{\n divide: getLineStyles()\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: [borderColor]\n }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': [borderColor]\n }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': [borderColor]\n }],\n /**\n * Border Color S\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': [borderColor]\n }],\n /**\n * Border Color E\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': [borderColor]\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': [borderColor]\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': [borderColor]\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': [borderColor]\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': [borderColor]\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: [borderColor]\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: ['', ...getLineStyles()]\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isLength, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: [isLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: [colors]\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w': [{\n ring: getLengthWithEmptyAndArbitrary()\n }],\n /**\n * Ring Width Inset\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/ring-color\n */\n 'ring-color': [{\n ring: [colors]\n }],\n /**\n * Ring Opacity\n * @see https://tailwindcss.com/docs/ring-opacity\n */\n 'ring-opacity': [{\n 'ring-opacity': [opacity]\n }],\n /**\n * Ring Offset Width\n * @see https://tailwindcss.com/docs/ring-offset-width\n */\n 'ring-offset-w': [{\n 'ring-offset': [isLength, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://tailwindcss.com/docs/ring-offset-color\n */\n 'ring-offset-color': [{\n 'ring-offset': [colors]\n }],\n // Effects\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: ['', 'inner', 'none', isTshirtSize, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow-color\n */\n 'shadow-color': [{\n shadow: [isAny]\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [opacity]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...getBlendModes(), 'plus-lighter', 'plus-darker']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': getBlendModes()\n }],\n // Filters\n /**\n * Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: ['', 'none']\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: [blur]\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [brightness]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [contrast]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': ['', 'none', isTshirtSize, isArbitraryValue]\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: [grayscale]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [hueRotate]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: [invert]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [saturate]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: [sepia]\n }],\n /**\n * Backdrop Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': ['', 'none']\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': [blur]\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [brightness]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [contrast]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': [grayscale]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [hueRotate]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': [invert]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [opacity]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [saturate]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': [sepia]\n }],\n // Tables\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': [borderSpacing]\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': [borderSpacing]\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': [borderSpacing]\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // Transitions and Animation\n /**\n * Tranisition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['none', 'all', '', 'colors', 'opacity', 'shadow', 'transform', isArbitraryValue]\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: getNumberAndArbitrary()\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'in', 'out', 'in-out', isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: getNumberAndArbitrary()\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', 'spin', 'ping', 'pulse', 'bounce', isArbitraryValue]\n }],\n // Transforms\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: ['', 'gpu', 'none']\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: [scale]\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': [scale]\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': [scale]\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: [isInteger, isArbitraryValue]\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': [translate]\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': [translate]\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': [skew]\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': [skew]\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: ['center', 'top', 'top-right', 'right', 'bottom-right', 'bottom', 'bottom-left', 'left', 'top-left', isArbitraryValue]\n }],\n // Interactivity\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: ['auto', colors]\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryValue]\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: [colors]\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['none', 'auto']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', 'y', 'x', '']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryValue]\n }],\n // SVG\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: [colors, 'none']\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: [colors, 'none']\n }],\n // Accessibility\n /**\n * Screen Readers\n * @see https://tailwindcss.com/docs/screen-readers\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': ['border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': ['border-color-s', 'border-color-e', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch']\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading']\n }\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n separator,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'separator', separator);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n for (const configKey in override) {\n overrideConfigProperties(baseConfig[configKey], override[configKey]);\n }\n for (const key in extend) {\n mergeConfigProperties(baseConfig[key], extend[key]);\n }\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = (baseObject[key] || []).concat(mergeValue);\n }\n }\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","import { clsx, type ClassValue } from 'clsx'\r\nimport { twMerge } from 'tailwind-merge'\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs))\r\n}\r\n"],"names":["ActivityIndicator","size","color","overlay","className","spinner","jsx","Button","variant","block","disabled","textSelectable","loading","onClick","children","rest","cls","jsxs","e","selection","Alert","code","text","type","button","onAction","Battery","percentage","status","darkMode","colored","percent","fillColor","backgroundColor","width","height","capWidth","capSpacing","boltSpace","innerPadding","outlineX","outlineY","outlineWidth","outlineHeight","innerHeight","innerWidth","cornerRadius","visualPercent","svgWidth","boltPathH","boltScale","svgHeight","boltTransX","boltTransY","ButtonGroup","value","onChange","options","labels","option","idx","CheckIcon","Checkbox","checked","label","labelColor","style","isSmall","warn","_len","args","_key","isString","alreadyWarned","warnOnce","_len2","_key2","loadedClb","i18n","cb","initialized","loadNamespaces","ns","loadLanguages","lng","n","oldI18nextHasLoadedNamespace","fallbackLng","lastLng","loadNotPending","l","loadState","hasLoadedNamespace","i18nInstance","obj","isObject","matchHtmlEntity","htmlEntities","unescapeHtmlEntity","m","unescape","defaultOptions","getDefaults","getI18n","I18nContext","createContext","ReportNamespaces","__publicField","namespaces","usePrevious","ignore","ref","useRef","useEffect","alwaysNewT","language","namespace","keyPrefix","useMemoizedT","useCallback","useTranslation","props","i18nFromProps","i18nFromContext","defaultNSFromContext","useContext","notReadyT","k","optsOrDefaultValue","retNotReady","i18nOptions","useSuspense","ready","memoGetT","getT","getNewT","t","setT","useState","joinedNS","previousJoinedNS","isMounted","bindI18n","bindI18nStore","boundReset","ret","resolve","DropdownOption","selected","highlighted","small","optionRef","DropdownMenu","isOpen","onSelect","selectedValue","placement","anchorRef","highlightedIndex","position","setPosition","autoPlacement","setAutoPlacement","rect","finalPlacement","spaceBelow","spaceAbove","dropdown","o","createPortal","ClearButton","ToggleButton","open","ComboBox","placeholder","clearable","allowTyping","setOpen","query","setQuery","setHighlightedIndex","inputRef","filtered","useMemo","q","defaultOption","onDoc","_a","showClearButton","showToggle","overlayVisible","handleSelect","newValue","fromKeyboard","handleClear","handleKeyDown","prev","next","s","_b","RefreshButton","title","ariaLabel","RefreshIcon","CloseButton","CloseIcon","EditButton","EditIcon","TrashButton","TrashIcon","Hyperlink","ContextMenu","onClose","anchor","preferredDirection","menuRef","anchorElement","anchorRect","menuRect","viewportHeight","downTop","downFits","finalDirection","finalTop","finalLeft","handleClickOutside","handleEscapeKey","handleOptionClick","DialogContext","useDialog","ctx","DialogClose","close","toCssSize","Dialog","minWidth","minHeight","maxWidth","maxHeight","footerType","footer","onOk","onSave","onDelete","onCancel","onConnect","closeOnOverlay","primaryDisabled","fullScreen","hideTitleBar","dialogRef","contextValue","handleOverlayClick","renderFooter","dialogContent","rightOffset","buttonSize","TogglePasswordButton","visible","iconSize","EyeHiddenIcon","ViewIcon","Input","onEnter","onClear","showPasswordToggle","multiline","rows","textareaRef","passwordVisible","setPasswordVisible","isPasswordType","buttonWidth","paddingRight","handleChange","inputClassName","ListGroupItem","showBorder","selectable","isPressed","setIsPressed","React","ListGroup","titleTools","MultiSelect","values","toggle","v","x","NumberInput","min","max","step","decrement","increment","Slider","showValue","formatValue","ChevronUpIcon","Tabs","tabs","active","toolbar","orientation","scrollRef","canScrollStart","setCanScrollStart","canScrollEnd","setCanScrollEnd","isVertical","isDragging","startPos","scrollStartPos","hasDragged","checkScroll","scrollTop","scrollHeight","clientHeight","scrollLeft","scrollWidth","clientWidth","el","handleMouseDown","handleMouseMove","currentPos","diff","handleMouseUp","handleMouseLeave","handleWheel","handleTabClick","tab","ChevronLeftIcon","ChevronDownIcon","ChevronRightIcon","Toggle","state","subscribers","removalTimeouts","notify","snap","subscribe","fn","addNotification","notification","id","newNotification","removeNotification","timeoutId","Notification","getTitle","handleDismiss","NotificationContainer","notifications","setNotifications","positions","setPositions","entering","setEntering","containerRef","prevNotificationsRef","notifs","prevIds","newIds","newPositions","currentY","notif","index","isEntering","isLeaving","targetY","notificationManager","defer","res","rej","promise","reject","makeString","object","copy","a","lastOfPathSeparatorRegExp","cleanKey","key","canNotTraverseDeeper","getLastOfPath","path","Empty","stack","stackIndex","setPath","p","last","pushPath","concat","getPath","getPathWithDefaults","data","defaultData","deepExtend","target","source","overwrite","prop","regexEscape","str","_entityMap","escape","RegExpCache","capacity","pattern","regExpFromCache","regExpNew","chars","looksLikeObjectPathRegExpCache","looksLikeObjectPath","nsSeparator","keySeparator","possibleChars","c","matched","ki","deepFind","tokens","current","nextPath","j","getCleanedCode","consoleLogger","Logger","concreteLogger","_len3","_key3","_len4","_key4","lvl","prefix","debugOnly","moduleName","baseLogger","EventEmitter","events","listener","event","numListeners","_ref","observer","numTimesAdded","i","_ref2","ResourceStore","ignoreJSONStructure","result","resources","deep","pack","postProcessor","module","processors","translator","processor","checkedLoadedFor","Translator","services","resolved","wouldCheckForNsInKey","seemsNaturalLanguage","parts","keys","lastKey","returnDetails","appendNamespaceToCIMode","resUsedKey","resExactUsedKey","resType","noObject","joinArrays","handleAsObjectInI18nFormat","handleAsObject","r","resTypeIsArray","newKeyToUse","deepKey","usedDefault","usedKey","needsPluralHandling","hasDefaultValue","defaultValueSuffix","defaultValueSuffixOrdinalFallback","needsZeroSuffixLookup","defaultValue","resForMissing","updateMissing","fk","lngs","fallbackLngs","send","specificDefaultValue","defaultForMissing","suffixes","suffix","_this","skipOnVariables","nestBef","nb","na","nestAft","postProcess","postProcessorNames","found","exactUsedKey","usedLng","usedNS","extracted","needsContextHandling","codes","finalKeys","pluralSuffix","zeroSuffix","ordinalPrefix","contextKey","possibleKey","optionsKeys","useOptionsReplaceForData","capitalize","string","LanguageUtil","formattedCode","specialCases","part","cleanedLng","lngOnly","supportedLng","fallbacks","fallbackCode","fallbackCodes","addCode","fc","sets","_rulesPluralsTypes","nonIntlVersions","intlVersions","suffixesOrder","createRules","rules","set","PluralResolver","languageUtils","cleanedCode","cacheKey","rule","lngPart","pluralCategory1","pluralCategory2","pluralCategory","number","count","returnSuffix","deepFindWithDefaults","regexSafe","val","Interpolator","escape$1","escapeValue","useRawValueToEscape","prefixEscaped","suffixEscaped","formatSeparator","unescapeSuffix","unescapePrefix","nestingPrefix","nestingPrefixEscaped","nestingSuffix","nestingSuffixEscaped","nestingOptionsSeparator","maxReplaces","alwaysFormat","getOrResetRegExp","existingRegExp","match","replaces","handleFormat","f","missingInterpolationHandler","todo","matchedVar","temp","safeValue","clonedOptions","handleHasOptions","inheritedOptions","sep","optionsString","matchedSingleQuotes","matchedDoubleQuotes","formatters","doReduce","elem","parseFormatStr","formatStr","formatName","formatOptions","optStr","opt","trimmedKey","createCachedFormatter","cache","optForCache","formatter","Formatter","name","format","formats","lastIndex","mem","formatted","valOptions","error","removePending","Connector","backend","store","languages","callback","toLoad","pending","toLoadLanguages","toLoadNamespaces","hasAllNamespaces","err","loaded","loadedKeys","fcName","tried","wait","resolver","fallbackValue","isUpdate","clb","opts","get","transformOptions","noop","bindMemberFunctions","inst","I18n","defOpts","createClassOnDemand","ClassOrObject","lu","deferred","load","finish","usedCallback","append","li","lngInLngs","_this2","setLngProps","done","setLng","_this3","fixedT","resultKey","preResult","preloaded","newLngs","rtlLngs","forkResourceStore","mergedOptions","clone","instance","createAppI18nFactory","i18next","wrappedResources","lang","initialLang","mutations","mutation","newLang","AppRegistry","app","appRegistry","STORAGE_KEY","AppStateStore","stored","appId","appStateStore","BackHandlerRegistry","priority","handler","h","b","backHandlerRegistry","setAppInUrl","url","clearAppInUrl","RunningAppsStore","launchInBackground","existing","runningApp","resolvers","isDesktop","runningAppsStore","AppContext","useApp","BackArrowIcon","AppTitleBar","onBack","hideBackButton","AppErrorBoundary","errorInfo","AppContainer","isActive","def","setTitleState","backHandler","setBackHandlerState","setToolbarState","setHideBackButtonState","setHideTitleBarState","setTitle","newTitle","setBackHandler","clearBackHandler","setToolbar","newToolbar","clearToolbar","setHideBackButton","hide","setHideTitleBar","appContextValue","AppComp","showTitleBar","Suspense","MOBILE_BREAKPOINT","TABLET_BREAKPOINT","ViewportContext","ViewportProvider","viewport","setViewport","handleResize","useViewport","AppPanel","isMobile","activeAppId","setActiveAppId","runningApps","setRunningApps","unsubActiveApp","persistedAppId","onCloseApp","activeAppDef","fullPanelWidth","expanded","ra","AppTaskbar","pinnedAppIds","onClickApp","pinnedAppDefs","nonPinnedRunningAppDefs","item","isAppRunning","Icon","isRunning","running","AppDialog","closeOnBackdrop","handleBackdropClick","dialogId","content","NavStackContext","NavViewContext","useNavStack","context","useNavView","NavStackInternalContext","NavStackProvider","rootView","appContext","setStack","toolbarStack","setToolbarStack","updateToolbar","newStack","clearToolbarAt","push","view","pop","reset","depth","canGoBack","topIndex","currentView","currentTitle","topToolbar","internalValue","NavViewProvider","internalContext","NavStackContainer","navContext","CLASS_PART_SEPARATOR","createClassGroupUtils","config","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","classParts","getGroupRecursive","getGroupIdForArbitraryProperty","classGroupId","hasPostfixModifier","conflicts","classPartObject","currentClassPart","nextClassPartObject","classGroupFromNextClassPart","classRest","validator","arbitraryPropertyRegex","arbitraryPropertyClassName","property","theme","getPrefixedClassGroupEntries","classGroup","processClassesRecursively","classDefinition","classPartObjectToEdit","getPart","isThemeGetter","currentClassPartObject","pathPart","func","classGroupEntries","prefixedClassGroup","createLruCache","maxCacheSize","cacheSize","previousCache","update","IMPORTANT_MODIFIER","createParseClassName","separator","experimentalParseClassName","isSeparatorSingleCharacter","firstSeparatorCharacter","separatorLength","parseClassName","modifiers","bracketDepth","modifierStart","postfixModifierPosition","currentCharacter","baseClassNameWithImportantModifier","hasImportantModifier","baseClassName","maybePostfixModifierPosition","sortModifiers","sortedModifiers","unsortedModifiers","modifier","createConfigUtils","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","getClassGroupId","getConflictingClassGroupIds","classGroupsInConflict","classNames","originalClassName","variantModifier","modifierId","classId","conflictGroups","group","twJoin","argument","resolvedValue","toValue","mix","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","fromTheme","themeGetter","arbitraryValueRegex","fractionRegex","stringLengths","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isLength","isNumber","isArbitraryLength","getIsArbitraryValue","isLengthOnly","isArbitraryNumber","isInteger","isPercent","isArbitraryValue","isTshirtSize","sizeLabels","isArbitrarySize","isNever","isArbitraryPosition","imageLabels","isArbitraryImage","isImage","isArbitraryShadow","isShadow","isAny","testValue","getDefaultConfig","colors","spacing","blur","brightness","borderColor","borderRadius","borderSpacing","borderWidth","contrast","grayscale","hueRotate","invert","gap","gradientColorStops","gradientColorStopPositions","inset","margin","opacity","padding","saturate","scale","sepia","skew","space","translate","getOverscroll","getOverflow","getSpacingWithAutoAndArbitrary","getSpacingWithArbitrary","getLengthWithEmptyAndArbitrary","getNumberWithAutoAndArbitrary","getPositions","getLineStyles","getBlendModes","getAlign","getZeroAndEmpty","getBreaks","getNumberAndArbitrary","twMerge","cn","inputs","clsx"],"mappings":"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","x_google_ignoreList":[6,7,8,9,10,11,27,41]}
|