@homlista-devs/ui 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/design-system.cjs.js +13 -8
- package/dist/design-system.cjs.js.map +1 -1
- package/dist/design-system.es.js +1116 -1048
- package/dist/design-system.es.js.map +1 -1
- package/dist/index.css +19 -4
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"design-system.cjs.js","sources":["../node_modules/.pnpm/@radix-ui+react-compose-refs@1.1.2_@types+react@19.2.2_react@19.2.0/node_modules/@radix-ui/react-compose-refs/dist/index.mjs","../node_modules/.pnpm/@radix-ui+react-slot@1.2.3_@types+react@19.2.2_react@19.2.0/node_modules/@radix-ui/react-slot/dist/index.mjs","../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../node_modules/.pnpm/tailwind-merge@3.3.1/node_modules/tailwind-merge/dist/bundle-mjs.mjs","../src/shared/lib/utils.ts","../node_modules/.pnpm/class-variance-authority@0.7.1/node_modules/class-variance-authority/dist/index.mjs","../src/features/button/lib/button-variants.ts","../src/features/button/ui/button.tsx","../src/features/text/ui/text.tsx","../src/features/card/ui/card.tsx","../src/features/modal/ui/modal.tsx","../src/features/input/lib/input-variants.ts","../src/features/input/ui/input.tsx","../node_modules/.pnpm/lucide-react@0.547.0_react@19.2.0/node_modules/lucide-react/dist/esm/shared/src/utils.js","../node_modules/.pnpm/lucide-react@0.547.0_react@19.2.0/node_modules/lucide-react/dist/esm/defaultAttributes.js","../node_modules/.pnpm/lucide-react@0.547.0_react@19.2.0/node_modules/lucide-react/dist/esm/Icon.js","../node_modules/.pnpm/lucide-react@0.547.0_react@19.2.0/node_modules/lucide-react/dist/esm/createLucideIcon.js","../node_modules/.pnpm/lucide-react@0.547.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/bath.js","../node_modules/.pnpm/lucide-react@0.547.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/bed.js","../node_modules/.pnpm/lucide-react@0.547.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/car.js","../node_modules/.pnpm/lucide-react@0.547.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-down.js","../node_modules/.pnpm/lucide-react@0.547.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-left.js","../node_modules/.pnpm/lucide-react@0.547.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-right.js","../node_modules/.pnpm/lucide-react@0.547.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/grid-3x3.js","../node_modules/.pnpm/lucide-react@0.547.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/heart.js","../node_modules/.pnpm/lucide-react@0.547.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/maximize.js","../node_modules/.pnpm/lucide-react@0.547.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/trending-up.js","../src/features/select/lib/select-variants.ts","../src/features/select/ui/select.tsx","../src/features/donut-chart/lib/donut-chart-utils.ts","../src/features/donut-chart/ui/donut-chart.tsx","../src/entities/entity/lib/entity-utils.ts","../src/features/entity-filtering/model/use-entity-filter.ts","../src/shared/ui/chip/chip-variants.ts","../src/shared/ui/chip/chip.tsx","../src/features/entity-filtering/ui/category-chips.tsx","../src/widgets/property-card/ui/property-card.tsx","../src/widgets/property-gallery/ui/property-gallery.tsx","../src/widgets/entity-directory/ui/header.tsx","../src/widgets/entity-directory/ui/list-item.tsx","../src/widgets/entity-directory/ui/table-header.tsx","../src/widgets/entity-directory/ui/list.tsx","../src/widgets/entity-directory/ui/empty-state.tsx","../src/widgets/entity-directory/ui/error-state.tsx","../src/widgets/entity-directory/ui/loading-state.tsx","../src/widgets/entity-directory/ui/search-filter.tsx","../src/widgets/entity-directory/ui/entity-directory.tsx","../src/entities/mortgage/lib/calculations.ts","../src/widgets/mortgage-calculator/lib/constants.ts","../src/widgets/mortgage-calculator/ui/mortgage-calculator.tsx","../src/pages/layouts/ui/page-layout.tsx","../src/shared/config/themes.ts","../src/shared/model/theme-store.ts","../src/shared/lib/theme/use-theme.ts","../src/shared/ui/theme/theme-provider.tsx","../src/shared/lib/design-system.ts","../src/shared/lib/a11y/components.tsx"],"sourcesContent":["// packages/react/compose-refs/src/compose-refs.tsx\nimport * as React from \"react\";\nfunction setRef(ref, value) {\n if (typeof ref === \"function\") {\n return ref(value);\n } else if (ref !== null && ref !== void 0) {\n ref.current = value;\n }\n}\nfunction composeRefs(...refs) {\n return (node) => {\n let hasCleanup = false;\n const cleanups = refs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup == \"function\") {\n hasCleanup = true;\n }\n return cleanup;\n });\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup == \"function\") {\n cleanup();\n } else {\n setRef(refs[i], null);\n }\n }\n };\n }\n };\n}\nfunction useComposedRefs(...refs) {\n return React.useCallback(composeRefs(...refs), refs);\n}\nexport {\n composeRefs,\n useComposedRefs\n};\n//# sourceMappingURL=index.mjs.map\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","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 classGroups\n } = config;\n const classMap = {\n nextPart: new Map(),\n validators: []\n };\n for (const classGroupId in classGroups) {\n processClassesRecursively(classGroups[classGroupId], 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;\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 MODIFIER_SEPARATOR = ':';\nconst MODIFIER_SEPARATOR_LENGTH = MODIFIER_SEPARATOR.length;\nconst createParseClassName = config => {\n const {\n prefix,\n experimentalParseClassName\n } = config;\n /**\n * Parse class name into parts.\n *\n * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n */\n let parseClassName = className => {\n const modifiers = [];\n let bracketDepth = 0;\n let parenDepth = 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 && parenDepth === 0) {\n if (currentCharacter === MODIFIER_SEPARATOR) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + MODIFIER_SEPARATOR_LENGTH;\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 } else if (currentCharacter === '(') {\n parenDepth++;\n } else if (currentCharacter === ')') {\n parenDepth--;\n }\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart);\n const baseClassName = stripImportantModifier(baseClassNameWithImportantModifier);\n const hasImportantModifier = baseClassName !== baseClassNameWithImportantModifier;\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n };\n };\n if (prefix) {\n const fullPrefix = prefix + MODIFIER_SEPARATOR;\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => className.startsWith(fullPrefix) ? parseClassNameOriginal(className.substring(fullPrefix.length)) : {\n isExternal: true,\n modifiers: [],\n hasImportantModifier: false,\n baseClassName: className,\n maybePostfixModifierPosition: undefined\n };\n }\n if (experimentalParseClassName) {\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => experimentalParseClassName({\n className,\n parseClassName: parseClassNameOriginal\n });\n }\n return parseClassName;\n};\nconst stripImportantModifier = baseClassName => {\n if (baseClassName.endsWith(IMPORTANT_MODIFIER)) {\n return baseClassName.substring(0, baseClassName.length - 1);\n }\n /**\n * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n */\n if (baseClassName.startsWith(IMPORTANT_MODIFIER)) {\n return baseClassName.substring(1);\n }\n return baseClassName;\n};\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst createSortModifiers = config => {\n const orderSensitiveModifiers = Object.fromEntries(config.orderSensitiveModifiers.map(modifier => [modifier, true]));\n const sortModifiers = modifiers => {\n if (modifiers.length <= 1) {\n return modifiers;\n }\n const sortedModifiers = [];\n let unsortedModifiers = [];\n modifiers.forEach(modifier => {\n const isPositionSensitive = modifier[0] === '[' || orderSensitiveModifiers[modifier];\n if (isPositionSensitive) {\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 };\n return sortModifiers;\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n sortModifiers: createSortModifiers(config),\n ...createClassGroupUtils(config)\n});\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds,\n sortModifiers\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n isExternal,\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n if (isExternal) {\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n let hasPostfixModifier = !!maybePostfixModifierPosition;\n let classGroupId = 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 = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i;\nconst arbitraryVariableRegex = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i;\nconst fractionRegex = /^\\d+\\/\\d+$/;\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isFraction = value => fractionRegex.test(value);\nconst isNumber = value => !!value && !Number.isNaN(Number(value));\nconst isInteger = value => !!value && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst isAny = () => true;\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst isAnyNonArbitrary = value => !isArbitraryValue(value) && !isArbitraryVariable(value);\nconst isArbitrarySize = value => getIsArbitraryValue(value, isLabelSize, isNever);\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, isLabelLength, isLengthOnly);\nconst isArbitraryNumber = value => getIsArbitraryValue(value, isLabelNumber, isNumber);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, isLabelPosition, isNever);\nconst isArbitraryImage = value => getIsArbitraryValue(value, isLabelImage, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, isLabelShadow, isShadow);\nconst isArbitraryVariable = value => arbitraryVariableRegex.test(value);\nconst isArbitraryVariableLength = value => getIsArbitraryVariable(value, isLabelLength);\nconst isArbitraryVariableFamilyName = value => getIsArbitraryVariable(value, isLabelFamilyName);\nconst isArbitraryVariablePosition = value => getIsArbitraryVariable(value, isLabelPosition);\nconst isArbitraryVariableSize = value => getIsArbitraryVariable(value, isLabelSize);\nconst isArbitraryVariableImage = value => getIsArbitraryVariable(value, isLabelImage);\nconst isArbitraryVariableShadow = value => getIsArbitraryVariable(value, isLabelShadow, true);\n// Helpers\nconst getIsArbitraryValue = (value, testLabel, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) => {\n const result = arbitraryVariableRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return shouldMatchNoLabel;\n }\n return false;\n};\n// Labels\nconst isLabelPosition = label => label === 'position' || label === 'percentage';\nconst isLabelImage = label => label === 'image' || label === 'url';\nconst isLabelSize = label => label === 'length' || label === 'size' || label === 'bg-size';\nconst isLabelLength = label => label === 'length';\nconst isLabelNumber = label => label === 'number';\nconst isLabelFamilyName = label => label === 'family-name';\nconst isLabelShadow = label => label === 'shadow';\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isAnyNonArbitrary,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isArbitraryVariable,\n isArbitraryVariableFamilyName,\n isArbitraryVariableImage,\n isArbitraryVariableLength,\n isArbitraryVariablePosition,\n isArbitraryVariableShadow,\n isArbitraryVariableSize,\n isFraction,\n isInteger,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n /**\n * Theme getters for theme variable namespaces\n * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n */\n /***/\n const themeColor = fromTheme('color');\n const themeFont = fromTheme('font');\n const themeText = fromTheme('text');\n const themeFontWeight = fromTheme('font-weight');\n const themeTracking = fromTheme('tracking');\n const themeLeading = fromTheme('leading');\n const themeBreakpoint = fromTheme('breakpoint');\n const themeContainer = fromTheme('container');\n const themeSpacing = fromTheme('spacing');\n const themeRadius = fromTheme('radius');\n const themeShadow = fromTheme('shadow');\n const themeInsetShadow = fromTheme('inset-shadow');\n const themeTextShadow = fromTheme('text-shadow');\n const themeDropShadow = fromTheme('drop-shadow');\n const themeBlur = fromTheme('blur');\n const themePerspective = fromTheme('perspective');\n const themeAspect = fromTheme('aspect');\n const themeEase = fromTheme('ease');\n const themeAnimate = fromTheme('animate');\n /**\n * Helpers to avoid repeating the same scales\n *\n * We use functions that create a new array every time they're called instead of static arrays.\n * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.\n */\n /***/\n const scaleBreak = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const scalePosition = () => ['center', 'top', 'bottom', 'left', 'right', 'top-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-top', 'top-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-top', 'bottom-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-bottom', 'bottom-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-bottom'];\n const scalePositionWithArbitrary = () => [...scalePosition(), isArbitraryVariable, isArbitraryValue];\n const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const scaleOverscroll = () => ['auto', 'contain', 'none'];\n const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];\n const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()];\n const scaleGridTemplateColsRows = () => [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartAndEnd = () => ['auto', {\n span: ['full', isInteger, isArbitraryVariable, isArbitraryValue]\n }, isInteger, isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartOrEnd = () => [isInteger, 'auto', isArbitraryVariable, isArbitraryValue];\n const scaleGridAutoColsRows = () => ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue];\n const scaleAlignPrimaryAxis = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch', 'baseline', 'center-safe', 'end-safe'];\n const scaleAlignSecondaryAxis = () => ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'];\n const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()];\n const scaleSizing = () => [isFraction, 'auto', 'full', 'dvw', 'dvh', 'lvw', 'lvh', 'svw', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];\n const scaleBgPosition = () => [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition, {\n position: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleBgRepeat = () => ['no-repeat', {\n repeat: ['', 'x', 'y', 'space', 'round']\n }];\n const scaleBgSize = () => ['auto', 'cover', 'contain', isArbitraryVariableSize, isArbitrarySize, {\n size: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleGradientStopPosition = () => [isPercent, isArbitraryVariableLength, isArbitraryLength];\n const scaleRadius = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', 'full', themeRadius, isArbitraryVariable, isArbitraryValue];\n const scaleBorderWidth = () => ['', isNumber, isArbitraryVariableLength, isArbitraryLength];\n const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'];\n const scaleBlendMode = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const scaleMaskImagePosition = () => [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition];\n const scaleBlur = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeBlur, isArbitraryVariable, isArbitraryValue];\n const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()];\n return {\n cacheSize: 500,\n theme: {\n animate: ['spin', 'ping', 'pulse', 'bounce'],\n aspect: ['video'],\n blur: [isTshirtSize],\n breakpoint: [isTshirtSize],\n color: [isAny],\n container: [isTshirtSize],\n 'drop-shadow': [isTshirtSize],\n ease: ['in', 'out', 'in-out'],\n font: [isAnyNonArbitrary],\n 'font-weight': ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black'],\n 'inset-shadow': [isTshirtSize],\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],\n perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],\n radius: [isTshirtSize],\n shadow: [isTshirtSize],\n spacing: ['px', isNumber],\n text: [isTshirtSize],\n 'text-shadow': [isTshirtSize],\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest']\n },\n classGroups: {\n // --------------\n // --- Layout ---\n // --------------\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', isFraction, isArbitraryValue, isArbitraryVariable, themeAspect]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n * @deprecated since Tailwind CSS v4.0.0\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': scaleBreak()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': scaleBreak()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n /**\n * Screen Reader Only\n * @see https://tailwindcss.com/docs/display#screen-reader-only\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: scalePositionWithArbitrary()\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: scaleOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': scaleOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': scaleOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: scaleOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': scaleOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': scaleOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Top / Right / Bottom / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: scaleInset()\n }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': scaleInset()\n }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': scaleInset()\n }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{\n start: scaleInset()\n }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{\n end: scaleInset()\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: scaleInset()\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: scaleInset()\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: scaleInset()\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: scaleInset()\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------------\n // --- Flexbox and Grid ---\n // ------------------------\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: [isFraction, 'full', 'auto', themeContainer, ...scaleUnambiguousSpacing()]\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['nowrap', 'wrap', 'wrap-reverse']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: [isInteger, 'first', 'last', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': scaleGridAutoColsRows()\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': scaleGridAutoColsRows()\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: scaleUnambiguousSpacing()\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': scaleUnambiguousSpacing()\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': scaleUnambiguousSpacing()\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: [...scaleAlignPrimaryAxis(), 'normal']\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': [...scaleAlignSecondaryAxis(), 'normal']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...scaleAlignPrimaryAxis()]\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: [...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', ...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': scaleAlignPrimaryAxis()\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': [...scaleAlignSecondaryAxis(), 'baseline']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: scaleUnambiguousSpacing()\n }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: scaleUnambiguousSpacing()\n }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: scaleUnambiguousSpacing()\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: scaleMargin()\n }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: scaleMargin()\n }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: scaleMargin()\n }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: scaleMargin()\n }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: scaleMargin()\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: scaleMargin()\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: scaleMargin()\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: scaleMargin()\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: scaleMargin()\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x': [{\n 'space-x': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y': [{\n 'space-y': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y-reverse': ['space-y-reverse'],\n // --------------\n // --- Sizing ---\n // --------------\n /**\n * Size\n * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n */\n size: [{\n size: scaleSizing()\n }],\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: [themeContainer, 'screen', ...scaleSizing()]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [themeContainer, 'screen', /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'none', ...scaleSizing()]\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [themeContainer, 'screen', 'none', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'prose', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n {\n screen: [themeBreakpoint]\n }, ...scaleSizing()]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: ['screen', 'lh', ...scaleSizing()]\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': ['screen', 'lh', 'none', ...scaleSizing()]\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': ['screen', 'lh', ...scaleSizing()]\n }],\n // ------------------\n // --- Typography ---\n // ------------------\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: [themeFontWeight, isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Font Stretch\n * @see https://tailwindcss.com/docs/font-stretch\n */\n 'font-stretch': [{\n 'font-stretch': ['ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded', isPercent, isArbitraryValue]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isArbitraryVariableFamilyName, isArbitraryValue, themeFont]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: [themeTracking, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: [/** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n themeLeading, ...scaleUnambiguousSpacing()]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://v3.tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: scaleColor()\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: scaleColor()\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...scaleLineStyle(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: [isNumber, 'from-font', 'auto', isArbitraryVariable, isArbitraryLength]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: scaleColor()\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: scaleUnambiguousSpacing()\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Overflow Wrap\n * @see https://tailwindcss.com/docs/overflow-wrap\n */\n wrap: [{\n wrap: ['break-word', 'anywhere', 'normal']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // -------------------\n // --- Backgrounds ---\n // -------------------\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: scaleBgPosition()\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: scaleBgRepeat()\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: scaleBgSize()\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n linear: [{\n to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isInteger, isArbitraryVariable, isArbitraryValue],\n radial: ['', isArbitraryVariable, isArbitraryValue],\n conic: [isInteger, isArbitraryVariable, isArbitraryValue]\n }, isArbitraryVariableImage, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: scaleColor()\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: scaleColor()\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: scaleColor()\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: scaleColor()\n }],\n // ---------------\n // --- Borders ---\n // ---------------\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: scaleRadius()\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': scaleRadius()\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': scaleRadius()\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': scaleRadius()\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': scaleRadius()\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': scaleRadius()\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': scaleRadius()\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': scaleRadius()\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': scaleRadius()\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': scaleRadius()\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': scaleRadius()\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': scaleRadius()\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': scaleRadius()\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': scaleRadius()\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': scaleRadius()\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: scaleBorderWidth()\n }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': scaleBorderWidth()\n }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': scaleBorderWidth()\n }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': scaleBorderWidth()\n }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': scaleBorderWidth()\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': scaleBorderWidth()\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': scaleBorderWidth()\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': scaleBorderWidth()\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': scaleBorderWidth()\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x': [{\n 'divide-x': scaleBorderWidth()\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y': [{\n 'divide-y': scaleBorderWidth()\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n */\n 'divide-style': [{\n divide: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: scaleColor()\n }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': scaleColor()\n }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': scaleColor()\n }],\n /**\n * Border Color S\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': scaleColor()\n }],\n /**\n * Border Color E\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': scaleColor()\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': scaleColor()\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': scaleColor()\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': scaleColor()\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': scaleColor()\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: scaleColor()\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: [...scaleLineStyle(), 'none', 'hidden']\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: scaleColor()\n }],\n // ---------------\n // --- Effects ---\n // ---------------\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n */\n 'shadow-color': [{\n shadow: scaleColor()\n }],\n /**\n * Inset Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n */\n 'inset-shadow': [{\n 'inset-shadow': ['none', themeInsetShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Inset Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n */\n 'inset-shadow-color': [{\n 'inset-shadow': scaleColor()\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n */\n 'ring-w': [{\n ring: scaleBorderWidth()\n }],\n /**\n * Ring Width Inset\n * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n */\n 'ring-color': [{\n ring: scaleColor()\n }],\n /**\n * Ring Offset Width\n * @see https://v3.tailwindcss.com/docs/ring-offset-width\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-w': [{\n 'ring-offset': [isNumber, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://v3.tailwindcss.com/docs/ring-offset-color\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-color': [{\n 'ring-offset': scaleColor()\n }],\n /**\n * Inset Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n */\n 'inset-ring-w': [{\n 'inset-ring': scaleBorderWidth()\n }],\n /**\n * Inset Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n */\n 'inset-ring-color': [{\n 'inset-ring': scaleColor()\n }],\n /**\n * Text Shadow\n * @see https://tailwindcss.com/docs/text-shadow\n */\n 'text-shadow': [{\n 'text-shadow': ['none', themeTextShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Text Shadow Color\n * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n */\n 'text-shadow-color': [{\n 'text-shadow': scaleColor()\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': scaleBlendMode()\n }],\n /**\n * Mask Clip\n * @see https://tailwindcss.com/docs/mask-clip\n */\n 'mask-clip': [{\n 'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }, 'mask-no-clip'],\n /**\n * Mask Composite\n * @see https://tailwindcss.com/docs/mask-composite\n */\n 'mask-composite': [{\n mask: ['add', 'subtract', 'intersect', 'exclude']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image-linear-pos': [{\n 'mask-linear': [isNumber]\n }],\n 'mask-image-linear-from-pos': [{\n 'mask-linear-from': scaleMaskImagePosition()\n }],\n 'mask-image-linear-to-pos': [{\n 'mask-linear-to': scaleMaskImagePosition()\n }],\n 'mask-image-linear-from-color': [{\n 'mask-linear-from': scaleColor()\n }],\n 'mask-image-linear-to-color': [{\n 'mask-linear-to': scaleColor()\n }],\n 'mask-image-t-from-pos': [{\n 'mask-t-from': scaleMaskImagePosition()\n }],\n 'mask-image-t-to-pos': [{\n 'mask-t-to': scaleMaskImagePosition()\n }],\n 'mask-image-t-from-color': [{\n 'mask-t-from': scaleColor()\n }],\n 'mask-image-t-to-color': [{\n 'mask-t-to': scaleColor()\n }],\n 'mask-image-r-from-pos': [{\n 'mask-r-from': scaleMaskImagePosition()\n }],\n 'mask-image-r-to-pos': [{\n 'mask-r-to': scaleMaskImagePosition()\n }],\n 'mask-image-r-from-color': [{\n 'mask-r-from': scaleColor()\n }],\n 'mask-image-r-to-color': [{\n 'mask-r-to': scaleColor()\n }],\n 'mask-image-b-from-pos': [{\n 'mask-b-from': scaleMaskImagePosition()\n }],\n 'mask-image-b-to-pos': [{\n 'mask-b-to': scaleMaskImagePosition()\n }],\n 'mask-image-b-from-color': [{\n 'mask-b-from': scaleColor()\n }],\n 'mask-image-b-to-color': [{\n 'mask-b-to': scaleColor()\n }],\n 'mask-image-l-from-pos': [{\n 'mask-l-from': scaleMaskImagePosition()\n }],\n 'mask-image-l-to-pos': [{\n 'mask-l-to': scaleMaskImagePosition()\n }],\n 'mask-image-l-from-color': [{\n 'mask-l-from': scaleColor()\n }],\n 'mask-image-l-to-color': [{\n 'mask-l-to': scaleColor()\n }],\n 'mask-image-x-from-pos': [{\n 'mask-x-from': scaleMaskImagePosition()\n }],\n 'mask-image-x-to-pos': [{\n 'mask-x-to': scaleMaskImagePosition()\n }],\n 'mask-image-x-from-color': [{\n 'mask-x-from': scaleColor()\n }],\n 'mask-image-x-to-color': [{\n 'mask-x-to': scaleColor()\n }],\n 'mask-image-y-from-pos': [{\n 'mask-y-from': scaleMaskImagePosition()\n }],\n 'mask-image-y-to-pos': [{\n 'mask-y-to': scaleMaskImagePosition()\n }],\n 'mask-image-y-from-color': [{\n 'mask-y-from': scaleColor()\n }],\n 'mask-image-y-to-color': [{\n 'mask-y-to': scaleColor()\n }],\n 'mask-image-radial': [{\n 'mask-radial': [isArbitraryVariable, isArbitraryValue]\n }],\n 'mask-image-radial-from-pos': [{\n 'mask-radial-from': scaleMaskImagePosition()\n }],\n 'mask-image-radial-to-pos': [{\n 'mask-radial-to': scaleMaskImagePosition()\n }],\n 'mask-image-radial-from-color': [{\n 'mask-radial-from': scaleColor()\n }],\n 'mask-image-radial-to-color': [{\n 'mask-radial-to': scaleColor()\n }],\n 'mask-image-radial-shape': [{\n 'mask-radial': ['circle', 'ellipse']\n }],\n 'mask-image-radial-size': [{\n 'mask-radial': [{\n closest: ['side', 'corner'],\n farthest: ['side', 'corner']\n }]\n }],\n 'mask-image-radial-pos': [{\n 'mask-radial-at': scalePosition()\n }],\n 'mask-image-conic-pos': [{\n 'mask-conic': [isNumber]\n }],\n 'mask-image-conic-from-pos': [{\n 'mask-conic-from': scaleMaskImagePosition()\n }],\n 'mask-image-conic-to-pos': [{\n 'mask-conic-to': scaleMaskImagePosition()\n }],\n 'mask-image-conic-from-color': [{\n 'mask-conic-from': scaleColor()\n }],\n 'mask-image-conic-to-color': [{\n 'mask-conic-to': scaleColor()\n }],\n /**\n * Mask Mode\n * @see https://tailwindcss.com/docs/mask-mode\n */\n 'mask-mode': [{\n mask: ['alpha', 'luminance', 'match']\n }],\n /**\n * Mask Origin\n * @see https://tailwindcss.com/docs/mask-origin\n */\n 'mask-origin': [{\n 'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }],\n /**\n * Mask Position\n * @see https://tailwindcss.com/docs/mask-position\n */\n 'mask-position': [{\n mask: scaleBgPosition()\n }],\n /**\n * Mask Repeat\n * @see https://tailwindcss.com/docs/mask-repeat\n */\n 'mask-repeat': [{\n mask: scaleBgRepeat()\n }],\n /**\n * Mask Size\n * @see https://tailwindcss.com/docs/mask-size\n */\n 'mask-size': [{\n mask: scaleBgSize()\n }],\n /**\n * Mask Type\n * @see https://tailwindcss.com/docs/mask-type\n */\n 'mask-type': [{\n 'mask-type': ['alpha', 'luminance']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image': [{\n mask: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // ---------------\n // --- Filters ---\n // ---------------\n /**\n * Filter\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: scaleBlur()\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeDropShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Drop Shadow Color\n * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n */\n 'drop-shadow-color': [{\n 'drop-shadow': scaleColor()\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Filter\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': scaleBlur()\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n // --------------\n // --- Tables ---\n // --------------\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': scaleUnambiguousSpacing()\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // ---------------------------------\n // --- Transitions and Animation ---\n // ---------------------------------\n /**\n * Transition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['', 'all', 'colors', 'opacity', 'shadow', 'transform', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Behavior\n * @see https://tailwindcss.com/docs/transition-behavior\n */\n 'transition-behavior': [{\n transition: ['normal', 'discrete']\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------\n // --- Transforms ---\n // ------------------\n /**\n * Backface Visibility\n * @see https://tailwindcss.com/docs/backface-visibility\n */\n backface: [{\n backface: ['hidden', 'visible']\n }],\n /**\n * Perspective\n * @see https://tailwindcss.com/docs/perspective\n */\n perspective: [{\n perspective: [themePerspective, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Perspective Origin\n * @see https://tailwindcss.com/docs/perspective-origin\n */\n 'perspective-origin': [{\n 'perspective-origin': scalePositionWithArbitrary()\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: scaleRotate()\n }],\n /**\n * Rotate X\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-x': [{\n 'rotate-x': scaleRotate()\n }],\n /**\n * Rotate Y\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-y': [{\n 'rotate-y': scaleRotate()\n }],\n /**\n * Rotate Z\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-z': [{\n 'rotate-z': scaleRotate()\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: scaleScale()\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': scaleScale()\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': scaleScale()\n }],\n /**\n * Scale Z\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-z': [{\n 'scale-z': scaleScale()\n }],\n /**\n * Scale 3D\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-3d': ['scale-3d'],\n /**\n * Skew\n * @see https://tailwindcss.com/docs/skew\n */\n skew: [{\n skew: scaleSkew()\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': scaleSkew()\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': scaleSkew()\n }],\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu']\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: scalePositionWithArbitrary()\n }],\n /**\n * Transform Style\n * @see https://tailwindcss.com/docs/transform-style\n */\n 'transform-style': [{\n transform: ['3d', 'flat']\n }],\n /**\n * Translate\n * @see https://tailwindcss.com/docs/translate\n */\n translate: [{\n translate: scaleTranslate()\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': scaleTranslate()\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': scaleTranslate()\n }],\n /**\n * Translate Z\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-z': [{\n 'translate-z': scaleTranslate()\n }],\n /**\n * Translate None\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-none': ['translate-none'],\n // ---------------------\n // --- Interactivity ---\n // ---------------------\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: scaleColor()\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: scaleColor()\n }],\n /**\n * Color Scheme\n * @see https://tailwindcss.com/docs/color-scheme\n */\n 'color-scheme': [{\n scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Field Sizing\n * @see https://tailwindcss.com/docs/field-sizing\n */\n 'field-sizing': [{\n 'field-sizing': ['fixed', 'content']\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['auto', 'none']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', '', 'y', 'x']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryVariable, isArbitraryValue]\n }],\n // -----------\n // --- SVG ---\n // -----------\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: ['none', ...scaleColor()]\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isNumber, isArbitraryVariableLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: ['none', ...scaleColor()]\n }],\n // ---------------------\n // --- Accessibility ---\n // ---------------------\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n 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-x', 'border-w-y', '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-x', 'border-color-y', '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 translate: ['translate-x', 'translate-y', 'translate-none'],\n 'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-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 orderSensitiveModifiers: ['*', '**', 'after', 'backdrop', 'before', 'details-content', 'file', 'first-letter', 'first-line', 'marker', 'placeholder', 'selection']\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n overrideConfigProperties(baseConfig.theme, override.theme);\n overrideConfigProperties(baseConfig.classGroups, override.classGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroups, override.conflictingClassGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroupModifiers, override.conflictingClassGroupModifiers);\n overrideProperty(baseConfig, 'orderSensitiveModifiers', override.orderSensitiveModifiers);\n mergeConfigProperties(baseConfig.theme, extend.theme);\n mergeConfigProperties(baseConfig.classGroups, extend.classGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroups, extend.conflictingClassGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroupModifiers, extend.conflictingClassGroupModifiers);\n mergeArrayProperties(baseConfig, extend, 'orderSensitiveModifiers');\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n mergeArrayProperties(baseObject, mergeObject, key);\n }\n }\n};\nconst mergeArrayProperties = (baseObject, mergeObject, key) => {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = baseObject[key] ? baseObject[key].concat(mergeValue) : mergeValue;\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}","/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>(props)=>{\n var _config_compoundVariants;\n if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n const { variants, defaultVariants } = config;\n const getVariantClassNames = Object.keys(variants).map((variant)=>{\n const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n return variants[variant][variantKey];\n });\n const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n let [key, value] = param;\n if (value === undefined) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\n let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n return Object.entries(compoundVariantOptions).every((param)=>{\n let [key, value] = param;\n return Array.isArray(value) ? value.includes({\n ...defaultVariants,\n ...propsWithoutUndefined\n }[key]) : ({\n ...defaultVariants,\n ...propsWithoutUndefined\n })[key] === value;\n }) ? [\n ...acc,\n cvClass,\n cvClassName\n ] : acc;\n }, []);\n return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n };\n\n","import { cva, type VariantProps } from \"class-variance-authority\"\n\nexport const buttonVariants = cva(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-10 px-4 py-2\",\n sm: \"h-9 rounded-md px-3\",\n lg: \"h-11 rounded-md px-8\",\n icon: \"h-10 w-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport type ButtonVariantProps = VariantProps<typeof buttonVariants>","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport {\n buttonVariants,\n type ButtonVariantProps,\n} from \"../lib/button-variants\";\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n ButtonVariantProps {\n asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, disabled, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n type={props.type || \"button\"}\n disabled={disabled}\n aria-disabled={disabled ? \"true\" : undefined}\n {...props}\n />\n );\n }\n);\nButton.displayName = \"Button\";\n\nexport { Button };\n","import React from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\n\nexport type TextVariant =\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"h5\"\n | \"h6\"\n | \"body\"\n | \"body-sm\"\n | \"body-lg\"\n | \"caption\"\n | \"label\";\n\nexport type TextColor =\n | \"primary\"\n | \"secondary\"\n | \"muted\"\n | \"error\"\n | \"success\"\n | \"warning\";\n\nexport interface TextProps {\n variant?: TextVariant;\n color?: TextColor;\n weight?: \"light\" | \"normal\" | \"medium\" | \"semibold\" | \"bold\";\n align?: \"left\" | \"center\" | \"right\" | \"justify\";\n truncate?: boolean;\n children: React.ReactNode;\n className?: string;\n as?: React.ElementType;\n}\n\nconst getVariantClasses = (variant: TextVariant): string => {\n switch (variant) {\n case \"h1\":\n return \"text-4xl font-bold leading-tight tracking-tight\";\n case \"h2\":\n return \"text-3xl font-bold leading-tight tracking-tight\";\n case \"h3\":\n return \"text-2xl font-semibold leading-tight tracking-normal\";\n case \"h4\":\n return \"text-xl font-semibold leading-snug tracking-normal\";\n case \"h5\":\n return \"text-lg font-medium leading-snug tracking-normal\";\n case \"h6\":\n return \"text-base font-medium leading-normal tracking-normal\";\n case \"body\":\n return \"text-base font-normal leading-normal\";\n case \"body-sm\":\n return \"text-sm font-normal leading-normal\";\n case \"body-lg\":\n return \"text-lg font-normal leading-relaxed\";\n case \"caption\":\n return \"text-xs font-normal leading-normal tracking-wide\";\n case \"label\":\n return \"text-sm font-medium leading-normal tracking-wide\";\n default:\n return \"text-base font-normal leading-normal\";\n }\n};\n\nconst getColorClasses = (color: TextColor): string => {\n switch (color) {\n case \"primary\":\n return \"text-foreground\";\n case \"secondary\":\n return \"text-muted-foreground\";\n case \"muted\":\n return \"text-muted-foreground\";\n case \"error\":\n return \"text-destructive\";\n case \"success\":\n return \"text-success\";\n case \"warning\":\n return \"text-warning\";\n default:\n return \"text-foreground\";\n }\n};\n\nconst getWeightClasses = (weight?: string): string => {\n switch (weight) {\n case \"light\":\n return \"font-light\";\n case \"normal\":\n return \"font-normal\";\n case \"medium\":\n return \"font-medium\";\n case \"semibold\":\n return \"font-semibold\";\n case \"bold\":\n return \"font-bold\";\n default:\n return \"\";\n }\n};\n\nconst getAlignClasses = (align: string): string => {\n switch (align) {\n case \"left\":\n return \"text-left\";\n case \"center\":\n return \"text-center\";\n case \"right\":\n return \"text-right\";\n case \"justify\":\n return \"text-justify\";\n default:\n return \"text-left\";\n }\n};\n\nexport const Text: React.FC<TextProps> = ({\n variant = \"body\",\n color = \"primary\",\n weight,\n align = \"left\",\n truncate = false,\n children,\n className,\n as,\n ...props\n}) => {\n const Component = as || getDefaultElement(variant);\n\n const classes = cn(\n \"m-0\",\n getVariantClasses(variant),\n getColorClasses(color),\n getWeightClasses(weight),\n getAlignClasses(align),\n truncate && \"truncate\",\n className\n );\n\n return (\n <Component className={classes} {...props}>\n {children}\n </Component>\n );\n};\n\nfunction getDefaultElement(variant: TextVariant): React.ElementType {\n switch (variant) {\n case \"h1\":\n return \"h1\";\n case \"h2\":\n return \"h2\";\n case \"h3\":\n return \"h3\";\n case \"h4\":\n return \"h4\";\n case \"h5\":\n return \"h5\";\n case \"h6\":\n return \"h6\";\n default:\n return \"p\";\n }\n}\n","import React from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport { Text } from \"../../text/ui/text\";\n\nexport interface CardProps {\n children: React.ReactNode;\n title?: string;\n subtitle?: string;\n className?: string;\n padding?: \"none\" | \"sm\" | \"md\" | \"lg\";\n shadow?: \"none\" | \"sm\" | \"md\" | \"lg\";\n borderRadius?: \"none\" | \"sm\" | \"md\" | \"lg\";\n onClick?: () => void;\n}\n\nconst getPaddingClasses = (padding: string): string => {\n switch (padding) {\n case \"sm\":\n return \"p-4\";\n case \"md\":\n return \"p-6\";\n case \"lg\":\n return \"p-8\";\n default:\n return \"p-0\";\n }\n};\n\nconst getShadowClasses = (shadow: string): string => {\n switch (shadow) {\n case \"sm\":\n return \"shadow-sm\";\n case \"md\":\n return \"shadow-md\";\n case \"lg\":\n return \"shadow-lg\";\n default:\n return \"shadow-none\";\n }\n};\n\nconst getBorderRadiusClasses = (borderRadius: string): string => {\n switch (borderRadius) {\n case \"sm\":\n return \"rounded-sm\";\n case \"md\":\n return \"rounded-md\";\n case \"lg\":\n return \"rounded-lg\";\n default:\n return \"rounded-none\";\n }\n};\n\nexport const Card: React.FC<CardProps> = ({\n children,\n title,\n subtitle,\n className,\n padding = \"md\",\n shadow = \"md\",\n borderRadius = \"md\",\n onClick,\n}) => {\n const clickable = !!onClick;\n\n const classes = cn(\n \"bg-card\",\n getPaddingClasses(padding),\n getShadowClasses(shadow),\n getBorderRadiusClasses(borderRadius),\n \"transition-all duration-200 ease-in-out\",\n clickable &&\n \"cursor-pointer hover:-translate-y-0.5 hover:shadow-lg active:translate-y-0\",\n className\n );\n\n return (\n <div className={classes} onClick={onClick}>\n {(title || subtitle) && (\n <div className=\"mb-4\">\n {title && (\n <div className=\"mb-2\">\n <Text variant=\"h3\">{title}</Text>\n </div>\n )}\n {subtitle && (\n <div className=\"text-muted-foreground\">\n <Text variant=\"body-sm\" color=\"muted\">\n {subtitle}\n </Text>\n </div>\n )}\n </div>\n )}\n\n <div className=\"flex-1\">{children}</div>\n </div>\n );\n};\n\nexport const CardFooterComponent: React.FC<{ children: React.ReactNode }> = ({\n children,\n}) => <div className=\"mt-4 pt-4 border-t border-border\">{children}</div>;\n\n// Compound component pattern\nexport const CompoundCard = Object.assign(Card, {\n Footer: CardFooterComponent,\n});\n","import React, { useEffect } from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport { Text } from \"../../text/ui/text\";\nimport { Button } from \"../../../features/button/ui/button\";\n\nexport interface ModalProps {\n isOpen: boolean;\n onClose: () => void;\n title?: string;\n children: React.ReactNode;\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n showCloseButton?: boolean;\n closeOnOverlayClick?: boolean;\n closeOnEscape?: boolean;\n}\n\nconst getSizeClasses = (size: string): string => {\n switch (size) {\n case \"sm\":\n return \"max-w-md\";\n case \"md\":\n return \"max-w-2xl\";\n case \"lg\":\n return \"max-w-4xl\";\n case \"xl\":\n return \"max-w-6xl\";\n default:\n return \"max-w-2xl\";\n }\n};\n\nexport const Modal: React.FC<ModalProps> = ({\n isOpen,\n onClose,\n title,\n children,\n size = \"md\",\n showCloseButton = true,\n closeOnOverlayClick = true,\n closeOnEscape = true,\n}) => {\n const modalRef = React.useRef<HTMLDivElement>(null);\n\n // Handle escape key\n useEffect(() => {\n if (!isOpen || !closeOnEscape) return;\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onClose();\n }\n };\n\n document.addEventListener(\"keydown\", handleEscape);\n return () => document.removeEventListener(\"keydown\", handleEscape);\n }, [isOpen, closeOnEscape, onClose]);\n\n // Prevent body scroll when modal is open\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = \"hidden\";\n } else {\n document.body.style.overflow = \"unset\";\n }\n\n return () => {\n document.body.style.overflow = \"unset\";\n };\n }, [isOpen]);\n\n // Focus management\n useEffect(() => {\n if (isOpen && modalRef.current) {\n modalRef.current.focus();\n }\n }, [isOpen]);\n\n if (!isOpen) return null;\n\n const overlayClasses = cn(\n \"fixed inset-0 bg-black/50 flex items-center justify-center z-50 p-4\"\n );\n\n const modalClasses = cn(\n \"bg-card rounded-lg shadow-xl w-full max-h-[90vh] overflow-hidden flex flex-col\",\n getSizeClasses(size)\n );\n\n const headerClasses = cn(\n \"p-6 border-b border-border flex items-center justify-between\"\n );\n\n const contentClasses = cn(\"p-6 overflow-y-auto flex-1\");\n\n const closeButtonClasses = cn(\n \"bg-none border-none text-xl cursor-pointer text-muted-foreground p-1 rounded-sm flex items-center justify-center hover:bg-accent hover:text-accent-foreground focus:outline-2 focus:outline-primary focus:outline-offset-2\"\n );\n\n return (\n <div\n className={overlayClasses}\n onClick={closeOnOverlayClick ? onClose : undefined}\n >\n <div\n ref={modalRef}\n className={modalClasses}\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n tabIndex={-1}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? \"modal-title\" : undefined}\n >\n {(title || showCloseButton) && (\n <div className={headerClasses}>\n {title && (\n <Text variant=\"h3\" className=\"text-foreground\">\n {title}\n </Text>\n )}\n {showCloseButton && (\n <button\n onClick={onClose}\n aria-label=\"Close modal\"\n className={closeButtonClasses}\n >\n ×\n </button>\n )}\n </div>\n )}\n\n <div className={contentClasses}>{children}</div>\n </div>\n </div>\n );\n};\n\n// Compound component pattern for Modal with footer actions\nexport interface ModalWithActionsProps extends Omit<ModalProps, \"children\"> {\n children: React.ReactNode;\n actions?: React.ReactNode;\n}\n\nexport const ModalWithActions: React.FC<ModalWithActionsProps> = ({\n children,\n actions,\n ...modalProps\n}) => (\n <Modal {...modalProps}>\n <div className=\"p-6 overflow-y-auto flex-1\">{children}</div>\n {actions && (\n <div className=\"p-6 border-t border-border flex justify-end gap-3\">\n {actions}\n </div>\n )}\n </Modal>\n);\n\n// Pre-configured modal variants\nexport interface ConfirmModalProps {\n isOpen: boolean;\n onClose: () => void;\n onConfirm: () => void;\n title: string;\n message: string;\n confirmText?: string;\n cancelText?: string;\n}\n\nexport const ConfirmModal: React.FC<ConfirmModalProps> = ({\n isOpen,\n onClose,\n onConfirm,\n title,\n message,\n confirmText = \"Confirm\",\n cancelText = \"Cancel\",\n}) => (\n <ModalWithActions\n isOpen={isOpen}\n onClose={onClose}\n title={title}\n actions={\n <>\n <Button variant=\"secondary\" onClick={onClose}>\n {cancelText}\n </Button>\n <Button variant=\"default\" onClick={onConfirm}>\n {confirmText}\n </Button>\n </>\n }\n >\n <Text>{message}</Text>\n </ModalWithActions>\n);\n","/**\n * Input Component Variants\n * CVA-based styling for input components\n */\n\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nexport const inputVariants = cva(\n [\n // Base styles\n \"flex w-full rounded-md border bg-background px-3 py-2\",\n \"text-base transition-colors\",\n \"file:border-0 file:bg-transparent file:text-sm file:font-medium\",\n \"placeholder:text-muted-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n ],\n {\n variants: {\n variant: {\n default: [\"border-input\", \"focus-visible:ring-primary\"],\n error: [\"border-destructive\", \"focus-visible:ring-destructive\"],\n success: [\"border-success\", \"focus-visible:ring-success\"],\n },\n inputSize: {\n sm: \"h-8 text-sm\",\n default: \"h-10\",\n lg: \"h-12 text-lg\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n inputSize: \"default\",\n },\n },\n);\n\nexport const labelVariants = cva(\n [\"block text-sm font-medium mb-1.5\", \"transition-colors\"],\n {\n variants: {\n variant: {\n default: \"text-foreground\",\n error: \"text-destructive\",\n success: \"text-success\",\n },\n required: {\n true: \"after:content-['*'] after:ml-0.5 after:text-destructive\",\n false: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n required: false,\n },\n },\n);\n\nexport const helperTextVariants = cva(\"mt-1.5 text-sm\", {\n variants: {\n variant: {\n default: \"text-muted-foreground\",\n error: \"text-destructive\",\n success: \"text-success\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n\nexport type InputVariantProps = VariantProps<typeof inputVariants>;\nexport type LabelVariantProps = VariantProps<typeof labelVariants>;\nexport type HelperTextVariantProps = VariantProps<typeof helperTextVariants>;\n","/**\n * Input Component\n * A reusable form input component with label and helper text support\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport {\n inputVariants,\n labelVariants,\n helperTextVariants,\n type InputVariantProps,\n} from \"../lib/input-variants\";\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\">,\n InputVariantProps {\n /** Label text for the input */\n label?: string;\n /** Helper text displayed below the input */\n helperText?: string;\n /** Error message (overrides helperText when present) */\n error?: string;\n /** Whether the input is required */\n required?: boolean;\n /** Prefix element (e.g., icon or text) */\n prefix?: React.ReactNode;\n /** Suffix element (e.g., icon or text) */\n suffix?: React.ReactNode;\n /** Container class name */\n containerClassName?: string;\n /** Label class name */\n labelClassName?: string;\n}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n containerClassName,\n labelClassName,\n variant,\n inputSize,\n label,\n helperText,\n error,\n required,\n prefix,\n suffix,\n id,\n ...props\n },\n ref,\n ) => {\n const generatedId = React.useId();\n const inputId = id || generatedId;\n const helperTextId = `${inputId}-helper`;\n const errorId = `${inputId}-error`;\n\n const currentVariant = error ? \"error\" : variant;\n const displayHelperText = error || helperText;\n\n return (\n <div className={cn(\"w-full\", containerClassName)}>\n {label && (\n <label\n htmlFor={inputId}\n className={cn(\n labelVariants({ variant: currentVariant, required }),\n labelClassName,\n )}\n >\n {label}\n </label>\n )}\n <div className=\"relative\">\n {prefix && (\n <div className=\"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground\">\n {prefix}\n </div>\n )}\n <input\n id={inputId}\n ref={ref}\n className={cn(\n inputVariants({ variant: currentVariant, inputSize }),\n prefix && \"pl-10\",\n suffix && \"pr-10\",\n className,\n )}\n aria-invalid={error ? \"true\" : \"false\"}\n aria-describedby={\n displayHelperText ? (error ? errorId : helperTextId) : undefined\n }\n {...props}\n />\n {suffix && (\n <div className=\"absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground\">\n {suffix}\n </div>\n )}\n </div>\n {displayHelperText && (\n <p\n id={error ? errorId : helperTextId}\n className={helperTextVariants({ variant: currentVariant })}\n role={error ? \"alert\" : undefined}\n >\n {displayHelperText}\n </p>\n )}\n </div>\n );\n },\n);\n\nInput.displayName = \"Input\";\n\nexport { Input };\n","/**\n * @license lucide-react v0.547.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n};\n\nexport { hasA11yProp, mergeClasses, toCamelCase, toKebabCase, toPascalCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.547.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.547.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses, hasA11yProp } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n )\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.547.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.547.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M10 4 8 6\", key: \"1rru8s\" }],\n [\"path\", { d: \"M17 19v2\", key: \"ts1sot\" }],\n [\"path\", { d: \"M2 12h20\", key: \"9i4pu4\" }],\n [\"path\", { d: \"M7 19v2\", key: \"12npes\" }],\n [\n \"path\",\n {\n d: \"M9 5 7.621 3.621A2.121 2.121 0 0 0 4 5v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-5\",\n key: \"14ym8i\"\n }\n ]\n];\nconst Bath = createLucideIcon(\"bath\", __iconNode);\n\nexport { __iconNode, Bath as default };\n//# sourceMappingURL=bath.js.map\n","/**\n * @license lucide-react v0.547.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M2 4v16\", key: \"vw9hq8\" }],\n [\"path\", { d: \"M2 8h18a2 2 0 0 1 2 2v10\", key: \"1dgv2r\" }],\n [\"path\", { d: \"M2 17h20\", key: \"18nfp3\" }],\n [\"path\", { d: \"M6 8v9\", key: \"1yriud\" }]\n];\nconst Bed = createLucideIcon(\"bed\", __iconNode);\n\nexport { __iconNode, Bed as default };\n//# sourceMappingURL=bed.js.map\n","/**\n * @license lucide-react v0.547.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M19 17h2c.6 0 1-.4 1-1v-3c0-.9-.7-1.7-1.5-1.9C18.7 10.6 16 10 16 10s-1.3-1.4-2.2-2.3c-.5-.4-1.1-.7-1.8-.7H5c-.6 0-1.1.4-1.4.9l-1.4 2.9A3.7 3.7 0 0 0 2 12v4c0 .6.4 1 1 1h2\",\n key: \"5owen\"\n }\n ],\n [\"circle\", { cx: \"7\", cy: \"17\", r: \"2\", key: \"u2ysq9\" }],\n [\"path\", { d: \"M9 17h6\", key: \"r8uit2\" }],\n [\"circle\", { cx: \"17\", cy: \"17\", r: \"2\", key: \"axvx0g\" }]\n];\nconst Car = createLucideIcon(\"car\", __iconNode);\n\nexport { __iconNode, Car as default };\n//# sourceMappingURL=car.js.map\n","/**\n * @license lucide-react v0.547.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]];\nconst ChevronDown = createLucideIcon(\"chevron-down\", __iconNode);\n\nexport { __iconNode, ChevronDown as default };\n//# sourceMappingURL=chevron-down.js.map\n","/**\n * @license lucide-react v0.547.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m15 18-6-6 6-6\", key: \"1wnfg3\" }]];\nconst ChevronLeft = createLucideIcon(\"chevron-left\", __iconNode);\n\nexport { __iconNode, ChevronLeft as default };\n//# sourceMappingURL=chevron-left.js.map\n","/**\n * @license lucide-react v0.547.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]];\nconst ChevronRight = createLucideIcon(\"chevron-right\", __iconNode);\n\nexport { __iconNode, ChevronRight as default };\n//# sourceMappingURL=chevron-right.js.map\n","/**\n * @license lucide-react v0.547.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", key: \"afitv7\" }],\n [\"path\", { d: \"M3 9h18\", key: \"1pudct\" }],\n [\"path\", { d: \"M3 15h18\", key: \"5xshup\" }],\n [\"path\", { d: \"M9 3v18\", key: \"fh3hqa\" }],\n [\"path\", { d: \"M15 3v18\", key: \"14nvp0\" }]\n];\nconst Grid3x3 = createLucideIcon(\"grid-3x3\", __iconNode);\n\nexport { __iconNode, Grid3x3 as default };\n//# sourceMappingURL=grid-3x3.js.map\n","/**\n * @license lucide-react v0.547.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5\",\n key: \"mvr1a0\"\n }\n ]\n];\nconst Heart = createLucideIcon(\"heart\", __iconNode);\n\nexport { __iconNode, Heart as default };\n//# sourceMappingURL=heart.js.map\n","/**\n * @license lucide-react v0.547.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M8 3H5a2 2 0 0 0-2 2v3\", key: \"1dcmit\" }],\n [\"path\", { d: \"M21 8V5a2 2 0 0 0-2-2h-3\", key: \"1e4gt3\" }],\n [\"path\", { d: \"M3 16v3a2 2 0 0 0 2 2h3\", key: \"wsl5sc\" }],\n [\"path\", { d: \"M16 21h3a2 2 0 0 0 2-2v-3\", key: \"18trek\" }]\n];\nconst Maximize = createLucideIcon(\"maximize\", __iconNode);\n\nexport { __iconNode, Maximize as default };\n//# sourceMappingURL=maximize.js.map\n","/**\n * @license lucide-react v0.547.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M16 7h6v6\", key: \"box55l\" }],\n [\"path\", { d: \"m22 7-8.5 8.5-5-5L2 17\", key: \"1t1m79\" }]\n];\nconst TrendingUp = createLucideIcon(\"trending-up\", __iconNode);\n\nexport { __iconNode, TrendingUp as default };\n//# sourceMappingURL=trending-up.js.map\n","/**\n * Select Component Variants\n * CVA-based styling for select components\n */\n\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nexport const selectVariants = cva(\n [\n // Base styles\n \"flex w-full rounded-md border bg-background px-3 py-2\",\n \"text-base transition-colors\",\n \"appearance-none cursor-pointer\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n ],\n {\n variants: {\n variant: {\n default: [\"border-input\", \"focus-visible:ring-primary\"],\n error: [\"border-destructive\", \"focus-visible:ring-destructive\"],\n success: [\"border-success\", \"focus-visible:ring-success\"],\n },\n selectSize: {\n sm: \"h-8 text-sm\",\n default: \"h-10\",\n lg: \"h-12 text-lg\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n selectSize: \"default\",\n },\n },\n);\n\nexport const selectLabelVariants = cva(\n [\"block text-sm font-medium mb-1.5\", \"transition-colors\"],\n {\n variants: {\n variant: {\n default: \"text-foreground\",\n error: \"text-destructive\",\n success: \"text-success\",\n },\n required: {\n true: \"after:content-['*'] after:ml-0.5 after:text-destructive\",\n false: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n required: false,\n },\n },\n);\n\nexport const selectHelperTextVariants = cva(\"mt-1.5 text-sm\", {\n variants: {\n variant: {\n default: \"text-muted-foreground\",\n error: \"text-destructive\",\n success: \"text-success\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n\nexport type SelectVariantProps = VariantProps<typeof selectVariants>;\nexport type SelectLabelVariantProps = VariantProps<typeof selectLabelVariants>;\nexport type SelectHelperTextVariantProps = VariantProps<\n typeof selectHelperTextVariants\n>;\n","/**\n * Select Component\n * A reusable form select/dropdown component with label and helper text support\n */\n\nimport * as React from \"react\";\nimport { ChevronDown } from \"lucide-react\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport {\n selectVariants,\n selectLabelVariants,\n selectHelperTextVariants,\n type SelectVariantProps,\n} from \"../lib/select-variants\";\n\nexport interface SelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps\n extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, \"size\">,\n SelectVariantProps {\n /** Label text for the select */\n label?: string;\n /** Helper text displayed below the select */\n helperText?: string;\n /** Error message (overrides helperText when present) */\n error?: string;\n /** Whether the select is required */\n required?: boolean;\n /** Select options */\n options: SelectOption[];\n /** Placeholder option text */\n placeholder?: string;\n /** Container class name */\n containerClassName?: string;\n /** Label class name */\n labelClassName?: string;\n}\n\nconst Select = React.forwardRef<HTMLSelectElement, SelectProps>(\n (\n {\n className,\n containerClassName,\n labelClassName,\n variant,\n selectSize,\n label,\n helperText,\n error,\n required,\n options,\n placeholder,\n id,\n ...props\n },\n ref,\n ) => {\n const generatedId = React.useId();\n const selectId = id || generatedId;\n const helperTextId = `${selectId}-helper`;\n const errorId = `${selectId}-error`;\n\n const currentVariant = error ? \"error\" : variant;\n const displayHelperText = error || helperText;\n\n return (\n <div className={cn(\"w-full\", containerClassName)}>\n {label && (\n <label\n htmlFor={selectId}\n className={cn(\n selectLabelVariants({ variant: currentVariant, required }),\n labelClassName,\n )}\n >\n {label}\n </label>\n )}\n <div className=\"relative\">\n <select\n id={selectId}\n ref={ref}\n className={cn(\n selectVariants({ variant: currentVariant, selectSize }),\n \"pr-10\", // Space for chevron icon\n className,\n )}\n aria-invalid={error ? \"true\" : \"false\"}\n aria-describedby={\n displayHelperText ? (error ? errorId : helperTextId) : undefined\n }\n {...props}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {options.map((option) => (\n <option\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n >\n {option.label}\n </option>\n ))}\n </select>\n <div className=\"pointer-events-none absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground\">\n <ChevronDown className=\"h-4 w-4\" />\n </div>\n </div>\n {displayHelperText && (\n <p\n id={error ? errorId : helperTextId}\n className={selectHelperTextVariants({ variant: currentVariant })}\n role={error ? \"alert\" : undefined}\n >\n {displayHelperText}\n </p>\n )}\n </div>\n );\n },\n);\n\nSelect.displayName = \"Select\";\n\nexport { Select };\n","/**\n * Donut Chart Utilities\n * Helper functions for SVG donut chart rendering\n */\n\nexport interface ChartSegment {\n /** Segment label */\n label: string;\n /** Segment value */\n value: number;\n /** Segment color (CSS color string) */\n color: string;\n}\n\nexport interface DonutSegmentPath {\n /** SVG path string for the segment */\n path: string;\n /** Segment data */\n segment: ChartSegment;\n}\n\n/**\n * Calculate the SVG path for a donut chart segment\n */\nexport function calculateDonutSegmentPath(\n startAngle: number,\n endAngle: number,\n radius: number,\n innerRadius: number,\n centerX: number,\n centerY: number,\n): string {\n const startRadians = ((startAngle - 90) * Math.PI) / 180;\n const endRadians = ((endAngle - 90) * Math.PI) / 180;\n\n // Calculate outer arc points\n const x1 = centerX + radius * Math.cos(startRadians);\n const y1 = centerY + radius * Math.sin(startRadians);\n const x2 = centerX + radius * Math.cos(endRadians);\n const y2 = centerY + radius * Math.sin(endRadians);\n\n // Calculate inner arc points\n const x3 = centerX + innerRadius * Math.cos(endRadians);\n const y3 = centerY + innerRadius * Math.sin(endRadians);\n const x4 = centerX + innerRadius * Math.cos(startRadians);\n const y4 = centerY + innerRadius * Math.sin(startRadians);\n\n // Determine if arc should be large (>180 degrees)\n const largeArcFlag = endAngle - startAngle > 180 ? 1 : 0;\n\n // Build SVG path\n const path = [\n `M ${x1} ${y1}`, // Move to start point on outer arc\n `A ${radius} ${radius} 0 ${largeArcFlag} 1 ${x2} ${y2}`, // Outer arc\n `L ${x3} ${y3}`, // Line to inner arc\n `A ${innerRadius} ${innerRadius} 0 ${largeArcFlag} 0 ${x4} ${y4}`, // Inner arc (reverse)\n \"Z\", // Close path\n ].join(\" \");\n\n return path;\n}\n\n/**\n * Convert chart segments to SVG paths with calculated angles\n */\nexport function generateDonutPaths(\n segments: ChartSegment[],\n radius: number,\n innerRadius: number,\n centerX: number,\n centerY: number,\n): DonutSegmentPath[] {\n // Calculate total value\n const total = segments.reduce((sum, segment) => sum + segment.value, 0);\n\n if (total === 0) {\n return [];\n }\n\n let currentAngle = 0;\n const paths: DonutSegmentPath[] = [];\n\n segments.forEach((segment) => {\n const segmentAngle = (segment.value / total) * 360;\n const startAngle = currentAngle;\n const endAngle = currentAngle + segmentAngle;\n\n const path = calculateDonutSegmentPath(\n startAngle,\n endAngle,\n radius,\n innerRadius,\n centerX,\n centerY,\n );\n\n paths.push({\n path,\n segment,\n });\n\n currentAngle = endAngle;\n });\n\n return paths;\n}\n\n/**\n * Format number with thousands separator\n */\nexport function formatNumber(value: number): string {\n return new Intl.NumberFormat(\"es-MX\").format(value);\n}\n","/**\n * Donut Chart Component\n * A customizable SVG-based donut chart for data visualization\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport {\n generateDonutPaths,\n type ChartSegment,\n} from \"../lib/donut-chart-utils\";\n\nexport interface DonutChartProps {\n /** Chart segments with labels, values, and colors */\n segments: ChartSegment[];\n /** Chart width and height in pixels */\n size?: number;\n /** Inner radius ratio (0-1, relative to outer radius) */\n innerRadiusRatio?: number;\n /** Content to display in the center of the donut */\n centerContent?: React.ReactNode;\n /** Whether to show a legend */\n showLegend?: boolean;\n /** Legend position */\n legendPosition?: \"top\" | \"bottom\" | \"left\" | \"right\";\n /** Additional class name for the container */\n className?: string;\n /** Callback when a segment is clicked */\n onSegmentClick?: (segment: ChartSegment) => void;\n /** Callback when a segment is hovered */\n onSegmentHover?: (segment: ChartSegment | null) => void;\n}\n\nconst DonutChart = React.forwardRef<HTMLDivElement, DonutChartProps>(\n (\n {\n segments,\n size = 300,\n innerRadiusRatio = 0.6,\n centerContent,\n showLegend = false,\n legendPosition = \"bottom\",\n className,\n onSegmentClick,\n onSegmentHover,\n },\n ref,\n ) => {\n const [hoveredSegment, setHoveredSegment] =\n React.useState<ChartSegment | null>(null);\n\n const centerX = size / 2;\n const centerY = size / 2;\n const strokeWidth = 2;\n const radius = size / 2 - strokeWidth;\n const innerRadius = radius * innerRadiusRatio;\n\n const paths = generateDonutPaths(\n segments,\n radius,\n innerRadius,\n centerX,\n centerY,\n );\n\n const handleSegmentHover = (segment: ChartSegment | null) => {\n setHoveredSegment(segment);\n onSegmentHover?.(segment);\n };\n\n const isFlexRow = legendPosition === \"left\" || legendPosition === \"right\";\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex gap-4\",\n isFlexRow ? \"flex-row items-center\" : \"flex-col items-center\",\n legendPosition === \"right\" && \"flex-row-reverse\",\n legendPosition === \"top\" && \"flex-col-reverse\",\n className,\n )}\n >\n <div\n className=\"relative inline-block\"\n style={{ width: size, height: size }}\n >\n <svg width={size} height={size} viewBox={`0 0 ${size} ${size}`}>\n {paths.map(({ path, segment }, index) => (\n <path\n key={`${segment.label}-${index}`}\n d={path}\n fill={segment.color}\n stroke=\"white\"\n strokeWidth={strokeWidth}\n className={cn(\n \"transition-opacity duration-200\",\n hoveredSegment && hoveredSegment !== segment && \"opacity-50\",\n onSegmentClick && \"cursor-pointer\",\n )}\n onMouseEnter={() => handleSegmentHover(segment)}\n onMouseLeave={() => handleSegmentHover(null)}\n onClick={() => onSegmentClick?.(segment)}\n />\n ))}\n </svg>\n {centerContent && (\n <div\n className=\"absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 text-center\"\n style={{ maxWidth: innerRadius * 1.8 }}\n >\n {centerContent}\n </div>\n )}\n </div>\n {showLegend && (\n <div\n className={cn(\n \"flex gap-2\",\n isFlexRow ? \"flex-col\" : \"flex-row flex-wrap justify-center\",\n )}\n >\n {segments.map((segment, index) => (\n <div\n key={`${segment.label}-${index}`}\n className={cn(\n \"flex items-center gap-2 text-sm transition-opacity duration-200\",\n hoveredSegment && hoveredSegment !== segment && \"opacity-50\",\n onSegmentClick && \"cursor-pointer\",\n )}\n onMouseEnter={() => handleSegmentHover(segment)}\n onMouseLeave={() => handleSegmentHover(null)}\n onClick={() => onSegmentClick?.(segment)}\n >\n <div\n className=\"h-3 w-3 rounded-sm flex-shrink-0\"\n style={{ backgroundColor: segment.color }}\n />\n <span className=\"text-muted-foreground\">{segment.label}</span>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n },\n);\n\nDonutChart.displayName = \"DonutChart\";\n\nexport { DonutChart };\n","/**\n * Entity utility functions\n * @module entities/entity/lib\n */\n\nimport type { Entity, EntitySort } from '../model/types';\n\n/**\n * Filter entities by category\n */\nexport function filterEntitiesByCategory(\n entities: Entity[],\n categoryId: string | null\n): Entity[] {\n if (!categoryId || categoryId === 'all') {\n return entities;\n }\n return entities.filter((entity) => entity.categoryId === categoryId);\n}\n\n/**\n * Sort entities by column and direction\n */\nexport function sortEntities(entities: Entity[], sort: EntitySort): Entity[] {\n const sorted = [...entities];\n\n sorted.sort((a, b) => {\n let aValue: string | number = '';\n let bValue: string | number = '';\n\n if (sort.column === 'title') {\n aValue = a.title.toLowerCase();\n bValue = b.title.toLowerCase();\n } else if (sort.column === 'metric') {\n // Extract numeric value from metric (e.g., \"29km\" -> 29)\n aValue = parseMetricValue(a.metricValue);\n bValue = parseMetricValue(b.metricValue);\n }\n\n if (aValue < bValue) return sort.direction === 'asc' ? -1 : 1;\n if (aValue > bValue) return sort.direction === 'asc' ? 1 : -1;\n return 0;\n });\n\n return sorted;\n}\n\n/**\n * Parse numeric value from metric string\n * Examples: \"29km\" -> 29, \"$99\" -> 99, \"4.5★\" -> 4.5\n */\nfunction parseMetricValue(metricValue?: string): number {\n if (!metricValue) return 0;\n const match = metricValue.match(/[\\d.]+/);\n return match ? parseFloat(match[0]) : 0;\n}\n\n/**\n * Count entities by category\n */\nexport function countEntitiesByCategory(\n entities: Entity[],\n categoryId: string\n): number {\n if (categoryId === 'all') return entities.length;\n return entities.filter((entity) => entity.categoryId === categoryId).length;\n}\n","/**\n * Entity filtering hook\n * @module features/entity-filtering\n */\n\nimport { useState, useMemo, useCallback } from \"react\";\nimport type { Entity, EntityCategory, EntitySort } from \"../../../entities/entity\";\nimport {\n filterEntitiesByCategory,\n sortEntities,\n countEntitiesByCategory,\n} from \"../../../entities/entity\";\n\nexport interface EntityFilterOptions {\n /** Initial category filter */\n initialCategory?: string | null;\n /** Initial sort configuration */\n initialSort?: EntitySort;\n /** Enable search functionality */\n enableSearch?: boolean;\n}\n\nexport interface UseEntityFilterReturn {\n /** Currently active category filter */\n activeCategory: string | null;\n /** Set active category */\n setActiveCategory: (categoryId: string | null) => void;\n /** Current sort configuration */\n sort: EntitySort | null;\n /** Set sort configuration */\n setSort: (sort: EntitySort | null) => void;\n /** Search query */\n searchQuery: string;\n /** Set search query */\n setSearchQuery: (query: string) => void;\n /** Filtered entities */\n filteredEntities: Entity[];\n /** Count entities by category */\n getCategoryCount: (categoryId: string) => number;\n /** Reset all filters */\n resetFilters: () => void;\n}\n\n/**\n * Hook for managing entity filtering, sorting, and search\n */\nexport function useEntityFilter(\n entities: Entity[],\n _categories: EntityCategory[],\n options: EntityFilterOptions = {}\n): UseEntityFilterReturn {\n const {\n initialCategory = null,\n initialSort = null,\n enableSearch = false,\n } = options;\n\n const [activeCategory, setActiveCategory] = useState<string | null>(\n initialCategory\n );\n const [sort, setSort] = useState<EntitySort | null>(initialSort);\n const [searchQuery, setSearchQuery] = useState(\"\");\n\n // Filter by category\n const categoryFilteredEntities = useMemo(() => {\n return filterEntitiesByCategory(entities, activeCategory);\n }, [entities, activeCategory]);\n\n // Filter by search query\n const searchFilteredEntities = useMemo(() => {\n if (!enableSearch || !searchQuery.trim()) {\n return categoryFilteredEntities;\n }\n\n const query = searchQuery.toLowerCase();\n return categoryFilteredEntities.filter(\n (entity) =>\n entity.title.toLowerCase().includes(query) ||\n entity.subtitle?.toLowerCase().includes(query)\n );\n }, [categoryFilteredEntities, searchQuery, enableSearch]);\n\n // Sort entities\n const filteredEntities = useMemo(() => {\n if (!sort) {\n return searchFilteredEntities;\n }\n return sortEntities(searchFilteredEntities, sort);\n }, [searchFilteredEntities, sort]);\n\n // Count entities by category\n const getCategoryCount = useCallback(\n (categoryId: string) => {\n return countEntitiesByCategory(entities, categoryId);\n },\n [entities]\n );\n\n // Reset all filters\n const resetFilters = useCallback(() => {\n setActiveCategory(initialCategory);\n setSort(initialSort);\n setSearchQuery(\"\");\n }, [initialCategory, initialSort]);\n\n return {\n activeCategory,\n setActiveCategory,\n sort,\n setSort,\n searchQuery,\n setSearchQuery,\n filteredEntities,\n getCategoryCount,\n resetFilters,\n };\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\n\nexport const chipVariants = cva(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-full text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n outline:\n \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n selected:\n \"bg-primary text-primary-foreground hover:bg-primary/90 ring-2 ring-primary ring-offset-2\",\n },\n size: {\n default: \"h-8 px-4 py-1.5\",\n sm: \"h-7 px-3 py-1 text-xs\",\n lg: \"h-9 px-5 py-2\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\nexport type ChipVariantProps = VariantProps<typeof chipVariants>;\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { chipVariants, type ChipVariantProps } from \"./chip-variants\";\n\nexport interface ChipProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n ChipVariantProps {\n /** Icon to display before the label */\n icon?: string | React.ReactNode;\n /** Whether the chip is selected/active */\n selected?: boolean;\n /** Whether the chip can be dismissed */\n dismissible?: boolean;\n /** Callback when chip is dismissed */\n onDismiss?: () => void;\n}\n\nconst Chip = React.forwardRef<HTMLButtonElement, ChipProps>(\n (\n {\n className,\n variant,\n size,\n icon,\n selected,\n dismissible,\n onDismiss,\n children,\n disabled,\n ...props\n },\n ref\n ) => {\n const effectiveVariant = selected ? \"selected\" : variant;\n\n return (\n <button\n type=\"button\"\n className={cn(chipVariants({ variant: effectiveVariant, size, className }))}\n ref={ref}\n disabled={disabled}\n aria-disabled={disabled ? \"true\" : undefined}\n aria-pressed={selected ? \"true\" : \"false\"}\n {...props}\n >\n {icon && (\n <span className=\"mr-1.5 inline-flex items-center\" aria-hidden=\"true\">\n {typeof icon === \"string\" ? icon : icon}\n </span>\n )}\n <span>{children}</span>\n {dismissible && onDismiss && (\n <button\n type=\"button\"\n className=\"ml-1.5 inline-flex items-center hover:opacity-70\"\n onClick={(e) => {\n e.stopPropagation();\n onDismiss();\n }}\n aria-label=\"Remove\"\n >\n ×\n </button>\n )}\n </button>\n );\n }\n);\nChip.displayName = \"Chip\";\n\nexport { Chip };\n","/**\n * Category Chips Component\n * Reusable category filter UI\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport { Chip } from \"../../../shared/ui/chip\";\nimport type { EntityCategory } from \"../../../entities/entity\";\n\nexport interface CategoryChipsProps {\n /** Available categories */\n categories: EntityCategory[];\n /** Currently active category */\n activeCategory?: string | null;\n /** Callback when category changes */\n onCategoryChange: (categoryId: string | null) => void;\n /** Show count badges on chips */\n showCount?: boolean;\n /** Function to get count for each category */\n getCategoryCount?: (categoryId: string) => number;\n /** CSS class name */\n className?: string;\n}\n\nconst CategoryChips = React.forwardRef<HTMLDivElement, CategoryChipsProps>(\n (\n {\n categories,\n activeCategory,\n onCategoryChange,\n showCount,\n getCategoryCount,\n className,\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n role=\"tablist\"\n aria-label=\"Filter by category\"\n className={cn(\n \"flex flex-wrap gap-2 overflow-x-auto pb-2\",\n className\n )}\n >\n {categories.map((category) => {\n const isActive = activeCategory === category.id;\n const count = showCount && getCategoryCount\n ? getCategoryCount(category.id)\n : undefined;\n\n return (\n <Chip\n key={category.id}\n role=\"tab\"\n aria-selected={isActive}\n aria-controls={`entities-panel-${category.id}`}\n selected={isActive}\n variant={isActive ? \"selected\" : \"outline\"}\n icon={\n typeof category.icon === \"string\"\n ? category.icon\n : category.icon\n ? React.createElement(category.icon)\n : undefined\n }\n onClick={() => onCategoryChange(isActive ? null : category.id)}\n >\n {category.label}\n {count !== undefined && (\n <span className=\"ml-1.5 opacity-70\">({count})</span>\n )}\n </Chip>\n );\n })}\n </div>\n );\n }\n);\nCategoryChips.displayName = \"CategoryChips\";\n\nexport { CategoryChips };\n","/**\n * PropertyCard Widget\n * @layer widgets\n * @description Composite component for displaying property cards\n */\nimport React, { useState } from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport {\n Heart,\n Bed,\n Bath,\n Car,\n Maximize,\n ChevronLeft,\n ChevronRight,\n} from \"lucide-react\";\nimport { Button } from \"../../../features/button\";\nimport type {\n Property,\n PropertyTransactionType,\n TransactionType,\n BadgeVariant,\n} from \"../../../entities/property\";\n\nexport interface PropertyCardProps {\n property: Property;\n className?: string;\n onLike?: (propertyId: string, isLiked: boolean) => void;\n onImageClick?: (imageIndex: number, propertyId: string) => void;\n showLikeButton?: boolean;\n showNavigation?: boolean;\n imageAspectRatio?: '4/3' | '16/9' | '1/1';\n}\n\nconst getTransactionBadgeClasses = (\n transaction: PropertyTransactionType\n): string => {\n // Use the variant if provided, otherwise map from type\n const variant = transaction.variant || getDefaultVariant(transaction.type);\n\n switch (variant) {\n case \"primary\":\n return \"bg-primary text-primary-foreground\";\n case \"secondary\":\n return \"bg-secondary text-secondary-foreground\";\n case \"success\":\n return \"bg-success text-success-foreground\";\n case \"warning\":\n return \"bg-warning text-warning-foreground\";\n case \"error\":\n return \"bg-error text-error-foreground\";\n case \"info\":\n return \"bg-info text-info-foreground\";\n default:\n return \"bg-secondary text-secondary-foreground\";\n }\n};\n\nconst getDefaultVariant = (type: TransactionType): BadgeVariant => {\n switch (type) {\n case \"Venta\":\n return \"primary\";\n case \"Desarrollo\":\n return \"success\";\n case \"Renta\":\n return \"info\";\n case \"Remate\":\n return \"warning\";\n default:\n return \"secondary\";\n }\n};\n\nexport const PropertyCard: React.FC<PropertyCardProps> = ({\n property,\n className,\n onLike,\n onImageClick,\n showLikeButton = true,\n showNavigation = true,\n}) => {\n const [currentImageIndex, setCurrentImageIndex] = useState(0);\n const [isLiked, setIsLiked] = useState(false);\n\n const nextImage = () => {\n setCurrentImageIndex((prev) =>\n prev === property.images.length - 1 ? 0 : prev + 1\n );\n };\n\n const prevImage = () => {\n setCurrentImageIndex((prev) =>\n prev === 0 ? property.images.length - 1 : prev - 1\n );\n };\n\n const handleLike = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n const newLikedState = !isLiked;\n setIsLiked(newLikedState);\n onLike?.(property.id, newLikedState);\n };\n\n const handleImageClick = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n onImageClick?.(currentImageIndex, property.id);\n };\n\n const formatPrice = (amount: number | undefined, currency: string | undefined) => {\n if (!amount || !currency) return \"Price not available\";\n return `$${amount.toLocaleString()} ${currency}`;\n };\n\n const cardClasses = cn(\n \"relative overflow-hidden bg-card rounded-2xl shadow-md transition-all duration-300 ease-out cursor-pointer hover:-translate-y-1 hover:shadow-xl\",\n className\n );\n\n const imageContainerClasses = cn(\"relative overflow-hidden\");\n\n const imageClasses = cn(\n \"w-full h-full object-cover transition-transform duration-300 hover:scale-105\"\n );\n\n const badgesClasses = cn(\"absolute top-4 left-4 flex flex-wrap gap-1 z-10\");\n\n const badgeClasses = cn(\n \"px-2 py-1 rounded-lg text-xs font-medium uppercase tracking-wide\"\n );\n\n const likeButtonClasses = cn(\n \"absolute top-4 right-4 z-10 bg-background/90 backdrop-blur-sm border border-border/20 text-foreground rounded-full w-10 h-10 flex items-center justify-center cursor-pointer transition-all duration-200 hover:bg-background hover:scale-105\"\n );\n\n const navButtonClasses = cn(\n \"absolute top-1/2 -translate-y-1/2 z-10 bg-background/90 backdrop-blur-sm border border-border/20 text-foreground w-10 h-10 rounded-full p-0 flex items-center justify-center cursor-pointer transition-all duration-200 hover:bg-background hover:scale-105\"\n );\n\n const dotsClasses = cn(\n \"absolute bottom-4 left-1/2 -translate-x-1/2 flex gap-1 z-10\"\n );\n\n const dotClasses = cn(\n \"w-2 h-2 rounded-full border-none cursor-pointer transition-all duration-200 hover:scale-120\"\n );\n\n const infoClasses = cn(\"p-6\");\n\n const titleClasses = cn(\n \"text-lg font-bold text-foreground mb-2 line-clamp-2 leading-tight\"\n );\n\n const priceClasses = cn(\"text-xl font-bold text-primary mb-2\");\n\n const locationClasses = cn(\"text-base text-muted-foreground mb-4\");\n\n const featuresClasses = cn(\"flex items-center gap-4 mb-4\");\n\n const featureItemClasses = cn(\n \"flex items-center gap-1 text-sm text-muted-foreground\"\n );\n\n const amenitiesClasses = cn(\"text-sm text-muted-foreground line-clamp-2\");\n\n const CardContent = (\n <div className={cardClasses}>\n {/* Image Carousel */}\n <div className={cn(imageContainerClasses, \"aspect-[4/3] bg-red-500\")}>\n <img\n src={property.images[currentImageIndex]}\n alt={property.title}\n className={imageClasses}\n onClick={onImageClick ? handleImageClick : undefined}\n />\n\n {/* Transaction Type Badges */}\n <div className={badgesClasses}>\n {property.transactionTypes.map((transaction, index) => (\n <span\n key={index}\n className={cn(\n badgeClasses,\n getTransactionBadgeClasses(transaction)\n )}\n >\n {transaction.type}\n </span>\n ))}\n </div>\n\n {/* Like Button */}\n {showLikeButton && (\n <button\n onClick={handleLike}\n className={likeButtonClasses}\n aria-label={isLiked ? \"Unlike property\" : \"Like property\"}\n >\n <Heart\n size={20}\n fill={isLiked ? \"currentColor\" : \"none\"}\n className={isLiked ? \"text-destructive\" : \"\"}\n />\n </button>\n )}\n\n {/* Carousel Navigation */}\n {showNavigation && property.images.length > 1 && (\n <>\n <Button\n onClick={(e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n prevImage();\n }}\n className={cn(navButtonClasses, \"left-4\")}\n aria-label=\"Previous image\"\n >\n <ChevronLeft size={20} />\n </Button>\n <Button\n onClick={(e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n nextImage();\n }}\n className={cn(navButtonClasses, \"right-4\")}\n aria-label=\"Next image\"\n >\n <ChevronRight size={20} />\n </Button>\n\n {/* Dots Indicator */}\n <div className={dotsClasses}>\n {property.images.map((_, index) => (\n <button\n key={index}\n className={cn(\n dotClasses,\n index === currentImageIndex\n ? \"bg-background\"\n : \"bg-background/50\"\n )}\n onClick={(e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setCurrentImageIndex(index);\n }}\n aria-label={`Go to image ${index + 1}`}\n aria-current={index === currentImageIndex}\n />\n ))}\n </div>\n </>\n )}\n </div>\n\n {/* Property Information */}\n <div className={infoClasses}>\n {/* Title */}\n <h3 className={titleClasses}>{property.title}</h3>\n\n {/* Price */}\n <p className={priceClasses}>\n {formatPrice(property.price?.amount, property.price?.currency)}\n </p>\n\n {/* Location */}\n <p className={locationClasses}>\n {property.location.city}, {property.location.state}\n </p>\n\n {/* Features */}\n <div className={featuresClasses}>\n <div className={featureItemClasses}>\n <Bed size={16} />\n <span>{property.features.bedrooms}</span>\n </div>\n <div className={featureItemClasses}>\n <Bath size={16} />\n <span>{property.features.bathrooms}</span>\n </div>\n <div className={featureItemClasses}>\n <Car size={16} />\n <span>{property.features.parking}</span>\n </div>\n <div className={featureItemClasses}>\n <Maximize size={16} />\n <span>{property.features.area} m²</span>\n </div>\n </div>\n\n {/* Amenities */}\n {property.amenities.length > 0 && (\n <p className={amenitiesClasses}>{property.amenities.join(\", \")}</p>\n )}\n </div>\n </div>\n );\n\n if (property.href) {\n return (\n <a href={property.href} className=\"no-underline text-inherit\">\n {CardContent}\n </a>\n );\n }\n\n return CardContent;\n};\n","/**\n * PropertyGallery Widget\n * @layer widgets\n * @description Image gallery widget for property listings\n */\nimport React from \"react\";\nimport { Grid } from \"lucide-react\";\nimport { cn } from \"../../../shared/lib/utils\";\n\nexport interface PropertyGalleryProps {\n images: string[];\n transactionType?: string;\n totalPhotos?: number;\n onViewAllClick?: () => void;\n onImageClick?: (index: number) => void;\n className?: string;\n}\n\nexport const PropertyGallery = React.forwardRef<\n HTMLDivElement,\n PropertyGalleryProps\n>(\n (\n {\n images,\n transactionType,\n totalPhotos,\n onViewAllClick,\n onImageClick,\n className,\n },\n ref\n ) => {\n // Ensure we have at least 5 images to display (or show available ones)\n const displayImages = images.slice(0, 5);\n\n const handleImageClick = (index: number) => {\n onImageClick?.(index);\n };\n\n return (\n <div\n ref={ref}\n className={cn(\"w-full h-full grid grid-cols-2 gap-2\", className)}\n >\n {/* Main large image - left side, spans 2 rows */}\n <div className=\"relative col-span-1 row-span-2 rounded-2xl overflow-hidden group cursor-pointer\">\n {displayImages[0] ? (\n <>\n <img\n src={displayImages[0]}\n alt=\"Property main view\"\n className=\"w-full h-full object-cover transition-transform duration-300 group-hover:scale-105\"\n onClick={() => handleImageClick(0)}\n />\n {/* Transaction Type Tag */}\n {transactionType && (\n <div className=\"absolute top-4 left-4 bg-white rounded-full px-4 py-2 shadow-md\">\n <span className=\"text-sm font-medium text-foreground\">\n {transactionType}\n </span>\n </div>\n )}\n </>\n ) : (\n <div className=\"w-full h-full bg-muted flex items-center justify-center\">\n <span className=\"text-muted-foreground\">No image</span>\n </div>\n )}\n </div>\n\n {/* Top right image */}\n <div className=\"relative col-span-1 row-span-1 rounded-2xl overflow-hidden group cursor-pointer\">\n {displayImages[1] ? (\n <img\n src={displayImages[1]}\n alt=\"Property view 2\"\n className=\"w-full h-full object-cover transition-transform duration-300 group-hover:scale-105\"\n onClick={() => handleImageClick(1)}\n />\n ) : (\n <div className=\"w-full h-full bg-muted\" />\n )}\n </div>\n\n {/* Middle right image */}\n <div className=\"relative col-span-1 row-span-1 rounded-2xl overflow-hidden group cursor-pointer\">\n {displayImages[2] ? (\n <img\n src={displayImages[2]}\n alt=\"Property view 3\"\n className=\"w-full h-full object-cover transition-transform duration-300 group-hover:scale-105\"\n onClick={() => handleImageClick(2)}\n />\n ) : (\n <div className=\"w-full h-full bg-muted\" />\n )}\n </div>\n\n {/* Bottom left (of right side) image */}\n <div className=\"relative col-span-1 row-span-1 rounded-2xl overflow-hidden group cursor-pointer\">\n {displayImages[3] ? (\n <img\n src={displayImages[3]}\n alt=\"Property view 4\"\n className=\"w-full h-full object-cover transition-transform duration-300 group-hover:scale-105\"\n onClick={() => handleImageClick(3)}\n />\n ) : (\n <div className=\"w-full h-full bg-muted\" />\n )}\n </div>\n\n {/* Bottom right image with \"View All Photos\" button */}\n <div className=\"relative col-span-1 row-span-1 rounded-2xl overflow-hidden group cursor-pointer\">\n {displayImages[4] ? (\n <>\n <img\n src={displayImages[4]}\n alt=\"Property view 5\"\n className=\"w-full h-full object-cover transition-transform duration-300 group-hover:scale-105\"\n onClick={() => handleImageClick(4)}\n />\n {/* View All Photos Button */}\n {totalPhotos && totalPhotos > 5 && (\n <div className=\"absolute bottom-4 right-4\">\n <button\n onClick={(e) => {\n e.stopPropagation();\n onViewAllClick?.();\n }}\n className=\"flex items-center gap-2 bg-white rounded-full px-4 py-2 shadow-md hover:shadow-lg transition-all duration-200 hover:scale-105\"\n >\n <Grid className=\"w-4 h-4 text-foreground\" />\n <span className=\"text-sm font-medium text-foreground\">\n Ver las {totalPhotos} fotos\n </span>\n </button>\n </div>\n )}\n </>\n ) : (\n <div className=\"w-full h-full bg-muted\" />\n )}\n </div>\n </div>\n );\n }\n);\n\nPropertyGallery.displayName = \"PropertyGallery\";\n","/**\n * EntityDirectory Header Subcomponent\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport { Text } from \"../../../features/text\";\n\nexport interface EntityDirectoryHeaderProps {\n /** Header title */\n title: string;\n /** Optional description */\n description?: string;\n /** CSS class name */\n className?: string;\n}\n\nconst EntityDirectoryHeader = React.forwardRef<\n HTMLDivElement,\n EntityDirectoryHeaderProps\n>(({ title, description, className }, ref) => {\n return (\n <div ref={ref} className={cn(\"space-y-1.5\", className)}>\n <Text variant=\"h2\" className=\"font-bold\">\n {title}\n </Text>\n {description && (\n <Text variant=\"body\" className=\"text-muted-foreground\">\n {description}\n </Text>\n )}\n </div>\n );\n});\nEntityDirectoryHeader.displayName = \"EntityDirectoryHeader\";\n\nexport { EntityDirectoryHeader };\n","/**\n * EntityDirectory List Item Subcomponent\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport { Text } from \"../../../features/text\";\nimport { Chip } from \"../../../shared/ui/chip\";\nimport type { Entity, EntityCategory } from \"../../../entities/entity\";\n\nexport interface EntityDirectoryListItemProps {\n /** Entity to display */\n entity: Entity;\n /** All categories for lookup */\n categories?: EntityCategory[];\n /** Show icon column */\n showIcon?: boolean;\n /** Show category badge */\n showCategoryBadge?: boolean;\n /** Show metric column */\n showMetric?: boolean;\n /** Compact mode */\n compact?: boolean;\n /** CSS class name */\n className?: string;\n}\n\nconst EntityDirectoryListItem = React.forwardRef<\n HTMLDivElement,\n EntityDirectoryListItemProps\n>(\n (\n {\n entity,\n categories,\n showIcon = true,\n showCategoryBadge = true,\n showMetric = true,\n compact = false,\n className,\n },\n ref\n ) => {\n const category = categories?.find((cat) => cat.id === entity.categoryId);\n const isClickable = !!entity.onClick;\n\n const handleClick = () => {\n if (entity.onClick && !entity.disabled) {\n entity.onClick();\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (isClickable && (e.key === \"Enter\" || e.key === \" \")) {\n e.preventDefault();\n handleClick();\n }\n };\n\n return (\n <div\n ref={ref}\n role={isClickable ? \"button\" : \"listitem\"}\n tabIndex={isClickable && !entity.disabled ? 0 : undefined}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n aria-disabled={entity.disabled}\n className={cn(\n \"flex items-center gap-4 border-b border-border transition-colors\",\n compact ? \"p-3\" : \"p-4\",\n isClickable &&\n !entity.disabled &&\n \"cursor-pointer hover:bg-accent/50 focus-visible:bg-accent/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n entity.disabled && \"opacity-50 cursor-not-allowed\",\n className\n )}\n >\n {/* Icon */}\n {showIcon && (\n <div\n className={cn(\n \"flex-shrink-0 flex items-center justify-center bg-muted rounded-full\",\n compact ? \"w-8 h-8 text-lg\" : \"w-10 h-10 text-xl\"\n )}\n aria-hidden=\"true\"\n >\n {typeof entity.icon === \"string\" ? (\n <span>{entity.icon}</span>\n ) : entity.icon ? (\n React.createElement(entity.icon)\n ) : (\n <span className=\"text-muted-foreground\">•</span>\n )}\n </div>\n )}\n\n {/* Title and Subtitle */}\n <div className=\"flex-1 min-w-0\">\n <Text\n variant={compact ? \"body-sm\" : \"body\"}\n className=\"font-semibold truncate\"\n >\n {entity.title}\n </Text>\n {entity.subtitle && (\n <Text\n variant={compact ? \"caption\" : \"body-sm\"}\n className=\"text-muted-foreground truncate\"\n >\n {entity.subtitle}\n </Text>\n )}\n </div>\n\n {/* Category Badge */}\n {showCategoryBadge && category && (\n <Chip\n variant=\"secondary\"\n size={compact ? \"sm\" : \"default\"}\n className=\"flex-shrink-0 bg-foreground text-background hover:bg-foreground/90\"\n aria-label={`Category: ${category.label}`}\n >\n {category.label}\n </Chip>\n )}\n\n {/* Metric */}\n {showMetric && entity.metricValue && (\n <div className=\"flex-shrink-0 text-right min-w-[4rem]\">\n <Text\n variant={compact ? \"body-sm\" : \"body\"}\n className=\"font-medium\"\n >\n {entity.metricValue}\n </Text>\n {entity.metricLabel && (\n <Text variant=\"caption\" className=\"text-muted-foreground\">\n {entity.metricLabel}\n </Text>\n )}\n </div>\n )}\n </div>\n );\n }\n);\nEntityDirectoryListItem.displayName = \"EntityDirectoryListItem\";\n\nexport { EntityDirectoryListItem };\n","/**\n * EntityDirectory Table Header Subcomponent\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport type { EntitySort } from \"../../../entities/entity\";\n\nexport interface TableHeaderColumn {\n /** Column key */\n key: \"title\" | \"category\" | \"metric\";\n /** Column label */\n label: string;\n /** Is sortable */\n sortable?: boolean;\n /** Width */\n width?: string;\n /** Alignment */\n align?: \"left\" | \"center\" | \"right\";\n}\n\nexport interface EntityDirectoryTableHeaderProps {\n /** Columns to display */\n columns: TableHeaderColumn[];\n /** Show icon column */\n showIcon?: boolean;\n /** Current sort state */\n sort?: EntitySort | null;\n /** Sort change callback */\n onSortChange?: (sort: EntitySort) => void;\n /** Compact mode */\n compact?: boolean;\n /** CSS class name */\n className?: string;\n}\n\nconst EntityDirectoryTableHeader = React.forwardRef<\n HTMLDivElement,\n EntityDirectoryTableHeaderProps\n>(({ columns, showIcon, sort, onSortChange, compact, className }, ref) => {\n const handleSort = (columnKey: \"title\" | \"metric\") => {\n if (!onSortChange) return;\n\n const newDirection =\n sort?.column === columnKey && sort?.direction === \"asc\" ? \"desc\" : \"asc\";\n\n onSortChange({\n column: columnKey,\n direction: newDirection,\n });\n };\n\n const handleSortClick = (columnKey: \"title\" | \"metric\") => {\n handleSort(columnKey);\n };\n\n const handleSortKeyDown = (\n e: React.KeyboardEvent,\n columnKey: \"title\" | \"metric\"\n ) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleSort(columnKey);\n }\n };\n\n const getSortIcon = (columnKey: string) => {\n if (columnKey !== \"title\" && columnKey !== \"metric\") return null;\n if (!sort || sort.column !== columnKey) {\n return (\n <span className=\"ml-1 text-muted-foreground opacity-50\" aria-hidden=\"true\">\n ⇅\n </span>\n );\n }\n\n return (\n <span className=\"ml-1\" aria-hidden=\"true\">\n {sort.direction === \"asc\" ? \"↑\" : \"↓\"}\n </span>\n );\n };\n\n return (\n <div\n ref={ref}\n role=\"row\"\n className={cn(\n \"flex items-center gap-4 bg-background border-b border-border font-medium text-sm text-muted-foreground\",\n compact ? \"px-3 py-2\" : \"px-4 py-3\",\n className\n )}\n >\n {/* Icon column spacer */}\n {showIcon && <div className={compact ? \"w-8\" : \"w-10\"} />}\n\n {columns.map((column) => {\n const isSortable =\n column.sortable && (column.key === \"title\" || column.key === \"metric\");\n const isActive = sort?.column === column.key;\n\n return (\n <div\n key={column.key}\n role=\"columnheader\"\n aria-sort={\n isActive\n ? sort?.direction === \"asc\"\n ? \"ascending\"\n : \"descending\"\n : undefined\n }\n className={cn(\n column.key === \"title\" && \"flex-1\",\n column.key === \"category\" && \"w-40\",\n column.key === \"metric\" && \"w-24 text-right\",\n column.align === \"center\" && \"text-center\",\n column.align === \"right\" && \"text-right\",\n isSortable &&\n \"cursor-pointer hover:text-foreground transition-colors select-none\",\n isActive && \"text-foreground\"\n )}\n style={column.width ? { width: column.width } : undefined}\n onClick={\n isSortable && (column.key === \"title\" || column.key === \"metric\")\n ? () => handleSortClick(column.key as \"title\" | \"metric\")\n : undefined\n }\n tabIndex={isSortable ? 0 : undefined}\n onKeyDown={\n isSortable && (column.key === \"title\" || column.key === \"metric\")\n ? (e) => handleSortKeyDown(e, column.key as \"title\" | \"metric\")\n : undefined\n }\n >\n {column.label}\n {isSortable && getSortIcon(column.key)}\n </div>\n );\n })}\n </div>\n );\n});\nEntityDirectoryTableHeader.displayName = \"EntityDirectoryTableHeader\";\n\nexport { EntityDirectoryTableHeader };\n","/**\n * EntityDirectory List Subcomponent\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport { EntityDirectoryListItem } from \"./list-item\";\nimport { EntityDirectoryTableHeader } from \"./table-header\";\nimport type { Entity, EntityCategory, EntitySort } from \"../../../entities/entity\";\n\nexport interface EntityDirectoryListProps {\n /** Entities to display */\n entities: Entity[];\n /** All categories for lookup */\n categories?: EntityCategory[];\n /** Show icon column */\n showIcons?: boolean;\n /** Show category badges */\n showCategoryBadges?: boolean;\n /** Show metric column */\n showMetric?: boolean;\n /** Metric column label */\n metricLabel?: string;\n /** Enable sorting */\n sortable?: boolean;\n /** Current sort state */\n sort?: EntitySort | null;\n /** Sort change callback */\n onSortChange?: (sort: EntitySort) => void;\n /** Compact mode */\n compact?: boolean;\n /** Custom item renderer */\n renderItem?: (entity: Entity) => React.ReactNode;\n /** CSS class name */\n className?: string;\n}\n\nconst EntityDirectoryList = React.forwardRef<\n HTMLDivElement,\n EntityDirectoryListProps\n>(\n (\n {\n entities,\n categories,\n showIcons = true,\n showCategoryBadges = true,\n showMetric = true,\n metricLabel,\n sortable = false,\n sort,\n onSortChange,\n compact = false,\n renderItem,\n className,\n },\n ref\n ) => {\n const columns = [\n {\n key: \"title\" as const,\n label: metricLabel ? \"Nombre\" : \"Name\",\n sortable: sortable,\n },\n ...(showCategoryBadges\n ? [{ key: \"category\" as const, label: \"Categoría\", sortable: false }]\n : []),\n ...(showMetric && metricLabel\n ? [\n {\n key: \"metric\" as const,\n label: metricLabel,\n sortable: sortable,\n align: \"right\" as const,\n },\n ]\n : []),\n ];\n\n return (\n <div\n ref={ref}\n role=\"table\"\n aria-label=\"Entity directory\"\n className={cn(\"border border-border rounded-lg overflow-hidden\", className)}\n >\n {/* Table Header */}\n <EntityDirectoryTableHeader\n columns={columns}\n showIcon={showIcons}\n sort={sort}\n onSortChange={onSortChange}\n compact={compact}\n />\n\n {/* List Items */}\n <div role=\"rowgroup\">\n {entities.map((entity) =>\n renderItem ? (\n <React.Fragment key={entity.id}>{renderItem(entity)}</React.Fragment>\n ) : (\n <EntityDirectoryListItem\n key={entity.id}\n entity={entity}\n categories={categories}\n showIcon={showIcons}\n showCategoryBadge={showCategoryBadges}\n showMetric={showMetric}\n compact={compact}\n />\n )\n )}\n </div>\n </div>\n );\n }\n);\nEntityDirectoryList.displayName = \"EntityDirectoryList\";\n\nexport { EntityDirectoryList };\n","/**\n * EntityDirectory Empty State Subcomponent\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport { Text } from \"../../../features/text\";\nimport { Button } from \"../../../features/button\";\n\nexport interface EntityDirectoryEmptyStateProps {\n /** Empty state message */\n message?: string;\n /** Optional icon */\n icon?: React.ReactNode;\n /** Optional action */\n action?: {\n label: string;\n onClick: () => void;\n };\n /** CSS class name */\n className?: string;\n}\n\nconst EntityDirectoryEmptyState = React.forwardRef<\n HTMLDivElement,\n EntityDirectoryEmptyStateProps\n>(({ message = \"No entities found\", icon, action, className }, ref) => {\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-live=\"polite\"\n className={cn(\n \"flex flex-col items-center justify-center py-12 px-4 text-center\",\n className\n )}\n >\n {icon && (\n <div className=\"mb-4 text-4xl opacity-50\" aria-hidden=\"true\">\n {icon}\n </div>\n )}\n <Text variant=\"body-lg\" className=\"text-muted-foreground mb-4\">\n {message}\n </Text>\n {action && (\n <Button variant=\"outline\" onClick={action.onClick}>\n {action.label}\n </Button>\n )}\n </div>\n );\n});\nEntityDirectoryEmptyState.displayName = \"EntityDirectoryEmptyState\";\n\nexport { EntityDirectoryEmptyState };\n","/**\n * EntityDirectory Error State Subcomponent\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport { Text } from \"../../../features/text\";\nimport { Button } from \"../../../features/button\";\n\nexport interface EntityDirectoryErrorStateProps {\n /** Error message */\n error: string | Error;\n /** Optional retry callback */\n onRetry?: () => void;\n /** CSS class name */\n className?: string;\n}\n\nconst EntityDirectoryErrorState = React.forwardRef<\n HTMLDivElement,\n EntityDirectoryErrorStateProps\n>(({ error, onRetry, className }, ref) => {\n const errorMessage = typeof error === \"string\" ? error : error.message;\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n aria-live=\"assertive\"\n className={cn(\n \"flex flex-col items-center justify-center py-12 px-4 text-center\",\n className\n )}\n >\n <div className=\"mb-4 text-4xl\" aria-hidden=\"true\">\n ⚠️\n </div>\n <Text variant=\"body-lg\" className=\"text-destructive mb-2 font-semibold\">\n Error\n </Text>\n <Text variant=\"body\" className=\"text-muted-foreground mb-4\">\n {errorMessage}\n </Text>\n {onRetry && (\n <Button variant=\"outline\" onClick={onRetry}>\n Try Again\n </Button>\n )}\n </div>\n );\n});\nEntityDirectoryErrorState.displayName = \"EntityDirectoryErrorState\";\n\nexport { EntityDirectoryErrorState };\n","/**\n * EntityDirectory Loading State Subcomponent\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\n\nexport interface EntityDirectoryLoadingStateProps {\n /** Number of skeleton rows to display */\n rows?: number;\n /** CSS class name */\n className?: string;\n}\n\nconst EntityDirectoryLoadingState = React.forwardRef<\n HTMLDivElement,\n EntityDirectoryLoadingStateProps\n>(({ rows = 5, className }, ref) => {\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-live=\"polite\"\n aria-label=\"Loading entities\"\n className={cn(\"space-y-3\", className)}\n >\n {Array.from({ length: rows }).map((_, index) => (\n <div\n key={index}\n className=\"flex items-center gap-4 p-4 border border-border rounded-lg animate-pulse\"\n >\n {/* Icon skeleton */}\n <div className=\"w-10 h-10 bg-muted rounded-full flex-shrink-0\" />\n\n {/* Content skeleton */}\n <div className=\"flex-1 space-y-2\">\n <div className=\"h-4 bg-muted rounded w-1/3\" />\n <div className=\"h-3 bg-muted rounded w-1/2\" />\n </div>\n\n {/* Category badge skeleton */}\n <div className=\"h-6 bg-muted rounded-full w-24 flex-shrink-0\" />\n\n {/* Metric skeleton */}\n <div className=\"h-4 bg-muted rounded w-16 flex-shrink-0\" />\n </div>\n ))}\n <span className=\"sr-only\">Loading...</span>\n </div>\n );\n});\nEntityDirectoryLoadingState.displayName = \"EntityDirectoryLoadingState\";\n\nexport { EntityDirectoryLoadingState };\n","/**\n * EntityDirectory Search Filter Subcomponent\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\n\nexport interface EntityDirectorySearchFilterProps {\n /** Search query value */\n value: string;\n /** Change callback */\n onChange: (value: string) => void;\n /** Placeholder text */\n placeholder?: string;\n /** CSS class name */\n className?: string;\n}\n\nconst EntityDirectorySearchFilter = React.forwardRef<\n HTMLInputElement,\n EntityDirectorySearchFilterProps\n>(({ value, onChange, placeholder = \"Search entities...\", className }, ref) => {\n return (\n <div className={cn(\"relative\", className)}>\n <div className=\"absolute inset-y-0 left-0 flex items-center pl-3 pointer-events-none\">\n <svg\n className=\"w-4 h-4 text-muted-foreground\"\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 20 20\"\n >\n <path\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"m19 19-4-4m0-7A7 7 0 1 1 1 8a7 7 0 0 1 14 0Z\"\n />\n </svg>\n </div>\n <input\n ref={ref}\n type=\"search\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n className={cn(\n \"block w-full pl-10 pr-3 py-2 border border-input rounded-md\",\n \"bg-background text-foreground placeholder:text-muted-foreground\",\n \"focus:outline-none focus:ring-2 focus:ring-ring focus:border-transparent\",\n \"transition-colors\"\n )}\n aria-label=\"Search entities\"\n />\n {value && (\n <button\n type=\"button\"\n onClick={() => onChange(\"\")}\n className=\"absolute inset-y-0 right-0 flex items-center pr-3 text-muted-foreground hover:text-foreground\"\n aria-label=\"Clear search\"\n >\n <svg\n className=\"w-4 h-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n )}\n </div>\n );\n});\nEntityDirectorySearchFilter.displayName = \"EntityDirectorySearchFilter\";\n\nexport { EntityDirectorySearchFilter };\n","/**\n * EntityDirectory Widget - Main Composition\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport { EntityDirectoryHeader } from \"./header\";\nimport { EntityDirectoryList } from \"./list\";\nimport { EntityDirectoryEmptyState } from \"./empty-state\";\nimport { EntityDirectoryErrorState } from \"./error-state\";\nimport { EntityDirectoryLoadingState } from \"./loading-state\";\nimport { EntityDirectorySearchFilter } from \"./search-filter\";\nimport { CategoryChips } from \"../../../features/entity-filtering\";\nimport type { Entity, EntityCategory, EntitySort } from \"../../../entities/entity\";\n\nexport interface EntityDirectoryProps {\n // ===== Data =====\n /** List of entities to display */\n entities: Entity[];\n\n /** Available categories for filtering */\n categories?: EntityCategory[];\n\n // ===== Header =====\n /** Directory title */\n title: string;\n\n /** Optional description below title */\n description?: string;\n\n // ===== Filtering & Sorting =====\n /** Currently active category filter (controlled) */\n activeCategory?: string | null;\n\n /** Callback when category changes */\n onCategoryChange?: (categoryId: string | null) => void;\n\n /** Show category count badges */\n showCategoryCount?: boolean;\n\n /** Function to get count for each category */\n getCategoryCount?: (categoryId: string) => number;\n\n /** Enable search functionality */\n enableSearch?: boolean;\n\n /** Search query (controlled) */\n searchQuery?: string;\n\n /** Callback when search query changes */\n onSearchChange?: (query: string) => void;\n\n /** Search placeholder text */\n searchPlaceholder?: string;\n\n /** Enable sorting */\n sortable?: boolean;\n\n /** Current sort state (controlled) */\n sort?: EntitySort | null;\n\n /** Callback when sort changes */\n onSortChange?: (sort: EntitySort) => void;\n\n // ===== Display Options =====\n /** Show icon column */\n showIcons?: boolean;\n\n /** Show category badges in list */\n showCategoryBadges?: boolean;\n\n /** Show metric column */\n showMetric?: boolean;\n\n /** Metric column label (e.g., \"Distance\") */\n metricLabel?: string;\n\n /** Compact mode (reduced spacing) */\n compact?: boolean;\n\n // ===== States =====\n /** Loading state */\n loading?: boolean;\n\n /** Error state */\n error?: string | Error;\n\n /** Empty state custom message */\n emptyMessage?: string;\n\n /** Error state retry callback */\n onRetry?: () => void;\n\n // ===== Customization =====\n /** Custom empty state component */\n emptyState?: React.ReactNode;\n\n /** Custom error state component */\n errorState?: React.ReactNode;\n\n /** Custom loading state component */\n loadingState?: React.ReactNode;\n\n /** Custom list item renderer */\n renderItem?: (entity: Entity) => React.ReactNode;\n\n /** CSS class name */\n className?: string;\n\n /** Inline styles */\n style?: React.CSSProperties;\n}\n\nconst EntityDirectory = React.forwardRef<HTMLDivElement, EntityDirectoryProps>(\n (\n {\n entities,\n categories,\n title,\n description,\n activeCategory,\n onCategoryChange,\n showCategoryCount,\n getCategoryCount,\n enableSearch = false,\n searchQuery = \"\",\n onSearchChange,\n searchPlaceholder,\n sortable = false,\n sort,\n onSortChange,\n showIcons = true,\n showCategoryBadges = true,\n showMetric = true,\n metricLabel,\n compact = false,\n loading = false,\n error,\n emptyMessage,\n onRetry,\n emptyState,\n errorState,\n loadingState,\n renderItem,\n className,\n style,\n },\n ref\n ) => {\n const hasCategories = categories && categories.length > 0;\n const isEmpty = !loading && !error && entities.length === 0;\n const hasError = !loading && !!error;\n\n return (\n <div\n ref={ref}\n className={cn(\"space-y-6\", className)}\n style={style}\n >\n {/* Header */}\n <EntityDirectoryHeader title={title} description={description} />\n\n {/* Category Filter */}\n {hasCategories && onCategoryChange && (\n <CategoryChips\n categories={categories}\n activeCategory={activeCategory}\n onCategoryChange={onCategoryChange}\n showCount={showCategoryCount}\n getCategoryCount={getCategoryCount}\n />\n )}\n\n {/* Search Filter */}\n {enableSearch && onSearchChange && (\n <EntityDirectorySearchFilter\n value={searchQuery}\n onChange={onSearchChange}\n placeholder={searchPlaceholder}\n />\n )}\n\n {/* Loading State */}\n {loading && (loadingState || <EntityDirectoryLoadingState />)}\n\n {/* Error State */}\n {hasError &&\n (errorState || (\n <EntityDirectoryErrorState error={error!} onRetry={onRetry} />\n ))}\n\n {/* Empty State */}\n {isEmpty &&\n (emptyState || <EntityDirectoryEmptyState message={emptyMessage} />)}\n\n {/* List */}\n {!loading && !hasError && !isEmpty && (\n <EntityDirectoryList\n entities={entities}\n categories={categories}\n showIcons={showIcons}\n showCategoryBadges={showCategoryBadges}\n showMetric={showMetric}\n metricLabel={metricLabel}\n sortable={sortable}\n sort={sort}\n onSortChange={onSortChange}\n compact={compact}\n renderItem={renderItem}\n />\n )}\n </div>\n );\n }\n);\nEntityDirectory.displayName = \"EntityDirectory\";\n\nexport { EntityDirectory };\n","/**\n * Mortgage Calculation Utilities\n * Pure functions for mortgage calculations\n */\n\nimport type { MortgageInput, MortgageResult } from \"../model/types\";\n\n/**\n * Calculate monthly mortgage payment using amortization formula\n * M = P * [r(1 + r)^n] / [(1 + r)^n - 1]\n * where:\n * M = monthly payment\n * P = principal loan amount\n * r = monthly interest rate (annual rate / 12)\n * n = number of payments (years * 12)\n */\nexport function calculateMortgage(input: MortgageInput): MortgageResult {\n const {\n propertyPrice,\n downPayment,\n loanTerm,\n interestRate,\n propertyTax = 0,\n hoaFees = 0,\n } = input;\n\n // Calculate loan principal\n const loanPrincipal = propertyPrice - downPayment;\n\n // Convert annual interest rate to monthly decimal\n const monthlyRate = interestRate / 100 / 12;\n\n // Total number of payments\n const numberOfPayments = loanTerm * 12;\n\n // Calculate monthly principal and interest\n let monthlyPayment: number;\n if (monthlyRate === 0) {\n // If interest rate is 0, simple division\n monthlyPayment = loanPrincipal / numberOfPayments;\n } else {\n // Amortization formula\n const powerTerm = Math.pow(1 + monthlyRate, numberOfPayments);\n monthlyPayment =\n (loanPrincipal * (monthlyRate * powerTerm)) / (powerTerm - 1);\n }\n\n // Calculate totals\n const totalPaid = monthlyPayment * numberOfPayments;\n const totalInterest = totalPaid - loanPrincipal;\n\n // Calculate total monthly payment including extras\n const totalMonthlyPayment = monthlyPayment + propertyTax + hoaFees;\n\n return {\n monthlyPayment: Math.round(monthlyPayment * 100) / 100,\n totalMonthlyPayment: Math.round(totalMonthlyPayment * 100) / 100,\n totalAmount: Math.round(totalPaid * 100) / 100,\n totalInterest: Math.round(totalInterest * 100) / 100,\n loanPrincipal: Math.round(loanPrincipal * 100) / 100,\n breakdown: {\n principalAndInterest: Math.round(monthlyPayment * 100) / 100,\n propertyTax: Math.round(propertyTax * 100) / 100,\n hoaFees: Math.round(hoaFees * 100) / 100,\n },\n };\n}\n\n/**\n * Format currency for display\n */\nexport function formatCurrency(\n amount: number,\n currency: string = \"MXN\",\n): string {\n return new Intl.NumberFormat(\"es-MX\", {\n style: \"currency\",\n currency,\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n }).format(amount);\n}\n\n/**\n * Format percentage for display\n */\nexport function formatPercentage(value: number, decimals: number = 3): string {\n return `${value.toFixed(decimals)} %`;\n}\n\n/**\n * Validate mortgage input values\n */\nexport function validateMortgageInput(input: Partial<MortgageInput>): {\n isValid: boolean;\n errors: Record<string, string>;\n} {\n const errors: Record<string, string> = {};\n\n if (!input.propertyPrice || input.propertyPrice <= 0) {\n errors.propertyPrice = \"El precio de la propiedad debe ser mayor a 0\";\n }\n\n if (!input.downPayment || input.downPayment < 0) {\n errors.downPayment = \"El enganche debe ser mayor o igual a 0\";\n }\n\n if (\n input.propertyPrice &&\n input.downPayment &&\n input.downPayment >= input.propertyPrice\n ) {\n errors.downPayment = \"El enganche debe ser menor al precio de la propiedad\";\n }\n\n if (!input.loanTerm || input.loanTerm <= 0) {\n errors.loanTerm = \"El plazo del préstamo debe ser mayor a 0\";\n }\n\n if (input.interestRate === undefined || input.interestRate < 0) {\n errors.interestRate = \"La tasa de interés debe ser mayor o igual a 0\";\n }\n\n return {\n isValid: Object.keys(errors).length === 0,\n errors,\n };\n}\n","/**\n * Mortgage Calculator Constants\n */\n\nimport type { LoanProgramOption } from \"../../../entities/mortgage\";\nimport type { SelectOption } from \"../../../features/select\";\n\nexport const LOAN_PROGRAMS: LoanProgramOption[] = [\n { value: \"15-years\", label: \"15 años fijos\", years: 15 },\n { value: \"20-years\", label: \"20 años fijos\", years: 20 },\n { value: \"30-years\", label: \"30 años fijos\", years: 30 },\n { value: \"40-years\", label: \"40 años fijos\", years: 40 },\n];\n\nexport const LOAN_PROGRAM_OPTIONS: SelectOption[] = LOAN_PROGRAMS.map(\n (program) => ({\n value: program.value,\n label: program.label,\n }),\n);\n\nexport const DEFAULT_VALUES = {\n propertyPrice: 20000000,\n downPayment: 200000,\n loanProgram: \"30-years\" as const,\n interestRate: 6.5,\n};\n\n/**\n * Chart colors matching the design\n */\nexport const CHART_COLORS = {\n principalAndInterest: \"#0a2540\", // Dark blue/navy\n propertyTax: \"#4da6c7\", // Light blue\n hoaFees: \"#7fc9e3\", // Very light blue\n} as const;\n","/**\n * Mortgage Calculator Widget\n * A comprehensive mortgage calculator with form inputs and donut chart visualization\n */\n\nimport * as React from \"react\";\nimport { TrendingUp } from \"lucide-react\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport { Card } from \"../../../features/card\";\nimport { Input } from \"../../../features/input\";\nimport { Select } from \"../../../features/select\";\nimport { DonutChart, type ChartSegment } from \"../../../features/donut-chart\";\nimport { Text } from \"../../../features/text\";\nimport {\n calculateMortgage,\n formatCurrency,\n type MortgageInput,\n type MortgageResult,\n} from \"../../../entities/mortgage\";\nimport {\n LOAN_PROGRAMS,\n LOAN_PROGRAM_OPTIONS,\n DEFAULT_VALUES,\n CHART_COLORS,\n} from \"../lib/constants\";\n\nexport interface MortgageCalculatorProps {\n /** Initial property price */\n initialPropertyPrice?: number;\n /** Initial down payment */\n initialDownPayment?: number;\n /** Initial loan program */\n initialLoanProgram?: string;\n /** Initial interest rate */\n initialInterestRate?: number;\n /** Whether to show property tax input */\n showPropertyTax?: boolean;\n /** Whether to show HOA fees input */\n showHoaFees?: boolean;\n /** Additional class name */\n className?: string;\n /** Callback when calculation changes */\n onCalculationChange?: (result: MortgageResult) => void;\n}\n\nconst MortgageCalculator = React.forwardRef<\n HTMLDivElement,\n MortgageCalculatorProps\n>(\n (\n {\n initialPropertyPrice = DEFAULT_VALUES.propertyPrice,\n initialDownPayment = DEFAULT_VALUES.downPayment,\n initialLoanProgram = DEFAULT_VALUES.loanProgram,\n initialInterestRate = DEFAULT_VALUES.interestRate,\n showPropertyTax = false,\n showHoaFees = false,\n className,\n onCalculationChange,\n },\n ref,\n ) => {\n const [propertyPrice, setPropertyPrice] =\n React.useState(initialPropertyPrice);\n const [downPayment, setDownPayment] = React.useState(initialDownPayment);\n const [loanProgram, setLoanProgram] = React.useState(initialLoanProgram);\n const [interestRate, setInterestRate] = React.useState(initialInterestRate);\n const [propertyTax, setPropertyTax] = React.useState(0);\n const [hoaFees, setHoaFees] = React.useState(0);\n\n // Calculate mortgage result\n const result = React.useMemo(() => {\n const selectedProgram = LOAN_PROGRAMS.find(\n (p) => p.value === loanProgram,\n );\n const loanTerm = selectedProgram?.years || 30;\n\n const input: MortgageInput = {\n propertyPrice,\n downPayment,\n loanTerm,\n interestRate,\n propertyTax: showPropertyTax ? propertyTax : undefined,\n hoaFees: showHoaFees ? hoaFees : undefined,\n };\n\n return calculateMortgage(input);\n }, [\n propertyPrice,\n downPayment,\n loanProgram,\n interestRate,\n propertyTax,\n hoaFees,\n showPropertyTax,\n showHoaFees,\n ]);\n\n // Notify parent of calculation changes\n React.useEffect(() => {\n onCalculationChange?.(result);\n }, [result, onCalculationChange]);\n\n // Generate chart segments\n const chartSegments: ChartSegment[] = React.useMemo(() => {\n const segments: ChartSegment[] = [\n {\n label: \"Principal e Intereses\",\n value: result.breakdown.principalAndInterest,\n color: CHART_COLORS.principalAndInterest,\n },\n ];\n\n if (showPropertyTax && result.breakdown.propertyTax > 0) {\n segments.push({\n label: \"Impuesto Predial\",\n value: result.breakdown.propertyTax,\n color: CHART_COLORS.propertyTax,\n });\n }\n\n if (showHoaFees && result.breakdown.hoaFees > 0) {\n segments.push({\n label: \"Cuota HOA\",\n value: result.breakdown.hoaFees,\n color: CHART_COLORS.hoaFees,\n });\n }\n\n return segments;\n }, [result, showPropertyTax, showHoaFees]);\n\n return (\n <div ref={ref} className={cn(\"w-full\", className)}>\n <Card padding=\"lg\" className=\"w-full\">\n <div className=\"space-y-6\">\n {/* Header */}\n <div>\n <Text variant=\"h2\" className=\"mb-2\">\n Calculadora de Hipotecas\n </Text>\n <Text variant=\"body\" color=\"secondary\" className=\"max-w-2xl\">\n Calcule el pago mensual de su hipoteca, incluyendo capital e\n intereses, impuestos prediales y cuota de la asociación de\n propietarios. Ajuste los valores para obtener una tasa más\n precisa.\n </Text>\n </div>\n\n {/* Main Content: Form and Chart */}\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-8\">\n {/* Form Section */}\n <div className=\"space-y-4\">\n <Input\n label=\"Precio de la propiedad\"\n type=\"number\"\n value={propertyPrice}\n onChange={(e) => setPropertyPrice(Number(e.target.value))}\n suffix=\"MXN\"\n min={0}\n step={10000}\n />\n\n <Input\n label=\"Enganche\"\n type=\"number\"\n value={downPayment}\n onChange={(e) => setDownPayment(Number(e.target.value))}\n suffix=\"MXN\"\n min={0}\n step={10000}\n />\n\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <Select\n label=\"Programa de préstamos\"\n value={loanProgram}\n onChange={(e) => setLoanProgram(e.target.value)}\n options={LOAN_PROGRAM_OPTIONS}\n />\n\n <Input\n label=\"Tasa de interés\"\n type=\"number\"\n value={interestRate}\n onChange={(e) => setInterestRate(Number(e.target.value))}\n suffix=\"%\"\n min={0}\n max={100}\n step={0.1}\n />\n </div>\n\n {showPropertyTax && (\n <Input\n label=\"Impuesto predial mensual\"\n type=\"number\"\n value={propertyTax}\n onChange={(e) => setPropertyTax(Number(e.target.value))}\n suffix=\"MXN\"\n min={0}\n step={100}\n />\n )}\n\n {showHoaFees && (\n <Input\n label=\"Cuota HOA mensual\"\n type=\"number\"\n value={hoaFees}\n onChange={(e) => setHoaFees(Number(e.target.value))}\n suffix=\"MXN\"\n min={0}\n step={100}\n />\n )}\n </div>\n\n {/* Chart Section */}\n <div className=\"flex flex-col items-center justify-center\">\n <DonutChart\n segments={chartSegments}\n size={320}\n innerRadiusRatio={0.65}\n centerContent={\n <div className=\"text-center\">\n <Text variant=\"h1\" className=\"font-bold mb-1\">\n {formatCurrency(result.totalMonthlyPayment)}\n </Text>\n <Text variant=\"body-sm\" color=\"secondary\">\n Tu Pago\n </Text>\n </div>\n }\n showLegend\n legendPosition=\"bottom\"\n />\n\n <div className=\"mt-6 text-center space-y-1\">\n <div className=\"flex items-center justify-center gap-2 text-sm text-success\">\n <TrendingUp className=\"h-4 w-4\" />\n <span className=\"font-medium\">\n Trending up by 5.2% this month\n </span>\n </div>\n <Text variant=\"caption\" color=\"secondary\">\n Showing total visitors for the last 6 months\n </Text>\n </div>\n </div>\n </div>\n\n {/* Summary Information */}\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4 pt-4 border-t\">\n <div>\n <Text variant=\"caption\" color=\"secondary\" className=\"mb-1\">\n Monto del préstamo\n </Text>\n <Text variant=\"body\" weight=\"semibold\">\n {formatCurrency(result.loanPrincipal)}\n </Text>\n </div>\n <div>\n <Text variant=\"caption\" color=\"secondary\" className=\"mb-1\">\n Pago mensual\n </Text>\n <Text variant=\"body\" weight=\"semibold\">\n {formatCurrency(result.monthlyPayment)}\n </Text>\n </div>\n <div>\n <Text variant=\"caption\" color=\"secondary\" className=\"mb-1\">\n Interés total\n </Text>\n <Text variant=\"body\" weight=\"semibold\">\n {formatCurrency(result.totalInterest)}\n </Text>\n </div>\n <div>\n <Text variant=\"caption\" color=\"secondary\" className=\"mb-1\">\n Total a pagar\n </Text>\n <Text variant=\"body\" weight=\"semibold\">\n {formatCurrency(result.totalAmount)}\n </Text>\n </div>\n </div>\n </div>\n </Card>\n </div>\n );\n },\n);\n\nMortgageCalculator.displayName = \"MortgageCalculator\";\n\nexport { MortgageCalculator };\n","/**\n * Page Layouts\n * @layer pages\n * @description Page-level layout components for different application contexts\n */\nimport React from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport { Text } from \"../../../features/text\";\n\nexport interface PageLayoutProps {\n children: React.ReactNode;\n header?: React.ReactNode;\n sidebar?: React.ReactNode;\n footer?: React.ReactNode;\n padding?: \"none\" | \"sm\" | \"md\" | \"lg\";\n}\n\nconst getPaddingClasses = (padding: string): string => {\n switch (padding) {\n case \"sm\":\n return \"p-4\";\n case \"md\":\n return \"p-6\";\n case \"lg\":\n return \"p-8\";\n default:\n return \"p-0\";\n }\n};\n\nexport const PageLayout: React.FC<PageLayoutProps> = ({\n children,\n header,\n sidebar,\n footer,\n padding = \"md\",\n}) => {\n const layoutClasses = cn(\"min-h-screen flex flex-col\");\n const headerClasses = cn(\"bg-card border-b border-border z-10\");\n const contentWithSidebarClasses = cn(\"flex flex-1\");\n const sidebarClasses = cn(\"w-70 bg-card border-r border-border p-6\");\n const mainAreaClasses = cn(\"flex-1 flex flex-col\");\n const mainContentClasses = cn(\n \"flex-1 mx-auto w-full max-w-7xl\",\n getPaddingClasses(padding)\n );\n\n return (\n <div className={layoutClasses}>\n {header && <header className={headerClasses}>{header}</header>}\n\n <div className={contentWithSidebarClasses}>\n {sidebar && <aside className={sidebarClasses}>{sidebar}</aside>}\n\n <div className={mainAreaClasses}>\n <main className={mainContentClasses}>{children}</main>\n </div>\n </div>\n\n {footer && (\n <footer className=\"bg-card border-t border-border mt-auto\">\n {footer}\n </footer>\n )}\n </div>\n );\n};\n\n// Specialized layout components\nexport const DashboardLayout: React.FC<{\n children: React.ReactNode;\n header: React.ReactNode;\n sidebar: React.ReactNode;\n}> = ({ children, header, sidebar }) => (\n <PageLayout header={header} sidebar={sidebar} padding=\"lg\">\n <div className=\"max-w-screen-2xl\">{children}</div>\n </PageLayout>\n);\n\nexport const AuthLayout: React.FC<{\n children: React.ReactNode;\n title?: string;\n subtitle?: string;\n}> = ({ children, title, subtitle }) => (\n <PageLayout padding=\"lg\">\n <div className=\"max-w-md mx-auto\">\n <div className=\"text-center mb-8\">\n {title && (\n <Text variant=\"h2\" className=\"mb-2\">\n {title}\n </Text>\n )}\n {subtitle && (\n <Text variant=\"body\" color=\"muted\">\n {subtitle}\n </Text>\n )}\n </div>\n {children}\n </div>\n </PageLayout>\n);\n\nexport const MarketingLayout: React.FC<{\n children: React.ReactNode;\n header?: React.ReactNode;\n footer?: React.ReactNode;\n}> = ({ children, header, footer }) => (\n <PageLayout header={header} footer={footer} padding=\"none\">\n {children}\n </PageLayout>\n);\n","import type { Theme } from '../types/theme';\n\nexport const lightTheme: Theme = {\n name: 'light',\n colors: {\n primary: '#007bff',\n secondary: '#6c757d',\n success: '#28a745',\n warning: '#ffc107',\n error: '#dc3545',\n info: '#17a2b8',\n background: '#ffffff',\n surface: '#f8f9fa',\n text: '#212529',\n textSecondary: '#6c757d',\n border: '#dee2e6',\n borderLight: '#e9ecef',\n },\n shapes: {\n borderRadius: {\n small: '4px',\n medium: '8px',\n large: '12px',\n round: '50%',\n },\n borderWidth: {\n thin: '1px',\n medium: '2px',\n thick: '3px',\n },\n },\n typography: {\n fontFamily: 'Inter, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n fontSize: {\n xs: '0.75rem',\n sm: '0.875rem',\n md: '1rem',\n lg: '1.125rem',\n xl: '1.25rem',\n xxl: '1.5rem',\n },\n fontWeight: {\n light: 300,\n regular: 400,\n medium: 500,\n bold: 700,\n },\n lineHeight: {\n tight: 1.25,\n normal: 1.5,\n relaxed: 1.75,\n },\n },\n spacing: {\n xs: '0.25rem',\n sm: '0.5rem',\n md: '1rem',\n lg: '1.5rem',\n xl: '2rem',\n xxl: '3rem',\n },\n shadows: {\n none: 'none',\n small: '0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24)',\n medium: '0 3px 6px rgba(0, 0, 0, 0.15), 0 2px 4px rgba(0, 0, 0, 0.12)',\n large: '0 10px 20px rgba(0, 0, 0, 0.15), 0 3px 6px rgba(0, 0, 0, 0.10)',\n xl: '0 15px 25px rgba(0, 0, 0, 0.15), 0 5px 10px rgba(0, 0, 0, 0.05)',\n },\n};\n\nexport const darkTheme: Theme = {\n name: 'dark',\n colors: {\n primary: '#0d6efd',\n secondary: '#6c757d',\n success: '#198754',\n warning: '#fd7e14',\n error: '#dc3545',\n info: '#0dcaf0',\n background: '#121212',\n surface: '#1e1e1e',\n text: '#ffffff',\n textSecondary: '#adb5bd',\n border: '#495057',\n borderLight: '#343a40',\n },\n shapes: {\n borderRadius: {\n small: '4px',\n medium: '8px',\n large: '12px',\n round: '50%',\n },\n borderWidth: {\n thin: '1px',\n medium: '2px',\n thick: '3px',\n },\n },\n typography: {\n fontFamily: 'Inter, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n fontSize: {\n xs: '0.75rem',\n sm: '0.875rem',\n md: '1rem',\n lg: '1.125rem',\n xl: '1.25rem',\n xxl: '1.5rem',\n },\n fontWeight: {\n light: 300,\n regular: 400,\n medium: 500,\n bold: 700,\n },\n lineHeight: {\n tight: 1.25,\n normal: 1.5,\n relaxed: 1.75,\n },\n },\n spacing: {\n xs: '0.25rem',\n sm: '0.5rem',\n md: '1rem',\n lg: '1.5rem',\n xl: '2rem',\n xxl: '3rem',\n },\n shadows: {\n none: 'none',\n small: '0 1px 3px rgba(0, 0, 0, 0.3), 0 1px 2px rgba(0, 0, 0, 0.4)',\n medium: '0 3px 6px rgba(0, 0, 0, 0.4), 0 2px 4px rgba(0, 0, 0, 0.3)',\n large: '0 10px 20px rgba(0, 0, 0, 0.4), 0 3px 6px rgba(0, 0, 0, 0.3)',\n xl: '0 15px 25px rgba(0, 0, 0, 0.4), 0 5px 10px rgba(0, 0, 0, 0.3)',\n },\n};\n\nexport const corporateTheme: Theme = {\n name: 'corporate',\n colors: {\n primary: '#1a365d',\n secondary: '#2d3748',\n success: '#38a169',\n warning: '#d69e2e',\n error: '#e53e3e',\n info: '#3182ce',\n background: '#f7fafc',\n surface: '#ffffff',\n text: '#1a202c',\n textSecondary: '#4a5568',\n border: '#e2e8f0',\n borderLight: '#edf2f7',\n },\n shapes: {\n borderRadius: {\n small: '2px',\n medium: '4px',\n large: '6px',\n round: '50%',\n },\n borderWidth: {\n thin: '1px',\n medium: '2px',\n thick: '3px',\n },\n },\n typography: {\n fontFamily: 'Georgia, \"Times New Roman\", serif',\n fontSize: {\n xs: '0.75rem',\n sm: '0.875rem',\n md: '1rem',\n lg: '1.125rem',\n xl: '1.25rem',\n xxl: '1.5rem',\n },\n fontWeight: {\n light: 300,\n regular: 400,\n medium: 500,\n bold: 700,\n },\n lineHeight: {\n tight: 1.25,\n normal: 1.5,\n relaxed: 1.75,\n },\n },\n spacing: {\n xs: '0.25rem',\n sm: '0.5rem',\n md: '1rem',\n lg: '1.5rem',\n xl: '2rem',\n xxl: '3rem',\n },\n shadows: {\n none: 'none',\n small: '0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.06)',\n medium: '0 4px 6px rgba(0, 0, 0, 0.07), 0 2px 4px rgba(0, 0, 0, 0.06)',\n large: '0 10px 15px rgba(0, 0, 0, 0.1), 0 4px 6px rgba(0, 0, 0, 0.05)',\n xl: '0 20px 25px rgba(0, 0, 0, 0.1), 0 10px 10px rgba(0, 0, 0, 0.04)',\n },\n};\n\nexport const minimalTheme: Theme = {\n name: 'minimal',\n colors: {\n primary: '#000000',\n secondary: '#666666',\n success: '#00aa00',\n warning: '#ffaa00',\n error: '#aa0000',\n info: '#00aaaa',\n background: '#ffffff',\n surface: '#fafafa',\n text: '#000000',\n textSecondary: '#666666',\n border: '#cccccc',\n borderLight: '#e0e0e0',\n },\n shapes: {\n borderRadius: {\n small: '0px',\n medium: '0px',\n large: '0px',\n round: '50%',\n },\n borderWidth: {\n thin: '1px',\n medium: '2px',\n thick: '3px',\n },\n },\n typography: {\n fontFamily: 'Helvetica, Arial, sans-serif',\n fontSize: {\n xs: '0.75rem',\n sm: '0.875rem',\n md: '1rem',\n lg: '1.125rem',\n xl: '1.25rem',\n xxl: '1.5rem',\n },\n fontWeight: {\n light: 300,\n regular: 400,\n medium: 500,\n bold: 700,\n },\n lineHeight: {\n tight: 1.25,\n normal: 1.5,\n relaxed: 1.75,\n },\n },\n spacing: {\n xs: '0.25rem',\n sm: '0.5rem',\n md: '1rem',\n lg: '1.5rem',\n xl: '2rem',\n xxl: '3rem',\n },\n shadows: {\n none: 'none',\n small: 'none',\n medium: 'none',\n large: 'none',\n xl: 'none',\n },\n};\n\nexport const themes = {\n light: lightTheme,\n dark: darkTheme,\n corporate: corporateTheme,\n minimal: minimalTheme,\n} as const;\n\nexport type AvailableThemes = typeof themes;\n","/**\n * Theme Store\n * @layer shared\n * @description Global theme state management using Effector\n */\nimport { createStore, createEvent } from 'effector';\nimport type { Theme, ThemeName } from '../types/theme';\nimport { themes } from '../config/themes';\n\n// Events\nexport const setTheme = createEvent<ThemeName>();\nexport const setCustomTheme = createEvent<Theme>();\nexport const resetTheme = createEvent();\n\n// Store\nexport const $theme = createStore<Theme>(themes.light)\n .on(setTheme, (state, themeName) => {\n const theme = themes[themeName as keyof typeof themes];\n return theme || state;\n })\n .on(setCustomTheme, (_, theme) => theme)\n .on(resetTheme, () => themes.light);\n\n// Selectors\nexport const $themeName = $theme.map((theme) => theme.name);\nexport const $themeColors = $theme.map((theme) => theme.colors);\nexport const $themeShapes = $theme.map((theme) => theme.shapes);\nexport const $themeTypography = $theme.map((theme) => theme.typography);\nexport const $themeSpacing = $theme.map((theme) => theme.spacing);\nexport const $themeShadows = $theme.map((theme) => theme.shadows);","/**\n * Theme Hook\n * @layer shared\n * @description Hook for accessing theme context\n */\nimport React, { useContext } from 'react';\nimport type { Theme } from '../../types/theme';\n\nexport interface ThemeContextValue {\n theme: Theme;\n}\n\nexport const ThemeContext = React.createContext<ThemeContextValue | null>(null);\n\nexport const useTheme = (): ThemeContextValue => {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within a ThemeProvider');\n }\n return context;\n};","/**\n * Theme Provider\n * @layer shared\n * @description Cross-cutting theme management for the design system\n */\nimport React from \"react\";\nimport { useUnit } from \"effector-react\";\nimport { $theme } from \"../../model/theme-store\";\nimport { ThemeContext, type ThemeContextValue } from \"../../lib/theme/use-theme\";\n\ninterface ThemeProviderProps {\n children: React.ReactNode;\n}\n\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({ children }) => {\n const theme = useUnit($theme);\n\n const contextValue: ThemeContextValue = {\n theme,\n };\n\n return (\n <ThemeContext.Provider value={contextValue}>\n {children}\n </ThemeContext.Provider>\n );\n};\n","/**\n * Design System Utilities\n *\n * This file contains utility functions and constants for the design system,\n * providing consistent styling and behavior across components.\n */\n\nimport { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Utility function to merge and conditionally apply CSS classes\n * Combines clsx for conditional classes with tailwind-merge for proper precedence\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n/**\n * Design system constants\n */\nconst designSystemConstants = {\n // Spacing scale (in rem)\n spacing: {\n xs: '0.25rem', // 4px\n sm: '0.5rem', // 8px\n md: '1rem', // 16px\n lg: '1.5rem', // 24px\n xl: '2rem', // 32px\n '2xl': '3rem', // 48px\n '3xl': '4rem', // 64px\n },\n\n // Border radius scale\n radius: {\n none: '0',\n sm: '0.125rem', // 2px\n DEFAULT: '0.25rem', // 4px\n md: '0.375rem', // 6px\n lg: '0.5rem', // 8px\n xl: '0.75rem', // 12px\n '2xl': '1rem', // 16px\n '3xl': '1.5rem', // 24px\n full: '9999px',\n },\n\n // Typography scale\n typography: {\n fontSize: {\n xs: ['0.75rem', { lineHeight: '1rem' }],\n sm: ['0.875rem', { lineHeight: '1.25rem' }],\n base: ['1rem', { lineHeight: '1.5rem' }],\n lg: ['1.125rem', { lineHeight: '1.75rem' }],\n xl: ['1.25rem', { lineHeight: '1.75rem' }],\n '2xl': ['1.5rem', { lineHeight: '2rem' }],\n '3xl': ['1.875rem', { lineHeight: '2.25rem' }],\n '4xl': ['2.25rem', { lineHeight: '2.5rem' }],\n },\n fontWeight: {\n thin: '100',\n light: '300',\n normal: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n extrabold: '800',\n black: '900',\n },\n },\n\n // Shadow scale\n shadows: {\n none: 'none',\n xs: '0 1px 2px 0 rgb(0 0 0 / 0.05)',\n sm: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',\n DEFAULT: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',\n md: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)',\n lg: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n xl: '0 25px 50px -12px rgb(0 0 0 / 0.25)',\n },\n\n // Z-index scale for consistent layering\n zIndex: {\n dropdown: 1000,\n sticky: 1020,\n fixed: 1030,\n modalBackdrop: 1040,\n modal: 1050,\n popover: 1060,\n tooltip: 1070,\n toast: 1080,\n },\n\n // Animation durations\n duration: {\n instant: '0ms',\n fast: '150ms',\n normal: '300ms',\n slow: '500ms',\n },\n\n // Animation easing functions\n easing: {\n linear: 'linear',\n in: 'ease-in',\n out: 'ease-out',\n inOut: 'ease-in-out',\n },\n} as const;\n\n/**\n * Component variant utilities\n */\nexport const componentVariants = {\n button: {\n size: {\n sm: 'h-9 px-3 text-sm',\n md: 'h-10 px-4 py-2',\n lg: 'h-11 px-8',\n icon: 'h-10 w-10',\n },\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90',\n secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80',\n destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n outline: 'border border-input bg-background hover:bg-accent hover:text-accent-foreground',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n },\n\n input: {\n size: {\n sm: 'h-9 px-3 text-sm',\n md: 'h-10 px-3 py-2',\n lg: 'h-11 px-3 py-2',\n },\n },\n\n card: {\n variant: {\n default: 'bg-card text-card-foreground',\n elevated: 'bg-card text-card-foreground shadow-lg',\n outlined: 'bg-card text-card-foreground border-2',\n },\n },\n} as const;\n\n/**\n * Responsive breakpoint utilities\n */\nexport const responsiveBreakpoints = {\n sm: '640px',\n md: '768px',\n lg: '1024px',\n xl: '1280px',\n '2xl': '1536px',\n} as const;\n\n/**\n * Color utility functions\n */\nexport const colorUtils = {\n /**\n * Get a color value with opacity support\n */\n withOpacity: (variable: string, opacity?: number) => {\n if (opacity !== undefined) {\n return `hsl(var(${variable}) / ${opacity})`;\n }\n return `hsl(var(${variable}))`;\n },\n\n /**\n * Get a color from the design system palette\n */\n get: (color: string) => {\n return `hsl(var(--${color}))`;\n },\n} as const;\n\n/**\n * Accessibility utilities\n */\nexport const accessibilityUtils = {\n /**\n * Generate a unique ID for form elements and their labels\n */\n generateId: (prefix = 'ds') => `${prefix}-${Math.random().toString(36).substr(2, 9)}`,\n\n /**\n * Focus management utilities\n */\n focus: {\n visible: 'focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n within: 'focus-within:outline-none focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2',\n },\n\n /**\n * Screen reader utilities\n */\n sr: {\n only: 'absolute w-px h-px p-0 -m-px overflow-hidden whitespace-nowrap border-0',\n not: 'not-sr-only',\n },\n} as const;\n\n/**\n * Component size utilities\n */\nexport const componentSizes = {\n icon: {\n xs: 'w-3 h-3',\n sm: 'w-4 h-4',\n md: 'w-5 h-5',\n lg: 'w-6 h-6',\n xl: 'w-8 h-8',\n },\n\n avatar: {\n xs: 'w-6 h-6',\n sm: 'w-8 h-8',\n md: 'w-10 h-10',\n lg: 'w-12 h-12',\n xl: 'w-16 h-16',\n },\n} as const;\n\n/**\n * Animation utilities\n */\nexport const animationUtils = {\n /**\n * Fade animations\n */\n fade: {\n in: 'animate-in fade-in duration-200',\n out: 'animate-out fade-out duration-200',\n },\n\n /**\n * Slide animations\n */\n slide: {\n inFromLeft: 'animate-in slide-in-from-left duration-200',\n inFromRight: 'animate-in slide-in-from-right duration-200',\n inFromTop: 'animate-in slide-in-from-top duration-200',\n inFromBottom: 'animate-in slide-in-from-bottom duration-200',\n },\n\n /**\n * Scale animations\n */\n scale: {\n in: 'animate-in scale-in duration-200',\n out: 'animate-out scale-out duration-200',\n },\n} as const;\n\n/**\n * Layout utilities\n */\nexport const layoutUtils = {\n /**\n * Container utilities\n */\n container: {\n responsive: 'container mx-auto px-4 sm:px-6 lg:px-8',\n fluid: 'w-full max-w-none',\n centered: 'container mx-auto px-4 flex items-center justify-center min-h-screen',\n },\n\n /**\n * Grid utilities\n */\n grid: {\n responsive: 'grid gap-4 sm:gap-6 lg:gap-8',\n cols: {\n 1: 'grid-cols-1',\n 2: 'grid-cols-1 sm:grid-cols-2',\n 3: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',\n 4: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4',\n 5: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-5',\n 6: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-6',\n },\n },\n\n /**\n * Flex utilities\n */\n flex: {\n center: 'flex items-center justify-center',\n between: 'flex items-center justify-between',\n start: 'flex items-center justify-start',\n end: 'flex items-center justify-end',\n col: 'flex flex-col',\n colCenter: 'flex flex-col items-center justify-center',\n },\n} as const;\n\n/**\n * Theme utilities\n */\nexport const themeUtils = {\n /**\n * Check if dark mode is active\n */\n isDark: () => {\n if (typeof window === 'undefined') return false;\n return document.documentElement.classList.contains('dark');\n },\n\n /**\n * Toggle dark mode\n */\n toggle: () => {\n if (typeof window === 'undefined') return;\n document.documentElement.classList.toggle('dark');\n },\n\n /**\n * Set theme explicitly\n */\n set: (theme: 'light' | 'dark') => {\n if (typeof window === 'undefined') return;\n document.documentElement.classList.toggle('dark', theme === 'dark');\n },\n} as const;\n\n/**\n * Performance utilities\n */\nexport const performanceUtils = {\n /**\n * Debounce function for performance optimization\n */\n debounce: <T extends (...args: unknown[]) => unknown>(\n func: T,\n wait: number\n ): ((...args: Parameters<T>) => void) => {\n let timeout: NodeJS.Timeout;\n return (...args: Parameters<T>) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => func(...args), wait);\n };\n },\n\n /**\n * Throttle function for performance optimization\n */\n throttle: <T extends (...args: unknown[]) => unknown>(\n func: T,\n limit: number\n ): ((...args: Parameters<T>) => void) => {\n let inThrottle: boolean;\n return (...args: Parameters<T>) => {\n if (!inThrottle) {\n func(...args);\n inThrottle = true;\n setTimeout(() => inThrottle = false, limit);\n }\n };\n },\n} as const;\n\n/**\n * Export all utilities\n */\n// Re-export with backward-compatible names\nexport {\n designSystemConstants as designSystem,\n componentVariants as variants,\n responsiveBreakpoints as breakpoints,\n colorUtils as colors,\n accessibilityUtils as a11y,\n componentSizes as sizes,\n animationUtils as animations,\n layoutUtils as layout,\n themeUtils as theme,\n performanceUtils as performance,\n};","import React from \"react\";\n\n// Skip Links\nexport const SkipLink: React.FC<{\n href: string;\n children: React.ReactNode;\n}> = ({ href, children }) => (\n <a\n href={href}\n className=\"sr-only focus:not-sr-only focus:absolute focus:top-4 focus:left-4 focus:z-50 focus:px-4 focus:py-2 focus:bg-primary focus:text-white focus:rounded\"\n >\n {children}\n </a>\n);\n"],"names":["setRef","ref","value","composeRefs","refs","node","hasCleanup","cleanups","cleanup","i","createSlot","ownerName","SlotClone","createSlotClone","Slot2","React","props","forwardedRef","children","slotProps","childrenArray","slottable","isSlottable","newElement","newChildren","child","jsx","Slot","childrenRef","getElementRef","props2","mergeProps","SLOTTABLE_IDENTIFIER","childProps","overrideProps","propName","slotPropValue","childPropValue","args","result","element","getter","mayWarn","r","f","n","o","clsx","CLASS_PART_SEPARATOR","createClassGroupUtils","config","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","className","classParts","getGroupRecursive","getGroupIdForArbitraryProperty","classGroupId","hasPostfixModifier","conflicts","classPartObject","currentClassPart","nextClassPartObject","classGroupFromNextClassPart","classRest","validator","arbitraryPropertyRegex","arbitraryPropertyClassName","property","theme","classGroups","processClassesRecursively","classGroup","classDefinition","classPartObjectToEdit","getPart","isThemeGetter","key","path","currentClassPartObject","pathPart","func","createLruCache","maxCacheSize","cacheSize","cache","previousCache","update","IMPORTANT_MODIFIER","MODIFIER_SEPARATOR","MODIFIER_SEPARATOR_LENGTH","createParseClassName","prefix","experimentalParseClassName","parseClassName","modifiers","bracketDepth","parenDepth","modifierStart","postfixModifierPosition","index","currentCharacter","baseClassNameWithImportantModifier","baseClassName","stripImportantModifier","hasImportantModifier","maybePostfixModifierPosition","fullPrefix","parseClassNameOriginal","createSortModifiers","orderSensitiveModifiers","modifier","sortedModifiers","unsortedModifiers","createConfigUtils","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","getClassGroupId","getConflictingClassGroupIds","sortModifiers","classGroupsInConflict","classNames","originalClassName","isExternal","variantModifier","modifierId","classId","conflictGroups","group","twJoin","argument","resolvedValue","string","toValue","mix","k","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","fromTheme","themeGetter","arbitraryValueRegex","arbitraryVariableRegex","fractionRegex","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isFraction","isNumber","isInteger","isPercent","isTshirtSize","isAny","isLengthOnly","isNever","isShadow","isImage","isAnyNonArbitrary","isArbitraryValue","isArbitraryVariable","isArbitrarySize","getIsArbitraryValue","isLabelSize","isArbitraryLength","isLabelLength","isArbitraryNumber","isLabelNumber","isArbitraryPosition","isLabelPosition","isArbitraryImage","isLabelImage","isArbitraryShadow","isLabelShadow","isArbitraryVariableLength","getIsArbitraryVariable","isArbitraryVariableFamilyName","isLabelFamilyName","isArbitraryVariablePosition","isArbitraryVariableSize","isArbitraryVariableImage","isArbitraryVariableShadow","testLabel","testValue","shouldMatchNoLabel","label","getDefaultConfig","themeColor","themeFont","themeText","themeFontWeight","themeTracking","themeLeading","themeBreakpoint","themeContainer","themeSpacing","themeRadius","themeShadow","themeInsetShadow","themeTextShadow","themeDropShadow","themeBlur","themePerspective","themeAspect","themeEase","themeAnimate","scaleBreak","scalePosition","scalePositionWithArbitrary","scaleOverflow","scaleOverscroll","scaleUnambiguousSpacing","scaleInset","scaleGridTemplateColsRows","scaleGridColRowStartAndEnd","scaleGridColRowStartOrEnd","scaleGridAutoColsRows","scaleAlignPrimaryAxis","scaleAlignSecondaryAxis","scaleMargin","scaleSizing","scaleColor","scaleBgPosition","scaleBgRepeat","scaleBgSize","scaleGradientStopPosition","scaleRadius","scaleBorderWidth","scaleLineStyle","scaleBlendMode","scaleMaskImagePosition","scaleBlur","scaleRotate","scaleScale","scaleSkew","scaleTranslate","twMerge","cn","inputs","falsyToString","cx","cva","base","_config_compoundVariants","variants","defaultVariants","getVariantClassNames","variant","variantProp","defaultVariantProp","variantKey","propsWithoutUndefined","acc","param","getCompoundVariantClassNames","cvClass","cvClassName","compoundVariantOptions","buttonVariants","Button","size","asChild","disabled","Comp","getVariantClasses","getColorClasses","color","getWeightClasses","weight","getAlignClasses","align","Text","truncate","as","Component","getDefaultElement","classes","getPaddingClasses","padding","getShadowClasses","shadow","getBorderRadiusClasses","borderRadius","Card","title","subtitle","onClick","clickable","jsxs","CardFooterComponent","CompoundCard","getSizeClasses","Modal","isOpen","onClose","showCloseButton","closeOnOverlayClick","closeOnEscape","modalRef","useEffect","handleEscape","e","overlayClasses","modalClasses","headerClasses","contentClasses","closeButtonClasses","ModalWithActions","actions","modalProps","ConfirmModal","onConfirm","message","confirmText","cancelText","Fragment","inputVariants","labelVariants","helperTextVariants","Input","containerClassName","labelClassName","inputSize","helperText","error","required","suffix","id","generatedId","inputId","helperTextId","errorId","currentVariant","displayHelperText","toKebabCase","toCamelCase","match","p1","p2","toPascalCase","camelCase","mergeClasses","array","hasA11yProp","prop","defaultAttributes","Icon","forwardRef","strokeWidth","absoluteStrokeWidth","iconNode","rest","createElement","tag","attrs","createLucideIcon","iconName","__iconNode","Bath","Bed","Car","ChevronDown","ChevronLeft","ChevronRight","Grid3x3","Heart","Maximize","TrendingUp","selectVariants","selectLabelVariants","selectHelperTextVariants","Select","selectSize","options","placeholder","selectId","option","calculateDonutSegmentPath","startAngle","endAngle","radius","innerRadius","centerX","centerY","startRadians","endRadians","x1","y1","x2","y2","x3","y3","x4","y4","largeArcFlag","generateDonutPaths","segments","total","sum","segment","currentAngle","paths","segmentAngle","DonutChart","innerRadiusRatio","centerContent","showLegend","legendPosition","onSegmentClick","onSegmentHover","hoveredSegment","setHoveredSegment","handleSegmentHover","isFlexRow","filterEntitiesByCategory","entities","categoryId","entity","sortEntities","sort","sorted","a","b","aValue","bValue","parseMetricValue","metricValue","countEntitiesByCategory","useEntityFilter","_categories","initialCategory","initialSort","enableSearch","activeCategory","setActiveCategory","useState","setSort","searchQuery","setSearchQuery","categoryFilteredEntities","useMemo","searchFilteredEntities","query","filteredEntities","getCategoryCount","useCallback","resetFilters","chipVariants","Chip","icon","selected","dismissible","onDismiss","effectiveVariant","CategoryChips","categories","onCategoryChange","showCount","category","isActive","count","getTransactionBadgeClasses","transaction","getDefaultVariant","type","PropertyCard","onLike","onImageClick","showLikeButton","showNavigation","currentImageIndex","setCurrentImageIndex","isLiked","setIsLiked","nextImage","prev","prevImage","handleLike","newLikedState","handleImageClick","formatPrice","amount","currency","cardClasses","imageContainerClasses","imageClasses","badgesClasses","badgeClasses","likeButtonClasses","navButtonClasses","dotsClasses","dotClasses","infoClasses","titleClasses","priceClasses","locationClasses","featuresClasses","featureItemClasses","amenitiesClasses","CardContent","_","PropertyGallery","images","transactionType","totalPhotos","onViewAllClick","displayImages","Grid","EntityDirectoryHeader","description","EntityDirectoryListItem","showIcon","showCategoryBadge","showMetric","compact","cat","isClickable","handleClick","handleKeyDown","EntityDirectoryTableHeader","columns","onSortChange","handleSort","columnKey","newDirection","handleSortClick","handleSortKeyDown","getSortIcon","column","isSortable","EntityDirectoryList","showIcons","showCategoryBadges","metricLabel","sortable","renderItem","EntityDirectoryEmptyState","action","EntityDirectoryErrorState","onRetry","errorMessage","EntityDirectoryLoadingState","rows","EntityDirectorySearchFilter","onChange","EntityDirectory","showCategoryCount","onSearchChange","searchPlaceholder","loading","emptyMessage","emptyState","errorState","loadingState","style","hasCategories","isEmpty","hasError","calculateMortgage","input","propertyPrice","downPayment","loanTerm","interestRate","propertyTax","hoaFees","loanPrincipal","monthlyRate","numberOfPayments","monthlyPayment","powerTerm","totalPaid","totalInterest","totalMonthlyPayment","formatCurrency","formatPercentage","decimals","validateMortgageInput","errors","LOAN_PROGRAMS","LOAN_PROGRAM_OPTIONS","program","DEFAULT_VALUES","CHART_COLORS","MortgageCalculator","initialPropertyPrice","initialDownPayment","initialLoanProgram","initialInterestRate","showPropertyTax","showHoaFees","onCalculationChange","setPropertyPrice","setDownPayment","loanProgram","setLoanProgram","setInterestRate","setPropertyTax","setHoaFees","p","chartSegments","PageLayout","header","sidebar","footer","layoutClasses","contentWithSidebarClasses","sidebarClasses","mainAreaClasses","mainContentClasses","DashboardLayout","AuthLayout","MarketingLayout","lightTheme","darkTheme","corporateTheme","minimalTheme","themes","setTheme","createEvent","setCustomTheme","resetTheme","$theme","createStore","state","themeName","$themeName","$themeColors","ThemeContext","useTheme","context","useContext","ThemeProvider","contextValue","useUnit","designSystemConstants","componentVariants","responsiveBreakpoints","colorUtils","variable","opacity","accessibilityUtils","componentSizes","animationUtils","layoutUtils","themeUtils","performanceUtils","wait","timeout","limit","inThrottle","SkipLink","href"],"mappings":"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","x_google_ignoreList":[0,1,2,3,5,13,14,15,16,17,18,19,20,21,22,23,24,25,26]}
|
|
1
|
+
{"version":3,"file":"design-system.cjs.js","sources":["../node_modules/.pnpm/@radix-ui+react-compose-refs@1.1.2_@types+react@19.2.2_react@19.2.0/node_modules/@radix-ui/react-compose-refs/dist/index.mjs","../node_modules/.pnpm/@radix-ui+react-slot@1.2.3_@types+react@19.2.2_react@19.2.0/node_modules/@radix-ui/react-slot/dist/index.mjs","../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../node_modules/.pnpm/tailwind-merge@3.3.1/node_modules/tailwind-merge/dist/bundle-mjs.mjs","../src/shared/lib/utils.ts","../node_modules/.pnpm/class-variance-authority@0.7.1/node_modules/class-variance-authority/dist/index.mjs","../src/features/button/lib/button-variants.ts","../src/features/button/ui/button.tsx","../src/features/text/ui/text.tsx","../src/features/card/ui/card.tsx","../src/features/modal/ui/modal.tsx","../src/features/input/lib/input-variants.ts","../src/features/input/ui/input.tsx","../node_modules/.pnpm/lucide-react@0.547.0_react@19.2.0/node_modules/lucide-react/dist/esm/shared/src/utils.js","../node_modules/.pnpm/lucide-react@0.547.0_react@19.2.0/node_modules/lucide-react/dist/esm/defaultAttributes.js","../node_modules/.pnpm/lucide-react@0.547.0_react@19.2.0/node_modules/lucide-react/dist/esm/Icon.js","../node_modules/.pnpm/lucide-react@0.547.0_react@19.2.0/node_modules/lucide-react/dist/esm/createLucideIcon.js","../node_modules/.pnpm/lucide-react@0.547.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/bath.js","../node_modules/.pnpm/lucide-react@0.547.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/bed.js","../node_modules/.pnpm/lucide-react@0.547.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/car.js","../node_modules/.pnpm/lucide-react@0.547.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-down.js","../node_modules/.pnpm/lucide-react@0.547.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-left.js","../node_modules/.pnpm/lucide-react@0.547.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-right.js","../node_modules/.pnpm/lucide-react@0.547.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/grid-3x3.js","../node_modules/.pnpm/lucide-react@0.547.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/heart.js","../node_modules/.pnpm/lucide-react@0.547.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/map-pin.js","../node_modules/.pnpm/lucide-react@0.547.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/maximize.js","../node_modules/.pnpm/lucide-react@0.547.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/trending-up.js","../src/features/select/lib/select-variants.ts","../src/features/select/ui/select.tsx","../src/features/donut-chart/lib/donut-chart-utils.ts","../src/features/donut-chart/ui/donut-chart.tsx","../src/entities/entity/lib/entity-utils.ts","../src/features/entity-filtering/model/use-entity-filter.ts","../src/shared/ui/chip/chip-variants.ts","../src/shared/ui/chip/chip.tsx","../src/features/entity-filtering/ui/category-chips.tsx","../src/widgets/property-card/ui/property-card.tsx","../src/widgets/property-gallery/ui/property-gallery.tsx","../src/widgets/entity-directory/ui/header.tsx","../src/widgets/entity-directory/ui/list-item.tsx","../src/widgets/entity-directory/ui/table-header.tsx","../src/widgets/entity-directory/ui/list.tsx","../src/widgets/entity-directory/ui/empty-state.tsx","../src/widgets/entity-directory/ui/error-state.tsx","../src/widgets/entity-directory/ui/loading-state.tsx","../src/widgets/entity-directory/ui/search-filter.tsx","../src/widgets/entity-directory/ui/entity-directory.tsx","../src/entities/mortgage/lib/calculations.ts","../src/widgets/mortgage-calculator/lib/constants.ts","../src/widgets/mortgage-calculator/ui/mortgage-calculator.tsx","../src/pages/layouts/ui/page-layout.tsx","../src/shared/config/themes.ts","../src/shared/model/theme-store.ts","../src/shared/lib/theme/use-theme.ts","../src/shared/ui/theme/theme-provider.tsx","../src/shared/lib/design-system.ts","../src/shared/lib/a11y/components.tsx"],"sourcesContent":["// packages/react/compose-refs/src/compose-refs.tsx\nimport * as React from \"react\";\nfunction setRef(ref, value) {\n if (typeof ref === \"function\") {\n return ref(value);\n } else if (ref !== null && ref !== void 0) {\n ref.current = value;\n }\n}\nfunction composeRefs(...refs) {\n return (node) => {\n let hasCleanup = false;\n const cleanups = refs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup == \"function\") {\n hasCleanup = true;\n }\n return cleanup;\n });\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup == \"function\") {\n cleanup();\n } else {\n setRef(refs[i], null);\n }\n }\n };\n }\n };\n}\nfunction useComposedRefs(...refs) {\n return React.useCallback(composeRefs(...refs), refs);\n}\nexport {\n composeRefs,\n useComposedRefs\n};\n//# sourceMappingURL=index.mjs.map\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","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 classGroups\n } = config;\n const classMap = {\n nextPart: new Map(),\n validators: []\n };\n for (const classGroupId in classGroups) {\n processClassesRecursively(classGroups[classGroupId], 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;\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 MODIFIER_SEPARATOR = ':';\nconst MODIFIER_SEPARATOR_LENGTH = MODIFIER_SEPARATOR.length;\nconst createParseClassName = config => {\n const {\n prefix,\n experimentalParseClassName\n } = config;\n /**\n * Parse class name into parts.\n *\n * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n */\n let parseClassName = className => {\n const modifiers = [];\n let bracketDepth = 0;\n let parenDepth = 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 && parenDepth === 0) {\n if (currentCharacter === MODIFIER_SEPARATOR) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + MODIFIER_SEPARATOR_LENGTH;\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 } else if (currentCharacter === '(') {\n parenDepth++;\n } else if (currentCharacter === ')') {\n parenDepth--;\n }\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart);\n const baseClassName = stripImportantModifier(baseClassNameWithImportantModifier);\n const hasImportantModifier = baseClassName !== baseClassNameWithImportantModifier;\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n };\n };\n if (prefix) {\n const fullPrefix = prefix + MODIFIER_SEPARATOR;\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => className.startsWith(fullPrefix) ? parseClassNameOriginal(className.substring(fullPrefix.length)) : {\n isExternal: true,\n modifiers: [],\n hasImportantModifier: false,\n baseClassName: className,\n maybePostfixModifierPosition: undefined\n };\n }\n if (experimentalParseClassName) {\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => experimentalParseClassName({\n className,\n parseClassName: parseClassNameOriginal\n });\n }\n return parseClassName;\n};\nconst stripImportantModifier = baseClassName => {\n if (baseClassName.endsWith(IMPORTANT_MODIFIER)) {\n return baseClassName.substring(0, baseClassName.length - 1);\n }\n /**\n * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n */\n if (baseClassName.startsWith(IMPORTANT_MODIFIER)) {\n return baseClassName.substring(1);\n }\n return baseClassName;\n};\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst createSortModifiers = config => {\n const orderSensitiveModifiers = Object.fromEntries(config.orderSensitiveModifiers.map(modifier => [modifier, true]));\n const sortModifiers = modifiers => {\n if (modifiers.length <= 1) {\n return modifiers;\n }\n const sortedModifiers = [];\n let unsortedModifiers = [];\n modifiers.forEach(modifier => {\n const isPositionSensitive = modifier[0] === '[' || orderSensitiveModifiers[modifier];\n if (isPositionSensitive) {\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 };\n return sortModifiers;\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n sortModifiers: createSortModifiers(config),\n ...createClassGroupUtils(config)\n});\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds,\n sortModifiers\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n isExternal,\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n if (isExternal) {\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n let hasPostfixModifier = !!maybePostfixModifierPosition;\n let classGroupId = 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 = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i;\nconst arbitraryVariableRegex = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i;\nconst fractionRegex = /^\\d+\\/\\d+$/;\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isFraction = value => fractionRegex.test(value);\nconst isNumber = value => !!value && !Number.isNaN(Number(value));\nconst isInteger = value => !!value && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst isAny = () => true;\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst isAnyNonArbitrary = value => !isArbitraryValue(value) && !isArbitraryVariable(value);\nconst isArbitrarySize = value => getIsArbitraryValue(value, isLabelSize, isNever);\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, isLabelLength, isLengthOnly);\nconst isArbitraryNumber = value => getIsArbitraryValue(value, isLabelNumber, isNumber);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, isLabelPosition, isNever);\nconst isArbitraryImage = value => getIsArbitraryValue(value, isLabelImage, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, isLabelShadow, isShadow);\nconst isArbitraryVariable = value => arbitraryVariableRegex.test(value);\nconst isArbitraryVariableLength = value => getIsArbitraryVariable(value, isLabelLength);\nconst isArbitraryVariableFamilyName = value => getIsArbitraryVariable(value, isLabelFamilyName);\nconst isArbitraryVariablePosition = value => getIsArbitraryVariable(value, isLabelPosition);\nconst isArbitraryVariableSize = value => getIsArbitraryVariable(value, isLabelSize);\nconst isArbitraryVariableImage = value => getIsArbitraryVariable(value, isLabelImage);\nconst isArbitraryVariableShadow = value => getIsArbitraryVariable(value, isLabelShadow, true);\n// Helpers\nconst getIsArbitraryValue = (value, testLabel, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) => {\n const result = arbitraryVariableRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return shouldMatchNoLabel;\n }\n return false;\n};\n// Labels\nconst isLabelPosition = label => label === 'position' || label === 'percentage';\nconst isLabelImage = label => label === 'image' || label === 'url';\nconst isLabelSize = label => label === 'length' || label === 'size' || label === 'bg-size';\nconst isLabelLength = label => label === 'length';\nconst isLabelNumber = label => label === 'number';\nconst isLabelFamilyName = label => label === 'family-name';\nconst isLabelShadow = label => label === 'shadow';\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isAnyNonArbitrary,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isArbitraryVariable,\n isArbitraryVariableFamilyName,\n isArbitraryVariableImage,\n isArbitraryVariableLength,\n isArbitraryVariablePosition,\n isArbitraryVariableShadow,\n isArbitraryVariableSize,\n isFraction,\n isInteger,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n /**\n * Theme getters for theme variable namespaces\n * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n */\n /***/\n const themeColor = fromTheme('color');\n const themeFont = fromTheme('font');\n const themeText = fromTheme('text');\n const themeFontWeight = fromTheme('font-weight');\n const themeTracking = fromTheme('tracking');\n const themeLeading = fromTheme('leading');\n const themeBreakpoint = fromTheme('breakpoint');\n const themeContainer = fromTheme('container');\n const themeSpacing = fromTheme('spacing');\n const themeRadius = fromTheme('radius');\n const themeShadow = fromTheme('shadow');\n const themeInsetShadow = fromTheme('inset-shadow');\n const themeTextShadow = fromTheme('text-shadow');\n const themeDropShadow = fromTheme('drop-shadow');\n const themeBlur = fromTheme('blur');\n const themePerspective = fromTheme('perspective');\n const themeAspect = fromTheme('aspect');\n const themeEase = fromTheme('ease');\n const themeAnimate = fromTheme('animate');\n /**\n * Helpers to avoid repeating the same scales\n *\n * We use functions that create a new array every time they're called instead of static arrays.\n * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.\n */\n /***/\n const scaleBreak = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const scalePosition = () => ['center', 'top', 'bottom', 'left', 'right', 'top-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-top', 'top-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-top', 'bottom-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-bottom', 'bottom-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-bottom'];\n const scalePositionWithArbitrary = () => [...scalePosition(), isArbitraryVariable, isArbitraryValue];\n const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const scaleOverscroll = () => ['auto', 'contain', 'none'];\n const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];\n const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()];\n const scaleGridTemplateColsRows = () => [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartAndEnd = () => ['auto', {\n span: ['full', isInteger, isArbitraryVariable, isArbitraryValue]\n }, isInteger, isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartOrEnd = () => [isInteger, 'auto', isArbitraryVariable, isArbitraryValue];\n const scaleGridAutoColsRows = () => ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue];\n const scaleAlignPrimaryAxis = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch', 'baseline', 'center-safe', 'end-safe'];\n const scaleAlignSecondaryAxis = () => ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'];\n const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()];\n const scaleSizing = () => [isFraction, 'auto', 'full', 'dvw', 'dvh', 'lvw', 'lvh', 'svw', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];\n const scaleBgPosition = () => [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition, {\n position: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleBgRepeat = () => ['no-repeat', {\n repeat: ['', 'x', 'y', 'space', 'round']\n }];\n const scaleBgSize = () => ['auto', 'cover', 'contain', isArbitraryVariableSize, isArbitrarySize, {\n size: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleGradientStopPosition = () => [isPercent, isArbitraryVariableLength, isArbitraryLength];\n const scaleRadius = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', 'full', themeRadius, isArbitraryVariable, isArbitraryValue];\n const scaleBorderWidth = () => ['', isNumber, isArbitraryVariableLength, isArbitraryLength];\n const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'];\n const scaleBlendMode = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const scaleMaskImagePosition = () => [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition];\n const scaleBlur = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeBlur, isArbitraryVariable, isArbitraryValue];\n const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()];\n return {\n cacheSize: 500,\n theme: {\n animate: ['spin', 'ping', 'pulse', 'bounce'],\n aspect: ['video'],\n blur: [isTshirtSize],\n breakpoint: [isTshirtSize],\n color: [isAny],\n container: [isTshirtSize],\n 'drop-shadow': [isTshirtSize],\n ease: ['in', 'out', 'in-out'],\n font: [isAnyNonArbitrary],\n 'font-weight': ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black'],\n 'inset-shadow': [isTshirtSize],\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],\n perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],\n radius: [isTshirtSize],\n shadow: [isTshirtSize],\n spacing: ['px', isNumber],\n text: [isTshirtSize],\n 'text-shadow': [isTshirtSize],\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest']\n },\n classGroups: {\n // --------------\n // --- Layout ---\n // --------------\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', isFraction, isArbitraryValue, isArbitraryVariable, themeAspect]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n * @deprecated since Tailwind CSS v4.0.0\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': scaleBreak()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': scaleBreak()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n /**\n * Screen Reader Only\n * @see https://tailwindcss.com/docs/display#screen-reader-only\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: scalePositionWithArbitrary()\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: scaleOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': scaleOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': scaleOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: scaleOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': scaleOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': scaleOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Top / Right / Bottom / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: scaleInset()\n }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': scaleInset()\n }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': scaleInset()\n }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{\n start: scaleInset()\n }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{\n end: scaleInset()\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: scaleInset()\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: scaleInset()\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: scaleInset()\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: scaleInset()\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------------\n // --- Flexbox and Grid ---\n // ------------------------\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: [isFraction, 'full', 'auto', themeContainer, ...scaleUnambiguousSpacing()]\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['nowrap', 'wrap', 'wrap-reverse']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: [isInteger, 'first', 'last', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': scaleGridAutoColsRows()\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': scaleGridAutoColsRows()\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: scaleUnambiguousSpacing()\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': scaleUnambiguousSpacing()\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': scaleUnambiguousSpacing()\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: [...scaleAlignPrimaryAxis(), 'normal']\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': [...scaleAlignSecondaryAxis(), 'normal']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...scaleAlignPrimaryAxis()]\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: [...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', ...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': scaleAlignPrimaryAxis()\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': [...scaleAlignSecondaryAxis(), 'baseline']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: scaleUnambiguousSpacing()\n }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: scaleUnambiguousSpacing()\n }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: scaleUnambiguousSpacing()\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: scaleMargin()\n }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: scaleMargin()\n }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: scaleMargin()\n }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: scaleMargin()\n }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: scaleMargin()\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: scaleMargin()\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: scaleMargin()\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: scaleMargin()\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: scaleMargin()\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x': [{\n 'space-x': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y': [{\n 'space-y': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y-reverse': ['space-y-reverse'],\n // --------------\n // --- Sizing ---\n // --------------\n /**\n * Size\n * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n */\n size: [{\n size: scaleSizing()\n }],\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: [themeContainer, 'screen', ...scaleSizing()]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [themeContainer, 'screen', /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'none', ...scaleSizing()]\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [themeContainer, 'screen', 'none', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'prose', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n {\n screen: [themeBreakpoint]\n }, ...scaleSizing()]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: ['screen', 'lh', ...scaleSizing()]\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': ['screen', 'lh', 'none', ...scaleSizing()]\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': ['screen', 'lh', ...scaleSizing()]\n }],\n // ------------------\n // --- Typography ---\n // ------------------\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: [themeFontWeight, isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Font Stretch\n * @see https://tailwindcss.com/docs/font-stretch\n */\n 'font-stretch': [{\n 'font-stretch': ['ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded', isPercent, isArbitraryValue]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isArbitraryVariableFamilyName, isArbitraryValue, themeFont]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: [themeTracking, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: [/** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n themeLeading, ...scaleUnambiguousSpacing()]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://v3.tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: scaleColor()\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: scaleColor()\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...scaleLineStyle(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: [isNumber, 'from-font', 'auto', isArbitraryVariable, isArbitraryLength]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: scaleColor()\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: scaleUnambiguousSpacing()\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Overflow Wrap\n * @see https://tailwindcss.com/docs/overflow-wrap\n */\n wrap: [{\n wrap: ['break-word', 'anywhere', 'normal']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // -------------------\n // --- Backgrounds ---\n // -------------------\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: scaleBgPosition()\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: scaleBgRepeat()\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: scaleBgSize()\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n linear: [{\n to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isInteger, isArbitraryVariable, isArbitraryValue],\n radial: ['', isArbitraryVariable, isArbitraryValue],\n conic: [isInteger, isArbitraryVariable, isArbitraryValue]\n }, isArbitraryVariableImage, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: scaleColor()\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: scaleColor()\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: scaleColor()\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: scaleColor()\n }],\n // ---------------\n // --- Borders ---\n // ---------------\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: scaleRadius()\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': scaleRadius()\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': scaleRadius()\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': scaleRadius()\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': scaleRadius()\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': scaleRadius()\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': scaleRadius()\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': scaleRadius()\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': scaleRadius()\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': scaleRadius()\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': scaleRadius()\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': scaleRadius()\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': scaleRadius()\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': scaleRadius()\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': scaleRadius()\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: scaleBorderWidth()\n }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': scaleBorderWidth()\n }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': scaleBorderWidth()\n }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': scaleBorderWidth()\n }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': scaleBorderWidth()\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': scaleBorderWidth()\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': scaleBorderWidth()\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': scaleBorderWidth()\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': scaleBorderWidth()\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x': [{\n 'divide-x': scaleBorderWidth()\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y': [{\n 'divide-y': scaleBorderWidth()\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n */\n 'divide-style': [{\n divide: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: scaleColor()\n }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': scaleColor()\n }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': scaleColor()\n }],\n /**\n * Border Color S\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': scaleColor()\n }],\n /**\n * Border Color E\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': scaleColor()\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': scaleColor()\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': scaleColor()\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': scaleColor()\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': scaleColor()\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: scaleColor()\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: [...scaleLineStyle(), 'none', 'hidden']\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: scaleColor()\n }],\n // ---------------\n // --- Effects ---\n // ---------------\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n */\n 'shadow-color': [{\n shadow: scaleColor()\n }],\n /**\n * Inset Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n */\n 'inset-shadow': [{\n 'inset-shadow': ['none', themeInsetShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Inset Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n */\n 'inset-shadow-color': [{\n 'inset-shadow': scaleColor()\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n */\n 'ring-w': [{\n ring: scaleBorderWidth()\n }],\n /**\n * Ring Width Inset\n * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n */\n 'ring-color': [{\n ring: scaleColor()\n }],\n /**\n * Ring Offset Width\n * @see https://v3.tailwindcss.com/docs/ring-offset-width\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-w': [{\n 'ring-offset': [isNumber, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://v3.tailwindcss.com/docs/ring-offset-color\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-color': [{\n 'ring-offset': scaleColor()\n }],\n /**\n * Inset Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n */\n 'inset-ring-w': [{\n 'inset-ring': scaleBorderWidth()\n }],\n /**\n * Inset Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n */\n 'inset-ring-color': [{\n 'inset-ring': scaleColor()\n }],\n /**\n * Text Shadow\n * @see https://tailwindcss.com/docs/text-shadow\n */\n 'text-shadow': [{\n 'text-shadow': ['none', themeTextShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Text Shadow Color\n * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n */\n 'text-shadow-color': [{\n 'text-shadow': scaleColor()\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': scaleBlendMode()\n }],\n /**\n * Mask Clip\n * @see https://tailwindcss.com/docs/mask-clip\n */\n 'mask-clip': [{\n 'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }, 'mask-no-clip'],\n /**\n * Mask Composite\n * @see https://tailwindcss.com/docs/mask-composite\n */\n 'mask-composite': [{\n mask: ['add', 'subtract', 'intersect', 'exclude']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image-linear-pos': [{\n 'mask-linear': [isNumber]\n }],\n 'mask-image-linear-from-pos': [{\n 'mask-linear-from': scaleMaskImagePosition()\n }],\n 'mask-image-linear-to-pos': [{\n 'mask-linear-to': scaleMaskImagePosition()\n }],\n 'mask-image-linear-from-color': [{\n 'mask-linear-from': scaleColor()\n }],\n 'mask-image-linear-to-color': [{\n 'mask-linear-to': scaleColor()\n }],\n 'mask-image-t-from-pos': [{\n 'mask-t-from': scaleMaskImagePosition()\n }],\n 'mask-image-t-to-pos': [{\n 'mask-t-to': scaleMaskImagePosition()\n }],\n 'mask-image-t-from-color': [{\n 'mask-t-from': scaleColor()\n }],\n 'mask-image-t-to-color': [{\n 'mask-t-to': scaleColor()\n }],\n 'mask-image-r-from-pos': [{\n 'mask-r-from': scaleMaskImagePosition()\n }],\n 'mask-image-r-to-pos': [{\n 'mask-r-to': scaleMaskImagePosition()\n }],\n 'mask-image-r-from-color': [{\n 'mask-r-from': scaleColor()\n }],\n 'mask-image-r-to-color': [{\n 'mask-r-to': scaleColor()\n }],\n 'mask-image-b-from-pos': [{\n 'mask-b-from': scaleMaskImagePosition()\n }],\n 'mask-image-b-to-pos': [{\n 'mask-b-to': scaleMaskImagePosition()\n }],\n 'mask-image-b-from-color': [{\n 'mask-b-from': scaleColor()\n }],\n 'mask-image-b-to-color': [{\n 'mask-b-to': scaleColor()\n }],\n 'mask-image-l-from-pos': [{\n 'mask-l-from': scaleMaskImagePosition()\n }],\n 'mask-image-l-to-pos': [{\n 'mask-l-to': scaleMaskImagePosition()\n }],\n 'mask-image-l-from-color': [{\n 'mask-l-from': scaleColor()\n }],\n 'mask-image-l-to-color': [{\n 'mask-l-to': scaleColor()\n }],\n 'mask-image-x-from-pos': [{\n 'mask-x-from': scaleMaskImagePosition()\n }],\n 'mask-image-x-to-pos': [{\n 'mask-x-to': scaleMaskImagePosition()\n }],\n 'mask-image-x-from-color': [{\n 'mask-x-from': scaleColor()\n }],\n 'mask-image-x-to-color': [{\n 'mask-x-to': scaleColor()\n }],\n 'mask-image-y-from-pos': [{\n 'mask-y-from': scaleMaskImagePosition()\n }],\n 'mask-image-y-to-pos': [{\n 'mask-y-to': scaleMaskImagePosition()\n }],\n 'mask-image-y-from-color': [{\n 'mask-y-from': scaleColor()\n }],\n 'mask-image-y-to-color': [{\n 'mask-y-to': scaleColor()\n }],\n 'mask-image-radial': [{\n 'mask-radial': [isArbitraryVariable, isArbitraryValue]\n }],\n 'mask-image-radial-from-pos': [{\n 'mask-radial-from': scaleMaskImagePosition()\n }],\n 'mask-image-radial-to-pos': [{\n 'mask-radial-to': scaleMaskImagePosition()\n }],\n 'mask-image-radial-from-color': [{\n 'mask-radial-from': scaleColor()\n }],\n 'mask-image-radial-to-color': [{\n 'mask-radial-to': scaleColor()\n }],\n 'mask-image-radial-shape': [{\n 'mask-radial': ['circle', 'ellipse']\n }],\n 'mask-image-radial-size': [{\n 'mask-radial': [{\n closest: ['side', 'corner'],\n farthest: ['side', 'corner']\n }]\n }],\n 'mask-image-radial-pos': [{\n 'mask-radial-at': scalePosition()\n }],\n 'mask-image-conic-pos': [{\n 'mask-conic': [isNumber]\n }],\n 'mask-image-conic-from-pos': [{\n 'mask-conic-from': scaleMaskImagePosition()\n }],\n 'mask-image-conic-to-pos': [{\n 'mask-conic-to': scaleMaskImagePosition()\n }],\n 'mask-image-conic-from-color': [{\n 'mask-conic-from': scaleColor()\n }],\n 'mask-image-conic-to-color': [{\n 'mask-conic-to': scaleColor()\n }],\n /**\n * Mask Mode\n * @see https://tailwindcss.com/docs/mask-mode\n */\n 'mask-mode': [{\n mask: ['alpha', 'luminance', 'match']\n }],\n /**\n * Mask Origin\n * @see https://tailwindcss.com/docs/mask-origin\n */\n 'mask-origin': [{\n 'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }],\n /**\n * Mask Position\n * @see https://tailwindcss.com/docs/mask-position\n */\n 'mask-position': [{\n mask: scaleBgPosition()\n }],\n /**\n * Mask Repeat\n * @see https://tailwindcss.com/docs/mask-repeat\n */\n 'mask-repeat': [{\n mask: scaleBgRepeat()\n }],\n /**\n * Mask Size\n * @see https://tailwindcss.com/docs/mask-size\n */\n 'mask-size': [{\n mask: scaleBgSize()\n }],\n /**\n * Mask Type\n * @see https://tailwindcss.com/docs/mask-type\n */\n 'mask-type': [{\n 'mask-type': ['alpha', 'luminance']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image': [{\n mask: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // ---------------\n // --- Filters ---\n // ---------------\n /**\n * Filter\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: scaleBlur()\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeDropShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Drop Shadow Color\n * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n */\n 'drop-shadow-color': [{\n 'drop-shadow': scaleColor()\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Filter\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': scaleBlur()\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n // --------------\n // --- Tables ---\n // --------------\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': scaleUnambiguousSpacing()\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // ---------------------------------\n // --- Transitions and Animation ---\n // ---------------------------------\n /**\n * Transition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['', 'all', 'colors', 'opacity', 'shadow', 'transform', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Behavior\n * @see https://tailwindcss.com/docs/transition-behavior\n */\n 'transition-behavior': [{\n transition: ['normal', 'discrete']\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------\n // --- Transforms ---\n // ------------------\n /**\n * Backface Visibility\n * @see https://tailwindcss.com/docs/backface-visibility\n */\n backface: [{\n backface: ['hidden', 'visible']\n }],\n /**\n * Perspective\n * @see https://tailwindcss.com/docs/perspective\n */\n perspective: [{\n perspective: [themePerspective, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Perspective Origin\n * @see https://tailwindcss.com/docs/perspective-origin\n */\n 'perspective-origin': [{\n 'perspective-origin': scalePositionWithArbitrary()\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: scaleRotate()\n }],\n /**\n * Rotate X\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-x': [{\n 'rotate-x': scaleRotate()\n }],\n /**\n * Rotate Y\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-y': [{\n 'rotate-y': scaleRotate()\n }],\n /**\n * Rotate Z\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-z': [{\n 'rotate-z': scaleRotate()\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: scaleScale()\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': scaleScale()\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': scaleScale()\n }],\n /**\n * Scale Z\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-z': [{\n 'scale-z': scaleScale()\n }],\n /**\n * Scale 3D\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-3d': ['scale-3d'],\n /**\n * Skew\n * @see https://tailwindcss.com/docs/skew\n */\n skew: [{\n skew: scaleSkew()\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': scaleSkew()\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': scaleSkew()\n }],\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu']\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: scalePositionWithArbitrary()\n }],\n /**\n * Transform Style\n * @see https://tailwindcss.com/docs/transform-style\n */\n 'transform-style': [{\n transform: ['3d', 'flat']\n }],\n /**\n * Translate\n * @see https://tailwindcss.com/docs/translate\n */\n translate: [{\n translate: scaleTranslate()\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': scaleTranslate()\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': scaleTranslate()\n }],\n /**\n * Translate Z\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-z': [{\n 'translate-z': scaleTranslate()\n }],\n /**\n * Translate None\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-none': ['translate-none'],\n // ---------------------\n // --- Interactivity ---\n // ---------------------\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: scaleColor()\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: scaleColor()\n }],\n /**\n * Color Scheme\n * @see https://tailwindcss.com/docs/color-scheme\n */\n 'color-scheme': [{\n scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Field Sizing\n * @see https://tailwindcss.com/docs/field-sizing\n */\n 'field-sizing': [{\n 'field-sizing': ['fixed', 'content']\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['auto', 'none']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', '', 'y', 'x']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryVariable, isArbitraryValue]\n }],\n // -----------\n // --- SVG ---\n // -----------\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: ['none', ...scaleColor()]\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isNumber, isArbitraryVariableLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: ['none', ...scaleColor()]\n }],\n // ---------------------\n // --- Accessibility ---\n // ---------------------\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n 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-x', 'border-w-y', '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-x', 'border-color-y', '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 translate: ['translate-x', 'translate-y', 'translate-none'],\n 'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-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 orderSensitiveModifiers: ['*', '**', 'after', 'backdrop', 'before', 'details-content', 'file', 'first-letter', 'first-line', 'marker', 'placeholder', 'selection']\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n overrideConfigProperties(baseConfig.theme, override.theme);\n overrideConfigProperties(baseConfig.classGroups, override.classGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroups, override.conflictingClassGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroupModifiers, override.conflictingClassGroupModifiers);\n overrideProperty(baseConfig, 'orderSensitiveModifiers', override.orderSensitiveModifiers);\n mergeConfigProperties(baseConfig.theme, extend.theme);\n mergeConfigProperties(baseConfig.classGroups, extend.classGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroups, extend.conflictingClassGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroupModifiers, extend.conflictingClassGroupModifiers);\n mergeArrayProperties(baseConfig, extend, 'orderSensitiveModifiers');\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n mergeArrayProperties(baseObject, mergeObject, key);\n }\n }\n};\nconst mergeArrayProperties = (baseObject, mergeObject, key) => {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = baseObject[key] ? baseObject[key].concat(mergeValue) : mergeValue;\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}","/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>(props)=>{\n var _config_compoundVariants;\n if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n const { variants, defaultVariants } = config;\n const getVariantClassNames = Object.keys(variants).map((variant)=>{\n const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n return variants[variant][variantKey];\n });\n const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n let [key, value] = param;\n if (value === undefined) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\n let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n return Object.entries(compoundVariantOptions).every((param)=>{\n let [key, value] = param;\n return Array.isArray(value) ? value.includes({\n ...defaultVariants,\n ...propsWithoutUndefined\n }[key]) : ({\n ...defaultVariants,\n ...propsWithoutUndefined\n })[key] === value;\n }) ? [\n ...acc,\n cvClass,\n cvClassName\n ] : acc;\n }, []);\n return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n };\n\n","import { cva, type VariantProps } from \"class-variance-authority\"\n\nexport const buttonVariants = cva(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-10 px-4 py-2\",\n sm: \"h-9 rounded-md px-3\",\n lg: \"h-11 rounded-md px-8\",\n icon: \"h-10 w-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport type ButtonVariantProps = VariantProps<typeof buttonVariants>","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport {\n buttonVariants,\n type ButtonVariantProps,\n} from \"../lib/button-variants\";\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n ButtonVariantProps {\n asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, disabled, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n type={props.type || \"button\"}\n disabled={disabled}\n aria-disabled={disabled ? \"true\" : undefined}\n {...props}\n />\n );\n }\n);\nButton.displayName = \"Button\";\n\nexport { Button };\n","import React from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\n\nexport type TextVariant =\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"h5\"\n | \"h6\"\n | \"body\"\n | \"body-sm\"\n | \"body-lg\"\n | \"caption\"\n | \"label\";\n\nexport type TextColor =\n | \"primary\"\n | \"secondary\"\n | \"muted\"\n | \"error\"\n | \"success\"\n | \"warning\";\n\nexport interface TextProps {\n variant?: TextVariant;\n color?: TextColor;\n weight?: \"light\" | \"normal\" | \"medium\" | \"semibold\" | \"bold\";\n align?: \"left\" | \"center\" | \"right\" | \"justify\";\n truncate?: boolean;\n children: React.ReactNode;\n className?: string;\n as?: React.ElementType;\n}\n\nconst getVariantClasses = (variant: TextVariant): string => {\n switch (variant) {\n case \"h1\":\n return \"text-4xl font-bold leading-tight tracking-tight\";\n case \"h2\":\n return \"text-3xl font-bold leading-tight tracking-tight\";\n case \"h3\":\n return \"text-2xl font-semibold leading-tight tracking-normal\";\n case \"h4\":\n return \"text-xl font-semibold leading-snug tracking-normal\";\n case \"h5\":\n return \"text-lg font-medium leading-snug tracking-normal\";\n case \"h6\":\n return \"text-base font-medium leading-normal tracking-normal\";\n case \"body\":\n return \"text-base font-normal leading-normal\";\n case \"body-sm\":\n return \"text-sm font-normal leading-normal\";\n case \"body-lg\":\n return \"text-lg font-normal leading-relaxed\";\n case \"caption\":\n return \"text-xs font-normal leading-normal tracking-wide\";\n case \"label\":\n return \"text-sm font-medium leading-normal tracking-wide\";\n default:\n return \"text-base font-normal leading-normal\";\n }\n};\n\nconst getColorClasses = (color: TextColor): string => {\n switch (color) {\n case \"primary\":\n return \"text-foreground\";\n case \"secondary\":\n return \"text-muted-foreground\";\n case \"muted\":\n return \"text-muted-foreground\";\n case \"error\":\n return \"text-destructive\";\n case \"success\":\n return \"text-success\";\n case \"warning\":\n return \"text-warning\";\n default:\n return \"text-foreground\";\n }\n};\n\nconst getWeightClasses = (weight?: string): string => {\n switch (weight) {\n case \"light\":\n return \"font-light\";\n case \"normal\":\n return \"font-normal\";\n case \"medium\":\n return \"font-medium\";\n case \"semibold\":\n return \"font-semibold\";\n case \"bold\":\n return \"font-bold\";\n default:\n return \"\";\n }\n};\n\nconst getAlignClasses = (align: string): string => {\n switch (align) {\n case \"left\":\n return \"text-left\";\n case \"center\":\n return \"text-center\";\n case \"right\":\n return \"text-right\";\n case \"justify\":\n return \"text-justify\";\n default:\n return \"text-left\";\n }\n};\n\nexport const Text: React.FC<TextProps> = ({\n variant = \"body\",\n color = \"primary\",\n weight,\n align = \"left\",\n truncate = false,\n children,\n className,\n as,\n ...props\n}) => {\n const Component = as || getDefaultElement(variant);\n\n const classes = cn(\n \"m-0\",\n getVariantClasses(variant),\n getColorClasses(color),\n getWeightClasses(weight),\n getAlignClasses(align),\n truncate && \"truncate\",\n className\n );\n\n return (\n <Component className={classes} {...props}>\n {children}\n </Component>\n );\n};\n\nfunction getDefaultElement(variant: TextVariant): React.ElementType {\n switch (variant) {\n case \"h1\":\n return \"h1\";\n case \"h2\":\n return \"h2\";\n case \"h3\":\n return \"h3\";\n case \"h4\":\n return \"h4\";\n case \"h5\":\n return \"h5\";\n case \"h6\":\n return \"h6\";\n default:\n return \"p\";\n }\n}\n","import React from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport { Text } from \"../../text/ui/text\";\n\nexport interface CardProps {\n children: React.ReactNode;\n title?: string;\n subtitle?: string;\n className?: string;\n padding?: \"none\" | \"sm\" | \"md\" | \"lg\";\n shadow?: \"none\" | \"sm\" | \"md\" | \"lg\";\n borderRadius?: \"none\" | \"sm\" | \"md\" | \"lg\";\n onClick?: () => void;\n}\n\nconst getPaddingClasses = (padding: string): string => {\n switch (padding) {\n case \"sm\":\n return \"p-4\";\n case \"md\":\n return \"p-6\";\n case \"lg\":\n return \"p-8\";\n default:\n return \"p-0\";\n }\n};\n\nconst getShadowClasses = (shadow: string): string => {\n switch (shadow) {\n case \"sm\":\n return \"shadow-sm\";\n case \"md\":\n return \"shadow-md\";\n case \"lg\":\n return \"shadow-lg\";\n default:\n return \"shadow-none\";\n }\n};\n\nconst getBorderRadiusClasses = (borderRadius: string): string => {\n switch (borderRadius) {\n case \"sm\":\n return \"rounded-sm\";\n case \"md\":\n return \"rounded-md\";\n case \"lg\":\n return \"rounded-lg\";\n default:\n return \"rounded-none\";\n }\n};\n\nexport const Card: React.FC<CardProps> = ({\n children,\n title,\n subtitle,\n className,\n padding = \"md\",\n shadow = \"md\",\n borderRadius = \"md\",\n onClick,\n}) => {\n const clickable = !!onClick;\n\n const classes = cn(\n \"bg-card\",\n getPaddingClasses(padding),\n getShadowClasses(shadow),\n getBorderRadiusClasses(borderRadius),\n \"transition-all duration-200 ease-in-out\",\n clickable &&\n \"cursor-pointer hover:-translate-y-0.5 hover:shadow-lg active:translate-y-0\",\n className\n );\n\n return (\n <div className={classes} onClick={onClick}>\n {(title || subtitle) && (\n <div className=\"mb-4\">\n {title && (\n <div className=\"mb-2\">\n <Text variant=\"h3\">{title}</Text>\n </div>\n )}\n {subtitle && (\n <div className=\"text-muted-foreground\">\n <Text variant=\"body-sm\" color=\"muted\">\n {subtitle}\n </Text>\n </div>\n )}\n </div>\n )}\n\n <div className=\"flex-1\">{children}</div>\n </div>\n );\n};\n\nexport const CardFooterComponent: React.FC<{ children: React.ReactNode }> = ({\n children,\n}) => <div className=\"mt-4 pt-4 border-t border-border\">{children}</div>;\n\n// Compound component pattern\nexport const CompoundCard = Object.assign(Card, {\n Footer: CardFooterComponent,\n});\n","import React, { useEffect } from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport { Text } from \"../../text/ui/text\";\nimport { Button } from \"../../../features/button/ui/button\";\n\nexport interface ModalProps {\n isOpen: boolean;\n onClose: () => void;\n title?: string;\n children: React.ReactNode;\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n showCloseButton?: boolean;\n closeOnOverlayClick?: boolean;\n closeOnEscape?: boolean;\n}\n\nconst getSizeClasses = (size: string): string => {\n switch (size) {\n case \"sm\":\n return \"max-w-md\";\n case \"md\":\n return \"max-w-2xl\";\n case \"lg\":\n return \"max-w-4xl\";\n case \"xl\":\n return \"max-w-6xl\";\n default:\n return \"max-w-2xl\";\n }\n};\n\nexport const Modal: React.FC<ModalProps> = ({\n isOpen,\n onClose,\n title,\n children,\n size = \"md\",\n showCloseButton = true,\n closeOnOverlayClick = true,\n closeOnEscape = true,\n}) => {\n const modalRef = React.useRef<HTMLDivElement>(null);\n\n // Handle escape key\n useEffect(() => {\n if (!isOpen || !closeOnEscape) return;\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onClose();\n }\n };\n\n document.addEventListener(\"keydown\", handleEscape);\n return () => document.removeEventListener(\"keydown\", handleEscape);\n }, [isOpen, closeOnEscape, onClose]);\n\n // Prevent body scroll when modal is open\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = \"hidden\";\n } else {\n document.body.style.overflow = \"unset\";\n }\n\n return () => {\n document.body.style.overflow = \"unset\";\n };\n }, [isOpen]);\n\n // Focus management\n useEffect(() => {\n if (isOpen && modalRef.current) {\n modalRef.current.focus();\n }\n }, [isOpen]);\n\n if (!isOpen) return null;\n\n const overlayClasses = cn(\n \"fixed inset-0 bg-black/50 flex items-center justify-center z-50 p-4\"\n );\n\n const modalClasses = cn(\n \"bg-card rounded-lg shadow-xl w-full max-h-[90vh] overflow-hidden flex flex-col\",\n getSizeClasses(size)\n );\n\n const headerClasses = cn(\n \"p-6 border-b border-border flex items-center justify-between\"\n );\n\n const contentClasses = cn(\"p-6 overflow-y-auto flex-1\");\n\n const closeButtonClasses = cn(\n \"bg-none border-none text-xl cursor-pointer text-muted-foreground p-1 rounded-sm flex items-center justify-center hover:bg-accent hover:text-accent-foreground focus:outline-2 focus:outline-primary focus:outline-offset-2\"\n );\n\n return (\n <div\n className={overlayClasses}\n onClick={closeOnOverlayClick ? onClose : undefined}\n >\n <div\n ref={modalRef}\n className={modalClasses}\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n tabIndex={-1}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? \"modal-title\" : undefined}\n >\n {(title || showCloseButton) && (\n <div className={headerClasses}>\n {title && (\n <Text variant=\"h3\" className=\"text-foreground\">\n {title}\n </Text>\n )}\n {showCloseButton && (\n <button\n onClick={onClose}\n aria-label=\"Close modal\"\n className={closeButtonClasses}\n >\n ×\n </button>\n )}\n </div>\n )}\n\n <div className={contentClasses}>{children}</div>\n </div>\n </div>\n );\n};\n\n// Compound component pattern for Modal with footer actions\nexport interface ModalWithActionsProps extends Omit<ModalProps, \"children\"> {\n children: React.ReactNode;\n actions?: React.ReactNode;\n}\n\nexport const ModalWithActions: React.FC<ModalWithActionsProps> = ({\n children,\n actions,\n ...modalProps\n}) => (\n <Modal {...modalProps}>\n <div className=\"p-6 overflow-y-auto flex-1\">{children}</div>\n {actions && (\n <div className=\"p-6 border-t border-border flex justify-end gap-3\">\n {actions}\n </div>\n )}\n </Modal>\n);\n\n// Pre-configured modal variants\nexport interface ConfirmModalProps {\n isOpen: boolean;\n onClose: () => void;\n onConfirm: () => void;\n title: string;\n message: string;\n confirmText?: string;\n cancelText?: string;\n}\n\nexport const ConfirmModal: React.FC<ConfirmModalProps> = ({\n isOpen,\n onClose,\n onConfirm,\n title,\n message,\n confirmText = \"Confirm\",\n cancelText = \"Cancel\",\n}) => (\n <ModalWithActions\n isOpen={isOpen}\n onClose={onClose}\n title={title}\n actions={\n <>\n <Button variant=\"secondary\" onClick={onClose}>\n {cancelText}\n </Button>\n <Button variant=\"default\" onClick={onConfirm}>\n {confirmText}\n </Button>\n </>\n }\n >\n <Text>{message}</Text>\n </ModalWithActions>\n);\n","/**\n * Input Component Variants\n * CVA-based styling for input components\n */\n\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nexport const inputVariants = cva(\n [\n // Base styles\n \"flex w-full rounded-md border bg-background px-3 py-2\",\n \"text-base transition-colors\",\n \"file:border-0 file:bg-transparent file:text-sm file:font-medium\",\n \"placeholder:text-muted-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n ],\n {\n variants: {\n variant: {\n default: [\"border-input\", \"focus-visible:ring-primary\"],\n error: [\"border-destructive\", \"focus-visible:ring-destructive\"],\n success: [\"border-success\", \"focus-visible:ring-success\"],\n },\n inputSize: {\n sm: \"h-8 text-sm\",\n default: \"h-10\",\n lg: \"h-12 text-lg\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n inputSize: \"default\",\n },\n },\n);\n\nexport const labelVariants = cva(\n [\"block text-sm font-medium mb-1.5\", \"transition-colors\"],\n {\n variants: {\n variant: {\n default: \"text-foreground\",\n error: \"text-destructive\",\n success: \"text-success\",\n },\n required: {\n true: \"after:content-['*'] after:ml-0.5 after:text-destructive\",\n false: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n required: false,\n },\n },\n);\n\nexport const helperTextVariants = cva(\"mt-1.5 text-sm\", {\n variants: {\n variant: {\n default: \"text-muted-foreground\",\n error: \"text-destructive\",\n success: \"text-success\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n\nexport type InputVariantProps = VariantProps<typeof inputVariants>;\nexport type LabelVariantProps = VariantProps<typeof labelVariants>;\nexport type HelperTextVariantProps = VariantProps<typeof helperTextVariants>;\n","/**\n * Input Component\n * A reusable form input component with label and helper text support\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport {\n inputVariants,\n labelVariants,\n helperTextVariants,\n type InputVariantProps,\n} from \"../lib/input-variants\";\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\">,\n InputVariantProps {\n /** Label text for the input */\n label?: string;\n /** Helper text displayed below the input */\n helperText?: string;\n /** Error message (overrides helperText when present) */\n error?: string;\n /** Whether the input is required */\n required?: boolean;\n /** Prefix element (e.g., icon or text) */\n prefix?: React.ReactNode;\n /** Suffix element (e.g., icon or text) */\n suffix?: React.ReactNode;\n /** Container class name */\n containerClassName?: string;\n /** Label class name */\n labelClassName?: string;\n}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n containerClassName,\n labelClassName,\n variant,\n inputSize,\n label,\n helperText,\n error,\n required,\n prefix,\n suffix,\n id,\n ...props\n },\n ref,\n ) => {\n const generatedId = React.useId();\n const inputId = id || generatedId;\n const helperTextId = `${inputId}-helper`;\n const errorId = `${inputId}-error`;\n\n const currentVariant = error ? \"error\" : variant;\n const displayHelperText = error || helperText;\n\n return (\n <div className={cn(\"w-full\", containerClassName)}>\n {label && (\n <label\n htmlFor={inputId}\n className={cn(\n labelVariants({ variant: currentVariant, required }),\n labelClassName,\n )}\n >\n {label}\n </label>\n )}\n <div className=\"relative\">\n {prefix && (\n <div className=\"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground\">\n {prefix}\n </div>\n )}\n <input\n id={inputId}\n ref={ref}\n className={cn(\n inputVariants({ variant: currentVariant, inputSize }),\n prefix && \"pl-10\",\n suffix && \"pr-10\",\n className,\n )}\n aria-invalid={error ? \"true\" : \"false\"}\n aria-describedby={\n displayHelperText ? (error ? errorId : helperTextId) : undefined\n }\n {...props}\n />\n {suffix && (\n <div className=\"absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground\">\n {suffix}\n </div>\n )}\n </div>\n {displayHelperText && (\n <p\n id={error ? errorId : helperTextId}\n className={helperTextVariants({ variant: currentVariant })}\n role={error ? \"alert\" : undefined}\n >\n {displayHelperText}\n </p>\n )}\n </div>\n );\n },\n);\n\nInput.displayName = \"Input\";\n\nexport { Input };\n","/**\n * @license lucide-react v0.547.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n};\n\nexport { hasA11yProp, mergeClasses, toCamelCase, toKebabCase, toPascalCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.547.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.547.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses, hasA11yProp } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n )\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.547.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.547.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M10 4 8 6\", key: \"1rru8s\" }],\n [\"path\", { d: \"M17 19v2\", key: \"ts1sot\" }],\n [\"path\", { d: \"M2 12h20\", key: \"9i4pu4\" }],\n [\"path\", { d: \"M7 19v2\", key: \"12npes\" }],\n [\n \"path\",\n {\n d: \"M9 5 7.621 3.621A2.121 2.121 0 0 0 4 5v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-5\",\n key: \"14ym8i\"\n }\n ]\n];\nconst Bath = createLucideIcon(\"bath\", __iconNode);\n\nexport { __iconNode, Bath as default };\n//# sourceMappingURL=bath.js.map\n","/**\n * @license lucide-react v0.547.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M2 4v16\", key: \"vw9hq8\" }],\n [\"path\", { d: \"M2 8h18a2 2 0 0 1 2 2v10\", key: \"1dgv2r\" }],\n [\"path\", { d: \"M2 17h20\", key: \"18nfp3\" }],\n [\"path\", { d: \"M6 8v9\", key: \"1yriud\" }]\n];\nconst Bed = createLucideIcon(\"bed\", __iconNode);\n\nexport { __iconNode, Bed as default };\n//# sourceMappingURL=bed.js.map\n","/**\n * @license lucide-react v0.547.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M19 17h2c.6 0 1-.4 1-1v-3c0-.9-.7-1.7-1.5-1.9C18.7 10.6 16 10 16 10s-1.3-1.4-2.2-2.3c-.5-.4-1.1-.7-1.8-.7H5c-.6 0-1.1.4-1.4.9l-1.4 2.9A3.7 3.7 0 0 0 2 12v4c0 .6.4 1 1 1h2\",\n key: \"5owen\"\n }\n ],\n [\"circle\", { cx: \"7\", cy: \"17\", r: \"2\", key: \"u2ysq9\" }],\n [\"path\", { d: \"M9 17h6\", key: \"r8uit2\" }],\n [\"circle\", { cx: \"17\", cy: \"17\", r: \"2\", key: \"axvx0g\" }]\n];\nconst Car = createLucideIcon(\"car\", __iconNode);\n\nexport { __iconNode, Car as default };\n//# sourceMappingURL=car.js.map\n","/**\n * @license lucide-react v0.547.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]];\nconst ChevronDown = createLucideIcon(\"chevron-down\", __iconNode);\n\nexport { __iconNode, ChevronDown as default };\n//# sourceMappingURL=chevron-down.js.map\n","/**\n * @license lucide-react v0.547.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m15 18-6-6 6-6\", key: \"1wnfg3\" }]];\nconst ChevronLeft = createLucideIcon(\"chevron-left\", __iconNode);\n\nexport { __iconNode, ChevronLeft as default };\n//# sourceMappingURL=chevron-left.js.map\n","/**\n * @license lucide-react v0.547.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]];\nconst ChevronRight = createLucideIcon(\"chevron-right\", __iconNode);\n\nexport { __iconNode, ChevronRight as default };\n//# sourceMappingURL=chevron-right.js.map\n","/**\n * @license lucide-react v0.547.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", key: \"afitv7\" }],\n [\"path\", { d: \"M3 9h18\", key: \"1pudct\" }],\n [\"path\", { d: \"M3 15h18\", key: \"5xshup\" }],\n [\"path\", { d: \"M9 3v18\", key: \"fh3hqa\" }],\n [\"path\", { d: \"M15 3v18\", key: \"14nvp0\" }]\n];\nconst Grid3x3 = createLucideIcon(\"grid-3x3\", __iconNode);\n\nexport { __iconNode, Grid3x3 as default };\n//# sourceMappingURL=grid-3x3.js.map\n","/**\n * @license lucide-react v0.547.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5\",\n key: \"mvr1a0\"\n }\n ]\n];\nconst Heart = createLucideIcon(\"heart\", __iconNode);\n\nexport { __iconNode, Heart as default };\n//# sourceMappingURL=heart.js.map\n","/**\n * @license lucide-react v0.547.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0\",\n key: \"1r0f0z\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"10\", r: \"3\", key: \"ilqhr7\" }]\n];\nconst MapPin = createLucideIcon(\"map-pin\", __iconNode);\n\nexport { __iconNode, MapPin as default };\n//# sourceMappingURL=map-pin.js.map\n","/**\n * @license lucide-react v0.547.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M8 3H5a2 2 0 0 0-2 2v3\", key: \"1dcmit\" }],\n [\"path\", { d: \"M21 8V5a2 2 0 0 0-2-2h-3\", key: \"1e4gt3\" }],\n [\"path\", { d: \"M3 16v3a2 2 0 0 0 2 2h3\", key: \"wsl5sc\" }],\n [\"path\", { d: \"M16 21h3a2 2 0 0 0 2-2v-3\", key: \"18trek\" }]\n];\nconst Maximize = createLucideIcon(\"maximize\", __iconNode);\n\nexport { __iconNode, Maximize as default };\n//# sourceMappingURL=maximize.js.map\n","/**\n * @license lucide-react v0.547.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M16 7h6v6\", key: \"box55l\" }],\n [\"path\", { d: \"m22 7-8.5 8.5-5-5L2 17\", key: \"1t1m79\" }]\n];\nconst TrendingUp = createLucideIcon(\"trending-up\", __iconNode);\n\nexport { __iconNode, TrendingUp as default };\n//# sourceMappingURL=trending-up.js.map\n","/**\n * Select Component Variants\n * CVA-based styling for select components\n */\n\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nexport const selectVariants = cva(\n [\n // Base styles\n \"flex w-full rounded-md border bg-background px-3 py-2\",\n \"text-base transition-colors\",\n \"appearance-none cursor-pointer\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n ],\n {\n variants: {\n variant: {\n default: [\"border-input\", \"focus-visible:ring-primary\"],\n error: [\"border-destructive\", \"focus-visible:ring-destructive\"],\n success: [\"border-success\", \"focus-visible:ring-success\"],\n },\n selectSize: {\n sm: \"h-8 text-sm\",\n default: \"h-10\",\n lg: \"h-12 text-lg\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n selectSize: \"default\",\n },\n },\n);\n\nexport const selectLabelVariants = cva(\n [\"block text-sm font-medium mb-1.5\", \"transition-colors\"],\n {\n variants: {\n variant: {\n default: \"text-foreground\",\n error: \"text-destructive\",\n success: \"text-success\",\n },\n required: {\n true: \"after:content-['*'] after:ml-0.5 after:text-destructive\",\n false: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n required: false,\n },\n },\n);\n\nexport const selectHelperTextVariants = cva(\"mt-1.5 text-sm\", {\n variants: {\n variant: {\n default: \"text-muted-foreground\",\n error: \"text-destructive\",\n success: \"text-success\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n\nexport type SelectVariantProps = VariantProps<typeof selectVariants>;\nexport type SelectLabelVariantProps = VariantProps<typeof selectLabelVariants>;\nexport type SelectHelperTextVariantProps = VariantProps<\n typeof selectHelperTextVariants\n>;\n","/**\n * Select Component\n * A reusable form select/dropdown component with label and helper text support\n */\n\nimport * as React from \"react\";\nimport { ChevronDown } from \"lucide-react\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport {\n selectVariants,\n selectLabelVariants,\n selectHelperTextVariants,\n type SelectVariantProps,\n} from \"../lib/select-variants\";\n\nexport interface SelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps\n extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, \"size\">,\n SelectVariantProps {\n /** Label text for the select */\n label?: string;\n /** Helper text displayed below the select */\n helperText?: string;\n /** Error message (overrides helperText when present) */\n error?: string;\n /** Whether the select is required */\n required?: boolean;\n /** Select options */\n options: SelectOption[];\n /** Placeholder option text */\n placeholder?: string;\n /** Container class name */\n containerClassName?: string;\n /** Label class name */\n labelClassName?: string;\n}\n\nconst Select = React.forwardRef<HTMLSelectElement, SelectProps>(\n (\n {\n className,\n containerClassName,\n labelClassName,\n variant,\n selectSize,\n label,\n helperText,\n error,\n required,\n options,\n placeholder,\n id,\n ...props\n },\n ref,\n ) => {\n const generatedId = React.useId();\n const selectId = id || generatedId;\n const helperTextId = `${selectId}-helper`;\n const errorId = `${selectId}-error`;\n\n const currentVariant = error ? \"error\" : variant;\n const displayHelperText = error || helperText;\n\n return (\n <div className={cn(\"w-full\", containerClassName)}>\n {label && (\n <label\n htmlFor={selectId}\n className={cn(\n selectLabelVariants({ variant: currentVariant, required }),\n labelClassName,\n )}\n >\n {label}\n </label>\n )}\n <div className=\"relative\">\n <select\n id={selectId}\n ref={ref}\n className={cn(\n selectVariants({ variant: currentVariant, selectSize }),\n \"pr-10\", // Space for chevron icon\n className,\n )}\n aria-invalid={error ? \"true\" : \"false\"}\n aria-describedby={\n displayHelperText ? (error ? errorId : helperTextId) : undefined\n }\n {...props}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {options.map((option) => (\n <option\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n >\n {option.label}\n </option>\n ))}\n </select>\n <div className=\"pointer-events-none absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground\">\n <ChevronDown className=\"h-4 w-4\" />\n </div>\n </div>\n {displayHelperText && (\n <p\n id={error ? errorId : helperTextId}\n className={selectHelperTextVariants({ variant: currentVariant })}\n role={error ? \"alert\" : undefined}\n >\n {displayHelperText}\n </p>\n )}\n </div>\n );\n },\n);\n\nSelect.displayName = \"Select\";\n\nexport { Select };\n","/**\n * Donut Chart Utilities\n * Helper functions for SVG donut chart rendering\n */\n\nexport interface ChartSegment {\n /** Segment label */\n label: string;\n /** Segment value */\n value: number;\n /** Segment color (CSS color string) */\n color: string;\n}\n\nexport interface DonutSegmentPath {\n /** SVG path string for the segment */\n path: string;\n /** Segment data */\n segment: ChartSegment;\n}\n\n/**\n * Calculate the SVG path for a donut chart segment\n */\nexport function calculateDonutSegmentPath(\n startAngle: number,\n endAngle: number,\n radius: number,\n innerRadius: number,\n centerX: number,\n centerY: number,\n): string {\n const startRadians = ((startAngle - 90) * Math.PI) / 180;\n const endRadians = ((endAngle - 90) * Math.PI) / 180;\n\n // Calculate outer arc points\n const x1 = centerX + radius * Math.cos(startRadians);\n const y1 = centerY + radius * Math.sin(startRadians);\n const x2 = centerX + radius * Math.cos(endRadians);\n const y2 = centerY + radius * Math.sin(endRadians);\n\n // Calculate inner arc points\n const x3 = centerX + innerRadius * Math.cos(endRadians);\n const y3 = centerY + innerRadius * Math.sin(endRadians);\n const x4 = centerX + innerRadius * Math.cos(startRadians);\n const y4 = centerY + innerRadius * Math.sin(startRadians);\n\n // Determine if arc should be large (>180 degrees)\n const largeArcFlag = endAngle - startAngle > 180 ? 1 : 0;\n\n // Build SVG path\n const path = [\n `M ${x1} ${y1}`, // Move to start point on outer arc\n `A ${radius} ${radius} 0 ${largeArcFlag} 1 ${x2} ${y2}`, // Outer arc\n `L ${x3} ${y3}`, // Line to inner arc\n `A ${innerRadius} ${innerRadius} 0 ${largeArcFlag} 0 ${x4} ${y4}`, // Inner arc (reverse)\n \"Z\", // Close path\n ].join(\" \");\n\n return path;\n}\n\n/**\n * Convert chart segments to SVG paths with calculated angles\n */\nexport function generateDonutPaths(\n segments: ChartSegment[],\n radius: number,\n innerRadius: number,\n centerX: number,\n centerY: number,\n): DonutSegmentPath[] {\n // Calculate total value\n const total = segments.reduce((sum, segment) => sum + segment.value, 0);\n\n if (total === 0) {\n return [];\n }\n\n let currentAngle = 0;\n const paths: DonutSegmentPath[] = [];\n\n segments.forEach((segment) => {\n const segmentAngle = (segment.value / total) * 360;\n const startAngle = currentAngle;\n const endAngle = currentAngle + segmentAngle;\n\n const path = calculateDonutSegmentPath(\n startAngle,\n endAngle,\n radius,\n innerRadius,\n centerX,\n centerY,\n );\n\n paths.push({\n path,\n segment,\n });\n\n currentAngle = endAngle;\n });\n\n return paths;\n}\n\n/**\n * Format number with thousands separator\n */\nexport function formatNumber(value: number): string {\n return new Intl.NumberFormat(\"es-MX\").format(value);\n}\n","/**\n * Donut Chart Component\n * A customizable SVG-based donut chart for data visualization\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport {\n generateDonutPaths,\n type ChartSegment,\n} from \"../lib/donut-chart-utils\";\n\nexport interface DonutChartProps {\n /** Chart segments with labels, values, and colors */\n segments: ChartSegment[];\n /** Chart width and height in pixels */\n size?: number;\n /** Inner radius ratio (0-1, relative to outer radius) */\n innerRadiusRatio?: number;\n /** Content to display in the center of the donut */\n centerContent?: React.ReactNode;\n /** Whether to show a legend */\n showLegend?: boolean;\n /** Legend position */\n legendPosition?: \"top\" | \"bottom\" | \"left\" | \"right\";\n /** Additional class name for the container */\n className?: string;\n /** Callback when a segment is clicked */\n onSegmentClick?: (segment: ChartSegment) => void;\n /** Callback when a segment is hovered */\n onSegmentHover?: (segment: ChartSegment | null) => void;\n}\n\nconst DonutChart = React.forwardRef<HTMLDivElement, DonutChartProps>(\n (\n {\n segments,\n size = 300,\n innerRadiusRatio = 0.6,\n centerContent,\n showLegend = false,\n legendPosition = \"bottom\",\n className,\n onSegmentClick,\n onSegmentHover,\n },\n ref,\n ) => {\n const [hoveredSegment, setHoveredSegment] =\n React.useState<ChartSegment | null>(null);\n\n const centerX = size / 2;\n const centerY = size / 2;\n const strokeWidth = 2;\n const radius = size / 2 - strokeWidth;\n const innerRadius = radius * innerRadiusRatio;\n\n const paths = generateDonutPaths(\n segments,\n radius,\n innerRadius,\n centerX,\n centerY,\n );\n\n const handleSegmentHover = (segment: ChartSegment | null) => {\n setHoveredSegment(segment);\n onSegmentHover?.(segment);\n };\n\n const isFlexRow = legendPosition === \"left\" || legendPosition === \"right\";\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex gap-4\",\n isFlexRow ? \"flex-row items-center\" : \"flex-col items-center\",\n legendPosition === \"right\" && \"flex-row-reverse\",\n legendPosition === \"top\" && \"flex-col-reverse\",\n className,\n )}\n >\n <div\n className=\"relative inline-block\"\n style={{ width: size, height: size }}\n >\n <svg width={size} height={size} viewBox={`0 0 ${size} ${size}`}>\n {paths.map(({ path, segment }, index) => (\n <path\n key={`${segment.label}-${index}`}\n d={path}\n fill={segment.color}\n stroke=\"white\"\n strokeWidth={strokeWidth}\n className={cn(\n \"transition-opacity duration-200\",\n hoveredSegment && hoveredSegment !== segment && \"opacity-50\",\n onSegmentClick && \"cursor-pointer\",\n )}\n onMouseEnter={() => handleSegmentHover(segment)}\n onMouseLeave={() => handleSegmentHover(null)}\n onClick={() => onSegmentClick?.(segment)}\n />\n ))}\n </svg>\n {centerContent && (\n <div\n className=\"absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 text-center\"\n style={{ maxWidth: innerRadius * 1.8 }}\n >\n {centerContent}\n </div>\n )}\n </div>\n {showLegend && (\n <div\n className={cn(\n \"flex gap-2\",\n isFlexRow ? \"flex-col\" : \"flex-row flex-wrap justify-center\",\n )}\n >\n {segments.map((segment, index) => (\n <div\n key={`${segment.label}-${index}`}\n className={cn(\n \"flex items-center gap-2 text-sm transition-opacity duration-200\",\n hoveredSegment && hoveredSegment !== segment && \"opacity-50\",\n onSegmentClick && \"cursor-pointer\",\n )}\n onMouseEnter={() => handleSegmentHover(segment)}\n onMouseLeave={() => handleSegmentHover(null)}\n onClick={() => onSegmentClick?.(segment)}\n >\n <div\n className=\"h-3 w-3 rounded-sm flex-shrink-0\"\n style={{ backgroundColor: segment.color }}\n />\n <span className=\"text-muted-foreground\">{segment.label}</span>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n },\n);\n\nDonutChart.displayName = \"DonutChart\";\n\nexport { DonutChart };\n","/**\n * Entity utility functions\n * @module entities/entity/lib\n */\n\nimport type { Entity, EntitySort } from '../model/types';\n\n/**\n * Filter entities by category\n */\nexport function filterEntitiesByCategory(\n entities: Entity[],\n categoryId: string | null\n): Entity[] {\n if (!categoryId || categoryId === 'all') {\n return entities;\n }\n return entities.filter((entity) => entity.categoryId === categoryId);\n}\n\n/**\n * Sort entities by column and direction\n */\nexport function sortEntities(entities: Entity[], sort: EntitySort): Entity[] {\n const sorted = [...entities];\n\n sorted.sort((a, b) => {\n let aValue: string | number = '';\n let bValue: string | number = '';\n\n if (sort.column === 'title') {\n aValue = a.title.toLowerCase();\n bValue = b.title.toLowerCase();\n } else if (sort.column === 'metric') {\n // Extract numeric value from metric (e.g., \"29km\" -> 29)\n aValue = parseMetricValue(a.metricValue);\n bValue = parseMetricValue(b.metricValue);\n }\n\n if (aValue < bValue) return sort.direction === 'asc' ? -1 : 1;\n if (aValue > bValue) return sort.direction === 'asc' ? 1 : -1;\n return 0;\n });\n\n return sorted;\n}\n\n/**\n * Parse numeric value from metric string\n * Examples: \"29km\" -> 29, \"$99\" -> 99, \"4.5★\" -> 4.5\n */\nfunction parseMetricValue(metricValue?: string): number {\n if (!metricValue) return 0;\n const match = metricValue.match(/[\\d.]+/);\n return match ? parseFloat(match[0]) : 0;\n}\n\n/**\n * Count entities by category\n */\nexport function countEntitiesByCategory(\n entities: Entity[],\n categoryId: string\n): number {\n if (categoryId === 'all') return entities.length;\n return entities.filter((entity) => entity.categoryId === categoryId).length;\n}\n","/**\n * Entity filtering hook\n * @module features/entity-filtering\n */\n\nimport { useState, useMemo, useCallback } from \"react\";\nimport type { Entity, EntityCategory, EntitySort } from \"../../../entities/entity\";\nimport {\n filterEntitiesByCategory,\n sortEntities,\n countEntitiesByCategory,\n} from \"../../../entities/entity\";\n\nexport interface EntityFilterOptions {\n /** Initial category filter */\n initialCategory?: string | null;\n /** Initial sort configuration */\n initialSort?: EntitySort;\n /** Enable search functionality */\n enableSearch?: boolean;\n}\n\nexport interface UseEntityFilterReturn {\n /** Currently active category filter */\n activeCategory: string | null;\n /** Set active category */\n setActiveCategory: (categoryId: string | null) => void;\n /** Current sort configuration */\n sort: EntitySort | null;\n /** Set sort configuration */\n setSort: (sort: EntitySort | null) => void;\n /** Search query */\n searchQuery: string;\n /** Set search query */\n setSearchQuery: (query: string) => void;\n /** Filtered entities */\n filteredEntities: Entity[];\n /** Count entities by category */\n getCategoryCount: (categoryId: string) => number;\n /** Reset all filters */\n resetFilters: () => void;\n}\n\n/**\n * Hook for managing entity filtering, sorting, and search\n */\nexport function useEntityFilter(\n entities: Entity[],\n _categories: EntityCategory[],\n options: EntityFilterOptions = {}\n): UseEntityFilterReturn {\n const {\n initialCategory = null,\n initialSort = null,\n enableSearch = false,\n } = options;\n\n const [activeCategory, setActiveCategory] = useState<string | null>(\n initialCategory\n );\n const [sort, setSort] = useState<EntitySort | null>(initialSort);\n const [searchQuery, setSearchQuery] = useState(\"\");\n\n // Filter by category\n const categoryFilteredEntities = useMemo(() => {\n return filterEntitiesByCategory(entities, activeCategory);\n }, [entities, activeCategory]);\n\n // Filter by search query\n const searchFilteredEntities = useMemo(() => {\n if (!enableSearch || !searchQuery.trim()) {\n return categoryFilteredEntities;\n }\n\n const query = searchQuery.toLowerCase();\n return categoryFilteredEntities.filter(\n (entity) =>\n entity.title.toLowerCase().includes(query) ||\n entity.subtitle?.toLowerCase().includes(query)\n );\n }, [categoryFilteredEntities, searchQuery, enableSearch]);\n\n // Sort entities\n const filteredEntities = useMemo(() => {\n if (!sort) {\n return searchFilteredEntities;\n }\n return sortEntities(searchFilteredEntities, sort);\n }, [searchFilteredEntities, sort]);\n\n // Count entities by category\n const getCategoryCount = useCallback(\n (categoryId: string) => {\n return countEntitiesByCategory(entities, categoryId);\n },\n [entities]\n );\n\n // Reset all filters\n const resetFilters = useCallback(() => {\n setActiveCategory(initialCategory);\n setSort(initialSort);\n setSearchQuery(\"\");\n }, [initialCategory, initialSort]);\n\n return {\n activeCategory,\n setActiveCategory,\n sort,\n setSort,\n searchQuery,\n setSearchQuery,\n filteredEntities,\n getCategoryCount,\n resetFilters,\n };\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\n\nexport const chipVariants = cva(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-full text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n outline:\n \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n selected:\n \"bg-primary text-primary-foreground hover:bg-primary/90 ring-2 ring-primary ring-offset-2\",\n },\n size: {\n default: \"h-8 px-4 py-1.5\",\n sm: \"h-7 px-3 py-1 text-xs\",\n lg: \"h-9 px-5 py-2\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\nexport type ChipVariantProps = VariantProps<typeof chipVariants>;\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { chipVariants, type ChipVariantProps } from \"./chip-variants\";\n\nexport interface ChipProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n ChipVariantProps {\n /** Icon to display before the label */\n icon?: string | React.ReactNode;\n /** Whether the chip is selected/active */\n selected?: boolean;\n /** Whether the chip can be dismissed */\n dismissible?: boolean;\n /** Callback when chip is dismissed */\n onDismiss?: () => void;\n}\n\nconst Chip = React.forwardRef<HTMLButtonElement, ChipProps>(\n (\n {\n className,\n variant,\n size,\n icon,\n selected,\n dismissible,\n onDismiss,\n children,\n disabled,\n ...props\n },\n ref\n ) => {\n const effectiveVariant = selected ? \"selected\" : variant;\n\n return (\n <button\n type=\"button\"\n className={cn(chipVariants({ variant: effectiveVariant, size, className }))}\n ref={ref}\n disabled={disabled}\n aria-disabled={disabled ? \"true\" : undefined}\n aria-pressed={selected ? \"true\" : \"false\"}\n {...props}\n >\n {icon && (\n <span className=\"mr-1.5 inline-flex items-center\" aria-hidden=\"true\">\n {typeof icon === \"string\" ? icon : icon}\n </span>\n )}\n <span>{children}</span>\n {dismissible && onDismiss && (\n <button\n type=\"button\"\n className=\"ml-1.5 inline-flex items-center hover:opacity-70\"\n onClick={(e) => {\n e.stopPropagation();\n onDismiss();\n }}\n aria-label=\"Remove\"\n >\n ×\n </button>\n )}\n </button>\n );\n }\n);\nChip.displayName = \"Chip\";\n\nexport { Chip };\n","/**\n * Category Chips Component\n * Reusable category filter UI\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport { Chip } from \"../../../shared/ui/chip\";\nimport type { EntityCategory } from \"../../../entities/entity\";\n\nexport interface CategoryChipsProps {\n /** Available categories */\n categories: EntityCategory[];\n /** Currently active category */\n activeCategory?: string | null;\n /** Callback when category changes */\n onCategoryChange: (categoryId: string | null) => void;\n /** Show count badges on chips */\n showCount?: boolean;\n /** Function to get count for each category */\n getCategoryCount?: (categoryId: string) => number;\n /** CSS class name */\n className?: string;\n}\n\nconst CategoryChips = React.forwardRef<HTMLDivElement, CategoryChipsProps>(\n (\n {\n categories,\n activeCategory,\n onCategoryChange,\n showCount,\n getCategoryCount,\n className,\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n role=\"tablist\"\n aria-label=\"Filter by category\"\n className={cn(\n \"flex flex-wrap gap-2 overflow-x-auto pb-2\",\n className\n )}\n >\n {categories.map((category) => {\n const isActive = activeCategory === category.id;\n const count = showCount && getCategoryCount\n ? getCategoryCount(category.id)\n : undefined;\n\n return (\n <Chip\n key={category.id}\n role=\"tab\"\n aria-selected={isActive}\n aria-controls={`entities-panel-${category.id}`}\n selected={isActive}\n variant={isActive ? \"selected\" : \"outline\"}\n icon={\n typeof category.icon === \"string\"\n ? category.icon\n : category.icon\n ? React.createElement(category.icon)\n : undefined\n }\n onClick={() => onCategoryChange(isActive ? null : category.id)}\n >\n {category.label}\n {count !== undefined && (\n <span className=\"ml-1.5 opacity-70\">({count})</span>\n )}\n </Chip>\n );\n })}\n </div>\n );\n }\n);\nCategoryChips.displayName = \"CategoryChips\";\n\nexport { CategoryChips };\n","/**\n * PropertyCard Widget\n * @layer widgets\n * @description Composite component for displaying property cards\n */\nimport React, { useState } from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport {\n Heart,\n Bed,\n Bath,\n Car,\n Maximize,\n ChevronLeft,\n ChevronRight,\n MapPin,\n} from \"lucide-react\";\nimport { Button } from \"../../../features/button\";\nimport type {\n Property,\n PropertyTransactionType,\n TransactionType,\n BadgeVariant,\n} from \"../../../entities/property\";\n\nexport interface PropertyCardProps {\n property: Property;\n className?: string;\n onLike?: (propertyId: string, isLiked: boolean) => void;\n onImageClick?: (imageIndex: number, propertyId: string) => void;\n showLikeButton?: boolean;\n showNavigation?: boolean;\n imageAspectRatio?: '4/3' | '16/9' | '1/1';\n variant?: 'default' | 'compact';\n badgeColors?: Record<string, string>;\n}\n\nconst getTransactionBadgeClasses = (\n transaction: PropertyTransactionType,\n customColor?: string\n): string => {\n // If custom color is provided, return empty string (will use inline style)\n if (customColor) {\n return \"text-accent\";\n }\n\n // Use the variant if provided, otherwise map from type\n const variant = transaction.variant || getDefaultVariant(transaction.type);\n\n switch (variant) {\n case \"primary\":\n return \"bg-primary text-primary-foreground\";\n case \"secondary\":\n return \"bg-secondary text-secondary-foreground\";\n case \"success\":\n return \"bg-success text-success-foreground\";\n case \"warning\":\n return \"bg-warning text-warning-foreground\";\n case \"error\":\n return \"bg-error text-error-foreground\";\n case \"info\":\n return \"bg-info text-info-foreground\";\n default:\n return \"bg-secondary text-secondary-foreground\";\n }\n};\n\nconst getDefaultVariant = (type: TransactionType): BadgeVariant => {\n switch (type) {\n case \"Venta\":\n return \"primary\";\n case \"Desarrollo\":\n return \"success\";\n case \"Renta\":\n return \"info\";\n case \"Remate\":\n return \"warning\";\n default:\n return \"secondary\";\n }\n};\n\nexport const PropertyCard: React.FC<PropertyCardProps> = ({\n property,\n className,\n onLike,\n onImageClick,\n showLikeButton = true,\n showNavigation = true,\n variant = 'default',\n badgeColors,\n}) => {\n const [currentImageIndex, setCurrentImageIndex] = useState(0);\n const [isLiked, setIsLiked] = useState(false);\n\n const nextImage = () => {\n setCurrentImageIndex((prev) =>\n prev === property.images.length - 1 ? 0 : prev + 1\n );\n };\n\n const prevImage = () => {\n setCurrentImageIndex((prev) =>\n prev === 0 ? property.images.length - 1 : prev - 1\n );\n };\n\n const handleLike = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n const newLikedState = !isLiked;\n setIsLiked(newLikedState);\n onLike?.(property.id, newLikedState);\n };\n\n const handleImageClick = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n onImageClick?.(currentImageIndex, property.id);\n };\n\n const formatPrice = (amount: number | undefined, currency: string | undefined) => {\n if (!amount || !currency) return \"Price not available\";\n return `$${amount.toLocaleString()} ${currency}`;\n };\n\n const isCompact = variant === 'compact';\n\n const cardClasses = cn(\n \"relative overflow-hidden bg-card shadow-md transition-all duration-300 ease-out cursor-pointer\",\n isCompact ? \"rounded-xl hover:shadow-lg\" : \"rounded-2xl hover:-translate-y-1 hover:shadow-xl\",\n isCompact && \"border px-4\",\n className\n );\n\n const imageContainerClasses = cn(\n \"relative overflow-hidden\",\n isCompact && \"rounded-xl px-4 shadow-md bg-primary-foreground\"\n );\n\n const imageClasses = cn(\n \"w-full h-full object-cover\",\n !isCompact && \"transition-transform duration-300 hover:scale-105\"\n );\n\n const badgesClasses = cn(\n \"absolute z-10 flex flex-wrap gap-2\",\n isCompact ? \"top-3 left-3\" : \"top-4 left-4\"\n );\n\n const badgeClasses = cn(\n \"text-xs font-semibold\",\n isCompact ? \"rounded-full px-3 py-1\" : \"px-2 py-1 rounded-lg font-medium uppercase tracking-wide\"\n );\n\n const likeButtonClasses = cn(\n \"absolute z-10 rounded-full cursor-pointer transition-all duration-200\",\n isCompact\n ? \"top-3 right-3 p-1 shadow-md\"\n : \"top-4 right-4 bg-background/90 backdrop-blur-sm border border-border/20 text-foreground w-10 h-10 flex items-center justify-center hover:bg-background hover:scale-105\"\n );\n\n const navButtonClasses = cn(\n \"absolute top-1/2 -translate-y-1/2 z-10 bg-background/90 backdrop-blur-sm border border-border/20 text-foreground w-10 h-10 rounded-full p-0 flex items-center justify-center cursor-pointer transition-all duration-200 hover:bg-background hover:scale-105\"\n );\n\n const dotsClasses = cn(\n \"absolute bottom-4 left-1/2 -translate-x-1/2 flex gap-1 z-10\"\n );\n\n const dotClasses = cn(\n \"w-2 h-2 rounded-full border-none cursor-pointer transition-all duration-200 hover:scale-120\"\n );\n\n const infoClasses = cn(isCompact ? \"p-2\" : \"p-6\");\n\n const titleClasses = cn(\n \"font-semibold text-foreground mb-2 line-clamp-2 leading-tight\",\n isCompact ? \"text-base\" : \"text-lg font-bold\"\n );\n\n const priceClasses = cn(\n \"font-bold text-primary mb-2\",\n isCompact ? \"text-lg\" : \"text-xl\"\n );\n\n const locationClasses = cn(\n \"text-muted-foreground mb-4\",\n isCompact ? \"text-sm flex items-center gap-1\" : \"text-base\"\n );\n\n const featuresClasses = cn(\n \"flex items-center mb-4\",\n isCompact ? \"justify-between mt-3\" : \"gap-4\"\n );\n\n const featureItemClasses = cn(\n \"flex items-center gap-1 text-muted-foreground\",\n isCompact ? \"text-sm\" : \"text-sm\"\n );\n\n const amenitiesClasses = cn(\n \"text-sm text-muted-foreground line-clamp-2\",\n isCompact && \"mt-2\"\n );\n\n const CardContent = (\n <div className={cardClasses}>\n {/* Image Carousel */}\n <div className={cn(imageContainerClasses, isCompact ? \"h-52\" : \"aspect-[4/3]\")}>\n {isCompact ? (\n <div className=\"text-foreground flex h-52 w-full items-center justify-center rounded-xl text-sm\">\n Imagen no disponible\n </div>\n ) : (\n <img\n src={property.images[currentImageIndex]}\n alt={property.title}\n className={imageClasses}\n onClick={onImageClick ? handleImageClick : undefined}\n />\n )}\n\n {/* Transaction Type Badges */}\n <div className={badgesClasses}>\n {property.transactionTypes.map((transaction, index) => {\n const customColor = badgeColors?.[transaction.type];\n return (\n <span\n key={index}\n className={cn(\n badgeClasses,\n getTransactionBadgeClasses(transaction, customColor)\n )}\n style={customColor ? { backgroundColor: customColor } : undefined}\n >\n {transaction.type}\n </span>\n );\n })}\n </div>\n\n {/* Like Button */}\n {showLikeButton && (\n <button\n onClick={handleLike}\n className={likeButtonClasses}\n aria-label={isLiked ? \"Unlike property\" : \"Like property\"}\n >\n {isCompact ? (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill={isLiked ? \"red\" : \"none\"}\n viewBox=\"0 0 24 24\"\n strokeWidth={2}\n stroke={isLiked ? \"red\" : \"currentColor\"}\n className=\"h-5 w-5\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M21 8.25c0-2.485-2.099-4.5-4.688-4.5-1.935 0-3.597 1.126-4.312 2.733C11.285 4.876 9.623 3.75 7.688 3.75 5.099 3.75 3 5.765 3 8.25c0 7.22 9 12 9 12s9-4.78 9-12z\"\n />\n </svg>\n ) : (\n <Heart\n size={20}\n fill={isLiked ? \"currentColor\" : \"none\"}\n className={isLiked ? \"text-destructive\" : \"\"}\n />\n )}\n </button>\n )}\n\n {/* Carousel Navigation */}\n {!isCompact && showNavigation && property.images.length > 1 && (\n <>\n <Button\n onClick={(e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n prevImage();\n }}\n className={cn(navButtonClasses, \"left-4\")}\n aria-label=\"Previous image\"\n >\n <ChevronLeft size={20} />\n </Button>\n <Button\n onClick={(e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n nextImage();\n }}\n className={cn(navButtonClasses, \"right-4\")}\n aria-label=\"Next image\"\n >\n <ChevronRight size={20} />\n </Button>\n\n {/* Dots Indicator */}\n <div className={dotsClasses}>\n {property.images.map((_, index) => (\n <button\n key={index}\n className={cn(\n dotClasses,\n index === currentImageIndex\n ? \"bg-background\"\n : \"bg-background/50\"\n )}\n onClick={(e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setCurrentImageIndex(index);\n }}\n aria-label={`Go to image ${index + 1}`}\n aria-current={index === currentImageIndex}\n />\n ))}\n </div>\n </>\n )}\n </div>\n\n {/* Property Information */}\n <div className={infoClasses}>\n {/* Title */}\n <h3 className={titleClasses}>{property.title}</h3>\n\n {/* Price */}\n <p className={priceClasses}>\n {formatPrice(property.price?.amount, property.price?.currency)}\n </p>\n\n {/* Location */}\n <p className={locationClasses}>\n {isCompact && <MapPin size={14} />}\n {property.location.city}, {property.location.state}\n </p>\n\n {/* Features */}\n <div className={featuresClasses}>\n <div className={featureItemClasses}>\n <Bed size={16} />\n <span>{property.features.bedrooms}</span>\n </div>\n <div className={featureItemClasses}>\n <Bath size={16} />\n <span>{property.features.bathrooms}</span>\n </div>\n <div className={featureItemClasses}>\n <Car size={16} />\n <span>{property.features.parking}</span>\n </div>\n <div className={featureItemClasses}>\n <Maximize size={16} />\n <span>{property.features.area} m²</span>\n </div>\n </div>\n\n {/* Amenities */}\n {property.amenities.length > 0 && (\n <p className={amenitiesClasses}>{property.amenities.join(\", \")}</p>\n )}\n </div>\n </div>\n );\n\n if (property.href) {\n return (\n <a href={property.href} className=\"no-underline text-inherit\">\n {CardContent}\n </a>\n );\n }\n\n return CardContent;\n};\n","/**\n * PropertyGallery Widget\n * @layer widgets\n * @description Image gallery widget for property listings\n */\nimport React from \"react\";\nimport { Grid } from \"lucide-react\";\nimport { cn } from \"../../../shared/lib/utils\";\n\nexport interface PropertyGalleryProps {\n images: string[];\n transactionType?: string;\n totalPhotos?: number;\n onViewAllClick?: () => void;\n onImageClick?: (index: number) => void;\n className?: string;\n}\n\nexport const PropertyGallery = React.forwardRef<\n HTMLDivElement,\n PropertyGalleryProps\n>(\n (\n {\n images,\n transactionType,\n totalPhotos,\n onViewAllClick,\n onImageClick,\n className,\n },\n ref\n ) => {\n // Ensure we have at least 5 images to display (or show available ones)\n const displayImages = images.slice(0, 5);\n\n const handleImageClick = (index: number) => {\n onImageClick?.(index);\n };\n\n return (\n <div\n ref={ref}\n className={cn(\"w-full h-full grid grid-cols-2 gap-2\", className)}\n >\n {/* Main large image - left side, spans 2 rows */}\n <div className=\"relative col-span-1 row-span-2 rounded-2xl overflow-hidden group cursor-pointer\">\n {displayImages[0] ? (\n <>\n <img\n src={displayImages[0]}\n alt=\"Property main view\"\n className=\"w-full h-full object-cover transition-transform duration-300 group-hover:scale-105\"\n onClick={() => handleImageClick(0)}\n />\n {/* Transaction Type Tag */}\n {transactionType && (\n <div className=\"absolute top-4 left-4 bg-white rounded-full px-4 py-2 shadow-md\">\n <span className=\"text-sm font-medium text-foreground\">\n {transactionType}\n </span>\n </div>\n )}\n </>\n ) : (\n <div className=\"w-full h-full bg-muted flex items-center justify-center\">\n <span className=\"text-muted-foreground\">No image</span>\n </div>\n )}\n </div>\n\n {/* Top right image */}\n <div className=\"relative col-span-1 row-span-1 rounded-2xl overflow-hidden group cursor-pointer\">\n {displayImages[1] ? (\n <img\n src={displayImages[1]}\n alt=\"Property view 2\"\n className=\"w-full h-full object-cover transition-transform duration-300 group-hover:scale-105\"\n onClick={() => handleImageClick(1)}\n />\n ) : (\n <div className=\"w-full h-full bg-muted\" />\n )}\n </div>\n\n {/* Middle right image */}\n <div className=\"relative col-span-1 row-span-1 rounded-2xl overflow-hidden group cursor-pointer\">\n {displayImages[2] ? (\n <img\n src={displayImages[2]}\n alt=\"Property view 3\"\n className=\"w-full h-full object-cover transition-transform duration-300 group-hover:scale-105\"\n onClick={() => handleImageClick(2)}\n />\n ) : (\n <div className=\"w-full h-full bg-muted\" />\n )}\n </div>\n\n {/* Bottom left (of right side) image */}\n <div className=\"relative col-span-1 row-span-1 rounded-2xl overflow-hidden group cursor-pointer\">\n {displayImages[3] ? (\n <img\n src={displayImages[3]}\n alt=\"Property view 4\"\n className=\"w-full h-full object-cover transition-transform duration-300 group-hover:scale-105\"\n onClick={() => handleImageClick(3)}\n />\n ) : (\n <div className=\"w-full h-full bg-muted\" />\n )}\n </div>\n\n {/* Bottom right image with \"View All Photos\" button */}\n <div className=\"relative col-span-1 row-span-1 rounded-2xl overflow-hidden group cursor-pointer\">\n {displayImages[4] ? (\n <>\n <img\n src={displayImages[4]}\n alt=\"Property view 5\"\n className=\"w-full h-full object-cover transition-transform duration-300 group-hover:scale-105\"\n onClick={() => handleImageClick(4)}\n />\n {/* View All Photos Button */}\n {totalPhotos && totalPhotos > 5 && (\n <div className=\"absolute bottom-4 right-4\">\n <button\n onClick={(e) => {\n e.stopPropagation();\n onViewAllClick?.();\n }}\n className=\"flex items-center gap-2 bg-white rounded-full px-4 py-2 shadow-md hover:shadow-lg transition-all duration-200 hover:scale-105\"\n >\n <Grid className=\"w-4 h-4 text-foreground\" />\n <span className=\"text-sm font-medium text-foreground\">\n Ver las {totalPhotos} fotos\n </span>\n </button>\n </div>\n )}\n </>\n ) : (\n <div className=\"w-full h-full bg-muted\" />\n )}\n </div>\n </div>\n );\n }\n);\n\nPropertyGallery.displayName = \"PropertyGallery\";\n","/**\n * EntityDirectory Header Subcomponent\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport { Text } from \"../../../features/text\";\n\nexport interface EntityDirectoryHeaderProps {\n /** Header title */\n title: string;\n /** Optional description */\n description?: string;\n /** CSS class name */\n className?: string;\n}\n\nconst EntityDirectoryHeader = React.forwardRef<\n HTMLDivElement,\n EntityDirectoryHeaderProps\n>(({ title, description, className }, ref) => {\n return (\n <div ref={ref} className={cn(\"space-y-1.5\", className)}>\n <Text variant=\"h2\" className=\"font-bold\">\n {title}\n </Text>\n {description && (\n <Text variant=\"body\" className=\"text-muted-foreground\">\n {description}\n </Text>\n )}\n </div>\n );\n});\nEntityDirectoryHeader.displayName = \"EntityDirectoryHeader\";\n\nexport { EntityDirectoryHeader };\n","/**\n * EntityDirectory List Item Subcomponent\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport { Text } from \"../../../features/text\";\nimport { Chip } from \"../../../shared/ui/chip\";\nimport type { Entity, EntityCategory } from \"../../../entities/entity\";\n\nexport interface EntityDirectoryListItemProps {\n /** Entity to display */\n entity: Entity;\n /** All categories for lookup */\n categories?: EntityCategory[];\n /** Show icon column */\n showIcon?: boolean;\n /** Show category badge */\n showCategoryBadge?: boolean;\n /** Show metric column */\n showMetric?: boolean;\n /** Compact mode */\n compact?: boolean;\n /** CSS class name */\n className?: string;\n}\n\nconst EntityDirectoryListItem = React.forwardRef<\n HTMLDivElement,\n EntityDirectoryListItemProps\n>(\n (\n {\n entity,\n categories,\n showIcon = true,\n showCategoryBadge = true,\n showMetric = true,\n compact = false,\n className,\n },\n ref\n ) => {\n const category = categories?.find((cat) => cat.id === entity.categoryId);\n const isClickable = !!entity.onClick;\n\n const handleClick = () => {\n if (entity.onClick && !entity.disabled) {\n entity.onClick();\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (isClickable && (e.key === \"Enter\" || e.key === \" \")) {\n e.preventDefault();\n handleClick();\n }\n };\n\n return (\n <div\n ref={ref}\n role={isClickable ? \"button\" : \"listitem\"}\n tabIndex={isClickable && !entity.disabled ? 0 : undefined}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n aria-disabled={entity.disabled}\n className={cn(\n \"flex items-center gap-4 border-b border-border transition-colors\",\n compact ? \"p-3\" : \"p-4\",\n isClickable &&\n !entity.disabled &&\n \"cursor-pointer hover:bg-accent/50 focus-visible:bg-accent/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n entity.disabled && \"opacity-50 cursor-not-allowed\",\n className\n )}\n >\n {/* Icon */}\n {showIcon && (\n <div\n className={cn(\n \"flex-shrink-0 flex items-center justify-center bg-muted rounded-full\",\n compact ? \"w-8 h-8 text-lg\" : \"w-10 h-10 text-xl\"\n )}\n aria-hidden=\"true\"\n >\n {typeof entity.icon === \"string\" ? (\n <span>{entity.icon}</span>\n ) : entity.icon ? (\n React.createElement(entity.icon)\n ) : (\n <span className=\"text-muted-foreground\">•</span>\n )}\n </div>\n )}\n\n {/* Title and Subtitle */}\n <div className=\"flex-1 min-w-0\">\n <Text\n variant={compact ? \"body-sm\" : \"body\"}\n className=\"font-semibold truncate\"\n >\n {entity.title}\n </Text>\n {entity.subtitle && (\n <Text\n variant={compact ? \"caption\" : \"body-sm\"}\n className=\"text-muted-foreground truncate\"\n >\n {entity.subtitle}\n </Text>\n )}\n </div>\n\n {/* Category Badge */}\n {showCategoryBadge && category && (\n <Chip\n variant=\"secondary\"\n size={compact ? \"sm\" : \"default\"}\n className=\"flex-shrink-0 bg-foreground text-background hover:bg-foreground/90\"\n aria-label={`Category: ${category.label}`}\n >\n {category.label}\n </Chip>\n )}\n\n {/* Metric */}\n {showMetric && entity.metricValue && (\n <div className=\"flex-shrink-0 text-right min-w-[4rem]\">\n <Text\n variant={compact ? \"body-sm\" : \"body\"}\n className=\"font-medium\"\n >\n {entity.metricValue}\n </Text>\n {entity.metricLabel && (\n <Text variant=\"caption\" className=\"text-muted-foreground\">\n {entity.metricLabel}\n </Text>\n )}\n </div>\n )}\n </div>\n );\n }\n);\nEntityDirectoryListItem.displayName = \"EntityDirectoryListItem\";\n\nexport { EntityDirectoryListItem };\n","/**\n * EntityDirectory Table Header Subcomponent\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport type { EntitySort } from \"../../../entities/entity\";\n\nexport interface TableHeaderColumn {\n /** Column key */\n key: \"title\" | \"category\" | \"metric\";\n /** Column label */\n label: string;\n /** Is sortable */\n sortable?: boolean;\n /** Width */\n width?: string;\n /** Alignment */\n align?: \"left\" | \"center\" | \"right\";\n}\n\nexport interface EntityDirectoryTableHeaderProps {\n /** Columns to display */\n columns: TableHeaderColumn[];\n /** Show icon column */\n showIcon?: boolean;\n /** Current sort state */\n sort?: EntitySort | null;\n /** Sort change callback */\n onSortChange?: (sort: EntitySort) => void;\n /** Compact mode */\n compact?: boolean;\n /** CSS class name */\n className?: string;\n}\n\nconst EntityDirectoryTableHeader = React.forwardRef<\n HTMLDivElement,\n EntityDirectoryTableHeaderProps\n>(({ columns, showIcon, sort, onSortChange, compact, className }, ref) => {\n const handleSort = (columnKey: \"title\" | \"metric\") => {\n if (!onSortChange) return;\n\n const newDirection =\n sort?.column === columnKey && sort?.direction === \"asc\" ? \"desc\" : \"asc\";\n\n onSortChange({\n column: columnKey,\n direction: newDirection,\n });\n };\n\n const handleSortClick = (columnKey: \"title\" | \"metric\") => {\n handleSort(columnKey);\n };\n\n const handleSortKeyDown = (\n e: React.KeyboardEvent,\n columnKey: \"title\" | \"metric\"\n ) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleSort(columnKey);\n }\n };\n\n const getSortIcon = (columnKey: string) => {\n if (columnKey !== \"title\" && columnKey !== \"metric\") return null;\n if (!sort || sort.column !== columnKey) {\n return (\n <span className=\"ml-1 text-muted-foreground opacity-50\" aria-hidden=\"true\">\n ⇅\n </span>\n );\n }\n\n return (\n <span className=\"ml-1\" aria-hidden=\"true\">\n {sort.direction === \"asc\" ? \"↑\" : \"↓\"}\n </span>\n );\n };\n\n return (\n <div\n ref={ref}\n role=\"row\"\n className={cn(\n \"flex items-center gap-4 bg-background border-b border-border font-medium text-sm text-muted-foreground\",\n compact ? \"px-3 py-2\" : \"px-4 py-3\",\n className\n )}\n >\n {/* Icon column spacer */}\n {showIcon && <div className={compact ? \"w-8\" : \"w-10\"} />}\n\n {columns.map((column) => {\n const isSortable =\n column.sortable && (column.key === \"title\" || column.key === \"metric\");\n const isActive = sort?.column === column.key;\n\n return (\n <div\n key={column.key}\n role=\"columnheader\"\n aria-sort={\n isActive\n ? sort?.direction === \"asc\"\n ? \"ascending\"\n : \"descending\"\n : undefined\n }\n className={cn(\n column.key === \"title\" && \"flex-1\",\n column.key === \"category\" && \"w-40\",\n column.key === \"metric\" && \"w-24 text-right\",\n column.align === \"center\" && \"text-center\",\n column.align === \"right\" && \"text-right\",\n isSortable &&\n \"cursor-pointer hover:text-foreground transition-colors select-none\",\n isActive && \"text-foreground\"\n )}\n style={column.width ? { width: column.width } : undefined}\n onClick={\n isSortable && (column.key === \"title\" || column.key === \"metric\")\n ? () => handleSortClick(column.key as \"title\" | \"metric\")\n : undefined\n }\n tabIndex={isSortable ? 0 : undefined}\n onKeyDown={\n isSortable && (column.key === \"title\" || column.key === \"metric\")\n ? (e) => handleSortKeyDown(e, column.key as \"title\" | \"metric\")\n : undefined\n }\n >\n {column.label}\n {isSortable && getSortIcon(column.key)}\n </div>\n );\n })}\n </div>\n );\n});\nEntityDirectoryTableHeader.displayName = \"EntityDirectoryTableHeader\";\n\nexport { EntityDirectoryTableHeader };\n","/**\n * EntityDirectory List Subcomponent\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport { EntityDirectoryListItem } from \"./list-item\";\nimport { EntityDirectoryTableHeader } from \"./table-header\";\nimport type { Entity, EntityCategory, EntitySort } from \"../../../entities/entity\";\n\nexport interface EntityDirectoryListProps {\n /** Entities to display */\n entities: Entity[];\n /** All categories for lookup */\n categories?: EntityCategory[];\n /** Show icon column */\n showIcons?: boolean;\n /** Show category badges */\n showCategoryBadges?: boolean;\n /** Show metric column */\n showMetric?: boolean;\n /** Metric column label */\n metricLabel?: string;\n /** Enable sorting */\n sortable?: boolean;\n /** Current sort state */\n sort?: EntitySort | null;\n /** Sort change callback */\n onSortChange?: (sort: EntitySort) => void;\n /** Compact mode */\n compact?: boolean;\n /** Custom item renderer */\n renderItem?: (entity: Entity) => React.ReactNode;\n /** CSS class name */\n className?: string;\n}\n\nconst EntityDirectoryList = React.forwardRef<\n HTMLDivElement,\n EntityDirectoryListProps\n>(\n (\n {\n entities,\n categories,\n showIcons = true,\n showCategoryBadges = true,\n showMetric = true,\n metricLabel,\n sortable = false,\n sort,\n onSortChange,\n compact = false,\n renderItem,\n className,\n },\n ref\n ) => {\n const columns = [\n {\n key: \"title\" as const,\n label: metricLabel ? \"Nombre\" : \"Name\",\n sortable: sortable,\n },\n ...(showCategoryBadges\n ? [{ key: \"category\" as const, label: \"Categoría\", sortable: false }]\n : []),\n ...(showMetric && metricLabel\n ? [\n {\n key: \"metric\" as const,\n label: metricLabel,\n sortable: sortable,\n align: \"right\" as const,\n },\n ]\n : []),\n ];\n\n return (\n <div\n ref={ref}\n role=\"table\"\n aria-label=\"Entity directory\"\n className={cn(\"border border-border rounded-lg overflow-hidden\", className)}\n >\n {/* Table Header */}\n <EntityDirectoryTableHeader\n columns={columns}\n showIcon={showIcons}\n sort={sort}\n onSortChange={onSortChange}\n compact={compact}\n />\n\n {/* List Items */}\n <div role=\"rowgroup\">\n {entities.map((entity) =>\n renderItem ? (\n <React.Fragment key={entity.id}>{renderItem(entity)}</React.Fragment>\n ) : (\n <EntityDirectoryListItem\n key={entity.id}\n entity={entity}\n categories={categories}\n showIcon={showIcons}\n showCategoryBadge={showCategoryBadges}\n showMetric={showMetric}\n compact={compact}\n />\n )\n )}\n </div>\n </div>\n );\n }\n);\nEntityDirectoryList.displayName = \"EntityDirectoryList\";\n\nexport { EntityDirectoryList };\n","/**\n * EntityDirectory Empty State Subcomponent\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport { Text } from \"../../../features/text\";\nimport { Button } from \"../../../features/button\";\n\nexport interface EntityDirectoryEmptyStateProps {\n /** Empty state message */\n message?: string;\n /** Optional icon */\n icon?: React.ReactNode;\n /** Optional action */\n action?: {\n label: string;\n onClick: () => void;\n };\n /** CSS class name */\n className?: string;\n}\n\nconst EntityDirectoryEmptyState = React.forwardRef<\n HTMLDivElement,\n EntityDirectoryEmptyStateProps\n>(({ message = \"No entities found\", icon, action, className }, ref) => {\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-live=\"polite\"\n className={cn(\n \"flex flex-col items-center justify-center py-12 px-4 text-center\",\n className\n )}\n >\n {icon && (\n <div className=\"mb-4 text-4xl opacity-50\" aria-hidden=\"true\">\n {icon}\n </div>\n )}\n <Text variant=\"body-lg\" className=\"text-muted-foreground mb-4\">\n {message}\n </Text>\n {action && (\n <Button variant=\"outline\" onClick={action.onClick}>\n {action.label}\n </Button>\n )}\n </div>\n );\n});\nEntityDirectoryEmptyState.displayName = \"EntityDirectoryEmptyState\";\n\nexport { EntityDirectoryEmptyState };\n","/**\n * EntityDirectory Error State Subcomponent\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport { Text } from \"../../../features/text\";\nimport { Button } from \"../../../features/button\";\n\nexport interface EntityDirectoryErrorStateProps {\n /** Error message */\n error: string | Error;\n /** Optional retry callback */\n onRetry?: () => void;\n /** CSS class name */\n className?: string;\n}\n\nconst EntityDirectoryErrorState = React.forwardRef<\n HTMLDivElement,\n EntityDirectoryErrorStateProps\n>(({ error, onRetry, className }, ref) => {\n const errorMessage = typeof error === \"string\" ? error : error.message;\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n aria-live=\"assertive\"\n className={cn(\n \"flex flex-col items-center justify-center py-12 px-4 text-center\",\n className\n )}\n >\n <div className=\"mb-4 text-4xl\" aria-hidden=\"true\">\n ⚠️\n </div>\n <Text variant=\"body-lg\" className=\"text-destructive mb-2 font-semibold\">\n Error\n </Text>\n <Text variant=\"body\" className=\"text-muted-foreground mb-4\">\n {errorMessage}\n </Text>\n {onRetry && (\n <Button variant=\"outline\" onClick={onRetry}>\n Try Again\n </Button>\n )}\n </div>\n );\n});\nEntityDirectoryErrorState.displayName = \"EntityDirectoryErrorState\";\n\nexport { EntityDirectoryErrorState };\n","/**\n * EntityDirectory Loading State Subcomponent\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\n\nexport interface EntityDirectoryLoadingStateProps {\n /** Number of skeleton rows to display */\n rows?: number;\n /** CSS class name */\n className?: string;\n}\n\nconst EntityDirectoryLoadingState = React.forwardRef<\n HTMLDivElement,\n EntityDirectoryLoadingStateProps\n>(({ rows = 5, className }, ref) => {\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-live=\"polite\"\n aria-label=\"Loading entities\"\n className={cn(\"space-y-3\", className)}\n >\n {Array.from({ length: rows }).map((_, index) => (\n <div\n key={index}\n className=\"flex items-center gap-4 p-4 border border-border rounded-lg animate-pulse\"\n >\n {/* Icon skeleton */}\n <div className=\"w-10 h-10 bg-muted rounded-full flex-shrink-0\" />\n\n {/* Content skeleton */}\n <div className=\"flex-1 space-y-2\">\n <div className=\"h-4 bg-muted rounded w-1/3\" />\n <div className=\"h-3 bg-muted rounded w-1/2\" />\n </div>\n\n {/* Category badge skeleton */}\n <div className=\"h-6 bg-muted rounded-full w-24 flex-shrink-0\" />\n\n {/* Metric skeleton */}\n <div className=\"h-4 bg-muted rounded w-16 flex-shrink-0\" />\n </div>\n ))}\n <span className=\"sr-only\">Loading...</span>\n </div>\n );\n});\nEntityDirectoryLoadingState.displayName = \"EntityDirectoryLoadingState\";\n\nexport { EntityDirectoryLoadingState };\n","/**\n * EntityDirectory Search Filter Subcomponent\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\n\nexport interface EntityDirectorySearchFilterProps {\n /** Search query value */\n value: string;\n /** Change callback */\n onChange: (value: string) => void;\n /** Placeholder text */\n placeholder?: string;\n /** CSS class name */\n className?: string;\n}\n\nconst EntityDirectorySearchFilter = React.forwardRef<\n HTMLInputElement,\n EntityDirectorySearchFilterProps\n>(({ value, onChange, placeholder = \"Search entities...\", className }, ref) => {\n return (\n <div className={cn(\"relative\", className)}>\n <div className=\"absolute inset-y-0 left-0 flex items-center pl-3 pointer-events-none\">\n <svg\n className=\"w-4 h-4 text-muted-foreground\"\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 20 20\"\n >\n <path\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"m19 19-4-4m0-7A7 7 0 1 1 1 8a7 7 0 0 1 14 0Z\"\n />\n </svg>\n </div>\n <input\n ref={ref}\n type=\"search\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n className={cn(\n \"block w-full pl-10 pr-3 py-2 border border-input rounded-md\",\n \"bg-background text-foreground placeholder:text-muted-foreground\",\n \"focus:outline-none focus:ring-2 focus:ring-ring focus:border-transparent\",\n \"transition-colors\"\n )}\n aria-label=\"Search entities\"\n />\n {value && (\n <button\n type=\"button\"\n onClick={() => onChange(\"\")}\n className=\"absolute inset-y-0 right-0 flex items-center pr-3 text-muted-foreground hover:text-foreground\"\n aria-label=\"Clear search\"\n >\n <svg\n className=\"w-4 h-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n )}\n </div>\n );\n});\nEntityDirectorySearchFilter.displayName = \"EntityDirectorySearchFilter\";\n\nexport { EntityDirectorySearchFilter };\n","/**\n * EntityDirectory Widget - Main Composition\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport { EntityDirectoryHeader } from \"./header\";\nimport { EntityDirectoryList } from \"./list\";\nimport { EntityDirectoryEmptyState } from \"./empty-state\";\nimport { EntityDirectoryErrorState } from \"./error-state\";\nimport { EntityDirectoryLoadingState } from \"./loading-state\";\nimport { EntityDirectorySearchFilter } from \"./search-filter\";\nimport { CategoryChips } from \"../../../features/entity-filtering\";\nimport type { Entity, EntityCategory, EntitySort } from \"../../../entities/entity\";\n\nexport interface EntityDirectoryProps {\n // ===== Data =====\n /** List of entities to display */\n entities: Entity[];\n\n /** Available categories for filtering */\n categories?: EntityCategory[];\n\n // ===== Header =====\n /** Directory title */\n title: string;\n\n /** Optional description below title */\n description?: string;\n\n // ===== Filtering & Sorting =====\n /** Currently active category filter (controlled) */\n activeCategory?: string | null;\n\n /** Callback when category changes */\n onCategoryChange?: (categoryId: string | null) => void;\n\n /** Show category count badges */\n showCategoryCount?: boolean;\n\n /** Function to get count for each category */\n getCategoryCount?: (categoryId: string) => number;\n\n /** Enable search functionality */\n enableSearch?: boolean;\n\n /** Search query (controlled) */\n searchQuery?: string;\n\n /** Callback when search query changes */\n onSearchChange?: (query: string) => void;\n\n /** Search placeholder text */\n searchPlaceholder?: string;\n\n /** Enable sorting */\n sortable?: boolean;\n\n /** Current sort state (controlled) */\n sort?: EntitySort | null;\n\n /** Callback when sort changes */\n onSortChange?: (sort: EntitySort) => void;\n\n // ===== Display Options =====\n /** Show icon column */\n showIcons?: boolean;\n\n /** Show category badges in list */\n showCategoryBadges?: boolean;\n\n /** Show metric column */\n showMetric?: boolean;\n\n /** Metric column label (e.g., \"Distance\") */\n metricLabel?: string;\n\n /** Compact mode (reduced spacing) */\n compact?: boolean;\n\n // ===== States =====\n /** Loading state */\n loading?: boolean;\n\n /** Error state */\n error?: string | Error;\n\n /** Empty state custom message */\n emptyMessage?: string;\n\n /** Error state retry callback */\n onRetry?: () => void;\n\n // ===== Customization =====\n /** Custom empty state component */\n emptyState?: React.ReactNode;\n\n /** Custom error state component */\n errorState?: React.ReactNode;\n\n /** Custom loading state component */\n loadingState?: React.ReactNode;\n\n /** Custom list item renderer */\n renderItem?: (entity: Entity) => React.ReactNode;\n\n /** CSS class name */\n className?: string;\n\n /** Inline styles */\n style?: React.CSSProperties;\n}\n\nconst EntityDirectory = React.forwardRef<HTMLDivElement, EntityDirectoryProps>(\n (\n {\n entities,\n categories,\n title,\n description,\n activeCategory,\n onCategoryChange,\n showCategoryCount,\n getCategoryCount,\n enableSearch = false,\n searchQuery = \"\",\n onSearchChange,\n searchPlaceholder,\n sortable = false,\n sort,\n onSortChange,\n showIcons = true,\n showCategoryBadges = true,\n showMetric = true,\n metricLabel,\n compact = false,\n loading = false,\n error,\n emptyMessage,\n onRetry,\n emptyState,\n errorState,\n loadingState,\n renderItem,\n className,\n style,\n },\n ref\n ) => {\n const hasCategories = categories && categories.length > 0;\n const isEmpty = !loading && !error && entities.length === 0;\n const hasError = !loading && !!error;\n\n return (\n <div\n ref={ref}\n className={cn(\"space-y-6\", className)}\n style={style}\n >\n {/* Header */}\n <EntityDirectoryHeader title={title} description={description} />\n\n {/* Category Filter */}\n {hasCategories && onCategoryChange && (\n <CategoryChips\n categories={categories}\n activeCategory={activeCategory}\n onCategoryChange={onCategoryChange}\n showCount={showCategoryCount}\n getCategoryCount={getCategoryCount}\n />\n )}\n\n {/* Search Filter */}\n {enableSearch && onSearchChange && (\n <EntityDirectorySearchFilter\n value={searchQuery}\n onChange={onSearchChange}\n placeholder={searchPlaceholder}\n />\n )}\n\n {/* Loading State */}\n {loading && (loadingState || <EntityDirectoryLoadingState />)}\n\n {/* Error State */}\n {hasError &&\n (errorState || (\n <EntityDirectoryErrorState error={error!} onRetry={onRetry} />\n ))}\n\n {/* Empty State */}\n {isEmpty &&\n (emptyState || <EntityDirectoryEmptyState message={emptyMessage} />)}\n\n {/* List */}\n {!loading && !hasError && !isEmpty && (\n <EntityDirectoryList\n entities={entities}\n categories={categories}\n showIcons={showIcons}\n showCategoryBadges={showCategoryBadges}\n showMetric={showMetric}\n metricLabel={metricLabel}\n sortable={sortable}\n sort={sort}\n onSortChange={onSortChange}\n compact={compact}\n renderItem={renderItem}\n />\n )}\n </div>\n );\n }\n);\nEntityDirectory.displayName = \"EntityDirectory\";\n\nexport { EntityDirectory };\n","/**\n * Mortgage Calculation Utilities\n * Pure functions for mortgage calculations\n */\n\nimport type { MortgageInput, MortgageResult } from \"../model/types\";\n\n/**\n * Calculate monthly mortgage payment using amortization formula\n * M = P * [r(1 + r)^n] / [(1 + r)^n - 1]\n * where:\n * M = monthly payment\n * P = principal loan amount\n * r = monthly interest rate (annual rate / 12)\n * n = number of payments (years * 12)\n */\nexport function calculateMortgage(input: MortgageInput): MortgageResult {\n const {\n propertyPrice,\n downPayment,\n loanTerm,\n interestRate,\n propertyTax = 0,\n hoaFees = 0,\n } = input;\n\n // Calculate loan principal\n const loanPrincipal = propertyPrice - downPayment;\n\n // Convert annual interest rate to monthly decimal\n const monthlyRate = interestRate / 100 / 12;\n\n // Total number of payments\n const numberOfPayments = loanTerm * 12;\n\n // Calculate monthly principal and interest\n let monthlyPayment: number;\n if (monthlyRate === 0) {\n // If interest rate is 0, simple division\n monthlyPayment = loanPrincipal / numberOfPayments;\n } else {\n // Amortization formula\n const powerTerm = Math.pow(1 + monthlyRate, numberOfPayments);\n monthlyPayment =\n (loanPrincipal * (monthlyRate * powerTerm)) / (powerTerm - 1);\n }\n\n // Calculate totals\n const totalPaid = monthlyPayment * numberOfPayments;\n const totalInterest = totalPaid - loanPrincipal;\n\n // Calculate total monthly payment including extras\n const totalMonthlyPayment = monthlyPayment + propertyTax + hoaFees;\n\n return {\n monthlyPayment: Math.round(monthlyPayment * 100) / 100,\n totalMonthlyPayment: Math.round(totalMonthlyPayment * 100) / 100,\n totalAmount: Math.round(totalPaid * 100) / 100,\n totalInterest: Math.round(totalInterest * 100) / 100,\n loanPrincipal: Math.round(loanPrincipal * 100) / 100,\n breakdown: {\n principalAndInterest: Math.round(monthlyPayment * 100) / 100,\n propertyTax: Math.round(propertyTax * 100) / 100,\n hoaFees: Math.round(hoaFees * 100) / 100,\n },\n };\n}\n\n/**\n * Format currency for display\n */\nexport function formatCurrency(\n amount: number,\n currency: string = \"MXN\",\n): string {\n return new Intl.NumberFormat(\"es-MX\", {\n style: \"currency\",\n currency,\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n }).format(amount);\n}\n\n/**\n * Format percentage for display\n */\nexport function formatPercentage(value: number, decimals: number = 3): string {\n return `${value.toFixed(decimals)} %`;\n}\n\n/**\n * Validate mortgage input values\n */\nexport function validateMortgageInput(input: Partial<MortgageInput>): {\n isValid: boolean;\n errors: Record<string, string>;\n} {\n const errors: Record<string, string> = {};\n\n if (!input.propertyPrice || input.propertyPrice <= 0) {\n errors.propertyPrice = \"El precio de la propiedad debe ser mayor a 0\";\n }\n\n if (!input.downPayment || input.downPayment < 0) {\n errors.downPayment = \"El enganche debe ser mayor o igual a 0\";\n }\n\n if (\n input.propertyPrice &&\n input.downPayment &&\n input.downPayment >= input.propertyPrice\n ) {\n errors.downPayment = \"El enganche debe ser menor al precio de la propiedad\";\n }\n\n if (!input.loanTerm || input.loanTerm <= 0) {\n errors.loanTerm = \"El plazo del préstamo debe ser mayor a 0\";\n }\n\n if (input.interestRate === undefined || input.interestRate < 0) {\n errors.interestRate = \"La tasa de interés debe ser mayor o igual a 0\";\n }\n\n return {\n isValid: Object.keys(errors).length === 0,\n errors,\n };\n}\n","/**\n * Mortgage Calculator Constants\n */\n\nimport type { LoanProgramOption } from \"../../../entities/mortgage\";\nimport type { SelectOption } from \"../../../features/select\";\n\nexport const LOAN_PROGRAMS: LoanProgramOption[] = [\n { value: \"15-years\", label: \"15 años fijos\", years: 15 },\n { value: \"20-years\", label: \"20 años fijos\", years: 20 },\n { value: \"30-years\", label: \"30 años fijos\", years: 30 },\n { value: \"40-years\", label: \"40 años fijos\", years: 40 },\n];\n\nexport const LOAN_PROGRAM_OPTIONS: SelectOption[] = LOAN_PROGRAMS.map(\n (program) => ({\n value: program.value,\n label: program.label,\n }),\n);\n\nexport const DEFAULT_VALUES = {\n propertyPrice: 20000000,\n downPayment: 200000,\n loanProgram: \"30-years\" as const,\n interestRate: 6.5,\n};\n\n/**\n * Chart colors matching the design\n */\nexport const CHART_COLORS = {\n principalAndInterest: \"#0a2540\", // Dark blue/navy\n propertyTax: \"#4da6c7\", // Light blue\n hoaFees: \"#7fc9e3\", // Very light blue\n} as const;\n","/**\n * Mortgage Calculator Widget\n * A comprehensive mortgage calculator with form inputs and donut chart visualization\n */\n\nimport * as React from \"react\";\nimport { TrendingUp } from \"lucide-react\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport { Card } from \"../../../features/card\";\nimport { Input } from \"../../../features/input\";\nimport { Select } from \"../../../features/select\";\nimport { DonutChart, type ChartSegment } from \"../../../features/donut-chart\";\nimport { Text } from \"../../../features/text\";\nimport {\n calculateMortgage,\n formatCurrency,\n type MortgageInput,\n type MortgageResult,\n} from \"../../../entities/mortgage\";\nimport {\n LOAN_PROGRAMS,\n LOAN_PROGRAM_OPTIONS,\n DEFAULT_VALUES,\n CHART_COLORS,\n} from \"../lib/constants\";\n\nexport interface MortgageCalculatorProps {\n /** Initial property price */\n initialPropertyPrice?: number;\n /** Initial down payment */\n initialDownPayment?: number;\n /** Initial loan program */\n initialLoanProgram?: string;\n /** Initial interest rate */\n initialInterestRate?: number;\n /** Whether to show property tax input */\n showPropertyTax?: boolean;\n /** Whether to show HOA fees input */\n showHoaFees?: boolean;\n /** Additional class name */\n className?: string;\n /** Callback when calculation changes */\n onCalculationChange?: (result: MortgageResult) => void;\n}\n\nconst MortgageCalculator = React.forwardRef<\n HTMLDivElement,\n MortgageCalculatorProps\n>(\n (\n {\n initialPropertyPrice = DEFAULT_VALUES.propertyPrice,\n initialDownPayment = DEFAULT_VALUES.downPayment,\n initialLoanProgram = DEFAULT_VALUES.loanProgram,\n initialInterestRate = DEFAULT_VALUES.interestRate,\n showPropertyTax = false,\n showHoaFees = false,\n className,\n onCalculationChange,\n },\n ref,\n ) => {\n const [propertyPrice, setPropertyPrice] =\n React.useState(initialPropertyPrice);\n const [downPayment, setDownPayment] = React.useState(initialDownPayment);\n const [loanProgram, setLoanProgram] = React.useState(initialLoanProgram);\n const [interestRate, setInterestRate] = React.useState(initialInterestRate);\n const [propertyTax, setPropertyTax] = React.useState(0);\n const [hoaFees, setHoaFees] = React.useState(0);\n\n // Calculate mortgage result\n const result = React.useMemo(() => {\n const selectedProgram = LOAN_PROGRAMS.find(\n (p) => p.value === loanProgram,\n );\n const loanTerm = selectedProgram?.years || 30;\n\n const input: MortgageInput = {\n propertyPrice,\n downPayment,\n loanTerm,\n interestRate,\n propertyTax: showPropertyTax ? propertyTax : undefined,\n hoaFees: showHoaFees ? hoaFees : undefined,\n };\n\n return calculateMortgage(input);\n }, [\n propertyPrice,\n downPayment,\n loanProgram,\n interestRate,\n propertyTax,\n hoaFees,\n showPropertyTax,\n showHoaFees,\n ]);\n\n // Notify parent of calculation changes\n React.useEffect(() => {\n onCalculationChange?.(result);\n }, [result, onCalculationChange]);\n\n // Generate chart segments\n const chartSegments: ChartSegment[] = React.useMemo(() => {\n const segments: ChartSegment[] = [\n {\n label: \"Principal e Intereses\",\n value: result.breakdown.principalAndInterest,\n color: CHART_COLORS.principalAndInterest,\n },\n ];\n\n if (showPropertyTax && result.breakdown.propertyTax > 0) {\n segments.push({\n label: \"Impuesto Predial\",\n value: result.breakdown.propertyTax,\n color: CHART_COLORS.propertyTax,\n });\n }\n\n if (showHoaFees && result.breakdown.hoaFees > 0) {\n segments.push({\n label: \"Cuota HOA\",\n value: result.breakdown.hoaFees,\n color: CHART_COLORS.hoaFees,\n });\n }\n\n return segments;\n }, [result, showPropertyTax, showHoaFees]);\n\n return (\n <div ref={ref} className={cn(\"w-full\", className)}>\n <Card padding=\"lg\" className=\"w-full\">\n <div className=\"space-y-6\">\n {/* Header */}\n <div>\n <Text variant=\"h2\" className=\"mb-2\">\n Calculadora de Hipotecas\n </Text>\n <Text variant=\"body\" color=\"secondary\" className=\"max-w-2xl\">\n Calcule el pago mensual de su hipoteca, incluyendo capital e\n intereses, impuestos prediales y cuota de la asociación de\n propietarios. Ajuste los valores para obtener una tasa más\n precisa.\n </Text>\n </div>\n\n {/* Main Content: Form and Chart */}\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-8\">\n {/* Form Section */}\n <div className=\"space-y-4\">\n <Input\n label=\"Precio de la propiedad\"\n type=\"number\"\n value={propertyPrice}\n onChange={(e) => setPropertyPrice(Number(e.target.value))}\n suffix=\"MXN\"\n min={0}\n step={10000}\n />\n\n <Input\n label=\"Enganche\"\n type=\"number\"\n value={downPayment}\n onChange={(e) => setDownPayment(Number(e.target.value))}\n suffix=\"MXN\"\n min={0}\n step={10000}\n />\n\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <Select\n label=\"Programa de préstamos\"\n value={loanProgram}\n onChange={(e) => setLoanProgram(e.target.value)}\n options={LOAN_PROGRAM_OPTIONS}\n />\n\n <Input\n label=\"Tasa de interés\"\n type=\"number\"\n value={interestRate}\n onChange={(e) => setInterestRate(Number(e.target.value))}\n suffix=\"%\"\n min={0}\n max={100}\n step={0.1}\n />\n </div>\n\n {showPropertyTax && (\n <Input\n label=\"Impuesto predial mensual\"\n type=\"number\"\n value={propertyTax}\n onChange={(e) => setPropertyTax(Number(e.target.value))}\n suffix=\"MXN\"\n min={0}\n step={100}\n />\n )}\n\n {showHoaFees && (\n <Input\n label=\"Cuota HOA mensual\"\n type=\"number\"\n value={hoaFees}\n onChange={(e) => setHoaFees(Number(e.target.value))}\n suffix=\"MXN\"\n min={0}\n step={100}\n />\n )}\n </div>\n\n {/* Chart Section */}\n <div className=\"flex flex-col items-center justify-center\">\n <DonutChart\n segments={chartSegments}\n size={320}\n innerRadiusRatio={0.65}\n centerContent={\n <div className=\"text-center\">\n <Text variant=\"h1\" className=\"font-bold mb-1\">\n {formatCurrency(result.totalMonthlyPayment)}\n </Text>\n <Text variant=\"body-sm\" color=\"secondary\">\n Tu Pago\n </Text>\n </div>\n }\n showLegend\n legendPosition=\"bottom\"\n />\n\n <div className=\"mt-6 text-center space-y-1\">\n <div className=\"flex items-center justify-center gap-2 text-sm text-success\">\n <TrendingUp className=\"h-4 w-4\" />\n <span className=\"font-medium\">\n Trending up by 5.2% this month\n </span>\n </div>\n <Text variant=\"caption\" color=\"secondary\">\n Showing total visitors for the last 6 months\n </Text>\n </div>\n </div>\n </div>\n\n {/* Summary Information */}\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4 pt-4 border-t\">\n <div>\n <Text variant=\"caption\" color=\"secondary\" className=\"mb-1\">\n Monto del préstamo\n </Text>\n <Text variant=\"body\" weight=\"semibold\">\n {formatCurrency(result.loanPrincipal)}\n </Text>\n </div>\n <div>\n <Text variant=\"caption\" color=\"secondary\" className=\"mb-1\">\n Pago mensual\n </Text>\n <Text variant=\"body\" weight=\"semibold\">\n {formatCurrency(result.monthlyPayment)}\n </Text>\n </div>\n <div>\n <Text variant=\"caption\" color=\"secondary\" className=\"mb-1\">\n Interés total\n </Text>\n <Text variant=\"body\" weight=\"semibold\">\n {formatCurrency(result.totalInterest)}\n </Text>\n </div>\n <div>\n <Text variant=\"caption\" color=\"secondary\" className=\"mb-1\">\n Total a pagar\n </Text>\n <Text variant=\"body\" weight=\"semibold\">\n {formatCurrency(result.totalAmount)}\n </Text>\n </div>\n </div>\n </div>\n </Card>\n </div>\n );\n },\n);\n\nMortgageCalculator.displayName = \"MortgageCalculator\";\n\nexport { MortgageCalculator };\n","/**\n * Page Layouts\n * @layer pages\n * @description Page-level layout components for different application contexts\n */\nimport React from \"react\";\nimport { cn } from \"../../../shared/lib/utils\";\nimport { Text } from \"../../../features/text\";\n\nexport interface PageLayoutProps {\n children: React.ReactNode;\n header?: React.ReactNode;\n sidebar?: React.ReactNode;\n footer?: React.ReactNode;\n padding?: \"none\" | \"sm\" | \"md\" | \"lg\";\n}\n\nconst getPaddingClasses = (padding: string): string => {\n switch (padding) {\n case \"sm\":\n return \"p-4\";\n case \"md\":\n return \"p-6\";\n case \"lg\":\n return \"p-8\";\n default:\n return \"p-0\";\n }\n};\n\nexport const PageLayout: React.FC<PageLayoutProps> = ({\n children,\n header,\n sidebar,\n footer,\n padding = \"md\",\n}) => {\n const layoutClasses = cn(\"min-h-screen flex flex-col\");\n const headerClasses = cn(\"bg-card border-b border-border z-10\");\n const contentWithSidebarClasses = cn(\"flex flex-1\");\n const sidebarClasses = cn(\"w-70 bg-card border-r border-border p-6\");\n const mainAreaClasses = cn(\"flex-1 flex flex-col\");\n const mainContentClasses = cn(\n \"flex-1 mx-auto w-full max-w-7xl\",\n getPaddingClasses(padding)\n );\n\n return (\n <div className={layoutClasses}>\n {header && <header className={headerClasses}>{header}</header>}\n\n <div className={contentWithSidebarClasses}>\n {sidebar && <aside className={sidebarClasses}>{sidebar}</aside>}\n\n <div className={mainAreaClasses}>\n <main className={mainContentClasses}>{children}</main>\n </div>\n </div>\n\n {footer && (\n <footer className=\"bg-card border-t border-border mt-auto\">\n {footer}\n </footer>\n )}\n </div>\n );\n};\n\n// Specialized layout components\nexport const DashboardLayout: React.FC<{\n children: React.ReactNode;\n header: React.ReactNode;\n sidebar: React.ReactNode;\n}> = ({ children, header, sidebar }) => (\n <PageLayout header={header} sidebar={sidebar} padding=\"lg\">\n <div className=\"max-w-screen-2xl\">{children}</div>\n </PageLayout>\n);\n\nexport const AuthLayout: React.FC<{\n children: React.ReactNode;\n title?: string;\n subtitle?: string;\n}> = ({ children, title, subtitle }) => (\n <PageLayout padding=\"lg\">\n <div className=\"max-w-md mx-auto\">\n <div className=\"text-center mb-8\">\n {title && (\n <Text variant=\"h2\" className=\"mb-2\">\n {title}\n </Text>\n )}\n {subtitle && (\n <Text variant=\"body\" color=\"muted\">\n {subtitle}\n </Text>\n )}\n </div>\n {children}\n </div>\n </PageLayout>\n);\n\nexport const MarketingLayout: React.FC<{\n children: React.ReactNode;\n header?: React.ReactNode;\n footer?: React.ReactNode;\n}> = ({ children, header, footer }) => (\n <PageLayout header={header} footer={footer} padding=\"none\">\n {children}\n </PageLayout>\n);\n","import type { Theme } from '../types/theme';\n\nexport const lightTheme: Theme = {\n name: 'light',\n colors: {\n primary: '#007bff',\n secondary: '#6c757d',\n success: '#28a745',\n warning: '#ffc107',\n error: '#dc3545',\n info: '#17a2b8',\n background: '#ffffff',\n surface: '#f8f9fa',\n text: '#212529',\n textSecondary: '#6c757d',\n border: '#dee2e6',\n borderLight: '#e9ecef',\n },\n shapes: {\n borderRadius: {\n small: '4px',\n medium: '8px',\n large: '12px',\n round: '50%',\n },\n borderWidth: {\n thin: '1px',\n medium: '2px',\n thick: '3px',\n },\n },\n typography: {\n fontFamily: 'Inter, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n fontSize: {\n xs: '0.75rem',\n sm: '0.875rem',\n md: '1rem',\n lg: '1.125rem',\n xl: '1.25rem',\n xxl: '1.5rem',\n },\n fontWeight: {\n light: 300,\n regular: 400,\n medium: 500,\n bold: 700,\n },\n lineHeight: {\n tight: 1.25,\n normal: 1.5,\n relaxed: 1.75,\n },\n },\n spacing: {\n xs: '0.25rem',\n sm: '0.5rem',\n md: '1rem',\n lg: '1.5rem',\n xl: '2rem',\n xxl: '3rem',\n },\n shadows: {\n none: 'none',\n small: '0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24)',\n medium: '0 3px 6px rgba(0, 0, 0, 0.15), 0 2px 4px rgba(0, 0, 0, 0.12)',\n large: '0 10px 20px rgba(0, 0, 0, 0.15), 0 3px 6px rgba(0, 0, 0, 0.10)',\n xl: '0 15px 25px rgba(0, 0, 0, 0.15), 0 5px 10px rgba(0, 0, 0, 0.05)',\n },\n};\n\nexport const darkTheme: Theme = {\n name: 'dark',\n colors: {\n primary: '#0d6efd',\n secondary: '#6c757d',\n success: '#198754',\n warning: '#fd7e14',\n error: '#dc3545',\n info: '#0dcaf0',\n background: '#121212',\n surface: '#1e1e1e',\n text: '#ffffff',\n textSecondary: '#adb5bd',\n border: '#495057',\n borderLight: '#343a40',\n },\n shapes: {\n borderRadius: {\n small: '4px',\n medium: '8px',\n large: '12px',\n round: '50%',\n },\n borderWidth: {\n thin: '1px',\n medium: '2px',\n thick: '3px',\n },\n },\n typography: {\n fontFamily: 'Inter, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n fontSize: {\n xs: '0.75rem',\n sm: '0.875rem',\n md: '1rem',\n lg: '1.125rem',\n xl: '1.25rem',\n xxl: '1.5rem',\n },\n fontWeight: {\n light: 300,\n regular: 400,\n medium: 500,\n bold: 700,\n },\n lineHeight: {\n tight: 1.25,\n normal: 1.5,\n relaxed: 1.75,\n },\n },\n spacing: {\n xs: '0.25rem',\n sm: '0.5rem',\n md: '1rem',\n lg: '1.5rem',\n xl: '2rem',\n xxl: '3rem',\n },\n shadows: {\n none: 'none',\n small: '0 1px 3px rgba(0, 0, 0, 0.3), 0 1px 2px rgba(0, 0, 0, 0.4)',\n medium: '0 3px 6px rgba(0, 0, 0, 0.4), 0 2px 4px rgba(0, 0, 0, 0.3)',\n large: '0 10px 20px rgba(0, 0, 0, 0.4), 0 3px 6px rgba(0, 0, 0, 0.3)',\n xl: '0 15px 25px rgba(0, 0, 0, 0.4), 0 5px 10px rgba(0, 0, 0, 0.3)',\n },\n};\n\nexport const corporateTheme: Theme = {\n name: 'corporate',\n colors: {\n primary: '#1a365d',\n secondary: '#2d3748',\n success: '#38a169',\n warning: '#d69e2e',\n error: '#e53e3e',\n info: '#3182ce',\n background: '#f7fafc',\n surface: '#ffffff',\n text: '#1a202c',\n textSecondary: '#4a5568',\n border: '#e2e8f0',\n borderLight: '#edf2f7',\n },\n shapes: {\n borderRadius: {\n small: '2px',\n medium: '4px',\n large: '6px',\n round: '50%',\n },\n borderWidth: {\n thin: '1px',\n medium: '2px',\n thick: '3px',\n },\n },\n typography: {\n fontFamily: 'Georgia, \"Times New Roman\", serif',\n fontSize: {\n xs: '0.75rem',\n sm: '0.875rem',\n md: '1rem',\n lg: '1.125rem',\n xl: '1.25rem',\n xxl: '1.5rem',\n },\n fontWeight: {\n light: 300,\n regular: 400,\n medium: 500,\n bold: 700,\n },\n lineHeight: {\n tight: 1.25,\n normal: 1.5,\n relaxed: 1.75,\n },\n },\n spacing: {\n xs: '0.25rem',\n sm: '0.5rem',\n md: '1rem',\n lg: '1.5rem',\n xl: '2rem',\n xxl: '3rem',\n },\n shadows: {\n none: 'none',\n small: '0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.06)',\n medium: '0 4px 6px rgba(0, 0, 0, 0.07), 0 2px 4px rgba(0, 0, 0, 0.06)',\n large: '0 10px 15px rgba(0, 0, 0, 0.1), 0 4px 6px rgba(0, 0, 0, 0.05)',\n xl: '0 20px 25px rgba(0, 0, 0, 0.1), 0 10px 10px rgba(0, 0, 0, 0.04)',\n },\n};\n\nexport const minimalTheme: Theme = {\n name: 'minimal',\n colors: {\n primary: '#000000',\n secondary: '#666666',\n success: '#00aa00',\n warning: '#ffaa00',\n error: '#aa0000',\n info: '#00aaaa',\n background: '#ffffff',\n surface: '#fafafa',\n text: '#000000',\n textSecondary: '#666666',\n border: '#cccccc',\n borderLight: '#e0e0e0',\n },\n shapes: {\n borderRadius: {\n small: '0px',\n medium: '0px',\n large: '0px',\n round: '50%',\n },\n borderWidth: {\n thin: '1px',\n medium: '2px',\n thick: '3px',\n },\n },\n typography: {\n fontFamily: 'Helvetica, Arial, sans-serif',\n fontSize: {\n xs: '0.75rem',\n sm: '0.875rem',\n md: '1rem',\n lg: '1.125rem',\n xl: '1.25rem',\n xxl: '1.5rem',\n },\n fontWeight: {\n light: 300,\n regular: 400,\n medium: 500,\n bold: 700,\n },\n lineHeight: {\n tight: 1.25,\n normal: 1.5,\n relaxed: 1.75,\n },\n },\n spacing: {\n xs: '0.25rem',\n sm: '0.5rem',\n md: '1rem',\n lg: '1.5rem',\n xl: '2rem',\n xxl: '3rem',\n },\n shadows: {\n none: 'none',\n small: 'none',\n medium: 'none',\n large: 'none',\n xl: 'none',\n },\n};\n\nexport const themes = {\n light: lightTheme,\n dark: darkTheme,\n corporate: corporateTheme,\n minimal: minimalTheme,\n} as const;\n\nexport type AvailableThemes = typeof themes;\n","/**\n * Theme Store\n * @layer shared\n * @description Global theme state management using Effector\n */\nimport { createStore, createEvent } from 'effector';\nimport type { Theme, ThemeName } from '../types/theme';\nimport { themes } from '../config/themes';\n\n// Events\nexport const setTheme = createEvent<ThemeName>();\nexport const setCustomTheme = createEvent<Theme>();\nexport const resetTheme = createEvent();\n\n// Store\nexport const $theme = createStore<Theme>(themes.light)\n .on(setTheme, (state, themeName) => {\n const theme = themes[themeName as keyof typeof themes];\n return theme || state;\n })\n .on(setCustomTheme, (_, theme) => theme)\n .on(resetTheme, () => themes.light);\n\n// Selectors\nexport const $themeName = $theme.map((theme) => theme.name);\nexport const $themeColors = $theme.map((theme) => theme.colors);\nexport const $themeShapes = $theme.map((theme) => theme.shapes);\nexport const $themeTypography = $theme.map((theme) => theme.typography);\nexport const $themeSpacing = $theme.map((theme) => theme.spacing);\nexport const $themeShadows = $theme.map((theme) => theme.shadows);","/**\n * Theme Hook\n * @layer shared\n * @description Hook for accessing theme context\n */\nimport React, { useContext } from 'react';\nimport type { Theme } from '../../types/theme';\n\nexport interface ThemeContextValue {\n theme: Theme;\n}\n\nexport const ThemeContext = React.createContext<ThemeContextValue | null>(null);\n\nexport const useTheme = (): ThemeContextValue => {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within a ThemeProvider');\n }\n return context;\n};","/**\n * Theme Provider\n * @layer shared\n * @description Cross-cutting theme management for the design system\n */\nimport React from \"react\";\nimport { useUnit } from \"effector-react\";\nimport { $theme } from \"../../model/theme-store\";\nimport { ThemeContext, type ThemeContextValue } from \"../../lib/theme/use-theme\";\n\ninterface ThemeProviderProps {\n children: React.ReactNode;\n}\n\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({ children }) => {\n const theme = useUnit($theme);\n\n const contextValue: ThemeContextValue = {\n theme,\n };\n\n return (\n <ThemeContext.Provider value={contextValue}>\n {children}\n </ThemeContext.Provider>\n );\n};\n","/**\n * Design System Utilities\n *\n * This file contains utility functions and constants for the design system,\n * providing consistent styling and behavior across components.\n */\n\nimport { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Utility function to merge and conditionally apply CSS classes\n * Combines clsx for conditional classes with tailwind-merge for proper precedence\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n/**\n * Design system constants\n */\nconst designSystemConstants = {\n // Spacing scale (in rem)\n spacing: {\n xs: '0.25rem', // 4px\n sm: '0.5rem', // 8px\n md: '1rem', // 16px\n lg: '1.5rem', // 24px\n xl: '2rem', // 32px\n '2xl': '3rem', // 48px\n '3xl': '4rem', // 64px\n },\n\n // Border radius scale\n radius: {\n none: '0',\n sm: '0.125rem', // 2px\n DEFAULT: '0.25rem', // 4px\n md: '0.375rem', // 6px\n lg: '0.5rem', // 8px\n xl: '0.75rem', // 12px\n '2xl': '1rem', // 16px\n '3xl': '1.5rem', // 24px\n full: '9999px',\n },\n\n // Typography scale\n typography: {\n fontSize: {\n xs: ['0.75rem', { lineHeight: '1rem' }],\n sm: ['0.875rem', { lineHeight: '1.25rem' }],\n base: ['1rem', { lineHeight: '1.5rem' }],\n lg: ['1.125rem', { lineHeight: '1.75rem' }],\n xl: ['1.25rem', { lineHeight: '1.75rem' }],\n '2xl': ['1.5rem', { lineHeight: '2rem' }],\n '3xl': ['1.875rem', { lineHeight: '2.25rem' }],\n '4xl': ['2.25rem', { lineHeight: '2.5rem' }],\n },\n fontWeight: {\n thin: '100',\n light: '300',\n normal: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n extrabold: '800',\n black: '900',\n },\n },\n\n // Shadow scale\n shadows: {\n none: 'none',\n xs: '0 1px 2px 0 rgb(0 0 0 / 0.05)',\n sm: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',\n DEFAULT: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',\n md: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)',\n lg: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n xl: '0 25px 50px -12px rgb(0 0 0 / 0.25)',\n },\n\n // Z-index scale for consistent layering\n zIndex: {\n dropdown: 1000,\n sticky: 1020,\n fixed: 1030,\n modalBackdrop: 1040,\n modal: 1050,\n popover: 1060,\n tooltip: 1070,\n toast: 1080,\n },\n\n // Animation durations\n duration: {\n instant: '0ms',\n fast: '150ms',\n normal: '300ms',\n slow: '500ms',\n },\n\n // Animation easing functions\n easing: {\n linear: 'linear',\n in: 'ease-in',\n out: 'ease-out',\n inOut: 'ease-in-out',\n },\n} as const;\n\n/**\n * Component variant utilities\n */\nexport const componentVariants = {\n button: {\n size: {\n sm: 'h-9 px-3 text-sm',\n md: 'h-10 px-4 py-2',\n lg: 'h-11 px-8',\n icon: 'h-10 w-10',\n },\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90',\n secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80',\n destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n outline: 'border border-input bg-background hover:bg-accent hover:text-accent-foreground',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n },\n\n input: {\n size: {\n sm: 'h-9 px-3 text-sm',\n md: 'h-10 px-3 py-2',\n lg: 'h-11 px-3 py-2',\n },\n },\n\n card: {\n variant: {\n default: 'bg-card text-card-foreground',\n elevated: 'bg-card text-card-foreground shadow-lg',\n outlined: 'bg-card text-card-foreground border-2',\n },\n },\n} as const;\n\n/**\n * Responsive breakpoint utilities\n */\nexport const responsiveBreakpoints = {\n sm: '640px',\n md: '768px',\n lg: '1024px',\n xl: '1280px',\n '2xl': '1536px',\n} as const;\n\n/**\n * Color utility functions\n */\nexport const colorUtils = {\n /**\n * Get a color value with opacity support\n */\n withOpacity: (variable: string, opacity?: number) => {\n if (opacity !== undefined) {\n return `hsl(var(${variable}) / ${opacity})`;\n }\n return `hsl(var(${variable}))`;\n },\n\n /**\n * Get a color from the design system palette\n */\n get: (color: string) => {\n return `hsl(var(--${color}))`;\n },\n} as const;\n\n/**\n * Accessibility utilities\n */\nexport const accessibilityUtils = {\n /**\n * Generate a unique ID for form elements and their labels\n */\n generateId: (prefix = 'ds') => `${prefix}-${Math.random().toString(36).substr(2, 9)}`,\n\n /**\n * Focus management utilities\n */\n focus: {\n visible: 'focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n within: 'focus-within:outline-none focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2',\n },\n\n /**\n * Screen reader utilities\n */\n sr: {\n only: 'absolute w-px h-px p-0 -m-px overflow-hidden whitespace-nowrap border-0',\n not: 'not-sr-only',\n },\n} as const;\n\n/**\n * Component size utilities\n */\nexport const componentSizes = {\n icon: {\n xs: 'w-3 h-3',\n sm: 'w-4 h-4',\n md: 'w-5 h-5',\n lg: 'w-6 h-6',\n xl: 'w-8 h-8',\n },\n\n avatar: {\n xs: 'w-6 h-6',\n sm: 'w-8 h-8',\n md: 'w-10 h-10',\n lg: 'w-12 h-12',\n xl: 'w-16 h-16',\n },\n} as const;\n\n/**\n * Animation utilities\n */\nexport const animationUtils = {\n /**\n * Fade animations\n */\n fade: {\n in: 'animate-in fade-in duration-200',\n out: 'animate-out fade-out duration-200',\n },\n\n /**\n * Slide animations\n */\n slide: {\n inFromLeft: 'animate-in slide-in-from-left duration-200',\n inFromRight: 'animate-in slide-in-from-right duration-200',\n inFromTop: 'animate-in slide-in-from-top duration-200',\n inFromBottom: 'animate-in slide-in-from-bottom duration-200',\n },\n\n /**\n * Scale animations\n */\n scale: {\n in: 'animate-in scale-in duration-200',\n out: 'animate-out scale-out duration-200',\n },\n} as const;\n\n/**\n * Layout utilities\n */\nexport const layoutUtils = {\n /**\n * Container utilities\n */\n container: {\n responsive: 'container mx-auto px-4 sm:px-6 lg:px-8',\n fluid: 'w-full max-w-none',\n centered: 'container mx-auto px-4 flex items-center justify-center min-h-screen',\n },\n\n /**\n * Grid utilities\n */\n grid: {\n responsive: 'grid gap-4 sm:gap-6 lg:gap-8',\n cols: {\n 1: 'grid-cols-1',\n 2: 'grid-cols-1 sm:grid-cols-2',\n 3: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',\n 4: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4',\n 5: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-5',\n 6: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-6',\n },\n },\n\n /**\n * Flex utilities\n */\n flex: {\n center: 'flex items-center justify-center',\n between: 'flex items-center justify-between',\n start: 'flex items-center justify-start',\n end: 'flex items-center justify-end',\n col: 'flex flex-col',\n colCenter: 'flex flex-col items-center justify-center',\n },\n} as const;\n\n/**\n * Theme utilities\n */\nexport const themeUtils = {\n /**\n * Check if dark mode is active\n */\n isDark: () => {\n if (typeof window === 'undefined') return false;\n return document.documentElement.classList.contains('dark');\n },\n\n /**\n * Toggle dark mode\n */\n toggle: () => {\n if (typeof window === 'undefined') return;\n document.documentElement.classList.toggle('dark');\n },\n\n /**\n * Set theme explicitly\n */\n set: (theme: 'light' | 'dark') => {\n if (typeof window === 'undefined') return;\n document.documentElement.classList.toggle('dark', theme === 'dark');\n },\n} as const;\n\n/**\n * Performance utilities\n */\nexport const performanceUtils = {\n /**\n * Debounce function for performance optimization\n */\n debounce: <T extends (...args: unknown[]) => unknown>(\n func: T,\n wait: number\n ): ((...args: Parameters<T>) => void) => {\n let timeout: NodeJS.Timeout;\n return (...args: Parameters<T>) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => func(...args), wait);\n };\n },\n\n /**\n * Throttle function for performance optimization\n */\n throttle: <T extends (...args: unknown[]) => unknown>(\n func: T,\n limit: number\n ): ((...args: Parameters<T>) => void) => {\n let inThrottle: boolean;\n return (...args: Parameters<T>) => {\n if (!inThrottle) {\n func(...args);\n inThrottle = true;\n setTimeout(() => inThrottle = false, limit);\n }\n };\n },\n} as const;\n\n/**\n * Export all utilities\n */\n// Re-export with backward-compatible names\nexport {\n designSystemConstants as designSystem,\n componentVariants as variants,\n responsiveBreakpoints as breakpoints,\n colorUtils as colors,\n accessibilityUtils as a11y,\n componentSizes as sizes,\n animationUtils as animations,\n layoutUtils as layout,\n themeUtils as theme,\n performanceUtils as performance,\n};","import React from \"react\";\n\n// Skip Links\nexport const SkipLink: React.FC<{\n href: string;\n children: React.ReactNode;\n}> = ({ href, children }) => (\n <a\n href={href}\n className=\"sr-only focus:not-sr-only focus:absolute focus:top-4 focus:left-4 focus:z-50 focus:px-4 focus:py-2 focus:bg-primary focus:text-white focus:rounded\"\n >\n {children}\n </a>\n);\n"],"names":["setRef","ref","value","composeRefs","refs","node","hasCleanup","cleanups","cleanup","i","createSlot","ownerName","SlotClone","createSlotClone","Slot2","React","props","forwardedRef","children","slotProps","childrenArray","slottable","isSlottable","newElement","newChildren","child","jsx","Slot","childrenRef","getElementRef","props2","mergeProps","SLOTTABLE_IDENTIFIER","childProps","overrideProps","propName","slotPropValue","childPropValue","args","result","element","getter","mayWarn","r","f","n","o","clsx","CLASS_PART_SEPARATOR","createClassGroupUtils","config","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","className","classParts","getGroupRecursive","getGroupIdForArbitraryProperty","classGroupId","hasPostfixModifier","conflicts","classPartObject","currentClassPart","nextClassPartObject","classGroupFromNextClassPart","classRest","validator","arbitraryPropertyRegex","arbitraryPropertyClassName","property","theme","classGroups","processClassesRecursively","classGroup","classDefinition","classPartObjectToEdit","getPart","isThemeGetter","key","path","currentClassPartObject","pathPart","func","createLruCache","maxCacheSize","cacheSize","cache","previousCache","update","IMPORTANT_MODIFIER","MODIFIER_SEPARATOR","MODIFIER_SEPARATOR_LENGTH","createParseClassName","prefix","experimentalParseClassName","parseClassName","modifiers","bracketDepth","parenDepth","modifierStart","postfixModifierPosition","index","currentCharacter","baseClassNameWithImportantModifier","baseClassName","stripImportantModifier","hasImportantModifier","maybePostfixModifierPosition","fullPrefix","parseClassNameOriginal","createSortModifiers","orderSensitiveModifiers","modifier","sortedModifiers","unsortedModifiers","createConfigUtils","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","getClassGroupId","getConflictingClassGroupIds","sortModifiers","classGroupsInConflict","classNames","originalClassName","isExternal","variantModifier","modifierId","classId","conflictGroups","group","twJoin","argument","resolvedValue","string","toValue","mix","k","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","fromTheme","themeGetter","arbitraryValueRegex","arbitraryVariableRegex","fractionRegex","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isFraction","isNumber","isInteger","isPercent","isTshirtSize","isAny","isLengthOnly","isNever","isShadow","isImage","isAnyNonArbitrary","isArbitraryValue","isArbitraryVariable","isArbitrarySize","getIsArbitraryValue","isLabelSize","isArbitraryLength","isLabelLength","isArbitraryNumber","isLabelNumber","isArbitraryPosition","isLabelPosition","isArbitraryImage","isLabelImage","isArbitraryShadow","isLabelShadow","isArbitraryVariableLength","getIsArbitraryVariable","isArbitraryVariableFamilyName","isLabelFamilyName","isArbitraryVariablePosition","isArbitraryVariableSize","isArbitraryVariableImage","isArbitraryVariableShadow","testLabel","testValue","shouldMatchNoLabel","label","getDefaultConfig","themeColor","themeFont","themeText","themeFontWeight","themeTracking","themeLeading","themeBreakpoint","themeContainer","themeSpacing","themeRadius","themeShadow","themeInsetShadow","themeTextShadow","themeDropShadow","themeBlur","themePerspective","themeAspect","themeEase","themeAnimate","scaleBreak","scalePosition","scalePositionWithArbitrary","scaleOverflow","scaleOverscroll","scaleUnambiguousSpacing","scaleInset","scaleGridTemplateColsRows","scaleGridColRowStartAndEnd","scaleGridColRowStartOrEnd","scaleGridAutoColsRows","scaleAlignPrimaryAxis","scaleAlignSecondaryAxis","scaleMargin","scaleSizing","scaleColor","scaleBgPosition","scaleBgRepeat","scaleBgSize","scaleGradientStopPosition","scaleRadius","scaleBorderWidth","scaleLineStyle","scaleBlendMode","scaleMaskImagePosition","scaleBlur","scaleRotate","scaleScale","scaleSkew","scaleTranslate","twMerge","cn","inputs","falsyToString","cx","cva","base","_config_compoundVariants","variants","defaultVariants","getVariantClassNames","variant","variantProp","defaultVariantProp","variantKey","propsWithoutUndefined","acc","param","getCompoundVariantClassNames","cvClass","cvClassName","compoundVariantOptions","buttonVariants","Button","size","asChild","disabled","Comp","getVariantClasses","getColorClasses","color","getWeightClasses","weight","getAlignClasses","align","Text","truncate","as","Component","getDefaultElement","classes","getPaddingClasses","padding","getShadowClasses","shadow","getBorderRadiusClasses","borderRadius","Card","title","subtitle","onClick","clickable","jsxs","CardFooterComponent","CompoundCard","getSizeClasses","Modal","isOpen","onClose","showCloseButton","closeOnOverlayClick","closeOnEscape","modalRef","useEffect","handleEscape","e","overlayClasses","modalClasses","headerClasses","contentClasses","closeButtonClasses","ModalWithActions","actions","modalProps","ConfirmModal","onConfirm","message","confirmText","cancelText","Fragment","inputVariants","labelVariants","helperTextVariants","Input","containerClassName","labelClassName","inputSize","helperText","error","required","suffix","id","generatedId","inputId","helperTextId","errorId","currentVariant","displayHelperText","toKebabCase","toCamelCase","match","p1","p2","toPascalCase","camelCase","mergeClasses","array","hasA11yProp","prop","defaultAttributes","Icon","forwardRef","strokeWidth","absoluteStrokeWidth","iconNode","rest","createElement","tag","attrs","createLucideIcon","iconName","__iconNode","Bath","Bed","Car","ChevronDown","ChevronLeft","ChevronRight","Grid3x3","Heart","MapPin","Maximize","TrendingUp","selectVariants","selectLabelVariants","selectHelperTextVariants","Select","selectSize","options","placeholder","selectId","option","calculateDonutSegmentPath","startAngle","endAngle","radius","innerRadius","centerX","centerY","startRadians","endRadians","x1","y1","x2","y2","x3","y3","x4","y4","largeArcFlag","generateDonutPaths","segments","total","sum","segment","currentAngle","paths","segmentAngle","DonutChart","innerRadiusRatio","centerContent","showLegend","legendPosition","onSegmentClick","onSegmentHover","hoveredSegment","setHoveredSegment","handleSegmentHover","isFlexRow","filterEntitiesByCategory","entities","categoryId","entity","sortEntities","sort","sorted","a","b","aValue","bValue","parseMetricValue","metricValue","countEntitiesByCategory","useEntityFilter","_categories","initialCategory","initialSort","enableSearch","activeCategory","setActiveCategory","useState","setSort","searchQuery","setSearchQuery","categoryFilteredEntities","useMemo","searchFilteredEntities","query","filteredEntities","getCategoryCount","useCallback","resetFilters","chipVariants","Chip","icon","selected","dismissible","onDismiss","effectiveVariant","CategoryChips","categories","onCategoryChange","showCount","category","isActive","count","getTransactionBadgeClasses","transaction","customColor","getDefaultVariant","type","PropertyCard","onLike","onImageClick","showLikeButton","showNavigation","badgeColors","currentImageIndex","setCurrentImageIndex","isLiked","setIsLiked","nextImage","prev","prevImage","handleLike","newLikedState","handleImageClick","formatPrice","amount","currency","isCompact","cardClasses","imageContainerClasses","imageClasses","badgesClasses","badgeClasses","likeButtonClasses","navButtonClasses","dotsClasses","dotClasses","infoClasses","titleClasses","priceClasses","locationClasses","featuresClasses","featureItemClasses","amenitiesClasses","CardContent","_","PropertyGallery","images","transactionType","totalPhotos","onViewAllClick","displayImages","Grid","EntityDirectoryHeader","description","EntityDirectoryListItem","showIcon","showCategoryBadge","showMetric","compact","cat","isClickable","handleClick","handleKeyDown","EntityDirectoryTableHeader","columns","onSortChange","handleSort","columnKey","newDirection","handleSortClick","handleSortKeyDown","getSortIcon","column","isSortable","EntityDirectoryList","showIcons","showCategoryBadges","metricLabel","sortable","renderItem","EntityDirectoryEmptyState","action","EntityDirectoryErrorState","onRetry","errorMessage","EntityDirectoryLoadingState","rows","EntityDirectorySearchFilter","onChange","EntityDirectory","showCategoryCount","onSearchChange","searchPlaceholder","loading","emptyMessage","emptyState","errorState","loadingState","style","hasCategories","isEmpty","hasError","calculateMortgage","input","propertyPrice","downPayment","loanTerm","interestRate","propertyTax","hoaFees","loanPrincipal","monthlyRate","numberOfPayments","monthlyPayment","powerTerm","totalPaid","totalInterest","totalMonthlyPayment","formatCurrency","formatPercentage","decimals","validateMortgageInput","errors","LOAN_PROGRAMS","LOAN_PROGRAM_OPTIONS","program","DEFAULT_VALUES","CHART_COLORS","MortgageCalculator","initialPropertyPrice","initialDownPayment","initialLoanProgram","initialInterestRate","showPropertyTax","showHoaFees","onCalculationChange","setPropertyPrice","setDownPayment","loanProgram","setLoanProgram","setInterestRate","setPropertyTax","setHoaFees","p","chartSegments","PageLayout","header","sidebar","footer","layoutClasses","contentWithSidebarClasses","sidebarClasses","mainAreaClasses","mainContentClasses","DashboardLayout","AuthLayout","MarketingLayout","lightTheme","darkTheme","corporateTheme","minimalTheme","themes","setTheme","createEvent","setCustomTheme","resetTheme","$theme","createStore","state","themeName","$themeName","$themeColors","ThemeContext","useTheme","context","useContext","ThemeProvider","contextValue","useUnit","designSystemConstants","componentVariants","responsiveBreakpoints","colorUtils","variable","opacity","accessibilityUtils","componentSizes","animationUtils","layoutUtils","themeUtils","performanceUtils","wait","timeout","limit","inThrottle","SkipLink","href"],"mappings":"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","x_google_ignoreList":[0,1,2,3,5,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]}
|