@axzydev/axzy_ui_system 1.2.2 → 1.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/text/text.tsx +1 -1
- package/src/dev.css +2 -0
- package/src/main.tsx +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/hooks/useClickOutside.ts","../src/hooks/useDebouncedSearch.ts","../src/hooks/useEditableRow.ts","../src/hooks/useTableState.ts","../src/components/alert/alert.tsx","../src/components/text/text.tsx","../src/components/avatar/avatar.tsx","../src/components/badget/badget.tsx","../src/types/badget.types.ts","../src/theme/theme.ts","../src/components/breadcrumbs/breadcrumbs.tsx","../src/types/button.types.ts","../src/components/button/button.tsx","../src/components/calendar/calendar.tsx","../src/components/card/card.tsx","../src/components/checkbox/checkbox.tsx","../src/components/confirm-dialog/confirm-dialog.tsx","../src/types/table.types.ts","../src/components/data-table/dataTable.tsx","../src/components/input/input.tsx","../src/utils/styles.ts","../src/components/pagination/pagination.tsx","../src/components/select/select.tsx","../src/components/table/table.tsx","../src/components/date-picker/datePicker.tsx","../src/components/dialog/dialog.tsx","../src/components/form-header/form-header.tsx","../src/components/theme-provider/themeProvider.tsx","../src/components/tabs/tabs.tsx","../src/components/segmented-control/segmented-control.tsx","../src/components/divider/divider.tsx","../src/utils/color.utils.ts","../src/components/drawer/drawer.tsx","../src/components/empty-state/empty-state.tsx","../src/components/flex/flex.tsx","../src/components/form-builder/formBuilder.tsx","../src/components/form-builder/formBuilder.context.tsx","../src/components/form-builder/fieldRenderer.tsx","../src/components/time-picker/timePicker.tsx","../src/components/form-builder/useFormBuilder.ts","../src/components/grid/grid.tsx","../src/components/image/image.tsx","../src/components/navbar/navbar.tsx","../src/components/page/page.tsx","../src/components/page-header/page-header.tsx","../src/components/skeleton/skeleton.tsx","../src/components/stack/stack.tsx","../src/components/popover/popover.tsx","../src/components/progress/progress.tsx","../src/components/radio/radio.tsx","../src/components/search-select/search-select.tsx","../src/components/searchTable/searchTable.tsx","../src/components/searchTable/components/SearchInput.tsx","../src/components/searchTable/components/SortButton.tsx","../src/components/searchTable/components/SearchAndSortBar.tsx","../src/components/searchTable/components/TableHeaderCell.tsx","../src/components/searchTable/components/TableHeader.tsx","../src/utils/table.utils.ts","../src/components/searchTable/components/TableRow.tsx","../src/components/searchTable/components/EditableCell.tsx","../src/components/searchTable/components/TableEmptyState.tsx","../src/components/searchTable/components/PaginationControls.tsx","../src/components/searchTable/components/PaginationInfo.tsx","../src/components/sidebar/sidebar.tsx","../src/components/slide/slide.tsx","../src/components/slider/slider.tsx","../src/components/stat-card/stat-card.tsx","../src/components/textarea/textarea.tsx","../src/components/triple-filter/tripleFilter.tsx","../src/types/toast.types.ts","../src/components/toast/toast.tsx","../src/components/dropfile/dropfile.tsx","../src/components/layout/layout.tsx","../src/components/topbar/topbar.tsx","../src/types/loader.types.ts","../src/components/loader/loader.tsx","../src/components/stepper/stepper.tsx","../src/types/yup.types.ts"],"sourcesContent":["import \"./index.css\";\n\n// HOOKS\nimport useClickOutside from \"./hooks/useClickOutside\";\nimport { useDebouncedSearch } from \"./hooks/useDebouncedSearch\";\nimport { useEditableRow } from \"./hooks/useEditableRow\";\nimport { useTableState, UseTableStateOptions, UseTableStateResult } from \"./hooks/useTableState\";\n\n// COMPONENTES\nimport ITAlert from \"./components/alert/alert\";\nimport ITAvatar from \"./components/avatar/avatar\";\nimport ITBadget from \"./components/badget/badget\";\nimport ITBreadcrumbs from \"./components/breadcrumbs/breadcrumbs\";\nimport ITButton from \"./components/button/button\";\nimport ITCalendar from \"./components/calendar/calendar\";\nimport ITCard from \"./components/card/card\";\nimport ITCheckbox from \"./components/checkbox/checkbox\";\nimport ITConfirmDialog from \"./components/confirm-dialog/confirm-dialog\";\nimport ITDataTable from \"./components/data-table/dataTable\";\nimport ITDatePicker from \"./components/date-picker/datePicker\";\nimport ITDialog from \"./components/dialog/dialog\";\nimport ITDivider from \"./components/divider/divider\";\nimport ITDrawer from \"./components/drawer/drawer\";\nimport ITEmptyState from \"./components/empty-state/empty-state\";\nimport ITFlex from \"./components/flex/flex\";\nimport ITFormBuilder from \"./components/form-builder/formBuilder\";\nimport ITFormHeader from \"./components/form-header/form-header\";\nimport ITGrid from \"./components/grid/grid\";\nimport ITImage from \"./components/image/image\";\nimport ITInput from \"./components/input/input\";\nimport ITNavbar from \"./components/navbar/navbar\";\nimport ITPage from \"./components/page/page\";\nimport ITPageHeader from \"./components/page-header/page-header\";\nimport ITPagination from \"./components/pagination/pagination\";\nimport ITPopover from \"./components/popover/popover\";\nimport ITProgress from \"./components/progress/progress\";\nimport ITRadioGroup from \"./components/radio/radio\";\nimport ITSearchSelect from \"./components/search-select/search-select\";\nimport ITSelect from \"./components/select/select\";\nimport ITSearchTable from \"./components/searchTable/searchTable\";\nimport ITSegmentedControl from \"./components/segmented-control/segmented-control\";\nimport ITSidebar from \"./components/sidebar/sidebar\";\nimport ITSkeleton from \"./components/skeleton/skeleton\";\nimport ITSlideToggle from \"./components/slide/slide\";\nimport ITSlider from \"./components/slider/slider\";\nimport ITStack from \"./components/stack/stack\";\nimport ITStatCard from \"./components/stat-card/stat-card\";\nimport ITTable from \"./components/table/table\";\nimport ITText from \"./components/text/text\";\nimport ITTextarea from \"./components/textarea/textarea\";\nimport ITTabs from \"./components/tabs/tabs\";\nimport ITTripleFilter from \"./components/triple-filter/tripleFilter\";\nimport ITToast from \"./components/toast/toast\";\n\n// PROPS\nimport type { ITAlertProps } from \"./components/alert/alert.props\";\nimport type { ITAvatarProps } from \"./components/avatar/avatar.props\";\nimport type { ITBadgetProps } from \"./components/badget/badget.props\";\nimport type { ITBreadcrumbsProps, ITBreadcrumbItem } from \"./components/breadcrumbs/breadcrumbs.props\";\nimport type { ITButtonProps } from \"./components/button/button.props\";\nimport type { ITCalendarProps } from \"./components/calendar/calendar.props\";\nimport type { ITCardProps } from \"./components/card/card.props\";\nimport type { ITCheckboxProps } from \"./components/checkbox/checkbox.props\";\nimport type { ITConfirmDialogProps } from \"./components/confirm-dialog/confirm-dialog.props\";\nimport type { ITDataTableFetchParams, ITDataTableProps, ITDataTableResponse } from \"./components/data-table/dataTable.props\";\nimport type { ITDatePickerProps } from \"./components/date-picker/date-picker.props\";\nimport type { ITDialogProps } from \"./components/dialog/dialog.props\";\nimport type { ITDividerProps } from \"./components/divider/divider.props\";\nimport type { ITDrawerProps } from \"./components/drawer/drawer.props\";\nimport type { ITEmptyStateProps } from \"./components/empty-state/empty-state.props\";\nimport type { ITFlexProps } from \"./components/flex/flex.props\";\nimport type { ITFormBuilderProps } from \"./components/form-builder/formBuilder.props\";\nimport type { ITFormHeaderProps } from \"./components/form-header/form-header.props\";\nimport type { ITGridProps } from \"./components/grid/grid.props\";\nimport type { ITImageProps } from \"./components/image/image.props\";\nimport type { ITInputProps } from \"./components/input/input.props\";\nimport type { ITNavbarProps } from \"./components/navbar/navbar.props\";\nimport type { ITPageProps } from \"./components/page/page.props\";\nimport type { ITPageHeaderProps } from \"./components/page-header/page-header.props\";\nimport type { ITPaginationProps } from \"./components/pagination/pagination.props\";\nimport type { ITPopoverProps } from \"./components/popover/popover.props\";\nimport type { ITProgressProps } from \"./components/progress/progress.props\";\nimport type { ITRadioGroupProps, ITRadioOption } from \"./components/radio/radio.props\";\nimport type { ITSearchSelectProps } from \"./components/search-select/search-select.props\";\nimport type { ITSelectProps } from \"./components/select/select.props\";\nimport type { ITSearchTableProps } from \"./components/searchTable/searchTable.props\";\nimport type { ITSegmentedControlProps } from \"./components/segmented-control/segmented-control.props\";\nimport type { ITSidebarProps, ITNavigationItem, ITNavigationSubItem } from \"./components/sidebar/sidebar.props\";\nimport type { ITSkeletonProps } from \"./components/skeleton/skeleton.props\";\nimport type { ITSlideToggleProps } from \"./components/slide/slide.props\";\nimport type { ITSliderProps } from \"./components/slider/slider.props\";\nimport type { ITStackProps } from \"./components/stack/stack.props\";\nimport type { ITStatCardProps } from \"./components/stat-card/stat-card.props\";\nimport type { ITTableProps, Column } from \"./components/table/table.props\";\nimport type { ITTextProps } from \"./components/text/text.props\";\nimport type { ITTextareaProps } from \"./components/textarea/textarea.props\";\nimport type { ITTabsProps, ITTabItem } from \"./components/tabs/tabs.props\";\nimport type { ITTripleFilterProps, ITTripleFilterOption } from \"./components/triple-filter/tripleFilter.props\";\nimport type { ITToastProps } from \"./components/toast/toast.props\";\nimport type { FieldConfig, FieldConfigV2 } from \"./types/field.types\";\n\n// UTILS\nimport ITDropfile, { UploadStatus, FileTypeEnum } from \"./components/dropfile/dropfile\";\nimport ITLayout from \"./components/layout/layout\";\nimport { ITLayoutProps } from \"./components/layout/layout.props\";\nimport ITLoader from \"./components/loader/loader\";\nimport type { LoaderProps as ITLoaderProps } from \"./components/loader/loader.props\";\nimport ITStepper from \"./components/stepper/stepper\";\nimport type { ITStepperProps } from \"./components/stepper/stepper.props\";\nimport ITThemeProvider, { useITTheme, useITThemeSafe } from \"./components/theme-provider/themeProvider\";\nimport type { ITThemeProviderProps, ITThemePalette } from \"./components/theme-provider/themeProvider.props\";\nimport ITTimePicker from \"./components/time-picker/timePicker\";\nimport type { ITTimePickerProps } from \"./components/time-picker/timePicker.props\";\nimport type { ITThemeConfig } from \"./theme/theme.types\";\nimport { createValidationSchema } from \"./types/yup.types\";\n\nimport { getContrastTextColor, isLightColor, resolveCssColor } from \"./utils/color.utils\";\n\nexport {\n // Hooks\n useClickOutside, useDebouncedSearch, useEditableRow, useTableState,\n createValidationSchema,\n // Components\n ITAlert, ITAvatar, ITBadget, ITBreadcrumbs, ITButton,\n ITCalendar,\n ITCard, ITCheckbox, ITConfirmDialog, ITDataTable, ITDatePicker,\n ITDialog, ITDivider, ITDrawer,\n ITDropfile, ITEmptyState, ITFlex, ITFormBuilder, ITFormHeader, ITGrid, ITImage, ITInput, ITLayout,\n ITLoader, ITNavbar, ITPage, ITPageHeader, ITPagination, ITPopover, ITProgress,\n ITRadioGroup, ITSelect, ITSearchSelect,\n ITSearchTable,\n ITSegmentedControl, ITSidebar, ITSkeleton, ITSlideToggle, ITSlider, ITStack, ITStatCard, ITStepper,\n ITTable, ITTabs, ITText, ITTextarea, ITTripleFilter, ITThemeProvider,\n useITTheme, useITThemeSafe, ITTimePicker, ITToast,\n UploadStatus, FileTypeEnum,\n getContrastTextColor, isLightColor, resolveCssColor\n};\n\n export type {\n Column, FieldConfig,\n FieldConfigV2,\n ITAlertProps, ITAvatarProps, ITBadgetProps,\n ITBreadcrumbItem, ITBreadcrumbsProps, ITButtonProps,\n ITCalendarProps,\n ITCardProps, ITCheckboxProps, ITConfirmDialogProps,\n ITDataTableFetchParams, ITDataTableProps, ITDataTableResponse, ITDatePickerProps,\n ITDialogProps, ITDividerProps, ITDrawerProps,\n ITEmptyStateProps, ITFlexProps,\n ITFormBuilderProps, ITFormHeaderProps,\n ITGridProps, ITImageProps, ITInputProps,\n ITLayoutProps, ITLoaderProps, ITNavbarProps,\n ITPageProps, ITPageHeaderProps,\n ITNavigationItem, ITNavigationSubItem,\n ITPaginationProps, ITPopoverProps, ITProgressProps,\n ITRadioGroupProps, ITRadioOption, ITSelectProps, ITSearchSelectProps,\n ITSearchTableProps,\n ITSegmentedControlProps, ITSidebarProps, ITSkeletonProps, ITSlideToggleProps, ITSliderProps,\n ITStackProps, ITStatCardProps, ITStepperProps,\n ITTableProps, ITTabsProps, ITTabItem, ITTextProps, ITTextareaProps,\n ITTripleFilterProps, ITTripleFilterOption, ITThemeConfig, ITThemeProviderProps, ITThemePalette,\n ITTimePickerProps, ITToastProps,\n UseTableStateOptions, UseTableStateResult\n };\n\n\n","import { useEffect } from \"react\";\n\nconst useClickOutside = (\n ref: React.RefObject<HTMLElement>,\n callback: () => void\n) => {\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (ref.current && !ref.current.contains(event.target as Node)) {\n callback();\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [ref, callback]);\n};\n\nexport default useClickOutside;\n","import { useCallback, useEffect, useRef, useState } from \"react\";\n\ninterface UseDebouncedSearchOptions {\n initialValue?: string;\n debounceMs?: number;\n onSearch: (value: string) => void;\n}\n\ninterface UseDebouncedSearchResult {\n searchTerm: string;\n setSearchTerm: (value: string) => void;\n handleSearchChange: (value: string) => void;\n handleClearSearch: () => void;\n}\n\nexport function useDebouncedSearch({\n initialValue = \"\",\n debounceMs = 500,\n onSearch,\n}: UseDebouncedSearchOptions): UseDebouncedSearchResult {\n const [searchTerm, setSearchTerm] = useState(initialValue);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const debouncedSearch = useCallback(\n (value: string) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => {\n onSearch(value);\n }, debounceMs);\n },\n [onSearch, debounceMs]\n );\n\n const handleSearchChange = useCallback(\n (value: string) => {\n setSearchTerm(value);\n debouncedSearch(value);\n },\n [debouncedSearch]\n );\n\n const handleClearSearch = useCallback(() => {\n setSearchTerm(\"\");\n onSearch(\"\");\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n }, [onSearch]);\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n };\n }, []);\n\n return { searchTerm, setSearchTerm, handleSearchChange, handleClearSearch };\n}\n","import { useCallback, useMemo, useRef, useState } from \"react\";\nimport * as yup from \"yup\";\nimport type { SearchColumn } from \"../components/searchTable/searchTable.props\";\n\ninterface UseEditableRowOptions<T> {\n row: T;\n columns: SearchColumn<T>[];\n getNestedValue: (obj: unknown, path: string) => unknown;\n validationSchema?: yup.ObjectSchema<any>;\n}\n\ninterface UseEditableRowResult<T> {\n editedRow: T;\n errors: Record<string, string>;\n isHovered: boolean;\n setIsHovered: (v: boolean) => void;\n hasErrors: boolean;\n handleEdit: (onEdit?: (row: T) => void) => Promise<void>;\n handleSave: (onSave?: (row: T) => void) => Promise<void>;\n handleCancel: (onCancel?: () => void) => void;\n handleChange: (key: string, value: any) => Promise<void>;\n reset: () => void;\n}\n\nexport function useEditableRow<T>({\n row,\n columns,\n getNestedValue,\n validationSchema,\n}: UseEditableRowOptions<T>): UseEditableRowResult<T> {\n const [isHovered, setIsHovered] = useState(false);\n const [editedRow, setEditedRow] = useState<T>({ ...row });\n const [errors, setErrors] = useState<Record<string, string>>({});\n const rowRef = useRef(row);\n rowRef.current = row;\n\n const validateAll = useCallback(\n async (rowData: T): Promise<Record<string, string>> => {\n const newErrors: Record<string, string> = {};\n\n if (validationSchema) {\n try {\n await validationSchema.validate(rowData, { abortEarly: false });\n } catch (yupError) {\n if (yupError instanceof yup.ValidationError) {\n yupError.inner.forEach((error) => {\n if (error.path) newErrors[error.path] = error.message;\n });\n }\n }\n }\n\n columns.forEach((col) => {\n if (col.editable && col.validation && !newErrors[col.key]) {\n const value = getNestedValue(rowData, col.key);\n const error = col.validation(value, rowData);\n if (error) newErrors[col.key] = error;\n }\n });\n\n return newErrors;\n },\n [columns, getNestedValue, validationSchema]\n );\n\n const handleEdit = useCallback(\n async (onEdit?: (row: T) => void) => {\n if (onEdit) {\n onEdit(rowRef.current);\n const clone = { ...rowRef.current };\n setEditedRow(clone);\n const initialErrors = await validateAll(clone);\n setErrors(initialErrors);\n }\n },\n [validateAll]\n );\n\n const handleSave = useCallback(\n async (onSave?: (row: T) => void) => {\n const finalErrors = await validateAll(editedRow);\n if (Object.keys(finalErrors).length > 0) {\n setErrors(finalErrors);\n return;\n }\n if (onSave) onSave(editedRow);\n },\n [editedRow, validateAll]\n );\n\n const handleCancel = useCallback((onCancel?: () => void) => {\n if (onCancel) onCancel();\n setEditedRow({ ...rowRef.current });\n setErrors({});\n }, []);\n\n const handleChange = useCallback(\n async (key: string, value: any) => {\n const column = columns.find((col) => col.key === key);\n let processedValue = value;\n\n if (column) {\n switch (column.type) {\n case \"number\":\n processedValue =\n value === \"\" || value === null ? null : Number(value);\n break;\n case \"boolean\":\n if (value === \"\" || value === null || value === undefined) {\n processedValue = false;\n } else if (typeof value === \"string\") {\n processedValue = value === \"true\" || value === \"1\";\n } else {\n processedValue = Boolean(value);\n }\n break;\n case \"date\":\n processedValue = value ? new Date(value).toISOString() : null;\n break;\n case \"catalog\":\n processedValue = value ?? null;\n break;\n default:\n processedValue = value ?? \"\";\n break;\n }\n }\n\n setEditedRow((prev) => {\n const updated = { ...prev, [key]: processedValue };\n validateAll(updated).then(setErrors);\n return updated;\n });\n },\n [columns, validateAll]\n );\n\n const reset = useCallback(() => {\n setEditedRow({ ...rowRef.current });\n setErrors({});\n }, []);\n\n const hasErrors = useMemo(() => Object.keys(errors).length > 0, [errors]);\n\n return {\n editedRow,\n errors,\n isHovered,\n setIsHovered,\n hasErrors,\n handleEdit,\n handleSave,\n handleCancel,\n handleChange,\n reset,\n };\n}\n","import { useCallback, useMemo, useState } from \"react\";\n\ninterface SortConfig {\n key: string;\n direction: \"asc\" | \"desc\";\n}\n\nexport interface UseTableStateOptions {\n defaultItemsPerPage?: number;\n initialSort?: SortConfig | null;\n}\n\nexport interface UseTableStateResult {\n currentPage: number;\n itemsPerPage: number;\n filters: Record<string, string | boolean | number>;\n sortConfig: SortConfig | null;\n totalPages: number;\n setTotalPages: (pages: number) => void;\n goToPage: (page: number) => void;\n handleItemsPerPageChange: (value: number) => void;\n handleFilterChange: (\n key: string,\n value: string | boolean | number | undefined\n ) => void;\n handleSort: (key: string, sortable?: boolean) => void;\n resetPage: () => void;\n clearFilters: () => void;\n}\n\nexport function useTableState({\n defaultItemsPerPage = 10,\n initialSort = null,\n}: UseTableStateOptions = {}): UseTableStateResult {\n const [currentPage, setCurrentPage] = useState(1);\n const [itemsPerPage, setItemsPerPage] = useState(defaultItemsPerPage);\n const [filters, setFilters] = useState<\n Record<string, string | boolean | number>\n >({});\n const [sortConfig, setSortConfig] = useState<SortConfig | null>(initialSort);\n const [totalPages, setTotalPages] = useState(1);\n\n const goToPage = useCallback(\n (page: number) => {\n if (page >= 1 && page <= totalPages) {\n setCurrentPage(page);\n }\n },\n [totalPages]\n );\n\n const handleItemsPerPageChange = useCallback((value: number) => {\n setItemsPerPage(value);\n setCurrentPage(1);\n }, []);\n\n const handleFilterChange = useCallback(\n (key: string, value: string | boolean | number | undefined) => {\n setFilters((prev) => {\n if (value === undefined || value === null || value === \"\") {\n const next = { ...prev };\n delete next[key];\n return next;\n }\n return { ...prev, [key]: value };\n });\n setCurrentPage(1);\n },\n []\n );\n\n const handleSort = useCallback((key: string, sortable?: boolean) => {\n if (sortable === false) return;\n setSortConfig((prev) => {\n let direction: \"asc\" | \"desc\" = \"asc\";\n if (prev?.key === key && prev.direction === \"asc\") {\n direction = \"desc\";\n }\n return { key, direction };\n });\n setCurrentPage(1);\n }, []);\n\n const resetPage = useCallback(() => setCurrentPage(1), []);\n const clearFilters = useCallback(() => {\n setFilters({});\n setCurrentPage(1);\n }, []);\n\n const stable = useMemo(\n () => ({\n currentPage,\n itemsPerPage,\n filters,\n sortConfig,\n totalPages,\n setTotalPages,\n goToPage,\n handleItemsPerPageChange,\n handleFilterChange,\n handleSort,\n resetPage,\n clearFilters,\n }),\n [\n currentPage,\n itemsPerPage,\n filters,\n sortConfig,\n totalPages,\n setTotalPages,\n goToPage,\n handleItemsPerPageChange,\n handleFilterChange,\n handleSort,\n resetPage,\n clearFilters,\n ]\n );\n\n return stable;\n}\n","import clsx from \"clsx\";\nimport { ITAlertProps, AlertVariant } from \"./alert.props\";\nimport { FaInfoCircle, FaCheckCircle, FaExclamationTriangle, FaTimesCircle, FaTimes } from \"react-icons/fa\";\nimport { theme } from \"@/theme/theme\";\nimport ITText from \"@/components/text/text\";\n\nconst config: Record<AlertVariant, { icon: React.ReactNode; classes: string }> = {\n info: {\n icon: <FaInfoCircle size={16} />,\n classes: \"bg-info-50 border-info-200 text-info-800 dark:bg-info-950/20 dark:border-info-800 dark:text-info-300\",\n },\n success: {\n icon: <FaCheckCircle size={16} />,\n classes: \"bg-success-50 border-success-200 text-success-800 dark:bg-success-950/20 dark:border-success-800 dark:text-success-300\",\n },\n warning: {\n icon: <FaExclamationTriangle size={16} />,\n classes: \"bg-warning-50 border-warning-200 text-warning-800 dark:bg-warning-950/20 dark:border-warning-800 dark:text-warning-300\",\n },\n error: {\n icon: <FaTimesCircle size={16} />,\n classes: \"bg-danger-50 border-danger-200 text-danger-800 dark:bg-danger-950/20 dark:border-danger-800 dark:text-danger-300\",\n },\n};\n\nexport default function ITAlert({\n variant = \"info\",\n title,\n children,\n dismissible,\n onDismiss,\n icon,\n className,\n}: ITAlertProps) {\n const cfg = config[variant];\n return (\n <div\n className={clsx(\"flex items-start gap-3 rounded-xl border p-4\", cfg.classes, className)}\n role=\"alert\"\n >\n <span className=\"mt-0.5 flex-shrink-0\">{icon || cfg.icon}</span>\n <div className=\"flex-1 min-w-0\">\n {title && <ITText as=\"p\" className=\"text-sm font-bold mb-0.5\">{title}</ITText>}\n {children && <ITText as=\"div\" className=\"text-sm opacity-90\">{children}</ITText>}\n </div>\n {dismissible && onDismiss && (\n <button onClick={onDismiss} className=\"flex-shrink-0 opacity-60 hover:opacity-100 transition-opacity\">\n <FaTimes size={12} />\n </button>\n )}\n </div>\n );\n}\n","import { ITTextProps } from \"./text.props\";\n\nexport default function ITText({\n children,\n as: Tag = \"p\",\n className = \"\",\n muted = false,\n style,\n ...rest\n}: ITTextProps & { style?: React.CSSProperties }) {\n return (\n <Tag\n className={className}\n style={muted ? { color: \"var(--color-text-muted)\", ...style } : { color: \"var(--color-text-default)\", ...style }}\n {...rest}\n >\n {children}\n </Tag>\n );\n}\n","import clsx from \"clsx\";\nimport { ITAvatarProps, AvatarSize } from \"./avatar.props\";\nimport ITText from \"@/components/text/text\";\n\nconst sizeMap: Record<AvatarSize, { container: string; text: string }> = {\n xs: { container: \"w-6 h-6\", text: \"text-[10px]\" },\n sm: { container: \"w-8 h-8\", text: \"text-xs\" },\n md: { container: \"w-10 h-10\", text: \"text-sm\" },\n lg: { container: \"w-12 h-12\", text: \"text-base\" },\n xl: { container: \"w-16 h-16\", text: \"text-xl\" },\n};\n\nexport default function ITAvatar({\n src,\n alt = \"\",\n initials,\n size = \"md\",\n color = \"bg-primary-500\",\n className,\n badge,\n onClick,\n}: ITAvatarProps) {\n const { container, text } = sizeMap[size];\n\n return (\n <div\n className={clsx(\"relative inline-flex items-center justify-center rounded-full flex-shrink-0\", container, className)}\n onClick={onClick}\n role={onClick ? \"button\" : undefined}\n tabIndex={onClick ? 0 : undefined}\n >\n {src ? (\n <img\n src={src}\n alt={alt}\n className=\"w-full h-full rounded-full object-cover\"\n onError={(e) => {\n e.currentTarget.style.display = \"none\";\n }}\n />\n ) : (\n <div className={clsx(\"w-full h-full rounded-full flex items-center justify-center text-white font-semibold\", text, color)}>\n <ITText as=\"span\">{initials || alt.charAt(0).toUpperCase() || \"?\"}</ITText>\n </div>\n )}\n {badge && (\n <div className=\"absolute -bottom-0.5 -right-0.5\">\n {badge}\n </div>\n )}\n </div>\n );\n}\n","// components/ITBadge.tsx\nimport clsx from \"clsx\";\nimport { ITBadgetProps } from \"./badget.props\";\nimport {\n badgeSizes,\n} from \"@/types/badget.types\";\nimport { theme } from \"@/theme/theme\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITBadget({\n children,\n label,\n color = \"primary\",\n size = \"medium\",\n variant = \"filled\",\n className,\n}: ITBadgetProps) {\n // Access theme configuration\n const themeBadge = (theme as any).badge || {};\n const config = themeBadge[color] || themeBadge.primary || {};\n\n const getStyle = () => {\n const style: React.CSSProperties = {\n fontSize: config.fontSize,\n fontWeight: config.fontWeight,\n padding: config.padding,\n borderRadius: config.borderRadius, // '9999px' in theme\n borderWidth: '1px', // Default border width for consistency\n borderStyle: 'solid',\n borderColor: 'transparent', // Default transparent\n transition: 'all 0.2s',\n };\n\n if (variant === \"filled\") {\n style.backgroundColor = config.backgroundColor;\n style.color = config.color;\n style.borderColor = config.borderColor || 'transparent'; // Some filled badges might have subtle borders\n } else if (variant === \"outlined\") {\n style.backgroundColor = \"transparent\";\n // Use the dark text color for both text and border to ensure high contrast\n style.color = config.color; \n style.borderColor = config.color;\n }\n\n return style;\n };\n\n return (\n <span\n className={clsx(\n \"inline-flex items-center justify-center\",\n // Fallback size if theme doesn't have it (though theme does have it for primary)\n !config.padding ? badgeSizes[size] : \"\", \n className\n )}\n style={getStyle()}\n >\n {children || <ITText as=\"span\" className={clsx(\"font-semibold\")}>{label}</ITText>}\n </span>\n );\n}\n","import { ColorsTypes } from \"./colors.types\";\n\nexport const badgeVariants = {\n filled: \"filled\",\n outlined: \"outlined\",\n} as const;\n\nexport const badgeColors = {\n primary: \"bg-primary-500 text-white\",\n secondary: \"bg-secondary-500 text-white\",\n success: \"bg-success-500 text-white\",\n danger: \"bg-danger-500 text-white\",\n warning: \"bg-warning-500 text-black\",\n purple: \"bg-purple-500 text-white\",\n} as const;\n\nexport const outlinedBadgeColors = {\n primary: \"bg-primary-200 border border-primary-500 text-primary-700\",\n secondary: \"bg-secondary-200 border border-secondary-500 text-secondary-700\",\n success: \"bg-success-200 border border-success-500 text-success-700\",\n danger: \"bg-danger-200 border border-danger-500 text-danger-700\",\n warning: \"bg-warning-200 border border-warning-500 text-warning-700\",\n purple: \"bg-purple-200 border border-purple-500 text-purple-700\",\n} as const;\n\nexport const badgeSizes = {\n small: \"text-xs px-2 py-1\",\n medium: \"text-sm px-3 py-1.5\",\n large: \"text-base px-4 py-2\",\n} as const;\n\nexport const getBadgeColorClasses = (color: ColorsTypes, variant: keyof typeof badgeVariants) => {\n if (variant === \"outlined\") {\n return outlinedBadgeColors[color];\n }\n return badgeColors[color];\n};","/**\n * 1. Paleta base (Raw HEX values - Default Theme Fallback)\n */\nexport const palette = {\n blue: {\n 50: '#eff6ff',\n 100: '#dbeafe',\n 200: '#bfdbfe',\n 300: '#93c5fd',\n 400: '#60a5fa',\n 500: '#3b82f6',\n 600: '#2563eb',\n 700: '#1d4ed8',\n 800: '#1e40af',\n 900: '#1e3a8a',\n 950: '#172554',\n },\n cyan: {\n 50: '#ecfeff',\n 100: '#cffafe',\n 200: '#a5f3fc',\n 300: '#67e8f9',\n 400: '#22d3ee',\n 500: '#06b6d4',\n 600: '#0891b2',\n 700: '#0e7490',\n 800: '#155e75',\n 900: '#164e63',\n 950: '#083344',\n },\n gray: {\n 50: '#f8fafc',\n 100: '#f1f5f9',\n 200: '#e2e8f0',\n 300: '#cbd5e1',\n 400: '#94a3b8',\n 500: '#64748b',\n 600: '#475569',\n 700: '#334155',\n 800: '#1e293b',\n 900: '#0f172a',\n 950: '#020617',\n },\n success: {\n 50: '#ecfdf5', 100: '#d1fae5', 200: '#a7f3d0', 300: '#6ee7b7',\n 400: '#34d399', 500: '#10b981', 600: '#059669', 700: '#047857',\n 800: '#065f46', 900: '#064e3b', 950: '#022c22',\n },\n danger: {\n 50: '#fff1f2', 100: '#ffe4e6', 200: '#fecdd3', 300: '#fda4af',\n 400: '#fb7185', 500: '#f43f5e', 600: '#e11d48', 700: '#be123c',\n 800: '#9f1239', 900: '#881337', 950: '#4c0519',\n },\n warning: {\n 50: '#fffbeb', 100: '#fef3c7', 200: '#fde68a', 300: '#fcd34d',\n 400: '#fbbf24', 500: '#f59e0b', 600: '#d97706', 700: '#b45309',\n 800: '#92400e', 900: '#78350f', 950: '#451a03',\n },\n purple: {\n 50: '#f5f3ff', 100: '#ede9fe', 200: '#ddd6fe', 300: '#c4b5fd',\n 400: '#a78bfa', 500: '#8b5cf6', 600: '#7c3aed', 700: '#6d28d9',\n 800: '#5b21b6', 900: '#4c1d95', 950: '#2e1065',\n },\n info: {\n 50: '#f0f9ff', 100: '#e0f2fe', 200: '#bae6fd', 300: '#7dd3fc',\n 400: '#38bdf8', 500: '#0ea5e9', 600: '#0284c7', 700: '#0369a1',\n 800: '#075985', 900: '#0c4a6e', 950: '#082f49',\n },\n};\n\n/**\n * 2. Mapeo Dinámico a Variables CSS\n * Esta es la magia estructural: en lugar de acoplar la UI a un Hex estático, \n * todo apunta a var(--color-[name]-[shade])\n */\nconst createColorVar = (name: string) => ({\n 50: `var(--color-${name}-50)`,\n 100: `var(--color-${name}-100)`,\n 200: `var(--color-${name}-200)`,\n 300: `var(--color-${name}-300)`,\n 400: `var(--color-${name}-400)`,\n 500: `var(--color-${name}-500)`,\n 600: `var(--color-${name}-600)`,\n 700: `var(--color-${name}-700)`,\n 800: `var(--color-${name}-800)`,\n 900: `var(--color-${name}-900)`,\n 950: `var(--color-${name}-950)`,\n});\n\nexport const semanticColors = {\n primary: createColorVar('primary'),\n secondary: createColorVar('secondary'),\n success: createColorVar('success'),\n danger: createColorVar('danger'),\n warning: createColorVar('warning'),\n info: createColorVar('info'), \n purple: createColorVar('purple'),\n error: createColorVar('danger'), // Alias\n gray: createColorVar('secondary'), // Secondary as Gray\n};\n\n/**\n * 3. Tokens de componentes (heredan de las Vbles CSS semanticColors)\n */\nexport const components = {\n layout: {\n backgroundColor: `var(--layout-bg, ${semanticColors.gray[50]})`,\n contentPadding: 'var(--layout-padding, 1.5rem)',\n },\n topbar: {\n backgroundColor: 'var(--topbar-bg, rgba(255, 255, 255, 0.90))', \n borderColor: `var(--topbar-border, ${semanticColors.gray[200]})`,\n iconColor: `var(--topbar-icon, ${semanticColors.gray[500]})`,\n iconHoverColor: `var(--topbar-icon-hover, ${semanticColors.gray[700]})`,\n shadow: 'var(--topbar-shadow, 0 4px 6px -1px rgb(0 0 0 / 0.05), 0 2px 4px -2px rgb(0 0 0 / 0.025))',\n textColor: `var(--topbar-text, ${semanticColors.gray[700]})`,\n textHoverColor: `var(--topbar-text-hover, ${semanticColors.gray[900]})`,\n userMenu: {\n backgroundColor: `var(--topbar-user-bg, ${semanticColors.gray[50]})`,\n hoverBackground: `var(--topbar-user-hover, ${semanticColors.gray[100]})`,\n textColor: `var(--topbar-user-text, ${semanticColors.gray[900]})`,\n subtitleColor: `var(--topbar-user-subtitle, ${semanticColors.gray[500]})`,\n dropdown: {\n backgroundColor: 'var(--topbar-user-dropdown-bg, #ffffff)',\n borderColor: `var(--topbar-user-dropdown-border, ${semanticColors.gray[200]})`,\n itemHoverBackground: `var(--topbar-user-item-hover, ${semanticColors.gray[50]})`,\n }\n }\n },\n sidebar: {\n backgroundColor: 'var(--sidebar-bg, rgba(255, 255, 255, 0.90))',\n borderColor: `var(--sidebar-border, ${semanticColors.gray[200]})`,\n label: {\n color: `var(--sidebar-label-color, ${semanticColors.gray[700]})`,\n size: 'var(--sidebar-label-size, 0.9rem)',\n weight: 'var(--sidebar-label-weight, 500)',\n },\n icon: {\n color: `var(--sidebar-icon-color, ${semanticColors.gray[500]})`,\n size: 'var(--sidebar-icon-size, 1.25rem)',\n },\n hover: {\n backgroundColor: `var(--sidebar-hover-bg, ${semanticColors.gray[100]})`,\n },\n active: {\n backgroundColor: `var(--sidebar-active-bg, ${semanticColors.gray[50]})`,\n color: `var(--sidebar-active-color, ${semanticColors.gray[900]})`,\n iconColor: `var(--sidebar-active-icon, ${semanticColors.primary[500]})`, \n },\n badge: {\n backgroundColor: `var(--sidebar-badge-bg, ${semanticColors.primary[500]})`, \n color: 'var(--sidebar-badge-color, #ffffff)',\n },\n },\n\n button: {\n primary: {\n backgroundColor: semanticColors.primary[500],\n color: '#ffffff',\n hover: semanticColors.primary[600],\n active: semanticColors.primary[700],\n focus: `0 0 0 2px ${semanticColors.primary[200]}`,\n borderRadius: '0.375rem', \n padding: '0.5rem 1rem',\n fontSize: '0.875rem',\n fontWeight: '600',\n transition: 'all 150ms ease-in-out',\n },\n\n secondary: {\n backgroundColor: semanticColors.secondary[500],\n color: '#ffffff',\n hover: semanticColors.secondary[600],\n focus: `0 0 0 2px ${semanticColors.secondary[200]}`,\n borderRadius: '0.375rem',\n padding: '0.5rem 1rem',\n fontSize: '0.875rem',\n fontWeight: '600',\n },\n\n success: {\n backgroundColor: semanticColors.success[500],\n color: '#ffffff',\n hover: semanticColors.success[600],\n focus: `0 0 0 2px ${semanticColors.success[200]}`,\n borderRadius: '0.375rem',\n },\n\n danger: {\n backgroundColor: semanticColors.danger[500],\n color: '#ffffff',\n hover: semanticColors.danger[600],\n focus: `0 0 0 2px ${semanticColors.danger[200]}`,\n borderRadius: '0.375rem',\n },\n\n error: {\n backgroundColor: semanticColors.danger[500],\n color: '#ffffff',\n hover: semanticColors.danger[600],\n borderRadius: '0.375rem',\n },\n\n warning: {\n backgroundColor: semanticColors.warning[500],\n color: '#ffffff',\n hover: semanticColors.warning[600],\n focus: `0 0 0 2px ${semanticColors.warning[200]}`,\n borderRadius: '0.375rem',\n },\n\n info: {\n backgroundColor: semanticColors.info[500],\n color: '#ffffff',\n hover: semanticColors.info[600],\n focus: `0 0 0 2px ${semanticColors.info[200]}`,\n borderRadius: '0.375rem',\n },\n\n purple: {\n backgroundColor: semanticColors.purple[500],\n color: '#ffffff',\n hover: semanticColors.purple[600],\n focus: `0 0 0 2px ${semanticColors.purple[200]}`,\n borderRadius: '0.375rem',\n },\n \n outline: {\n backgroundColor: 'transparent',\n color: semanticColors.primary[600],\n borderColor: semanticColors.primary[600],\n borderWidth: '2px', \n hover: semanticColors.primary[50],\n borderRadius: '0.375rem',\n },\n },\n \n badge: {\n primary: {\n backgroundColor: semanticColors.primary[100],\n color: semanticColors.primary[800],\n borderColor: semanticColors.primary[200],\n borderRadius: '9999px',\n padding: '0.25rem 0.75rem',\n fontSize: '0.75rem',\n fontWeight: '500',\n },\n secondary: {\n backgroundColor: semanticColors.secondary[100],\n color: semanticColors.secondary[800],\n borderColor: semanticColors.secondary[200],\n borderRadius: '9999px',\n },\n success: {\n backgroundColor: semanticColors.success[100],\n color: semanticColors.success[800],\n borderColor: semanticColors.success[200],\n borderRadius: '9999px',\n },\n danger: {\n backgroundColor: semanticColors.danger[100],\n color: semanticColors.danger[800],\n borderColor: semanticColors.danger[200],\n borderRadius: '9999px',\n },\n warning: {\n backgroundColor: semanticColors.warning[100],\n color: semanticColors.warning[800],\n borderColor: semanticColors.warning[200],\n borderRadius: '9999px',\n },\n info: {\n backgroundColor: semanticColors.info[100],\n color: semanticColors.info[800],\n borderColor: semanticColors.info[200],\n borderRadius: '9999px',\n },\n purple: {\n backgroundColor: semanticColors.purple[100],\n color: semanticColors.purple[800],\n borderColor: semanticColors.purple[200],\n borderRadius: '9999px',\n },\n error: {\n backgroundColor: semanticColors.danger[100],\n color: semanticColors.danger[800],\n borderColor: semanticColors.danger[200],\n borderRadius: '9999px',\n },\n },\n\n card: {\n backgroundColor: 'var(--card-bg, #ffffff)',\n borderRadius: '1rem',\n borderColor: `var(--card-border, ${semanticColors.gray[200]})`,\n borderWidth: '1px',\n shadow: 'var(--card-shadow, 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1))',\n hover: {\n shadow: 'var(--card-shadow-hover, 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1))',\n },\n header: {\n backgroundColor: `var(--card-header-bg, ${semanticColors.gray[50]})`,\n borderBottom: `1px solid var(--card-header-border, var(--color-secondary-200))`,\n padding: '1rem 1.5rem',\n borderTopLeftRadius: '1rem',\n borderTopRightRadius: '1rem',\n },\n body: {\n padding: '1.5rem',\n },\n },\n\n input: {\n backgroundColor: 'var(--input-bg, #ffffff)',\n borderColor: `var(--input-border, ${semanticColors.gray[300]})`,\n borderRadius: '0.5rem',\n padding: '0.5rem 0.75rem',\n fontSize: '0.875rem',\n focus: {\n borderColor: `var(--input-focus-border, ${semanticColors.primary[500]})`,\n ring: `var(--input-focus-ring, 0 0 0 3px ${semanticColors.primary[100]})`,\n },\n placeholder: `var(--input-placeholder, ${semanticColors.gray[400]})`,\n disabled: {\n backgroundColor: `var(--input-disabled-bg, ${semanticColors.gray[100]})`,\n borderColor: `var(--input-disabled-border, ${semanticColors.gray[200]})`,\n },\n error: {\n borderColor: `var(--input-error-border, ${semanticColors.danger[500]})`,\n ring: `var(--input-error-ring, 0 0 0 3px ${semanticColors.danger[100]})`,\n },\n },\n\n table: {\n header: {\n backgroundColor: semanticColors.gray[50],\n color: semanticColors.gray[700],\n fontSize: '0.75rem',\n fontWeight: '600',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n },\n row: {\n hover: semanticColors.primary[50],\n borderBottom: `1px solid var(--color-secondary-200)`,\n },\n cell: {\n padding: '1rem 1.5rem',\n },\n },\n\n alert: {\n info: {\n backgroundColor: semanticColors.info[50],\n borderColor: semanticColors.info[200],\n color: semanticColors.info[800],\n icon: semanticColors.info[500],\n },\n success: {\n backgroundColor: semanticColors.success[50],\n borderColor: semanticColors.success[200],\n color: semanticColors.success[800],\n icon: semanticColors.success[500],\n },\n warning: {\n backgroundColor: semanticColors.warning[50],\n borderColor: semanticColors.warning[200],\n color: semanticColors.warning[800],\n icon: semanticColors.warning[500],\n },\n error: {\n backgroundColor: semanticColors.danger[50],\n borderColor: semanticColors.danger[200],\n color: semanticColors.danger[800],\n icon: semanticColors.danger[500],\n },\n },\n\n modal: {\n overlay: {\n backgroundColor: 'var(--modal-overlay, rgba(15, 23, 42, 0.75))',\n },\n content: {\n backgroundColor: 'var(--modal-bg, #ffffff)',\n borderRadius: '1rem',\n shadow: 'var(--modal-shadow, 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1))',\n },\n header: {\n padding: '1.5rem 1.5rem 0.5rem 1.5rem',\n borderBottom: `1px solid var(--modal-header-border, var(--color-secondary-200))`,\n },\n body: {\n padding: '1.5rem',\n },\n footer: {\n padding: '1rem 1.5rem',\n borderTop: `1px solid var(--modal-footer-border, var(--color-secondary-200))`,\n backgroundColor: `var(--modal-footer-bg, ${semanticColors.gray[50]})`,\n },\n },\n\n calendar: {\n backgroundColor: 'var(--calendar-bg, #ffffff)',\n borderColor: `var(--calendar-border, ${semanticColors.gray[200]})`,\n header: {\n textColor: `var(--calendar-header-text, ${semanticColors.gray[800]})`,\n hoverBackground: `var(--calendar-header-hover, ${semanticColors.gray[100]})`,\n },\n days: {\n textColor: `var(--calendar-days-text, ${semanticColors.gray[700]})`,\n weekendColor: `var(--calendar-days-weekend, ${semanticColors.gray[500]})`,\n outsideMonthColor: `var(--calendar-days-outside, ${semanticColors.gray[300]})`,\n },\n selection: {\n selectedColor: 'var(--calendar-selected-text, #ffffff)',\n selectedBackground: `var(--calendar-selected-bg, ${semanticColors.primary[600]})`,\n rangeBackground: `var(--calendar-range-bg, ${semanticColors.primary[50]})`,\n todayBackground: `var(--calendar-today-bg, ${semanticColors.primary[50]})`,\n todayColor: `var(--calendar-today-text, ${semanticColors.primary[600]})`,\n },\n },\n};\n\n/**\n * 4. Configuración global de tipografía y espaciado\n */\nexport const typography = {\n fontFamily: {\n sans: ['Inter', 'system-ui', '-apple-system', 'sans-serif'],\n mono: ['Fira Code', 'monospace'],\n },\n fontSize: {\n xs: '0.75rem',\n sm: '0.875rem',\n base: '1rem',\n lg: '1.125rem',\n xl: '1.25rem',\n '2xl': '1.5rem',\n '3xl': '1.875rem',\n '4xl': '2.25rem',\n },\n fontWeight: {\n normal: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n },\n lineHeight: {\n tight: '1.25',\n normal: '1.5',\n relaxed: '1.75',\n },\n};\n\n/**\n * 5. Theme final exportado\n */\nexport const theme = {\n palette, \n colors: semanticColors,\n typography,\n ...components,\n};","import clsx from \"clsx\";\nimport { ITBreadcrumbsProps } from \"./breadcrumbs.props\";\nimport { FaChevronRight } from \"react-icons/fa\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITBreadcrumbs({\n items,\n separator = <FaChevronRight size={10} />,\n className,\n}: ITBreadcrumbsProps) {\n return (\n <nav className={clsx(\"flex items-center gap-1.5 text-sm\", className)} aria-label=\"Breadcrumb\">\n {items.map((item, i) => {\n const isLast = i === items.length - 1;\n return (\n <span key={i} className=\"flex items-center gap-1.5\">\n {i > 0 && <span className=\"text-slate-300 dark:text-slate-600\">{separator}</span>}\n {isLast ? (\n <ITText as=\"span\" className=\"text-slate-800 dark:text-white font-semibold\">{item.label}</ITText>\n ) : item.href ? (\n <a href={item.href} className=\"text-slate-500 dark:text-slate-400 hover:text-slate-700 dark:hover:text-slate-200 transition-colors\">\n <ITText as=\"span\">{item.label}</ITText>\n </a>\n ) : (\n <button onClick={item.onClick} className=\"text-slate-500 dark:text-slate-400 hover:text-slate-700 dark:hover:text-slate-200 transition-colors\">\n <ITText as=\"span\">{item.label}</ITText>\n </button>\n )}\n </span>\n );\n })}\n </nav>\n );\n}\n","export const buttonVariants: Record<string, string> = {\n filled: \"border-transparent shadow-sm\",\n outlined: \"bg-transparent border-2\",\n raised: \"border-transparent shadow-md\",\n rounded: \"border-transparent shadow-sm rounded-full\",\n text: \"bg-transparent border-transparent shadow-none hover:bg-black/5 dark:hover:bg-white/10\",\n \"raised-text\": \"bg-white border border-gray-200 shadow-sm hover:shadow-md\",\n \"icon-only\": \"p-2 aspect-square flex items-center justify-center border-transparent shadow-sm\",\n link: \"bg-transparent border-transparent shadow-none hover:underline px-0\",\n};\n\nexport const buttonSizes: Record<string, string> = {\n small: \"text-xs px-3 py-1.5\",\n medium: \"text-sm px-5 py-2.5\",\n large: \"text-lg px-6 py-3\",\n};\n","import {\n buttonSizes,\n buttonVariants,\n} from \"@app/types/button.types\";\nimport clsx from \"clsx\";\nimport { useState } from \"react\";\nimport { theme } from \"@/theme/theme\";\nimport { ITButtonProps } from \"./button.props\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITButton({\n children,\n label,\n icon,\n onClick,\n type = \"button\",\n color = \"primary\",\n size = \"medium\",\n disabled = false,\n className,\n variant = \"filled\",\n ariaLabel,\n title,\n}: ITButtonProps) {\n const [isHovered, setIsHovered] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n \n // Get specific button config from theme\n const themeBtn = theme.button as any;\n const themeConfig = themeBtn[color] || themeBtn.primary;\n \n // Determine if the button should look \"filled\" (solid bg) or \"outlined/text\" (transparent/white bg)\n const isSolid = [\"filled\", \"raised\", \"rounded\", \"icon-only\"].includes(variant || \"filled\");\n const isOutlined = variant === \"outlined\";\n const isText = variant === \"text\" || variant === \"link\";\n const isRaisedText = variant === \"raised-text\";\n\n const getStyle = () => {\n // if (disabled) return {}; // Removed to allow styles to render with opacity\n\n const mainColor = themeConfig.backgroundColor; // The vibrant color\n const textColor = themeConfig.color; // Usually white for filled\n\n let style: React.CSSProperties = {\n // fontSize: themeConfig.fontSize, // Removed to allow size prop to control font size\n fontWeight: themeConfig.fontWeight,\n // padding: themeConfig.padding, // Removed to allow size prop to control padding\n borderRadius: themeConfig.borderRadius, // Default from theme\n transition: themeConfig.transition || 'all 0.2s',\n };\n\n if (variant === \"rounded\") {\n style.borderRadius = \"9999px\";\n }\n\n if (variant === \"icon-only\") {\n style.padding = \"0.5rem\"; // Square padding override\n }\n\n if (isSolid) {\n style.backgroundColor = (isHovered && !disabled) ? themeConfig.hover : mainColor;\n style.color = textColor;\n } else if (isOutlined) {\n style.backgroundColor = \"transparent\";\n style.color = mainColor;\n style.borderColor = mainColor;\n if (isHovered && !disabled) {\n style.backgroundColor = `${mainColor}10`; // 10% opacity\n }\n } else if (isText) {\n style.backgroundColor = (isHovered && !disabled) ? `${mainColor}10` : \"transparent\";\n style.color = mainColor;\n } else if (isRaisedText) {\n style.backgroundColor = \"var(--card-bg, #ffffff)\";\n style.color = mainColor;\n if (isHovered && !disabled) style.backgroundColor = \"var(--card-header-bg, #f8fafc)\"; \n }\n\n // Apply focus style from theme (box-shadow ring)\n if (isFocused && themeConfig.focus && !disabled) {\n style.boxShadow = themeConfig.focus;\n }\n\n return style;\n };\n\n return (\n <button\n type={type}\n className={clsx(\n \"focus:outline-none\", // Removed focus:ring-2 focus:ring-offset-2 to use theme style\n // Apply variant base styles (border, shadow, rounded-full)\n buttonVariants[variant || \"filled\"],\n // Apply size classes (padding/font-size)\n buttonSizes[size],\n className,\n { \"opacity-50 cursor-not-allowed\": disabled }\n )}\n style={getStyle()}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onClick={onClick}\n disabled={disabled}\n aria-label={ariaLabel || label}\n title={title || ariaLabel || label}\n >\n {children || (\n <span className={clsx(\"inline-flex items-center gap-1.5 font-semibold\", { \"opacity-50\": disabled })}>\n {icon && <span className=\"flex-shrink-0\">{icon}</span>}\n <ITText as=\"span\">{label}</ITText>\n </span>\n )}\n </button>\n );\n}\n","import React, { useMemo, useState, useEffect } from 'react';\nimport {\n format,\n addDays,\n startOfWeek,\n eachDayOfInterval,\n endOfWeek,\n isSameDay,\n isToday,\n startOfDay,\n parseISO,\n differenceInMinutes,\n addMinutes,\n startOfMonth,\n endOfMonth,\n addMonths,\n isSameMonth,\n isBefore,\n isAfter\n} from 'date-fns';\nimport { es } from 'date-fns/locale';\nimport { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\nimport { FaChevronLeft, FaChevronRight } from 'react-icons/fa';\nimport { ITCalendarProps, CalendarEvent } from './calendar.props';\nimport ITText from \"@/components/text/text\";\n\nfunction cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n// ----------------------------------------------------------------------\n// Constants\n// ----------------------------------------------------------------------\n\nconst START_HOUR = 6; // 6 AM\nconst END_HOUR = 22; // 10 PM\nconst HOURS_COUNT = END_HOUR - START_HOUR;\n\n// Generate time slots\nconst TIME_SLOTS = Array.from({ length: HOURS_COUNT + 1 }, (_, i) => START_HOUR + i);\n\n// ----------------------------------------------------------------------\n// Component\n// ----------------------------------------------------------------------\n\nexport const ITCalendar: React.FC<ITCalendarProps> = ({\n events = [],\n mode: modeProp,\n onEventClick,\n onSlotClick,\n onSlotHover,\n onSelectRange,\n value,\n onChange,\n selectionMode = 'single',\n startDate,\n endDate,\n minDate,\n maxDate,\n className,\n variant = 'primary',\n}) => {\n // Determine mode: if onChange provided, assume picker (month) unless specialized\n const mode = modeProp || (onChange ? 'month' : 'week');\n \n const [currentDate, setCurrentDate] = useState(value || new Date());\n const [view, setView] = useState<'calendar' | 'years'>('calendar');\n\n // Selection/Accent colors based on variant\n const getVariantStyles = () => {\n const v = variant || 'primary';\n return {\n '--calendar-selected-bg': `var(--color-${v})`,\n '--calendar-range-bg': `var(--color-${v}-50)`,\n '--calendar-today-bg': `var(--color-${v}-100)`,\n '--calendar-today-text': `var(--color-${v})`,\n } as React.CSSProperties;\n };\n\n // Sync internal state if value changes (for picker)\n useEffect(() => {\n if (value) setCurrentDate(value);\n }, [value]);\n\n // Navigation handlers\n const handleNext = () => {\n if (view === 'years') {\n setCurrentDate((d) => {\n const newDate = new Date(d);\n newDate.setFullYear(d.getFullYear() + 12);\n return newDate;\n });\n } else if (mode === 'month') {\n setCurrentDate((d) => addMonths(d, 1));\n } else if (mode === 'day') {\n setCurrentDate((d) => addDays(d, 1));\n } else {\n setCurrentDate((d) => addDays(d, 7));\n }\n };\n\n const handlePrev = () => {\n if (view === 'years') {\n setCurrentDate((d) => {\n const newDate = new Date(d);\n newDate.setFullYear(d.getFullYear() - 12);\n return newDate;\n });\n } else if (mode === 'month') {\n setCurrentDate((d) => addMonths(d, -1));\n } else if (mode === 'day') {\n setCurrentDate((d) => addDays(d, -1));\n } else {\n setCurrentDate((d) => addDays(d, -7));\n }\n };\n \n const handleToday = () => {\n setCurrentDate(new Date());\n setView('calendar');\n };\n\n // ----------------------------------------------------------------------\n // Week / Day View Logic\n // ----------------------------------------------------------------------\n\n const viewDays = useMemo(() => {\n if (mode === 'day') {\n return [currentDate];\n }\n const start = startOfWeek(currentDate, { weekStartsOn: 1 });\n const end = endOfWeek(currentDate, { weekStartsOn: 1 });\n return eachDayOfInterval({ start, end });\n }, [currentDate, mode]);\n\n const getEventStyle = (event: CalendarEvent) => {\n const start = typeof event.start === 'string' ? parseISO(event.start) : event.start;\n const end = typeof event.end === 'string' ? parseISO(event.end) : event.end;\n \n const startMinutes = start.getHours() * 60 + start.getMinutes();\n const dayStartMinutes = START_HOUR * 60;\n \n const duration = differenceInMinutes(end, start);\n \n return {\n top: `${((startMinutes - dayStartMinutes) / 60) * 80}px`,\n height: `${(duration / 60) * 80}px`,\n };\n };\n\n const weekEvents = useMemo(() => {\n return events.filter(event => {\n const eventStart = typeof event.start === 'string' ? parseISO(event.start) : event.start;\n return viewDays.some(day => isSameDay(day, eventStart));\n });\n }, [events, viewDays]);\n\n\n // ----------------------------------------------------------------------\n // Month View Logic (Picker)\n // ----------------------------------------------------------------------\n\n const monthDays = useMemo(() => {\n const start = startOfWeek(startOfMonth(currentDate), { weekStartsOn: 1 });\n const end = endOfWeek(endOfMonth(currentDate), { weekStartsOn: 1 });\n return eachDayOfInterval({ start, end });\n }, [currentDate]);\n\n const isDateDisabled = (date: Date) => {\n if (minDate && isBefore(date, startOfDay(minDate))) return true;\n if (maxDate && isAfter(date, startOfDay(maxDate))) return true;\n return false;\n };\n\n const [dragStart, setDragStart] = useState<Date | null>(null);\n const [dragCurrent, setDragCurrent] = useState<Date | null>(null);\n const isDraggingRef = React.useRef(false);\n\n const handleMouseDown = (date: Date, e: React.MouseEvent) => {\n // Only enable drag if onSelectRange is provided\n if (!onSelectRange) return;\n // We do NOT stopPropagation here completely because we might want other things?\n // Actually for drag we probably want to claim it.\n e.stopPropagation(); \n e.preventDefault(); // Prevent text selection\n \n isDraggingRef.current = false;\n setDragStart(date);\n setDragCurrent(date);\n };\n\n const handleMouseEnter = (date: Date) => {\n if (onSlotHover) {\n onSlotHover(date);\n }\n if (dragStart) {\n isDraggingRef.current = true;\n setDragCurrent(date);\n }\n };\n\n // This handles the end of the drag (assigned to container)\n const handleMouseUp = () => {\n if (dragStart && dragCurrent && onSelectRange && isDraggingRef.current) {\n // Normalize start/end\n let start = dragStart;\n let end = dragCurrent;\n if (isBefore(end, start)) {\n [start, end] = [end, start];\n }\n // End date should include the selected slot duration (add 30 mins)\n const finalEnd = addMinutes(end, 30);\n \n if (!isSameDay(start, finalEnd) && differenceInMinutes(finalEnd, start) > 0) {\n // Ensure we don't accidentally select across days if logic isn't robust\n // But currently `dragCurrent` comes from same view.\n // Just call it.\n onSelectRange(start, finalEnd);\n } else {\n onSelectRange(start, finalEnd);\n }\n }\n \n // We don't reset isDraggingRef.current here immediately if we want to block the subsequent click?\n // But clearing dragStart will be checked by onClick?\n // No, onClick checks !dragStart... but dragStart becomes null here.\n // So onClick needs to check isDraggingRef.\n \n setDragStart(null);\n setDragCurrent(null);\n };\n \n // ----------------------------------------------------------------------\n // Year View Data\n // ----------------------------------------------------------------------\n const startYear = currentDate.getFullYear() - 6;\n const years = Array.from({ length: 12 }, (_, i) => startYear + i);\n\n // ----------------------------------------------------------------------\n // Render\n // ----------------------------------------------------------------------\n\n return (\n <div \n className={cn(\"flex flex-col h-full rounded-lg shadow-sm overflow-hidden select-none\", className)}\n style={{\n backgroundColor: 'var(--calendar-bg, #ffffff)',\n border: '1px solid var(--calendar-border, #e2e8f0)',\n ...getVariantStyles(),\n }}\n onMouseUp={handleMouseUp}\n onMouseLeave={() => {\n setDragStart(null);\n setDragCurrent(null);\n }}\n >\n \n {/* Header */}\n <div \n className=\"flex items-center justify-between px-2 py-2 border-b\" \n style={{ \n backgroundColor: 'var(--calendar-bg, #ffffff)',\n borderBottomColor: 'var(--calendar-border, #e2e8f0)'\n }}\n >\n <ITText\n as=\"h2\"\n className=\"text-sm font-bold capitalize cursor-pointer transition-colors select-none px-2 py-1 rounded\"\n style={{ \n color: 'var(--calendar-header-text, #1e293b)',\n }}\n onClick={() => setView(view === 'calendar' ? 'years' : 'calendar')}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--calendar-header-hover, #f1f5f9)';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n }}\n >\n {view === 'years' \n ? `${years[0]} - ${years[years.length - 1]}` \n : format(currentDate, 'MMMM yyyy', { locale: es })\n }\n </ITText>\n <div className=\"flex items-center gap-1\">\n <button \n onClick={handlePrev} \n type=\"button\" \n className=\"p-1.5 rounded-md transition-colors\"\n style={{ color: 'var(--calendar-days-text, #334155)' }}\n onMouseEnter={(e) => { e.currentTarget.style.backgroundColor = 'var(--calendar-header-hover, #f1f5f9)'; }}\n onMouseLeave={(e) => { e.currentTarget.style.backgroundColor = 'transparent'; }}\n >\n <FaChevronLeft size={14} />\n </button>\n <button \n onClick={handleToday} \n type=\"button\" \n className=\"text-sm font-medium px-3 py-1.5 rounded-md transition-colors\"\n style={{ color: 'var(--calendar-days-text, #334155)' }}\n onMouseEnter={(e) => { e.currentTarget.style.backgroundColor = 'var(--calendar-header-hover, #f1f5f9)'; }}\n onMouseLeave={(e) => { e.currentTarget.style.backgroundColor = 'transparent'; }}\n >\n <ITText as=\"span\">Hoy</ITText>\n </button>\n <button \n onClick={handleNext} \n type=\"button\" \n className=\"p-1.5 rounded-md transition-colors\"\n style={{ color: 'var(--calendar-days-text, #334155)' }}\n onMouseEnter={(e) => { e.currentTarget.style.backgroundColor = 'var(--calendar-header-hover, #f1f5f9)'; }}\n onMouseLeave={(e) => { e.currentTarget.style.backgroundColor = 'transparent'; }}\n >\n <FaChevronRight size={14} />\n </button>\n </div>\n </div>\n\n {/* Content */}\n <div \n className=\"flex-1 overflow-auto relative\"\n style={{ backgroundColor: 'var(--calendar-bg, #ffffff)' }}\n >\n \n {view === 'years' ? (\n <div className=\"p-4 grid grid-cols-4 gap-2\">\n {years.map(year => (\n <button\n key={year}\n type=\"button\"\n className={cn(\n \"h-10 rounded-md text-sm font-medium transition-colors border border-transparent\",\n year === currentDate.getFullYear() \n ? \"bg-[var(--calendar-selected-bg)] text-[var(--calendar-selected-text)]\" \n : \"hover:bg-[var(--calendar-today-bg)] hover:text-[var(--calendar-today-text)]\"\n )}\n style={{\n color: year === currentDate.getFullYear() \n ? 'var(--calendar-selected-text, #ffffff)' \n : 'var(--calendar-days-text, #334155)'\n }}\n onClick={() => {\n setCurrentDate((d) => {\n const newDate = new Date(d);\n newDate.setFullYear(year);\n return newDate;\n });\n setView('calendar');\n }}\n >\n <ITText as=\"span\">{year}</ITText>\n </button>\n ))}\n </div>\n ) : mode === 'month' ? (\n <div className=\"p-4\">\n {/* Weekday Headers */}\n <div className=\"grid grid-cols-7 mb-2\">\n {['Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb', 'Dom'].map(day => (\n <ITText key={day} as=\"div\" className=\"text-center text-xs font-semibold text-gray-400 uppercase py-1\">\n {day}\n </ITText>\n ))}\n </div>\n {/* Days Grid */}\n <div className=\"grid grid-cols-7 gap-1\">\n {monthDays.map((day) => {\n const isDisabled = isDateDisabled(day);\n const isCurrentMonth = isSameMonth(day, currentDate);\n \n // Selection logic\n const isSelected = selectionMode === 'single' && value && isSameDay(day, value);\n const isRangeStart = selectionMode === 'range' && startDate && isSameDay(day, startDate);\n const isRangeEnd = selectionMode === 'range' && endDate && isSameDay(day, endDate);\n const isInRange = selectionMode === 'range' && startDate && endDate && isAfter(day, startDate) && isBefore(day, endDate);\n \n return (\n <button\n key={day.toISOString()}\n type=\"button\"\n disabled={isDisabled}\n onClick={() => onChange && onChange(day)}\n className={cn(\n \"h-10 w-full flex items-center justify-center rounded-md text-sm transition-colors relative\",\n !isCurrentMonth && \"opacity-40\",\n isDisabled && \"opacity-20 cursor-not-allowed\",\n )}\n style={{\n backgroundColor: isSelected || isRangeStart || isRangeEnd \n ? 'var(--calendar-selected-bg, #2563eb)' \n : isInRange \n ? 'var(--calendar-range-bg, #eff6ff)'\n : isToday(day)\n ? 'var(--calendar-today-bg, #eff6ff)'\n : 'transparent',\n color: isSelected || isRangeStart || isRangeEnd\n ? 'var(--calendar-selected-text, #ffffff)'\n : isToday(day)\n ? 'var(--calendar-today-text, #2563eb)'\n : 'var(--calendar-days-text, #334155)',\n fontWeight: isSelected || isRangeStart || isRangeEnd || isToday(day) ? '700' : '400',\n }}\n >\n <ITText as=\"span\">{format(day, 'd')}</ITText>\n \n {/* Connection for range selection to make it look continuous */}\n {selectionMode === 'range' && isRangeStart && endDate && (\n <div className=\"absolute right-0 top-0 bottom-0 w-2 bg-[var(--calendar-range-bg)] -z-10\" />\n )}\n {selectionMode === 'range' && isRangeEnd && startDate && (\n <div className=\"absolute left-0 top-0 bottom-0 w-2 bg-[var(--calendar-range-bg)] -z-10\" />\n )}\n </button>\n );\n })}\n </div>\n </div>\n ) : (\n /* Week/Day View (Scheduler) */\n <div className={cn(\"flex h-full\", mode === 'week' ? \"min-w-[800px]\" : \"w-full\")}>\n {/* Time Sidebar */}\n <div \n className=\"flex-none w-16 pt-10 select-none\"\n style={{\n backgroundColor: 'var(--calendar-header-hover, #f1f5f9)',\n borderRight: '1px solid var(--calendar-border, #e2e8f0)',\n }}\n >\n {TIME_SLOTS.map((hour) => (\n hour < END_HOUR && (\n <div key={hour} className=\"h-20 relative text-right pr-2\">\n <ITText as=\"span\" className=\"text-xs text-slate-400 dark:text-slate-500 -mt-2 inline-block transform -translate-y-1/2\">\n {format(new Date().setHours(hour, 0), 'HH:mm')}\n </ITText>\n </div>\n )\n ))}\n </div>\n\n {/* Days Columns */}\n <div className=\"flex flex-1\">\n {viewDays.map((day) => (\n <div \n key={day.toISOString()} \n className=\"flex-1 min-w-[120px] relative\"\n style={{ borderRight: '1px solid var(--calendar-border, #e2e8f0)' }}\n >\n \n {/* Day Header */}\n <div \n className=\"h-10 flex flex-col items-center justify-center sticky top-0 z-10\"\n style={{\n backgroundColor: isToday(day) ? 'var(--calendar-today-bg, #eff6ff)' : 'var(--calendar-bg, #ffffff)',\n borderBottom: '1px solid var(--calendar-border, #e2e8f0)',\n }}\n >\n <ITText\n as=\"span\"\n className=\"text-xs font-semibold uppercase\"\n style={{\n color: isToday(day) ? 'var(--calendar-today-text, #2563eb)' : 'var(--calendar-days-text, #334155)',\n opacity: isToday(day) ? 1 : 0.6,\n }}\n >\n {format(day, 'EEE', { locale: es })}\n </ITText>\n <ITText\n as=\"span\"\n className=\"text-sm font-bold w-6 h-6 flex items-center justify-center rounded-full mt-0.5\"\n style={{\n color: isToday(day) ? 'var(--calendar-selected-text, #ffffff)' : 'var(--calendar-days-text, #334155)',\n backgroundColor: isToday(day) ? 'var(--calendar-selected-bg, #2563eb)' : 'transparent',\n }}\n >\n {format(day, 'd')}\n </ITText>\n </div>\n\n {/* Slots Grid */}\n <div className=\"relative\">\n {TIME_SLOTS.map((hour) => (\n hour < END_HOUR && (\n <div \n key={hour} \n className=\"h-20 relative group\"\n style={{ borderBottom: '1px dashed var(--calendar-border, #e2e8f0)' }}\n >\n {/* Slot 00 */}\n <div \n className=\"absolute inset-x-0 top-0 h-10 border-b border-transparent hover:border-[var(--calendar-today-bg)] hover:bg-[var(--calendar-today-bg)] transition-colors cursor-pointer z-0\"\n onMouseDown={(e) => {\n const d = new Date(day); d.setHours(hour, 0, 0, 0);\n handleMouseDown(d, e);\n }}\n onMouseEnter={() => {\n const d = new Date(day); d.setHours(hour, 0, 0, 0);\n handleMouseEnter(d);\n }}\n onClick={() => {\n if (!isDraggingRef.current) { \n const d = new Date(day); d.setHours(hour, 0, 0, 0);\n onSlotClick && onSlotClick(d);\n }\n }}\n />\n {/* Slot 30 */}\n <div \n className=\"absolute inset-x-0 bottom-0 h-10 hover:border-[var(--calendar-today-bg)] hover:bg-[var(--calendar-today-bg)] transition-colors cursor-pointer z-0\"\n onMouseDown={(e) => {\n const d = new Date(day); d.setHours(hour, 30, 0, 0);\n handleMouseDown(d, e);\n }}\n onMouseEnter={() => {\n const d = new Date(day); d.setHours(hour, 30, 0, 0);\n handleMouseEnter(d);\n }}\n onClick={() => {\n if (!isDraggingRef.current) {\n const d = new Date(day); d.setHours(hour, 30, 0, 0);\n onSlotClick && onSlotClick(d);\n }\n }}\n />\n </div>\n )\n ))}\n \n {/* Selection Overlay */}\n {dragStart && dragCurrent && isSameDay(dragStart, day) && (\n (() => {\n let start = dragStart;\n let end = dragCurrent;\n if (isBefore(end, start)) [start, end] = [end, start];\n const finalEnd = addMinutes(end, 30); // Visual end is end of slot\n\n const startMinutes = start.getHours() * 60 + start.getMinutes();\n const dayStartMinutes = START_HOUR * 60;\n const duration = differenceInMinutes(finalEnd, start);\n const top = ((startMinutes - dayStartMinutes) / 60) * 80;\n const height = (duration / 60) * 80;\n\n return (\n <div \n className=\"absolute left-1 right-1 bg-[var(--calendar-selected-bg)]/30 border border-[var(--calendar-selected-bg)] rounded z-10 pointer-events-none\"\n style={{ top: `${top}px`, height: `${height}px` }}\n />\n );\n })()\n )}\n\n {/* Events */}\n {weekEvents\n .filter((event) => isSameDay(typeof event.start === 'string' ? parseISO(event.start) : event.start, day))\n .map((event) => {\n const style = getEventStyle(event);\n return (\n <div\n key={event.id}\n className={cn(\n \"absolute left-1 right-1 rounded px-2 py-1 text-xs cursor-pointer hover:brightness-95 transition-all shadow-sm overflow-hidden z-20 border-l-4\",\n !event.color && \"bg-[var(--calendar-today-bg)] text-[var(--calendar-today-text)] border-[var(--calendar-selected-bg)]\"\n )}\n style={{ \n top: style.top, \n height: style.height,\n backgroundColor: event.color ? `${event.color}20` : undefined,\n borderColor: event.color,\n color: event.color ? event.color : undefined\n }}\n onClick={(e) => {\n e.stopPropagation();\n onEventClick && onEventClick(event);\n }}\n >\n <ITText as=\"div\" className=\"font-semibold truncate\">{event.title}</ITText>\n <ITText as=\"div\" className=\"opacity-80 truncate\">\n {format(typeof event.start === 'string' ? parseISO(event.start) : event.start, 'HH:mm')} - \n {format(typeof event.end === 'string' ? parseISO(event.end) : event.end, 'HH:mm')}\n </ITText>\n </div>\n );\n })}\n </div>\n \n {/* Current Time Line */}\n {isToday(day) && (\n <div \n className=\"absolute left-0 right-0 border-t-2 border-danger-500 z-30 pointer-events-none\"\n style={{\n top: `${((new Date().getHours() * 60 + new Date().getMinutes() - (START_HOUR * 60)) / 60) * 80}px`\n }}\n >\n <div className=\"absolute -left-1.5 -top-1.5 w-3 h-3 bg-danger-500 rounded-full\" />\n </div>\n )}\n\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default ITCalendar;\n","import clsx from \"clsx\";\nimport { ITCardProps } from \"./card.props\";\nimport { useState } from \"react\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITCard({\n title,\n image,\n alt = \"Card Image\",\n children,\n actions,\n className,\n imageClassName,\n titleClassName,\n contentClassName,\n actionClassName,\n onClick,\n}: ITCardProps) {\n const [isHovered, setIsHovered] = useState(false);\n\n const containerStyle: React.CSSProperties = {\n backgroundColor: \"var(--card-bg, #ffffff)\",\n borderColor: \"var(--card-border, #e2e8f0)\",\n borderWidth: \"1px\",\n borderRadius: \"var(--card-radius, 0.75rem)\",\n boxShadow: onClick\n ? isHovered\n ? \"0 8px 25px -5px rgba(0, 0, 0, 0.1)\"\n : \"0 1px 3px 0 rgba(0, 0, 0, 0.05)\"\n : \"none\",\n transition: onClick ? \"all 0.2s ease-in-out\" : \"none\",\n cursor: onClick ? \"pointer\" : \"default\",\n };\n\n const bodyStyle: React.CSSProperties = {\n padding: \"1.25rem\",\n };\n\n return (\n <div\n onClick={onClick}\n onMouseEnter={() => onClick && setIsHovered(true)}\n onMouseLeave={() => onClick && setIsHovered(false)}\n className={clsx(\"overflow-hidden flex flex-col\", className)}\n style={containerStyle}\n >\n {image && (\n <img\n src={image}\n alt={alt}\n className={clsx(\"w-full h-48 object-cover\", imageClassName)}\n />\n )}\n\n <div className={clsx(contentClassName)} style={bodyStyle}>\n {title && (\n <ITText\n as=\"h3\"\n className={clsx(\"text-xl font-semibold mb-2\", titleClassName)}\n >\n {title}\n </ITText>\n )}\n <ITText as=\"div\" className=\"text-gray-600\">{children}</ITText>\n </div>\n {actions && (\n <div\n className={clsx(\n \"p-4 border-t border-gray-100 mt-auto\",\n actionClassName,\n )}\n >\n {actions}\n </div>\n )}\n </div>\n );\n}\n\n","import clsx from \"clsx\";\nimport { ITCheckboxProps } from \"./checkbox.props\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITCheckbox({\n checked = false,\n onChange,\n label,\n disabled = false,\n indeterminate = false,\n className,\n name,\n}: ITCheckboxProps) {\n return (\n <label\n className={clsx(\n \"inline-flex items-center gap-2 cursor-pointer select-none\",\n disabled && \"opacity-50 cursor-not-allowed\",\n className\n )}\n >\n <input\n type=\"checkbox\"\n name={name}\n checked={checked}\n onChange={(e) => onChange?.(e.target.checked)}\n disabled={disabled}\n ref={(el) => { if (el) el.indeterminate = indeterminate; }}\n className=\"peer sr-only\"\n />\n <div\n className={clsx(\n \"w-4 h-4 rounded border-2 flex items-center justify-center transition-all\",\n checked\n ? \"bg-primary-500 border-primary-500\"\n : \"border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-800\",\n !disabled && \"peer-focus:ring-2 peer-focus:ring-primary-200\",\n )}\n >\n {checked && (\n <svg className=\"w-2.5 h-2.5 text-white\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M2 6L5 9L10 3\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )}\n {indeterminate && !checked && (\n <div className=\"w-2 h-0.5 bg-slate-500 rounded\" />\n )}\n </div>\n {label && <ITText as=\"span\" className=\"text-sm text-slate-700 dark:text-slate-300\">{label}</ITText>}\n </label>\n );\n}\n","import clsx from \"clsx\";\nimport { ITConfirmDialogProps } from \"./confirm-dialog.props\";\nimport ITButton from \"../button/button\";\nimport { FaExclamationTriangle } from \"react-icons/fa\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITConfirmDialog({\n isOpen,\n onClose,\n onConfirm,\n title = \"Confirmar acción\",\n message = \"¿Estás seguro de que deseas continuar?\",\n confirmLabel = \"Confirmar\",\n cancelLabel = \"Cancelar\",\n variant = \"primary\",\n loading = false,\n}: ITConfirmDialogProps) {\n if (!isOpen) return null;\n\n return (\n <div className=\"fixed inset-0 z-[300] flex items-center justify-center p-4\">\n <div className=\"absolute inset-0 bg-black/40 backdrop-blur-sm\" onClick={onClose} />\n <div\n className={clsx(\n \"relative z-10 bg-white dark:bg-slate-900 rounded-2xl shadow-2xl max-w-md w-full p-6\",\n \"border border-slate-200 dark:border-slate-700\"\n )}\n >\n <div className=\"flex items-start gap-4\">\n <div className=\"w-10 h-10 rounded-full bg-amber-100 dark:bg-amber-950/30 flex items-center justify-center flex-shrink-0\">\n <FaExclamationTriangle className=\"text-amber-600\" size={18} />\n </div>\n <div className=\"flex-1\">\n <ITText as=\"h3\" className=\"text-lg font-bold text-slate-800 dark:text-white\">{title}</ITText>\n <ITText as=\"p\" className=\"text-sm text-slate-500 dark:text-slate-400 mt-1\">{message}</ITText>\n </div>\n </div>\n <div className=\"flex justify-end gap-3 mt-6\">\n <ITButton label={cancelLabel} variant=\"outlined\" size=\"small\" onClick={onClose} disabled={loading} />\n <ITButton label={confirmLabel} color={variant} size=\"small\" onClick={onConfirm} disabled={loading} />\n </div>\n </div>\n </div>\n );\n}\n","export type TableVariants = \"default\" | \"striped\" | \"bordered\";\n\nexport type TableSize = \"sm\" | \"md\" | \"lg\";\n\nexport const variantStyles: Record<TableVariants, string> = {\n default: \"\",\n striped: \"divide-y divide-gray-200\",\n bordered: \"border border-gray-200\",\n};\n\nexport const sizeStyles: Record<TableSize, string> = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-lg\",\n};\n","import { useTableState } from \"@/hooks/useTableState\";\nimport { sizeStyles, variantStyles } from \"@/types/table.types\";\nimport clsx from \"clsx\";\nimport React, { useState, useEffect, useCallback, useRef } from \"react\";\nimport { FaCheck, FaSpinner, FaTimes } from \"react-icons/fa\";\nimport { MdOutlineSwapVert } from \"react-icons/md\";\nimport ITInput from \"../input/input\";\nimport ITPagination from \"../pagination/pagination\";\nimport ITSelect from \"../select/select\";\nimport { Column } from \"../table/table.props\";\nimport { formatCurrencyMX } from \"../table/table\";\nimport { ITDataTableProps } from \"./dataTable.props\";\nimport ITText from \"@/components/text/text\";\n\nconst getNestedValue = (obj: unknown, path: string) => {\n return path.split(\".\").reduce((acc, part) => acc && acc[part], obj);\n};\n\nconst EMPTY_OBJECT = {};\n\nexport default function ITDataTable<T extends Record<string, unknown>>({\n columns,\n fetchData,\n debounceMs = 500,\n externalFilters = EMPTY_OBJECT,\n loadingIndicator,\n fetchOnMount = true,\n reloadTrigger,\n containerClassName,\n className,\n variant = \"default\",\n size = \"md\",\n itemsPerPageOptions = [5, 10, 20],\n defaultItemsPerPage = 10,\n title,\n}: ITDataTableProps<T>) {\n const [data, setData] = useState<T[]>([]);\n const [totalItems, setTotalItems] = useState(0);\n const [isLoading, setIsLoading] = useState(fetchOnMount);\n\n const {\n currentPage,\n itemsPerPage,\n filters,\n sortConfig,\n totalPages,\n goToPage,\n handleFilterChange,\n handleSort,\n handleItemsPerPageChange,\n } = useTableState({ defaultItemsPerPage });\n\n const debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const computedTotalPages = Math.ceil(totalItems / itemsPerPage) || 1;\n\n const performFetch = useCallback(async () => {\n setIsLoading(true);\n try {\n const response = await fetchData({\n page: currentPage,\n limit: itemsPerPage,\n filters: { ...filters, ...externalFilters },\n sort: sortConfig || undefined,\n });\n setData(response.data || []);\n setTotalItems(response.total || 0);\n } catch (error) {\n console.error(\"ITDataTable: Error fetching data\", error);\n setData([]);\n setTotalItems(0);\n } finally {\n setIsLoading(false);\n }\n }, [currentPage, itemsPerPage, filters, sortConfig, fetchData, externalFilters]);\n\n useEffect(() => {\n if (!fetchOnMount && data.length === 0 && !isLoading) return;\n\n if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current);\n\n debounceTimerRef.current = setTimeout(() => {\n performFetch();\n }, debounceMs);\n\n return () => {\n if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current);\n };\n }, [currentPage, itemsPerPage, sortConfig, filters, externalFilters, reloadTrigger, fetchOnMount, performFetch]);\n\n const renderFilterInput = (col: Column<T>) => {\n if (!col.filter) return null;\n\n if (col.type === \"boolean\") {\n const currentValue = filters[col.key];\n const nextValue =\n currentValue === undefined ? true : currentValue === true ? false : undefined;\n\n const getToggleLabel = () => {\n if (currentValue === undefined) return \"Mostrar todos\";\n if (currentValue === true) return \"Filtrar solo verdaderos\";\n return \"Filtrar solo falsos\";\n };\n\n return (\n <button\n className=\"flex items-center justify-center cursor-pointer focus:outline-none focus:ring-2 focus:ring-slate-400 focus:ring-offset-2 rounded-full p-1 transition-all duration-200\"\n onClick={() => handleFilterChange(col.key, nextValue)}\n aria-label={`${getToggleLabel()} para ${col.label}`}\n title={`${getToggleLabel()} para ${col.label}`}\n disabled={isLoading}\n >\n <div className=\"relative w-10 h-5 bg-gray-300 rounded-full\">\n <div\n className={clsx(\n \"absolute top-0.5 w-4 h-4 rounded-full transition-all duration-300 shadow-sm\",\n {\n \"left-0.5 bg-gray-400\": currentValue === undefined,\n \"left-5 bg-slate-500\": currentValue === true,\n \"left-0.5 bg-gray-500\": currentValue === false,\n }\n )}\n />\n </div>\n </button>\n );\n }\n\n if (col.filter === \"catalog\" && col.catalogOptions) {\n if (col.catalogOptions.loading) {\n return <FaSpinner className=\"animate-spin\" aria-label=\"Cargando opciones\" title=\"Cargando opciones\" />;\n }\n if (col.catalogOptions.error) {\n return <ITText as=\"span\" className=\"text-red-500 text-xs\">Error cargando</ITText>;\n }\n return (\n <ITSelect\n name={`filter-${col.key}`}\n options={[\n { value: \"\", label: \"Todos\" },\n ...col.catalogOptions.data.map((item) => ({\n value: String(item.id),\n label: item.name,\n })),\n ]}\n value={String(filters[col.key] || \"\")}\n onChange={(e) => {\n const value = e.target.value === \"\" ? undefined : e.target.value;\n handleFilterChange(col.key, value);\n }}\n onBlur={() => {}}\n className=\"w-full text-xs\"\n disabled={isLoading}\n />\n );\n }\n\n return (\n <ITInput\n name={`filter-${col.key}`}\n className=\"w-full text-xs\"\n placeholder=\"Buscar...\"\n value={String(filters[col.key] || \"\")}\n onChange={(e) => handleFilterChange(col.key, e.target.value)}\n onBlur={() => {}}\n disabled={isLoading}\n />\n );\n };\n\n const renderCellContent = (col: Column<T>, row: T) => {\n const value = getNestedValue(row, col.key);\n if (col.render) return col.render(row);\n\n switch (col.type) {\n case \"number\":\n return typeof value === \"number\" && col.currencyMX ? formatCurrencyMX(value) : value;\n case \"boolean\":\n return value ? (\n <FaCheck className=\"text-green-500\" aria-label=\"Verdadero\" title=\"Verdadero\" />\n ) : (\n <FaTimes className=\"text-red-500\" aria-label=\"Falso\" title=\"Falso\" />\n );\n case \"actions\":\n return col.actions ? col.actions(row) : null;\n case \"catalog\":\n if (col.catalogOptions) {\n const catalogItem = col.catalogOptions.data.find((item) => item.id === value);\n return catalogItem?.name || value;\n }\n return value as React.ReactNode;\n default:\n return value as React.ReactNode;\n }\n };\n\n return (\n <div className={clsx(\"space-y-4 w-full relative\", containerClassName)}>\n <div className=\"rounded-xl shadow-sm border border-secondary-200 overflow-hidden\" style={{ backgroundColor: 'var(--color-table-rowBg, #ffffff)' }}>\n {title && (\n <div className=\"px-6 py-5 border-b border-secondary-100 flex justify-between items-center\" style={{ backgroundColor: 'var(--color-table-rowBg, #ffffff)' }}>\n <ITText as=\"h2\" className=\"text-xl font-bold text-secondary-900 leading-tight\">{title}</ITText>\n {isLoading && (\n <div className=\"text-secondary-400\">\n {loadingIndicator || <FaSpinner className=\"animate-spin text-primary-500 text-xl\" />}\n </div>\n )}\n </div>\n )}\n\n <div className=\"overflow-x-auto relative min-h-[200px]\">\n {isLoading && (\n <div className=\"absolute inset-0 z-20 flex items-center justify-center bg-white/40 backdrop-blur-[2px] transition-all duration-300\">\n <div className=\"flex flex-col items-center gap-3 p-6 rounded-2xl shadow-xl border border-secondary-100 animate-in fade-in zoom-in duration-300\" style={{ backgroundColor: 'var(--color-table-rowBg, #ffffff)' }}>\n {loadingIndicator || (\n <>\n <FaSpinner className=\"animate-spin text-primary-500 text-4xl\" />\n <ITText as=\"span\" className=\"text-sm font-semibold text-secondary-600 animate-pulse\">Cargando datos...</ITText>\n </>\n )}\n </div>\n </div>\n )}\n\n <table\n className={clsx(\n \"min-w-max w-full text-sm text-left text-secondary-600 transition-opacity duration-300\",\n isLoading ? \"opacity-50\" : \"opacity-100\",\n variantStyles[variant],\n sizeStyles[size],\n className\n )}\n >\n <thead>\n <tr className=\"bg-secondary-50 border-b border-secondary-200 text-xs uppercase tracking-wider font-semibold text-secondary-500\">\n {columns.map((col) => (\n <th key={col.key} scope=\"col\" className={clsx(\"px-4 py-4 align-top\", col.className)}>\n <div className=\"flex flex-col gap-3 min-w-[150px]\">\n <div className=\"flex items-center justify-between gap-2\">\n <ITText as=\"span\" className=\"text-secondary-700 font-bold\">{col.label}</ITText>\n {col.sortable && col.type !== \"actions\" && (\n <button\n onClick={() => handleSort(col.key)}\n disabled={isLoading}\n className={`p-1 rounded-md transition-colors ${\n sortConfig?.key === col.key\n ? \"bg-secondary-200 text-secondary-900\"\n : \"hover:bg-secondary-200 text-secondary-400 hover:text-secondary-700\"\n } disabled:opacity-50`}\n title={`Ordenar por ${col.label}`}\n >\n <MdOutlineSwapVert className=\"w-4 h-4\" aria-hidden=\"true\" />\n </button>\n )}\n </div>\n\n <div className=\"w-full\">{col.filter ? renderFilterInput(col) : null}</div>\n </div>\n </th>\n ))}\n </tr>\n </thead>\n <tbody className=\"divide-y divide-secondary-100\">\n {data.length > 0 ? (\n data.map((row, rowIndex) => (\n <tr key={rowIndex} className=\"hover:bg-secondary-50/50 transition-colors duration-150 group\">\n {columns.map((col) => (\n <td key={`${rowIndex}-${col.key}`} className={clsx(\"px-4 py-3 align-middle\", col.className)}>\n {col.type === \"actions\" ? (\n <div className=\"flex items-center justify-center gap-2\">\n {renderCellContent(col, row) as React.ReactNode}\n </div>\n ) : (\n <div className=\"text-secondary-700 font-medium\">\n {renderCellContent(col, row) as React.ReactNode}\n </div>\n )}\n </td>\n ))}\n </tr>\n ))\n ) : (\n <tr>\n <td colSpan={columns.length} className=\"px-6 py-20 text-center\">\n {!isLoading && (\n <div className=\"flex flex-col items-center justify-center text-secondary-400\">\n <ITText as=\"span\" className=\"text-lg\">No se encontraron resultados</ITText>\n <ITText as=\"span\" className=\"text-sm mt-1\">Intenta ajustar los filtros</ITText>\n </div>\n )}\n </td>\n </tr>\n )}\n </tbody>\n </table>\n </div>\n </div>\n\n <div className=\"rounded-b-xl border-t border-secondary-200 px-6 py-4\" style={{ backgroundColor: 'var(--color-table-rowBg, #ffffff)' }}>\n <ITPagination\n currentPage={currentPage}\n totalPages={computedTotalPages}\n onPageChange={goToPage}\n color=\"primary\"\n itemsPerPageOptions={itemsPerPageOptions}\n itemsPerPage={itemsPerPage}\n onItemsPerPageChange={handleItemsPerPageChange}\n totalItems={totalItems}\n />\n </div>\n </div>\n );\n}\n","\nimport clsx from \"clsx\";\nimport { ITInputProps } from \"./input.props\";\nimport { KeyboardEvent, useState, useEffect, useRef, useCallback } from \"react\";\nimport { theme } from \"@/theme/theme\";\nimport { disabledOverlay, iconAbsoluteLeft, iconAbsoluteRight, inputError, inputLabel } from \"@/utils/styles\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITInput({\n name,\n type = \"text\",\n label,\n placeholder,\n value,\n onChange,\n onBlur,\n disabled = false,\n className,\n containerClassName,\n labelClassName,\n touched,\n error,\n formatNumber = true,\n required = false,\n autoFocus = false,\n onClick,\n onKeyDown,\n iconLeft,\n iconRight,\n maxLength,\n minLength,\n checked,\n showHintLength = false,\n currencyFormat = false,\n rows = 4,\n min,\n max,\n readOnly = false,\n focusContent\n}: ITInputProps) {\n const isCheckboxOrRadio = type === \"checkbox\" || type === \"radio\";\n const isNumberType = type === \"number\";\n const isTextArea = type === \"textarea\";\n\n const [displayValue, setDisplayValue] = useState<string>(\"\");\n const [isFocused, setIsFocused] = useState(false);\n const [hasSelectedAll, setHasSelectedAll] = useState(false);\n const [showPassword, setShowPassword] = useState(false);\n const [localTouched, setLocalTouched] = useState(false);\n \n const inputRef = useRef<HTMLInputElement>(null);\n\n // Theme logic\n const inputTheme = (theme as any).input || {};\n\n const getStyle = () => {\n const style: React.CSSProperties = {\n backgroundColor: inputTheme.backgroundColor,\n borderColor: inputTheme.borderColor,\n borderRadius: inputTheme.borderRadius,\n padding: inputTheme.padding,\n fontSize: inputTheme.fontSize,\n borderWidth: '1px',\n borderStyle: 'solid',\n transition: 'all 0.2s',\n color: 'var(--input-text-color, var(--color-secondary-900))', // Theme-aware text color\n };\n\n if (disabled) {\n style.backgroundColor = inputTheme.disabled?.backgroundColor || style.backgroundColor;\n style.borderColor = inputTheme.disabled?.borderColor || style.borderColor;\n style.opacity = 0.7; // Visual cue\n }\n\n if (hasError) {\n style.borderColor = inputTheme.error?.borderColor || 'red';\n if (isFocused) {\n style.boxShadow = inputTheme.error?.ring;\n }\n } else if (isFocused && !readOnly) {\n style.boxShadow = inputTheme.focus?.ring;\n }\n\n if (iconLeft) {\n style.paddingLeft = '2.5rem';\n }\n if (iconRight) {\n style.paddingRight = '2.5rem';\n }\n\n return style;\n };\n \n const isTouched = touched !== undefined ? touched : localTouched;\n const isEmpty = isCheckboxOrRadio\n ? !checked\n : (value === undefined || value === null || String(value).trim() === \"\");\n\n const effectiveError = error !== undefined && error !== false\n ? (error === true ? \"Este campo es requerido\" : error)\n : (required && isEmpty ? \"Este campo es requerido\" : undefined);\n\n const hasError = isTouched && !!effectiveError;\n const errorMessage = typeof effectiveError === \"string\" ? effectiveError : \"Este campo es requerido\";\n\n\n const handleClick = (e: React.MouseEvent<HTMLInputElement>) => {\n if (onClick) {\n onClick();\n }\n \n if (!readOnly && !hasSelectedAll) {\n e.currentTarget.select();\n setHasSelectedAll(true);\n }\n };\n\n const formatValue = useCallback(\n (val: number | string | undefined | null): string => {\n const num =\n typeof val === \"string\" ? parseFloat(val.replace(/,/g, \"\")) : val;\n\n if (num == null || isNaN(num)) {\n return \"\";\n }\n\n if (currencyFormat) {\n return num.toLocaleString(\"es-MX\", {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n });\n }\n\n return num.toString();\n },\n [currencyFormat]\n );\n\n const unformatValue = useCallback(\n (val: number | string | undefined | null): string => {\n if (val == null) return \"\";\n\n return String(val).replace(/,/g, \"\");\n },\n []\n );\n\nuseEffect(() => {\n if (!isFocused) {\n if (isNumberType) {\n if (formatNumber) {\n setDisplayValue(formatValue(value));\n } else {\n setDisplayValue(String(value ?? \"\"));\n }\n } else {\n setDisplayValue(String(value ?? \"\"));\n }\n }\n}, [value, isFocused, isNumberType, formatValue, formatNumber]);\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (readOnly || !isNumberType) return;\n\n const { key, ctrlKey, metaKey } = e;\n const {\n value: currentValue,\n selectionStart,\n selectionEnd,\n } = e.currentTarget;\n\n const allowedKeys = [\n \"Backspace\",\n \"Tab\",\n \"Escape\",\n \"Enter\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"Delete\",\n \"Home\",\n \"End\",\n \"Unidentified\" // mobile keyboards\n ];\n if (allowedKeys.includes(key) || ctrlKey || metaKey) {\n return;\n }\n\n if (!currencyFormat && (key === \".\" || key === \",\")) {\n e.preventDefault();\n return;\n }\n\n if (\n currencyFormat &&\n (key === \".\" || key === \",\") &&\n currentValue.includes(\".\")\n ) {\n // Check if the current dot is within the selected range (it will be overwritten)\n const dotIndex = currentValue.indexOf(\".\");\n const replacingDot = selectionStart !== null && selectionEnd !== null && selectionStart <= dotIndex && dotIndex < selectionEnd;\n if (!replacingDot) {\n e.preventDefault();\n return;\n }\n }\n\n const allowedCharsRegex = currencyFormat ? /^[0-9.,]$/ : /^[0-9]$/;\n // If it's a mobile key event like Unidentified, we bypass the regex check safely\n if (key !== \"Unidentified\" && !allowedCharsRegex.test(key)) {\n e.preventDefault();\n return;\n }\n\n if (\n max !== undefined &&\n /^[0-9]$/.test(key) &&\n selectionStart !== null &&\n selectionEnd !== null\n ) {\n const currentUnformatted = unformatValue(currentValue);\n const nextValueStr =\n currentUnformatted.slice(0, selectionStart) +\n key +\n currentUnformatted.slice(selectionEnd);\n\n const numericValue = parseFloat(nextValueStr);\n\n if (!isNaN(numericValue) && numericValue > max) {\n e.preventDefault();\n }\n }\n };\n\nconst handleNumberChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (readOnly) return;\n\n let rawValue = e.target.value;\n let cleanedValue = \"\";\n\n if (currencyFormat) {\n if (rawValue.includes(\",\") && rawValue.includes(\".\")) {\n rawValue = rawValue.replace(/,/g, \"\"); \n } else if (rawValue.includes(\",\")) {\n rawValue = rawValue.replace(/,/g, \".\");\n }\n\n cleanedValue = rawValue.replace(/[^0-9.]/g, \"\");\n const parts = cleanedValue.split(\".\");\n if (parts.length > 1) {\n // Keep only first dot, and restrict decimals to 2 digits\n const decimals = parts.slice(1).join(\"\").substring(0, 2);\n cleanedValue = parts[0] + \".\" + decimals;\n }\n } else {\n cleanedValue = rawValue.replace(/[^0-9]/g, \"\");\n }\n\n setDisplayValue(cleanedValue);\n\n if (onChange) {\n let valueToSend: number | string = cleanedValue;\n\n if (!formatNumber) {\n valueToSend = cleanedValue; \n } else if (cleanedValue !== \"\") {\n if (currencyFormat) {\n const numericValue = parseFloat(cleanedValue);\n if (!isNaN(numericValue)) {\n // ALWAYS send string representation to avoid dropping trailing decimals\n valueToSend = cleanedValue;\n }\n } else {\n const numericValue = parseInt(cleanedValue, 10);\n if (!isNaN(numericValue)) {\n valueToSend = cleanedValue;\n }\n }\n }\n\n const newEvent = {\n ...e,\n target: {\n ...e.target,\n name,\n value: valueToSend.toString(),\n },\n };\n onChange(newEvent);\n }\n};\n\n const handleTextChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (readOnly) return;\n\n const value = e.target.value;\n\n if(maxLength){\n if(value.length > maxLength) return;\n }\n if (onChange) {\n\n const newEvent = {\n ...e,\n target: {\n ...e.target,\n name,\n value: value,\n },\n };\n onChange(newEvent);\n }\n\n }\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(true);\n setHasSelectedAll(false);\n if (readOnly || !isNumberType) return;\n\n setDisplayValue(unformatValue(value));\n e.currentTarget.select();\n };\n\nconst handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n setLocalTouched(true);\n setHasSelectedAll(false);\n setIsFocused(false);\n if (readOnly) {\n onBlur?.(e);\n return;\n }\n\n if (isNumberType) {\n const currentValue = displayValue;\n \n // Caso cuando formatNumber es false - mantener el valor como string sin parsing\n if (!formatNumber) {\n if (onChange && String(value) !== currentValue) {\n const newEvent = {\n ...e,\n target: {\n ...e.target,\n name,\n value: currentValue, // Mantener como string\n },\n };\n onChange(newEvent);\n }\n onBlur?.(e);\n return;\n }\n\n // Lógica original para cuando formatNumber es true\n let numericValue: number | undefined = undefined;\n let valueToSend: number | string | undefined = undefined;\n\n let cleanedValue = \"\";\n if (currencyFormat) {\n cleanedValue = currentValue.replace(/[^0-9.]/g, \"\");\n const parts = cleanedValue.split(\".\");\n if (parts.length > 2) {\n cleanedValue = parts[0] + \".\" + parts.slice(1).join(\"\");\n }\n if (cleanedValue === \".\") cleanedValue = \"\";\n } else {\n cleanedValue = currentValue.replace(/[^0-9]/g, \"\");\n }\n\n const parsed = currencyFormat\n ? parseFloat(cleanedValue)\n : parseInt(cleanedValue, 10);\n\n if (!isNaN(parsed)) {\n numericValue = parsed;\n\n if (min !== undefined && numericValue < min) {\n numericValue = min;\n }\n if (max !== undefined && numericValue > max) {\n numericValue = max;\n }\n valueToSend = numericValue;\n\n setDisplayValue(formatValue(numericValue));\n } else {\n setDisplayValue(\"\");\n valueToSend = undefined;\n }\n\n if (onChange && String(value) !== String(valueToSend)) {\n const newEvent = {\n ...e,\n target: {\n ...e.target,\n name,\n value: valueToSend,\n },\n };\n onChange(newEvent);\n } else if (\n String(value) === String(valueToSend) &&\n displayValue !== formatValue(value) &&\n !isNaN(parsed)\n ) {\n setDisplayValue(formatValue(value));\n } else if (isNaN(parsed)) {\n setDisplayValue(\"\");\n }\n }\n onBlur?.(e);\n};\n\n const currentLength = isNumberType\n ? (currencyFormat ? displayValue.replace(/[.,]/g, \"\") : displayValue).length\n : typeof value === \"string\"\n ? value.length\n : String(value ?? \"\").length;\n\n return (\n <div className={clsx(\"w-full\", containerClassName)}>\n {isCheckboxOrRadio ? (\n // CHECKBOX / RADIO LAYOUT (Row)\n <div className=\"flex items-center gap-2\">\n <input\n ref={inputRef}\n name={name}\n id={name}\n type={type}\n checked={checked}\n onChange={(e) => {\n setLocalTouched(true);\n handleTextChange(e);\n }}\n onBlur={(e) => {\n setLocalTouched(true);\n onBlur?.(e);\n }}\n onKeyDown={onKeyDown}\n disabled={disabled}\n required={required}\n className={clsx(\n \"peer\",\n \"form-radio h-4 w-4 text-slate-600 focus:ring-slate-500 transition-all duration-200\",\n type === \"checkbox\" && \"form-checkbox rounded\",\n className,\n { [disabledOverlay]: disabled },\n { \"border-red-500\": hasError }\n )}\n />\n {label && (\n <label htmlFor={name} className=\"text-sm text-gray-700 dark:text-slate-300 select-none\">\n {label} {required && <ITText as=\"span\" className=\"text-red-500\">*</ITText>}\n </label>\n )}\n </div>\n ) : (\n // TEXT / NUMBER / TEXTAREA LAYOUT (Column)\n <div className=\"flex flex-col gap-1.5\">\n {label && (\n <label\n htmlFor={name}\n className={clsx(\n inputLabel(hasError),\n labelClassName\n )}\n >\n {label}\n {required && <ITText as=\"span\" className=\"text-red-500 ml-1\">*</ITText>}\n </label>\n )}\n \n <div className=\"relative w-full\">\n {iconLeft && (\n <div className={iconAbsoluteLeft}>\n {iconLeft}\n </div>\n )}\n\n {isTextArea ? (\n <textarea\n name={name}\n id={name}\n placeholder={placeholder}\n value={value ?? \"\"}\n onChange={readOnly ? undefined : onChange}\n onBlur={(e) => {\n if (readOnly) return;\n setLocalTouched(true);\n onBlur?.(e);\n }}\n onKeyDown={onKeyDown}\n readOnly={readOnly}\n maxLength={maxLength}\n minLength={minLength}\n disabled={disabled}\n required={required}\n autoFocus={autoFocus}\n onClick={onClick}\n rows={rows}\n className={clsx(\n \"peer\",\n \"focus:outline-none w-full resize-none\",\n className,\n { \"cursor-not-allowed\": disabled }\n )}\n style={getStyle()}\n />\n ) : (\n <>\n <input\n ref={inputRef}\n name={name}\n id={name}\n type={\n isNumberType\n ? \"text\"\n : type === \"password\"\n ? showPassword\n ? \"text\"\n : \"password\"\n : type\n }\n inputMode={\n isNumberType\n ? currencyFormat\n ? \"decimal\"\n : \"numeric\"\n : undefined\n }\n placeholder={placeholder}\n value={isNumberType ? displayValue : String(value ?? \"\")}\n // checked not needed here\n onChange={isNumberType ? handleNumberChange : handleTextChange}\n onFocus={isNumberType ? handleFocus : () => setIsFocused(true)}\n onBlur={\n isNumberType\n ? handleBlur\n : (e) => {\n setIsFocused(false);\n setLocalTouched(true);\n onBlur?.(e);\n }\n }\n onKeyDown={isNumberType ? handleKeyDown : onKeyDown}\n readOnly={readOnly}\n maxLength={isNumberType && !currencyFormat ? maxLength : undefined}\n minLength={minLength}\n min={min}\n max={max}\n disabled={disabled}\n required={required}\n autoFocus={autoFocus}\n onClick={focusContent ? handleClick : onClick}\n className={clsx(\n \"peer\",\n \"focus:outline-none w-full\",\n className,\n { \"cursor-not-allowed\": disabled },\n { \"pl-10\": iconLeft },\n { \"pr-10\": iconRight || type === \"password\" }\n )}\n style={getStyle()}\n />\n \n {/* Password Toggle Button */}\n {type === \"password\" && (\n <button\n type=\"button\"\n className=\"absolute inset-y-0 right-0 flex items-center pr-3 z-10 text-gray-400 hover:text-gray-600 focus:outline-none\"\n onClick={() => setShowPassword(!showPassword)}\n tabIndex={-1} // Don't allow tabbing into the eye icon\n >\n {showPassword ? (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M9.88 9.88a3 3 0 1 0 4.24 4.24\"/><path d=\"M10.73 5.08A10.43 10.43 0 0 1 12 5c7 0 10 7 10 7a13.16 13.16 0 0 1-1.67 2.68\"/><path d=\"M6.61 6.61A13.526 13.526 0 0 0 2 12s3 7 10 7a9.74 9.74 0 0 0 5.39-1.61\"/><line x1=\"2\" x2=\"22\" y1=\"2\" y2=\"22\"/></svg>\n ) : (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/></svg>\n )}\n </button>\n )}\n </>\n )}\n\n {iconRight && type !== \"password\" && (\n <div className={iconAbsoluteRight}>\n {iconRight}\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* Validation message aligned with input */}\n {hasError && !isCheckboxOrRadio && (\n <div className=\"flex-shrink-0 min-w-[140px] flex items-center pt-3\">\n <ITText as=\"p\" className={inputError}>{errorMessage}</ITText>\n </div>\n )}\n \n {/* Length hint below if needed */}\n {showHintLength && (minLength || maxLength) && !isCheckboxOrRadio && (\n <div className=\"mt-1 text-xs\">\n<ITText as=\"p\" className=\"text-gray-500\">\n {currentLength}{maxLength && `/${maxLength}`}\n </ITText>\n </div>\n )}\n \n {/* Validation for checkbox/radio - keep below */}\n {isCheckboxOrRadio && hasError && (\n <div className=\"mt-1 text-xs\">\n <ITText as=\"p\" className=\"text-red-500\">{errorMessage}</ITText>\n </div>\n )}\n </div>\n );\n}\n","import clsx from \"clsx\";\n\n// ──────────────────────────────────────────────\n// INPUT-LIKE COMPONENTS\n// ──────────────────────────────────────────────\n\nexport function inputContainer(hasError?: boolean, disabled?: boolean) {\n return clsx(\n \"w-full border border-solid transition-all duration-200 rounded-lg px-3 py-2 text-sm\",\n \"focus:outline-none focus:ring-2\",\n hasError\n ? \"border-red-500 ring-red-100\"\n : \"border-gray-300 focus:border-primary-500 focus:ring-primary-100\",\n disabled && \"opacity-50 cursor-not-allowed bg-gray-100\"\n );\n}\n\nexport function inputLabel(error?: boolean) {\n return clsx(\n \"text-sm font-medium\",\n error ? \"text-red-500\" : \"text-gray-700 dark:text-slate-300\"\n );\n}\n\nexport const inputError = \"text-red-500 text-xs mt-1\";\n\nexport function inputWrapper(className?: string) {\n return clsx(\"flex flex-col gap-1.5\", className);\n}\n\nexport const iconAbsoluteLeft = \"absolute inset-y-0 left-0 flex items-center pl-3 z-10\";\nexport const iconAbsoluteRight = \"absolute inset-y-0 right-0 flex items-center pr-3 z-10\";\n\n// ──────────────────────────────────────────────\n// TABLE COMPONENTS\n// ──────────────────────────────────────────────\n\nexport const tableContainer = \"rounded-xl shadow-sm border border-secondary-200 overflow-hidden\";\n\nexport const tableHeaderRow = \"bg-secondary-50 border-b border-secondary-200 text-xs uppercase tracking-wider font-semibold text-secondary-500\";\n\nexport function tableHeaderCell(className?: string) {\n return clsx(\"px-4 py-4 align-top\", className);\n}\n\nexport const tableSortButtonActive = \"bg-secondary-200 text-secondary-900\";\nexport const tableSortButtonInactive = \"hover:bg-secondary-200 text-secondary-400 hover:text-secondary-700\";\n\nexport const tableBody = \"divide-y divide-secondary-100\";\n\nexport const tableRow = \"hover:bg-secondary-50/50 transition-colors duration-150 group\";\n\nexport function tableCell(className?: string) {\n return clsx(\"px-4 py-3 align-middle\", className);\n}\n\nexport const tableActionsCell = \"flex items-center justify-center gap-2\";\nexport const tableCellText = \"text-secondary-700 font-medium\";\n\nexport function tableEmptyState(colSpan: number) {\n return { colSpan, className: \"px-6 py-20 text-center\" };\n}\n\nexport const tableEmptyContent = \"flex flex-col items-center justify-center text-secondary-400\";\n\n// ──────────────────────────────────────────────\n// CARD / CONTAINER\n// ──────────────────────────────────────────────\n\nexport const cardContainer = \"overflow-hidden\";\n\n// ──────────────────────────────────────────────\n// FORM GRID\n// ──────────────────────────────────────────────\n\nexport const gridColsClasses: Record<number, string> = {\n 1: \"grid-cols-1\",\n 2: \"grid-cols-2\",\n 3: \"grid-cols-3\",\n 4: \"grid-cols-4\",\n 6: \"grid-cols-6\",\n 8: \"grid-cols-8\",\n 12: \"grid-cols-12\",\n};\n\nexport function getGridColsClass(columns: number) {\n return gridColsClasses[columns] || \"grid-cols-12\";\n}\n\nexport function getColSpanClass(\n span: number | number[] | { sm?: number; md?: number; lg?: number; xl?: number },\n maxCols: number\n) {\n if (typeof span === \"number\") {\n return `col-span-${Math.min(span, maxCols)}`;\n }\n if (Array.isArray(span)) {\n const [sm, md, lg] = span;\n return clsx(\n `col-span-${Math.min(sm, maxCols)}`,\n md !== undefined && `md:col-span-${Math.min(md, maxCols)}`,\n lg !== undefined && `lg:col-span-${Math.min(lg, maxCols)}`\n );\n }\n const classes: string[] = [];\n if (span.sm) classes.push(`col-span-${Math.min(span.sm, maxCols)}`);\n if (span.md) classes.push(`md:col-span-${Math.min(span.md, maxCols)}`);\n if (span.lg) classes.push(`lg:col-span-${Math.min(span.lg, maxCols)}`);\n if (span.xl) classes.push(`xl:col-span-${Math.min(span.xl, maxCols)}`);\n return classes.length ? clsx(classes) : `col-span-${maxCols}`;\n}\n\nexport const formGrid = (columns: number) =>\n clsx(\"grid gap-y-6 gap-x-5\", getGridColsClass(columns));\n\n// ──────────────────────────────────────────────\n// DISABLED OVERLAY\n// ──────────────────────────────────────────────\n\nexport const disabledOverlay = \"opacity-50 cursor-not-allowed\";\n","import React from \"react\";\nimport clsx from \"clsx\";\nimport { FaChevronLeft, FaChevronRight } from \"react-icons/fa\";\nimport { ITPaginationProps } from \"./pagination.props\";\nimport { theme } from \"@/theme/theme\";\nimport ITSelect from \"../select/select\";\nimport ITText from \"@/components/text/text\";\n\nconst DOTS = \"...\";\n\n// Helper hook to calculate page ranges\nconst usePagination = ({\n totalPages,\n currentPage,\n siblingCount = 1,\n}: {\n totalPages: number;\n currentPage: number;\n siblingCount?: number;\n}) => {\n return React.useMemo(() => {\n // Pages count is determined as siblingCount + firstPage + lastPage + currentPage + 2*DOTS\n const totalPageNumbers = siblingCount + 5;\n\n /*\n Case 1:\n If the number of pages is less than the page numbers we want to show in our\n paginationComponent, we return the range [1..totalPageCount]\n */\n if (totalPageNumbers >= totalPages) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n\n const leftSiblingIndex = Math.max(currentPage - siblingCount, 1);\n const rightSiblingIndex = Math.min(currentPage + siblingCount, totalPages);\n\n const shouldShowLeftDots = leftSiblingIndex > 2;\n const shouldShowRightDots = rightSiblingIndex < totalPages - 2;\n\n const firstPageIndex = 1;\n const lastPageIndex = totalPages;\n\n /*\n Case 2: No left dots to show, but rights dots to be shown\n */\n if (!shouldShowLeftDots && shouldShowRightDots) {\n let leftItemCount = 3 + 2 * siblingCount;\n let leftRange = Array.from({ length: leftItemCount }, (_, i) => i + 1);\n return [...leftRange, DOTS, totalPages];\n }\n\n /*\n Case 3: No right dots to show, but left dots to be shown\n */\n if (shouldShowLeftDots && !shouldShowRightDots) {\n let rightItemCount = 3 + 2 * siblingCount;\n let rightRange = Array.from(\n { length: rightItemCount },\n (_, i) => totalPages - rightItemCount + i + 1\n );\n return [firstPageIndex, DOTS, ...rightRange];\n }\n\n /*\n Case 4: Both left and right dots to be shown\n */\n if (shouldShowLeftDots && shouldShowRightDots) {\n let middleRange = Array.from(\n { length: rightSiblingIndex - leftSiblingIndex + 1 },\n (_, i) => leftSiblingIndex + i\n );\n return [firstPageIndex, DOTS, ...middleRange, DOTS, lastPageIndex];\n }\n }, [totalPages, currentPage, siblingCount]);\n};\n\nexport default function ITPagination({\n currentPage,\n totalPages,\n onPageChange,\n siblingCount = 1,\n color = \"primary\",\n className = \"\",\n itemsPerPageOptions,\n itemsPerPage,\n onItemsPerPageChange,\n totalItems,\n}: ITPaginationProps) {\n const paginationRange = usePagination({\n currentPage,\n totalPages,\n siblingCount,\n });\n\n // If there are less than 2 pages and no items per page options, we can hide the component\n if (currentPage === 0 || (!itemsPerPageOptions && paginationRange && paginationRange.length < 2)) {\n return null;\n }\n\n // Resolve color\n const isSemantic = color in theme.colors;\n const resolvedBgColor = isSemantic\n ? theme.colors[color as keyof typeof theme.colors][500]\n : color;\n const resolvedHoverBgColor = isSemantic\n ? theme.colors[color as keyof typeof theme.colors][50]\n : \"#f3f4f6\"; // fallback generic gray hover\n\n const handleNext = () => {\n if (currentPage < totalPages) {\n onPageChange(currentPage + 1);\n }\n };\n\n const handlePrevious = () => {\n if (currentPage > 1) {\n onPageChange(currentPage - 1);\n }\n };\n\n // Base styles for list items\n const baseItemClass =\n \"flex items-center justify-center w-8 h-8 rounded-full text-sm font-medium transition-colors cursor-pointer select-none\";\n\n const renderPaginationControls = () => (\n <div className=\"flex items-center gap-1\">\n {/* Previous Button */}\n <div\n className={clsx(\n baseItemClass,\n currentPage === 1\n ? \"text-gray-300 cursor-not-allowed\"\n : \"text-gray-500 hover:bg-gray-100\"\n )}\n onClick={handlePrevious}\n aria-disabled={currentPage === 1}\n >\n <FaChevronLeft size={12} />\n </div>\n\n {/* Pages */}\n {paginationRange?.map((pageNumber, idx) => {\n if (pageNumber === DOTS) {\n return (\n <ITText\n as=\"div\"\n key={`dots-${idx}`}\n className=\"flex items-center justify-center w-8 h-8 select-none text-gray-400\"\n >\n …\n </ITText>\n );\n }\n\n const isActive = pageNumber === currentPage;\n\n return (\n <ITText\n as=\"div\"\n key={pageNumber}\n className={clsx(\n baseItemClass,\n isActive ? \"text-white\" : \"text-gray-600 hover:bg-gray-100\"\n )}\n style={{\n backgroundColor: isActive ? resolvedBgColor : undefined,\n ...(isActive ? {} : { \"--hover-bg\": resolvedHoverBgColor } as React.CSSProperties),\n }}\n onClick={() => onPageChange(pageNumber as number)}\n title={`Page ${pageNumber}`}\n >\n <ITText as=\"span\">{pageNumber}</ITText>\n </ITText>\n );\n })}\n\n {/* Next Button */}\n <div\n className={clsx(\n baseItemClass,\n currentPage === totalPages\n ? \"text-gray-300 cursor-not-allowed\"\n : \"text-gray-500 hover:bg-gray-100\"\n )}\n onClick={handleNext}\n aria-disabled={currentPage === totalPages}\n >\n <FaChevronRight size={12} />\n </div>\n </div>\n );\n\n // If itemsPerPageOptions is provided, wrap in a wider container with the select\n if (itemsPerPageOptions && itemsPerPage && onItemsPerPageChange) {\n const startItem = Math.min((currentPage - 1) * itemsPerPage + 1, totalItems || 0);\n const endItem = Math.min(currentPage * itemsPerPage, totalItems || 0);\n\n return (\n <div className={clsx(\"flex flex-col sm:flex-row justify-between items-center gap-4 w-full\", className)}>\n <div className=\"flex items-center gap-4 text-sm text-gray-500\">\n <div className=\"flex items-center gap-2 bg-gray-50 px-3 py-1 rounded-lg border border-gray-200\">\n <ITText as=\"span\" className=\"text-xs font-medium\">Mostrar</ITText>\n <ITSelect\n name=\"itemsPerPage\"\n options={itemsPerPageOptions.map((option) => ({\n value: String(option),\n label: String(option),\n }))}\n value={String(itemsPerPage)}\n onChange={(e) => onItemsPerPageChange(Number(e.target.value))}\n onBlur={() => {}}\n size=\"small\"\n className=\"!w-14 !h-6 !text-xs !py-0 !px-1! !border-none !bg-transparent !ring-0 focus:!ring-0 cursor-pointer font-bold text-gray-700\"\n placeholder=\"\"\n />\n </div>\n \n {totalItems !== undefined && (\n <>\n <ITText as=\"span\" className=\"text-gray-300\">|</ITText>\n <ITText as=\"span\" className=\"text-xs\">\n <ITText as=\"span\" className=\"font-semibold text-gray-700\">{startItem}</ITText><ITText as=\"span\"> - </ITText><ITText as=\"span\" className=\"font-semibold text-gray-700\">{endItem}</ITText><ITText as=\"span\"> de </ITText><ITText as=\"span\" className=\"font-semibold text-gray-900\">{totalItems}</ITText>\n </ITText>\n </>\n )}\n </div>\n \n <nav aria-label=\"Pagination\">\n {renderPaginationControls()}\n </nav>\n </div>\n );\n }\n\n // Otherwise, render just the standard pagination component\n return (\n <nav aria-label=\"Pagination\" className={clsx(\"inline-flex\", className)}>\n {renderPaginationControls()}\n </nav>\n );\n}\n","import { theme } from \"@/theme/theme\";\nimport clsx from \"clsx\";\nimport { useState } from \"react\";\nimport { FaAngleDown } from \"react-icons/fa\";\nimport { ITSelectProps } from \"./select.props\";\nimport ITText from \"@/components/text/text\";\n\n/**\n * Componente de selección (select) con soporte para opciones personalizadas, validación y personalización de estilo.\n * Matches styles of ITInput.\n */\nexport default function ITSelect({\n name,\n options,\n label,\n placeholder,\n valueField = \"value\",\n labelField = \"label\",\n value,\n onChange,\n onBlur,\n disabled = false,\n className,\n touched,\n required,\n error,\n readOnly = false,\n}: ITSelectProps) {\n const [isFocused, setIsFocused] = useState(false);\n const [localTouched, setLocalTouched] = useState(false);\n\n // Theme logic - reuse input theme for consistency\n const inputTheme = (theme as any).input || {};\n\n const isTouched = touched !== undefined ? touched : localTouched;\n const isEmpty = value === undefined || value === null || String(value).trim() === \"\";\n\n const effectiveError = error !== undefined && error !== false\n ? (error === true ? \"Este campo es requerido\" : error)\n : (required && isEmpty ? \"Este campo es requerido\" : undefined);\n\n const hasError = isTouched && !!effectiveError;\n const errorMessage = typeof effectiveError === \"string\" ? effectiveError : \"Este campo es requerido\";\n\n const getStyle = () => {\n const style: React.CSSProperties = {\n backgroundColor: inputTheme.backgroundColor,\n borderColor: inputTheme.borderColor,\n borderRadius: inputTheme.borderRadius,\n padding: inputTheme.padding,\n fontSize: inputTheme.fontSize,\n borderWidth: '1px',\n borderStyle: 'solid',\n transition: 'all 0.2s',\n color: 'var(--input-text-color, var(--color-secondary-900))',\n appearance: 'none', // Important for custom styling\n };\n\n if (disabled) {\n style.backgroundColor = inputTheme.disabled?.backgroundColor || style.backgroundColor;\n style.borderColor = inputTheme.disabled?.borderColor || style.borderColor;\n style.opacity = 0.7;\n }\n\n if (hasError) {\n style.borderColor = inputTheme.error?.borderColor || 'red';\n if (isFocused) {\n style.boxShadow = inputTheme.error?.ring;\n }\n } else if (isFocused && !readOnly) {\n style.boxShadow = inputTheme.focus?.ring;\n }\n\n return style;\n };\n\n return (\n <div className=\"w-full\">\n <div className={clsx(\"relative\", {\n \"flex flex-col gap-1.5\": label,\n })}>\n {label && (\n <ITText\n as=\"label\"\n htmlFor={name}\n className={clsx(\n \"text-sm font-medium text-gray-700 dark:text-slate-300 pt-0\",\n { \"text-red-500\": hasError }\n )}\n >\n <ITText as=\"span\">{label}</ITText>\n {required && <ITText as=\"span\" className=\"text-red-500 ml-1\">*</ITText>}\n </ITText>\n )}\n <div className=\"flex flex-col w-full\">\n <div className=\"relative flex-1\">\n <select\n name={name}\n id={name}\n value={value}\n onChange={readOnly ? undefined : onChange}\n onBlur={(e) => {\n setIsFocused(false);\n setLocalTouched(true);\n readOnly ? undefined : onBlur?.(e);\n }}\n onFocus={() => setIsFocused(true)}\n disabled={disabled}\n className={clsx(\n \"w-full focus:outline-none\", // Core structure only\n className,\n { \"cursor-not-allowed\": disabled }\n )}\n style={getStyle()}\n >\n <option value=\"\"><ITText as=\"span\">{placeholder || \"Selecciona una opción\"}</ITText></option>\n {\n readOnly ? (\n <option value={value} disabled>\n <ITText as=\"span\">{options.find((option) => option[valueField] === value)?.[labelField]}</ITText>\n </option>\n ) : (\n options.map((option) => (\n <option\n key={option[valueField]}\n value={option[valueField]}\n title={option[labelField]}\n >\n <ITText as=\"span\">{option[labelField]}</ITText>\n </option>\n ))\n )\n }\n </select>\n <div className=\"absolute inset-y-0 right-0 flex items-center pr-3 pointer-events-none text-gray-500\">\n <FaAngleDown />\n </div>\n </div>\n {/* Validation message aligned with select */}\n {hasError && (\n <div className=\"flex-shrink-0 min-w-[140px] flex items-center pt-3\">\n <ITText as=\"p\" className=\"text-red-500 text-xs\">{errorMessage}</ITText>\n </div>\n )}\n </div>\n\n </div>\n </div>\n );\n}\n","import { useTableState } from \"@/hooks/useTableState\";\nimport { sizeStyles, variantStyles } from \"@/types/table.types\";\nimport clsx from \"clsx\";\nimport React from \"react\";\nimport {\n FaCheck,\n FaSpinner,\n FaTimes\n} from \"react-icons/fa\";\nimport { MdOutlineSwapVert } from \"react-icons/md\";\nimport ITInput from \"../input/input\";\nimport ITPagination from \"../pagination/pagination\";\nimport ITSelect from \"../select/select\";\nimport { Column, ITTableProps } from \"./table.props\";\nimport ITText from \"@/components/text/text\";\n\nconst getNestedValue = (obj: unknown, path: string) => {\n return path.split(\".\").reduce((acc, part) => acc && acc[part], obj);\n};\nexport const formatCurrencyMX = (value: number) => {\n return value.toLocaleString(\"es-MX\", {\n style: \"currency\",\n currency: \"MXN\",\n });\n};\nexport default function ITTable<T extends Record<string, unknown>>({\n columns,\n data = [],\n containerClassName,\n className,\n variant = \"default\",\n size = \"md\",\n itemsPerPageOptions = [5, 10, 20],\n defaultItemsPerPage = 10,\n title,\n}: ITTableProps<T>) {\n const {\n currentPage,\n itemsPerPage,\n filters,\n sortConfig,\n goToPage,\n handleFilterChange,\n handleSort,\n handleItemsPerPageChange,\n } = useTableState({ defaultItemsPerPage });\n\n const sortedData = React.useMemo(() => {\n const safeData = Array.isArray(data) ? data : [];\n if (!sortConfig) return safeData;\n\n return [...safeData].sort((a, b) => {\n const aValue = getNestedValue(a, sortConfig.key);\n const bValue = getNestedValue(b, sortConfig.key);\n\n if (aValue == null || bValue == null) return 0;\n\n let comparison = 0;\n\n const column = columns.find((col) => col.key === sortConfig.key);\n if (!column || !column.sortable) return 0;\n\n switch (column.type) {\n case \"number\":\n comparison = (aValue as number) - (bValue as number);\n break;\n case \"date\":\n comparison =\n new Date(aValue as string).getTime() -\n new Date(bValue as string).getTime();\n break; \n case \"boolean\":\n comparison = aValue === bValue ? 0 : aValue ? 1 : -1;\n break;\n case \"catalog\": {\n const catalogItemA = column.catalogOptions?.data.find(\n (item) => item.id === aValue\n );\n const catalogItemB = column.catalogOptions?.data.find(\n (item) => item.id === bValue\n );\n comparison = String(catalogItemA?.name || aValue).localeCompare(\n String(catalogItemB?.name || bValue)\n );\n break;\n }\n case \"string\":\n default:\n comparison = (aValue as string).localeCompare(bValue as string);\n break;\n }\n\n return sortConfig.direction === \"asc\" ? comparison : -comparison;\n });\n }, [data, sortConfig, columns]);\n\n const filteredData = sortedData.filter((row) =>\n columns.every((col) => {\n if (\n !col.filter ||\n filters[col.key] === undefined ||\n filters[col.key] === \"\"\n )\n return true;\n\n const value = getNestedValue(row, col.key);\n const filterValue = String(filters[col.key]).toLowerCase();\n\n switch (col.type) {\n case \"number\":\n return String(value).includes(filterValue);\n case \"boolean\":\n return value === filters[col.key];\n case \"catalog\": {\n if (!col.catalogOptions) return true;\n const catalogItem = col.catalogOptions.data.find(\n (item) =>\n String(item.id).toLowerCase().includes(filterValue) ||\n item.name.toLowerCase().includes(filterValue)\n );\n return catalogItem ? value === catalogItem.id : false;\n }\n case \"string\":\n default:\n return String(value).toLowerCase().includes(filterValue);\n }\n })\n );\n\n const computedTotalPages = Math.ceil(filteredData.length / itemsPerPage) || 1;\n const currentData = filteredData.slice(\n (currentPage - 1) * itemsPerPage,\n currentPage * itemsPerPage\n );\n\n const renderFilterInput = (col: Column<T>) => {\n if (!col.filter) return null;\n\n if (col.type === \"boolean\") {\n const currentValue = filters[col.key];\n const nextValue =\n currentValue === undefined\n ? true\n : currentValue === true\n ? false\n : undefined;\n\n const getToggleLabel = () => {\n if (currentValue === undefined) return \"Mostrar todos\";\n if (currentValue === true) return \"Filtrar solo verdaderos\";\n return \"Filtrar solo falsos\";\n };\n\n return (\n <button\n className=\"flex items-center justify-center cursor-pointer focus:outline-none focus:ring-2 focus:ring-slate-400 focus:ring-offset-2 rounded-full p-1 transition-all duration-200\"\n onClick={() => handleFilterChange(col.key, nextValue)}\n aria-label={`${getToggleLabel()} para ${col.label}`}\n title={`${getToggleLabel()} para ${col.label}`}\n >\n <div className=\"relative w-10 h-5 bg-gray-300 rounded-full\">\n <div\n className={clsx(\n \"absolute top-0.5 w-4 h-4 rounded-full transition-all duration-300 shadow-sm\",\n {\n \"left-0.5 bg-gray-400\": currentValue === undefined,\n \"left-5 bg-slate-500\": currentValue === true,\n \"left-0.5 bg-gray-500\": currentValue === false,\n }\n )}\n />\n </div>\n </button>\n );\n }\n\n if (col.filter === \"catalog\" && col.catalogOptions) {\n if (col.catalogOptions.loading) {\n return (\n <FaSpinner \n className=\"animate-spin\" \n aria-label=\"Cargando opciones\"\n title=\"Cargando opciones\"\n />\n );\n }\n\n if (col.catalogOptions.error) {\n return <ITText as=\"span\" className=\"text-red-500 text-xs\">Error cargando</ITText>;\n }\n\n return (\n <ITSelect\n name={`filter-${col.key}`}\n options={[\n { value: \"\", label: \"Todos\" },\n ...col.catalogOptions.data.map((item) => ({\n value: String(item.id),\n label: item.name,\n })),\n ]}\n value={String(filters[col.key] || \"\")}\n onChange={(e) => {\n const value = e.target.value === \"\" ? undefined : e.target.value;\n handleFilterChange(col.key, value);\n }}\n onBlur={() => {}}\n className=\"w-full text-xs\"\n />\n );\n }\n\n return (\n <ITInput\n name={`filter-${col.key}`}\n className=\"w-full text-xs\"\n placeholder=\"Buscar...\"\n value={String(filters[col.key] || \"\")}\n onChange={(e) => handleFilterChange(col.key, e.target.value)}\n onBlur={() => {}}\n />\n );\n };\n\n const renderCellContent = (col: Column<T>, row: T) => {\n const value = getNestedValue(row, col.key);\n\n if (col.render) {\n return col.render(row);\n }\n\n switch (col.type) {\n case \"number\": \n return (typeof value === \"number\") && col.currencyMX ?formatCurrencyMX(value) : value;\n case \"boolean\":\n return value ? (\n <FaCheck \n className=\"text-green-500\" \n aria-label=\"Verdadero\"\n title=\"Verdadero\"\n />\n ) : (\n <FaTimes \n className=\"text-red-500\"\n aria-label=\"Falso\" \n title=\"Falso\"\n />\n );\n case \"actions\":\n return col.actions ? col.actions(row) : null;\n case \"catalog\":\n if (col.catalogOptions) {\n const catalogItem = col.catalogOptions.data.find(\n (item) => item.id === value\n );\n return catalogItem?.name || value;\n }\n return value as React.ReactNode;\n default:\n return value as React.ReactNode;\n }\n };\n\n return (\n<div className={clsx(\"space-y-4 w-full\", containerClassName)}>\n <div className=\"rounded-xl shadow-sm border border-secondary-200 overflow-hidden\" style={{ backgroundColor: 'var(--color-table-rowBg, #ffffff)' }}>\n {/* Header outside overflow */}\n {title && (\n <div className=\"px-6 py-5 border-b border-secondary-100\" style={{ backgroundColor: 'var(--color-table-rowBg, #ffffff)' }}>\n <ITText as=\"h2\" className=\"text-xl font-bold text-secondary-900 leading-tight\">{title}</ITText>\n </div>\n )}\n\n {/* Scrollable Table */}\n <div className=\"overflow-x-auto\">\n <table\n className={clsx(\n \"min-w-max w-full text-sm text-left text-secondary-600\",\n variantStyles[variant],\n sizeStyles[size]\n )}\n >\n\n <thead>\n <tr className=\"bg-secondary-50 border-b border-secondary-200 text-xs uppercase tracking-wider font-semibold text-secondary-500\">\n {columns.map((col) => (\n <th\n key={col.key}\n scope=\"col\"\n className={clsx(\"px-4 py-4 align-top\", col.className)}\n >\n <div className=\"flex flex-col gap-3 min-w-[150px]\">\n {/* Column header */}\n <div className=\"flex items-center justify-between gap-2\">\n <ITText as=\"span\" className=\"text-secondary-700 font-bold\">{col.label}</ITText>\n {col.sortable && col.type !== \"actions\" && (\n <button\n onClick={() => handleSort(col.key)}\n className={`p-1 rounded-md transition-colors ${\n sortConfig?.key === col.key\n ? \"bg-secondary-200 text-secondary-900\" \n : \"hover:bg-secondary-200 text-secondary-400 hover:text-secondary-700\"\n }`}\n title={`Ordenar por ${col.label}`}\n >\n <MdOutlineSwapVert className=\"w-4 h-4\" aria-hidden=\"true\" />\n </button>\n )}\n </div>\n \n {/* Filter section */}\n <div className=\"w-full\">\n {col.filter ? renderFilterInput(col) : null}\n </div>\n </div>\n </th>\n ))}\n </tr>\n </thead>\n <tbody className=\"divide-y divide-secondary-100\">\n {currentData.length > 0 ? (\n currentData.map((row, rowIndex) => (\n <tr\n key={rowIndex}\n className=\"hover:bg-secondary-50/50 transition-colors duration-150 group\"\n >\n {columns.map((col) => (\n <td\n key={`${rowIndex}-${col.key}`}\n className={clsx(\"px-4 py-3 align-middle\", col.className)}\n >\n {col.type === \"actions\" ? (\n <div className=\"flex items-center justify-center gap-2\">\n {renderCellContent(col, row) as React.ReactNode}\n </div>\n ) : (\n <div className=\"text-secondary-700 font-medium\">\n {renderCellContent(col, row) as React.ReactNode}\n </div>\n )}\n </td>\n ))}\n </tr>\n ))\n ) : (\n <tr>\n <td colSpan={columns.length} className=\"px-6 py-12 text-center\">\n <div className=\"flex flex-col items-center justify-center text-secondary-400\">\n <ITText as=\"span\" className=\"text-lg\">No se encontraron resultados</ITText>\n <ITText as=\"span\" className=\"text-sm mt-1\">Intenta ajustar los filtros</ITText>\n </div>\n </td>\n </tr>\n )}\n </tbody>\n </table>\n </div>\n\n\n {/* Pagination */}\n <div className=\"rounded-b-xl border-t border-secondary-200 px-6 py-4\" style={{ backgroundColor: 'var(--color-table-rowBg, #ffffff)' }}>\n <ITPagination\n currentPage={currentPage}\n totalPages={computedTotalPages}\n onPageChange={goToPage}\n color=\"primary\"\n itemsPerPageOptions={itemsPerPageOptions}\n itemsPerPage={itemsPerPage}\n onItemsPerPageChange={handleItemsPerPageChange}\n totalItems={filteredData.length}\n />\n </div>\n </div>\n</div>\n );\n}","import clsx from \"clsx\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { FaCalendarAlt } from \"react-icons/fa\";\nimport { isBefore } from \"date-fns\";\nimport ITCalendar from \"../calendar/calendar\";\nimport ITInput from \"../input/input\";\nimport { ITDatePickerProps } from \"./date-picker.props\";\nimport { theme } from \"@/theme/theme\";\n\nexport default function ITDatePicker({\n name,\n value,\n onChange,\n onBlur,\n variant = \"primary\",\n size = \"medium\",\n className,\n calendarClassName,\n disabled = false,\n label,\n touched,\n error,\n required,\n placeholder,\n minDate,\n maxDate,\n range = false,\n}: ITDatePickerProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [inputValue, setInputValue] = useState(\"\");\n const [isValidDate, setIsValidDate] = useState(true);\n \n // For range selection, we'll keep track of the internal state if not provided\n const [internalRange, setInternalRange] = useState<[Date | null, Date | null]>([null, null]);\n\n const wrapperRef = useRef<HTMLDivElement>(null);\n const [calendarPosition, setCalendarPosition] = useState({ top: 0, left: 0 });\n\n // Normalize single vs range values\n const dateRange = React.useMemo(() => {\n if (range) {\n if (Array.isArray(value)) return value;\n return internalRange;\n }\n return [value instanceof Date ? value : null, null] as [Date | null, Date | null];\n }, [value, range, internalRange]);\n\n const [startDate, endDate] = dateRange;\n\n useEffect(() => {\n if (range) {\n if (startDate && endDate) {\n setInputValue(`${formatDate(startDate)} - ${formatDate(endDate)}`);\n } else if (startDate) {\n setInputValue(`${formatDate(startDate)} - ...`);\n } else {\n setInputValue(\"\");\n }\n } else {\n if (startDate instanceof Date && !isNaN(startDate.getTime())) {\n setInputValue(formatDate(startDate));\n } else {\n setInputValue(\"\");\n }\n }\n }, [startDate, endDate, range]);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n wrapperRef.current &&\n !wrapperRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n const calculateCalendarPosition = () => {\n if (wrapperRef.current) {\n const inputRect = wrapperRef.current.getBoundingClientRect();\n const calendarHeight = 300;\n const viewportHeight = window.innerHeight;\n\n let top = inputRect.bottom + 4;\n if (inputRect.bottom + calendarHeight > viewportHeight) {\n top = inputRect.top - calendarHeight - 4;\n }\n\n setCalendarPosition({\n top,\n left: inputRect.left,\n });\n }\n };\n\n const handleDateChange = (date: Date) => {\n if (range) {\n let newRange: [Date | null, Date | null];\n \n if (!startDate || (startDate && endDate)) {\n // Start a new range\n newRange = [date, null];\n } else {\n // Closing a range\n if (isBefore(date, startDate)) {\n newRange = [date, startDate];\n } else {\n newRange = [startDate, date];\n }\n }\n \n setInternalRange(newRange);\n \n // If range is complete, notify parent and close\n if (newRange[0] && newRange[1]) {\n onChange({\n target: {\n name,\n value: newRange,\n },\n });\n setIsOpen(false);\n } else {\n // Just notify start (optional, but good for reactivity)\n onChange({\n target: {\n name,\n value: newRange,\n },\n });\n }\n } else {\n const event = {\n target: {\n name,\n value: date,\n },\n };\n onChange(event);\n setInputValue(formatDate(date));\n setIsOpen(false);\n }\n };\n\n const handleIconClick = () => {\n if (!disabled) {\n calculateCalendarPosition();\n setIsOpen(!isOpen);\n }\n };\n\n const formatDate = (date: Date) =>\n date\n .toLocaleDateString(\"es-ES\", {\n day: \"2-digit\",\n month: \"2-digit\",\n year: \"numeric\",\n })\n .replace(/\\//g, \"/\");\n\n const validateDate = (dateString: string) => {\n const regex = /^(\\d{2})\\/(\\d{2})\\/(\\d{4})$/;\n const match = dateString.match(regex);\n if (!match) return false;\n\n const day = parseInt(match[1], 10);\n const month = parseInt(match[2], 10);\n const year = parseInt(match[3], 10);\n\n const date = new Date(year, month - 1, day);\n return (\n date.getFullYear() === year &&\n date.getMonth() === month - 1 &&\n date.getDate() === day\n );\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n let val = e.target.value.replace(/\\D/g, \"\");\n if (val.length > 8) val = val.slice(0, 8);\n\n if (val.length > 4) {\n val = `${val.slice(0, 2)}/${val.slice(2, 4)}/${val.slice(4)}`;\n } else if (val.length > 2) {\n val = `${val.slice(0, 2)}/${val.slice(2)}`;\n }\n\n setInputValue(val);\n\n if (val.length === 10 && validateDate(val)) {\n const [day, month, year] = val.split(\"/\").map(Number);\n const date = new Date(year, month - 1, day);\n const event = {\n target: {\n name,\n value: date,\n },\n };\n onChange(event);\n onChange(event);\n setIsValidDate(true);\n } else {\n setIsValidDate(false);\n }\n };\n\n const handleInputBlur = () => {\n if (range) {\n // For range, simple text input is harder to validate without complex logic\n // We'll rely on calendar for now to avoid breaking the UX\n return;\n }\n \n if (!validateDate(inputValue)) {\n // Si la fecha no es válida, usar la fecha de hoy\n const today = new Date();\n setInputValue(formatDate(today));\n const event = {\n target: {\n name,\n value: today,\n },\n };\n onChange(event);\n setIsValidDate(true);\n } else {\n // Solo construimos la fecha si es válida\n const [day, month, year] = inputValue.split(\"/\").map(Number);\n const date = new Date(year, month - 1, day);\n\n if (!isNaN(date.getTime())) {\n onBlur?.({ target: { name, value: date } });\n } else {\n // fallback a hoy por seguridad\n const today = new Date();\n setInputValue(formatDate(today));\n onChange({ target: { name, value: today } });\n }\n }\n };\n\n return (\n <div ref={wrapperRef} className={clsx(\"relative w-full\", className)}>\n <ITInput\n name={name}\n type=\"text\"\n label={label}\n placeholder={placeholder}\n value={inputValue}\n onChange={handleInputChange}\n onBlur={handleInputBlur}\n maxLength={10}\n iconRight={\n <span>\n <FaCalendarAlt\n onClick={handleIconClick}\n className=\"text-slate-900 cursor-pointer\"\n />\n </span>\n }\n variant={variant}\n size={size}\n disabled={disabled}\n required={required}\n touched={touched}\n error={!isValidDate ? \"Fecha inválida\" : error}\n onClick={handleIconClick}\n />\n\n {isOpen && (\n <div\n className={clsx(\n \"fixed z-[9999]\",\n calendarClassName,\n range ? \"w-[320px]\" : \"w-[280px]\"\n )}\n style={{\n top: `${calendarPosition.top}px`,\n left: `${calendarPosition.left}px`,\n backgroundColor: theme.card.backgroundColor,\n borderColor: theme.card.borderColor,\n borderWidth: '1px',\n borderStyle: 'solid',\n borderRadius: theme.card.borderRadius,\n boxShadow: theme.card.shadow,\n padding: '0.5rem',\n }}\n >\n <ITCalendar\n value={!range ? (startDate as Date) : undefined}\n startDate={startDate as Date}\n endDate={endDate as Date}\n selectionMode={range ? 'range' : 'single'}\n onChange={handleDateChange}\n minDate={minDate}\n maxDate={maxDate}\n variant={variant}\n className=\"h-auto border-none shadow-none w-full\"\n />\n </div>\n )}\n </div>\n );\n}\n","import { createPortal } from \"react-dom\";\nimport { theme } from \"@/theme/theme\";\nimport { useEffect, useRef } from \"react\";\nimport { FaRegTimesCircle } from \"react-icons/fa\";\nimport { ITDialogProps } from \"./dialog.props\";\nimport useClickOutside from \"@/hooks/useClickOutside\";\nimport ITFormHeader from \"../form-header/form-header\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITDialog({\n isOpen,\n onClose,\n children,\n className,\n title,\n useFormHeader = false,\n fullScreen = false,\n}: ITDialogProps) {\n const modalRef = useRef<HTMLDivElement>(null);\n\n useClickOutside(modalRef, onClose);\n\n useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n onClose();\n }\n };\n\n if (isOpen) {\n document.addEventListener(\"keydown\", handleEscape);\n }\n\n return () => {\n document.removeEventListener(\"keydown\", handleEscape);\n };\n }, [isOpen, onClose]);\n\n if (!isOpen) return null;\n if (typeof document === \"undefined\") return null;\n\n const content = (\n <div\n className={`fixed inset-0 flex ${\n fullScreen ? \"items-stretch\" : \"items-center justify-center\"\n } bg-black/50 z-[9999]`}\n >\n <div\n ref={modalRef}\n className={`overflow-hidden relative ${\n fullScreen\n ? \"w-screen h-screen max-w-none rounded-none m-0 flex flex-col\"\n : `${className || \"\"} ${useFormHeader ? \"p-0\" : \"p-6\"}`\n }`}\n style={{\n backgroundColor: theme.card.backgroundColor,\n borderRadius: fullScreen ? \"0\" : theme.card.borderRadius,\n boxShadow: fullScreen ? \"none\" : theme.card.shadow,\n borderWidth: fullScreen ? \"0\" : theme.card.borderWidth,\n borderColor: theme.card.borderColor,\n borderStyle: 'solid',\n }}\n >\n {useFormHeader && title ? (\n <>\n <ITFormHeader title={title} onClose={onClose} />\n <div className={fullScreen ? \"flex-1 overflow-auto p-6\" : \"p-6\"}>\n {children}\n </div>\n </>\n ) : (\n <>\n <button\n className=\"absolute top-2 right-2 text-gray-600 hover:text-gray-900\"\n onClick={onClose}\n >\n <FaRegTimesCircle />\n </button>\n {title && <ITText as=\"h2\" className=\"text-xl font-semibold mb-4\">{title}</ITText>}\n <div>{children}</div>\n </>\n )}\n </div>\n </div>\n );\n\n return createPortal(content, document.body);\n}\n","import { FaTimes } from \"react-icons/fa\";\nimport { ITFormHeaderProps } from \"./form-header.props\";\nimport { useITThemeSafe } from \"../theme-provider/themeProvider\";\nimport { getContrastTextColor } from \"@/utils/color.utils\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITFormHeader({\n title,\n onClose,\n className = \"\",\n}: ITFormHeaderProps) {\n const themeContext = useITThemeSafe();\n\n const isDarkMode = themeContext?.resolvedTheme === \"dark\";\n const palette = themeContext?.palette;\n const textColorClass = getContrastTextColor(\n palette?.primary || \"#06b6d4\",\n palette,\n isDarkMode\n );\n\n return (\n <div className={`bg-primary-500 ${textColorClass} px-6 py-4 rounded-t-lg flex justify-center items-center relative ${className}`}>\n <ITText as=\"h2\" className=\"text-lg font-semibold text-center\" style={{ color: \"inherit\" }}>{title}</ITText>\n {onClose && (\n <button\n onClick={onClose}\n className={`absolute right-4 ${textColorClass} hover:opacity-80 transition-colors duration-200 p-1 rounded-full`}\n style={{ color: \"inherit\" }}\n aria-label=\"Cerrar\"\n >\n <FaTimes className=\"w-4 h-4\" />\n </button>\n )}\n </div>\n );\n}\n ","import React, { createContext, useContext, useState, useEffect } from \"react\";\nimport { MdPalette, MdClose, MdRefresh } from \"react-icons/md\";\nimport { ITThemeProviderProps, ITThemePalette } from \"./themeProvider.props\";\nimport ITDialog from \"../dialog/dialog\";\nimport ITTabs from \"../tabs/tabs\";\nimport ITButton from \"../button/button\";\nimport ITInput from \"../input/input\";\nimport ITSegmentedControl from \"../segmented-control/segmented-control\";\nimport ITDivider from \"../divider/divider\";\nimport ITText from \"@/components/text/text\";\n\n// ============================================================================\n// DEFAULT PALETTE & PRESETS CONFIG\n// ============================================================================\n\nconst STORAGE_KEY = \"it-theme-palette\";\n\nexport const DEFAULT_PALETTE: ITThemePalette = {\n primary: \"#06b6d4\", // Cyan\n secondary: \"#6b7280\", // Gray\n ternary: \"#8b5cf6\", // Purple/Violet\n danger: \"#ef4444\", // Red\n success: \"#22c55e\", // Green\n info: \"#3b82f6\", // Blue\n alert: \"#f97316\", // Orange\n warning: \"#eab308\", // Yellow\n layout: {\n sidebarBg: \"#ffffff\", // White (light mode default)\n sidebarText: \"#334155\", // Slate-700 (dark text for light sidebar)\n navbarBg: \"#ffffff\", // White\n navbarText: \"#1e293b\", // Slate-800\n },\n table: {\n headerBg: \"#f8fafc\", // Slate-50\n headerText: \"#334155\", // Slate-700\n rowBg: \"#ffffff\", // White\n rowText: \"#1e293b\", // Slate-800\n },\n};\n\nexport const PRESETS: { name: string; colors: ITThemePalette }[] = [\n {\n name: \"Midnight Indigo 🌌\",\n colors: {\n primary: \"#6366f1\",\n secondary: \"#475569\",\n ternary: \"#f472b6\",\n danger: \"#ef4444\",\n success: \"#34d399\",\n info: \"#06b6d4\",\n alert: \"#fb923c\",\n warning: \"#fbbf24\",\n layout: {\n sidebarBg: \"#0b1120\",\n sidebarText: \"#94a3b8\",\n navbarBg: \"#0f172a\",\n navbarText: \"#f1f5f9\",\n },\n table: {\n headerBg: \"#f1f5f9\",\n headerText: \"#334155\",\n rowBg: \"#ffffff\",\n rowText: \"#0f172a\",\n },\n },\n },\n {\n name: \"Coral Reef 🪸\",\n colors: {\n primary: \"#f43f5e\",\n secondary: \"#57534e\",\n ternary: \"#f97316\",\n danger: \"#b91c1c\",\n success: \"#14b8a6\",\n info: \"#6366f1\",\n alert: \"#eab308\",\n warning: \"#fde047\",\n layout: {\n sidebarBg: \"#0c0808\",\n sidebarText: \"#fda4af\",\n navbarBg: \"#1c1212\",\n navbarText: \"#fff1f2\",\n },\n table: {\n headerBg: \"#fff1f2\",\n headerText: \"#881337\",\n rowBg: \"#ffffff\",\n rowText: \"#1c1212\",\n },\n },\n },\n {\n name: \"Oceanic Teal 🌊\",\n colors: {\n primary: \"#0d9488\",\n secondary: \"#64748b\",\n ternary: \"#a78bfa\",\n danger: \"#e11d48\",\n success: \"#22c55e\",\n info: \"#0284c7\",\n alert: \"#ea580c\",\n warning: \"#ca8a04\",\n layout: {\n sidebarBg: \"#042f2e\",\n sidebarText: \"#5eead4\",\n navbarBg: \"#062b2a\",\n navbarText: \"#ccfbf1\",\n },\n table: {\n headerBg: \"#f0fdfa\",\n headerText: \"#115e59\",\n rowBg: \"#ffffff\",\n rowText: \"#042f2e\",\n },\n },\n },\n {\n name: \"Golden Hour ☀️\",\n colors: {\n primary: \"#d97706\",\n secondary: \"#78716c\",\n ternary: \"#db2777\",\n danger: \"#dc2626\",\n success: \"#65a30d\",\n info: \"#2563eb\",\n alert: \"#f97316\",\n warning: \"#facc15\",\n layout: {\n sidebarBg: \"#fefce8\",\n sidebarText: \"#713f12\",\n navbarBg: \"#fffbeb\",\n navbarText: \"#451a03\",\n },\n table: {\n headerBg: \"#fefce8\",\n headerText: \"#713f12\",\n rowBg: \"#ffffff\",\n rowText: \"#292524\",\n },\n },\n },\n {\n name: \"Deep Forest 🌲\",\n colors: {\n primary: \"#16a34a\",\n secondary: \"#57534e\",\n ternary: \"#d946ef\",\n danger: \"#dc2626\",\n success: \"#14b8a6\",\n info: \"#0ea5e9\",\n alert: \"#f97316\",\n warning: \"#eab308\",\n layout: {\n sidebarBg: \"#052e16\",\n sidebarText: \"#86efac\",\n navbarBg: \"#0b3b1c\",\n navbarText: \"#dcfce7\",\n },\n table: {\n headerBg: \"#f0fdf4\",\n headerText: \"#166534\",\n rowBg: \"#ffffff\",\n rowText: \"#052e16\",\n },\n },\n },\n];\n// ============================================================================\n// CONTEXT & PROVIDER\n// ============================================================================\n\ninterface ITThemeContextType {\n palette: ITThemePalette;\n colors: ITThemePalette;\n setPalette: (newPalette: ITThemePalette) => void;\n updateColor: (key: string, value: string) => void;\n resetTheme: () => void;\n applyPreset: (colors: ITThemePalette) => void;\n resolvedTheme: \"light\" | \"dark\";\n darkModeMode: \"light\" | \"dark\" | \"system\";\n setDarkModeMode: (mode: \"light\" | \"dark\" | \"system\") => void;\n}\n\nconst ITThemeContext = createContext<ITThemeContextType | undefined>(undefined);\n\nexport const useITTheme = () => {\n const context = useContext(ITThemeContext);\n if (!context) {\n throw new Error(\"useITTheme must be used within an ITThemeProvider\");\n }\n return context;\n};\n\n/**\n * Versión segura de useITTheme que retorna undefined\n * si se usa fuera de ITThemeProvider (no lanza error).\n */\nexport const useITThemeSafe = (): ITThemeContextType | undefined => {\n return useContext(ITThemeContext);\n};\n\nconst getNestedValue = (obj: any, path: string) => {\n return path.split(\".\").reduce((acc, part) => acc && acc[part], obj);\n};\n\nconst isLightColor = (hex: string) => {\n if (!hex || typeof hex !== \"string\") return false;\n const color = hex.replace(\"#\", \"\");\n let r = 0,\n g = 0,\n b = 0;\n if (color.length === 3) {\n r = parseInt(color[0] + color[0], 16);\n g = parseInt(color[1] + color[1], 16);\n b = parseInt(color[2] + color[2], 16);\n } else if (color.length === 6) {\n r = parseInt(color.substring(0, 2), 16);\n g = parseInt(color.substring(2, 4), 16);\n b = parseInt(color.substring(4, 6), 16);\n } else {\n return false;\n }\n const brightness = (r * 299 + g * 587 + b * 114) / 1000;\n return brightness > 140;\n};\n\n/** Returns true if the hex color is very dark (brightness < 50) */\nconst isVeryDarkColor = (hex: string) => {\n if (!hex || typeof hex !== \"string\") return false;\n const color = hex.replace(\"#\", \"\");\n let r = 0,\n g = 0,\n b = 0;\n if (color.length === 3) {\n r = parseInt(color[0] + color[0], 16);\n g = parseInt(color[1] + color[1], 16);\n b = parseInt(color[2] + color[2], 16);\n } else if (color.length === 6) {\n r = parseInt(color.substring(0, 2), 16);\n g = parseInt(color.substring(2, 4), 16);\n b = parseInt(color.substring(4, 6), 16);\n } else {\n return false;\n }\n const brightness = (r * 299 + g * 587 + b * 114) / 1000;\n return brightness < 50;\n};\n\nexport default function ITThemeProvider({\n children,\n theme,\n showFab = true,\n}: ITThemeProviderProps) {\n const [palette, setPaletteState] = useState<ITThemePalette>(() => {\n const basePalette = {\n ...DEFAULT_PALETTE,\n ...theme,\n layout: { ...DEFAULT_PALETTE.layout, ...theme?.layout },\n table: { ...DEFAULT_PALETTE.table, ...theme?.table },\n };\n if (!showFab) {\n return basePalette as ITThemePalette;\n }\n try {\n const saved = localStorage.getItem(STORAGE_KEY);\n if (saved) {\n const parsed = JSON.parse(saved);\n return {\n ...basePalette,\n ...parsed,\n layout: { ...basePalette.layout, ...parsed.layout },\n table: { ...basePalette.table, ...parsed.table },\n };\n }\n } catch (e) {\n console.error(\"Failed to load theme from localStorage\", e);\n }\n return basePalette as ITThemePalette;\n });\n\n const [isOpen, setIsOpen] = useState(false);\n const [customPresets, setCustomPresets] = useState<\n { name: string; colors: ITThemePalette }[]\n >(() => {\n try {\n const saved = localStorage.getItem(\"it-theme-custom-presets\");\n return saved ? JSON.parse(saved) : [];\n } catch (e) {\n console.error(\"Failed to load custom presets\", e);\n return [];\n }\n });\n const [newPresetName, setNewPresetName] = useState(\"\");\n const [isSavingPreset, setIsSavingPreset] = useState(false);\n\n const handleSavePreset = () => {\n if (!newPresetName.trim()) return;\n const newPreset = {\n name: newPresetName.trim(),\n colors: JSON.parse(JSON.stringify(palette)),\n };\n const updated = [...customPresets, newPreset];\n setCustomPresets(updated);\n localStorage.setItem(\"it-theme-custom-presets\", JSON.stringify(updated));\n setNewPresetName(\"\");\n setIsSavingPreset(false);\n };\n\n const handleDeletePreset = (nameToDelete: string, e: React.MouseEvent) => {\n e.stopPropagation();\n const updated = customPresets.filter((p) => p.name !== nameToDelete);\n setCustomPresets(updated);\n localStorage.setItem(\"it-theme-custom-presets\", JSON.stringify(updated));\n };\n\n const [resolvedTheme, setResolvedTheme] = useState<\"light\" | \"dark\">(\"light\");\n\n const [darkModeMode, setDarkModeMode] = useState<\"light\" | \"dark\" | \"system\">(\n () => {\n const saved = localStorage.getItem(\"it-theme-dark-mode\");\n if (saved === \"light\" || saved === \"dark\" || saved === \"system\") {\n return saved;\n }\n return \"system\";\n },\n );\n\n useEffect(() => {\n localStorage.setItem(\"it-theme-dark-mode\", darkModeMode);\n\n const applyDarkMode = (isDark: boolean) => {\n if (isDark) {\n document.documentElement.classList.add(\"dark\");\n document.documentElement.setAttribute(\"data-theme\", \"dark\");\n setResolvedTheme(\"dark\");\n } else {\n document.documentElement.classList.remove(\"dark\");\n document.documentElement.setAttribute(\"data-theme\", \"light\");\n setResolvedTheme(\"light\");\n }\n };\n\n if (darkModeMode === \"system\") {\n const mediaQuery = window.matchMedia(\"(prefers-color-scheme: dark)\");\n applyDarkMode(mediaQuery.matches);\n\n const listener = (e: MediaQueryListEvent) => {\n applyDarkMode(e.matches);\n };\n\n mediaQuery.addEventListener(\"change\", listener);\n return () => mediaQuery.removeEventListener(\"change\", listener);\n } else {\n applyDarkMode(darkModeMode === \"dark\");\n }\n }, [darkModeMode]);\n\n // Sync palette with theme prop when showFab is false\n useEffect(() => {\n if (!showFab) {\n setPaletteState({\n ...DEFAULT_PALETTE,\n ...theme,\n layout: { ...DEFAULT_PALETTE.layout, ...theme?.layout },\n table: { ...DEFAULT_PALETTE.table, ...theme?.table },\n });\n }\n }, [theme, showFab]);\n\n // Inyectar variables CSS en el :root al cambiar la paleta o tema resuelto\n useEffect(() => {\n const injectStyles = (obj: any, prefix = \"\") => {\n Object.entries(obj).forEach(([key, val]) => {\n if (typeof val === \"object\" && val !== null) {\n injectStyles(val, prefix + key + \"-\");\n } else {\n document.documentElement.style.setProperty(\n `--color-${prefix}${key}`,\n val as string,\n );\n if (prefix === \"layout-\") {\n document.documentElement.style.setProperty(\n `--color-${key}`,\n val as string,\n );\n }\n }\n });\n };\n injectStyles(palette);\n if (showFab) {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(palette));\n }\n\n // Dynamic overrides for Tailwind classes and component tokens\n let styleTag = document.getElementById(\n \"it-theme-dynamic-overrides\",\n ) as HTMLStyleElement;\n if (!styleTag) {\n styleTag = document.createElement(\"style\");\n styleTag.id = \"it-theme-dynamic-overrides\";\n document.head.appendChild(styleTag);\n }\n\n const isDark = resolvedTheme === \"dark\";\n\n let tableRowBg = palette.table.rowBg;\n let tableRowText = palette.table.rowText;\n let tableHeaderBg = palette.table.headerBg;\n let tableHeaderText = palette.table.headerText;\n let navbarBg = palette.layout.navbarBg;\n let navbarText = palette.layout.navbarText;\n let sidebarBg = palette.layout.sidebarBg;\n let sidebarText = palette.layout.sidebarText;\n\n if (isDark) {\n if (isLightColor(tableRowBg)) {\n tableRowBg = `color-mix(in srgb, ${palette.table.rowBg} 8%, #111827)`;\n }\n if (!isLightColor(tableRowText)) {\n tableRowText = `color-mix(in srgb, ${palette.table.rowText} 20%, #f3f4f6)`;\n }\n if (isLightColor(tableHeaderBg)) {\n tableHeaderBg = `color-mix(in srgb, ${palette.table.headerBg} 12%, #1f2937)`;\n }\n if (!isLightColor(tableHeaderText)) {\n tableHeaderText = `color-mix(in srgb, ${palette.table.headerText} 20%, #f9fafb)`;\n }\n if (isLightColor(navbarBg)) {\n navbarBg = `color-mix(in srgb, ${palette.layout.navbarBg} 8%, #111827)`;\n }\n if (!isLightColor(navbarText)) {\n navbarText = `color-mix(in srgb, ${palette.layout.navbarText} 20%, #f3f4f6)`;\n }\n if (isLightColor(sidebarBg)) {\n sidebarBg = `color-mix(in srgb, ${palette.layout.sidebarBg} 8%, #0f172a)`;\n }\n if (!isLightColor(sidebarText)) {\n sidebarText = `color-mix(in srgb, ${palette.layout.sidebarText} 20%, #cbd5e1)`;\n }\n } else {\n // Light mode: if table colors are dark (from a dark preset), override to clean light values\n // Very dark colors (brightness < 50) get replaced directly to avoid dirty tints\n if (!isLightColor(tableRowBg)) {\n tableRowBg = isVeryDarkColor(palette.table.rowBg)\n ? \"#ffffff\"\n : `color-mix(in srgb, ${palette.table.rowBg} 8%, #ffffff)`;\n }\n if (isLightColor(tableRowText)) {\n tableRowText = `color-mix(in srgb, ${palette.table.rowText} 30%, #1e293b)`;\n } else if (\n !isLightColor(tableRowText) &&\n isVeryDarkColor(palette.table.rowText)\n ) {\n // Very dark text is fine for light mode, keep it\n }\n if (!isLightColor(tableHeaderBg)) {\n tableHeaderBg = isVeryDarkColor(palette.table.headerBg)\n ? \"#f1f5f9\"\n : `color-mix(in srgb, ${palette.table.headerBg} 12%, #f8fafc)`;\n }\n if (isLightColor(tableHeaderText)) {\n tableHeaderText = `color-mix(in srgb, ${palette.table.headerText} 30%, #334155)`;\n } else if (\n !isLightColor(tableHeaderText) &&\n isVeryDarkColor(palette.table.headerText)\n ) {\n // Dark header text is fine for light mode\n }\n if (!isLightColor(navbarBg)) {\n navbarBg = isVeryDarkColor(palette.layout.navbarBg)\n ? \"#ffffff\"\n : `color-mix(in srgb, ${palette.layout.navbarBg} 8%, #ffffff)`;\n }\n if (isLightColor(navbarText)) {\n navbarText = `color-mix(in srgb, ${palette.layout.navbarText} 30%, #1e293b)`;\n }\n if (!isLightColor(sidebarBg)) {\n sidebarBg = isVeryDarkColor(palette.layout.sidebarBg)\n ? \"#ffffff\"\n : `color-mix(in srgb, ${palette.layout.sidebarBg} 8%, #ffffff)`;\n }\n if (isLightColor(sidebarText)) {\n sidebarText = `color-mix(in srgb, ${palette.layout.sidebarText} 30%, #1e293b)`;\n }\n // If sidebar became light, ensure text is dark for contrast\n if (sidebarBg === \"#ffffff\" || isLightColor(sidebarBg)) {\n sidebarText = \"#334155\";\n }\n }\n\n styleTag.innerHTML = `\n :root {\n --color-primary: ${palette.primary};\n --color-secondary: ${palette.secondary};\n --color-ternary: ${palette.ternary};\n --color-danger: ${palette.danger};\n --color-success: ${palette.success};\n --color-info: ${palette.info};\n --color-alert: ${palette.alert};\n --color-warning: ${palette.warning};\n --color-heading-default: #1e293b;\n --color-text-default: var(--color-secondary-900);\n --color-text-muted: var(--color-secondary-600);\n\n /* Generated scales for primary */\n --color-primary-50: color-mix(in srgb, var(--color-primary) 5%, #ffffff);\n --color-primary-100: color-mix(in srgb, var(--color-primary) 10%, #ffffff);\n --color-primary-200: color-mix(in srgb, var(--color-primary) 30%, #ffffff);\n --color-primary-300: color-mix(in srgb, var(--color-primary) 50%, #ffffff);\n --color-primary-400: color-mix(in srgb, var(--color-primary) 70%, #ffffff);\n --color-primary-500: var(--color-primary);\n --color-primary-600: color-mix(in srgb, var(--color-primary) 85%, #000000);\n --color-primary-700: color-mix(in srgb, var(--color-primary) 70%, #000000);\n --color-primary-800: color-mix(in srgb, var(--color-primary) 55%, #000000);\n --color-primary-900: color-mix(in srgb, var(--color-primary) 40%, #000000);\n --color-primary-950: color-mix(in srgb, var(--color-primary) 25%, #000000);\n\n /* Generated scales for secondary */\n --color-secondary-50: color-mix(in srgb, var(--color-secondary) 5%, #ffffff);\n --color-secondary-100: color-mix(in srgb, var(--color-secondary) 10%, #ffffff);\n --color-secondary-200: color-mix(in srgb, var(--color-secondary) 30%, #ffffff);\n --color-secondary-300: color-mix(in srgb, var(--color-secondary) 50%, #ffffff);\n --color-secondary-400: color-mix(in srgb, var(--color-secondary) 70%, #ffffff);\n --color-secondary-500: var(--color-secondary);\n --color-secondary-600: color-mix(in srgb, var(--color-secondary) 85%, #000000);\n --color-secondary-700: color-mix(in srgb, var(--color-secondary) 70%, #000000);\n --color-secondary-800: color-mix(in srgb, var(--color-secondary) 55%, #000000);\n --color-secondary-900: color-mix(in srgb, var(--color-secondary) 40%, #000000);\n --color-secondary-950: color-mix(in srgb, var(--color-secondary) 25%, #000000);\n\n /* Generated scales for ternary */\n --color-ternary-50: color-mix(in srgb, var(--color-ternary) 5%, #ffffff);\n --color-ternary-100: color-mix(in srgb, var(--color-ternary) 10%, #ffffff);\n --color-ternary-200: color-mix(in srgb, var(--color-ternary) 30%, #ffffff);\n --color-ternary-300: color-mix(in srgb, var(--color-ternary) 50%, #ffffff);\n --color-ternary-400: color-mix(in srgb, var(--color-ternary) 70%, #ffffff);\n --color-ternary-500: var(--color-ternary);\n --color-ternary-600: color-mix(in srgb, var(--color-ternary) 85%, #000000);\n --color-ternary-700: color-mix(in srgb, var(--color-ternary) 70%, #000000);\n --color-ternary-800: color-mix(in srgb, var(--color-ternary) 55%, #000000);\n --color-ternary-900: color-mix(in srgb, var(--color-ternary) 40%, #000000);\n --color-ternary-950: color-mix(in srgb, var(--color-ternary) 25%, #000000);\n\n /* Purple scales mapped as aliases to ternary */\n --color-purple-50: var(--color-ternary-50);\n --color-purple-100: var(--color-ternary-100);\n --color-purple-200: var(--color-ternary-200);\n --color-purple-300: var(--color-ternary-300);\n --color-purple-400: var(--color-ternary-400);\n --color-purple-500: var(--color-ternary-500);\n --color-purple-600: var(--color-ternary-600);\n --color-purple-700: var(--color-ternary-700);\n --color-purple-800: var(--color-ternary-800);\n --color-purple-900: var(--color-ternary-900);\n --color-purple-950: var(--color-ternary-950);\n\n /* Generated scales for danger */\n --color-danger-50: color-mix(in srgb, var(--color-danger) 5%, #ffffff);\n --color-danger-100: color-mix(in srgb, var(--color-danger) 10%, #ffffff);\n --color-danger-200: color-mix(in srgb, var(--color-danger) 30%, #ffffff);\n --color-danger-300: color-mix(in srgb, var(--color-danger) 50%, #ffffff);\n --color-danger-400: color-mix(in srgb, var(--color-danger) 70%, #ffffff);\n --color-danger-500: var(--color-danger);\n --color-danger-600: color-mix(in srgb, var(--color-danger) 85%, #000000);\n --color-danger-700: color-mix(in srgb, var(--color-danger) 70%, #000000);\n --color-danger-800: color-mix(in srgb, var(--color-danger) 55%, #000000);\n --color-danger-900: color-mix(in srgb, var(--color-danger) 40%, #000000);\n --color-danger-950: color-mix(in srgb, var(--color-danger) 25%, #000000);\n\n /* Generated scales for success */\n --color-success-50: color-mix(in srgb, var(--color-success) 5%, #ffffff);\n --color-success-100: color-mix(in srgb, var(--color-success) 10%, #ffffff);\n --color-success-200: color-mix(in srgb, var(--color-success) 30%, #ffffff);\n --color-success-300: color-mix(in srgb, var(--color-success) 50%, #ffffff);\n --color-success-400: color-mix(in srgb, var(--color-success) 70%, #ffffff);\n --color-success-500: var(--color-success);\n --color-success-600: color-mix(in srgb, var(--color-success) 85%, #000000);\n --color-success-700: color-mix(in srgb, var(--color-success) 70%, #000000);\n --color-success-800: color-mix(in srgb, var(--color-success) 55%, #000000);\n --color-success-900: color-mix(in srgb, var(--color-success) 40%, #000000);\n --color-success-950: color-mix(in srgb, var(--color-success) 25%, #000000);\n\n /* Generated scales for info */\n --color-info-50: color-mix(in srgb, var(--color-info) 5%, #ffffff);\n --color-info-100: color-mix(in srgb, var(--color-info) 10%, #ffffff);\n --color-info-200: color-mix(in srgb, var(--color-info) 30%, #ffffff);\n --color-info-300: color-mix(in srgb, var(--color-info) 50%, #ffffff);\n --color-info-400: color-mix(in srgb, var(--color-info) 70%, #ffffff);\n --color-info-500: var(--color-info);\n --color-info-600: color-mix(in srgb, var(--color-info) 85%, #000000);\n --color-info-700: color-mix(in srgb, var(--color-info) 70%, #000000);\n --color-info-800: color-mix(in srgb, var(--color-info) 55%, #000000);\n --color-info-900: color-mix(in srgb, var(--color-info) 40%, #000000);\n --color-info-950: color-mix(in srgb, var(--color-info) 25%, #000000);\n\n /* Generated scales for alert */\n --color-alert-50: color-mix(in srgb, var(--color-alert) 5%, #ffffff);\n --color-alert-100: color-mix(in srgb, var(--color-alert) 10%, #ffffff);\n --color-alert-200: color-mix(in srgb, var(--color-alert) 30%, #ffffff);\n --color-alert-300: color-mix(in srgb, var(--color-alert) 50%, #ffffff);\n --color-alert-400: color-mix(in srgb, var(--color-alert) 70%, #ffffff);\n --color-alert-500: var(--color-alert);\n --color-alert-600: color-mix(in srgb, var(--color-alert) 85%, #000000);\n --color-alert-700: color-mix(in srgb, var(--color-alert) 70%, #000000);\n --color-alert-800: color-mix(in srgb, var(--color-alert) 55%, #000000);\n --color-alert-900: color-mix(in srgb, var(--color-alert) 40%, #000000);\n --color-alert-950: color-mix(in srgb, var(--color-alert) 25%, #000000);\n\n /* Generated scales for warning */\n --color-warning-50: color-mix(in srgb, var(--color-warning) 5%, #ffffff);\n --color-warning-100: color-mix(in srgb, var(--color-warning) 10%, #ffffff);\n --color-warning-200: color-mix(in srgb, var(--color-warning) 30%, #ffffff);\n --color-warning-300: color-mix(in srgb, var(--color-warning) 50%, #ffffff);\n --color-warning-400: color-mix(in srgb, var(--color-warning) 70%, #ffffff);\n --color-warning-500: var(--color-warning);\n --color-warning-600: color-mix(in srgb, var(--color-warning) 85%, #000000);\n --color-warning-700: color-mix(in srgb, var(--color-warning) 70%, #000000);\n --color-warning-800: color-mix(in srgb, var(--color-warning) 55%, #000000);\n --color-warning-900: color-mix(in srgb, var(--color-warning) 40%, #000000);\n --color-warning-950: color-mix(in srgb, var(--color-warning) 25%, #000000);\n\n /* Support legacy client app variables */\n --color-primary-focus: color-mix(in srgb, var(--color-primary) 30%, transparent);\n --color-primary-light: color-mix(in srgb, var(--color-primary) 10%, #ffffff);\n --color-secondary-border: color-mix(in srgb, var(--color-secondary) 30%, #000000);\n --color-ternary-light: color-mix(in srgb, var(--color-ternary) 15%, #ffffff);\n --color-danger-focus: color-mix(in srgb, var(--color-danger) 30%, transparent);\n --color-success-focus: color-mix(in srgb, var(--color-success) 30%, transparent);\n --color-info-focus: color-mix(in srgb, var(--color-info) 30%, transparent);\n --color-alert-focus: color-mix(in srgb, var(--color-alert) 30%, transparent);\n --color-warning-focus: color-mix(in srgb, var(--color-warning) 30%, transparent);\n\n /* Map library properties for complete safety */\n --color-primary-hover: color-mix(in srgb, var(--color-primary) 85%, #000000);\n --color-primary-ring: color-mix(in srgb, var(--color-primary) 40%, transparent);\n --color-primary-soft: color-mix(in srgb, var(--color-primary) 12%, transparent);\n --color-primary-soft-border: color-mix(in srgb, var(--color-primary) 24%, transparent);\n\n --color-secondary-hover: color-mix(in srgb, var(--color-secondary) 85%, #000000);\n --color-secondary-ring: color-mix(in srgb, var(--color-secondary) 40%, transparent);\n --color-secondary-soft: color-mix(in srgb, var(--color-secondary) 12%, transparent);\n --color-secondary-soft-border: color-mix(in srgb, var(--color-secondary) 24%, transparent);\n\n --color-ternary-hover: color-mix(in srgb, var(--color-ternary) 85%, #000000);\n --color-ternary-ring: color-mix(in srgb, var(--color-ternary) 40%, transparent);\n --color-ternary-soft: color-mix(in srgb, var(--color-ternary) 12%, transparent);\n --color-ternary-soft-border: color-mix(in srgb, var(--color-ternary) 24%, transparent);\n\n --color-danger-hover: color-mix(in srgb, var(--color-danger) 85%, #000000);\n --color-danger-ring: color-mix(in srgb, var(--color-danger) 40%, transparent);\n --color-danger-soft: color-mix(in srgb, var(--color-danger) 12%, transparent);\n --color-danger-soft-border: color-mix(in srgb, var(--color-danger) 24%, transparent);\n\n --color-success-hover: color-mix(in srgb, var(--color-success) 85%, #000000);\n --color-success-ring: color-mix(in srgb, var(--color-success) 40%, transparent);\n --color-success-soft: color-mix(in srgb, var(--color-success) 12%, transparent);\n --color-success-soft-border: color-mix(in srgb, var(--color-success) 24%, transparent);\n\n --color-info-hover: color-mix(in srgb, var(--color-info) 85%, #000000);\n --color-info-ring: color-mix(in srgb, var(--color-info) 40%, transparent);\n --color-info-soft: color-mix(in srgb, var(--color-info) 12%, transparent);\n --color-info-soft-border: color-mix(in srgb, var(--color-info) 24%, transparent);\n\n --color-alert-hover: color-mix(in srgb, var(--color-alert) 85%, #000000);\n --color-alert-ring: color-mix(in srgb, var(--color-alert) 40%, transparent);\n --color-alert-soft: color-mix(in srgb, var(--color-alert) 12%, transparent);\n --color-alert-soft-border: color-mix(in srgb, var(--color-alert) 24%, transparent);\n\n --color-warning-hover: color-mix(in srgb, var(--color-warning) 85%, #000000);\n --color-warning-ring: color-mix(in srgb, var(--color-warning) 40%, transparent);\n --color-warning-soft: color-mix(in srgb, var(--color-warning) 12%, transparent);\n --color-warning-soft-border: color-mix(in srgb, var(--color-warning) 24%, transparent);\n\n --color-sidebarBg: ${sidebarBg} !important;\n --color-sidebarText: ${sidebarText} !important;\n --color-navbarBg: ${navbarBg} !important;\n --color-navbarText: ${navbarText} !important;\n\n --color-table-headerBg: ${tableHeaderBg} !important;\n --color-table-headerText: ${tableHeaderText} !important;\n --color-table-rowBg: ${tableRowBg} !important;\n --color-table-rowText: ${tableRowText} !important;\n\n /* Native library variables integration */\n --sidebar-bg: var(--color-sidebarBg);\n --sidebar-border: color-mix(in srgb, var(--color-sidebarBg) 85%, #000000);\n --sidebar-label-color: var(--color-sidebarText);\n --sidebar-icon-color: color-mix(in srgb, var(--color-sidebarText) 80%, transparent);\n --sidebar-hover-bg: color-mix(in srgb, var(--color-sidebarText) 10%, transparent);\n --sidebar-active-bg: color-mix(in srgb, var(--color-primary) 12%, transparent);\n --sidebar-active-color: var(--color-primary);\n --sidebar-active-icon: var(--color-primary);\n --sidebar-badge-bg: var(--color-primary);\n --sidebar-badge-color: #ffffff;\n\n --topbar-bg: var(--color-navbarBg);\n --topbar-text: var(--color-navbarText);\n --topbar-border: color-mix(in srgb, var(--color-navbarBg) 85%, #000000);\n --topbar-icon: color-mix(in srgb, var(--color-navbarText) 80%, transparent);\n --topbar-icon-hover: var(--color-navbarText);\n --topbar-user-bg: var(--topbar-bg);\n --topbar-user-hover: color-mix(in srgb, var(--color-navbarText) 10%, transparent);\n --topbar-user-text: var(--color-navbarText);\n --topbar-user-subtitle: color-mix(in srgb, var(--color-navbarText) 65%, transparent);\n --topbar-user-dropdown-bg: color-mix(in srgb, var(--color-navbarBg) 100%, #ffffff);\n --topbar-user-dropdown-border: color-mix(in srgb, var(--color-navbarBg) 92%, #000000);\n --topbar-user-item-hover: color-mix(in srgb, var(--color-navbarText) 6%, transparent);\n\n --layout-bg: var(--color-secondary-50);\n --input-text-color: var(--color-secondary-900);\n\n --calendar-selected-bg: var(--color-primary);\n --calendar-selected-text: #ffffff;\n --calendar-range-bg: var(--color-primary-50);\n --calendar-today-bg: var(--color-primary-100);\n --calendar-today-text: var(--color-primary);\n }\n\n /* Dark mode overrides */\n .dark, [data-theme=\"dark\"] {\n --color-heading-default: #f8fafc;\n --color-text-default: #cbd5e1;\n --color-text-muted: #64748b;\n --layout-bg: #090f1d;\n --card-bg: #111827;\n --card-border: #1f2937;\n --card-header-bg: #1f2937;\n --card-header-border: #374151;\n --input-bg: #1f2937;\n --input-border: #374151;\n --input-placeholder: #6b7280;\n --input-text-color: #cbd5e1;\n --modal-bg: #111827;\n --modal-footer-bg: #1f2937;\n --modal-header-border: #374151;\n --modal-footer-border: #374151;\n --calendar-bg: #111827;\n --calendar-border: #1f2937;\n --calendar-header-text: #f3f4f6;\n --calendar-header-hover: #1f2937;\n --calendar-days-text: #e5e7eb;\n --calendar-selected-bg: var(--color-primary);\n --calendar-selected-text: #ffffff;\n --calendar-range-bg: var(--color-primary-50);\n --calendar-today-bg: var(--color-primary-100);\n --calendar-today-text: var(--color-primary);\n\n /* Override dynamic color-mix scales to blend with dark instead of white */\n --color-primary-50: color-mix(in srgb, var(--color-primary) 10%, #0b1329);\n --color-primary-100: color-mix(in srgb, var(--color-primary) 20%, #0b1329);\n --color-primary-200: color-mix(in srgb, var(--color-primary) 35%, #0b1329);\n --color-primary-300: color-mix(in srgb, var(--color-primary) 50%, #0b1329);\n --color-primary-400: color-mix(in srgb, var(--color-primary) 70%, #0b1329);\n\n --color-secondary-50: color-mix(in srgb, var(--color-secondary) 10%, #090f1d);\n --color-secondary-100: color-mix(in srgb, var(--color-secondary) 18%, #090f1d);\n --color-secondary-200: color-mix(in srgb, var(--color-secondary) 30%, #090f1d);\n --color-secondary-300: color-mix(in srgb, var(--color-secondary) 45%, #090f1d);\n --color-secondary-400: color-mix(in srgb, var(--color-secondary) 60%, #090f1d);\n\n --color-success-50: color-mix(in srgb, var(--color-success) 10%, #061f14);\n --color-success-100: color-mix(in srgb, var(--color-success) 20%, #061f14);\n --color-success-200: color-mix(in srgb, var(--color-success) 35%, #061f14);\n\n --color-danger-50: color-mix(in srgb, var(--color-danger) 10%, #1f0808);\n --color-danger-100: color-mix(in srgb, var(--color-danger) 20%, #1f0808);\n --color-danger-200: color-mix(in srgb, var(--color-danger) 35%, #1f0808);\n\n --color-warning-50: color-mix(in srgb, var(--color-warning) 10%, #1f1b05);\n --color-warning-100: color-mix(in srgb, var(--color-warning) 20%, #1f1b05);\n --color-warning-200: color-mix(in srgb, var(--color-warning) 35%, #1f1b05);\n\n --color-ternary-50: color-mix(in srgb, var(--color-ternary) 10%, #14081f);\n --color-ternary-100: color-mix(in srgb, var(--color-ternary) 20%, #14081f);\n --color-ternary-200: color-mix(in srgb, var(--color-ternary) 35%, #14081f);\n\n --color-info-50: color-mix(in srgb, var(--color-info) 10%, #08141f);\n --color-info-100: color-mix(in srgb, var(--color-info) 20%, #08141f);\n --color-info-200: color-mix(in srgb, var(--color-info) 35%, #08141f);\n }\n\n /* Force dark mode class overrides for common backgrounds, borders, and texts */\n .dark, [data-theme=\"dark\"] {\n color: #cbd5e1;\n }\n .dark .text-slate-800, [data-theme=\"dark\"] .text-slate-800,\n .dark .text-gray-800, [data-theme=\"dark\"] .text-gray-800 {\n color: #f8fafc !important;\n }\n .dark .text-slate-700, [data-theme=\"dark\"] .text-slate-700,\n .dark .text-gray-700, [data-theme=\"dark\"] .text-gray-700 {\n color: #cbd5e1 !important;\n }\n .dark .text-slate-600, [data-theme=\"dark\"] .text-slate-600,\n .dark .text-gray-600, [data-theme=\"dark\"] .text-gray-600 {\n color: #cbd5e1 !important;\n }\n .dark .text-slate-500, [data-theme=\"dark\"] .text-slate-500,\n .dark .text-gray-500, [data-theme=\"dark\"] .text-gray-500 {\n color: #94a3b8 !important;\n }\n .dark .text-slate-400, [data-theme=\"dark\"] .text-slate-400,\n .dark .text-gray-400, [data-theme=\"dark\"] .text-gray-400 {\n color: #64748b !important;\n }\n\n .dark .bg-white, [data-theme=\"dark\"] .bg-white {\n background-color: var(--card-bg, #111827) !important;\n }\n .dark .bg-slate-50, [data-theme=\"dark\"] .bg-slate-50,\n .dark .bg-gray-50, [data-theme=\"dark\"] .bg-gray-50 {\n background-color: #1f2937 !important;\n }\n .dark .border-slate-100, [data-theme=\"dark\"] .border-slate-100,\n .dark .border-gray-100, [data-theme=\"dark\"] .border-gray-100,\n .dark .border-slate-200, [data-theme=\"dark\"] .border-slate-200,\n .dark .border-gray-200, [data-theme=\"dark\"] .border-gray-200 {\n border-color: #374151 !important;\n }\n\n .dark .bg-gray-100, [data-theme=\"dark\"] .bg-gray-100,\n .dark .bg-slate-100, [data-theme=\"dark\"] .bg-slate-100 {\n background-color: #1f2937 !important;\n }\n .dark .border-gray-300, [data-theme=\"dark\"] .border-gray-300,\n .dark .border-slate-300, [data-theme=\"dark\"] .border-slate-300 {\n border-color: #4b5563 !important;\n }\n .dark .bg-gray-200, [data-theme=\"dark\"] .bg-gray-200,\n .dark .bg-slate-200, [data-theme=\"dark\"] .bg-slate-200 {\n background-color: #374151 !important;\n }\n\n /* Light mode overrides inside forced light subtree */\n [data-theme=\"light\"] {\n color: #334155;\n --color-text-default: #1e293b;\n --color-text-muted: #475569;\n --layout-bg: var(--color-secondary-50);\n --card-bg: #ffffff;\n --card-border: #f1f5f9;\n --card-header-bg: #f8fafc;\n --card-header-border: #e2e8f0;\n --input-bg: #ffffff;\n --input-border: #cbd5e1;\n --input-placeholder: #94a3b8;\n --input-text-color: #1e293b;\n --modal-bg: #ffffff;\n --modal-footer-bg: #f8fafc;\n --modal-header-border: #e2e8f0;\n --modal-footer-border: #e2e8f0;\n --calendar-bg: #ffffff;\n --calendar-border: #e2e8f0;\n --calendar-header-text: #1e293b;\n --calendar-header-hover: #f1f5f9;\n --calendar-days-text: #334155;\n --calendar-selected-bg: var(--color-primary);\n --calendar-selected-text: #ffffff;\n --calendar-range-bg: var(--color-primary-50);\n --calendar-today-bg: var(--color-primary-100);\n --calendar-today-text: var(--color-primary);\n\n --color-primary-50: color-mix(in srgb, var(--color-primary) 5%, #ffffff);\n --color-primary-100: color-mix(in srgb, var(--color-primary) 10%, #ffffff);\n --color-primary-200: color-mix(in srgb, var(--color-primary) 30%, #ffffff);\n --color-primary-300: color-mix(in srgb, var(--color-primary) 50%, #ffffff);\n --color-primary-400: color-mix(in srgb, var(--color-primary) 70%, #ffffff);\n\n --color-secondary-50: color-mix(in srgb, var(--color-secondary) 5%, #ffffff);\n --color-secondary-100: color-mix(in srgb, var(--color-secondary) 10%, #ffffff);\n --color-secondary-200: color-mix(in srgb, var(--color-secondary) 30%, #ffffff);\n --color-secondary-300: color-mix(in srgb, var(--color-secondary) 50%, #ffffff);\n --color-secondary-400: color-mix(in srgb, var(--color-secondary) 70%, #ffffff);\n\n --color-success-50: color-mix(in srgb, var(--color-success) 5%, #ffffff);\n --color-success-100: color-mix(in srgb, var(--color-success) 10%, #ffffff);\n --color-success-200: color-mix(in srgb, var(--color-success) 30%, #ffffff);\n\n --color-danger-50: color-mix(in srgb, var(--color-danger) 5%, #ffffff);\n --color-danger-100: color-mix(in srgb, var(--color-danger) 10%, #ffffff);\n --color-danger-200: color-mix(in srgb, var(--color-danger) 30%, #ffffff);\n\n --color-warning-50: color-mix(in srgb, var(--color-warning) 5%, #ffffff);\n --color-warning-100: color-mix(in srgb, var(--color-warning) 10%, #ffffff);\n --color-warning-200: color-mix(in srgb, var(--color-warning) 30%, #ffffff);\n\n --color-ternary-50: color-mix(in srgb, var(--color-ternary) 5%, #ffffff);\n --color-ternary-100: color-mix(in srgb, var(--color-ternary) 10%, #ffffff);\n --color-ternary-200: color-mix(in srgb, var(--color-ternary) 30%, #ffffff);\n\n --color-info-50: color-mix(in srgb, var(--color-info) 5%, #ffffff);\n --color-info-100: color-mix(in srgb, var(--color-info) 10%, #ffffff);\n --color-info-200: color-mix(in srgb, var(--color-info) 30%, #ffffff);\n }\n\n [data-theme=\"light\"] .text-slate-800,\n [data-theme=\"light\"] .text-gray-800 {\n color: #1e293b !important;\n }\n [data-theme=\"light\"] .text-slate-700,\n [data-theme=\"light\"] .text-gray-700 {\n color: #334155 !important;\n }\n [data-theme=\"light\"] .text-slate-600,\n [data-theme=\"light\"] .text-gray-600 {\n color: #475569 !important;\n }\n [data-theme=\"light\"] .text-slate-500,\n [data-theme=\"light\"] .text-gray-500 {\n color: #64748b !important;\n }\n [data-theme=\"light\"] .text-slate-400,\n [data-theme=\"light\"] .text-gray-400 {\n color: #94a3b8 !important;\n }\n\n [data-theme=\"light\"] .bg-white {\n background-color: #ffffff !important;\n }\n [data-theme=\"light\"] .bg-slate-50,\n [data-theme=\"light\"] .bg-gray-50 {\n background-color: #f8fafc !important;\n }\n [data-theme=\"light\"] .border-slate-100,\n [data-theme=\"light\"] .border-gray-100,\n [data-theme=\"light\"] .border-slate-200,\n [data-theme=\"light\"] .border-gray-200 {\n border-color: #e2e8f0 !important;\n }\n [data-theme=\"light\"] .bg-gray-100,\n [data-theme=\"light\"] .bg-slate-100 {\n background-color: #f1f5f9 !important;\n }\n [data-theme=\"light\"] .border-gray-300,\n [data-theme=\"light\"] .border-slate-300 {\n border-color: #cbd5e1 !important;\n }\n [data-theme=\"light\"] .bg-gray-200,\n [data-theme=\"light\"] .bg-slate-200 {\n background-color: #e2e8f0 !important;\n }\n\n\n /* Primary overrides (cyan mappings in UI library) */\n .bg-cyan-400 { background-color: var(--color-primary) !important; }\n .hover\\\\:bg-cyan-500:hover { background-color: var(--color-primary-hover) !important; }\n .focus\\\\:ring-cyan-300:focus { --tw-ring-color: var(--color-primary-ring) !important; }\n .text-cyan-600 { color: var(--color-primary) !important; }\n .text-cyan-500 { color: var(--color-primary) !important; }\n .border-cyan-400 { border-color: var(--color-primary) !important; }\n .focus\\\\:border-cyan-500:focus { border-color: var(--color-primary-hover) !important; }\n .focus\\\\:ring-cyan-500:focus { --tw-ring-color: var(--color-primary-hover) !important; }\n .text-cyan-100 { color: var(--color-primary-soft) !important; }\n .hover\\\\:bg-cyan-50:hover { background-color: var(--color-primary-soft) !important; }\n\n /* Success overrides (green mappings in UI library) */\n .bg-green-700 { background-color: var(--color-success) !important; }\n .hover\\\\:bg-green-800:hover { background-color: var(--color-success-hover) !important; }\n .focus\\\\:ring-green-300:focus { --tw-ring-color: var(--color-success-ring) !important; }\n .text-green-700 { color: var(--color-success) !important; }\n .border-green-700 { border-color: var(--color-success) !important; }\n .bg-green-500 { background-color: var(--color-success) !important; }\n .hover\\\\:bg-green-600:hover { background-color: var(--color-success-hover) !important; }\n\n /* Danger overrides (red mappings in UI library) */\n .bg-red-700 { background-color: var(--color-danger) !important; }\n .hover\\\\:bg-red-800:hover { background-color: var(--color-danger-hover) !important; }\n .focus\\\\:ring-red-300:focus { --tw-ring-color: var(--color-danger-ring) !important; }\n .text-red-700 { color: var(--color-danger) !important; }\n .border-red-700 { border-color: var(--color-danger) !important; }\n .bg-red-500 { background-color: var(--color-danger) !important; }\n .hover\\\\:bg-red-600:hover { background-color: var(--color-danger-hover) !important; }\n\n /* Warning overrides (yellow mappings in UI library) */\n .bg-yellow-400 { background-color: var(--color-warning) !important; }\n .hover\\\\:bg-yellow-500:hover { background-color: var(--color-warning-hover) !important; }\n .focus\\\\:ring-yellow-300:focus { --tw-ring-color: var(--color-warning-ring) !important; }\n .text-yellow-600 { color: var(--color-warning-hover) !important; }\n .border-yellow-400 { border-color: var(--color-warning) !important; }\n .bg-yellow-500 { background-color: var(--color-warning) !important; }\n .hover\\\\:bg-yellow-600:hover { background-color: var(--color-warning-hover) !important; }\n\n /* Ternary / Orange overrides */\n .bg-orange-500 { background-color: var(--color-ternary) !important; }\n .hover\\\\:bg-orange-500:hover { background-color: var(--color-ternary-hover) !important; }\n .hover\\\\:bg-orange-600:hover { background-color: var(--color-ternary-hover) !important; }\n .text-orange-500 { color: var(--color-ternary) !important; }\n .text-orange-800 { color: var(--color-ternary-hover) !important; }\n .bg-orange-200 { background-color: var(--color-ternary-soft) !important; }\n .border-orange-400 { border-color: var(--color-ternary) !important; }\n .border-orange-500 { border-color: var(--color-ternary) !important; }\n .hover\\\\:bg-orange-50\\\\/30:hover { background-color: var(--color-ternary-soft) !important; }\n\n /* Info / Blue overrides */\n .bg-blue-500 { background-color: var(--color-info) !important; }\n .hover\\\\:bg-blue-600:hover { background-color: var(--color-info-hover) !important; }\n .text-blue-500 { color: var(--color-info) !important; }\n .text-blue-600 { color: var(--color-info-hover) !important; }\n .border-blue-500 { border-color: var(--color-info) !important; }\n\n /* Secondary elements overrides */\n button[class*=\"bg-white\"][class*=\"hover:bg-gray-100\"] {\n background-color: var(--color-secondary) !important;\n border-color: var(--color-secondary-soft-border) !important;\n color: #111827 !important;\n }\n button[class*=\"bg-white\"][class*=\"hover:bg-gray-100\"]:hover {\n background-color: var(--color-secondary-hover) !important;\n }\n\n /* Custom Table styling overrides */\n thead tr, tr.bg-secondary-50, tr[class*=\"bg-secondary-50\"] {\n background-color: var(--color-table-headerBg) !important;\n border-bottom-color: color-mix(in srgb, var(--color-table-headerBg) 85%, #000000) !important;\n }\n th span, th div span {\n color: var(--color-table-headerText) !important;\n }\n tbody tr {\n background-color: var(--color-table-rowBg) !important;\n }\n tbody tr td, tbody tr td div {\n color: var(--color-table-rowText) !important;\n }\n tbody tr:hover {\n background-color: color-mix(in srgb, var(--color-primary) 8%, var(--color-table-rowBg)) !important;\n }\n\n /* Animation for Saved Indicator */\n @keyframes fadeInOut {\n 0%, 100% { opacity: 0; transform: translateY(-4px); }\n 15%, 85% { opacity: 1; transform: translateY(0); }\n }\n .animate-fade-in-out {\n animation: fadeInOut 1.5s ease-in-out forwards;\n }\n\n /* Fallback utility classes for blurs */\n .backdrop-blur-xs {\n backdrop-filter: blur(2px);\n -webkit-backdrop-filter: blur(2px);\n }\n .backdrop-blur-xl {\n backdrop-filter: blur(24px);\n -webkit-backdrop-filter: blur(24px);\n }\n\n /* =======================================================================\n AUTONOMOUS THEME DESIGNER STYLES (No Tailwind dependencies)\n ======================================================================= */\n\n @keyframes itBounce {\n 0%, 100% { transform: translateY(0); }\n 50% { transform: translateY(-8px); }\n }\n .it-theme-bounce {\n animation: itBounce 3s infinite ease-in-out !important;\n }\n\n /* FAB styles */\n .it-theme-fab {\n position: fixed !important;\n bottom: 24px !important;\n right: 24px !important;\n width: 56px !important;\n height: 56px !important;\n border-radius: 50% !important;\n border: none !important;\n color: #ffffff !important;\n box-shadow: 0 4px 14px 0 rgba(0, 0, 0, 0.15) !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n cursor: pointer !important;\n z-index: 99999 !important;\n transition: transform 0.2s cubic-bezier(0.4, 0, 0.2, 1), background-color 0.2s ease, box-shadow 0.2s ease !important;\n outline: none !important;\n }\n .it-theme-fab:hover {\n transform: scale(1.1) !important;\n box-shadow: 0 6px 20px 0 rgba(0, 0, 0, 0.2) !important;\n }\n .it-theme-fab:active {\n transform: scale(0.95) !important;\n }\n\n /* Backdrop styles */\n .it-theme-backdrop {\n position: fixed !important;\n top: 0 !important;\n left: 0 !important;\n right: 0 !important;\n bottom: 0 !important;\n background-color: rgba(15, 23, 42, 0.3) !important;\n backdrop-filter: blur(4px) !important;\n -webkit-backdrop-filter: blur(4px) !important;\n z-index: 99997 !important;\n transition: opacity 0.3s ease !important;\n }\n\n /* Drawer container */\n .it-theme-drawer {\n position: fixed !important;\n top: 0 !important;\n right: 0 !important;\n bottom: 0 !important;\n width: 100% !important;\n max-width: 420px !important;\n background-color: #ffffff !important;\n box-shadow: -10px 0 25px -5px rgba(0, 0, 0, 0.08), -8px 0 10px -6px rgba(0, 0, 0, 0.08) !important;\n z-index: 99998 !important;\n display: flex !important;\n flex-direction: column !important;\n justify-content: space-between !important;\n padding: 24px !important;\n box-sizing: border-box !important;\n border-left: 1px solid rgba(226, 232, 240, 0.8) !important;\n transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important;\n font-family: Inter, system-ui, -apple-system, sans-serif !important;\n color: #1e293b !important;\n }\n\n .dark .it-theme-drawer, [data-theme=\"dark\"] .it-theme-drawer {\n background-color: #0f172a !important;\n border-left-color: rgba(30, 41, 59, 0.8) !important;\n color: #f1f5f9 !important;\n }\n\n /* Drawer Header */\n .it-theme-drawer-header {\n display: flex !important;\n align-items: center !important;\n justify-content: space-between !important;\n padding-bottom: 16px !important;\n border-bottom: 1px solid #e2e8f0 !important;\n }\n .dark .it-theme-drawer-header, [data-theme=\"dark\"] .it-theme-drawer-header {\n border-bottom-color: #1e293b !important;\n }\n \n .it-theme-drawer-title-group {\n display: flex !important;\n align-items: center !important;\n gap: 12px !important;\n }\n\n .it-theme-icon-container {\n width: 36px !important;\n height: 36px !important;\n border-radius: 8px !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n color: #ffffff !important;\n }\n\n .it-theme-drawer-title {\n font-size: 16px !important;\n font-weight: 700 !important;\n margin: 0 !important;\n color: #1e293b !important;\n line-height: 1.2 !important;\n }\n .dark .it-theme-drawer-title, [data-theme=\"dark\"] .it-theme-drawer-title {\n color: #f8fafc !important;\n }\n\n .it-theme-drawer-subtitle {\n font-size: 11px !important;\n color: #64748b !important;\n margin: 2px 0 0 0 !important;\n font-weight: 400 !important;\n }\n .dark .it-theme-drawer-subtitle, [data-theme=\"dark\"] .it-theme-drawer-subtitle {\n color: #94a3b8 !important;\n }\n\n .it-theme-close-btn {\n background: none !important;\n border: none !important;\n color: #94a3b8 !important;\n cursor: pointer !important;\n padding: 6px !important;\n border-radius: 6px !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n transition: background-color 0.2s, color 0.2s !important;\n }\n .it-theme-close-btn:hover {\n background-color: #f1f5f9 !important;\n color: #334155 !important;\n }\n .dark .it-theme-close-btn:hover, [data-theme=\"dark\"] .it-theme-close-btn:hover {\n background-color: #1e293b !important;\n color: #f1f5f9 !important;\n }\n\n /* Sections inside Drawer */\n .it-theme-section {\n margin-top: 18px !important;\n }\n \n .it-theme-section-title {\n font-size: 10px !important;\n font-weight: 700 !important;\n text-transform: uppercase !important;\n letter-spacing: 0.05em !important;\n color: #94a3b8 !important;\n margin-bottom: 8px !important;\n margin-top: 0 !important;\n }\n\n /* Preset Grid */\n .it-theme-presets-grid {\n display: grid !important;\n grid-template-columns: repeat(2, 1fr) !important;\n gap: 8px !important;\n }\n\n .it-theme-preset-card {\n display: flex !important;\n flex-direction: column !important;\n align-items: flex-start !important;\n padding: 10px !important;\n border-radius: 10px !important;\n border: 1px solid #e2e8f0 !important;\n background-color: rgba(255, 255, 255, 0.6) !important;\n cursor: pointer !important;\n text-align: left !important;\n transition: all 0.2s ease !important;\n width: 100% !important;\n box-sizing: border-box !important;\n }\n .dark .it-theme-preset-card, [data-theme=\"dark\"] .it-theme-preset-card {\n border-color: #1e293b !important;\n background-color: rgba(15, 23, 42, 0.4) !important;\n }\n \n .it-theme-preset-card:hover {\n border-color: #cbd5e1 !important;\n transform: translateY(-1px) !important;\n }\n .dark .it-theme-preset-card:hover, [data-theme=\"dark\"] .it-theme-preset-card:hover {\n border-color: #334155 !important;\n }\n\n .it-theme-preset-name {\n font-size: 11px !important;\n font-weight: 600 !important;\n color: #334155 !important;\n margin-bottom: 6px !important;\n margin-top: 0 !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n text-overflow: ellipsis !important;\n width: 100% !important;\n }\n .dark .it-theme-preset-name, [data-theme=\"dark\"] .it-theme-preset-name {\n color: #cbd5e1 !important;\n }\n\n .it-theme-preset-colors {\n display: flex !important;\n gap: 4px !important;\n }\n\n .it-theme-preset-dot {\n width: 12px !important;\n height: 12px !important;\n border-radius: 50% !important;\n border: 1px solid rgba(0,0,0,0.08) !important;\n }\n\n /* Color controls list */\n .it-theme-color-list {\n display: flex !important;\n flex-direction: column !important;\n gap: 6px !important;\n max-height: 250px !important;\n overflow-y: auto !important;\n padding-right: 4px !important;\n }\n\n .it-theme-color-row {\n display: flex !important;\n align-items: center !important;\n justify-content: space-between !important;\n padding: 6px 10px !important;\n border-radius: 10px !important;\n border: 1px solid #f1f5f9 !important;\n background-color: rgba(248, 250, 252, 0.5) !important;\n }\n .dark .it-theme-color-row, [data-theme=\"dark\"] .it-theme-color-row {\n border-color: #1e293b !important;\n background-color: rgba(9, 15, 29, 0.5) !important;\n }\n\n .it-theme-color-left {\n display: flex !important;\n align-items: center !important;\n gap: 12px !important;\n }\n\n .it-theme-color-picker-btn {\n position: relative !important;\n width: 28px !important;\n height: 28px !important;\n border-radius: 50% !important;\n overflow: hidden !important;\n border: 1px solid #cbd5e1 !important;\n box-shadow: inset 0 2px 4px 0 rgba(0,0,0,0.06) !important;\n cursor: pointer !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n }\n .dark .it-theme-color-picker-btn, [data-theme=\"dark\"] .it-theme-color-picker-btn {\n border-color: #475569 !important;\n }\n\n .it-theme-color-picker-input {\n position: absolute !important;\n top: 0 !important;\n left: 0 !important;\n width: 100% !important;\n height: 100% !important;\n opacity: 0 !important;\n cursor: pointer !important;\n margin: 0 !important;\n padding: 0 !important;\n }\n\n .it-theme-color-picker-preview {\n width: 100% !important;\n height: 100% !important;\n border-radius: 50% !important;\n }\n\n .it-theme-color-meta {\n display: flex !important;\n flex-direction: column !important;\n }\n\n .it-theme-color-label {\n font-size: 10px !important;\n font-weight: 700 !important;\n text-transform: uppercase !important;\n color: #475569 !important;\n }\n .dark .it-theme-color-label, [data-theme=\"dark\"] .it-theme-color-label {\n color: #cbd5e1 !important;\n }\n\n .it-theme-color-hex-text {\n font-family: monospace !important;\n font-size: 9px !important;\n color: #94a3b8 !important;\n margin-top: 1px !important;\n }\n\n .it-theme-color-text-input {\n width: 80px !important;\n padding: 4px 6px !important;\n font-size: 11px !important;\n font-family: monospace !important;\n text-align: center !important;\n border-radius: 6px !important;\n border: 1px solid #cbd5e1 !important;\n background-color: #ffffff !important;\n color: #334155 !important;\n outline: none !important;\n transition: border-color 0.2s !important;\n box-sizing: border-box !important;\n }\n .dark .it-theme-color-text-input, [data-theme=\"dark\"] .it-theme-color-text-input {\n border-color: #475569 !important;\n background-color: #1e293b !important;\n color: #cbd5e1 !important;\n }\n\n /* Mode Selector Segmented Control */\n .it-theme-mode-selector {\n display: grid !important;\n grid-template-columns: repeat(3, 1fr) !important;\n gap: 2px !important;\n background-color: #f1f5f9 !important;\n padding: 2px !important;\n border-radius: 8px !important;\n width: 180px !important;\n }\n .dark .it-theme-mode-selector, [data-theme=\"dark\"] .it-theme-mode-selector {\n background-color: #1e293b !important;\n }\n\n .it-theme-mode-btn {\n background: none !important;\n border: none !important;\n padding: 6px 8px !important;\n font-size: 11px !important;\n font-weight: 600 !important;\n color: #475569 !important;\n border-radius: 6px !important;\n cursor: pointer !important;\n text-align: center !important;\n transition: all 0.2s ease !important;\n }\n .dark .it-theme-mode-btn, [data-theme=\"dark\"] .it-theme-mode-btn {\n color: #94a3b8 !important;\n }\n\n .it-theme-mode-btn-active {\n background-color: #ffffff !important;\n color: var(--color-primary) !important;\n box-shadow: 0 1px 3px rgba(0,0,0,0.06) !important;\n }\n .dark .it-theme-mode-btn-active, [data-theme=\"dark\"] .it-theme-mode-btn-active {\n background-color: #0f172a !important;\n color: var(--color-primary) !important;\n }\n\n /* Saved notification toast */\n .it-theme-toast-container {\n height: 20px !important;\n margin: 6px 0 !important;\n position: relative !important;\n }\n\n .it-theme-toast {\n position: absolute !important;\n top: 0 !important;\n left: 0 !important;\n right: 0 !important;\n display: flex !important;\n justify-content: center !important;\n }\n\n .it-theme-toast-badge {\n display: inline-flex !important;\n align-items: center !important;\n gap: 4px !important;\n font-size: 10px !important;\n font-weight: 600 !important;\n background-color: rgba(34, 197, 94, 0.1) !important;\n color: #16a34a !important;\n padding: 3px 10px !important;\n border-radius: 9999px !important;\n border: 1px solid rgba(34, 197, 94, 0.2) !important;\n }\n\n /* Drawer Footer */\n .it-theme-drawer-footer {\n padding-top: 12px !important;\n margin-top: 12px !important;\n border-top: 1px solid #e2e8f0 !important;\n display: flex !important;\n align-items: center !important;\n justify-content: space-between !important;\n }\n .dark .it-theme-drawer-footer, [data-theme=\"dark\"] .it-theme-drawer-footer {\n border-top-color: #1e293b !important;\n }\n\n .it-theme-reset-btn {\n display: flex !important;\n align-items: center !important;\n gap: 6px !important;\n padding: 6px 12px !important;\n font-size: 11px !important;\n font-weight: 600 !important;\n background: none !important;\n border: none !important;\n border-radius: 6px !important;\n color: #64748b !important;\n cursor: pointer !important;\n transition: background-color 0.2s, color 0.2s !important;\n }\n .it-theme-reset-btn:hover {\n background-color: #f1f5f9 !important;\n color: #1e293b !important;\n }\n .dark .it-theme-reset-btn:hover, [data-theme=\"dark\"] .it-theme-reset-btn:hover {\n background-color: #1e293b !important;\n color: #f8fafc !important;\n }\n\n .it-theme-done-btn {\n padding: 6px 16px !important;\n font-size: 11px !important;\n font-weight: 700 !important;\n border: none !important;\n border-radius: 6px !important;\n color: #ffffff !important;\n cursor: pointer !important;\n box-shadow: 0 2px 4px rgba(0,0,0,0.05) !important;\n transition: transform 0.2s, background-color 0.2s !important;\n }\n .it-theme-done-btn:hover {\n transform: translateY(-1px) !important;\n }\n\n h1, h2, h3 {\n color: var(--color-heading-default);\n }\n `;\n\n }, [palette, resolvedTheme]);\n\n const updateColor = (key: string, value: string) => {\n setPaletteState((prev) => {\n if (key.includes(\".\")) {\n const [section, subKey] = key.split(\".\");\n return {\n ...prev,\n [section]: {\n ...(prev[section as keyof ITThemePalette] as Record<\n string,\n string\n >),\n [subKey]: value,\n },\n };\n }\n return {\n ...prev,\n [key]: value,\n };\n });\n };\n\n const applyPreset = (colors: ITThemePalette) => {\n setPaletteState(colors);\n };\n\n const resetTheme = () => {\n const basePalette = {\n ...DEFAULT_PALETTE,\n ...theme,\n layout: { ...DEFAULT_PALETTE.layout, ...theme?.layout },\n table: { ...DEFAULT_PALETTE.table, ...theme?.table },\n };\n setPaletteState(basePalette as ITThemePalette);\n };\n\n const ColorRow = ({ colorKey }: { colorKey: string }) => {\n const isNested = colorKey.includes(\".\");\n const label = isNested ? colorKey.split(\".\")[1] : colorKey;\n const value = getNestedValue(palette, colorKey);\n\n return (\n <div\n key={colorKey}\n className=\"flex items-center justify-between p-3 rounded-xl border border-slate-100 dark:border-slate-800 bg-white dark:bg-slate-900/50 gap-3 hover:border-slate-200 dark:hover:border-slate-700 transition-colors\"\n >\n <div className=\"flex items-center gap-3 flex-1 min-w-0\">\n <div className=\"relative w-10 h-10 rounded-xl border-2 border-slate-200 dark:border-slate-700 overflow-hidden cursor-pointer flex-shrink-0 shadow-sm hover:scale-105 transition-transform\">\n <input\n type=\"color\"\n value={value}\n onChange={(e) => updateColor(colorKey, e.target.value)}\n className=\"absolute inset-0 opacity-0 cursor-pointer w-full h-full\"\n />\n <div className=\"w-full h-full\" style={{ backgroundColor: value }} />\n </div>\n <div className=\"flex flex-col min-w-0\">\n <ITText as=\"span\" className=\"text-xs font-bold text-slate-700 dark:text-slate-300 truncate capitalize\">\n {label.replace(/([A-Z])/g, \" $1\").trim()}\n </ITText>\n <div className=\"flex items-center gap-2 mt-0.5\">\n <span\n className=\"w-3 h-3 rounded-full border border-slate-200 dark:border-slate-600\"\n style={{ backgroundColor: value }}\n />\n <ITText as=\"span\" className=\"font-mono text-[11px] text-slate-400\">{value}</ITText>\n </div>\n </div>\n </div>\n <input\n type=\"text\"\n value={value}\n onChange={(e) => updateColor(colorKey, e.target.value)}\n className=\"w-24 px-2.5 py-1.5 text-xs font-mono text-center rounded-lg border border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-800 text-slate-700 dark:text-slate-300 outline-none focus:ring-2 focus:ring-primary-500/40 focus:border-primary-500 transition-all\"\n />\n </div>\n );\n };\n\n const PresetCard = ({\n preset,\n isCustom,\n }: {\n preset: { name: string; colors: ITThemePalette };\n isCustom?: boolean;\n }) => {\n const isSelected =\n JSON.stringify(preset.colors) === JSON.stringify(palette);\n return (\n <button\n type=\"button\"\n onClick={() => applyPreset(preset.colors)}\n className={`relative flex flex-col items-start p-2.5 rounded-xl border text-left transition-all group ${\n isSelected\n ? \"border-primary-500 bg-primary-500/5 shadow-sm ring-1 ring-primary-500/20\"\n : \"border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-900/50 hover:border-slate-300 dark:hover:border-slate-600\"\n }`}\n >\n {isCustom && (\n <span\n onClick={(e) => {\n e.stopPropagation();\n handleDeletePreset(preset.name, e);\n }}\n className=\"absolute top-1.5 right-1.5 opacity-0 group-hover:opacity-100 p-0.5 rounded-md hover:bg-red-500/10 hover:text-red-500 text-slate-400 dark:text-slate-500 cursor-pointer transition-all z-10\"\n title=\"Eliminar\"\n >\n <MdClose size={12} />\n </span>\n )}\n <ITText as=\"span\" className=\"text-xs font-semibold truncate w-full mb-1.5 pr-4 text-slate-700 dark:text-slate-300\">\n {preset.name}\n </ITText>\n <div className=\"flex gap-1\">\n {([\"primary\", \"secondary\", \"ternary\", \"success\"] as const).map((c) => (\n <span\n key={c}\n className=\"w-3 h-3 rounded-full border border-black/10\"\n style={{ backgroundColor: preset.colors[c] }}\n />\n ))}\n </div>\n </button>\n );\n };\n\n return (\n <ITThemeContext.Provider\n value={{\n palette,\n colors: palette,\n setPalette: setPaletteState,\n updateColor,\n resetTheme,\n applyPreset,\n resolvedTheme,\n darkModeMode,\n setDarkModeMode,\n }}\n >\n {children}\n\n {showFab && (\n <button\n onClick={() => setIsOpen((prev) => !prev)}\n className=\"it-theme-fab it-theme-bounce\"\n style={{ backgroundColor: \"var(--color-primary)\" }}\n aria-label=\"Configurar Paleta de Colores\"\n >\n <MdPalette size={28} />\n </button>\n )}\n\n {showFab && (\n <ITDialog\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n title=\"Diseñador de Temas\"\n useFormHeader\n >\n <div className=\"flex gap-6 h-[580px]\">\n {/* LEFT: Mode + Presets */}\n <div className=\"w-64 flex-shrink-0 flex flex-col gap-5 overflow-y-auto pr-1\">\n <div>\n <ITText as=\"span\" className=\"text-[11px] font-bold uppercase tracking-wider text-slate-400 dark:text-slate-500 mb-2.5 block\">\n Apariencia\n </ITText>\n <ITSegmentedControl\n options={[\n { value: \"light\", label: \"☀️\" },\n { value: \"dark\", label: \"🌙\" },\n { value: \"system\", label: \"💻\" },\n ]}\n value={darkModeMode}\n onChange={(val) => setDarkModeMode(val as \"dark\" | \"light\" | \"system\")}\n size=\"sm\"\n />\n </div>\n\n <div>\n <div className=\"flex items-center justify-between mb-2.5\">\n <ITText as=\"span\" className=\"text-[11px] font-bold uppercase tracking-wider text-slate-400 dark:text-slate-500\">\n Presets\n </ITText>\n </div>\n <div className=\"grid grid-cols-2 gap-2\">\n {PRESETS.map((preset) => (\n <PresetCard key={preset.name} preset={preset} />\n ))}\n </div>\n </div>\n\n {customPresets.length > 0 && (\n <div>\n <ITText as=\"span\" className=\"text-[11px] font-bold uppercase tracking-wider text-slate-400 dark:text-slate-500 mb-2.5 block\">\n Mis Temas\n </ITText>\n <div className=\"flex flex-col gap-1.5\">\n {customPresets.map((preset) => (\n <PresetCard key={preset.name} preset={preset} isCustom />\n ))}\n </div>\n </div>\n )}\n\n {/* Save preset inline */}\n {isSavingPreset && (\n <div className=\"flex flex-col gap-2 p-3 rounded-xl border border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-900/50\">\n <ITInput\n name=\"presetName\"\n placeholder=\"Nombre del tema...\"\n value={newPresetName}\n onChange={(e: any) => setNewPresetName(e.target.value)}\n containerClassName=\"mb-0\"\n className=\"text-xs\"\n onKeyDown={(e: React.KeyboardEvent) => {\n if (e.key === \"Enter\") handleSavePreset();\n if (e.key === \"Escape\") {\n setIsSavingPreset(false);\n setNewPresetName(\"\");\n }\n }}\n />\n <div className=\"flex gap-2\">\n <ITButton\n label=\"Guardar\"\n color=\"primary\"\n onClick={handleSavePreset}\n disabled={!newPresetName.trim()}\n size=\"small\"\n className=\"flex-1\"\n />\n <ITButton\n label=\"X\"\n variant=\"ghost\"\n onClick={() => {\n setIsSavingPreset(false);\n setNewPresetName(\"\");\n }}\n size=\"small\"\n />\n </div>\n </div>\n )}\n\n {!isSavingPreset && (\n <ITButton\n variant=\"outlined\"\n icon={<MdPalette size={14} />}\n label=\"Guardar actual\"\n onClick={() => setIsSavingPreset(true)}\n size=\"small\"\n />\n )}\n\n <ITButton\n variant=\"outlined\"\n color=\"danger\"\n icon={<MdRefresh size={14} />}\n label=\"Restaurar default\"\n onClick={resetTheme}\n size=\"small\"\n />\n </div>\n\n <ITDivider orientation=\"vertical\" />\n\n {/* RIGHT: Color editor */}\n <div className=\"flex-1 flex flex-col min-w-0\">\n <ITTabs\n variant=\"pill\"\n items={[\n {\n id: \"brand\",\n label: \"Marca\",\n content: (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-3 max-h-[480px] overflow-y-auto pr-2 mt-3\">\n {[\n \"primary\",\n \"secondary\",\n \"ternary\",\n \"danger\",\n \"success\",\n \"info\",\n \"alert\",\n \"warning\",\n ].map((key) => (\n <ColorRow key={key} colorKey={key} />\n ))}\n </div>\n ),\n },\n {\n id: \"layout\",\n label: \"Nav & Sidebar\",\n content: (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-3 max-h-[480px] overflow-y-auto pr-2 mt-3\">\n {[\n \"layout.sidebarBg\",\n \"layout.sidebarText\",\n \"layout.navbarBg\",\n \"layout.navbarText\",\n ].map((key) => (\n <ColorRow key={key} colorKey={key} />\n ))}\n </div>\n ),\n },\n {\n id: \"tables\",\n label: \"Tablas\",\n content: (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-3 max-h-[480px] overflow-y-auto pr-2 mt-3\">\n {[\n \"table.headerBg\",\n \"table.headerText\",\n \"table.rowBg\",\n \"table.rowText\",\n ].map((key) => (\n <ColorRow key={key} colorKey={key} />\n ))}\n </div>\n ),\n },\n ]}\n />\n\n <div className=\"flex items-center justify-end gap-3 mt-auto pt-4 border-t border-slate-100 dark:border-slate-800\">\n <ITText as=\"p\" className=\"text-[11px] text-slate-400 mr-auto\">\n Los cambios se guardan automáticamente\n </ITText>\n <ITButton\n label=\"Cerrar\"\n color=\"primary\"\n onClick={() => setIsOpen(false)}\n size=\"small\"\n />\n </div>\n </div>\n </div>\n </ITDialog>\n )}\n </ITThemeContext.Provider>\n );\n}\n","import React, { useState } from 'react';\nimport { ITTabsProps } from './tabs.props';\nimport { clsx } from 'clsx';\nimport ITText from \"@/components/text/text\";\n\nconst ITTabs: React.FC<ITTabsProps> = ({\n items,\n defaultActiveId,\n onChange,\n variant = 'line',\n className = '',\n containerClassName = ''\n}) => {\n const [activeId, setActiveId] = useState(defaultActiveId || items[0]?.id);\n\n const handleTabClick = (id: string, disabled?: boolean) => {\n if (disabled) return;\n setActiveId(id);\n if (onChange) onChange(id);\n };\n\n const activeContent = items.find(item => item.id === activeId)?.content;\n\n return (\n <div className={clsx(\"w-full\", containerClassName)}>\n {/* HEADER */}\n <div className={clsx(\n \"flex border-gray-200 mb-4\",\n variant === 'line' ? \"border-b\" : \"gap-2 p-1 bg-gray-100 rounded-lg w-fit\",\n className\n )}>\n {items.map((item) => {\n const isActive = item.id === activeId;\n \n return (\n <button\n key={item.id}\n onClick={() => handleTabClick(item.id, item.disabled)}\n disabled={item.disabled}\n className={clsx(\n \"flex items-center gap-2 px-4 py-2 text-sm font-medium transition-all duration-200 outline-none\",\n // LINE VARIANT\n variant === 'line' && [\n \"border-b-2 -mb-[2px]\",\n isActive \n ? \"border-primary-500 text-primary-600\" \n : \"border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300\",\n ],\n // PILL VARIANT\n variant === 'pill' && [\n \"rounded-md\",\n isActive \n ? \"bg-white text-primary-600 shadow-sm\" \n : \"text-gray-500 hover:text-gray-700\",\n ],\n item.disabled && \"opacity-50 cursor-not-allowed\"\n )}\n >\n {item.icon && <span className=\"w-4 h-4\">{item.icon}</span>}\n <ITText as=\"span\">{item.label}</ITText>\n </button>\n );\n })}\n </div>\n\n {/* CONTENT */}\n <div className=\"tab-content animate-fadeIn\">\n {activeContent}\n </div>\n </div>\n );\n};\n\nexport default ITTabs;\n","import clsx from \"clsx\";\nimport { ITSegmentedControlProps } from \"./segmented-control.props\";\nimport ITText from \"@/components/text/text\";\n\nconst sizeMap = {\n sm: { button: \"px-2.5 py-1.5 text-[11px]\", container: \"p-0.5\" },\n md: { button: \"px-3 py-2 text-xs\", container: \"p-1\" },\n};\n\nexport default function ITSegmentedControl({\n options,\n value,\n onChange,\n size = \"md\",\n className,\n disabled = false,\n}: ITSegmentedControlProps) {\n const { button, container } = sizeMap[size];\n\n return (\n <div\n className={clsx(\n \"inline-flex rounded-xl bg-slate-100 dark:bg-slate-800 border border-slate-200 dark:border-slate-700\",\n container,\n disabled && \"opacity-50 cursor-not-allowed\",\n className\n )}\n >\n {options.map((opt) => {\n const isActive = opt.value === value;\n return (\n <button\n key={opt.value}\n onClick={() => !disabled && onChange(opt.value)}\n disabled={disabled}\n className={clsx(\n button,\n \"rounded-lg font-semibold transition-all flex items-center gap-1.5\",\n isActive\n ? \"bg-white dark:bg-slate-700 text-slate-800 dark:text-white shadow-sm border border-slate-200 dark:border-slate-600\"\n : \"text-slate-500 dark:text-slate-400 hover:text-slate-700 dark:hover:text-slate-300 border border-transparent\",\n disabled && \"pointer-events-none\"\n )}\n >\n {opt.icon && <span>{opt.icon}</span>}\n <ITText as=\"span\">{opt.label}</ITText>\n </button>\n );\n })}\n </div>\n );\n}\n","import clsx from \"clsx\";\nimport { ITDividerProps } from \"./divider.props\";\n\nexport default function ITDivider({\n orientation = \"horizontal\",\n className,\n color = \"bg-slate-200 dark:bg-slate-700\",\n thickness = orientation === \"horizontal\" ? \"h-px\" : \"w-px\",\n}: ITDividerProps) {\n return (\n <div\n className={clsx(\n \"flex-shrink-0\",\n orientation === \"horizontal\" ? \"w-full\" : \"self-stretch\",\n thickness,\n color,\n className\n )}\n />\n );\n}\n","import { ITThemePalette } from \"@/components/theme-provider/themeProvider.props\";\n\n/**\n * Determina si un color hexadecimal es claro.\n */\nexport const isLightColor = (hex: string): boolean => {\n if (!hex || typeof hex !== \"string\") return false;\n const color = hex.replace(\"#\", \"\");\n let r = 0, g = 0, b = 0;\n if (color.length === 3) {\n r = parseInt(color[0] + color[0], 16);\n g = parseInt(color[1] + color[1], 16);\n b = parseInt(color[2] + color[2], 16);\n } else if (color.length === 6) {\n r = parseInt(color.substring(0, 2), 16);\n g = parseInt(color.substring(2, 4), 16);\n b = parseInt(color.substring(4, 6), 16);\n } else {\n return false;\n }\n const brightness = (r * 299 + g * 587 + b * 114) / 1000;\n return brightness > 140;\n};\n\n/**\n * Traduce un valor de color de CSS (hexadecimal o variable var(--...)) a hexadecimal absoluto.\n */\nexport const resolveCssColor = (\n colorStr: string,\n palette?: ITThemePalette,\n isDarkMode?: boolean\n): string => {\n if (!colorStr) return \"#ffffff\";\n const cleanColor = colorStr.trim();\n if (cleanColor.startsWith(\"#\")) return cleanColor;\n\n if (cleanColor.includes(\"var(\")) {\n const match = cleanColor.match(/var\\(([^,)]+)(?:,\\s*([^)]+))?\\)/);\n if (match) {\n const varName = match[1].trim();\n const fallback = match[2]?.trim();\n\n if (varName === \"--color-primary\" || varName.includes(\"primary-500\")) {\n return palette?.primary || \"#06b6d4\";\n }\n if (varName.includes(\"primary\")) {\n return palette?.primary || \"#06b6d4\";\n }\n if (varName === \"--color-secondary\" || varName.includes(\"secondary-500\")) {\n return palette?.secondary || \"#6b7280\";\n }\n if (varName.includes(\"secondary\")) {\n return palette?.secondary || \"#6b7280\";\n }\n if (varName.includes(\"ternary\")) {\n return palette?.ternary || \"#8b5cf6\";\n }\n if (varName.includes(\"danger\")) {\n return palette?.danger || \"#ef4444\";\n }\n if (varName.includes(\"success\")) {\n return palette?.success || \"#22c55e\";\n }\n if (varName.includes(\"info\")) {\n return palette?.info || \"#3b82f6\";\n }\n if (varName.includes(\"warning\")) {\n return palette?.warning || \"#eab308\";\n }\n if (varName.includes(\"alert\")) {\n return palette?.alert || \"#f97316\";\n }\n if (varName.includes(\"card-bg\")) {\n return isDarkMode ? \"#111827\" : \"#ffffff\";\n }\n if (varName.includes(\"modal-bg\")) {\n return isDarkMode ? \"#111827\" : \"#ffffff\";\n }\n\n if (fallback) {\n return resolveCssColor(fallback, palette, isDarkMode);\n }\n }\n }\n\n return \"#ffffff\";\n};\n\n/**\n * Obtiene la clase de color de texto óptima (blanca o gris oscuro) basado en el fondo.\n */\nexport const getContrastTextColor = (\n bgColor: string,\n palette?: ITThemePalette,\n isDarkMode?: boolean\n): \"text-white\" | \"text-slate-800\" => {\n const resolvedColor = resolveCssColor(bgColor, palette, isDarkMode);\n return isLightColor(resolvedColor) ? \"text-slate-800\" : \"text-white\";\n};\n","import clsx from \"clsx\";\nimport { ITDrawerProps } from \"./drawer.props\";\nimport { FaTimes } from \"react-icons/fa\";\nimport useClickOutside from \"@/hooks/useClickOutside\";\nimport { useRef } from \"react\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITDrawer({\n isOpen,\n onClose,\n position = \"right\",\n size = \"w-80\",\n title,\n children,\n className,\n style,\n}: ITDrawerProps) {\n const panelRef = useRef<HTMLDivElement>(null);\n useClickOutside(panelRef, onClose);\n\n return (\n <>\n {isOpen && (\n <div className=\"fixed inset-0 z-[100] flex\">\n <div className=\"absolute inset-0 bg-black/40 backdrop-blur-sm transition-opacity\" />\n <div\n ref={panelRef}\n className={clsx(\n \"relative z-10 h-full bg-white dark:bg-slate-900 shadow-2xl flex flex-col transition-transform duration-300\",\n position === \"right\" ? \"ml-auto\" : \"mr-auto\",\n size,\n className\n )}\n style={style}\n >\n {title && (\n <div className=\"flex items-center justify-between px-5 py-4 border-b border-slate-200 dark:border-slate-700\">\n <ITText as=\"h2\" className=\"text-lg font-bold text-slate-800 dark:text-white\">{title}</ITText>\n <button\n onClick={onClose}\n className=\"w-8 h-8 flex items-center justify-center rounded-lg hover:bg-slate-100 dark:hover:bg-slate-800 text-slate-400 hover:text-slate-600 transition-colors\"\n >\n <FaTimes size={14} />\n </button>\n </div>\n )}\n <div className=\"flex-1 overflow-y-auto p-5\">{children}</div>\n </div>\n </div>\n )}\n </>\n );\n}\n","import clsx from \"clsx\";\nimport { ITEmptyStateProps } from \"./empty-state.props\";\nimport { FaInbox } from \"react-icons/fa\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITEmptyState({\n icon = <FaInbox size={40} />,\n title,\n description,\n action,\n className,\n}: ITEmptyStateProps) {\n return (\n <div className={clsx(\"flex flex-col items-center justify-center py-16 px-6 text-center\", className)}>\n <div className=\"text-slate-300 dark:text-slate-600 mb-4\">{icon}</div>\n <ITText as=\"h3\" className=\"text-lg font-bold text-slate-700 dark:text-slate-200 mb-1\">{title}</ITText>\n {description && <ITText as=\"p\" className=\"text-sm text-slate-400 dark:text-slate-500 max-w-sm mb-4\">{description}</ITText>}\n {action && <div>{action}</div>}\n </div>\n );\n}\n","import clsx from \"clsx\";\nimport {\n ITFlexProps,\n FlexDirection,\n FlexAlign,\n FlexJustify,\n FlexWrap,\n} from \"./flex.props\";\n\nconst directionMap: Record<FlexDirection, string> = {\n row: \"flex-row\",\n column: \"flex-col\",\n \"row-reverse\": \"flex-row-reverse\",\n \"column-reverse\": \"flex-col-reverse\",\n};\n\nconst alignMap: Record<FlexAlign, string> = {\n start: \"items-start\",\n end: \"items-end\",\n center: \"items-center\",\n stretch: \"items-stretch\",\n baseline: \"items-baseline\",\n};\n\nconst justifyMap: Record<FlexJustify, string> = {\n start: \"justify-start\",\n end: \"justify-end\",\n center: \"justify-center\",\n between: \"justify-between\",\n around: \"justify-around\",\n evenly: \"justify-evenly\",\n};\n\nconst wrapMap: Record<FlexWrap, string> = {\n nowrap: \"flex-nowrap\",\n wrap: \"flex-wrap\",\n \"wrap-reverse\": \"flex-wrap-reverse\",\n};\n\nexport default function ITFlex({\n children,\n direction = \"row\",\n align,\n justify,\n wrap,\n gap = 0,\n grow,\n shrink,\n basis,\n className,\n style,\n as: Component = \"div\",\n onClick,\n}: ITFlexProps) {\n const resolvedStyle: React.CSSProperties = {\n gap: gap > 0 ? `${gap * 0.25}rem` : undefined,\n flexGrow: typeof grow === \"boolean\" ? (grow ? 1 : 0) : grow,\n flexShrink: typeof shrink === \"boolean\" ? (shrink ? 1 : 0) : shrink,\n flexBasis: typeof basis === \"number\" ? `${basis * 0.25}rem` : basis,\n ...style,\n };\n\n return (\n <Component\n className={clsx(\n \"flex\",\n directionMap[direction],\n align && alignMap[align],\n justify && justifyMap[justify],\n wrap && wrapMap[wrap],\n className\n )}\n style={resolvedStyle}\n onClick={onClick}\n >\n {children}\n </Component>\n );\n}\n","import clsx from \"clsx\";\nimport ITInput from \"../input/input\";\nimport ITSelect from \"../select/select\";\nimport { ITFormBuilderProps } from \"./formBuilder.props\";\nimport ITDatePicker from \"../date-picker/datePicker\";\nimport { useEffect, useState, useMemo } from \"react\";\nimport { ITFormBuilderProvider } from \"./formBuilder.context\";\nimport ITFieldRenderer from \"./fieldRenderer\";\nimport { formGrid, getColSpanClass } from \"@/utils/styles\";\n\nfunction buildDependentValues(\n dependsOn: string[] | undefined,\n values: Record<string, any>,\n) {\n if (!dependsOn || dependsOn.length === 0) return {};\n const deps: Record<string, any> = {};\n for (const key of dependsOn) {\n if (key in values) deps[key] = values[key];\n }\n return deps;\n}\n\nexport default function ITFormBuilder({\n fields,\n config,\n columns = 12,\n values,\n handleChange,\n handleBlur,\n touched,\n errors,\n setFieldValue = () => Promise.resolve(),\n setFieldTouched = () => Promise.resolve(),\n setFieldError = () => {},\n isSubmitting = false,\n}: ITFormBuilderProps) {\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n const providerValue = useMemo(() => ({\n config: config || [],\n values: values || {},\n errors: errors || {},\n touched: touched || {},\n handleChange,\n handleBlur,\n setFieldValue,\n setFieldTouched,\n setFieldError,\n initialValues: {},\n isSubmitting,\n isValidating: false,\n submitCount: 0,\n }), [config, values, errors, touched, handleChange, handleBlur, setFieldValue, setFieldTouched, setFieldError, isSubmitting]);\n\n if (config) {\n return (\n <ITFormBuilderProvider value={providerValue}>\n <div className={formGrid(columns)}>\n {config.map((fieldConfig) => (\n <ITFieldRenderer\n key={fieldConfig.name}\n config={fieldConfig}\n columns={columns}\n value={values[fieldConfig.name]}\n error={errors[fieldConfig.name]}\n touched={touched[fieldConfig.name]}\n dependentValues={buildDependentValues(fieldConfig.dependsOn, values)}\n />\n ))}\n </div>\n </ITFormBuilderProvider>\n );\n }\n\n return (\n <div className={formGrid(columns)}>\n {fields?.map(({\n name,\n label,\n type = \"text\",\n placeholder,\n required,\n column = 12,\n options,\n valueField,\n disabled = false,\n labelField,\n showHintLength,\n formatNumber = true,\n onChangeAction,\n ...props\n }) => (\n <div key={name} className={getColSpanClass(column, columns)}>\n {(() => {\n switch (type) {\n case \"text\":\n case \"number\":\n case \"password\":\n return (\n <ITInput\n type={type}\n name={name}\n label={label}\n placeholder={placeholder}\n disabled={disabled}\n value={values[name]}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n handleChange(e);\n if (onChangeAction && setFieldValue) {\n onChangeAction(e.target.value, setFieldValue);\n }\n }}\n onBlur={handleBlur}\n currencyFormat={props.currencyFormat}\n touched={touched[name]}\n error={errors[name]}\n required={required}\n iconRight={props.rightIcon}\n iconLeft={props.leftIcon}\n showHintLength={showHintLength}\n maxLength={props.maxLength}\n minLength={props.minLength}\n rows={props.rows}\n formatNumber={formatNumber}\n />\n );\n case \"select\":\n return (\n <ITSelect\n options={options || []}\n name={name}\n disabled={disabled}\n label={label}\n placeholder={placeholder}\n value={values[name]}\n valueField={valueField}\n labelField={labelField}\n onChange={(e: React.ChangeEvent<HTMLSelectElement>) => {\n handleChange(e);\n if (onChangeAction && setFieldValue) {\n onChangeAction(e.target.value, setFieldValue);\n }\n }}\n onBlur={handleBlur}\n touched={touched[name]}\n error={errors[name]}\n required={required}\n />\n );\n case \"date\":\n return (\n <ITDatePicker\n name={name}\n disabled={disabled}\n label={label}\n value={values[name]}\n onChange={(\n e:\n | React.ChangeEvent<HTMLInputElement>\n | { target: { name: string; value: Date } }\n ) => {\n handleChange(e);\n if (onChangeAction && setFieldValue) {\n onChangeAction(e.target.value, setFieldValue);\n }\n }}\n placeholder={placeholder}\n onBlur={handleBlur}\n touched={touched[name]}\n error={errors[name]}\n required={required}\n />\n );\n default:\n return null;\n }\n })()}\n </div>\n ))}\n </div>\n );\n}\n","import React, { createContext, useContext, useEffect, useState } from 'react';\nimport { FieldConfigV2, FieldContextV2 } from '@/types/field.types';\nimport * as Yup from 'yup';\n\ninterface ITFormBuilderContextType extends FieldContextV2 {\n config: FieldConfigV2[];\n isSubmitting: boolean;\n isValidating: boolean;\n submitCount: number;\n initialValues: Record<string, any>;\n errors: Record<string, string>;\n touched: Record<string, boolean>;\n handleBlur: (e: any) => void;\n handleChange: (e: any) => void;\n registerField: (name: string, config: FieldConfigV2) => void;\n unregisterField: (name: string) => void;\n getFieldConfig: (name: string) => FieldConfigV2 | undefined;\n}\n\nconst ITFormBuilderContext = createContext<ITFormBuilderContextType | undefined>(undefined);\n\nexport const ITFormBuilderProvider = ({\n children,\n value,\n}: {\n children: React.ReactNode;\n value: Omit<ITFormBuilderContextType, 'registerField' | 'unregisterField' | 'getFieldConfig'>;\n}) => {\n const [fieldRegistry, setFieldRegistry] = useState<Record<string, FieldConfigV2>>({});\n\n const registerField = React.useCallback((name: string, config: FieldConfigV2) => {\n setFieldRegistry((prev) => ({ ...prev, [name]: config }));\n }, []);\n\n const unregisterField = React.useCallback((name: string) => {\n setFieldRegistry((prev) => {\n const newRegistry = { ...prev };\n delete newRegistry[name];\n return newRegistry;\n });\n }, []);\n\n const getFieldConfig = React.useCallback((name: string) => {\n return fieldRegistry[name];\n }, [fieldRegistry]);\n\n const contextValue = React.useMemo(\n () => ({\n ...value,\n registerField,\n unregisterField,\n getFieldConfig,\n }),\n [value, registerField, unregisterField, getFieldConfig]\n );\n\n return (\n <ITFormBuilderContext.Provider value={contextValue}>\n {children}\n </ITFormBuilderContext.Provider>\n );\n};\n\nexport const useITFormBuilderContext = () => {\n const context = useContext(ITFormBuilderContext);\n if (!context) {\n throw new Error('useITFormBuilderContext must be used within an ITFormBuilderProvider');\n }\n return context;\n};\n","import React, { memo, useCallback, useEffect } from \"react\";\nimport clsx from \"clsx\";\nimport { FieldConfigV2 } from \"@/types/field.types\";\nimport { useITFormBuilderContext } from \"./formBuilder.context\";\nimport ITInput from \"../input/input\";\nimport ITSelect from \"../select/select\";\nimport ITDatePicker from \"../date-picker/datePicker\";\nimport ITTimePicker from \"../time-picker/timePicker\";\nimport { useFieldRules } from \"./useFormBuilder\";\nimport { getColSpanClass, getGridColsClass } from \"@/utils/styles\";\nimport ITText from \"@/components/text/text\";\n\n\n\ninterface ITFieldRendererProps {\n config: FieldConfigV2;\n columns?: number;\n value?: any;\n error?: string;\n touched?: boolean;\n dependentValues?: Record<string, any>;\n}\n\nconst ITFieldRenderer = ({\n config,\n columns = 12,\n value,\n error,\n touched,\n dependentValues = {},\n}: ITFieldRendererProps) => {\n const context = useITFormBuilderContext();\n const { isVisible, isRequired, isDisabled, dynamicProps } = useFieldRules(\n config,\n dependentValues,\n );\n\n useEffect(() => {\n context.registerField(config.name, config);\n return () => {\n context.unregisterField(config.name);\n };\n }, [config.name]);\n\n if (!isVisible) return null;\n\n const activeConfig = {\n ...config,\n ...dynamicProps,\n required: isRequired,\n disabled: isDisabled,\n };\n\n const {\n name,\n label,\n type,\n placeholder,\n options,\n valueField,\n labelField,\n formatNumber,\n showHintLength,\n leftIcon,\n rightIcon,\n } = activeConfig;\n\n const handleChangeWrapper = useCallback(\n async (val: any) => {\n const finalValue = val?.target ? val.target.value : val;\n await context.setFieldValue(name, finalValue);\n if (activeConfig.onChangeAction) {\n await activeConfig.onChangeAction(finalValue, context);\n }\n },\n [name, context]\n );\n\n const renderField = () => {\n switch (type) {\n case \"text\":\n case \"password\":\n case \"number\":\n case \"email\":\n return (\n <ITInput\n type={type === \"email\" ? \"text\" : type}\n name={name}\n label={label || \"\"}\n placeholder={placeholder}\n disabled={isDisabled as boolean}\n value={value !== undefined ? value : activeConfig.defaultValue || \"\"}\n onChange={handleChangeWrapper}\n onBlur={context.handleBlur}\n currencyFormat={activeConfig.currencyFormat}\n touched={touched}\n error={error}\n required={isRequired as boolean}\n iconRight={rightIcon}\n iconLeft={leftIcon}\n showHintLength={showHintLength}\n maxLength={activeConfig.maxLength}\n minLength={activeConfig.minLength}\n rows={activeConfig.rows}\n formatNumber={formatNumber}\n />\n );\n\n case \"select\":\n return (\n <ITSelect\n options={(Array.isArray(options) ? options : []) as any}\n name={name}\n disabled={isDisabled as boolean}\n label={label || \"\"}\n placeholder={placeholder}\n value={value !== undefined ? value : activeConfig.defaultValue || \"\"}\n valueField={valueField}\n labelField={labelField}\n onChange={handleChangeWrapper}\n onBlur={context.handleBlur}\n touched={touched}\n error={error}\n required={isRequired as boolean}\n />\n );\n\n case \"date\":\n return (\n <ITDatePicker\n name={name}\n disabled={isDisabled as boolean}\n label={label || \"\"}\n value={value}\n onChange={handleChangeWrapper}\n placeholder={placeholder}\n onBlur={context.handleBlur}\n touched={touched}\n error={error}\n required={isRequired as boolean}\n />\n );\n\n case \"time\":\n return (\n <ITTimePicker\n name={name}\n disabled={isDisabled as boolean}\n label={label || \"\"}\n value={value}\n onChange={handleChangeWrapper}\n placeholder={placeholder}\n onBlur={context.handleBlur}\n touched={touched}\n error={error}\n required={isRequired as boolean}\n />\n );\n\n case \"custom\":\n if (activeConfig.component) {\n const CustomComponent = activeConfig.component;\n return (\n <CustomComponent\n {...activeConfig}\n value={value}\n onChange={handleChangeWrapper}\n onBlur={context.handleBlur}\n error={error}\n touched={touched}\n context={context}\n />\n );\n }\n return null;\n\n case \"section\":\n return (\n <div className={clsx(\"w-full col-span-full\", activeConfig.className)}>\n {label && (\n <ITText as=\"h4\" className=\"text-lg font-semibold text-gray-800 mb-4\">\n {label}\n </ITText>\n )}\n <div className={clsx(\"grid gap-y-6 gap-x-5\", getGridColsClass(columns as any))}>\n {activeConfig.fields?.map((childConfig) => (\n <ITFieldRenderer\n key={childConfig.name}\n config={childConfig}\n columns={columns}\n />\n ))}\n </div>\n </div>\n );\n\n case \"array\":\n return (\n <div className=\"p-4 border-2 border-dashed border-gray-200 rounded-xl\">\n <ITText as=\"p\" className=\"text-sm text-gray-500 text-center\">\n Array Field: {label}\n </ITText>\n </div>\n );\n\n default:\n return null;\n }\n };\n\n return (\n <div className={clsx(getColSpanClass(activeConfig.column, columns), activeConfig.className)}>\n {renderField()}\n </div>\n );\n};\n\nexport default memo(ITFieldRenderer);","import clsx from \"clsx\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { FaClock } from \"react-icons/fa\";\nimport ITInput from \"../input/input\";\nimport ITButton from \"../button/button\";\nimport useClickOutside from \"@/hooks/useClickOutside\";\nimport { theme } from \"@/theme/theme\";\nimport { ITTimePickerProps } from \"./timePicker.props\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITTimePicker({\n name,\n value,\n label,\n placeholder = \"HH:MM\",\n onChange,\n onBlur,\n required,\n touched,\n error,\n disabled,\n className,\n size = \"medium\",\n variant = \"primary\",\n color = \"primary\",\n}: ITTimePickerProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [inputValue, setInputValue] = useState(value || \"\");\n const [isValidTime, setIsValidTime] = useState(true);\n const [dropdownPosition, setDropdownPosition] = useState({ top: 0, left: 0 });\n\n const wrapperRef = useRef<HTMLDivElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const hoursRef = useRef<HTMLDivElement>(null);\n const minutesRef = useRef<HTMLDivElement>(null);\n\n useClickOutside(dropdownRef, () => {\n // Only close if it's currently open to avoid setting state unnecessarily\n if (isOpen) {\n setIsOpen(false);\n }\n });\n\n // Resolve theme color for the dropdown highlight\n const isThemeColor = color in theme.colors;\n const highlightColor = isThemeColor\n ? theme.colors[color as keyof typeof theme.colors][50]\n : \"#f3f4f6\"; // fallback to gray-100\n\n const activeColor = isThemeColor\n ? theme.colors[color as keyof typeof theme.colors][100]\n : \"#e5e7eb\"; // fallback to gray-200\n\n useEffect(() => {\n setInputValue(value || \"\");\n }, [value]);\n\n const calculateDropdownPosition = () => {\n if (wrapperRef.current) {\n const inputRect = wrapperRef.current.getBoundingClientRect();\n const dropdownHeight = 280; // approximate height of the time picker dropdown\n const viewportHeight = window.innerHeight;\n\n let top = inputRect.bottom + 4;\n if (inputRect.bottom + dropdownHeight > viewportHeight) {\n top = inputRect.top - dropdownHeight - 4;\n }\n\n setDropdownPosition({\n top,\n left: inputRect.left,\n });\n }\n };\n\n const validateTime = (timeString: string) => {\n const regex = /^([01]\\d|2[0-3]):([0-5]\\d)$/;\n return regex.test(timeString);\n };\n\n const currentHour = validateTime(inputValue) ? inputValue.split(\":\")[0] : null;\n const currentMinute = validateTime(inputValue) ? inputValue.split(\":\")[1] : null;\n\n // Auto-scroll to selected items when opened\n useEffect(() => {\n if (isOpen) {\n setTimeout(() => {\n if (hoursRef.current && currentHour) {\n const selectedHourEl = hoursRef.current.querySelector(\n `[data-value=\"${currentHour}\"]`\n ) as HTMLElement;\n if (selectedHourEl) {\n hoursRef.current.scrollTop =\n selectedHourEl.offsetTop -\n hoursRef.current.clientHeight / 2 +\n selectedHourEl.clientHeight / 2;\n }\n }\n if (minutesRef.current && currentMinute) {\n const selectedMinuteEl = minutesRef.current.querySelector(\n `[data-value=\"${currentMinute}\"]`\n ) as HTMLElement;\n if (selectedMinuteEl) {\n minutesRef.current.scrollTop =\n selectedMinuteEl.offsetTop -\n minutesRef.current.clientHeight / 2 +\n selectedMinuteEl.clientHeight / 2;\n }\n }\n }, 50);\n }\n }, [isOpen, currentHour, currentMinute]);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n let val = e.target.value.replace(/\\D/g, \"\");\n\n if (val.length > 4) val = val.slice(0, 4);\n\n if (val.length >= 3) {\n val = `${val.slice(0, 2)}:${val.slice(2)}`;\n }\n\n setInputValue(val);\n\n if (validateTime(val)) {\n setIsValidTime(true);\n onChange({ target: { name, value: val } });\n } else {\n setIsValidTime(false);\n }\n };\n\n const handleBlurInput = () => {\n if (!validateTime(inputValue)) {\n setIsValidTime(false);\n onBlur?.({ target: { name, value } });\n return;\n }\n\n setIsValidTime(true);\n onBlur?.({ target: { name, value: inputValue } });\n };\n\n const handleHourSelect = (h: string) => {\n const min = currentMinute || \"00\";\n const newVal = `${h}:${min}`;\n setInputValue(newVal);\n onChange({ target: { name, value: newVal } });\n setIsValidTime(true);\n };\n\n const handleMinuteSelect = (m: string) => {\n const hr = currentHour || \"00\";\n const newVal = `${hr}:${m}`;\n setInputValue(newVal);\n onChange({ target: { name, value: newVal } });\n setIsValidTime(true);\n };\n\n const handleConfirm = () => {\n setIsOpen(false);\n };\n\n const hoursList = Array.from({ length: 24 }, (_, i) =>\n i.toString().padStart(2, \"0\")\n );\n const minutesList = Array.from({ length: 60 }, (_, i) =>\n i.toString().padStart(2, \"0\")\n );\n\n return (\n <div ref={wrapperRef} className={clsx(\"relative w-full\", className)}>\n <ITInput\n name={name}\n label={label}\n placeholder={placeholder}\n type=\"text\"\n value={inputValue}\n onChange={handleInputChange}\n onBlur={handleBlurInput}\n maxLength={5}\n required={required}\n disabled={disabled}\n variant={variant}\n size={size}\n touched={touched}\n error={!isValidTime ? \"Hora inválida\" : typeof error === 'string' ? error : undefined}\n iconRight={\n <FaClock\n onClick={() => {\n if (!disabled) {\n calculateDropdownPosition();\n setIsOpen(!isOpen);\n }\n }}\n className={clsx(\n \"cursor-pointer transition-colors\",\n disabled\n ? \"text-slate-400 cursor-not-allowed\"\n : \"text-slate-900 hover:text-slate-600\"\n )}\n />\n }\n />\n\n {isOpen && !disabled && (\n <div \n ref={dropdownRef}\n className=\"fixed z-[9999] bg-white border border-gray-100 shadow-xl rounded-xl w-64 overflow-hidden flex flex-col animate-in fade-in zoom-in-95 duration-200 origin-top it-timepicker-dropdown\"\n style={{\n top: `${dropdownPosition.top}px`,\n left: `${dropdownPosition.left}px`,\n }}\n >\n <div className=\"flex bg-gray-50 border-b border-gray-100 text-xs font-semibold text-gray-500 uppercase tracking-wider\">\n <ITText as=\"div\" className=\"flex-1 text-center py-2 border-r border-gray-100\">\n Horas\n </ITText>\n <ITText as=\"div\" className=\"flex-1 text-center py-2\">Minutos</ITText>\n </div>\n\n <div className=\"flex h-56 relative bg-white\">\n {/* Hours Column */}\n <div\n ref={hoursRef}\n className=\"flex-1 overflow-y-auto no-scrollbar border-r border-gray-50 scroll-smooth relative\"\n >\n <div className=\"py-2\">\n {hoursList.map((h) => {\n const isSelected = currentHour === h;\n return (\n <div\n key={h}\n data-value={h}\n className={clsx(\n \"text-center py-2 cursor-pointer transition-all duration-200 text-sm font-medium mx-2 rounded-lg my-1\",\n isSelected\n ? \"text-slate-900 shadow-sm\"\n : \"text-slate-600 hover:text-slate-900\"\n )}\n style={{\n backgroundColor: isSelected ? activeColor : undefined,\n }}\n onMouseEnter={(e) => {\n if (!isSelected)\n e.currentTarget.style.backgroundColor = highlightColor;\n }}\n onMouseLeave={(e) => {\n if (!isSelected)\n e.currentTarget.style.backgroundColor = \"transparent\";\n }}\n onClick={() => handleHourSelect(h)}\n >\n {h}\n </div>\n );\n })}\n </div>\n </div>\n\n {/* Minutes Column */}\n <div\n ref={minutesRef}\n className=\"flex-1 overflow-y-auto no-scrollbar scroll-smooth relative\"\n >\n <div className=\"py-2\">\n {minutesList.map((m) => {\n const isSelected = currentMinute === m;\n return (\n <div\n key={m}\n data-value={m}\n className={clsx(\n \"text-center py-2 cursor-pointer transition-all duration-200 text-sm font-medium mx-2 rounded-lg my-1\",\n isSelected\n ? \"text-slate-900 shadow-sm\"\n : \"text-slate-600 hover:text-slate-900\"\n )}\n style={{\n backgroundColor: isSelected ? activeColor : undefined,\n }}\n onMouseEnter={(e) => {\n if (!isSelected)\n e.currentTarget.style.backgroundColor = highlightColor;\n }}\n onMouseLeave={(e) => {\n if (!isSelected)\n e.currentTarget.style.backgroundColor = \"transparent\";\n }}\n onClick={() => handleMinuteSelect(m)}\n >\n {m}\n </div>\n );\n })}\n </div>\n </div>\n\n {/* Center Selection Overlay */}\n <div className=\"absolute top-1/2 left-0 right-0 h-10 -mt-5 bg-black/5 pointer-events-none border-y border-black/10 z-10\" />\n </div>\n\n <div className=\"p-3 bg-gray-50 border-t border-gray-100 flex justify-end\">\n <ITButton\n variant=\"solid\"\n color={color as any}\n size=\"small\"\n onClick={handleConfirm}\n >\n <ITText as=\"span\">Aceptar</ITText>\n </ITButton>\n </div>\n </div>\n )}\n </div>\n );\n}","import { useMemo } from 'react';\nimport { useITFormBuilderContext } from './formBuilder.context';\nimport type { FieldConfigV2 } from '@/types/field.types';\n\nexport const useFormBuilder = () => {\n const context = useITFormBuilderContext();\n const { values, errors, touched } = context;\n\n const progress = useMemo(() => {\n const requiredFields = Object.keys(context.getFieldConfig).filter((name) => {\n const config = context.getFieldConfig(name);\n if (!config) return false;\n if (typeof config.required === 'function') {\n return config.required(values);\n }\n return config.required;\n });\n\n if (requiredFields.length === 0) return 100;\n\n let filledFields = 0;\n requiredFields.forEach((fieldName) => {\n const val = values[fieldName];\n const hasValue = val !== undefined && val !== null && val !== '';\n const hasError = !!errors[fieldName];\n if (hasValue && !hasError) filledFields++;\n });\n\n return Math.round((filledFields / requiredFields.length) * 100);\n }, [values, errors, context]);\n\n return {\n ...context,\n progress,\n isDirty: Object.keys(touched).length > 0,\n };\n};\n\n/**\n * Hook to evaluate dynamic rules using only the dependent values passed as props.\n * This avoids subscribing to the entire `values` context, enabling true React.memo isolation.\n *\n * `dependentValues` should be a filtered object containing only the fields this\n * field depends on (derived from `dependsOn` in FieldConfigV2).\n */\nexport const useFieldRules = (\n config: FieldConfigV2,\n dependentValues: Record<string, any>,\n) => {\n const { getFieldConfig } = useITFormBuilderContext();\n const fieldConfig = getFieldConfig(config.name) || config;\n\n const isVisible = useMemo(() => {\n if (!fieldConfig.renderWhen) return true;\n return fieldConfig.renderWhen(dependentValues);\n }, [fieldConfig.renderWhen, dependentValues]);\n\n const dynamicProps = useMemo(() => {\n if (!fieldConfig.dynamicProps) return {};\n return fieldConfig.dynamicProps(dependentValues);\n }, [fieldConfig.dynamicProps, dependentValues]);\n\n const isRequired = useMemo(() => {\n if (typeof dynamicProps.required !== 'undefined') return dynamicProps.required;\n if (typeof fieldConfig.required === 'function') {\n return fieldConfig.required(dependentValues);\n }\n return fieldConfig.required || false;\n }, [fieldConfig.required, dynamicProps.required, dependentValues]);\n\n const isDisabled = useMemo(() => {\n if (typeof dynamicProps.disabled !== 'undefined') return dynamicProps.disabled;\n if (typeof fieldConfig.disabled === 'function') {\n return fieldConfig.disabled(dependentValues);\n }\n return fieldConfig.disabled || false;\n }, [fieldConfig.disabled, dynamicProps.disabled, dependentValues]);\n\n return { isVisible, dynamicProps, isRequired, isDisabled };\n};\n","import clsx from \"clsx\";\nimport { ITGridProps } from \"./grid.props\";\n\nfunction colSpanClass(span: number | undefined, cols: number) {\n if (span === undefined) return undefined;\n const clamped = Math.min(Math.max(Math.round(span), 1), cols);\n return `col-span-${clamped}`;\n}\n\nfunction breakpointSpan(span: number | undefined, bp: string, cols: number) {\n if (span === undefined) return undefined;\n const clamped = Math.min(Math.max(Math.round(span), 1), cols);\n return `${bp}:col-span-${clamped}`;\n}\n\nexport default function ITGrid({\n children,\n container,\n item,\n spacing = 0,\n columns = 12,\n xs,\n sm,\n md,\n lg,\n xl,\n className,\n style,\n as: Component = \"div\",\n}: ITGridProps) {\n if (container) {\n return (\n <Component\n className={clsx(\"grid\", className)}\n style={{\n gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))`,\n gap: spacing > 0 ? `${spacing * 0.25}rem` : undefined,\n ...style,\n }}\n >\n {children}\n </Component>\n );\n }\n\n if (item) {\n return (\n <Component\n className={clsx(\n colSpanClass(xs ?? sm, columns),\n sm !== undefined && breakpointSpan(sm, \"sm\", columns),\n md !== undefined && breakpointSpan(md, \"md\", columns),\n lg !== undefined && breakpointSpan(lg, \"lg\", columns),\n xl !== undefined && breakpointSpan(xl, \"xl\", columns),\n className\n )}\n style={style}\n >\n {children}\n </Component>\n );\n }\n\n return (\n <Component className={className} style={style}>\n {children}\n </Component>\n );\n}\n","import { useState } from \"react\";\nimport { ITImageProps } from \"./image.props\";\n\nconst ITImage = ({\n src,\n alt,\n className = \"\",\n fallback = \"\",\n}: ITImageProps) => {\n const [imageError, setImageError] = useState(false);\n\n const handleImageError = () => {\n setImageError(true);\n };\n\n return (\n <div\n className={`${className} flex items-center justify-center bg-transparent`}\n >\n {imageError ? (\n <img\n src={fallback}\n alt=\"Fallback\"\n className=\"w-full h-full object-cover\"\n />\n ) : (\n <img\n src={src}\n alt={alt}\n onError={handleImageError}\n className=\"w-full h-full object-cover\"\n />\n )}\n </div>\n );\n};\n\nexport default ITImage;\n","import useClickOutside from \"@/hooks/useClickOutside\";\nimport { useRef, useState } from \"react\";\nimport { FaChevronDown, FaChevronRight, FaUserCircle } from \"react-icons/fa\";\nimport { ITNavbarProps, ITNavigationItem } from \"./navbar.props\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITNavbar({\n logo,\n logoText,\n navigationItems = [],\n userMenu,\n children,\n // Legacy props for backward compatibility\n navItems,\n showSidebar = false,\n showSidebarOnMobile = false,\n sidebarItems,\n}: ITNavbarProps) {\n const [isUserMenuOpen, setIsUserMenuOpen] = useState(false);\n const [expandedItems, setExpandedItems] = useState<Set<string>>(new Set());\n\n const userMenuRef = useRef<HTMLDivElement>(null);\n\n useClickOutside(userMenuRef, () => setIsUserMenuOpen(false));\n\n const toggleUserMenu = () => {\n setIsUserMenuOpen(!isUserMenuOpen);\n };\n\n const toggleExpanded = (itemId: string) => {\n const newExpanded = new Set(expandedItems);\n if (newExpanded.has(itemId)) {\n newExpanded.delete(itemId);\n } else {\n newExpanded.add(itemId);\n }\n setExpandedItems(newExpanded);\n };\n\n const handleItemClick = (item: ITNavigationItem) => {\n if (item.subitems && item.subitems.length > 0) {\n toggleExpanded(item.id);\n } else if (item.action) {\n item.action();\n }\n };\n\n // Use new navigation items if provided, otherwise fall back to legacy\n const shouldUseLegacy = !navigationItems.length && (navItems || sidebarItems);\n\n if (shouldUseLegacy) {\n // Legacy behavior - original navbar implementation\n return (\n <div className=\"flex flex-col h-screen\">\n <nav className=\"bg-white border-b border-gray-200\">\n <div className=\"flex items-center justify-between mx-auto p-4\">\n <div className=\"flex items-center space-x-3 rtl:space-x-reverse\">\n {logo && <div className=\"h-8\">{logo}</div>}\n {logoText && (\n <ITText as=\"span\" className=\"self-center text-2xl font-semibold whitespace-nowrap text-gray-900\">\n {logoText}\n </ITText>\n )}\n </div>\n\n <div className=\"flex items-center justify-end w-full md:w-auto md:order-2\">\n <div className=\"flex items-center space-x-4 md:order-2\">\n <ul className=\"hidden md:flex space-x-4\">{navItems}</ul>\n\n {userMenu && (\n <div className=\"relative\">\n <button\n type=\"button\"\n className=\"flex text-sm bg-gray-200 rounded-full md:me-0 focus:ring-4 focus:ring-gray-300\"\n onClick={toggleUserMenu}\n >\n {userMenu.userImage ? (\n <img\n className=\"w-8 h-8 rounded-full\"\n src={userMenu.userImage}\n alt=\"user photo\"\n />\n ) : (\n <FaUserCircle className=\"w-8 h-8 text-gray-500\" />\n )}\n </button>\n\n {isUserMenuOpen && (\n <div\n ref={userMenuRef}\n className=\"z-50 absolute right-0 mt-2 text-base list-none bg-white divide-y divide-gray-100 rounded-lg shadow-sm\"\n >\n <div className=\"px-4 py-3\">\n <ITText as=\"span\" className=\"block text-sm text-gray-900\">\n {userMenu.userName}\n </ITText>\n <ITText as=\"span\" className=\"block text-sm text-gray-500 truncate\">\n {userMenu.userEmail}\n </ITText>\n </div>\n <ul className=\"py-2\">\n {userMenu.menuItems.map((item, index) => (\n <li key={index}>\n <button\n onClick={() => {\n item.onClick();\n setIsUserMenuOpen(false);\n }}\n className=\"block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 w-full text-left\"\n >\n <ITText as=\"span\">{item.label}</ITText>\n </button>\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n </div>\n </nav>\n\n <div className=\"flex-1 flex overflow-hidden relative\">\n {(showSidebar || showSidebarOnMobile) && (\n <aside className=\"fixed inset-y-0 left-0 w-64 bg-gray-50 transform transition-transform duration-300 ease-in-out z-50 shadow-lg md:static md:transform-none md:shadow-none md:border-r md:border-gray-200\">\n <div className=\"h-full overflow-y-auto py-4 px-3\">\n <ul className=\"space-y-2 font-medium\">{sidebarItems}</ul>\n </div>\n </aside>\n )}\n <main className=\"flex-1 bg-gray-100 overflow-y-auto\">\n {children}\n </main>\n </div>\n </div>\n );\n }\n\n // New sidebar design\n return (\n <div className=\"flex h-screen font-sans\" style={{ backgroundColor: \"var(--layout-bg, #f8fafc)\" }}>\n {/* Sidebar */}\n <aside className=\"w-72 shadow-xl flex flex-col transition-all duration-300 ease-in-out\" style={{ backgroundColor: \"var(--sidebar-bg, #0f172a)\", borderRight: \"1px solid var(--sidebar-border, #1e293b)\" }}>\n {/* Logo Section */}\n <div className=\"p-6 flex items-center gap-3\" style={{ borderBottom: \"1px solid var(--sidebar-border, #1e293b)\" }}>\n {logo && <div className=\"h-8 w-auto object-contain transition-transform hover:scale-105\">{logo}</div>}\n {logoText && (\n <ITText as=\"span\" className=\"text-lg font-bold tracking-wide\" style={{ color: \"var(--sidebar-active-color, #ffffff)\" }}>\n {logoText}\n </ITText>\n )}\n </div>\n\n {/* Navigation Items */}\n <nav className=\"flex-1 px-4 py-6 overflow-y-auto custom-scrollbar\">\n <ul className=\"flex flex-col gap-1.5\">\n {navigationItems.map((item) => (\n <li key={item.id}>\n <div\n className={`group flex items-center justify-between px-4 py-3 rounded-xl cursor-pointer transition-all duration-200 border-l-4 ${\n item.isActive \n ? 'shadow-sm' \n : 'hover:shadow-sm'\n }`}\n onClick={() => handleItemClick(item)}\n style={{\n backgroundColor: item.isActive ? \"var(--sidebar-active-bg, rgba(255,255,255,0.1))\" : \"transparent\",\n borderColor: item.isActive ? \"var(--sidebar-active-icon, #3b82f6)\" : \"transparent\",\n color: item.isActive ? \"var(--sidebar-active-color, #ffffff)\" : \"var(--sidebar-label-color, #94a3b8)\"\n }}\n onMouseEnter={(e) => {\n if (!item.isActive) {\n e.currentTarget.style.backgroundColor = \"var(--sidebar-hover-bg, rgba(255,255,255,0.05))\";\n e.currentTarget.style.color = \"var(--sidebar-active-color, #ffffff)\";\n }\n }}\n onMouseLeave={(e) => {\n if (!item.isActive) {\n e.currentTarget.style.backgroundColor = \"transparent\";\n e.currentTarget.style.color = \"var(--sidebar-label-color, #94a3b8)\";\n }\n }}\n >\n <div className=\"flex items-center gap-3\">\n {/* Icon */}\n {item.icon && (\n <div className=\"text-xl transition-colors\" style={{\n color: item.isActive ? \"var(--sidebar-active-icon, #3b82f6)\" : \"var(--sidebar-icon-color, #64748b)\"\n }}>\n {item.icon}\n </div>\n )}\n \n {/* Label */}\n <ITText as=\"span\" className={`font-medium text-sm ${item.isActive ? 'font-semibold' : ''}`}>{item.label}</ITText>\n </div>\n\n {/* Chevron for expandable items */}\n {item.subitems && item.subitems.length > 0 && (\n <div className=\"transition-transform\" style={{ color: \"var(--sidebar-icon-color, #64748b)\" }}>\n {expandedItems.has(item.id) ? (\n <FaChevronDown className=\"w-3 h-3\" />\n ) : (\n <FaChevronRight className=\"w-3 h-3\" />\n )}\n </div>\n )}\n </div>\n\n {/* Submenu */}\n {item.subitems && \n item.subitems.length > 0 && \n expandedItems.has(item.id) && (\n <ul className=\"mt-1 ml-4 pl-4 space-y-1\" style={{ borderLeft: \"1px solid var(--sidebar-border, #1e293b)\" }}>\n {item.subitems.map((subitem) => (\n <li key={subitem.id}>\n <button\n onClick={subitem.action}\n className=\"block w-full text-left px-4 py-2.5 rounded-lg text-sm transition-all duration-200\"\n style={{\n color: subitem.isActive ? \"var(--sidebar-active-color, #ffffff)\" : \"var(--sidebar-label-color, #94a3b8)\",\n backgroundColor: subitem.isActive ? \"var(--sidebar-active-bg, rgba(255,255,255,0.1))\" : \"transparent\"\n }}\n onMouseEnter={(e) => {\n if (!subitem.isActive) {\n e.currentTarget.style.backgroundColor = \"var(--sidebar-hover-bg, rgba(255,255,255,0.05))\";\n }\n }}\n onMouseLeave={(e) => {\n if (!subitem.isActive) {\n e.currentTarget.style.backgroundColor = \"transparent\";\n }\n }}\n >\n <ITText as=\"span\">{subitem.label}</ITText>\n </button>\n </li>\n ))}\n </ul>\n )}\n </li>\n ))}\n </ul>\n </nav>\n\n {/* User Menu */}\n {userMenu && (\n <div className=\"p-4\" style={{ borderTop: \"1px solid var(--sidebar-border, #1e293b)\" }}>\n <div className=\"relative\">\n <button\n type=\"button\"\n className=\"flex items-center gap-3 w-full p-3 rounded-xl transition-colors duration-200 group\"\n style={{ color: \"var(--sidebar-label-color, #94a3b8)\" }}\n onMouseEnter={(e) => { e.currentTarget.style.backgroundColor = \"var(--sidebar-hover-bg, rgba(255,255,255,0.05))\"; e.currentTarget.style.color = \"var(--sidebar-active-color, #ffffff)\"; }}\n onMouseLeave={(e) => { e.currentTarget.style.backgroundColor = \"transparent\"; e.currentTarget.style.color = \"var(--sidebar-label-color, #94a3b8)\"; }}\n onClick={toggleUserMenu}\n >\n {userMenu.userImage ? (\n <img\n className=\"w-10 h-10 rounded-full border-2 transition-colors\"\n src={userMenu.userImage}\n alt=\"user photo\"\n style={{ borderColor: \"var(--sidebar-border, #1e293b)\" }}\n />\n ) : (\n <div className=\"w-10 h-10 rounded-full flex items-center justify-center transition-colors\" style={{ backgroundColor: \"var(--sidebar-hover-bg, rgba(255,255,255,0.1))\", color: \"var(--sidebar-icon-color, #64748b)\" }}>\n <FaUserCircle className=\"w-6 h-6\" />\n </div>\n )}\n <div className=\"flex-1 text-left overflow-hidden\">\n <ITText as=\"div\" className=\"font-medium text-sm truncate\" style={{ color: \"var(--sidebar-active-color, #ffffff)\" }}>\n {userMenu.userName}\n </ITText>\n <ITText as=\"div\" className=\"text-xs truncate\" style={{ color: \"var(--sidebar-label-color, #94a3b8)\" }}>\n {userMenu.userEmail}\n </ITText>\n </div>\n <FaChevronRight className=\"w-3 h-3\" style={{ color: \"var(--sidebar-icon-color, #64748b)\" }} />\n </button>\n\n {isUserMenuOpen && (\n <div\n ref={userMenuRef}\n className=\"absolute bottom-full left-0 mb-3 w-full rounded-xl shadow-2xl overflow-hidden transform transition-all duration-200 origin-bottom\"\n style={{ backgroundColor: \"var(--topbar-user-dropdown-bg, #ffffff)\", border: \"1px solid var(--topbar-user-dropdown-border, #e2e8f0)\" }}\n >\n <div className=\"px-4 py-3\" style={{ backgroundColor: \"var(--topbar-user-bg, #f8fafc)\", borderBottom: \"1px solid var(--topbar-user-dropdown-border, #e2e8f0)\" }}>\n <ITText as=\"span\" className=\"block text-sm font-semibold\" style={{ color: \"var(--topbar-user-text, #0f172a)\" }}>\n {userMenu.userName}\n </ITText>\n <ITText as=\"span\" className=\"block text-xs truncate\" style={{ color: \"var(--topbar-user-subtitle, #64748b)\" }}>\n {userMenu.userEmail}\n </ITText>\n </div>\n <ul className=\"py-1\">\n {userMenu.menuItems.map((item, index) => (\n <li key={index}>\n <button\n onClick={() => {\n item.onClick();\n setIsUserMenuOpen(false);\n }}\n className=\"flex items-center w-full px-4 py-2.5 text-sm transition-colors\"\n style={{ color: \"var(--topbar-user-text, #334155)\" }}\n onMouseEnter={(e) => { e.currentTarget.style.backgroundColor = \"var(--topbar-user-item-hover, #f8fafc)\"; }}\n onMouseLeave={(e) => { e.currentTarget.style.backgroundColor = \"transparent\"; }}\n >\n <ITText as=\"span\">{item.label}</ITText>\n </button>\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n </div>\n )}\n </aside>\n\n {/* Main Content */}\n <main className=\"flex-1 overflow-y-auto relative\" style={{ backgroundColor: \"var(--layout-bg, #f8fafc)\" }}>\n {children}\n </main>\n </div>\n );\n}\n","import clsx from \"clsx\";\nimport { ITPageProps } from \"./page.props\";\nimport ITPageHeader from \"../page-header/page-header\";\nimport ITSkeleton from \"../skeleton/skeleton\";\nimport ITEmptyState from \"../empty-state/empty-state\";\nimport ITButton from \"../button/button\";\nimport ITStack from \"../stack/stack\";\n\nexport default function ITPage({\n title,\n description,\n breadcrumbs,\n actions,\n backAction,\n loading = false,\n error = null,\n onRetry,\n empty = false,\n emptyTitle,\n emptyDescription,\n emptyAction,\n className,\n children,\n}: ITPageProps) {\n if (loading) {\n return (\n <div className={className}>\n {title && (\n <ITPageHeader title={title} />\n )}\n <div className=\"mt-6\">\n <ITStack spacing={4}>\n <ITSkeleton variant=\"rectangular\" height={40} width=\"40%\" />\n <ITSkeleton variant=\"rectangular\" height={200} />\n <ITSkeleton variant=\"rectangular\" height={200} />\n </ITStack>\n </div>\n </div>\n );\n }\n\n if (error) {\n return (\n <div className={className}>\n {title && (\n <ITPageHeader title={title} />\n )}\n <ITEmptyState\n title=\"Error\"\n description={error}\n action={\n onRetry ? (\n <ITButton label=\"Reintentar\" onClick={onRetry} size=\"small\" />\n ) : undefined\n }\n />\n </div>\n );\n }\n\n if (empty) {\n return (\n <div className={className}>\n {title && (\n <ITPageHeader title={title} />\n )}\n <ITEmptyState\n title={emptyTitle || \"Sin datos\"}\n description={emptyDescription || \"No hay información para mostrar\"}\n action={emptyAction}\n />\n </div>\n );\n }\n\n return (\n <div className={clsx(\"space-y-6\", className)}>\n {(title || breadcrumbs || actions || backAction) && (\n <ITPageHeader\n title={title || \"\"}\n description={description}\n breadcrumbs={breadcrumbs}\n actions={actions}\n backAction={backAction}\n />\n )}\n {children}\n </div>\n );\n}\n","import clsx from \"clsx\";\nimport { FaChevronLeft } from \"react-icons/fa\";\nimport { ITPageHeaderProps } from \"./page-header.props\";\nimport ITBreadcrumbs from \"../breadcrumbs/breadcrumbs\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITPageHeader({\n title,\n description,\n breadcrumbs,\n actions,\n backAction,\n className,\n}: ITPageHeaderProps) {\n const showTopRow = breadcrumbs?.length || backAction;\n\n return (\n <div className={clsx(className)}>\n {showTopRow && (\n <div className=\"flex items-center justify-between gap-4 mb-1\">\n <div className=\"flex items-center gap-2 min-w-0\">\n {backAction && (\n <button\n onClick={backAction}\n className=\"p-1.5 rounded-lg text-slate-400 hover:text-slate-600 hover:bg-slate-100 dark:text-slate-500 dark:hover:text-slate-200 dark:hover:bg-slate-800 transition-colors flex-shrink-0\"\n aria-label=\"Volver\"\n >\n <FaChevronLeft size={14} />\n </button>\n )}\n {breadcrumbs && breadcrumbs.length > 0 && (\n <ITBreadcrumbs items={breadcrumbs} />\n )}\n </div>\n {actions && (\n <div className=\"flex items-center gap-2 flex-shrink-0\">\n {actions}\n </div>\n )}\n </div>\n )}\n\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"min-w-0\">\n <ITText as=\"h1\" className=\"text-2xl font-extrabold text-slate-800 dark:text-white tracking-tight\">\n {title}\n </ITText>\n {description && (\n <ITText as=\"p\" className=\"text-sm text-slate-500 dark:text-slate-400 mt-0.5\">\n {description}\n </ITText>\n )}\n </div>\n {!showTopRow && actions && (\n <div className=\"flex items-center gap-2 flex-shrink-0\">\n {actions}\n </div>\n )}\n </div>\n </div>\n );\n}\n","import clsx from \"clsx\";\nimport { ITSkeletonProps, SkeletonVariant } from \"./skeleton.props\";\n\nconst variantClasses: Record<SkeletonVariant, string> = {\n text: \"rounded-md h-4 w-full\",\n circular: \"rounded-full\",\n rectangular: \"rounded-lg\",\n};\n\nexport default function ITSkeleton({\n variant = \"text\",\n width,\n height,\n count = 1,\n className,\n style,\n}: ITSkeletonProps) {\n const baseStyle: React.CSSProperties = {\n ...(width ? { width } : variant === \"text\" ? {} : width ? { width } : {}),\n ...(height ? { height } : {}),\n ...style,\n };\n\n const items = Array.from({ length: count }, (_, i) => i);\n\n return (\n <>\n {items.map((i) => (\n <div\n key={i}\n className={clsx(\n \"animate-pulse bg-slate-200 dark:bg-slate-700\",\n variantClasses[variant],\n variant === \"text\" && count > 1 && i < count - 1 && \"mb-2\",\n className\n )}\n style={{\n ...baseStyle,\n width: variant === \"text\" && width === undefined ? `${Math.random() * 30 + 60}%` : width,\n }}\n />\n ))}\n </>\n );\n}\n","import clsx from \"clsx\";\nimport { Children, cloneElement, isValidElement, Fragment } from \"react\";\nimport { ITStackProps, StackDirection, StackAlignment, StackJustify, StackWrap } from \"./stack.props\";\n\nconst directionMap: Record<StackDirection, string> = {\n row: \"flex-row\",\n column: \"flex-col\",\n \"row-reverse\": \"flex-row-reverse\",\n \"column-reverse\": \"flex-col-reverse\",\n};\n\nconst alignMap: Record<StackAlignment, string> = {\n start: \"items-start\",\n end: \"items-end\",\n center: \"items-center\",\n stretch: \"items-stretch\",\n baseline: \"items-baseline\",\n};\n\nconst justifyMap: Record<StackJustify, string> = {\n start: \"justify-start\",\n end: \"justify-end\",\n center: \"justify-center\",\n between: \"justify-between\",\n around: \"justify-around\",\n evenly: \"justify-evenly\",\n};\n\nconst wrapMap: Record<StackWrap, string> = {\n nowrap: \"flex-nowrap\",\n wrap: \"flex-wrap\",\n \"wrap-reverse\": \"flex-wrap-reverse\",\n};\n\nexport default function ITStack({\n children,\n direction = \"column\",\n spacing = 0,\n alignItems,\n justifyContent,\n flexWrap,\n divider,\n className,\n style,\n as: Component = \"div\",\n}: ITStackProps) {\n const hasDivider = divider !== undefined;\n const items = Children.toArray(children);\n\n const resolvedStyle: React.CSSProperties = {\n gap: spacing > 0 ? `${spacing * 0.25}rem` : undefined,\n ...style,\n };\n\n return (\n <Component\n className={clsx(\n \"flex\",\n directionMap[direction],\n alignItems && alignMap[alignItems],\n justifyContent && justifyMap[justifyContent],\n flexWrap && wrapMap[flexWrap],\n className\n )}\n style={resolvedStyle}\n >\n {hasDivider\n ? items.map((child, index) => (\n <Fragment key={index}>\n {child}\n {index < items.length - 1 && isValidElement(divider)\n ? cloneElement(divider, { key: `divider-${index}` })\n : null}\n </Fragment>\n ))\n : children}\n </Component>\n );\n}\n","import { useState, useRef } from \"react\";\nimport clsx from \"clsx\";\nimport { ITPopoverProps, PopoverPosition } from \"./popover.props\";\nimport useClickOutside from \"@/hooks/useClickOutside\";\n\nconst positionClasses: Record<PopoverPosition, string> = {\n top: \"bottom-full left-1/2 -translate-x-1/2 mb-2\",\n bottom: \"top-full left-1/2 -translate-x-1/2 mt-2\",\n left: \"right-full top-1/2 -translate-y-1/2 mr-2\",\n right: \"left-full top-1/2 -translate-y-1/2 ml-2\",\n};\n\nexport default function ITPopover({\n trigger,\n children,\n position = \"bottom\",\n isOpen: controlledOpen,\n onClose,\n className,\n}: ITPopoverProps) {\n const [internalOpen, setInternalOpen] = useState(false);\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n const ref = useRef<HTMLDivElement>(null);\n\n useClickOutside(ref, () => {\n if (isControlled) onClose?.();\n else setInternalOpen(false);\n });\n\n return (\n <div ref={ref} className={clsx(\"relative inline-flex\", className)}>\n <div onClick={() => (isControlled ? onClose?.() : setInternalOpen((p) => !p))} className=\"cursor-pointer\">\n {trigger}\n </div>\n {open && (\n <div className={clsx(\"absolute z-[200]\", positionClasses[position])}>\n <div className=\"bg-white dark:bg-slate-800 rounded-xl shadow-xl border border-slate-200 dark:border-slate-700 p-3 min-w-[160px]\">\n {children}\n </div>\n </div>\n )}\n </div>\n );\n}\n","import clsx from \"clsx\";\nimport { ITProgressProps } from \"./progress.props\";\nimport { ColorsTypes } from \"@/types/colors.types\";\n\nconst colorMap: Record<ColorsTypes, string> = {\n primary: \"bg-primary-500\",\n secondary: \"bg-secondary-500\",\n success: \"bg-success-500\",\n danger: \"bg-danger-500\",\n warning: \"bg-warning-500\",\n info: \"bg-info-500\",\n purple: \"bg-purple-500\",\n error: \"bg-danger-500\",\n gray: \"bg-secondary-500\",\n};\n\nconst sizeMap = {\n sm: \"h-1\",\n md: \"h-2\",\n lg: \"h-3\",\n};\n\nexport default function ITProgress({\n value = 0,\n max = 100,\n variant = \"determinate\",\n color = \"primary\",\n size = \"md\",\n className,\n style,\n}: ITProgressProps) {\n const pct = Math.min(Math.max((value / max) * 100, 0), 100);\n\n return (\n <div\n className={clsx(\"w-full bg-slate-200 dark:bg-slate-700 rounded-full overflow-hidden\", sizeMap[size], className)}\n style={style}\n role=\"progressbar\"\n aria-valuenow={variant === \"determinate\" ? value : undefined}\n aria-valuemax={max}\n >\n <div\n className={clsx(\n \"h-full rounded-full transition-all duration-500\",\n colorMap[color],\n variant === \"indeterminate\" && \"animate-pulse w-1/2\"\n )}\n style={variant === \"determinate\" ? { width: `${pct}%` } : undefined}\n />\n </div>\n );\n}\n","import clsx from \"clsx\";\nimport { ITRadioGroupProps } from \"./radio.props\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITRadioGroup({\n name,\n value,\n onChange,\n options,\n disabled = false,\n direction = \"column\",\n className,\n}: ITRadioGroupProps) {\n return (\n <div\n className={clsx(\n \"flex gap-3\",\n direction === \"row\" ? \"flex-row flex-wrap\" : \"flex-col\",\n className\n )}\n >\n {options.map((opt) => {\n const isSelected = opt.value === value;\n return (\n <label\n key={opt.value}\n className={clsx(\n \"inline-flex items-center gap-2 cursor-pointer select-none\",\n disabled && \"opacity-50 cursor-not-allowed\"\n )}\n >\n <input\n type=\"radio\"\n name={name}\n value={opt.value}\n checked={isSelected}\n onChange={() => onChange(opt.value)}\n disabled={disabled}\n className=\"peer sr-only\"\n />\n <div\n className={clsx(\n \"w-4 h-4 rounded-full border-2 flex items-center justify-center transition-all\",\n isSelected\n ? \"border-primary-500\"\n : \"border-slate-300 dark:border-slate-600\",\n !disabled && \"peer-focus:ring-2 peer-focus:ring-primary-200\",\n )}\n >\n {isSelected && <div className=\"w-2 h-2 rounded-full bg-primary-500\" />}\n </div>\n <ITText as=\"span\" className=\"text-sm text-slate-700 dark:text-slate-300\">{opt.label}</ITText>\n </label>\n );\n })}\n </div>\n );\n}\n","import React, { useState, useEffect, useRef, useMemo } from \"react\";\nimport clsx from \"clsx\";\nimport { FaAngleDown, FaSearch, FaTimes } from \"react-icons/fa\";\nimport { ITSearchSelectProps, ITSearchSelectOption } from \"./search-select.props\";\nimport { theme } from \"@/theme/theme\";\nimport ITText from \"@/components/text/text\";\n\n/**\n * ITSearchSelect - Un componente de selección con buscador integrado.\n * Soporta filtrado local y búsqueda remota via API.\n */\nexport default function ITSearchSelect({\n name,\n options = [],\n label,\n placeholder = \"Selecciona una opción\",\n valueField = \"value\",\n labelField = \"label\",\n value,\n onChange,\n onBlur,\n disabled = false,\n className,\n touched,\n required,\n error,\n readOnly = false,\n onSearch,\n isLoading = false,\n noResultsMessage = \"No se encontraron resultados\",\n}: ITSearchSelectProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [isFocused, setIsFocused] = useState(false);\n const [localTouched, setLocalTouched] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const timeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n // Encontrar la opción seleccionada inicialmente\n const selectedOption = useMemo(() => {\n return options.find((opt) => opt[valueField] === value);\n }, [options, value, valueField]);\n\n // Sincronizar el searchTerm con el label de la opción seleccionada si no se está editando\n useEffect(() => {\n if (!isFocused) {\n setSearchTerm(selectedOption ? String(selectedOption[labelField]) : \"\");\n }\n }, [selectedOption, isFocused, labelField]);\n\n // Cerrar el dropdown al hacer click afuera\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n }\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n // Filtrado local de opciones (Modo 1)\n const filteredOptions = useMemo(() => {\n if (onSearch) return options; // Modo API\n if (!searchTerm || !isFocused) return options;\n return options.filter((opt) =>\n String(opt[labelField]).toLowerCase().includes(searchTerm.toLowerCase())\n );\n }, [options, searchTerm, onSearch, labelField, isFocused]);\n\n // Manejar cambio en el input\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const query = e.target.value;\n setSearchTerm(query);\n setIsOpen(true);\n\n if (onSearch) {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => {\n onSearch(query);\n }, 500);\n }\n };\n\n const handleSelect = (option: ITSearchSelectOption) => {\n if (onChange) {\n onChange(option[valueField], option);\n }\n setSearchTerm(String(option[labelField]));\n setIsOpen(false);\n };\n\n const handleFocus = () => {\n if (disabled || readOnly) return;\n setIsFocused(true);\n setIsOpen(true);\n // Opcional: borrar el texto al entrar para facilitar la búsqueda\n // setSearchTerm(\"\"); \n };\n\n const handleInputBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n // Retrasar el cierre para permitir el click en la opción\n setTimeout(() => {\n setIsFocused(false);\n setLocalTouched(true);\n onBlur?.(e);\n }, 200);\n };\n\n // Theme logic\n const inputTheme = (theme as any).input || {};\n\n const isTouched = touched !== undefined ? touched : localTouched;\n const isEmpty = value === undefined || value === null || String(value).trim() === \"\";\n\n const effectiveError = error !== undefined && error !== false\n ? (error === true ? \"Este campo es requerido\" : error)\n : (required && isEmpty ? \"Este campo es requerido\" : undefined);\n\n const hasError = isTouched && !!effectiveError;\n const errorMessage = typeof effectiveError === \"string\" ? effectiveError : \"Este campo es requerido\";\n \n const getInputStyle = () => {\n const style: React.CSSProperties = {\n backgroundColor: inputTheme.backgroundColor || \"#ffffff\",\n borderColor: inputTheme.borderColor || \"#e2e8f0\",\n borderRadius: inputTheme.borderRadius || \"0.5rem\",\n padding: inputTheme.padding || \"0.5rem 0.75rem\",\n fontSize: inputTheme.fontSize || \"0.875rem\",\n borderWidth: '1px',\n borderStyle: 'solid',\n transition: 'all 0.2s',\n color: 'var(--input-text-color, var(--color-secondary-900))',\n width: '100%',\n };\n\n if (disabled) {\n style.backgroundColor = inputTheme.disabled?.backgroundColor || \"#f1f5f9\";\n style.borderColor = inputTheme.disabled?.borderColor || \"#e2e8f0\";\n style.opacity = 0.7;\n style.cursor = \"not-allowed\";\n }\n\n if (hasError) {\n style.borderColor = inputTheme.error?.borderColor || 'red';\n if (isFocused) {\n style.boxShadow = inputTheme.error?.ring;\n }\n } else if (isFocused && !readOnly) {\n style.boxShadow = inputTheme.focus?.ring;\n style.borderColor = inputTheme.focus?.borderColor;\n }\n\n return style;\n };\n\n return (\n <div className={clsx(\"w-full flex flex-col gap-1.5\", className, isOpen && \"relative z-30\")} ref={containerRef}>\n {label && (\n <ITText\n as=\"label\"\n className={clsx(\"text-sm font-medium text-gray-700 dark:text-slate-300\", {\n \"text-red-500\": hasError,\n })}\n >\n <ITText as=\"span\">{label}</ITText>\n {required && <ITText as=\"span\" className=\"text-red-500 ml-1\">*</ITText>}\n </ITText>\n )}\n\n <div className=\"relative\">\n <div className=\"relative flex items-center\">\n <input\n type=\"text\"\n name={name}\n value={searchTerm}\n onChange={handleInputChange}\n onFocus={handleFocus}\n onBlur={handleInputBlur}\n disabled={disabled}\n readOnly={readOnly}\n placeholder={placeholder}\n className=\"outline-none pr-10\"\n style={getInputStyle()}\n autoComplete=\"off\"\n />\n <div className=\"absolute right-3 flex items-center gap-2 text-gray-400 pointer-events-none\">\n {isLoading && <div className=\"animate-spin h-4 w-4 border-2 border-primary-500 border-t-transparent rounded-full\" />}\n {!isLoading && <FaSearch size={14} className={clsx({ \"text-primary-500\": isFocused })} />}\n </div>\n </div>\n\n {/* Dropdown Panel */}\n {isOpen && (\n <div className=\"absolute z-50 w-full mt-1 bg-white dark:bg-slate-900 border border-gray-200 dark:border-slate-800 rounded-lg shadow-xl overflow-hidden animate-in fade-in zoom-in duration-200 origin-top\">\n <div className=\"max-h-60 overflow-y-auto\">\n {filteredOptions.length > 0 ? (\n filteredOptions.map((option) => (\n <ITText\n as=\"div\"\n key={option[valueField]}\n onClick={() => handleSelect(option)}\n className={clsx(\n \"px-4 py-2 text-sm cursor-pointer transition-colors\",\n value === option[valueField]\n ? \"bg-primary-50 dark:bg-primary-950/40 text-primary-700 dark:text-primary-300 font-medium\"\n : \"hover:bg-gray-50 dark:hover:bg-slate-800 text-gray-700 dark:text-slate-300\"\n )}\n >\n <ITText as=\"span\">{option[labelField]}</ITText>\n </ITText>\n ))\n ) : (\n <ITText as=\"div\" className=\"px-4 py-6 text-sm text-center text-gray-500 italic\">\n {isLoading ? \"Cargando...\" : noResultsMessage}\n </ITText>\n )}\n </div>\n </div>\n )}\n </div>\n\n {/* Error Message */}\n {hasError && (\n <ITText as=\"p\" className=\"text-red-500 text-xs mt-1\">{errorMessage}</ITText>\n )}\n </div>\n );\n}\n","import { useDebouncedSearch } from \"@/hooks/useDebouncedSearch\";\nimport clsx from \"clsx\";\nimport React, { useState } from \"react\";\n\nimport { sizeStyles, variantStyles } from \"@/types/table.types\";\nimport { ITSearchTableProps } from \"./searchTable.props\";\nimport SearchAndSortBar from \"./components/SearchAndSortBar\";\nimport TableHeader from \"./components/TableHeader\";\nimport TableRow from \"./components/TableRow\";\nimport { getNestedValue } from \"@/utils/table.utils\";\nimport TableEmptyState from \"./components/TableEmptyState\";\nimport PaginationControls from \"./components/PaginationControls\";\nimport ITText from \"@/components/text/text\";\n\ninterface CustomITSearchTableProps<T> extends ITSearchTableProps<T> {\n editingRow?: number | null;\n searchTermInitial?: string;\n onClearSearch?: () => void;\n onEdit?: (row: T, index: number) => void;\n onSave?: (row: T, index: number) => void;\n onCancel?: () => void;\n sortConfig?: {\n key: string;\n direction: \"asc\" | \"desc\";\n };\n}\n\nexport default function ITSearchTable<T extends Record<string, unknown>>({\n columns,\n data,\n containerClassName,\n searchTermInitial = \"\",\n searchInputPlaceholder = \"Buscar en todos los campos...\",\n className,\n variant = \"default\",\n size = \"md\",\n itemsPerPageOptions = [10, 20, 50, 100],\n defaultItemsPerPage = 10,\n title,\n pageIndex,\n totalCount,\n totalPages,\n hasPreviousPage,\n hasNextPage,\n onPageChange,\n onItemsPerPageChange,\n onSortChange,\n onFilterChange,\n sortConfig,\n editingRow = null,\n validationSchema,\n onClearSearch,\n onEdit,\n onSave,\n onCancel,\n}: CustomITSearchTableProps<T>) {\n const [itemsPerPage, setItemsPerPage] = useState(defaultItemsPerPage);\n\n const { searchTerm, handleSearchChange, handleClearSearch } = useDebouncedSearch({\n initialValue: searchTermInitial,\n onSearch: (value) => {\n if (onFilterChange) {\n onFilterChange(value ? { query: value } : {});\n }\n },\n });\n\n const handleItemsPerPageChange = (value: number) => {\n setItemsPerPage(value);\n onItemsPerPageChange?.(value);\n };\n\n const goToPage = (page: number) => {\n onPageChange?.(page);\n };\n\n const handleGlobalSort = () => {\n const newDirection = sortConfig?.direction === \"asc\" ? \"desc\" : \"asc\";\n onSortChange?.({ key: \"id\", direction: newDirection });\n };\n\n const handleSort = (key: string) => {\n const column = columns.find((col) => col.key === key);\n if (!column || !column.sortable) return;\n\n let newDirection: \"asc\" | \"desc\" = \"asc\";\n if (sortConfig && sortConfig.key === key) {\n newDirection = sortConfig.direction === \"asc\" ? \"desc\" : \"asc\";\n }\n\n onSortChange?.({ key, direction: newDirection });\n };\n\n const handleEdit = (row: T, index: number) => onEdit?.(row, index);\n const handleSave = (updatedRow: T, index: number) => onSave?.(updatedRow, index);\n const handleCancelEdit = () => onCancel?.();\n\n const handleClearSearchWithClear = () => {\n handleClearSearch();\n onClearSearch?.();\n };\n\nreturn (\n <div className={clsx(\"space-y-4 w-full\", containerClassName)}>\n {/* Card principal con sombra */}\n <div className=\"shadow-md sm:rounded-lg overflow-hidden\">\n {/* Header fijo */}\n {title && (\n <div className=\"bg-teal-500 text-white px-6 py-4\">\n <ITText as=\"h2\" className=\"text-xl font-bold text-center whitespace-nowrap\">\n {title}\n </ITText>\n </div>\n )}\n\n {/* Contenido con scroll */}\n <div className=\"bg-white\">\n {/* Barra de búsqueda y ordenamiento */}\n <div className=\"p-4 border-b border-gray-200\">\n <SearchAndSortBar\n searchTerm={searchTerm}\n onSearchChange={handleSearchChange}\n onClearSearch={handleClearSearchWithClear}\n onGlobalSort={handleGlobalSort}\n sortConfig={sortConfig}\n searchInputPlaceholder={searchInputPlaceholder}\n />\n </div>\n\n {/* Tabla con scroll horizontal */}\n <div className=\"overflow-x-auto\">\n <table\n className={clsx(\n \"min-w-full text-sm text-left bg-white text-gray-900 table-auto\",\n variantStyles[variant],\n sizeStyles[size]\n )}\n >\n <TableHeader\n columns={columns}\n onSort={handleSort}\n sortConfig={sortConfig}\n />\n <tbody>\n {data.length > 0 ? (\n data.map((row, rowIndex) => (\n <TableRow\n key={rowIndex}\n row={row}\n rowIndex={rowIndex}\n columns={columns}\n validationSchema={validationSchema}\n getNestedValue={getNestedValue}\n isEditing={editingRow === rowIndex}\n onEdit={() => handleEdit(row, rowIndex)}\n onSave={(updatedRow) => handleSave(updatedRow, rowIndex)}\n onCancel={handleCancelEdit}\n />\n ))\n ) : (\n <TableEmptyState\n colSpan={columns.length + 1}\n searchTerm={searchTerm}\n />\n )}\n </tbody>\n </table>\n </div>\n </div>\n </div>\n\n {/* Paginación */}\n <PaginationControls\n pageIndex={pageIndex}\n totalPages={totalPages}\n hasPreviousPage={hasPreviousPage}\n hasNextPage={hasNextPage}\n onPageChange={goToPage}\n itemsPerPage={itemsPerPage}\n itemsPerPageOptions={itemsPerPageOptions}\n onItemsPerPageChange={handleItemsPerPageChange}\n currentCount={data.length}\n totalCount={totalCount}\n />\n </div>\n);\n}","import ITInput from \"@/components/input/input\";\nimport React from \"react\";\nimport { FaSearch } from \"react-icons/fa\";\n\ninterface SearchInputProps {\n placeholder?: string;\n value: string;\n onChange: (value: string) => void;\n className?: string;\n}\n\nexport default function SearchInput({\n placeholder = \"Buscar en todos los campos...\",\n value,\n onChange,\n className = \"\",\n}: SearchInputProps) {\n return (\n <div className={`relative flex-1 ${className}`}>\n <div className=\"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none\">\n <FaSearch className=\"h-5 w-5 text-gray-400\" />\n </div>\n <ITInput\n name=\"global-search\"\n placeholder={placeholder}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onBlur={() => {}}\n className=\"pl-10 w-full\"\n />\n </div>\n );\n}\n","import React from \"react\";\nimport { FaSort, FaSortUp, FaSortDown } from \"react-icons/fa\";\nimport ITText from \"@/components/text/text\";\n\ninterface SortButtonProps {\n sortConfig?: {\n key: string;\n direction: \"asc\" | \"desc\";\n };\n onClick: () => void;\n className?: string;\n}\n\nexport default function SortButton({\n sortConfig,\n onClick,\n className = \"\",\n}: SortButtonProps) {\n return (\n <button\n onClick={onClick}\n className={`p-3 rounded-lg bg-white border border-gray-300 hover:bg-gray-50 transition-colors duration-200 flex items-center gap-2 min-w-[120px] ${className}`}\n aria-label={`Ordenar tabla ${\n sortConfig\n ? sortConfig.direction === \"asc\"\n ? \"descendente\"\n : \"ascendente\"\n : \"ascendente\"\n }`}\n title=\"Ordenar tabla\"\n >\n {sortConfig ? (\n sortConfig.direction === \"asc\" ? (\n <FaSortUp className=\"w-4 h-4 text-slate-500\" />\n ) : (\n <FaSortDown className=\"w-4 h-4 text-slate-500\" />\n )\n ) : (\n <FaSort className=\"w-4 h-4 text-gray-500\" />\n )}\n <ITText as=\"span\" className=\"text-sm font-medium text-gray-700\">\n {sortConfig\n ? sortConfig.direction === \"asc\"\n ? \"Asc ↑\"\n : \"Desc ↓\"\n : \"Ordenar\"}\n </ITText>\n </button>\n );\n}\n","import React from \"react\";\nimport SearchInput from \"./SearchInput\";\nimport SortButton from \"./SortButton\";\nimport ITButton from \"@/components/button/button\";\nimport ITText from \"@/components/text/text\";\n\ninterface SearchAndSortBarProps {\n searchTerm: string;\n onSearchChange: (value: string) => void;\n onClearSearch: () => void;\n onGlobalSort: () => void;\n sortConfig?: {\n key: string;\n direction: \"asc\" | \"desc\";\n };\n searchInputPlaceholder?: string;\n}\n\nexport default function SearchAndSortBar({\n searchTerm,\n onSearchChange,\n onClearSearch,\n onGlobalSort,\n sortConfig,\n searchInputPlaceholder = \"Buscar en todos los campos...\",\n}: SearchAndSortBarProps) {\n return (\n <div className=\"bg-gray-50 px-6 py-4 border-b border-gray-200\">\n <div className=\"flex items-center gap-4\">\n <SearchInput\n placeholder={searchInputPlaceholder}\n value={searchTerm}\n onChange={onSearchChange}\n />\n\n <SortButton sortConfig={sortConfig} onClick={onGlobalSort} />\n\n {searchTerm && (\n <ITButton\n size=\"small\"\n variant=\"outlined\"\n color=\"danger\"\n onClick={onClearSearch}\n ariaLabel=\"Limpiar búsqueda\"\n title=\"Limpiar búsqueda\"\n >\n <ITText as=\"span\">Limpiar</ITText>\n </ITButton>\n )}\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport SortButton from \"./SortButton\";\nimport ITText from \"@/components/text/text\";\n\ninterface TableHeaderCellProps {\n label: string;\n sortable?: boolean;\n onSort: () => void;\n sortConfig?: {\n key: string;\n direction: \"asc\" | \"desc\";\n };\n className?: string;\n}\n\nexport default function TableHeaderCell({\n label,\n sortable = false,\n onSort,\n sortConfig,\n className = \"\",\n}: TableHeaderCellProps) {\n return (\n <th className={className}>\n <div className=\"flex flex-col items-center gap-2 w-full\">\n <div className=\"flex items-center justify-center gap-2 w-full\">\n <ITText as=\"span\"\n className=\"inline-block w-[96%] text-sm font-medium text-white bg-slate-400 px-3 py-1.5 pb-2 rounded-lg text-center leading-tight\"\n style={{\n display: \"-webkit-box\",\n WebkitBoxOrient: \"vertical\",\n WebkitLineClamp:4,\n overflow: \"hidden\",\n }}\n>\n {label}\n</ITText>\n {sortable && <SortButton sortConfig={sortConfig} onClick={onSort} />}\n </div>\n </div>\n </th>\n );\n}\n","import React from \"react\";\nimport TableHeaderCell from \"./TableHeaderCell\";\nimport { SearchColumn } from \"../searchTable.props\";\n\ninterface TableHeaderProps<T> {\n columns: SearchColumn<T>[];\n onSort: (key: string) => void;\n sortConfig?: {\n key: string;\n direction: \"asc\" | \"desc\";\n };\n}\n\nexport default function TableHeader<T>({\n columns,\n onSort,\n sortConfig,\n}: TableHeaderProps<T>) {\n return (\n <thead>\n <tr className=\"bg-white border-b border-gray-200\">\n {columns.map((col) => (\n <TableHeaderCell\n key={col.key}\n label={col.label}\n sortable={col.sortable && col.type !== \"actions\"}\n onSort={() => onSort(col.key)}\n sortConfig={sortConfig?.key === col.key ? sortConfig : undefined}\n className=\"px-3 py-3 text-center align-middle\"\n />\n ))}\n </tr>\n </thead>\n );\n}\n","export const formatCurrencyMX = (value: number) => {\n return value.toLocaleString(\"es-MX\", {\n style: \"currency\",\n currency: \"MXN\",\n });\n};\n\nexport const getNestedValue = (obj: any, path: string) => {\n return path.split('.').reduce((acc, part) => acc && acc[part], obj);\n};\n","import { useEditableRow } from \"@/hooks/useEditableRow\";\nimport { formatCurrencyMX } from \"@/utils/table.utils\";\nimport clsx from \"clsx\";\nimport React from \"react\";\nimport { FaCheck, FaTimes } from \"react-icons/fa\";\nimport { SearchColumn } from \"../searchTable.props\";\nimport EditableCell from \"./EditableCell\";\nimport * as yup from \"yup\";\n\ninterface TableRowProps<T> {\n row: T;\n rowIndex: number;\n columns: SearchColumn<T>[];\n getNestedValue: (obj: unknown, path: string) => unknown;\n onSave?: (row: T) => void;\n onCancel?: () => void;\n validationSchema?: yup.ObjectSchema<any>;\n isEditing?: boolean;\n onEdit?: (row: T) => void;\n onDelete?: (row: T) => void;\n}\n\nexport default function TableRow<T>({\n row,\n rowIndex,\n columns,\n getNestedValue,\n onSave,\n onCancel,\n validationSchema,\n isEditing = false,\n onEdit,\n}: TableRowProps<T>) {\n const {\n editedRow,\n errors,\n isHovered,\n setIsHovered,\n hasErrors,\n handleEdit,\n handleSave,\n handleCancel,\n handleChange,\n } = useEditableRow({ row, columns, getNestedValue, validationSchema });\n\n const onEditAction = () => handleEdit(onEdit);\n const onSaveAction = () => handleSave(onSave);\n const onCancelAction = () => handleCancel(onCancel);\n\n const renderCellContent = (col: SearchColumn<T>, rowData: T) => {\n const value = getNestedValue(rowData, col.key);\n\n if (col.render) return col.render(rowData);\n\n switch (col.type) {\n case \"number\":\n return typeof value === \"number\" && col.currencyMX\n ? formatCurrencyMX(value)\n : (value as React.ReactNode);\n\n case \"boolean\":\n return value ? (\n <FaCheck\n className=\"text-green-500\"\n aria-label=\"Verdadero\"\n title=\"Verdadero\"\n />\n ) : (\n <FaTimes className=\"text-red-500\" aria-label=\"Falso\" title=\"Falso\" />\n );\n\n case \"actions\":\n if (isEditing && col.saveActions) {\n return col.saveActions(rowData, {\n onSave: onSaveAction,\n onCancel: onCancelAction,\n hasErrors,\n });\n } else if (col.actions) {\n return col.actions(rowData, { onEdit: onEditAction });\n }\n return null;\n\n case \"catalog\":\n if (col.catalogOptions) {\n const catalogItem = col.catalogOptions.data.find(\n (item) => item.id === value\n );\n return catalogItem?.name || (value as React.ReactNode);\n }\n return value as React.ReactNode;\n\n default:\n return value as React.ReactNode;\n }\n };\n\n return (\n <tr\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n className={`border-b border-gray-200 transition-colors duration-150 ${\n isEditing\n ? \"bg-slate-50\"\n : rowIndex % 2 === 0\n ? \"bg-white\"\n : \"bg-gray-50\"\n } ${isHovered && !isEditing ? \"bg-gray-100\" : \"\"}`}\n >\n {columns.map((col) => (\n <td\n key={`${rowIndex}-${col.key}`}\n className={clsx(\"pl-5 py-2\", col.className, {\n \"text-center\": col.type === \"actions\" || col.type === \"boolean\",\n })}\n >\n {isEditing && col.editable ? (\n <EditableCell\n column={col}\n value={getNestedValue(editedRow, col.key)}\n onChange={(value) => handleChange(col.key, value)}\n error={errors[col.key]}\n row={editedRow}\n />\n ) : (\n <div\n className={clsx({\n \"flex flex-col items-center justify-center gap-1 \":\n col.type === \"actions\",\n })}\n >\n {\n renderCellContent(\n col,\n isEditing ? editedRow : row\n ) as React.ReactNode\n }\n </div>\n )}\n </td>\n ))}\n </tr>\n );\n}\n","import React from \"react\";\nimport { SearchColumn } from \"../searchTable.props\";\nimport ITInput from \"@/components/input/input\";\nimport ITSelect from \"@/components/select/select\";\nimport ITDatePicker from \"@/components/date-picker/datePicker\";\nimport ITText from \"@/components/text/text\";\n\ninterface EditableCellProps<T> {\n column: SearchColumn<T>;\n value: any;\n onChange: (value: any, error?: string) => void;\n error?: string;\n row: T;\n}\n\nexport default function EditableCell<T>({\n column,\n value,\n onChange,\n error,\n row,\n}: EditableCellProps<T>) {\n const validate = (val: any) => {\n if (column.validation) return column.validation(val);\n return undefined;\n };\n\n const normalizeAndNotify = (input: any) => {\n let newValue = input;\n\n if (input && typeof input === \"object\" && \"target\" in input) {\n const t = input.target as HTMLInputElement;\n if (column.inputType === \"checkbox\") newValue = t.checked;\n else newValue = t.value;\n }\n\n if (column.inputType === \"number\") {\n newValue = newValue === \"\" || newValue === null ? \"\" : Number(newValue);\n }\n\n const errorMsg = validate(newValue);\n onChange(newValue, errorMsg);\n };\n\n const handleBlur = () => {\n const errorMsg = validate(value);\n onChange(value, errorMsg);\n };\n\n // Funciones de renderizado centralizadas\n const renderITInput = (type: \"text\" | \"number\") => {\n return (\n <ITInput\n type={type}\n name={column.key}\n value={type === \"number\" ? value ?? \"\" : value || \"\"}\n onChange={normalizeAndNotify}\n onBlur={handleBlur}\n className=\"w-full\"\n error={error}\n />\n );\n };\n\n const renderITDatePicker = () => {\n return (\n <ITDatePicker\n name={column.key}\n value={value || null}\n onChange={normalizeAndNotify}\n onBlur={handleBlur}\n className=\"w-full\"\n error={error}\n />\n );\n };\n\n const renderITSelect = (\n options: { value: any; label: string | number }[]\n ) => {\n return (\n <ITSelect\n name={column.key}\n options={options as any}\n value={value}\n onChange={normalizeAndNotify}\n onBlur={handleBlur as any}\n className=\"w-full\"\n error={error}\n />\n );\n };\n\n const renderBooleanInput = () => {\n return (\n <ITInput\n type=\"checkbox\"\n name={column.key}\n checked={!!value}\n onChange={(e) => {\n normalizeAndNotify(e.target.checked);\n }}\n onBlur={handleBlur}\n className=\"w-full\"\n error={error}\n />\n );\n };\n\n // Función principal que decide qué componente renderizar\n const renderInput = () => {\n const inputType = column.inputType || column.type;\n\n switch (inputType) {\n case \"number\":\n return renderITInput(\"number\");\n\n case \"select\":\n return renderITSelect(column.options || []);\n\n case \"checkbox\":\n case \"boolean\":\n return renderBooleanInput();\n\n case \"date\":\n return renderITDatePicker();\n\n case \"catalog\":\n if (column.catalogOptions) {\n const options = column.catalogOptions.data.map((item) => ({\n value: item[column.catalogOptions.key || \"id\"],\n label: item[column.catalogOptions.label || \"name\"],\n }));\n return renderITSelect(options);\n }\n return renderITInput(\"text\"); // fallback si no hay catalogOptions\n\n default:\n return renderITInput(\"text\");\n }\n };\n\n return (\n <div className=\"w-full\">\n {renderInput()}\n {error && <div className=\"text-red-500 text-xs mt-1\"><ITText as=\"span\">{error}</ITText></div>}\n </div>\n );\n}\n","import React from \"react\";\nimport ITText from \"@/components/text/text\";\n\ninterface TableEmptyStateProps {\n colSpan: number;\n searchTerm: string;\n}\n\nexport default function TableEmptyState({\n colSpan,\n searchTerm,\n}: TableEmptyStateProps) {\n return (\n <tr>\n <td colSpan={colSpan} className=\"px-6 py-4 text-center\">\n {searchTerm\n ? <ITText as=\"span\">No se encontraron resultados para tu búsqueda</ITText>\n : <ITText as=\"span\">No se encontraron resultados</ITText>}\n </td>\n </tr>\n );\n}\n","import React from \"react\";\nimport { FaArrowLeft, FaArrowRight } from \"react-icons/fa\";\nimport PaginationInfo from \"./PaginationInfo\";\nimport ITSelect from \"@/components/select/select\";\nimport ITButton from \"@/components/button/button\";\nimport ITText from \"@/components/text/text\";\n\ninterface PaginationControlsProps {\n pageIndex: number;\n totalPages: number;\n hasPreviousPage: boolean;\n hasNextPage: boolean;\n onPageChange: (page: number) => void;\n itemsPerPage: number;\n itemsPerPageOptions: number[];\n onItemsPerPageChange: (value: number) => void;\n currentCount: number;\n totalCount: number;\n}\n\nexport default function PaginationControls({\n pageIndex,\n totalPages,\n hasPreviousPage,\n hasNextPage,\n onPageChange,\n itemsPerPage,\n itemsPerPageOptions,\n onItemsPerPageChange,\n currentCount,\n totalCount,\n}: PaginationControlsProps) {\n return (\n <div className=\"flex flex-col sm:flex-row justify-between items-center gap-4\">\n <div className=\"flex items-center space-x-4\">\n <PaginationInfo currentCount={currentCount} totalCount={totalCount} />\n\n <div className=\"flex items-center space-x-2\">\n <ITText as=\"span\" className=\"text-sm text-gray-700\">Mostrar:</ITText>\n <ITSelect\n name=\"itemsPerPage\"\n options={itemsPerPageOptions.map((option) => ({\n value: String(option),\n label: String(option),\n }))}\n value={String(itemsPerPage)}\n onChange={(e) => onItemsPerPageChange(Number(e.target.value))}\n onBlur={() => {}}\n size=\"small\"\n className=\"w-20\"\n />\n </div>\n </div>\n\n <div className=\"flex items-center space-x-2\">\n <ITButton\n color=\"secondary\"\n size=\"small\"\n onClick={() => onPageChange(pageIndex - 1)}\n disabled={!hasPreviousPage}\n className=\"min-w-[32px]\"\n ariaLabel=\"Página anterior\"\n title=\"Ir a la página anterior\"\n >\n <FaArrowLeft aria-hidden=\"true\" />\n </ITButton>\n\n <ITText as=\"span\" className=\"px-4 py-2 text-sm text-gray-700\" aria-live=\"polite\">\n Página {pageIndex} de {totalPages}\n </ITText>\n\n <ITButton\n size=\"small\"\n color=\"secondary\"\n onClick={() => onPageChange(pageIndex + 1)}\n disabled={!hasNextPage}\n className=\"min-w-[32px]\"\n ariaLabel=\"Página siguiente\"\n title=\"Ir a la página siguiente\"\n >\n <FaArrowRight aria-hidden=\"true\" />\n </ITButton>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport ITText from \"@/components/text/text\";\n\ninterface PaginationInfoProps {\n currentCount: number;\n totalCount: number;\n className?: string;\n}\n\nexport default function PaginationInfo({\n currentCount,\n totalCount,\n className = \"\",\n}: PaginationInfoProps) {\n return (\n <ITText as=\"span\" className={`text-sm text-gray-700 ${className}`}>\n Mostrando {currentCount} de {totalCount} resultados\n </ITText>\n );\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport { FaChevronDown } from \"react-icons/fa\";\nimport { ITNavigationItem, ITSidebarProps } from \"./sidebar.props\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITSidebar({\n navigationItems = [],\n isCollapsed = false,\n onToggleCollapse,\n className = \"\",\n visibleOnMobile = false,\n onItemClick,\n onSubItemClick,\n subitemConnector = 'dot',\n}: ITSidebarProps) {\n const [expandedItems, setExpandedItems] = useState<Set<string>>(new Set());\n const [isHovering, setIsHovering] = useState(false);\n const sidebarRef = useRef<HTMLDivElement>(null);\n const hoverTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const leaveTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n const handleMouseEnter = () => {\n if (hoverTimeoutRef.current) clearTimeout(hoverTimeoutRef.current);\n if (leaveTimeoutRef.current) clearTimeout(leaveTimeoutRef.current);\n setIsHovering(true);\n };\n\n const handleMouseLeave = () => {\n leaveTimeoutRef.current = setTimeout(() => {\n setIsHovering(false);\n }, 300);\n };\n\n const sidebar = sidebarRef.current;\n if (sidebar) {\n sidebar.addEventListener(\"mouseenter\", handleMouseEnter);\n sidebar.addEventListener(\"mouseleave\", handleMouseLeave);\n }\n return () => {\n if (sidebar) {\n sidebar.removeEventListener(\"mouseenter\", handleMouseEnter);\n sidebar.removeEventListener(\"mouseleave\", handleMouseLeave);\n }\n if (hoverTimeoutRef.current) clearTimeout(hoverTimeoutRef.current);\n if (leaveTimeoutRef.current) clearTimeout(leaveTimeoutRef.current);\n };\n }, [isCollapsed]);\n\n // Auto-expand parent items when a subitem is active\n useEffect(() => {\n const activeParents = new Set<string>();\n navigationItems.forEach(item => {\n if (item.subitems && item.subitems.some(sub => sub.isActive)) {\n activeParents.add(item.id);\n }\n });\n\n if (activeParents.size > 0) {\n setExpandedItems(prev => {\n const next = new Set(prev);\n let changed = false;\n activeParents.forEach(id => {\n if (!next.has(id)) {\n next.add(id);\n changed = true;\n }\n });\n return changed ? next : prev;\n });\n }\n }, [navigationItems]);\n\n const toggleExpanded = (itemId: string) => {\n const newExpanded = new Set(expandedItems);\n if (newExpanded.has(itemId)) newExpanded.delete(itemId);\n else newExpanded.add(itemId);\n setExpandedItems(newExpanded);\n };\n\n const handleItemClick = (item: ITNavigationItem) => {\n if (item.subitems && item.subitems.length > 0) {\n toggleExpanded(item.id);\n } else {\n if (item.action) item.action();\n if (onItemClick) onItemClick(item);\n }\n };\n\n const isSidebarCollapsed = visibleOnMobile ? false : (!isHovering && isCollapsed);\n const sidebarWidth = isSidebarCollapsed ? \"w-[88px]\" : \"w-[280px]\";\n\n return (\n <aside\n ref={sidebarRef}\n className={`\n relative flex flex-col \n transition-all duration-400 ease-[cubic-bezier(0.2,0,0,1)]\n ${sidebarWidth}\n ${className}\n ${!visibleOnMobile ? \"hidden lg:flex\" : \"flex\"}\n shadow-[4px_0_24px_rgba(0,0,0,0.02)]\n `}\n style={{\n zIndex: 50,\n backgroundColor: \"var(--sidebar-bg, rgba(255, 255, 255, 0.90))\",\n borderRight: \"1px solid var(--sidebar-border, #e2e8f0)\",\n WebkitBackdropFilter: 'blur(12px)',\n backdropFilter: 'blur(12px)',\n }}\n >\n {/* Navigation Items */}\n <nav className=\"flex-1 py-6 overflow-y-auto overflow-x-hidden custom-scrollbar px-4\">\n <ul className=\"space-y-2\">\n {navigationItems.map((item) => (\n <li key={item.id} className=\"relative group/navitem\">\n <div\n className={`flex items-center cursor-pointer \n transition-all duration-300 ease-[cubic-bezier(0.2,0,0,1)]\n rounded-xl relative overflow-visible\n ${isSidebarCollapsed ? \"justify-center p-2.5 mb-2\" : \"justify-between px-3.5 py-3 mb-1\"}\n `}\n style={{\n backgroundColor: item.isActive ? \"var(--sidebar-active-bg, #f8fafc)\" : 'transparent',\n boxShadow: item.isActive ? '0 1px 2px 0 rgba(0, 0, 0, 0.05)' : 'none',\n border: item.isActive ? \"1px solid var(--sidebar-border, #e2e8f0)\" : '1px solid transparent'\n }}\n onMouseEnter={(e) => {\n if (!item.isActive) e.currentTarget.style.backgroundColor = \"var(--sidebar-hover-bg, #f1f5f9)\";\n }}\n onMouseLeave={(e) => {\n if (!item.isActive) e.currentTarget.style.backgroundColor = 'transparent';\n }}\n onClick={() => handleItemClick(item)}\n >\n {item.isActive && !isSidebarCollapsed && (\n <div\n className=\"absolute left-0 top-1/4 bottom-1/4 w-[3px] rounded-r-full transition-all\"\n style={{ backgroundColor: \"var(--sidebar-active-icon, #10b981)\", boxShadow: \"0 0 10px var(--sidebar-active-icon, #10b981)\" }}\n />\n )}\n\n <div className={`flex items-center ${!isSidebarCollapsed ? \"gap-3.5\" : \"justify-center\"} relative z-10 w-full`}>\n {item.icon && (\n <div\n className={`transition-all duration-300 flex-shrink-0 flex items-center justify-center`}\n style={{\n color: item.isActive ? \"var(--sidebar-active-icon, #10b981)\" : \"var(--sidebar-icon-color, #9ca3af)\",\n opacity: item.isActive ? 1 : 0.8,\n fontSize: item.isActive ? '1.35rem' : '1.25rem',\n filter: item.isActive ? 'drop-shadow(0 0 8px rgba(255,255,255,0.2))' : 'none'\n }}\n >\n {item.icon}\n </div>\n )}\n\n {!isSidebarCollapsed && (\n <ITText as=\"span\"\n className={`transition-all duration-300 truncate tracking-wide`}\n style={{\n color: item.isActive ? \"var(--sidebar-active-color, #ffffff)\" : \"var(--sidebar-label-color, #d1d5db)\",\n fontSize: '0.9rem',\n fontWeight: item.isActive ? '600' : '500'\n }}\n >\n {item.label}\n </ITText>\n )}\n </div>\n\n {!isSidebarCollapsed && item.subitems && item.subitems.length > 0 && (\n <div className={`flex-shrink-0 transition-transform duration-300 ease-[cubic-bezier(0.2,0,0,1)] ${expandedItems.has(item.id) ? \"rotate-180\" : \"\"}`}\n style={{ color: item.isActive ? \"var(--sidebar-active-color, #0f172a)\" : \"var(--sidebar-icon-color, #64748b)\", opacity: 0.7 }}>\n <FaChevronDown className=\"w-3 h-3\" />\n </div>\n )}\n\n {item.badge && (\n <span\n className={`\n absolute flex items-center justify-center font-bold shadow-md\n ${isSidebarCollapsed\n ? \"top-1 right-1 w-2.5 h-2.5 rounded-full ring-2 ring-white\"\n : \"right-3 top-1/2 transform -translate-y-1/2 px-2 py-0.5 text-[10px] rounded-full backdrop-blur-sm\"}\n `}\n style={{\n backgroundColor: \"var(--sidebar-badge-bg, #10b981)\",\n color: \"var(--sidebar-badge-color, #ffffff)\",\n boxShadow: isSidebarCollapsed ? \"0 0 0 2px var(--sidebar-bg, #111827)\" : 'none'\n }}\n >\n {isSidebarCollapsed ? \"\" : item.badge}\n </span>\n )}\n </div>\n\n {/* Glassmorphism Collapsed Tooltip / Submenu */}\n {isSidebarCollapsed && (\n <div\n className=\"absolute left-full top-0 ml-4 rounded-2xl opacity-0 invisible group-hover/navitem:opacity-100 group-hover/navitem:visible transition-all duration-300 pointer-events-none z-50 min-w-[220px] overflow-hidden -translate-x-2 group-hover/navitem:translate-x-0 shadow-[0_10px_40px_-10px_rgba(0,0,0,0.15)]\"\n style={{\n backgroundColor: \"var(--sidebar-bg, #ffffff)\",\n border: \"1px solid var(--sidebar-border, #e2e8f0)\",\n WebkitBackdropFilter: 'blur(16px)',\n backdropFilter: 'blur(16px)',\n }}\n >\n <div className=\"px-5 py-4 flex items-center gap-3 font-semibold border-b\" style={{ borderColor: \"var(--sidebar-border, #e2e8f0)\", color: \"var(--sidebar-active-color, #0f172a)\" }}>\n {item.icon && <span style={{ color: \"var(--sidebar-active-icon, #10b981)\" }} className=\"text-xl drop-shadow-sm\">{item.icon}</span>}\n <ITText as=\"span\" className=\"tracking-wide text-[15px]\">{item.label}</ITText>\n </div>\n\n {item.subitems && item.subitems.length > 0 ? (\n <div className=\"py-2\">\n {item.subitems.map((subitem) => (\n <div\n key={subitem.id}\n className={`px-5 py-2.5 text-sm flex items-center gap-3 transition-colors relative`}\n >\n {subitem.isActive && subitemConnector === '|' && (\n <div\n className=\"absolute left-0 top-1/3 bottom-1/3 w-[2.5px] rounded-r-full\"\n style={{\n backgroundColor: \"var(--sidebar-active-icon, #10b981)\",\n boxShadow: \"0 0 6px color-mix(in srgb, var(--sidebar-active-icon, #10b981) 25%, transparent)\",\n }}\n />\n )}\n <span className={`w-1.5 h-1.5 rounded-full transition-all ${subitem.isActive ? \"scale-125\" : \"\"}`} style={{ backgroundColor: subitem.isActive ? \"var(--sidebar-active-icon, #10b981)\" : \"var(--sidebar-icon-color, #94a3b8)\" }} />\n <ITText as=\"span\" style={{ color: subitem.isActive ? \"var(--sidebar-active-color, #0f172a)\" : \"var(--sidebar-label-color, #475569)\", fontWeight: subitem.isActive ? 600 : 500 }}>{subitem.label}</ITText>\n </div>\n ))}\n </div>\n ) : (\n <ITText as=\"div\" className=\"px-5 py-3 text-sm italic\" style={{ color: \"var(--sidebar-label-color, #71717a)\" }}>No hay submenú</ITText>\n )}\n </div>\n )}\n\n {/* Submenu - smooth height/opacity when not collapsed */}\n {!isSidebarCollapsed && item.subitems && item.subitems.length > 0 && (\n <div className={`overflow-hidden transition-all duration-400 ease-[cubic-bezier(0.2,0,0,1)] ${expandedItems.has(item.id) ? \"max-h-[500px] opacity-100 mt-1\" : \"max-h-0 opacity-0\"}`}>\n <ul\n className=\"ml-5 flex flex-col gap-0.5 py-1\"\n style={{\n borderLeft: subitemConnector === '|'\n ? \"1px solid var(--sidebar-border, #e2e8f0)\"\n : 'none'\n }}\n >\n {item.subitems.map((subitem) => (\n <li key={subitem.id} className=\"relative\">\n <button\n onClick={() => {\n if (subitem.action) subitem.action();\n if (onSubItemClick) onSubItemClick(subitem);\n }}\n className={`flex items-center gap-2.5 w-full text-left px-3 py-2 rounded-xl transition-all duration-300`}\n style={{\n color: subitem.isActive ? \"var(--sidebar-active-color, #0f172a)\" : \"var(--sidebar-label-color, #475569)\",\n backgroundColor: subitem.isActive ? \"var(--sidebar-active-bg, #f8fafc)\" : 'transparent',\n fontSize: '0.85rem',\n fontWeight: subitem.isActive ? 600 : 500,\n letterSpacing: '0.01em',\n marginLeft: subitemConnector === '|' ? '-1px' : '0',\n }}\n onMouseEnter={(e) => {\n if (!subitem.isActive) {\n e.currentTarget.style.backgroundColor = \"var(--sidebar-hover-bg, #f1f5f9)\";\n e.currentTarget.style.transform = 'translateX(3px)';\n }\n }}\n onMouseLeave={(e) => {\n if (!subitem.isActive) {\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.transform = 'translateX(0)';\n }\n }}\n >\n {subitem.isActive && subitemConnector === '|' && (\n <div\n className=\"absolute left-0 top-1/3 bottom-1/3 w-[2.5px] rounded-r-full transition-all\"\n style={{\n backgroundColor: \"var(--sidebar-active-icon, #10b981)\",\n boxShadow: \"0 0 6px color-mix(in srgb, var(--sidebar-active-icon, #10b981) 25%, transparent)\",\n }}\n />\n )}\n {subitemConnector === 'dot' && (\n <span\n className={`w-1.5 h-1.5 rounded-full flex-shrink-0 transition-all duration-300 ${subitem.isActive ? 'scale-125' : ''}`}\n style={{\n backgroundColor: subitem.isActive\n ? \"var(--sidebar-active-icon, #10b981)\"\n : \"var(--sidebar-icon-color, #94a3b8)\"\n }}\n />\n )}\n <ITText as=\"span\" className=\"truncate\">{subitem.label}</ITText>\n </button>\n </li>\n ))}\n </ul>\n </div>\n )}\n </li>\n ))}\n </ul>\n </nav>\n </aside>\n );\n}","import { useState, useEffect } from \"react\";\nimport clsx from \"clsx\";\nimport { ITSlideToggleProps } from \"./slide.props\";\nimport { theme } from \"@/theme/theme\";\n\n/**\n * Slide toggle switch component.\n * Supports fully controlled (`isOn`) or uncontrolled (`initialState`) modes.\n */\nexport default function ITSlideToggle({\n onToggle,\n isOn: controlledIsOn,\n initialState = false,\n activeColor = \"success\",\n inactiveColor = \"#9ca3af\", // default gray-400\n disabled = false,\n size = \"md\",\n className = \"\",\n}: ITSlideToggleProps) {\n // Handle internal state if not controlled\n const isControlled = controlledIsOn !== undefined;\n const [internalIsOn, setInternalIsOn] = useState(initialState);\n\n // Sync internal state with controlled state if it changes externally\n useEffect(() => {\n if (isControlled) {\n setInternalIsOn(controlledIsOn);\n }\n }, [controlledIsOn, isControlled]);\n\n const isOn = isControlled ? controlledIsOn : internalIsOn;\n\n const toggleSwitch = () => {\n if (disabled) return;\n \n const newState = !isOn;\n if (!isControlled) {\n setInternalIsOn(newState);\n }\n if (onToggle) {\n onToggle(newState);\n }\n };\n\n // Resolve active theme color\n const isThemeColor = activeColor in theme.colors;\n const resolvedActiveColor = isThemeColor\n ? theme.colors[activeColor as keyof typeof theme.colors][500]\n : activeColor;\n\n // Resolve inactive color (could also be theme color, but defaulting to hex)\n const isInactiveThemeColor = inactiveColor in theme.colors;\n const resolvedInactiveColor = isInactiveThemeColor\n ? theme.colors[inactiveColor as keyof typeof theme.colors][400]\n : inactiveColor;\n\n const backgroundColor = isOn ? resolvedActiveColor : resolvedInactiveColor;\n\n // Sizing definitions\n const sizeClasses = {\n sm: {\n container: \"w-10 h-5\",\n knob: \"w-3.5 h-3.5\",\n translate: \"translate-x-5\",\n },\n md: {\n container: \"w-14 h-7\",\n knob: \"w-5 h-5\",\n translate: \"translate-x-7\",\n },\n lg: {\n container: \"w-16 h-8\",\n knob: \"w-6 h-6\",\n translate: \"translate-x-8\",\n },\n };\n\n const { container, knob, translate } = sizeClasses[size];\n\n return (\n <div\n onClick={toggleSwitch}\n className={clsx(\n \"flex items-center rounded-full p-1 transition-colors duration-300\",\n container,\n disabled ? \"opacity-50 cursor-not-allowed\" : \"cursor-pointer\",\n className\n )}\n style={{ backgroundColor }}\n role=\"switch\"\n aria-checked={isOn}\n tabIndex={disabled ? -1 : 0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n toggleSwitch();\n }\n }}\n >\n <div\n className={clsx(\n \"bg-white rounded-full shadow-md transform transition-transform duration-300 pointer-events-none\",\n knob,\n isOn ? translate : \"translate-x-0\"\n )}\n />\n </div>\n );\n}\n","import clsx from \"clsx\";\nimport { ITSliderProps } from \"./slider.props\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITSlider({\n value,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n label,\n disabled = false,\n className,\n}: ITSliderProps) {\n return (\n <div className={clsx(\"flex flex-col gap-1.5\", className)}>\n {label && (\n <ITText as=\"label\" className=\"text-xs font-semibold text-gray-600 dark:text-gray-400\">\n {label}: {value}\n </ITText>\n )}\n <div className=\"relative w-full h-5 flex items-center\">\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={value}\n onChange={(e) => onChange(Number(e.target.value))}\n disabled={disabled}\n className={clsx(\n \"w-full h-1.5 appearance-none rounded-full outline-none cursor-pointer\",\n \"bg-gray-200 dark:bg-gray-700\",\n \"accent-primary-500\",\n \"disabled:opacity-50 disabled:cursor-not-allowed\",\n \"[&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:w-4 [&::-webkit-slider-thumb]:h-4\",\n \"[&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:bg-primary-500\",\n \"[&::-webkit-slider-thumb]:shadow-md [&::-webkit-slider-thumb]:border-2 [&::-webkit-slider-thumb]:border-white\",\n \"[&::-webkit-slider-thumb]:hover:bg-primary-600 [&::-webkit-slider-thumb]:transition-colors\",\n \"[&::-moz-range-thumb]:w-4 [&::-moz-range-thumb]:h-4 [&::-moz-range-thumb]:rounded-full\",\n \"[&::-moz-range-thumb]:bg-primary-500 [&::-moz-range-thumb]:border-2 [&::-moz-range-thumb]:border-white\",\n \"[&::-moz-range-track]:bg-gray-200 dark:[&::-moz-range-track]:bg-gray-700\",\n \"[&::-moz-range-track]:rounded-full [&::-moz-range-track]:h-1.5\"\n )}\n />\n </div>\n </div>\n );\n}\n","import clsx from \"clsx\";\nimport { ITStatCardProps } from \"./stat-card.props\";\nimport ITText from \"@/components/text/text\";\n\nconst trendColors = {\n up: \"text-emerald-600 bg-emerald-50 dark:text-emerald-400 dark:bg-emerald-950/30\",\n down: \"text-rose-600 bg-rose-50 dark:text-rose-400 dark:bg-rose-950/30\",\n neutral: \"text-slate-500 bg-slate-100 dark:text-slate-400 dark:bg-slate-800\",\n};\n\nexport default function ITStatCard({\n label,\n value,\n trend,\n trendDirection = trend && trend.startsWith(\"-\") ? \"down\" : \"neutral\",\n icon,\n color = \"bg-primary-50 dark:bg-primary-950/20\",\n className,\n style,\n onClick,\n}: ITStatCardProps) {\n return (\n <div\n className={clsx(\"rounded-xl p-4 border border-slate-100 dark:border-slate-800\", color, className)}\n style={style}\n onClick={onClick}\n role={onClick ? \"button\" : undefined}\n tabIndex={onClick ? 0 : undefined}\n >\n <div className=\"flex items-start justify-between mb-1\">\n <ITText as=\"span\" className=\"text-xs font-medium text-slate-400 dark:text-slate-500\">{label}</ITText>\n {icon && <span className=\"text-slate-400\">{icon}</span>}\n </div>\n <div className=\"flex items-baseline gap-2\">\n <ITText as=\"span\" className=\"text-2xl font-bold text-slate-800 dark:text-white\">{value}</ITText>\n {trend && (\n <ITText as=\"span\" className={clsx(\"text-[11px] font-semibold px-1.5 py-0.5 rounded-md\", trendColors[trendDirection])}>\n {trend}\n </ITText>\n )}\n </div>\n </div>\n );\n}\n","import clsx from \"clsx\";\nimport { ITTextareaProps } from \"./textarea.props\";\nimport { inputLabel, inputError } from \"@/utils/styles\";\nimport ITText from \"@/components/text/text\";\n\nconst resizeMap = {\n none: \"resize-none\",\n vertical: \"resize-y\",\n horizontal: \"resize-x\",\n both: \"resize\",\n};\n\nexport default function ITTextarea({\n value,\n onChange,\n label,\n placeholder,\n rows = 4,\n disabled = false,\n error,\n className,\n name,\n maxLength,\n resize = \"vertical\",\n}: ITTextareaProps) {\n return (\n <div className={clsx(\"flex flex-col gap-1.5\", className)}>\n {label && (\n <ITText as=\"label\" className={inputLabel(!!error)} htmlFor={name}>\n {label}\n </ITText>\n )}\n <textarea\n id={name}\n name={name}\n value={value}\n onChange={(e) => onChange?.(e.target.value)}\n placeholder={placeholder}\n rows={rows}\n disabled={disabled}\n maxLength={maxLength}\n className={clsx(\n \"w-full border border-solid transition-all duration-200 rounded-lg px-3 py-2 text-sm outline-none\",\n \"focus:ring-2\",\n resizeMap[resize],\n error\n ? \"border-red-500 ring-red-100 focus:border-red-500 focus:ring-red-100\"\n : \"border-gray-300 focus:border-primary-500 focus:ring-primary-100\",\n disabled && \"opacity-50 cursor-not-allowed bg-gray-100 dark:bg-slate-800\"\n )}\n />\n {error && <ITText as=\"span\" className={inputError}>{error}</ITText>}\n </div>\n );\n}\n","import clsx from \"clsx\";\nimport { ITTripleFilterProps } from \"./tripleFilter.props\";\nimport { ColorsTypes } from \"@/types/colors.types\";\nimport ITText from \"@/components/text/text\";\n\nconst colorMap: Record<ColorsTypes, string> = {\n primary: \"text-primary-600\",\n secondary: \"text-secondary-600\",\n success: \"text-success-600\",\n danger: \"text-danger-600\",\n warning: \"text-warning-600\",\n info: \"text-info-600\",\n purple: \"text-purple-600\",\n error: \"text-danger-600\",\n gray: \"text-secondary-600\",\n};\n\n/**\n * @description Generic triple/segmented filter component with color support.\n */\nexport const ITTripleFilter = <T extends string | boolean>({\n value,\n onChange,\n options,\n color = \"primary\",\n className,\n}: ITTripleFilterProps<T>) => {\n return (\n <div\n className={clsx(\"flex bg-slate-100 p-1 rounded-xl gap-1 w-fit\", className)}\n >\n {options.map((option) => (\n <button\n key={String(option.value)}\n onClick={() => onChange(option.value)}\n className={clsx(\n \"px-4 py-1.5 rounded-lg text-[10px] font-bold uppercase tracking-wider transition-all duration-200 whitespace-nowrap\",\n value === option.value\n ? clsx(\"bg-white shadow-sm\", colorMap[color])\n : \"text-slate-400 hover:text-slate-600\"\n )}\n >\n <ITText as=\"span\">{option.label}</ITText>\n </button>\n ))}\n </div>\n );\n};\n\nexport default ITTripleFilter;\n","export const positionStyles = {\n \"top-right\": \"top-4 right-4\",\n \"top-center\": \"top-4 left-1/2 transform -translate-x-1/2\",\n \"top-left\": \"top-4 left-4\",\n \"bottom-right\": \"bottom-4 right-4\",\n \"bottom-center\": \"bottom-4 left-1/2 transform -translate-x-1/2\",\n \"bottom-left\": \"bottom-4 left-4\",\n};\n","import { positionStyles } from \"@/types/toast.types\";\nimport { theme } from \"@/theme/theme\";\nimport clsx from \"clsx\";\nimport { useEffect, useState } from \"react\";\nimport \"./toast.css\";\nimport { ITToastProps } from \"./toast.props\";\nimport { FaTimesCircle, FaCheckCircle, FaExclamationTriangle, FaInfoCircle, FaTimes } from \"react-icons/fa\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITToast({\n message,\n type = \"info\",\n duration = 1500,\n position = \"top-right\",\n onClose,\n}: ITToastProps) {\n const [isVisible, setIsVisible] = useState(true);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setIsVisible(false);\n setTimeout(() => {\n if (onClose) onClose();\n }, 300); // Wait for transition to finish\n }, duration);\n\n return () => clearTimeout(timer);\n }, [duration, onClose]);\n\n const handleClose = () => {\n setIsVisible(false);\n setTimeout(() => {\n if (onClose) onClose();\n }, 300);\n };\n\n // Resolve dynamic theme colors for background\n const isThemeColor = type in theme.colors;\n const backgroundColor = isThemeColor\n ? theme.colors[type as keyof typeof theme.colors][500]\n : theme.colors.primary[500];\n\n // Determine Icon based on type\n const TypeIcon = () => {\n switch (type) {\n case \"success\":\n return <FaCheckCircle className=\"w-5 h-5 flex-shrink-0\" />;\n case \"error\":\n case \"danger\":\n return <FaTimesCircle className=\"w-5 h-5 flex-shrink-0\" />;\n case \"warning\":\n return <FaExclamationTriangle className=\"w-5 h-5 flex-shrink-0\" />;\n case \"info\":\n default:\n return <FaInfoCircle className=\"w-5 h-5 flex-shrink-0\" />;\n }\n };\n\n return (\n <div\n className={clsx(\n \"fixed z-50 p-4 rounded-xl shadow-xl flex items-center justify-between gap-4 transition-all duration-300 text-white min-w-[300px]\",\n positionStyles[position],\n {\n \"opacity-100 translate-y-0 scale-100\": isVisible,\n \"opacity-0 scale-95\": !isVisible,\n \"-translate-y-4\": !isVisible && position.startsWith(\"top\"),\n \"translate-y-4\": !isVisible && position.startsWith(\"bottom\"),\n }\n )}\n style={{ backgroundColor }}\n role=\"alert\"\n >\n <div className=\"flex items-center gap-3\">\n <TypeIcon />\n <ITText as=\"span\" className=\"font-medium text-sm sm:text-base leading-snug\">{message}</ITText>\n </div>\n <button\n onClick={handleClose}\n className=\"p-1.5 rounded-full hover:bg-black/15 transition-colors focus:outline-none focus:ring-2 focus:ring-white/50\"\n aria-label=\"Close notification\"\n >\n <FaTimes className=\"w-4 h-4\" />\n </button>\n </div>\n );\n}\n","import React, { useState, useEffect, useRef } from \"react\";\nimport { useDropzone } from \"react-dropzone\";\n// import pdfjsLib from \"@/hooks/pdf\"; // Disabled as hook is missing\nimport clsx from \"clsx\";\nimport ITText from \"@/components/text/text\";\n\n/** Enum con tipos de archivo permitidos */\nexport enum FileTypeEnum {\n PDF = \"application/pdf\",\n XLS = \"application/vnd.ms-excel\",\n XLSX = \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n CSV = \"text/csv\",\n PNG = \"image/png\",\n JPG = \"image/jpg\",\n JPEG = \"image/jpeg\",\n}\n\n/** Enum para el estado de subida */\nexport enum UploadStatus {\n PENDING = \"pendiente\",\n UPLOADING = \"subiendo\",\n UPLOADED = \"subido\",\n ERROR = \"error\",\n}\n\n/** Props del componente */\nexport interface ITDropfileProps {\n onFileSelect: (file: File | null) => void;\n onCancel?: () => void;\n onSubmit?: (file: File) => void;\n acceptedFileTypes?: FileTypeEnum[];\n contentClassName?: string;\n containerClassName?: string;\n showStatusBadge?: boolean;\n uploadStatus?: UploadStatus;\n onStatusChange?: (status: UploadStatus) => void;\n initialPreviewUrl?: string | null;\n}\n\nconst ITDropfile: React.FC<ITDropfileProps> = ({\n onFileSelect,\n onCancel,\n onSubmit,\n contentClassName,\n containerClassName,\n acceptedFileTypes = [FileTypeEnum.PDF, FileTypeEnum.XLS, FileTypeEnum.XLSX, FileTypeEnum.JPG, FileTypeEnum.PNG, FileTypeEnum.JPEG],\n showStatusBadge = true,\n uploadStatus: externalStatus,\n onStatusChange,\n initialPreviewUrl,\n}) => {\n const [selectedFile, setSelectedFile] = useState<File | null>(null);\n const [fileType, setFileType] = useState<string | null>(null);\n // Initialize preview with prop if available\n const [imagePreview, setImagePreview] = useState<string | null>(initialPreviewUrl || null);\n const [isConfirmed, setIsConfirmed] = useState(false);\n // If initial URL exists, assume uploaded\n const [internalUploadStatus, setInternalUploadStatus] = useState<UploadStatus>(\n initialPreviewUrl ? UploadStatus.UPLOADED : UploadStatus.PENDING\n );\n const canvasRef = useRef<HTMLCanvasElement | null>(null);\n\n // Sync initialPreviewUrl if it changes\n useEffect(() => {\n if (initialPreviewUrl && !selectedFile) {\n setImagePreview(initialPreviewUrl);\n if (externalStatus === undefined) setInternalUploadStatus(UploadStatus.UPLOADED);\n }\n }, [initialPreviewUrl, selectedFile, externalStatus]);\n\n // Determinar qué estado usar (interno o externo)\n const uploadStatus = externalStatus || internalUploadStatus;\n\n // Función para actualizar el estado\n const setUploadStatus = (status: UploadStatus) => {\n if (externalStatus === undefined) {\n setInternalUploadStatus(status);\n }\n onStatusChange?.(status);\n };\n\n // 🔹 Configuración correcta para react-dropzone\n const getAcceptedFileTypes = () => {\n const accept: Record<string, string[]> = {};\n \n acceptedFileTypes.forEach(type => {\n switch (type) {\n case FileTypeEnum.PDF:\n accept[FileTypeEnum.PDF] = [\".pdf\"];\n break;\n case FileTypeEnum.XLS:\n accept[FileTypeEnum.XLS] = [\".xls\"];\n break;\n case FileTypeEnum.XLSX:\n accept[FileTypeEnum.XLSX] = [\".xlsx\"];\n break;\n case FileTypeEnum.CSV:\n accept[FileTypeEnum.CSV] = [\".csv\"];\n break;\n case FileTypeEnum.PNG:\n accept[FileTypeEnum.PNG] = [\".png\"];\n break;\n case FileTypeEnum.JPG:\n accept[FileTypeEnum.JPG] = [\".jpg\", \".jpeg\"];\n break;\n case FileTypeEnum.JPEG:\n accept[FileTypeEnum.JPEG] = [\".jpeg\", \".jpg\"];\n break;\n }\n });\n \n return accept;\n };\n\n // 🔹 Obtener extensiones para mostrar en el label\n const getFileExtensions = () => {\n const extensions: string[] = [];\n \n acceptedFileTypes.forEach(type => {\n switch (type) {\n case FileTypeEnum.PDF:\n if (!extensions.includes(\"PDF\")) extensions.push(\"PDF\");\n break;\n case FileTypeEnum.XLS:\n case FileTypeEnum.XLSX:\n if (!extensions.includes(\"EXCEL\")) extensions.push(\"EXCEL\");\n break;\n case FileTypeEnum.CSV:\n if (!extensions.includes(\"CSV\")) extensions.push(\"CSV\");\n break;\n case FileTypeEnum.PNG:\n case FileTypeEnum.JPG:\n case FileTypeEnum.JPEG:\n if (!extensions.includes(\"IMAGEN\")) extensions.push(\"IMAGEN\");\n break;\n }\n });\n \n return extensions.join(\", \");\n };\n\n // Componente para el badge de estado\n const StatusBadge = ({ status }: { status: UploadStatus }) => {\n const config = {\n [UploadStatus.PENDING]: {\n label: \"Pendiente\",\n color: \"bg-warning-100 text-warning-800 border-warning-200\",\n dotColor: \"bg-warning-400\",\n },\n [UploadStatus.UPLOADING]: {\n label: \"Subiendo...\",\n color: \"bg-primary-100 text-primary-800 border-primary-200\",\n dotColor: \"bg-primary-400 animate-pulse\",\n },\n [UploadStatus.UPLOADED]: {\n label: \"Subido\",\n color: \"bg-success-100 text-success-800 border-success-200\",\n dotColor: \"bg-success-400\",\n },\n [UploadStatus.ERROR]: {\n label: \"Error\",\n color: \"bg-danger-100 text-danger-800 border-danger-200\",\n dotColor: \"bg-danger-400\",\n },\n };\n\n const { label, color, dotColor } = config[status];\n\n return (\n <div className={`inline-flex items-center gap-2 px-2.5 py-1 rounded-full border ${color}`}>\n <div className={`w-2 h-2 rounded-full ${dotColor}`}></div>\n <ITText as=\"span\" className=\"text-xs font-medium flex items-center gap-1.5\">\n {label}\n </ITText>\n </div>\n );\n };\n\n const onDrop = (acceptedFiles: File[]) => {\n const file = acceptedFiles[0];\n if (file) {\n if (acceptedFileTypes.includes(file.type as FileTypeEnum)) {\n setSelectedFile(file);\n setFileType(file.type);\n setUploadStatus(UploadStatus.PENDING);\n \n if (imagePreview) {\n URL.revokeObjectURL(imagePreview);\n setImagePreview(null);\n }\n \n if (file.type.startsWith('image/')) {\n const previewUrl = URL.createObjectURL(file);\n setImagePreview(previewUrl);\n }\n } else {\n alert(`Tipo de archivo no permitido.`);\n setSelectedFile(null);\n setFileType(null);\n setImagePreview(null);\n setUploadStatus(UploadStatus.PENDING);\n }\n }\n };\n\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n onDrop,\n accept: getAcceptedFileTypes(),\n maxFiles: 1,\n });\n\n // Renderizar PDF si aplica (COMENTADO)\n useEffect(() => {\n const renderPDF = async () => {\n /*\n if (selectedFile && fileType === FileTypeEnum.PDF) {\n // Logic for PDF would go here\n }\n */\n };\n renderPDF();\n }, [selectedFile, fileType]);\n\n useEffect(() => {\n return () => {\n if (imagePreview) {\n URL.revokeObjectURL(imagePreview);\n }\n };\n }, [imagePreview]);\n\n const handleConfirm = async () => {\n if (selectedFile) {\n setIsConfirmed(true);\n setUploadStatus(UploadStatus.UPLOADING);\n \n try {\n await new Promise(resolve => setTimeout(resolve, 1500)); // Simulación\n onFileSelect(selectedFile);\n onSubmit?.(selectedFile);\n setUploadStatus(UploadStatus.UPLOADED);\n } catch (error) {\n setUploadStatus(UploadStatus.ERROR);\n console.error(\"Error al subir archivo:\", error);\n }\n }\n };\n\n const handleCancel = () => {\n setSelectedFile(null);\n setFileType(null);\n setIsConfirmed(false);\n setUploadStatus(UploadStatus.PENDING);\n if (imagePreview) {\n URL.revokeObjectURL(imagePreview);\n setImagePreview(null);\n }\n onFileSelect(null);\n onCancel?.();\n };\n\n const handleDelete = () => {\n handleCancel();\n };\n\n const isImage = fileType && fileType.startsWith('image/');\n\n return (\n <div className={clsx(\"w-full transition-all duration-300\", containerClassName)}>\n <div className=\"flex items-center justify-between mb-2\">\n <label className=\"block text-sm font-semibold text-gray-700\">\n <ITText as=\"span\">Subir archivo </ITText><ITText as=\"span\" className=\"text-gray-400 font-normal text-xs\">({getFileExtensions()})</ITText>\n </label>\n \n {showStatusBadge && selectedFile && (\n <StatusBadge status={uploadStatus} />\n )}\n </div>\n\n {!selectedFile && !imagePreview ? (\n <div\n {...getRootProps()}\n className={`\n relative group flex flex-col items-center justify-center w-full p-6 \n border-2 border-dashed rounded-xl cursor-pointer transition-all duration-300 ease-in-out\n ${\n isDragActive\n ? \"border-primary-500 bg-primary-50 scale-[1.01]\"\n : \"border-gray-300 bg-white hover:border-primary-400 hover:bg-gray-50\"\n }\n `}\n >\n <input {...getInputProps()} />\n \n <div className={`mb-3 p-3 rounded-full transition-colors duration-300 ${isDragActive ? 'bg-primary-100' : 'bg-gray-100 group-hover:bg-primary-50'}`}>\n <svg \n className={`w-6 h-6 transition-colors duration-300 ${isDragActive ? 'text-primary-600' : 'text-gray-400 group-hover:text-primary-500'}`} \n fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12\" />\n </svg>\n </div>\n\n <div className=\"text-center space-y-1\">\n <ITText as=\"p\" className={`text-sm font-medium transition-colors duration-300 ${isDragActive ? 'text-primary-700' : 'text-gray-700'}`}>\n {isDragActive ? \"¡Suelta aquí!\" : \"Haz clic o arrastra\"}\n </ITText>\n </div>\n </div>\n ) : (\n <div className=\"w-full bg-white border border-gray-200 rounded-xl shadow-sm overflow-hidden animate-fade-in\">\n <div className=\"flex items-center justify-between p-3 bg-gray-50 border-b border-gray-100\">\n <div className=\"flex items-center gap-3 overflow-hidden\">\n <div className=\"flex-shrink-0 w-8 h-8 rounded-lg bg-primary-100 flex items-center justify-center text-primary-600\">\n {(selectedFile && fileType?.startsWith('image/')) || (!selectedFile && imagePreview) ? (\n <svg className=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z\" />\n </svg>\n ) : (\n <svg className=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" />\n </svg>\n )}\n </div>\n <div className=\"min-w-0\">\n <ITText as=\"p\" className=\"text-xs font-medium text-gray-900 truncate\" title={selectedFile?.name || \"Imagen cargada\"}>\n {selectedFile?.name || \"Imagen cargada\"}\n </ITText>\n <ITText as=\"p\" className=\"text-[10px] text-gray-500\">\n {selectedFile ? (selectedFile.size / 1024 / 1024).toFixed(2) + \" MB\" : \"\"}\n </ITText>\n </div>\n </div>\n </div>\n\n <div className={clsx(\"relative bg-gray-100 flex items-center justify-center\", !contentClassName ? \"max-h-[200px] min-h-[100px] overflow-auto\" : contentClassName)}>\n {((selectedFile && fileType?.startsWith('image/')) || (!selectedFile && imagePreview)) ? (\n <img \n src={imagePreview} \n alt=\"Vista previa\" \n className=\"w-full h-full object-contain max-h-[200px]\"\n />\n ) : (\n <div className=\"py-8 flex flex-col items-center text-gray-400\">\n <svg className=\"w-10 h-10 mb-2 opacity-50\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z\" />\n </svg>\n <ITText as=\"span\" className=\"text-xs\">Sin vista previa</ITText>\n </div>\n )}\n </div>\n\n <div className=\"px-3 py-2 bg-white border-t border-gray-100 flex justify-end gap-2\">\n {!isConfirmed ? (\n <>\n <button\n type=\"button\"\n onClick={handleCancel}\n className=\"px-3 py-1.5 text-xs font-medium text-gray-700 bg-white border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors\"\n >\n <ITText as=\"span\">Cancelar</ITText>\n </button>\n <button\n type=\"button\"\n onClick={handleConfirm}\n className=\"px-3 py-1.5 text-xs font-medium text-white bg-primary-600 rounded-lg hover:bg-primary-700 shadow-sm transition-colors flex items-center gap-1\"\n >\n <ITText as=\"span\">Confirmar</ITText>\n <svg className=\"w-3 h-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n </button>\n </>\n ) : (\n <button\n type=\"button\"\n onClick={handleDelete}\n className=\"px-3 py-1.5 text-xs font-medium text-danger-600 bg-danger-50 border border-danger-100 rounded-lg hover:bg-danger-100 transition-colors flex items-center gap-1\"\n >\n <svg className=\"w-3 h-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\" />\n </svg>\n <ITText as=\"span\">Eliminar</ITText>\n </button>\n )}\n </div>\n\n {uploadStatus === UploadStatus.UPLOADING && (\n <div className=\"px-4 pb-2\">\n <div className=\"w-full bg-gray-200 rounded-full h-1.5\">\n <div \n className=\"bg-primary-600 h-1.5 rounded-full transition-all duration-1000 ease-out\"\n style={{ \n width: '100%',\n animation: 'pulse 1.5s cubic-bezier(0.4, 0, 0.6, 1) infinite'\n }}\n ></div>\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n\nexport default ITDropfile;","import { useState } from \"react\";\nimport ITTopBar from \"../topbar/topbar\";\nimport ITSidebar from \"../sidebar/sidebar\";\nimport { ITLayoutProps } from \"./layout.props\";\nexport default function ITLayout({\n topBar,\n sidebar,\n children,\n className = \"\",\n contentClassName = \"\",\n}: ITLayoutProps) {\n\n // Desktop states\n const [desktopCollapsed, setDesktopCollapsed] = useState(true); // Default to collapsed\n\n // Mobile drawer state\n const [mobileSidebarOpen, setMobileSidebarOpen] = useState(false);\n\n return (\n <div className={`flex flex-col h-screen overflow-hidden w-full ${className}`}>\n \n {/* TOPBAR - Full Width at Top */}\n <ITTopBar\n {...topBar}\n showMobileMenuButton\n onToggleMobileMenu={() => setMobileSidebarOpen(v => !v)}\n />\n\n <div className=\"flex flex-1 overflow-hidden relative\" style={{ backgroundColor: \"var(--layout-bg, #f8fafc)\" }}>\n \n {/* DESKTOP SIDEBAR - Floating over content when expanded */}\n <div className=\"hidden lg:block relative z-40 h-full\">\n {/* Spacer to keep main content from shifting. Width matches collapsed sidebar. */}\n <div className=\"w-[88px] h-full flex-shrink-0\" />\n \n <div className=\"absolute top-0 left-0 h-full\">\n <ITSidebar\n {...sidebar}\n isCollapsed={desktopCollapsed}\n onToggleCollapse={() => setDesktopCollapsed(v => !v)}\n visibleOnMobile={false}\n className={`h-full drop-shadow-2xl transition-all duration-400 ease-[cubic-bezier(0.2,0,0,1)] flex-shrink-0`}\n />\n </div>\n </div>\n\n {/* MOBILE SIDEBAR PANE */}\n {mobileSidebarOpen && (\n <div\n className=\"lg:hidden fixed inset-0 z-50 transition-opacity duration-300 backdrop-blur-sm bg-black/40\"\n onClick={() => setMobileSidebarOpen(false)}\n >\n <div \n className=\"h-full w-fit flex transform transition-transform duration-300 ease-[cubic-bezier(0.2,0,0,1)]\"\n onClick={(e) => e.stopPropagation()} \n >\n <ITSidebar\n {...sidebar}\n isCollapsed={false}\n visibleOnMobile={true}\n className=\"h-full shadow-2xl relative z-[60]\"\n onToggleCollapse={() => setMobileSidebarOpen(false)}\n onItemClick={() => setMobileSidebarOpen(false)}\n onSubItemClick={() => setMobileSidebarOpen(false)}\n />\n </div>\n </div>\n )}\n\n {/* MAIN CONTENT AREA */}\n <main className=\"flex-1 overflow-y-auto w-full custom-scrollbar relative z-0\">\n <div className={`mx-auto w-full h-full ${contentClassName}`}>\n {children}\n </div>\n </main>\n\n </div>\n </div>\n );\n}\n","import { FaUserCircle, FaBars } from \"react-icons/fa\";\nimport useClickOutside from \"../../hooks/useClickOutside\";\nimport { useRef, useState } from \"react\";\nimport { ITTopBarProps } from \"./topbar.props\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITTopBar({\n logo,\n logoText,\n userMenu,\n showMobileMenuButton,\n onToggleMobileMenu,\n navItems,\n onNavItemClick,\n}: ITTopBarProps) {\n const [isUserMenuOpen, setIsUserMenuOpen] = useState(false);\n const userMenuRef = useRef<HTMLDivElement>(null);\n\n useClickOutside(userMenuRef, () => setIsUserMenuOpen(false));\n\n return (\n <header \n className=\"sticky top-0 z-40 backdrop-blur-md transition-all duration-300\"\n style={{\n backgroundColor: \"var(--topbar-bg, rgba(255, 255, 255, 0.9))\",\n borderBottom: \"1px solid var(--topbar-border, #e2e8f0)\",\n boxShadow: \"none\",\n }}\n >\n <div className=\"flex items-center justify-between h-[72px] px-6 lg:px-8\">\n\n {/* LEFT AREA: Logo & Mobile Toggle */}\n <div className=\"flex items-center gap-5\">\n\n {/* Mobile Sidebar Toggle */}\n {showMobileMenuButton && (\n <button\n className=\"lg:hidden p-2.5 rounded-xl transition-colors duration-200\"\n style={{\n color: \"var(--topbar-icon, #64748b)\",\n }}\n onMouseEnter={(e) => e.currentTarget.style.backgroundColor = \"var(--topbar-user-hover, #f1f5f9)\"}\n onMouseLeave={(e) => e.currentTarget.style.backgroundColor = \"transparent\"}\n onClick={onToggleMobileMenu}\n >\n <FaBars className=\"w-[1.125rem] h-[1.125rem]\" />\n </button>\n )}\n\n {/* Logo */}\n <div className=\"flex items-center gap-3\">\n {logo && (\n <div className=\"flex-shrink-0 drop-shadow-sm\">\n {logo}\n </div>\n )}\n \n {logoText && (\n <ITText as=\"span\" \n className=\"text-[1.15rem] font-bold tracking-tight\"\n style={{ color: \"var(--topbar-text, #0f172a)\" }}\n >\n {logoText}\n </ITText>\n )}\n </div>\n\n {/* Top Navigation Items (Desktop) */}\n {navItems && navItems.length > 0 && (\n <nav className=\"hidden md:flex ml-8 space-x-1 border-l pl-8\" style={{ borderColor: \"var(--topbar-border, #e2e8f0)\" }}>\n {navItems.map((item) => (\n <button\n key={item.id}\n onClick={() => onNavItemClick?.(item.id)}\n className=\"px-4 py-2 rounded-lg font-medium text-[0.9rem] transition-all duration-200 ease-[cubic-bezier(0.2,0,0,1)]\"\n style={{ color: \"var(--topbar-text, #475569)\" }}\n onMouseEnter={(e) => {\n e.currentTarget.style.color = \"var(--topbar-text, #0f172a)\";\n e.currentTarget.style.backgroundColor = \"var(--topbar-user-hover, #f1f5f9)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.color = \"var(--topbar-text, #475569)\";\n e.currentTarget.style.backgroundColor = \"transparent\";\n }}\n >\n <div className=\"flex items-center gap-2\">\n {item.icon && <span className=\"opacity-70\">{item.icon}</span>}\n <ITText as=\"span\">{item.label}</ITText>\n </div>\n </button>\n ))}\n </nav>\n )}\n </div>\n\n {/* RIGHT AREA: User Menu */}\n {userMenu && (\n <div className=\"relative\">\n <button\n type=\"button\"\n className=\"flex items-center gap-3 rounded-full pl-2 pr-4 py-1.5 transition-all duration-200 ease-[cubic-bezier(0.2,0,0,1)] border border-transparent hover:border-gray-200\"\n style={{\n backgroundColor: isUserMenuOpen ? \"var(--topbar-user-hover, #f1f5f9)\" : \"transparent\",\n }}\n onMouseEnter={(e) => {\n if (!isUserMenuOpen) e.currentTarget.style.backgroundColor = \"var(--topbar-user-hover, #f1f5f9)\";\n }}\n onMouseLeave={(e) => {\n if (!isUserMenuOpen) e.currentTarget.style.backgroundColor = \"transparent\";\n }}\n onClick={() => setIsUserMenuOpen(!isUserMenuOpen)}\n >\n {/* Avatar */}\n <div className=\"relative\">\n {userMenu.userImage ? (\n <img\n className=\"w-9 h-9 rounded-full object-cover ring-2 ring-white shadow-sm\"\n src={userMenu.userImage}\n alt=\"Current user\"\n />\n ) : (\n <div className=\"w-9 h-9 rounded-full bg-slate-100 flex items-center justify-center ring-2 ring-white shadow-sm\">\n <FaUserCircle className=\"w-6 h-6\" style={{ color: \"var(--topbar-icon, #94a3b8)\" }} />\n </div>\n )}\n {/* Active dot indicator */}\n <div className=\"absolute bottom-0 right-0 w-2.5 h-2.5 bg-green-500 border-2 border-white rounded-full\"></div>\n </div>\n\n {/* Name Details */}\n <div className=\"hidden sm:flex flex-col text-left py-0.5\">\n <ITText as=\"span\" \n className=\"font-semibold text-[0.85rem] leading-tight\"\n style={{ color: \"var(--topbar-user-text, #0f172a)\" }}\n >\n {userMenu.userName}\n </ITText>\n <ITText as=\"span\" \n className=\"text-[0.7rem] font-medium\"\n style={{ color: \"var(--topbar-user-subtitle, #64748b)\" }}\n >\n {userMenu.userEmail}\n </ITText>\n </div>\n </button>\n\n {/* Dropdown Menu */}\n <div\n ref={userMenuRef}\n className={`\n absolute right-0 mt-3 w-64 rounded-2xl shadow-[0_10px_40px_-10px_rgba(0,0,0,0.15)] z-50 overflow-hidden transform origin-top-right transition-all duration-200 ease-[cubic-bezier(0.2,0,0,1)]\n ${isUserMenuOpen ? \"scale-100 opacity-100 translate-y-0\" : \"scale-95 opacity-0 -translate-y-2 pointer-events-none\"}\n `}\n style={{ \n backgroundColor: \"var(--topbar-user-dropdown-bg, #ffffff)\",\n border: \"1px solid var(--topbar-user-dropdown-border, #f1f5f9)\"\n }}\n >\n {/* Dropdown Header */}\n <div className=\"px-5 py-4 border-b\" style={{ borderColor: \"var(--topbar-user-dropdown-border, #f1f5f9)\", backgroundColor: \"var(--topbar-user-bg, #f8fafc)\" }}>\n <ITText as=\"span\" className=\"block font-bold text-[0.9rem]\" style={{ color: \"var(--topbar-user-text, #0f172a)\" }}>\n {userMenu.userName}\n </ITText>\n <ITText as=\"span\" className=\"block text-xs font-medium truncate mt-0.5\" style={{ color: \"var(--topbar-user-subtitle, #64748b)\" }}>\n {userMenu.userEmail}\n </ITText>\n </div>\n \n {/* Dropdown Items */}\n <ul className=\"py-2\">\n {userMenu.menuItems.map((m, i) => {\n const isDestructive = m.label.toLowerCase().includes('salir') || m.label.toLowerCase().includes('cerrar') || m.label.toLowerCase().includes('logout');\n \n return (\n <li key={i} className=\"px-2\">\n {i === userMenu.menuItems.length - 1 && isDestructive && i > 0 && (\n <div className=\"h-px bg-slate-100 my-1 mx-2\"></div>\n )}\n <button\n onClick={(e) => {\n m.onClick();\n setIsUserMenuOpen(false);\n }}\n className=\"block w-full text-left px-3 py-2.5 rounded-xl text-[0.875rem] font-medium transition-colors duration-150\"\n style={{ color: isDestructive ? '#ef4444' : \"var(--topbar-user-text, #334155)\" }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = isDestructive ? '#fef2f2' : \"var(--topbar-user-item-hover, #f8fafc)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = \"transparent\";\n }}\n >\n <ITText as=\"span\">{m.label}</ITText>\n </button>\n </li>\n )\n })}\n </ul>\n </div>\n </div>\n )}\n </div>\n </header>\n );\n}\n","export type LoaderSize = \"sm\" | \"md\" | \"lg\" | \"xl\";\nexport type LoaderVariant = \"spinner\" | \"dots\" | \"bar\" | \"pulse\";\n\nexport const sizeClasses: Record<LoaderSize, string> = {\n sm: \"h-4 w-4\",\n md: \"h-8 w-8\",\n lg: \"h-12 w-12\",\n xl: \"h-16 w-16\",\n};\n","import { theme } from \"@/theme/theme\";\nimport { LoaderSize, sizeClasses } from \"@/types/loader.types\";\nimport { LoaderProps } from \"./loader.props\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITLoader({\n size = \"md\",\n variant = \"spinner\",\n color = \"primary\", // Default to semantic primary\n className = \"\",\n}: LoaderProps) {\n \n // Resolve color: Check if it's a semantic color in theme, otherwise use as-is\n const isSemantic = color in theme.colors;\n const resolvedColor = isSemantic \n ? theme.colors[color as keyof typeof theme.colors][500] \n : color;\n\n // Helper for conditional styles\n const isCssValue = isSemantic || color.startsWith(\"#\") || color.startsWith(\"rgb\");\n \n // Base style object\n const style = isCssValue ? { color: resolvedColor } : {};\n const bgStyle = isCssValue ? { backgroundColor: resolvedColor } : {};\n\n // Legacy class handling: if it's not a CSS value, inject it as a class\n const colorClass = !isCssValue ? color : \"\";\n\n if (variant === \"spinner\") {\n return (\n <div\n className={`inline-block ${sizeClasses[size]} animate-spin rounded-full border-2 border-solid border-current border-r-transparent align-[-0.125em] motion-reduce:animate-[spin_1.5s_linear_infinite] ${colorClass} ${className}`}\n role=\"status\"\n style={style}\n >\n <ITText as=\"span\" className=\"!absolute !-m-px !h-px !w-px !overflow-hidden !whitespace-nowrap !border-0 !p-0 ![clip:rect(0,0,0,0)]\">\n Loading...\n </ITText>\n </div>\n );\n }\n\n // Dots loader\n if (variant === \"dots\") {\n return (\n <div\n className={`flex items-center justify-center space-x-2 ${className}`}\n >\n {[...Array(3)].map((_, i) => (\n <div\n key={i}\n className={`${\n sizeClasses[size.replace(/l|g/, \"\") as LoaderSize]\n } animate-bounce rounded-full ${colorClass}`}\n style={{ \n ...bgStyle,\n animationDelay: `${i * 0.1}s` \n }}\n />\n ))}\n </div>\n );\n }\n\n // Bar loader\n if (variant === \"bar\") {\n // For bar, we need a lighter shade for the background 'track' if possible, \n // or just use gray-200.\n // And the progress bar uses the resolved color.\n return (\n <div\n className={`w-full ${\n size === \"sm\"\n ? \"h-1\"\n : size === \"md\"\n ? \"h-1.5\"\n : size === \"lg\"\n ? \"h-2\"\n : \"h-2.5\"\n } bg-gray-200 rounded-full overflow-hidden ${className}`}\n >\n <div\n className={`h-full animate-progress ${colorClass}`}\n style={{\n backgroundColor: resolvedColor, \n // Simplified gradient for modern look, or keep it solid\n backgroundImage: isCssValue \n ? `linear-gradient(to right, ${resolvedColor}DD, ${resolvedColor})` \n : undefined,\n animation: \"progress 1.5s ease-in-out infinite\",\n }}\n />\n </div>\n );\n }\n\n // Pulse loader\n if (variant === \"pulse\") {\n return (\n <div\n className={`rounded-full ${sizeClasses[size]} animate-pulse ${colorClass} ${className}`}\n style={bgStyle}\n />\n );\n }\n\n return null;\n}\n","import clsx from \"clsx\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { ITStepperProps, Step } from \"./stepper.props\";\nimport { theme } from \"@/theme/theme\";\nimport ITButton from \"../button/button\";\nimport { FaChevronLeft, FaChevronRight, FaCheck } from \"react-icons/fa\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITStepper({\n steps,\n currentStep,\n onFinish,\n onStepChange,\n allowClickToJump = true,\n useIcons = false,\n disableNext = false,\n containerClassName,\n stepClassName,\n scrollableContent = false,\n maxContentHeight = \"400px\",\n color = \"primary\",\n}: ITStepperProps) {\n const [direction, setDirection] = useState<\"next\" | \"prev\">(\"next\");\n const contentRef = useRef<HTMLDivElement | null>(null);\n const progressRef = useRef<HTMLDivElement | null>(null);\n\n // Resolve theme color\n const isThemeColor = color in theme.colors;\n const resolvedColor = isThemeColor\n ? theme.colors[color as keyof typeof theme.colors][500]\n : color;\n\n // Effect for notifying parent of step change\n useEffect(() => {\n onStepChange?.(currentStep);\n }, [currentStep, onStepChange]);\n\n // Effect for animation and focus management\n useEffect(() => {\n const pct = (currentStep / Math.max(1, steps.length - 1)) * 100;\n\n if (progressRef.current) {\n progressRef.current.style.width = `${pct}%`;\n progressRef.current.style.backgroundColor = resolvedColor;\n }\n\n if (contentRef.current) {\n contentRef.current.classList.remove(\n \"animate-slide-in-left\",\n \"animate-slide-in-right\"\n );\n requestAnimationFrame(() => {\n contentRef.current?.classList.add(\n direction === \"next\"\n ? \"animate-slide-in-right\"\n : \"animate-slide-in-left\"\n );\n });\n }\n\n contentRef.current?.focus();\n }, [currentStep, direction, steps.length, resolvedColor]);\n\n\n const nextStep = () => {\n if (disableNext) return;\n if (currentStep < steps.length - 1) {\n setDirection(\"next\");\n onStepChange?.(currentStep + 1);\n } else {\n onFinish?.();\n }\n };\n\n const prevStep = () => {\n if (currentStep > 0) {\n setDirection(\"prev\");\n onStepChange?.(currentStep - 1);\n }\n };\n\n const jumpTo = (index: number) => {\n if (!allowClickToJump) return;\n if (index <= currentStep) {\n setDirection(index > currentStep ? \"next\" : \"prev\");\n onStepChange?.(index);\n }\n };\n\n const renderStepContent = (\n index: number,\n isCompleted: boolean,\n isActive: boolean\n ) => {\n const step = steps[index];\n\n if (isCompleted) {\n return <FaCheck className=\"w-4 h-4\" />;\n }\n\n if (step.icon && useIcons) {\n return (\n <div className=\"flex items-center justify-center w-5 h-5\">\n {step.icon}\n </div>\n );\n }\n\n return <ITText as=\"span\" className=\"text-sm font-semibold\">{index + 1}</ITText>;\n };\n\n return (\n <div className={clsx(\"w-full max-w-5xl mx-auto px-4\", containerClassName)}>\n <div className=\"relative mb-8\">\n <div\n className=\"absolute left-6 right-6 top-5 h-1 bg-gray-200 rounded-full z-0\"\n aria-hidden\n />\n <div\n ref={progressRef}\n className=\"absolute left-6 top-5 h-1 rounded-full z-10 transition-all duration-500 ease-in-out\"\n aria-hidden\n />\n\n <div className=\"flex items-start justify-between space-x-2 relative z-20\">\n {steps.map((step, idx) => {\n const isActive = idx === currentStep;\n const isCompleted = idx < currentStep;\n const hasIcon = step.icon && useIcons;\n\n return (\n <button\n type=\"button\"\n key={idx}\n onClick={() => jumpTo(idx)}\n disabled={!allowClickToJump && idx !== currentStep}\n aria-current={isActive ? \"step\" : undefined}\n aria-label={`Paso ${idx + 1} ${step.label}`}\n className=\"flex-1 group\"\n title={step.label}\n >\n <div className=\"flex flex-col items-center\">\n <div\n className={clsx(\n \"flex items-center justify-center w-11 h-11 rounded-full border-2 transition-all duration-300 transform\",\n hasIcon && \"p-2\",\n isCompleted && \"bg-slate-400 border-slate-400 text-white scale-100 shadow\",\n isActive && \"text-white scale-110 shadow-lg\",\n !isActive && !isCompleted && \"bg-white border-gray-300 text-gray-400\"\n )}\n style={isActive ? { backgroundColor: resolvedColor, borderColor: resolvedColor } : undefined}\n >\n {renderStepContent(idx, isCompleted, isActive)}\n </div>\n\n <ITText\n as=\"span\"\n className={clsx(\n \"mt-2 text-xs sm:text-sm font-medium transition-colors text-center\",\n isCompleted ? \"text-slate-400\" : !isActive && \"text-gray-400\"\n )}\n style={isActive ? { color: resolvedColor } : undefined}\n >\n {step.label}\n </ITText>\n </div>\n </button>\n );\n })}\n </div>\n </div>\n\n {/* --- CONTENIDO DEL STEP --- */}\n <div\n ref={contentRef}\n tabIndex={-1}\n role=\"region\"\n aria-labelledby={`step-${currentStep}`}\n className={clsx(\n stepClassName,\n \"bg-white border border-gray-100 rounded-2xl shadow-lg min-h-[280px] transition-transform duration-400 no-scrollbar p-6\",\n scrollableContent && \"overflow-y-auto hide-scrollbar\"\n )}\n style={\n scrollableContent && maxContentHeight\n ? { maxHeight: maxContentHeight }\n : undefined\n }\n >\n {steps[currentStep].content}\n </div>\n\n {/* --- BOTONES DE CONTROL --- */}\n <div className=\"flex justify-between items-center mt-6\">\n <ITButton\n variant=\"outlined\"\n color=\"secondary\"\n disabled={currentStep === 0}\n onClick={prevStep}\n >\n <div className=\"flex items-center gap-2\">\n <FaChevronLeft />\n <ITText as=\"span\">Atrás</ITText>\n </div>\n </ITButton>\n\n <div className=\"flex items-center gap-3\">\n <ITText as=\"div\" className=\"text-sm text-gray-500 mr-2 hidden sm:block\">\n Paso {currentStep + 1} de {steps.length}\n </ITText>\n \n <ITButton\n variant=\"solid\"\n color={color as any}\n disabled={disableNext}\n onClick={nextStep}\n >\n <div className=\"flex items-center gap-2\">\n <ITText as=\"span\">{currentStep === steps.length - 1 ? \"Finalizar\" : \"Siguiente\"}</ITText>\n {currentStep === steps.length - 1 ? <FaCheck /> : <FaChevronRight />}\n </div>\n </ITButton>\n </div>\n </div>\n </div>\n );\n}\n","import * as Yup from \"yup\";\nimport { FieldConfig } from \"./field.types\";\nexport const createValidationSchema = (fields: FieldConfig[]) =>\n Yup.object().shape(\n fields.reduce((acc, field) => {\n if (field.validation) {\n acc[field.name] = field.validation;\n }\n return acc;\n }, {} as Record<string, Yup.AnySchema>)\n );\n"],"mappings":"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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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","names":["isLightColor","import_react","import_react","getNestedValue","import_react","import_jsx_runtime","clsx","import_clsx","import_jsx_runtime","clsx","import_clsx","import_jsx_runtime","config","clsx","import_clsx","import_fa","import_jsx_runtime","clsx","import_clsx","import_react","import_jsx_runtime","clsx","import_react","import_clsx","import_fa","import_jsx_runtime","React","import_clsx","import_react","import_jsx_runtime","clsx","import_clsx","import_jsx_runtime","clsx","import_clsx","import_fa","import_jsx_runtime","clsx","import_clsx","import_react","import_fa","import_md","import_clsx","import_react","import_clsx","clsx","clsx","import_jsx_runtime","value","clsx","import_react","import_clsx","import_fa","import_clsx","import_react","import_fa","import_jsx_runtime","clsx","import_jsx_runtime","React","clsx","import_clsx","import_react","import_fa","import_jsx_runtime","React","clsx","import_jsx_runtime","getNestedValue","clsx","import_clsx","import_react","import_fa","import_date_fns","import_jsx_runtime","React","clsx","import_react","import_fa","import_fa","import_react","import_md","import_react","import_clsx","import_jsx_runtime","import_clsx","import_jsx_runtime","sizeMap","clsx","import_clsx","import_jsx_runtime","clsx","import_jsx_runtime","getNestedValue","theme","palette","isLightColor","palette","import_jsx_runtime","palette","import_jsx_runtime","import_clsx","import_fa","import_react","import_jsx_runtime","clsx","import_clsx","import_fa","import_jsx_runtime","clsx","import_clsx","import_jsx_runtime","clsx","import_react","import_react","import_jsx_runtime","React","config","import_react","import_clsx","import_clsx","import_react","import_fa","import_jsx_runtime","clsx","import_react","config","import_jsx_runtime","config","clsx","import_jsx_runtime","config","import_clsx","import_jsx_runtime","clsx","import_react","import_jsx_runtime","import_react","import_fa","import_jsx_runtime","import_clsx","import_clsx","import_fa","import_jsx_runtime","clsx","import_clsx","import_jsx_runtime","clsx","import_clsx","import_react","import_jsx_runtime","directionMap","alignMap","justifyMap","wrapMap","clsx","import_jsx_runtime","clsx","import_react","import_clsx","import_jsx_runtime","clsx","import_clsx","import_jsx_runtime","sizeMap","clsx","import_clsx","import_jsx_runtime","clsx","import_react","import_clsx","import_fa","import_jsx_runtime","clsx","import_clsx","import_react","import_fa","import_jsx_runtime","import_fa","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","formatCurrencyMX","getNestedValue","import_clsx","import_fa","import_jsx_runtime","import_jsx_runtime","getNestedValue","formatCurrencyMX","clsx","import_jsx_runtime","import_fa","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","clsx","getNestedValue","import_react","import_fa","import_jsx_runtime","import_react","import_clsx","import_jsx_runtime","sizeClasses","clsx","import_clsx","import_jsx_runtime","clsx","import_clsx","import_jsx_runtime","clsx","import_clsx","import_jsx_runtime","clsx","import_clsx","import_jsx_runtime","colorMap","clsx","import_clsx","import_react","import_fa","import_jsx_runtime","clsx","import_react","import_clsx","import_jsx_runtime","FileTypeEnum","UploadStatus","config","clsx","import_react","import_fa","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_clsx","import_react","import_fa","import_jsx_runtime","clsx"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/hooks/useClickOutside.ts","../src/hooks/useDebouncedSearch.ts","../src/hooks/useEditableRow.ts","../src/hooks/useTableState.ts","../src/components/alert/alert.tsx","../src/components/text/text.tsx","../src/components/avatar/avatar.tsx","../src/components/badget/badget.tsx","../src/types/badget.types.ts","../src/theme/theme.ts","../src/components/breadcrumbs/breadcrumbs.tsx","../src/types/button.types.ts","../src/components/button/button.tsx","../src/components/calendar/calendar.tsx","../src/components/card/card.tsx","../src/components/checkbox/checkbox.tsx","../src/components/confirm-dialog/confirm-dialog.tsx","../src/types/table.types.ts","../src/components/data-table/dataTable.tsx","../src/components/input/input.tsx","../src/utils/styles.ts","../src/components/pagination/pagination.tsx","../src/components/select/select.tsx","../src/components/table/table.tsx","../src/components/date-picker/datePicker.tsx","../src/components/dialog/dialog.tsx","../src/components/form-header/form-header.tsx","../src/components/theme-provider/themeProvider.tsx","../src/components/tabs/tabs.tsx","../src/components/segmented-control/segmented-control.tsx","../src/components/divider/divider.tsx","../src/utils/color.utils.ts","../src/components/drawer/drawer.tsx","../src/components/empty-state/empty-state.tsx","../src/components/flex/flex.tsx","../src/components/form-builder/formBuilder.tsx","../src/components/form-builder/formBuilder.context.tsx","../src/components/form-builder/fieldRenderer.tsx","../src/components/time-picker/timePicker.tsx","../src/components/form-builder/useFormBuilder.ts","../src/components/grid/grid.tsx","../src/components/image/image.tsx","../src/components/navbar/navbar.tsx","../src/components/page/page.tsx","../src/components/page-header/page-header.tsx","../src/components/skeleton/skeleton.tsx","../src/components/stack/stack.tsx","../src/components/popover/popover.tsx","../src/components/progress/progress.tsx","../src/components/radio/radio.tsx","../src/components/search-select/search-select.tsx","../src/components/searchTable/searchTable.tsx","../src/components/searchTable/components/SearchInput.tsx","../src/components/searchTable/components/SortButton.tsx","../src/components/searchTable/components/SearchAndSortBar.tsx","../src/components/searchTable/components/TableHeaderCell.tsx","../src/components/searchTable/components/TableHeader.tsx","../src/utils/table.utils.ts","../src/components/searchTable/components/TableRow.tsx","../src/components/searchTable/components/EditableCell.tsx","../src/components/searchTable/components/TableEmptyState.tsx","../src/components/searchTable/components/PaginationControls.tsx","../src/components/searchTable/components/PaginationInfo.tsx","../src/components/sidebar/sidebar.tsx","../src/components/slide/slide.tsx","../src/components/slider/slider.tsx","../src/components/stat-card/stat-card.tsx","../src/components/textarea/textarea.tsx","../src/components/triple-filter/tripleFilter.tsx","../src/types/toast.types.ts","../src/components/toast/toast.tsx","../src/components/dropfile/dropfile.tsx","../src/components/layout/layout.tsx","../src/components/topbar/topbar.tsx","../src/types/loader.types.ts","../src/components/loader/loader.tsx","../src/components/stepper/stepper.tsx","../src/types/yup.types.ts"],"sourcesContent":["import \"./index.css\";\n\n// HOOKS\nimport useClickOutside from \"./hooks/useClickOutside\";\nimport { useDebouncedSearch } from \"./hooks/useDebouncedSearch\";\nimport { useEditableRow } from \"./hooks/useEditableRow\";\nimport { useTableState, UseTableStateOptions, UseTableStateResult } from \"./hooks/useTableState\";\n\n// COMPONENTES\nimport ITAlert from \"./components/alert/alert\";\nimport ITAvatar from \"./components/avatar/avatar\";\nimport ITBadget from \"./components/badget/badget\";\nimport ITBreadcrumbs from \"./components/breadcrumbs/breadcrumbs\";\nimport ITButton from \"./components/button/button\";\nimport ITCalendar from \"./components/calendar/calendar\";\nimport ITCard from \"./components/card/card\";\nimport ITCheckbox from \"./components/checkbox/checkbox\";\nimport ITConfirmDialog from \"./components/confirm-dialog/confirm-dialog\";\nimport ITDataTable from \"./components/data-table/dataTable\";\nimport ITDatePicker from \"./components/date-picker/datePicker\";\nimport ITDialog from \"./components/dialog/dialog\";\nimport ITDivider from \"./components/divider/divider\";\nimport ITDrawer from \"./components/drawer/drawer\";\nimport ITEmptyState from \"./components/empty-state/empty-state\";\nimport ITFlex from \"./components/flex/flex\";\nimport ITFormBuilder from \"./components/form-builder/formBuilder\";\nimport ITFormHeader from \"./components/form-header/form-header\";\nimport ITGrid from \"./components/grid/grid\";\nimport ITImage from \"./components/image/image\";\nimport ITInput from \"./components/input/input\";\nimport ITNavbar from \"./components/navbar/navbar\";\nimport ITPage from \"./components/page/page\";\nimport ITPageHeader from \"./components/page-header/page-header\";\nimport ITPagination from \"./components/pagination/pagination\";\nimport ITPopover from \"./components/popover/popover\";\nimport ITProgress from \"./components/progress/progress\";\nimport ITRadioGroup from \"./components/radio/radio\";\nimport ITSearchSelect from \"./components/search-select/search-select\";\nimport ITSelect from \"./components/select/select\";\nimport ITSearchTable from \"./components/searchTable/searchTable\";\nimport ITSegmentedControl from \"./components/segmented-control/segmented-control\";\nimport ITSidebar from \"./components/sidebar/sidebar\";\nimport ITSkeleton from \"./components/skeleton/skeleton\";\nimport ITSlideToggle from \"./components/slide/slide\";\nimport ITSlider from \"./components/slider/slider\";\nimport ITStack from \"./components/stack/stack\";\nimport ITStatCard from \"./components/stat-card/stat-card\";\nimport ITTable from \"./components/table/table\";\nimport ITText from \"./components/text/text\";\nimport ITTextarea from \"./components/textarea/textarea\";\nimport ITTabs from \"./components/tabs/tabs\";\nimport ITTripleFilter from \"./components/triple-filter/tripleFilter\";\nimport ITToast from \"./components/toast/toast\";\n\n// PROPS\nimport type { ITAlertProps } from \"./components/alert/alert.props\";\nimport type { ITAvatarProps } from \"./components/avatar/avatar.props\";\nimport type { ITBadgetProps } from \"./components/badget/badget.props\";\nimport type { ITBreadcrumbsProps, ITBreadcrumbItem } from \"./components/breadcrumbs/breadcrumbs.props\";\nimport type { ITButtonProps } from \"./components/button/button.props\";\nimport type { ITCalendarProps } from \"./components/calendar/calendar.props\";\nimport type { ITCardProps } from \"./components/card/card.props\";\nimport type { ITCheckboxProps } from \"./components/checkbox/checkbox.props\";\nimport type { ITConfirmDialogProps } from \"./components/confirm-dialog/confirm-dialog.props\";\nimport type { ITDataTableFetchParams, ITDataTableProps, ITDataTableResponse } from \"./components/data-table/dataTable.props\";\nimport type { ITDatePickerProps } from \"./components/date-picker/date-picker.props\";\nimport type { ITDialogProps } from \"./components/dialog/dialog.props\";\nimport type { ITDividerProps } from \"./components/divider/divider.props\";\nimport type { ITDrawerProps } from \"./components/drawer/drawer.props\";\nimport type { ITEmptyStateProps } from \"./components/empty-state/empty-state.props\";\nimport type { ITFlexProps } from \"./components/flex/flex.props\";\nimport type { ITFormBuilderProps } from \"./components/form-builder/formBuilder.props\";\nimport type { ITFormHeaderProps } from \"./components/form-header/form-header.props\";\nimport type { ITGridProps } from \"./components/grid/grid.props\";\nimport type { ITImageProps } from \"./components/image/image.props\";\nimport type { ITInputProps } from \"./components/input/input.props\";\nimport type { ITNavbarProps } from \"./components/navbar/navbar.props\";\nimport type { ITPageProps } from \"./components/page/page.props\";\nimport type { ITPageHeaderProps } from \"./components/page-header/page-header.props\";\nimport type { ITPaginationProps } from \"./components/pagination/pagination.props\";\nimport type { ITPopoverProps } from \"./components/popover/popover.props\";\nimport type { ITProgressProps } from \"./components/progress/progress.props\";\nimport type { ITRadioGroupProps, ITRadioOption } from \"./components/radio/radio.props\";\nimport type { ITSearchSelectProps } from \"./components/search-select/search-select.props\";\nimport type { ITSelectProps } from \"./components/select/select.props\";\nimport type { ITSearchTableProps } from \"./components/searchTable/searchTable.props\";\nimport type { ITSegmentedControlProps } from \"./components/segmented-control/segmented-control.props\";\nimport type { ITSidebarProps, ITNavigationItem, ITNavigationSubItem } from \"./components/sidebar/sidebar.props\";\nimport type { ITSkeletonProps } from \"./components/skeleton/skeleton.props\";\nimport type { ITSlideToggleProps } from \"./components/slide/slide.props\";\nimport type { ITSliderProps } from \"./components/slider/slider.props\";\nimport type { ITStackProps } from \"./components/stack/stack.props\";\nimport type { ITStatCardProps } from \"./components/stat-card/stat-card.props\";\nimport type { ITTableProps, Column } from \"./components/table/table.props\";\nimport type { ITTextProps } from \"./components/text/text.props\";\nimport type { ITTextareaProps } from \"./components/textarea/textarea.props\";\nimport type { ITTabsProps, ITTabItem } from \"./components/tabs/tabs.props\";\nimport type { ITTripleFilterProps, ITTripleFilterOption } from \"./components/triple-filter/tripleFilter.props\";\nimport type { ITToastProps } from \"./components/toast/toast.props\";\nimport type { FieldConfig, FieldConfigV2 } from \"./types/field.types\";\n\n// UTILS\nimport ITDropfile, { UploadStatus, FileTypeEnum } from \"./components/dropfile/dropfile\";\nimport ITLayout from \"./components/layout/layout\";\nimport { ITLayoutProps } from \"./components/layout/layout.props\";\nimport ITLoader from \"./components/loader/loader\";\nimport type { LoaderProps as ITLoaderProps } from \"./components/loader/loader.props\";\nimport ITStepper from \"./components/stepper/stepper\";\nimport type { ITStepperProps } from \"./components/stepper/stepper.props\";\nimport ITThemeProvider, { useITTheme, useITThemeSafe } from \"./components/theme-provider/themeProvider\";\nimport type { ITThemeProviderProps, ITThemePalette } from \"./components/theme-provider/themeProvider.props\";\nimport ITTimePicker from \"./components/time-picker/timePicker\";\nimport type { ITTimePickerProps } from \"./components/time-picker/timePicker.props\";\nimport type { ITThemeConfig } from \"./theme/theme.types\";\nimport { createValidationSchema } from \"./types/yup.types\";\n\nimport { getContrastTextColor, isLightColor, resolveCssColor } from \"./utils/color.utils\";\n\nexport {\n // Hooks\n useClickOutside, useDebouncedSearch, useEditableRow, useTableState,\n createValidationSchema,\n // Components\n ITAlert, ITAvatar, ITBadget, ITBreadcrumbs, ITButton,\n ITCalendar,\n ITCard, ITCheckbox, ITConfirmDialog, ITDataTable, ITDatePicker,\n ITDialog, ITDivider, ITDrawer,\n ITDropfile, ITEmptyState, ITFlex, ITFormBuilder, ITFormHeader, ITGrid, ITImage, ITInput, ITLayout,\n ITLoader, ITNavbar, ITPage, ITPageHeader, ITPagination, ITPopover, ITProgress,\n ITRadioGroup, ITSelect, ITSearchSelect,\n ITSearchTable,\n ITSegmentedControl, ITSidebar, ITSkeleton, ITSlideToggle, ITSlider, ITStack, ITStatCard, ITStepper,\n ITTable, ITTabs, ITText, ITTextarea, ITTripleFilter, ITThemeProvider,\n useITTheme, useITThemeSafe, ITTimePicker, ITToast,\n UploadStatus, FileTypeEnum,\n getContrastTextColor, isLightColor, resolveCssColor\n};\n\n export type {\n Column, FieldConfig,\n FieldConfigV2,\n ITAlertProps, ITAvatarProps, ITBadgetProps,\n ITBreadcrumbItem, ITBreadcrumbsProps, ITButtonProps,\n ITCalendarProps,\n ITCardProps, ITCheckboxProps, ITConfirmDialogProps,\n ITDataTableFetchParams, ITDataTableProps, ITDataTableResponse, ITDatePickerProps,\n ITDialogProps, ITDividerProps, ITDrawerProps,\n ITEmptyStateProps, ITFlexProps,\n ITFormBuilderProps, ITFormHeaderProps,\n ITGridProps, ITImageProps, ITInputProps,\n ITLayoutProps, ITLoaderProps, ITNavbarProps,\n ITPageProps, ITPageHeaderProps,\n ITNavigationItem, ITNavigationSubItem,\n ITPaginationProps, ITPopoverProps, ITProgressProps,\n ITRadioGroupProps, ITRadioOption, ITSelectProps, ITSearchSelectProps,\n ITSearchTableProps,\n ITSegmentedControlProps, ITSidebarProps, ITSkeletonProps, ITSlideToggleProps, ITSliderProps,\n ITStackProps, ITStatCardProps, ITStepperProps,\n ITTableProps, ITTabsProps, ITTabItem, ITTextProps, ITTextareaProps,\n ITTripleFilterProps, ITTripleFilterOption, ITThemeConfig, ITThemeProviderProps, ITThemePalette,\n ITTimePickerProps, ITToastProps,\n UseTableStateOptions, UseTableStateResult\n };\n\n\n","import { useEffect } from \"react\";\n\nconst useClickOutside = (\n ref: React.RefObject<HTMLElement>,\n callback: () => void\n) => {\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (ref.current && !ref.current.contains(event.target as Node)) {\n callback();\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [ref, callback]);\n};\n\nexport default useClickOutside;\n","import { useCallback, useEffect, useRef, useState } from \"react\";\n\ninterface UseDebouncedSearchOptions {\n initialValue?: string;\n debounceMs?: number;\n onSearch: (value: string) => void;\n}\n\ninterface UseDebouncedSearchResult {\n searchTerm: string;\n setSearchTerm: (value: string) => void;\n handleSearchChange: (value: string) => void;\n handleClearSearch: () => void;\n}\n\nexport function useDebouncedSearch({\n initialValue = \"\",\n debounceMs = 500,\n onSearch,\n}: UseDebouncedSearchOptions): UseDebouncedSearchResult {\n const [searchTerm, setSearchTerm] = useState(initialValue);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const debouncedSearch = useCallback(\n (value: string) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => {\n onSearch(value);\n }, debounceMs);\n },\n [onSearch, debounceMs]\n );\n\n const handleSearchChange = useCallback(\n (value: string) => {\n setSearchTerm(value);\n debouncedSearch(value);\n },\n [debouncedSearch]\n );\n\n const handleClearSearch = useCallback(() => {\n setSearchTerm(\"\");\n onSearch(\"\");\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n }, [onSearch]);\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n };\n }, []);\n\n return { searchTerm, setSearchTerm, handleSearchChange, handleClearSearch };\n}\n","import { useCallback, useMemo, useRef, useState } from \"react\";\nimport * as yup from \"yup\";\nimport type { SearchColumn } from \"../components/searchTable/searchTable.props\";\n\ninterface UseEditableRowOptions<T> {\n row: T;\n columns: SearchColumn<T>[];\n getNestedValue: (obj: unknown, path: string) => unknown;\n validationSchema?: yup.ObjectSchema<any>;\n}\n\ninterface UseEditableRowResult<T> {\n editedRow: T;\n errors: Record<string, string>;\n isHovered: boolean;\n setIsHovered: (v: boolean) => void;\n hasErrors: boolean;\n handleEdit: (onEdit?: (row: T) => void) => Promise<void>;\n handleSave: (onSave?: (row: T) => void) => Promise<void>;\n handleCancel: (onCancel?: () => void) => void;\n handleChange: (key: string, value: any) => Promise<void>;\n reset: () => void;\n}\n\nexport function useEditableRow<T>({\n row,\n columns,\n getNestedValue,\n validationSchema,\n}: UseEditableRowOptions<T>): UseEditableRowResult<T> {\n const [isHovered, setIsHovered] = useState(false);\n const [editedRow, setEditedRow] = useState<T>({ ...row });\n const [errors, setErrors] = useState<Record<string, string>>({});\n const rowRef = useRef(row);\n rowRef.current = row;\n\n const validateAll = useCallback(\n async (rowData: T): Promise<Record<string, string>> => {\n const newErrors: Record<string, string> = {};\n\n if (validationSchema) {\n try {\n await validationSchema.validate(rowData, { abortEarly: false });\n } catch (yupError) {\n if (yupError instanceof yup.ValidationError) {\n yupError.inner.forEach((error) => {\n if (error.path) newErrors[error.path] = error.message;\n });\n }\n }\n }\n\n columns.forEach((col) => {\n if (col.editable && col.validation && !newErrors[col.key]) {\n const value = getNestedValue(rowData, col.key);\n const error = col.validation(value, rowData);\n if (error) newErrors[col.key] = error;\n }\n });\n\n return newErrors;\n },\n [columns, getNestedValue, validationSchema]\n );\n\n const handleEdit = useCallback(\n async (onEdit?: (row: T) => void) => {\n if (onEdit) {\n onEdit(rowRef.current);\n const clone = { ...rowRef.current };\n setEditedRow(clone);\n const initialErrors = await validateAll(clone);\n setErrors(initialErrors);\n }\n },\n [validateAll]\n );\n\n const handleSave = useCallback(\n async (onSave?: (row: T) => void) => {\n const finalErrors = await validateAll(editedRow);\n if (Object.keys(finalErrors).length > 0) {\n setErrors(finalErrors);\n return;\n }\n if (onSave) onSave(editedRow);\n },\n [editedRow, validateAll]\n );\n\n const handleCancel = useCallback((onCancel?: () => void) => {\n if (onCancel) onCancel();\n setEditedRow({ ...rowRef.current });\n setErrors({});\n }, []);\n\n const handleChange = useCallback(\n async (key: string, value: any) => {\n const column = columns.find((col) => col.key === key);\n let processedValue = value;\n\n if (column) {\n switch (column.type) {\n case \"number\":\n processedValue =\n value === \"\" || value === null ? null : Number(value);\n break;\n case \"boolean\":\n if (value === \"\" || value === null || value === undefined) {\n processedValue = false;\n } else if (typeof value === \"string\") {\n processedValue = value === \"true\" || value === \"1\";\n } else {\n processedValue = Boolean(value);\n }\n break;\n case \"date\":\n processedValue = value ? new Date(value).toISOString() : null;\n break;\n case \"catalog\":\n processedValue = value ?? null;\n break;\n default:\n processedValue = value ?? \"\";\n break;\n }\n }\n\n setEditedRow((prev) => {\n const updated = { ...prev, [key]: processedValue };\n validateAll(updated).then(setErrors);\n return updated;\n });\n },\n [columns, validateAll]\n );\n\n const reset = useCallback(() => {\n setEditedRow({ ...rowRef.current });\n setErrors({});\n }, []);\n\n const hasErrors = useMemo(() => Object.keys(errors).length > 0, [errors]);\n\n return {\n editedRow,\n errors,\n isHovered,\n setIsHovered,\n hasErrors,\n handleEdit,\n handleSave,\n handleCancel,\n handleChange,\n reset,\n };\n}\n","import { useCallback, useMemo, useState } from \"react\";\n\ninterface SortConfig {\n key: string;\n direction: \"asc\" | \"desc\";\n}\n\nexport interface UseTableStateOptions {\n defaultItemsPerPage?: number;\n initialSort?: SortConfig | null;\n}\n\nexport interface UseTableStateResult {\n currentPage: number;\n itemsPerPage: number;\n filters: Record<string, string | boolean | number>;\n sortConfig: SortConfig | null;\n totalPages: number;\n setTotalPages: (pages: number) => void;\n goToPage: (page: number) => void;\n handleItemsPerPageChange: (value: number) => void;\n handleFilterChange: (\n key: string,\n value: string | boolean | number | undefined\n ) => void;\n handleSort: (key: string, sortable?: boolean) => void;\n resetPage: () => void;\n clearFilters: () => void;\n}\n\nexport function useTableState({\n defaultItemsPerPage = 10,\n initialSort = null,\n}: UseTableStateOptions = {}): UseTableStateResult {\n const [currentPage, setCurrentPage] = useState(1);\n const [itemsPerPage, setItemsPerPage] = useState(defaultItemsPerPage);\n const [filters, setFilters] = useState<\n Record<string, string | boolean | number>\n >({});\n const [sortConfig, setSortConfig] = useState<SortConfig | null>(initialSort);\n const [totalPages, setTotalPages] = useState(1);\n\n const goToPage = useCallback(\n (page: number) => {\n if (page >= 1 && page <= totalPages) {\n setCurrentPage(page);\n }\n },\n [totalPages]\n );\n\n const handleItemsPerPageChange = useCallback((value: number) => {\n setItemsPerPage(value);\n setCurrentPage(1);\n }, []);\n\n const handleFilterChange = useCallback(\n (key: string, value: string | boolean | number | undefined) => {\n setFilters((prev) => {\n if (value === undefined || value === null || value === \"\") {\n const next = { ...prev };\n delete next[key];\n return next;\n }\n return { ...prev, [key]: value };\n });\n setCurrentPage(1);\n },\n []\n );\n\n const handleSort = useCallback((key: string, sortable?: boolean) => {\n if (sortable === false) return;\n setSortConfig((prev) => {\n let direction: \"asc\" | \"desc\" = \"asc\";\n if (prev?.key === key && prev.direction === \"asc\") {\n direction = \"desc\";\n }\n return { key, direction };\n });\n setCurrentPage(1);\n }, []);\n\n const resetPage = useCallback(() => setCurrentPage(1), []);\n const clearFilters = useCallback(() => {\n setFilters({});\n setCurrentPage(1);\n }, []);\n\n const stable = useMemo(\n () => ({\n currentPage,\n itemsPerPage,\n filters,\n sortConfig,\n totalPages,\n setTotalPages,\n goToPage,\n handleItemsPerPageChange,\n handleFilterChange,\n handleSort,\n resetPage,\n clearFilters,\n }),\n [\n currentPage,\n itemsPerPage,\n filters,\n sortConfig,\n totalPages,\n setTotalPages,\n goToPage,\n handleItemsPerPageChange,\n handleFilterChange,\n handleSort,\n resetPage,\n clearFilters,\n ]\n );\n\n return stable;\n}\n","import clsx from \"clsx\";\nimport { ITAlertProps, AlertVariant } from \"./alert.props\";\nimport { FaInfoCircle, FaCheckCircle, FaExclamationTriangle, FaTimesCircle, FaTimes } from \"react-icons/fa\";\nimport { theme } from \"@/theme/theme\";\nimport ITText from \"@/components/text/text\";\n\nconst config: Record<AlertVariant, { icon: React.ReactNode; classes: string }> = {\n info: {\n icon: <FaInfoCircle size={16} />,\n classes: \"bg-info-50 border-info-200 text-info-800 dark:bg-info-950/20 dark:border-info-800 dark:text-info-300\",\n },\n success: {\n icon: <FaCheckCircle size={16} />,\n classes: \"bg-success-50 border-success-200 text-success-800 dark:bg-success-950/20 dark:border-success-800 dark:text-success-300\",\n },\n warning: {\n icon: <FaExclamationTriangle size={16} />,\n classes: \"bg-warning-50 border-warning-200 text-warning-800 dark:bg-warning-950/20 dark:border-warning-800 dark:text-warning-300\",\n },\n error: {\n icon: <FaTimesCircle size={16} />,\n classes: \"bg-danger-50 border-danger-200 text-danger-800 dark:bg-danger-950/20 dark:border-danger-800 dark:text-danger-300\",\n },\n};\n\nexport default function ITAlert({\n variant = \"info\",\n title,\n children,\n dismissible,\n onDismiss,\n icon,\n className,\n}: ITAlertProps) {\n const cfg = config[variant];\n return (\n <div\n className={clsx(\"flex items-start gap-3 rounded-xl border p-4\", cfg.classes, className)}\n role=\"alert\"\n >\n <span className=\"mt-0.5 flex-shrink-0\">{icon || cfg.icon}</span>\n <div className=\"flex-1 min-w-0\">\n {title && <ITText as=\"p\" className=\"text-sm font-bold mb-0.5\">{title}</ITText>}\n {children && <ITText as=\"div\" className=\"text-sm opacity-90\">{children}</ITText>}\n </div>\n {dismissible && onDismiss && (\n <button onClick={onDismiss} className=\"flex-shrink-0 opacity-60 hover:opacity-100 transition-opacity\">\n <FaTimes size={12} />\n </button>\n )}\n </div>\n );\n}\n","import { ITTextProps } from \"./text.props\";\n\nexport default function ITText({\n children,\n as: Tag = \"p\",\n className = \"\",\n muted = false,\n style,\n ...rest\n}: ITTextProps & { style?: React.CSSProperties }) {\n return (\n <Tag\n className={className}\n style={muted ? { color: \"var(--color-text-muted)\", ...style } : style}\n {...rest}\n >\n {children}\n </Tag>\n );\n}\n","import clsx from \"clsx\";\nimport { ITAvatarProps, AvatarSize } from \"./avatar.props\";\nimport ITText from \"@/components/text/text\";\n\nconst sizeMap: Record<AvatarSize, { container: string; text: string }> = {\n xs: { container: \"w-6 h-6\", text: \"text-[10px]\" },\n sm: { container: \"w-8 h-8\", text: \"text-xs\" },\n md: { container: \"w-10 h-10\", text: \"text-sm\" },\n lg: { container: \"w-12 h-12\", text: \"text-base\" },\n xl: { container: \"w-16 h-16\", text: \"text-xl\" },\n};\n\nexport default function ITAvatar({\n src,\n alt = \"\",\n initials,\n size = \"md\",\n color = \"bg-primary-500\",\n className,\n badge,\n onClick,\n}: ITAvatarProps) {\n const { container, text } = sizeMap[size];\n\n return (\n <div\n className={clsx(\"relative inline-flex items-center justify-center rounded-full flex-shrink-0\", container, className)}\n onClick={onClick}\n role={onClick ? \"button\" : undefined}\n tabIndex={onClick ? 0 : undefined}\n >\n {src ? (\n <img\n src={src}\n alt={alt}\n className=\"w-full h-full rounded-full object-cover\"\n onError={(e) => {\n e.currentTarget.style.display = \"none\";\n }}\n />\n ) : (\n <div className={clsx(\"w-full h-full rounded-full flex items-center justify-center text-white font-semibold\", text, color)}>\n <ITText as=\"span\">{initials || alt.charAt(0).toUpperCase() || \"?\"}</ITText>\n </div>\n )}\n {badge && (\n <div className=\"absolute -bottom-0.5 -right-0.5\">\n {badge}\n </div>\n )}\n </div>\n );\n}\n","// components/ITBadge.tsx\nimport clsx from \"clsx\";\nimport { ITBadgetProps } from \"./badget.props\";\nimport {\n badgeSizes,\n} from \"@/types/badget.types\";\nimport { theme } from \"@/theme/theme\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITBadget({\n children,\n label,\n color = \"primary\",\n size = \"medium\",\n variant = \"filled\",\n className,\n}: ITBadgetProps) {\n // Access theme configuration\n const themeBadge = (theme as any).badge || {};\n const config = themeBadge[color] || themeBadge.primary || {};\n\n const getStyle = () => {\n const style: React.CSSProperties = {\n fontSize: config.fontSize,\n fontWeight: config.fontWeight,\n padding: config.padding,\n borderRadius: config.borderRadius, // '9999px' in theme\n borderWidth: '1px', // Default border width for consistency\n borderStyle: 'solid',\n borderColor: 'transparent', // Default transparent\n transition: 'all 0.2s',\n };\n\n if (variant === \"filled\") {\n style.backgroundColor = config.backgroundColor;\n style.color = config.color;\n style.borderColor = config.borderColor || 'transparent'; // Some filled badges might have subtle borders\n } else if (variant === \"outlined\") {\n style.backgroundColor = \"transparent\";\n // Use the dark text color for both text and border to ensure high contrast\n style.color = config.color; \n style.borderColor = config.color;\n }\n\n return style;\n };\n\n return (\n <span\n className={clsx(\n \"inline-flex items-center justify-center\",\n // Fallback size if theme doesn't have it (though theme does have it for primary)\n !config.padding ? badgeSizes[size] : \"\", \n className\n )}\n style={getStyle()}\n >\n {children || <ITText as=\"span\" className={clsx(\"font-semibold\")}>{label}</ITText>}\n </span>\n );\n}\n","import { ColorsTypes } from \"./colors.types\";\n\nexport const badgeVariants = {\n filled: \"filled\",\n outlined: \"outlined\",\n} as const;\n\nexport const badgeColors = {\n primary: \"bg-primary-500 text-white\",\n secondary: \"bg-secondary-500 text-white\",\n success: \"bg-success-500 text-white\",\n danger: \"bg-danger-500 text-white\",\n warning: \"bg-warning-500 text-black\",\n purple: \"bg-purple-500 text-white\",\n} as const;\n\nexport const outlinedBadgeColors = {\n primary: \"bg-primary-200 border border-primary-500 text-primary-700\",\n secondary: \"bg-secondary-200 border border-secondary-500 text-secondary-700\",\n success: \"bg-success-200 border border-success-500 text-success-700\",\n danger: \"bg-danger-200 border border-danger-500 text-danger-700\",\n warning: \"bg-warning-200 border border-warning-500 text-warning-700\",\n purple: \"bg-purple-200 border border-purple-500 text-purple-700\",\n} as const;\n\nexport const badgeSizes = {\n small: \"text-xs px-2 py-1\",\n medium: \"text-sm px-3 py-1.5\",\n large: \"text-base px-4 py-2\",\n} as const;\n\nexport const getBadgeColorClasses = (color: ColorsTypes, variant: keyof typeof badgeVariants) => {\n if (variant === \"outlined\") {\n return outlinedBadgeColors[color];\n }\n return badgeColors[color];\n};","/**\n * 1. Paleta base (Raw HEX values - Default Theme Fallback)\n */\nexport const palette = {\n blue: {\n 50: '#eff6ff',\n 100: '#dbeafe',\n 200: '#bfdbfe',\n 300: '#93c5fd',\n 400: '#60a5fa',\n 500: '#3b82f6',\n 600: '#2563eb',\n 700: '#1d4ed8',\n 800: '#1e40af',\n 900: '#1e3a8a',\n 950: '#172554',\n },\n cyan: {\n 50: '#ecfeff',\n 100: '#cffafe',\n 200: '#a5f3fc',\n 300: '#67e8f9',\n 400: '#22d3ee',\n 500: '#06b6d4',\n 600: '#0891b2',\n 700: '#0e7490',\n 800: '#155e75',\n 900: '#164e63',\n 950: '#083344',\n },\n gray: {\n 50: '#f8fafc',\n 100: '#f1f5f9',\n 200: '#e2e8f0',\n 300: '#cbd5e1',\n 400: '#94a3b8',\n 500: '#64748b',\n 600: '#475569',\n 700: '#334155',\n 800: '#1e293b',\n 900: '#0f172a',\n 950: '#020617',\n },\n success: {\n 50: '#ecfdf5', 100: '#d1fae5', 200: '#a7f3d0', 300: '#6ee7b7',\n 400: '#34d399', 500: '#10b981', 600: '#059669', 700: '#047857',\n 800: '#065f46', 900: '#064e3b', 950: '#022c22',\n },\n danger: {\n 50: '#fff1f2', 100: '#ffe4e6', 200: '#fecdd3', 300: '#fda4af',\n 400: '#fb7185', 500: '#f43f5e', 600: '#e11d48', 700: '#be123c',\n 800: '#9f1239', 900: '#881337', 950: '#4c0519',\n },\n warning: {\n 50: '#fffbeb', 100: '#fef3c7', 200: '#fde68a', 300: '#fcd34d',\n 400: '#fbbf24', 500: '#f59e0b', 600: '#d97706', 700: '#b45309',\n 800: '#92400e', 900: '#78350f', 950: '#451a03',\n },\n purple: {\n 50: '#f5f3ff', 100: '#ede9fe', 200: '#ddd6fe', 300: '#c4b5fd',\n 400: '#a78bfa', 500: '#8b5cf6', 600: '#7c3aed', 700: '#6d28d9',\n 800: '#5b21b6', 900: '#4c1d95', 950: '#2e1065',\n },\n info: {\n 50: '#f0f9ff', 100: '#e0f2fe', 200: '#bae6fd', 300: '#7dd3fc',\n 400: '#38bdf8', 500: '#0ea5e9', 600: '#0284c7', 700: '#0369a1',\n 800: '#075985', 900: '#0c4a6e', 950: '#082f49',\n },\n};\n\n/**\n * 2. Mapeo Dinámico a Variables CSS\n * Esta es la magia estructural: en lugar de acoplar la UI a un Hex estático, \n * todo apunta a var(--color-[name]-[shade])\n */\nconst createColorVar = (name: string) => ({\n 50: `var(--color-${name}-50)`,\n 100: `var(--color-${name}-100)`,\n 200: `var(--color-${name}-200)`,\n 300: `var(--color-${name}-300)`,\n 400: `var(--color-${name}-400)`,\n 500: `var(--color-${name}-500)`,\n 600: `var(--color-${name}-600)`,\n 700: `var(--color-${name}-700)`,\n 800: `var(--color-${name}-800)`,\n 900: `var(--color-${name}-900)`,\n 950: `var(--color-${name}-950)`,\n});\n\nexport const semanticColors = {\n primary: createColorVar('primary'),\n secondary: createColorVar('secondary'),\n success: createColorVar('success'),\n danger: createColorVar('danger'),\n warning: createColorVar('warning'),\n info: createColorVar('info'), \n purple: createColorVar('purple'),\n error: createColorVar('danger'), // Alias\n gray: createColorVar('secondary'), // Secondary as Gray\n};\n\n/**\n * 3. Tokens de componentes (heredan de las Vbles CSS semanticColors)\n */\nexport const components = {\n layout: {\n backgroundColor: `var(--layout-bg, ${semanticColors.gray[50]})`,\n contentPadding: 'var(--layout-padding, 1.5rem)',\n },\n topbar: {\n backgroundColor: 'var(--topbar-bg, rgba(255, 255, 255, 0.90))', \n borderColor: `var(--topbar-border, ${semanticColors.gray[200]})`,\n iconColor: `var(--topbar-icon, ${semanticColors.gray[500]})`,\n iconHoverColor: `var(--topbar-icon-hover, ${semanticColors.gray[700]})`,\n shadow: 'var(--topbar-shadow, 0 4px 6px -1px rgb(0 0 0 / 0.05), 0 2px 4px -2px rgb(0 0 0 / 0.025))',\n textColor: `var(--topbar-text, ${semanticColors.gray[700]})`,\n textHoverColor: `var(--topbar-text-hover, ${semanticColors.gray[900]})`,\n userMenu: {\n backgroundColor: `var(--topbar-user-bg, ${semanticColors.gray[50]})`,\n hoverBackground: `var(--topbar-user-hover, ${semanticColors.gray[100]})`,\n textColor: `var(--topbar-user-text, ${semanticColors.gray[900]})`,\n subtitleColor: `var(--topbar-user-subtitle, ${semanticColors.gray[500]})`,\n dropdown: {\n backgroundColor: 'var(--topbar-user-dropdown-bg, #ffffff)',\n borderColor: `var(--topbar-user-dropdown-border, ${semanticColors.gray[200]})`,\n itemHoverBackground: `var(--topbar-user-item-hover, ${semanticColors.gray[50]})`,\n }\n }\n },\n sidebar: {\n backgroundColor: 'var(--sidebar-bg, rgba(255, 255, 255, 0.90))',\n borderColor: `var(--sidebar-border, ${semanticColors.gray[200]})`,\n label: {\n color: `var(--sidebar-label-color, ${semanticColors.gray[700]})`,\n size: 'var(--sidebar-label-size, 0.9rem)',\n weight: 'var(--sidebar-label-weight, 500)',\n },\n icon: {\n color: `var(--sidebar-icon-color, ${semanticColors.gray[500]})`,\n size: 'var(--sidebar-icon-size, 1.25rem)',\n },\n hover: {\n backgroundColor: `var(--sidebar-hover-bg, ${semanticColors.gray[100]})`,\n },\n active: {\n backgroundColor: `var(--sidebar-active-bg, ${semanticColors.gray[50]})`,\n color: `var(--sidebar-active-color, ${semanticColors.gray[900]})`,\n iconColor: `var(--sidebar-active-icon, ${semanticColors.primary[500]})`, \n },\n badge: {\n backgroundColor: `var(--sidebar-badge-bg, ${semanticColors.primary[500]})`, \n color: 'var(--sidebar-badge-color, #ffffff)',\n },\n },\n\n button: {\n primary: {\n backgroundColor: semanticColors.primary[500],\n color: '#ffffff',\n hover: semanticColors.primary[600],\n active: semanticColors.primary[700],\n focus: `0 0 0 2px ${semanticColors.primary[200]}`,\n borderRadius: '0.375rem', \n padding: '0.5rem 1rem',\n fontSize: '0.875rem',\n fontWeight: '600',\n transition: 'all 150ms ease-in-out',\n },\n\n secondary: {\n backgroundColor: semanticColors.secondary[500],\n color: '#ffffff',\n hover: semanticColors.secondary[600],\n focus: `0 0 0 2px ${semanticColors.secondary[200]}`,\n borderRadius: '0.375rem',\n padding: '0.5rem 1rem',\n fontSize: '0.875rem',\n fontWeight: '600',\n },\n\n success: {\n backgroundColor: semanticColors.success[500],\n color: '#ffffff',\n hover: semanticColors.success[600],\n focus: `0 0 0 2px ${semanticColors.success[200]}`,\n borderRadius: '0.375rem',\n },\n\n danger: {\n backgroundColor: semanticColors.danger[500],\n color: '#ffffff',\n hover: semanticColors.danger[600],\n focus: `0 0 0 2px ${semanticColors.danger[200]}`,\n borderRadius: '0.375rem',\n },\n\n error: {\n backgroundColor: semanticColors.danger[500],\n color: '#ffffff',\n hover: semanticColors.danger[600],\n borderRadius: '0.375rem',\n },\n\n warning: {\n backgroundColor: semanticColors.warning[500],\n color: '#ffffff',\n hover: semanticColors.warning[600],\n focus: `0 0 0 2px ${semanticColors.warning[200]}`,\n borderRadius: '0.375rem',\n },\n\n info: {\n backgroundColor: semanticColors.info[500],\n color: '#ffffff',\n hover: semanticColors.info[600],\n focus: `0 0 0 2px ${semanticColors.info[200]}`,\n borderRadius: '0.375rem',\n },\n\n purple: {\n backgroundColor: semanticColors.purple[500],\n color: '#ffffff',\n hover: semanticColors.purple[600],\n focus: `0 0 0 2px ${semanticColors.purple[200]}`,\n borderRadius: '0.375rem',\n },\n \n outline: {\n backgroundColor: 'transparent',\n color: semanticColors.primary[600],\n borderColor: semanticColors.primary[600],\n borderWidth: '2px', \n hover: semanticColors.primary[50],\n borderRadius: '0.375rem',\n },\n },\n \n badge: {\n primary: {\n backgroundColor: semanticColors.primary[100],\n color: semanticColors.primary[800],\n borderColor: semanticColors.primary[200],\n borderRadius: '9999px',\n padding: '0.25rem 0.75rem',\n fontSize: '0.75rem',\n fontWeight: '500',\n },\n secondary: {\n backgroundColor: semanticColors.secondary[100],\n color: semanticColors.secondary[800],\n borderColor: semanticColors.secondary[200],\n borderRadius: '9999px',\n },\n success: {\n backgroundColor: semanticColors.success[100],\n color: semanticColors.success[800],\n borderColor: semanticColors.success[200],\n borderRadius: '9999px',\n },\n danger: {\n backgroundColor: semanticColors.danger[100],\n color: semanticColors.danger[800],\n borderColor: semanticColors.danger[200],\n borderRadius: '9999px',\n },\n warning: {\n backgroundColor: semanticColors.warning[100],\n color: semanticColors.warning[800],\n borderColor: semanticColors.warning[200],\n borderRadius: '9999px',\n },\n info: {\n backgroundColor: semanticColors.info[100],\n color: semanticColors.info[800],\n borderColor: semanticColors.info[200],\n borderRadius: '9999px',\n },\n purple: {\n backgroundColor: semanticColors.purple[100],\n color: semanticColors.purple[800],\n borderColor: semanticColors.purple[200],\n borderRadius: '9999px',\n },\n error: {\n backgroundColor: semanticColors.danger[100],\n color: semanticColors.danger[800],\n borderColor: semanticColors.danger[200],\n borderRadius: '9999px',\n },\n },\n\n card: {\n backgroundColor: 'var(--card-bg, #ffffff)',\n borderRadius: '1rem',\n borderColor: `var(--card-border, ${semanticColors.gray[200]})`,\n borderWidth: '1px',\n shadow: 'var(--card-shadow, 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1))',\n hover: {\n shadow: 'var(--card-shadow-hover, 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1))',\n },\n header: {\n backgroundColor: `var(--card-header-bg, ${semanticColors.gray[50]})`,\n borderBottom: `1px solid var(--card-header-border, var(--color-secondary-200))`,\n padding: '1rem 1.5rem',\n borderTopLeftRadius: '1rem',\n borderTopRightRadius: '1rem',\n },\n body: {\n padding: '1.5rem',\n },\n },\n\n input: {\n backgroundColor: 'var(--input-bg, #ffffff)',\n borderColor: `var(--input-border, ${semanticColors.gray[300]})`,\n borderRadius: '0.5rem',\n padding: '0.5rem 0.75rem',\n fontSize: '0.875rem',\n focus: {\n borderColor: `var(--input-focus-border, ${semanticColors.primary[500]})`,\n ring: `var(--input-focus-ring, 0 0 0 3px ${semanticColors.primary[100]})`,\n },\n placeholder: `var(--input-placeholder, ${semanticColors.gray[400]})`,\n disabled: {\n backgroundColor: `var(--input-disabled-bg, ${semanticColors.gray[100]})`,\n borderColor: `var(--input-disabled-border, ${semanticColors.gray[200]})`,\n },\n error: {\n borderColor: `var(--input-error-border, ${semanticColors.danger[500]})`,\n ring: `var(--input-error-ring, 0 0 0 3px ${semanticColors.danger[100]})`,\n },\n },\n\n table: {\n header: {\n backgroundColor: semanticColors.gray[50],\n color: semanticColors.gray[700],\n fontSize: '0.75rem',\n fontWeight: '600',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n },\n row: {\n hover: semanticColors.primary[50],\n borderBottom: `1px solid var(--color-secondary-200)`,\n },\n cell: {\n padding: '1rem 1.5rem',\n },\n },\n\n alert: {\n info: {\n backgroundColor: semanticColors.info[50],\n borderColor: semanticColors.info[200],\n color: semanticColors.info[800],\n icon: semanticColors.info[500],\n },\n success: {\n backgroundColor: semanticColors.success[50],\n borderColor: semanticColors.success[200],\n color: semanticColors.success[800],\n icon: semanticColors.success[500],\n },\n warning: {\n backgroundColor: semanticColors.warning[50],\n borderColor: semanticColors.warning[200],\n color: semanticColors.warning[800],\n icon: semanticColors.warning[500],\n },\n error: {\n backgroundColor: semanticColors.danger[50],\n borderColor: semanticColors.danger[200],\n color: semanticColors.danger[800],\n icon: semanticColors.danger[500],\n },\n },\n\n modal: {\n overlay: {\n backgroundColor: 'var(--modal-overlay, rgba(15, 23, 42, 0.75))',\n },\n content: {\n backgroundColor: 'var(--modal-bg, #ffffff)',\n borderRadius: '1rem',\n shadow: 'var(--modal-shadow, 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1))',\n },\n header: {\n padding: '1.5rem 1.5rem 0.5rem 1.5rem',\n borderBottom: `1px solid var(--modal-header-border, var(--color-secondary-200))`,\n },\n body: {\n padding: '1.5rem',\n },\n footer: {\n padding: '1rem 1.5rem',\n borderTop: `1px solid var(--modal-footer-border, var(--color-secondary-200))`,\n backgroundColor: `var(--modal-footer-bg, ${semanticColors.gray[50]})`,\n },\n },\n\n calendar: {\n backgroundColor: 'var(--calendar-bg, #ffffff)',\n borderColor: `var(--calendar-border, ${semanticColors.gray[200]})`,\n header: {\n textColor: `var(--calendar-header-text, ${semanticColors.gray[800]})`,\n hoverBackground: `var(--calendar-header-hover, ${semanticColors.gray[100]})`,\n },\n days: {\n textColor: `var(--calendar-days-text, ${semanticColors.gray[700]})`,\n weekendColor: `var(--calendar-days-weekend, ${semanticColors.gray[500]})`,\n outsideMonthColor: `var(--calendar-days-outside, ${semanticColors.gray[300]})`,\n },\n selection: {\n selectedColor: 'var(--calendar-selected-text, #ffffff)',\n selectedBackground: `var(--calendar-selected-bg, ${semanticColors.primary[600]})`,\n rangeBackground: `var(--calendar-range-bg, ${semanticColors.primary[50]})`,\n todayBackground: `var(--calendar-today-bg, ${semanticColors.primary[50]})`,\n todayColor: `var(--calendar-today-text, ${semanticColors.primary[600]})`,\n },\n },\n};\n\n/**\n * 4. Configuración global de tipografía y espaciado\n */\nexport const typography = {\n fontFamily: {\n sans: ['Inter', 'system-ui', '-apple-system', 'sans-serif'],\n mono: ['Fira Code', 'monospace'],\n },\n fontSize: {\n xs: '0.75rem',\n sm: '0.875rem',\n base: '1rem',\n lg: '1.125rem',\n xl: '1.25rem',\n '2xl': '1.5rem',\n '3xl': '1.875rem',\n '4xl': '2.25rem',\n },\n fontWeight: {\n normal: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n },\n lineHeight: {\n tight: '1.25',\n normal: '1.5',\n relaxed: '1.75',\n },\n};\n\n/**\n * 5. Theme final exportado\n */\nexport const theme = {\n palette, \n colors: semanticColors,\n typography,\n ...components,\n};","import clsx from \"clsx\";\nimport { ITBreadcrumbsProps } from \"./breadcrumbs.props\";\nimport { FaChevronRight } from \"react-icons/fa\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITBreadcrumbs({\n items,\n separator = <FaChevronRight size={10} />,\n className,\n}: ITBreadcrumbsProps) {\n return (\n <nav className={clsx(\"flex items-center gap-1.5 text-sm\", className)} aria-label=\"Breadcrumb\">\n {items.map((item, i) => {\n const isLast = i === items.length - 1;\n return (\n <span key={i} className=\"flex items-center gap-1.5\">\n {i > 0 && <span className=\"text-slate-300 dark:text-slate-600\">{separator}</span>}\n {isLast ? (\n <ITText as=\"span\" className=\"text-slate-800 dark:text-white font-semibold\">{item.label}</ITText>\n ) : item.href ? (\n <a href={item.href} className=\"text-slate-500 dark:text-slate-400 hover:text-slate-700 dark:hover:text-slate-200 transition-colors\">\n <ITText as=\"span\">{item.label}</ITText>\n </a>\n ) : (\n <button onClick={item.onClick} className=\"text-slate-500 dark:text-slate-400 hover:text-slate-700 dark:hover:text-slate-200 transition-colors\">\n <ITText as=\"span\">{item.label}</ITText>\n </button>\n )}\n </span>\n );\n })}\n </nav>\n );\n}\n","export const buttonVariants: Record<string, string> = {\n filled: \"border-transparent shadow-sm\",\n outlined: \"bg-transparent border-2\",\n raised: \"border-transparent shadow-md\",\n rounded: \"border-transparent shadow-sm rounded-full\",\n text: \"bg-transparent border-transparent shadow-none hover:bg-black/5 dark:hover:bg-white/10\",\n \"raised-text\": \"bg-white border border-gray-200 shadow-sm hover:shadow-md\",\n \"icon-only\": \"p-2 aspect-square flex items-center justify-center border-transparent shadow-sm\",\n link: \"bg-transparent border-transparent shadow-none hover:underline px-0\",\n};\n\nexport const buttonSizes: Record<string, string> = {\n small: \"text-xs px-3 py-1.5\",\n medium: \"text-sm px-5 py-2.5\",\n large: \"text-lg px-6 py-3\",\n};\n","import {\n buttonSizes,\n buttonVariants,\n} from \"@app/types/button.types\";\nimport clsx from \"clsx\";\nimport { useState } from \"react\";\nimport { theme } from \"@/theme/theme\";\nimport { ITButtonProps } from \"./button.props\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITButton({\n children,\n label,\n icon,\n onClick,\n type = \"button\",\n color = \"primary\",\n size = \"medium\",\n disabled = false,\n className,\n variant = \"filled\",\n ariaLabel,\n title,\n}: ITButtonProps) {\n const [isHovered, setIsHovered] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n \n // Get specific button config from theme\n const themeBtn = theme.button as any;\n const themeConfig = themeBtn[color] || themeBtn.primary;\n \n // Determine if the button should look \"filled\" (solid bg) or \"outlined/text\" (transparent/white bg)\n const isSolid = [\"filled\", \"raised\", \"rounded\", \"icon-only\"].includes(variant || \"filled\");\n const isOutlined = variant === \"outlined\";\n const isText = variant === \"text\" || variant === \"link\";\n const isRaisedText = variant === \"raised-text\";\n\n const getStyle = () => {\n // if (disabled) return {}; // Removed to allow styles to render with opacity\n\n const mainColor = themeConfig.backgroundColor; // The vibrant color\n const textColor = themeConfig.color; // Usually white for filled\n\n let style: React.CSSProperties = {\n // fontSize: themeConfig.fontSize, // Removed to allow size prop to control font size\n fontWeight: themeConfig.fontWeight,\n // padding: themeConfig.padding, // Removed to allow size prop to control padding\n borderRadius: themeConfig.borderRadius, // Default from theme\n transition: themeConfig.transition || 'all 0.2s',\n };\n\n if (variant === \"rounded\") {\n style.borderRadius = \"9999px\";\n }\n\n if (variant === \"icon-only\") {\n style.padding = \"0.5rem\"; // Square padding override\n }\n\n if (isSolid) {\n style.backgroundColor = (isHovered && !disabled) ? themeConfig.hover : mainColor;\n style.color = textColor;\n } else if (isOutlined) {\n style.backgroundColor = \"transparent\";\n style.color = mainColor;\n style.borderColor = mainColor;\n if (isHovered && !disabled) {\n style.backgroundColor = `${mainColor}10`; // 10% opacity\n }\n } else if (isText) {\n style.backgroundColor = (isHovered && !disabled) ? `${mainColor}10` : \"transparent\";\n style.color = mainColor;\n } else if (isRaisedText) {\n style.backgroundColor = \"var(--card-bg, #ffffff)\";\n style.color = mainColor;\n if (isHovered && !disabled) style.backgroundColor = \"var(--card-header-bg, #f8fafc)\"; \n }\n\n // Apply focus style from theme (box-shadow ring)\n if (isFocused && themeConfig.focus && !disabled) {\n style.boxShadow = themeConfig.focus;\n }\n\n return style;\n };\n\n return (\n <button\n type={type}\n className={clsx(\n \"focus:outline-none\", // Removed focus:ring-2 focus:ring-offset-2 to use theme style\n // Apply variant base styles (border, shadow, rounded-full)\n buttonVariants[variant || \"filled\"],\n // Apply size classes (padding/font-size)\n buttonSizes[size],\n className,\n { \"opacity-50 cursor-not-allowed\": disabled }\n )}\n style={getStyle()}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onClick={onClick}\n disabled={disabled}\n aria-label={ariaLabel || label}\n title={title || ariaLabel || label}\n >\n {children || (\n <span className={clsx(\"inline-flex items-center gap-1.5 font-semibold\", { \"opacity-50\": disabled })}>\n {icon && <span className=\"flex-shrink-0\">{icon}</span>}\n <ITText as=\"span\">{label}</ITText>\n </span>\n )}\n </button>\n );\n}\n","import React, { useMemo, useState, useEffect } from 'react';\nimport {\n format,\n addDays,\n startOfWeek,\n eachDayOfInterval,\n endOfWeek,\n isSameDay,\n isToday,\n startOfDay,\n parseISO,\n differenceInMinutes,\n addMinutes,\n startOfMonth,\n endOfMonth,\n addMonths,\n isSameMonth,\n isBefore,\n isAfter\n} from 'date-fns';\nimport { es } from 'date-fns/locale';\nimport { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\nimport { FaChevronLeft, FaChevronRight } from 'react-icons/fa';\nimport { ITCalendarProps, CalendarEvent } from './calendar.props';\nimport ITText from \"@/components/text/text\";\n\nfunction cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n// ----------------------------------------------------------------------\n// Constants\n// ----------------------------------------------------------------------\n\nconst START_HOUR = 6; // 6 AM\nconst END_HOUR = 22; // 10 PM\nconst HOURS_COUNT = END_HOUR - START_HOUR;\n\n// Generate time slots\nconst TIME_SLOTS = Array.from({ length: HOURS_COUNT + 1 }, (_, i) => START_HOUR + i);\n\n// ----------------------------------------------------------------------\n// Component\n// ----------------------------------------------------------------------\n\nexport const ITCalendar: React.FC<ITCalendarProps> = ({\n events = [],\n mode: modeProp,\n onEventClick,\n onSlotClick,\n onSlotHover,\n onSelectRange,\n value,\n onChange,\n selectionMode = 'single',\n startDate,\n endDate,\n minDate,\n maxDate,\n className,\n variant = 'primary',\n}) => {\n // Determine mode: if onChange provided, assume picker (month) unless specialized\n const mode = modeProp || (onChange ? 'month' : 'week');\n \n const [currentDate, setCurrentDate] = useState(value || new Date());\n const [view, setView] = useState<'calendar' | 'years'>('calendar');\n\n // Selection/Accent colors based on variant\n const getVariantStyles = () => {\n const v = variant || 'primary';\n return {\n '--calendar-selected-bg': `var(--color-${v})`,\n '--calendar-range-bg': `var(--color-${v}-50)`,\n '--calendar-today-bg': `var(--color-${v}-100)`,\n '--calendar-today-text': `var(--color-${v})`,\n } as React.CSSProperties;\n };\n\n // Sync internal state if value changes (for picker)\n useEffect(() => {\n if (value) setCurrentDate(value);\n }, [value]);\n\n // Navigation handlers\n const handleNext = () => {\n if (view === 'years') {\n setCurrentDate((d) => {\n const newDate = new Date(d);\n newDate.setFullYear(d.getFullYear() + 12);\n return newDate;\n });\n } else if (mode === 'month') {\n setCurrentDate((d) => addMonths(d, 1));\n } else if (mode === 'day') {\n setCurrentDate((d) => addDays(d, 1));\n } else {\n setCurrentDate((d) => addDays(d, 7));\n }\n };\n\n const handlePrev = () => {\n if (view === 'years') {\n setCurrentDate((d) => {\n const newDate = new Date(d);\n newDate.setFullYear(d.getFullYear() - 12);\n return newDate;\n });\n } else if (mode === 'month') {\n setCurrentDate((d) => addMonths(d, -1));\n } else if (mode === 'day') {\n setCurrentDate((d) => addDays(d, -1));\n } else {\n setCurrentDate((d) => addDays(d, -7));\n }\n };\n \n const handleToday = () => {\n setCurrentDate(new Date());\n setView('calendar');\n };\n\n // ----------------------------------------------------------------------\n // Week / Day View Logic\n // ----------------------------------------------------------------------\n\n const viewDays = useMemo(() => {\n if (mode === 'day') {\n return [currentDate];\n }\n const start = startOfWeek(currentDate, { weekStartsOn: 1 });\n const end = endOfWeek(currentDate, { weekStartsOn: 1 });\n return eachDayOfInterval({ start, end });\n }, [currentDate, mode]);\n\n const getEventStyle = (event: CalendarEvent) => {\n const start = typeof event.start === 'string' ? parseISO(event.start) : event.start;\n const end = typeof event.end === 'string' ? parseISO(event.end) : event.end;\n \n const startMinutes = start.getHours() * 60 + start.getMinutes();\n const dayStartMinutes = START_HOUR * 60;\n \n const duration = differenceInMinutes(end, start);\n \n return {\n top: `${((startMinutes - dayStartMinutes) / 60) * 80}px`,\n height: `${(duration / 60) * 80}px`,\n };\n };\n\n const weekEvents = useMemo(() => {\n return events.filter(event => {\n const eventStart = typeof event.start === 'string' ? parseISO(event.start) : event.start;\n return viewDays.some(day => isSameDay(day, eventStart));\n });\n }, [events, viewDays]);\n\n\n // ----------------------------------------------------------------------\n // Month View Logic (Picker)\n // ----------------------------------------------------------------------\n\n const monthDays = useMemo(() => {\n const start = startOfWeek(startOfMonth(currentDate), { weekStartsOn: 1 });\n const end = endOfWeek(endOfMonth(currentDate), { weekStartsOn: 1 });\n return eachDayOfInterval({ start, end });\n }, [currentDate]);\n\n const isDateDisabled = (date: Date) => {\n if (minDate && isBefore(date, startOfDay(minDate))) return true;\n if (maxDate && isAfter(date, startOfDay(maxDate))) return true;\n return false;\n };\n\n const [dragStart, setDragStart] = useState<Date | null>(null);\n const [dragCurrent, setDragCurrent] = useState<Date | null>(null);\n const isDraggingRef = React.useRef(false);\n\n const handleMouseDown = (date: Date, e: React.MouseEvent) => {\n // Only enable drag if onSelectRange is provided\n if (!onSelectRange) return;\n // We do NOT stopPropagation here completely because we might want other things?\n // Actually for drag we probably want to claim it.\n e.stopPropagation(); \n e.preventDefault(); // Prevent text selection\n \n isDraggingRef.current = false;\n setDragStart(date);\n setDragCurrent(date);\n };\n\n const handleMouseEnter = (date: Date) => {\n if (onSlotHover) {\n onSlotHover(date);\n }\n if (dragStart) {\n isDraggingRef.current = true;\n setDragCurrent(date);\n }\n };\n\n // This handles the end of the drag (assigned to container)\n const handleMouseUp = () => {\n if (dragStart && dragCurrent && onSelectRange && isDraggingRef.current) {\n // Normalize start/end\n let start = dragStart;\n let end = dragCurrent;\n if (isBefore(end, start)) {\n [start, end] = [end, start];\n }\n // End date should include the selected slot duration (add 30 mins)\n const finalEnd = addMinutes(end, 30);\n \n if (!isSameDay(start, finalEnd) && differenceInMinutes(finalEnd, start) > 0) {\n // Ensure we don't accidentally select across days if logic isn't robust\n // But currently `dragCurrent` comes from same view.\n // Just call it.\n onSelectRange(start, finalEnd);\n } else {\n onSelectRange(start, finalEnd);\n }\n }\n \n // We don't reset isDraggingRef.current here immediately if we want to block the subsequent click?\n // But clearing dragStart will be checked by onClick?\n // No, onClick checks !dragStart... but dragStart becomes null here.\n // So onClick needs to check isDraggingRef.\n \n setDragStart(null);\n setDragCurrent(null);\n };\n \n // ----------------------------------------------------------------------\n // Year View Data\n // ----------------------------------------------------------------------\n const startYear = currentDate.getFullYear() - 6;\n const years = Array.from({ length: 12 }, (_, i) => startYear + i);\n\n // ----------------------------------------------------------------------\n // Render\n // ----------------------------------------------------------------------\n\n return (\n <div \n className={cn(\"flex flex-col h-full rounded-lg shadow-sm overflow-hidden select-none\", className)}\n style={{\n backgroundColor: 'var(--calendar-bg, #ffffff)',\n border: '1px solid var(--calendar-border, #e2e8f0)',\n ...getVariantStyles(),\n }}\n onMouseUp={handleMouseUp}\n onMouseLeave={() => {\n setDragStart(null);\n setDragCurrent(null);\n }}\n >\n \n {/* Header */}\n <div \n className=\"flex items-center justify-between px-2 py-2 border-b\" \n style={{ \n backgroundColor: 'var(--calendar-bg, #ffffff)',\n borderBottomColor: 'var(--calendar-border, #e2e8f0)'\n }}\n >\n <ITText\n as=\"h2\"\n className=\"text-sm font-bold capitalize cursor-pointer transition-colors select-none px-2 py-1 rounded\"\n style={{ \n color: 'var(--calendar-header-text, #1e293b)',\n }}\n onClick={() => setView(view === 'calendar' ? 'years' : 'calendar')}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--calendar-header-hover, #f1f5f9)';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n }}\n >\n {view === 'years' \n ? `${years[0]} - ${years[years.length - 1]}` \n : format(currentDate, 'MMMM yyyy', { locale: es })\n }\n </ITText>\n <div className=\"flex items-center gap-1\">\n <button \n onClick={handlePrev} \n type=\"button\" \n className=\"p-1.5 rounded-md transition-colors\"\n style={{ color: 'var(--calendar-days-text, #334155)' }}\n onMouseEnter={(e) => { e.currentTarget.style.backgroundColor = 'var(--calendar-header-hover, #f1f5f9)'; }}\n onMouseLeave={(e) => { e.currentTarget.style.backgroundColor = 'transparent'; }}\n >\n <FaChevronLeft size={14} />\n </button>\n <button \n onClick={handleToday} \n type=\"button\" \n className=\"text-sm font-medium px-3 py-1.5 rounded-md transition-colors\"\n style={{ color: 'var(--calendar-days-text, #334155)' }}\n onMouseEnter={(e) => { e.currentTarget.style.backgroundColor = 'var(--calendar-header-hover, #f1f5f9)'; }}\n onMouseLeave={(e) => { e.currentTarget.style.backgroundColor = 'transparent'; }}\n >\n <ITText as=\"span\">Hoy</ITText>\n </button>\n <button \n onClick={handleNext} \n type=\"button\" \n className=\"p-1.5 rounded-md transition-colors\"\n style={{ color: 'var(--calendar-days-text, #334155)' }}\n onMouseEnter={(e) => { e.currentTarget.style.backgroundColor = 'var(--calendar-header-hover, #f1f5f9)'; }}\n onMouseLeave={(e) => { e.currentTarget.style.backgroundColor = 'transparent'; }}\n >\n <FaChevronRight size={14} />\n </button>\n </div>\n </div>\n\n {/* Content */}\n <div \n className=\"flex-1 overflow-auto relative\"\n style={{ backgroundColor: 'var(--calendar-bg, #ffffff)' }}\n >\n \n {view === 'years' ? (\n <div className=\"p-4 grid grid-cols-4 gap-2\">\n {years.map(year => (\n <button\n key={year}\n type=\"button\"\n className={cn(\n \"h-10 rounded-md text-sm font-medium transition-colors border border-transparent\",\n year === currentDate.getFullYear() \n ? \"bg-[var(--calendar-selected-bg)] text-[var(--calendar-selected-text)]\" \n : \"hover:bg-[var(--calendar-today-bg)] hover:text-[var(--calendar-today-text)]\"\n )}\n style={{\n color: year === currentDate.getFullYear() \n ? 'var(--calendar-selected-text, #ffffff)' \n : 'var(--calendar-days-text, #334155)'\n }}\n onClick={() => {\n setCurrentDate((d) => {\n const newDate = new Date(d);\n newDate.setFullYear(year);\n return newDate;\n });\n setView('calendar');\n }}\n >\n <ITText as=\"span\">{year}</ITText>\n </button>\n ))}\n </div>\n ) : mode === 'month' ? (\n <div className=\"p-4\">\n {/* Weekday Headers */}\n <div className=\"grid grid-cols-7 mb-2\">\n {['Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb', 'Dom'].map(day => (\n <ITText key={day} as=\"div\" className=\"text-center text-xs font-semibold text-gray-400 uppercase py-1\">\n {day}\n </ITText>\n ))}\n </div>\n {/* Days Grid */}\n <div className=\"grid grid-cols-7 gap-1\">\n {monthDays.map((day) => {\n const isDisabled = isDateDisabled(day);\n const isCurrentMonth = isSameMonth(day, currentDate);\n \n // Selection logic\n const isSelected = selectionMode === 'single' && value && isSameDay(day, value);\n const isRangeStart = selectionMode === 'range' && startDate && isSameDay(day, startDate);\n const isRangeEnd = selectionMode === 'range' && endDate && isSameDay(day, endDate);\n const isInRange = selectionMode === 'range' && startDate && endDate && isAfter(day, startDate) && isBefore(day, endDate);\n \n return (\n <button\n key={day.toISOString()}\n type=\"button\"\n disabled={isDisabled}\n onClick={() => onChange && onChange(day)}\n className={cn(\n \"h-10 w-full flex items-center justify-center rounded-md text-sm transition-colors relative\",\n !isCurrentMonth && \"opacity-40\",\n isDisabled && \"opacity-20 cursor-not-allowed\",\n )}\n style={{\n backgroundColor: isSelected || isRangeStart || isRangeEnd \n ? 'var(--calendar-selected-bg, #2563eb)' \n : isInRange \n ? 'var(--calendar-range-bg, #eff6ff)'\n : isToday(day)\n ? 'var(--calendar-today-bg, #eff6ff)'\n : 'transparent',\n color: isSelected || isRangeStart || isRangeEnd\n ? 'var(--calendar-selected-text, #ffffff)'\n : isToday(day)\n ? 'var(--calendar-today-text, #2563eb)'\n : 'var(--calendar-days-text, #334155)',\n fontWeight: isSelected || isRangeStart || isRangeEnd || isToday(day) ? '700' : '400',\n }}\n >\n <ITText as=\"span\">{format(day, 'd')}</ITText>\n \n {/* Connection for range selection to make it look continuous */}\n {selectionMode === 'range' && isRangeStart && endDate && (\n <div className=\"absolute right-0 top-0 bottom-0 w-2 bg-[var(--calendar-range-bg)] -z-10\" />\n )}\n {selectionMode === 'range' && isRangeEnd && startDate && (\n <div className=\"absolute left-0 top-0 bottom-0 w-2 bg-[var(--calendar-range-bg)] -z-10\" />\n )}\n </button>\n );\n })}\n </div>\n </div>\n ) : (\n /* Week/Day View (Scheduler) */\n <div className={cn(\"flex h-full\", mode === 'week' ? \"min-w-[800px]\" : \"w-full\")}>\n {/* Time Sidebar */}\n <div \n className=\"flex-none w-16 pt-10 select-none\"\n style={{\n backgroundColor: 'var(--calendar-header-hover, #f1f5f9)',\n borderRight: '1px solid var(--calendar-border, #e2e8f0)',\n }}\n >\n {TIME_SLOTS.map((hour) => (\n hour < END_HOUR && (\n <div key={hour} className=\"h-20 relative text-right pr-2\">\n <ITText as=\"span\" className=\"text-xs text-slate-400 dark:text-slate-500 -mt-2 inline-block transform -translate-y-1/2\">\n {format(new Date().setHours(hour, 0), 'HH:mm')}\n </ITText>\n </div>\n )\n ))}\n </div>\n\n {/* Days Columns */}\n <div className=\"flex flex-1\">\n {viewDays.map((day) => (\n <div \n key={day.toISOString()} \n className=\"flex-1 min-w-[120px] relative\"\n style={{ borderRight: '1px solid var(--calendar-border, #e2e8f0)' }}\n >\n \n {/* Day Header */}\n <div \n className=\"h-10 flex flex-col items-center justify-center sticky top-0 z-10\"\n style={{\n backgroundColor: isToday(day) ? 'var(--calendar-today-bg, #eff6ff)' : 'var(--calendar-bg, #ffffff)',\n borderBottom: '1px solid var(--calendar-border, #e2e8f0)',\n }}\n >\n <ITText\n as=\"span\"\n className=\"text-xs font-semibold uppercase\"\n style={{\n color: isToday(day) ? 'var(--calendar-today-text, #2563eb)' : 'var(--calendar-days-text, #334155)',\n opacity: isToday(day) ? 1 : 0.6,\n }}\n >\n {format(day, 'EEE', { locale: es })}\n </ITText>\n <ITText\n as=\"span\"\n className=\"text-sm font-bold w-6 h-6 flex items-center justify-center rounded-full mt-0.5\"\n style={{\n color: isToday(day) ? 'var(--calendar-selected-text, #ffffff)' : 'var(--calendar-days-text, #334155)',\n backgroundColor: isToday(day) ? 'var(--calendar-selected-bg, #2563eb)' : 'transparent',\n }}\n >\n {format(day, 'd')}\n </ITText>\n </div>\n\n {/* Slots Grid */}\n <div className=\"relative\">\n {TIME_SLOTS.map((hour) => (\n hour < END_HOUR && (\n <div \n key={hour} \n className=\"h-20 relative group\"\n style={{ borderBottom: '1px dashed var(--calendar-border, #e2e8f0)' }}\n >\n {/* Slot 00 */}\n <div \n className=\"absolute inset-x-0 top-0 h-10 border-b border-transparent hover:border-[var(--calendar-today-bg)] hover:bg-[var(--calendar-today-bg)] transition-colors cursor-pointer z-0\"\n onMouseDown={(e) => {\n const d = new Date(day); d.setHours(hour, 0, 0, 0);\n handleMouseDown(d, e);\n }}\n onMouseEnter={() => {\n const d = new Date(day); d.setHours(hour, 0, 0, 0);\n handleMouseEnter(d);\n }}\n onClick={() => {\n if (!isDraggingRef.current) { \n const d = new Date(day); d.setHours(hour, 0, 0, 0);\n onSlotClick && onSlotClick(d);\n }\n }}\n />\n {/* Slot 30 */}\n <div \n className=\"absolute inset-x-0 bottom-0 h-10 hover:border-[var(--calendar-today-bg)] hover:bg-[var(--calendar-today-bg)] transition-colors cursor-pointer z-0\"\n onMouseDown={(e) => {\n const d = new Date(day); d.setHours(hour, 30, 0, 0);\n handleMouseDown(d, e);\n }}\n onMouseEnter={() => {\n const d = new Date(day); d.setHours(hour, 30, 0, 0);\n handleMouseEnter(d);\n }}\n onClick={() => {\n if (!isDraggingRef.current) {\n const d = new Date(day); d.setHours(hour, 30, 0, 0);\n onSlotClick && onSlotClick(d);\n }\n }}\n />\n </div>\n )\n ))}\n \n {/* Selection Overlay */}\n {dragStart && dragCurrent && isSameDay(dragStart, day) && (\n (() => {\n let start = dragStart;\n let end = dragCurrent;\n if (isBefore(end, start)) [start, end] = [end, start];\n const finalEnd = addMinutes(end, 30); // Visual end is end of slot\n\n const startMinutes = start.getHours() * 60 + start.getMinutes();\n const dayStartMinutes = START_HOUR * 60;\n const duration = differenceInMinutes(finalEnd, start);\n const top = ((startMinutes - dayStartMinutes) / 60) * 80;\n const height = (duration / 60) * 80;\n\n return (\n <div \n className=\"absolute left-1 right-1 bg-[var(--calendar-selected-bg)]/30 border border-[var(--calendar-selected-bg)] rounded z-10 pointer-events-none\"\n style={{ top: `${top}px`, height: `${height}px` }}\n />\n );\n })()\n )}\n\n {/* Events */}\n {weekEvents\n .filter((event) => isSameDay(typeof event.start === 'string' ? parseISO(event.start) : event.start, day))\n .map((event) => {\n const style = getEventStyle(event);\n return (\n <div\n key={event.id}\n className={cn(\n \"absolute left-1 right-1 rounded px-2 py-1 text-xs cursor-pointer hover:brightness-95 transition-all shadow-sm overflow-hidden z-20 border-l-4\",\n !event.color && \"bg-[var(--calendar-today-bg)] text-[var(--calendar-today-text)] border-[var(--calendar-selected-bg)]\"\n )}\n style={{ \n top: style.top, \n height: style.height,\n backgroundColor: event.color ? `${event.color}20` : undefined,\n borderColor: event.color,\n color: event.color ? event.color : undefined\n }}\n onClick={(e) => {\n e.stopPropagation();\n onEventClick && onEventClick(event);\n }}\n >\n <ITText as=\"div\" className=\"font-semibold truncate\">{event.title}</ITText>\n <ITText as=\"div\" className=\"opacity-80 truncate\">\n {format(typeof event.start === 'string' ? parseISO(event.start) : event.start, 'HH:mm')} - \n {format(typeof event.end === 'string' ? parseISO(event.end) : event.end, 'HH:mm')}\n </ITText>\n </div>\n );\n })}\n </div>\n \n {/* Current Time Line */}\n {isToday(day) && (\n <div \n className=\"absolute left-0 right-0 border-t-2 border-danger-500 z-30 pointer-events-none\"\n style={{\n top: `${((new Date().getHours() * 60 + new Date().getMinutes() - (START_HOUR * 60)) / 60) * 80}px`\n }}\n >\n <div className=\"absolute -left-1.5 -top-1.5 w-3 h-3 bg-danger-500 rounded-full\" />\n </div>\n )}\n\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default ITCalendar;\n","import clsx from \"clsx\";\nimport { ITCardProps } from \"./card.props\";\nimport { useState } from \"react\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITCard({\n title,\n image,\n alt = \"Card Image\",\n children,\n actions,\n className,\n imageClassName,\n titleClassName,\n contentClassName,\n actionClassName,\n onClick,\n}: ITCardProps) {\n const [isHovered, setIsHovered] = useState(false);\n\n const containerStyle: React.CSSProperties = {\n backgroundColor: \"var(--card-bg, #ffffff)\",\n borderColor: \"var(--card-border, #e2e8f0)\",\n borderWidth: \"1px\",\n borderRadius: \"var(--card-radius, 0.75rem)\",\n boxShadow: onClick\n ? isHovered\n ? \"0 8px 25px -5px rgba(0, 0, 0, 0.1)\"\n : \"0 1px 3px 0 rgba(0, 0, 0, 0.05)\"\n : \"none\",\n transition: onClick ? \"all 0.2s ease-in-out\" : \"none\",\n cursor: onClick ? \"pointer\" : \"default\",\n };\n\n const bodyStyle: React.CSSProperties = {\n padding: \"1.25rem\",\n };\n\n return (\n <div\n onClick={onClick}\n onMouseEnter={() => onClick && setIsHovered(true)}\n onMouseLeave={() => onClick && setIsHovered(false)}\n className={clsx(\"overflow-hidden flex flex-col\", className)}\n style={containerStyle}\n >\n {image && (\n <img\n src={image}\n alt={alt}\n className={clsx(\"w-full h-48 object-cover\", imageClassName)}\n />\n )}\n\n <div className={clsx(contentClassName)} style={bodyStyle}>\n {title && (\n <ITText\n as=\"h3\"\n className={clsx(\"text-xl font-semibold mb-2\", titleClassName)}\n >\n {title}\n </ITText>\n )}\n <ITText as=\"div\" className=\"text-gray-600\">{children}</ITText>\n </div>\n {actions && (\n <div\n className={clsx(\n \"p-4 border-t border-gray-100 mt-auto\",\n actionClassName,\n )}\n >\n {actions}\n </div>\n )}\n </div>\n );\n}\n\n","import clsx from \"clsx\";\nimport { ITCheckboxProps } from \"./checkbox.props\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITCheckbox({\n checked = false,\n onChange,\n label,\n disabled = false,\n indeterminate = false,\n className,\n name,\n}: ITCheckboxProps) {\n return (\n <label\n className={clsx(\n \"inline-flex items-center gap-2 cursor-pointer select-none\",\n disabled && \"opacity-50 cursor-not-allowed\",\n className\n )}\n >\n <input\n type=\"checkbox\"\n name={name}\n checked={checked}\n onChange={(e) => onChange?.(e.target.checked)}\n disabled={disabled}\n ref={(el) => { if (el) el.indeterminate = indeterminate; }}\n className=\"peer sr-only\"\n />\n <div\n className={clsx(\n \"w-4 h-4 rounded border-2 flex items-center justify-center transition-all\",\n checked\n ? \"bg-primary-500 border-primary-500\"\n : \"border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-800\",\n !disabled && \"peer-focus:ring-2 peer-focus:ring-primary-200\",\n )}\n >\n {checked && (\n <svg className=\"w-2.5 h-2.5 text-white\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M2 6L5 9L10 3\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )}\n {indeterminate && !checked && (\n <div className=\"w-2 h-0.5 bg-slate-500 rounded\" />\n )}\n </div>\n {label && <ITText as=\"span\" className=\"text-sm text-slate-700 dark:text-slate-300\">{label}</ITText>}\n </label>\n );\n}\n","import clsx from \"clsx\";\nimport { ITConfirmDialogProps } from \"./confirm-dialog.props\";\nimport ITButton from \"../button/button\";\nimport { FaExclamationTriangle } from \"react-icons/fa\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITConfirmDialog({\n isOpen,\n onClose,\n onConfirm,\n title = \"Confirmar acción\",\n message = \"¿Estás seguro de que deseas continuar?\",\n confirmLabel = \"Confirmar\",\n cancelLabel = \"Cancelar\",\n variant = \"primary\",\n loading = false,\n}: ITConfirmDialogProps) {\n if (!isOpen) return null;\n\n return (\n <div className=\"fixed inset-0 z-[300] flex items-center justify-center p-4\">\n <div className=\"absolute inset-0 bg-black/40 backdrop-blur-sm\" onClick={onClose} />\n <div\n className={clsx(\n \"relative z-10 bg-white dark:bg-slate-900 rounded-2xl shadow-2xl max-w-md w-full p-6\",\n \"border border-slate-200 dark:border-slate-700\"\n )}\n >\n <div className=\"flex items-start gap-4\">\n <div className=\"w-10 h-10 rounded-full bg-amber-100 dark:bg-amber-950/30 flex items-center justify-center flex-shrink-0\">\n <FaExclamationTriangle className=\"text-amber-600\" size={18} />\n </div>\n <div className=\"flex-1\">\n <ITText as=\"h3\" className=\"text-lg font-bold text-slate-800 dark:text-white\">{title}</ITText>\n <ITText as=\"p\" className=\"text-sm text-slate-500 dark:text-slate-400 mt-1\">{message}</ITText>\n </div>\n </div>\n <div className=\"flex justify-end gap-3 mt-6\">\n <ITButton label={cancelLabel} variant=\"outlined\" size=\"small\" onClick={onClose} disabled={loading} />\n <ITButton label={confirmLabel} color={variant} size=\"small\" onClick={onConfirm} disabled={loading} />\n </div>\n </div>\n </div>\n );\n}\n","export type TableVariants = \"default\" | \"striped\" | \"bordered\";\n\nexport type TableSize = \"sm\" | \"md\" | \"lg\";\n\nexport const variantStyles: Record<TableVariants, string> = {\n default: \"\",\n striped: \"divide-y divide-gray-200\",\n bordered: \"border border-gray-200\",\n};\n\nexport const sizeStyles: Record<TableSize, string> = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-lg\",\n};\n","import { useTableState } from \"@/hooks/useTableState\";\nimport { sizeStyles, variantStyles } from \"@/types/table.types\";\nimport clsx from \"clsx\";\nimport React, { useState, useEffect, useCallback, useRef } from \"react\";\nimport { FaCheck, FaSpinner, FaTimes } from \"react-icons/fa\";\nimport { MdOutlineSwapVert } from \"react-icons/md\";\nimport ITInput from \"../input/input\";\nimport ITPagination from \"../pagination/pagination\";\nimport ITSelect from \"../select/select\";\nimport { Column } from \"../table/table.props\";\nimport { formatCurrencyMX } from \"../table/table\";\nimport { ITDataTableProps } from \"./dataTable.props\";\nimport ITText from \"@/components/text/text\";\n\nconst getNestedValue = (obj: unknown, path: string) => {\n return path.split(\".\").reduce((acc, part) => acc && acc[part], obj);\n};\n\nconst EMPTY_OBJECT = {};\n\nexport default function ITDataTable<T extends Record<string, unknown>>({\n columns,\n fetchData,\n debounceMs = 500,\n externalFilters = EMPTY_OBJECT,\n loadingIndicator,\n fetchOnMount = true,\n reloadTrigger,\n containerClassName,\n className,\n variant = \"default\",\n size = \"md\",\n itemsPerPageOptions = [5, 10, 20],\n defaultItemsPerPage = 10,\n title,\n}: ITDataTableProps<T>) {\n const [data, setData] = useState<T[]>([]);\n const [totalItems, setTotalItems] = useState(0);\n const [isLoading, setIsLoading] = useState(fetchOnMount);\n\n const {\n currentPage,\n itemsPerPage,\n filters,\n sortConfig,\n totalPages,\n goToPage,\n handleFilterChange,\n handleSort,\n handleItemsPerPageChange,\n } = useTableState({ defaultItemsPerPage });\n\n const debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const computedTotalPages = Math.ceil(totalItems / itemsPerPage) || 1;\n\n const performFetch = useCallback(async () => {\n setIsLoading(true);\n try {\n const response = await fetchData({\n page: currentPage,\n limit: itemsPerPage,\n filters: { ...filters, ...externalFilters },\n sort: sortConfig || undefined,\n });\n setData(response.data || []);\n setTotalItems(response.total || 0);\n } catch (error) {\n console.error(\"ITDataTable: Error fetching data\", error);\n setData([]);\n setTotalItems(0);\n } finally {\n setIsLoading(false);\n }\n }, [currentPage, itemsPerPage, filters, sortConfig, fetchData, externalFilters]);\n\n useEffect(() => {\n if (!fetchOnMount && data.length === 0 && !isLoading) return;\n\n if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current);\n\n debounceTimerRef.current = setTimeout(() => {\n performFetch();\n }, debounceMs);\n\n return () => {\n if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current);\n };\n }, [currentPage, itemsPerPage, sortConfig, filters, externalFilters, reloadTrigger, fetchOnMount, performFetch]);\n\n const renderFilterInput = (col: Column<T>) => {\n if (!col.filter) return null;\n\n if (col.type === \"boolean\") {\n const currentValue = filters[col.key];\n const nextValue =\n currentValue === undefined ? true : currentValue === true ? false : undefined;\n\n const getToggleLabel = () => {\n if (currentValue === undefined) return \"Mostrar todos\";\n if (currentValue === true) return \"Filtrar solo verdaderos\";\n return \"Filtrar solo falsos\";\n };\n\n return (\n <button\n className=\"flex items-center justify-center cursor-pointer focus:outline-none focus:ring-2 focus:ring-slate-400 focus:ring-offset-2 rounded-full p-1 transition-all duration-200\"\n onClick={() => handleFilterChange(col.key, nextValue)}\n aria-label={`${getToggleLabel()} para ${col.label}`}\n title={`${getToggleLabel()} para ${col.label}`}\n disabled={isLoading}\n >\n <div className=\"relative w-10 h-5 bg-gray-300 rounded-full\">\n <div\n className={clsx(\n \"absolute top-0.5 w-4 h-4 rounded-full transition-all duration-300 shadow-sm\",\n {\n \"left-0.5 bg-gray-400\": currentValue === undefined,\n \"left-5 bg-slate-500\": currentValue === true,\n \"left-0.5 bg-gray-500\": currentValue === false,\n }\n )}\n />\n </div>\n </button>\n );\n }\n\n if (col.filter === \"catalog\" && col.catalogOptions) {\n if (col.catalogOptions.loading) {\n return <FaSpinner className=\"animate-spin\" aria-label=\"Cargando opciones\" title=\"Cargando opciones\" />;\n }\n if (col.catalogOptions.error) {\n return <ITText as=\"span\" className=\"text-red-500 text-xs\">Error cargando</ITText>;\n }\n return (\n <ITSelect\n name={`filter-${col.key}`}\n options={[\n { value: \"\", label: \"Todos\" },\n ...col.catalogOptions.data.map((item) => ({\n value: String(item.id),\n label: item.name,\n })),\n ]}\n value={String(filters[col.key] || \"\")}\n onChange={(e) => {\n const value = e.target.value === \"\" ? undefined : e.target.value;\n handleFilterChange(col.key, value);\n }}\n onBlur={() => {}}\n className=\"w-full text-xs\"\n disabled={isLoading}\n />\n );\n }\n\n return (\n <ITInput\n name={`filter-${col.key}`}\n className=\"w-full text-xs\"\n placeholder=\"Buscar...\"\n value={String(filters[col.key] || \"\")}\n onChange={(e) => handleFilterChange(col.key, e.target.value)}\n onBlur={() => {}}\n disabled={isLoading}\n />\n );\n };\n\n const renderCellContent = (col: Column<T>, row: T) => {\n const value = getNestedValue(row, col.key);\n if (col.render) return col.render(row);\n\n switch (col.type) {\n case \"number\":\n return typeof value === \"number\" && col.currencyMX ? formatCurrencyMX(value) : value;\n case \"boolean\":\n return value ? (\n <FaCheck className=\"text-green-500\" aria-label=\"Verdadero\" title=\"Verdadero\" />\n ) : (\n <FaTimes className=\"text-red-500\" aria-label=\"Falso\" title=\"Falso\" />\n );\n case \"actions\":\n return col.actions ? col.actions(row) : null;\n case \"catalog\":\n if (col.catalogOptions) {\n const catalogItem = col.catalogOptions.data.find((item) => item.id === value);\n return catalogItem?.name || value;\n }\n return value as React.ReactNode;\n default:\n return value as React.ReactNode;\n }\n };\n\n return (\n <div className={clsx(\"space-y-4 w-full relative\", containerClassName)}>\n <div className=\"rounded-xl shadow-sm border border-secondary-200 overflow-hidden\" style={{ backgroundColor: 'var(--color-table-rowBg, #ffffff)' }}>\n {title && (\n <div className=\"px-6 py-5 border-b border-secondary-100 flex justify-between items-center\" style={{ backgroundColor: 'var(--color-table-rowBg, #ffffff)' }}>\n <ITText as=\"h2\" className=\"text-xl font-bold text-secondary-900 leading-tight\">{title}</ITText>\n {isLoading && (\n <div className=\"text-secondary-400\">\n {loadingIndicator || <FaSpinner className=\"animate-spin text-primary-500 text-xl\" />}\n </div>\n )}\n </div>\n )}\n\n <div className=\"overflow-x-auto relative min-h-[200px]\">\n {isLoading && (\n <div className=\"absolute inset-0 z-20 flex items-center justify-center bg-white/40 backdrop-blur-[2px] transition-all duration-300\">\n <div className=\"flex flex-col items-center gap-3 p-6 rounded-2xl shadow-xl border border-secondary-100 animate-in fade-in zoom-in duration-300\" style={{ backgroundColor: 'var(--color-table-rowBg, #ffffff)' }}>\n {loadingIndicator || (\n <>\n <FaSpinner className=\"animate-spin text-primary-500 text-4xl\" />\n <ITText as=\"span\" className=\"text-sm font-semibold text-secondary-600 animate-pulse\">Cargando datos...</ITText>\n </>\n )}\n </div>\n </div>\n )}\n\n <table\n className={clsx(\n \"min-w-max w-full text-sm text-left text-secondary-600 transition-opacity duration-300\",\n isLoading ? \"opacity-50\" : \"opacity-100\",\n variantStyles[variant],\n sizeStyles[size],\n className\n )}\n >\n <thead>\n <tr className=\"bg-secondary-50 border-b border-secondary-200 text-xs uppercase tracking-wider font-semibold text-secondary-500\">\n {columns.map((col) => (\n <th key={col.key} scope=\"col\" className={clsx(\"px-4 py-4 align-top\", col.className)}>\n <div className=\"flex flex-col gap-3 min-w-[150px]\">\n <div className=\"flex items-center justify-between gap-2\">\n <ITText as=\"span\" className=\"text-secondary-700 font-bold\">{col.label}</ITText>\n {col.sortable && col.type !== \"actions\" && (\n <button\n onClick={() => handleSort(col.key)}\n disabled={isLoading}\n className={`p-1 rounded-md transition-colors ${\n sortConfig?.key === col.key\n ? \"bg-secondary-200 text-secondary-900\"\n : \"hover:bg-secondary-200 text-secondary-400 hover:text-secondary-700\"\n } disabled:opacity-50`}\n title={`Ordenar por ${col.label}`}\n >\n <MdOutlineSwapVert className=\"w-4 h-4\" aria-hidden=\"true\" />\n </button>\n )}\n </div>\n\n <div className=\"w-full\">{col.filter ? renderFilterInput(col) : null}</div>\n </div>\n </th>\n ))}\n </tr>\n </thead>\n <tbody className=\"divide-y divide-secondary-100\">\n {data.length > 0 ? (\n data.map((row, rowIndex) => (\n <tr key={rowIndex} className=\"hover:bg-secondary-50/50 transition-colors duration-150 group\">\n {columns.map((col) => (\n <td key={`${rowIndex}-${col.key}`} className={clsx(\"px-4 py-3 align-middle\", col.className)}>\n {col.type === \"actions\" ? (\n <div className=\"flex items-center justify-center gap-2\">\n {renderCellContent(col, row) as React.ReactNode}\n </div>\n ) : (\n <div className=\"text-secondary-700 font-medium\">\n {renderCellContent(col, row) as React.ReactNode}\n </div>\n )}\n </td>\n ))}\n </tr>\n ))\n ) : (\n <tr>\n <td colSpan={columns.length} className=\"px-6 py-20 text-center\">\n {!isLoading && (\n <div className=\"flex flex-col items-center justify-center text-secondary-400\">\n <ITText as=\"span\" className=\"text-lg\">No se encontraron resultados</ITText>\n <ITText as=\"span\" className=\"text-sm mt-1\">Intenta ajustar los filtros</ITText>\n </div>\n )}\n </td>\n </tr>\n )}\n </tbody>\n </table>\n </div>\n </div>\n\n <div className=\"rounded-b-xl border-t border-secondary-200 px-6 py-4\" style={{ backgroundColor: 'var(--color-table-rowBg, #ffffff)' }}>\n <ITPagination\n currentPage={currentPage}\n totalPages={computedTotalPages}\n onPageChange={goToPage}\n color=\"primary\"\n itemsPerPageOptions={itemsPerPageOptions}\n itemsPerPage={itemsPerPage}\n onItemsPerPageChange={handleItemsPerPageChange}\n totalItems={totalItems}\n />\n </div>\n </div>\n );\n}\n","\nimport clsx from \"clsx\";\nimport { ITInputProps } from \"./input.props\";\nimport { KeyboardEvent, useState, useEffect, useRef, useCallback } from \"react\";\nimport { theme } from \"@/theme/theme\";\nimport { disabledOverlay, iconAbsoluteLeft, iconAbsoluteRight, inputError, inputLabel } from \"@/utils/styles\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITInput({\n name,\n type = \"text\",\n label,\n placeholder,\n value,\n onChange,\n onBlur,\n disabled = false,\n className,\n containerClassName,\n labelClassName,\n touched,\n error,\n formatNumber = true,\n required = false,\n autoFocus = false,\n onClick,\n onKeyDown,\n iconLeft,\n iconRight,\n maxLength,\n minLength,\n checked,\n showHintLength = false,\n currencyFormat = false,\n rows = 4,\n min,\n max,\n readOnly = false,\n focusContent\n}: ITInputProps) {\n const isCheckboxOrRadio = type === \"checkbox\" || type === \"radio\";\n const isNumberType = type === \"number\";\n const isTextArea = type === \"textarea\";\n\n const [displayValue, setDisplayValue] = useState<string>(\"\");\n const [isFocused, setIsFocused] = useState(false);\n const [hasSelectedAll, setHasSelectedAll] = useState(false);\n const [showPassword, setShowPassword] = useState(false);\n const [localTouched, setLocalTouched] = useState(false);\n \n const inputRef = useRef<HTMLInputElement>(null);\n\n // Theme logic\n const inputTheme = (theme as any).input || {};\n\n const getStyle = () => {\n const style: React.CSSProperties = {\n backgroundColor: inputTheme.backgroundColor,\n borderColor: inputTheme.borderColor,\n borderRadius: inputTheme.borderRadius,\n padding: inputTheme.padding,\n fontSize: inputTheme.fontSize,\n borderWidth: '1px',\n borderStyle: 'solid',\n transition: 'all 0.2s',\n color: 'var(--input-text-color, var(--color-secondary-900))', // Theme-aware text color\n };\n\n if (disabled) {\n style.backgroundColor = inputTheme.disabled?.backgroundColor || style.backgroundColor;\n style.borderColor = inputTheme.disabled?.borderColor || style.borderColor;\n style.opacity = 0.7; // Visual cue\n }\n\n if (hasError) {\n style.borderColor = inputTheme.error?.borderColor || 'red';\n if (isFocused) {\n style.boxShadow = inputTheme.error?.ring;\n }\n } else if (isFocused && !readOnly) {\n style.boxShadow = inputTheme.focus?.ring;\n }\n\n if (iconLeft) {\n style.paddingLeft = '2.5rem';\n }\n if (iconRight) {\n style.paddingRight = '2.5rem';\n }\n\n return style;\n };\n \n const isTouched = touched !== undefined ? touched : localTouched;\n const isEmpty = isCheckboxOrRadio\n ? !checked\n : (value === undefined || value === null || String(value).trim() === \"\");\n\n const effectiveError = error !== undefined && error !== false\n ? (error === true ? \"Este campo es requerido\" : error)\n : (required && isEmpty ? \"Este campo es requerido\" : undefined);\n\n const hasError = isTouched && !!effectiveError;\n const errorMessage = typeof effectiveError === \"string\" ? effectiveError : \"Este campo es requerido\";\n\n\n const handleClick = (e: React.MouseEvent<HTMLInputElement>) => {\n if (onClick) {\n onClick();\n }\n \n if (!readOnly && !hasSelectedAll) {\n e.currentTarget.select();\n setHasSelectedAll(true);\n }\n };\n\n const formatValue = useCallback(\n (val: number | string | undefined | null): string => {\n const num =\n typeof val === \"string\" ? parseFloat(val.replace(/,/g, \"\")) : val;\n\n if (num == null || isNaN(num)) {\n return \"\";\n }\n\n if (currencyFormat) {\n return num.toLocaleString(\"es-MX\", {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n });\n }\n\n return num.toString();\n },\n [currencyFormat]\n );\n\n const unformatValue = useCallback(\n (val: number | string | undefined | null): string => {\n if (val == null) return \"\";\n\n return String(val).replace(/,/g, \"\");\n },\n []\n );\n\nuseEffect(() => {\n if (!isFocused) {\n if (isNumberType) {\n if (formatNumber) {\n setDisplayValue(formatValue(value));\n } else {\n setDisplayValue(String(value ?? \"\"));\n }\n } else {\n setDisplayValue(String(value ?? \"\"));\n }\n }\n}, [value, isFocused, isNumberType, formatValue, formatNumber]);\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (readOnly || !isNumberType) return;\n\n const { key, ctrlKey, metaKey } = e;\n const {\n value: currentValue,\n selectionStart,\n selectionEnd,\n } = e.currentTarget;\n\n const allowedKeys = [\n \"Backspace\",\n \"Tab\",\n \"Escape\",\n \"Enter\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"Delete\",\n \"Home\",\n \"End\",\n \"Unidentified\" // mobile keyboards\n ];\n if (allowedKeys.includes(key) || ctrlKey || metaKey) {\n return;\n }\n\n if (!currencyFormat && (key === \".\" || key === \",\")) {\n e.preventDefault();\n return;\n }\n\n if (\n currencyFormat &&\n (key === \".\" || key === \",\") &&\n currentValue.includes(\".\")\n ) {\n // Check if the current dot is within the selected range (it will be overwritten)\n const dotIndex = currentValue.indexOf(\".\");\n const replacingDot = selectionStart !== null && selectionEnd !== null && selectionStart <= dotIndex && dotIndex < selectionEnd;\n if (!replacingDot) {\n e.preventDefault();\n return;\n }\n }\n\n const allowedCharsRegex = currencyFormat ? /^[0-9.,]$/ : /^[0-9]$/;\n // If it's a mobile key event like Unidentified, we bypass the regex check safely\n if (key !== \"Unidentified\" && !allowedCharsRegex.test(key)) {\n e.preventDefault();\n return;\n }\n\n if (\n max !== undefined &&\n /^[0-9]$/.test(key) &&\n selectionStart !== null &&\n selectionEnd !== null\n ) {\n const currentUnformatted = unformatValue(currentValue);\n const nextValueStr =\n currentUnformatted.slice(0, selectionStart) +\n key +\n currentUnformatted.slice(selectionEnd);\n\n const numericValue = parseFloat(nextValueStr);\n\n if (!isNaN(numericValue) && numericValue > max) {\n e.preventDefault();\n }\n }\n };\n\nconst handleNumberChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (readOnly) return;\n\n let rawValue = e.target.value;\n let cleanedValue = \"\";\n\n if (currencyFormat) {\n if (rawValue.includes(\",\") && rawValue.includes(\".\")) {\n rawValue = rawValue.replace(/,/g, \"\"); \n } else if (rawValue.includes(\",\")) {\n rawValue = rawValue.replace(/,/g, \".\");\n }\n\n cleanedValue = rawValue.replace(/[^0-9.]/g, \"\");\n const parts = cleanedValue.split(\".\");\n if (parts.length > 1) {\n // Keep only first dot, and restrict decimals to 2 digits\n const decimals = parts.slice(1).join(\"\").substring(0, 2);\n cleanedValue = parts[0] + \".\" + decimals;\n }\n } else {\n cleanedValue = rawValue.replace(/[^0-9]/g, \"\");\n }\n\n setDisplayValue(cleanedValue);\n\n if (onChange) {\n let valueToSend: number | string = cleanedValue;\n\n if (!formatNumber) {\n valueToSend = cleanedValue; \n } else if (cleanedValue !== \"\") {\n if (currencyFormat) {\n const numericValue = parseFloat(cleanedValue);\n if (!isNaN(numericValue)) {\n // ALWAYS send string representation to avoid dropping trailing decimals\n valueToSend = cleanedValue;\n }\n } else {\n const numericValue = parseInt(cleanedValue, 10);\n if (!isNaN(numericValue)) {\n valueToSend = cleanedValue;\n }\n }\n }\n\n const newEvent = {\n ...e,\n target: {\n ...e.target,\n name,\n value: valueToSend.toString(),\n },\n };\n onChange(newEvent);\n }\n};\n\n const handleTextChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (readOnly) return;\n\n const value = e.target.value;\n\n if(maxLength){\n if(value.length > maxLength) return;\n }\n if (onChange) {\n\n const newEvent = {\n ...e,\n target: {\n ...e.target,\n name,\n value: value,\n },\n };\n onChange(newEvent);\n }\n\n }\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(true);\n setHasSelectedAll(false);\n if (readOnly || !isNumberType) return;\n\n setDisplayValue(unformatValue(value));\n e.currentTarget.select();\n };\n\nconst handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n setLocalTouched(true);\n setHasSelectedAll(false);\n setIsFocused(false);\n if (readOnly) {\n onBlur?.(e);\n return;\n }\n\n if (isNumberType) {\n const currentValue = displayValue;\n \n // Caso cuando formatNumber es false - mantener el valor como string sin parsing\n if (!formatNumber) {\n if (onChange && String(value) !== currentValue) {\n const newEvent = {\n ...e,\n target: {\n ...e.target,\n name,\n value: currentValue, // Mantener como string\n },\n };\n onChange(newEvent);\n }\n onBlur?.(e);\n return;\n }\n\n // Lógica original para cuando formatNumber es true\n let numericValue: number | undefined = undefined;\n let valueToSend: number | string | undefined = undefined;\n\n let cleanedValue = \"\";\n if (currencyFormat) {\n cleanedValue = currentValue.replace(/[^0-9.]/g, \"\");\n const parts = cleanedValue.split(\".\");\n if (parts.length > 2) {\n cleanedValue = parts[0] + \".\" + parts.slice(1).join(\"\");\n }\n if (cleanedValue === \".\") cleanedValue = \"\";\n } else {\n cleanedValue = currentValue.replace(/[^0-9]/g, \"\");\n }\n\n const parsed = currencyFormat\n ? parseFloat(cleanedValue)\n : parseInt(cleanedValue, 10);\n\n if (!isNaN(parsed)) {\n numericValue = parsed;\n\n if (min !== undefined && numericValue < min) {\n numericValue = min;\n }\n if (max !== undefined && numericValue > max) {\n numericValue = max;\n }\n valueToSend = numericValue;\n\n setDisplayValue(formatValue(numericValue));\n } else {\n setDisplayValue(\"\");\n valueToSend = undefined;\n }\n\n if (onChange && String(value) !== String(valueToSend)) {\n const newEvent = {\n ...e,\n target: {\n ...e.target,\n name,\n value: valueToSend,\n },\n };\n onChange(newEvent);\n } else if (\n String(value) === String(valueToSend) &&\n displayValue !== formatValue(value) &&\n !isNaN(parsed)\n ) {\n setDisplayValue(formatValue(value));\n } else if (isNaN(parsed)) {\n setDisplayValue(\"\");\n }\n }\n onBlur?.(e);\n};\n\n const currentLength = isNumberType\n ? (currencyFormat ? displayValue.replace(/[.,]/g, \"\") : displayValue).length\n : typeof value === \"string\"\n ? value.length\n : String(value ?? \"\").length;\n\n return (\n <div className={clsx(\"w-full\", containerClassName)}>\n {isCheckboxOrRadio ? (\n // CHECKBOX / RADIO LAYOUT (Row)\n <div className=\"flex items-center gap-2\">\n <input\n ref={inputRef}\n name={name}\n id={name}\n type={type}\n checked={checked}\n onChange={(e) => {\n setLocalTouched(true);\n handleTextChange(e);\n }}\n onBlur={(e) => {\n setLocalTouched(true);\n onBlur?.(e);\n }}\n onKeyDown={onKeyDown}\n disabled={disabled}\n required={required}\n className={clsx(\n \"peer\",\n \"form-radio h-4 w-4 text-slate-600 focus:ring-slate-500 transition-all duration-200\",\n type === \"checkbox\" && \"form-checkbox rounded\",\n className,\n { [disabledOverlay]: disabled },\n { \"border-red-500\": hasError }\n )}\n />\n {label && (\n <label htmlFor={name} className=\"text-sm text-gray-700 dark:text-slate-300 select-none\">\n {label} {required && <ITText as=\"span\" className=\"text-red-500\">*</ITText>}\n </label>\n )}\n </div>\n ) : (\n // TEXT / NUMBER / TEXTAREA LAYOUT (Column)\n <div className=\"flex flex-col gap-1.5\">\n {label && (\n <label\n htmlFor={name}\n className={clsx(\n inputLabel(hasError),\n labelClassName\n )}\n >\n {label}\n {required && <ITText as=\"span\" className=\"text-red-500 ml-1\">*</ITText>}\n </label>\n )}\n \n <div className=\"relative w-full\">\n {iconLeft && (\n <div className={iconAbsoluteLeft}>\n {iconLeft}\n </div>\n )}\n\n {isTextArea ? (\n <textarea\n name={name}\n id={name}\n placeholder={placeholder}\n value={value ?? \"\"}\n onChange={readOnly ? undefined : onChange}\n onBlur={(e) => {\n if (readOnly) return;\n setLocalTouched(true);\n onBlur?.(e);\n }}\n onKeyDown={onKeyDown}\n readOnly={readOnly}\n maxLength={maxLength}\n minLength={minLength}\n disabled={disabled}\n required={required}\n autoFocus={autoFocus}\n onClick={onClick}\n rows={rows}\n className={clsx(\n \"peer\",\n \"focus:outline-none w-full resize-none\",\n className,\n { \"cursor-not-allowed\": disabled }\n )}\n style={getStyle()}\n />\n ) : (\n <>\n <input\n ref={inputRef}\n name={name}\n id={name}\n type={\n isNumberType\n ? \"text\"\n : type === \"password\"\n ? showPassword\n ? \"text\"\n : \"password\"\n : type\n }\n inputMode={\n isNumberType\n ? currencyFormat\n ? \"decimal\"\n : \"numeric\"\n : undefined\n }\n placeholder={placeholder}\n value={isNumberType ? displayValue : String(value ?? \"\")}\n // checked not needed here\n onChange={isNumberType ? handleNumberChange : handleTextChange}\n onFocus={isNumberType ? handleFocus : () => setIsFocused(true)}\n onBlur={\n isNumberType\n ? handleBlur\n : (e) => {\n setIsFocused(false);\n setLocalTouched(true);\n onBlur?.(e);\n }\n }\n onKeyDown={isNumberType ? handleKeyDown : onKeyDown}\n readOnly={readOnly}\n maxLength={isNumberType && !currencyFormat ? maxLength : undefined}\n minLength={minLength}\n min={min}\n max={max}\n disabled={disabled}\n required={required}\n autoFocus={autoFocus}\n onClick={focusContent ? handleClick : onClick}\n className={clsx(\n \"peer\",\n \"focus:outline-none w-full\",\n className,\n { \"cursor-not-allowed\": disabled },\n { \"pl-10\": iconLeft },\n { \"pr-10\": iconRight || type === \"password\" }\n )}\n style={getStyle()}\n />\n \n {/* Password Toggle Button */}\n {type === \"password\" && (\n <button\n type=\"button\"\n className=\"absolute inset-y-0 right-0 flex items-center pr-3 z-10 text-gray-400 hover:text-gray-600 focus:outline-none\"\n onClick={() => setShowPassword(!showPassword)}\n tabIndex={-1} // Don't allow tabbing into the eye icon\n >\n {showPassword ? (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M9.88 9.88a3 3 0 1 0 4.24 4.24\"/><path d=\"M10.73 5.08A10.43 10.43 0 0 1 12 5c7 0 10 7 10 7a13.16 13.16 0 0 1-1.67 2.68\"/><path d=\"M6.61 6.61A13.526 13.526 0 0 0 2 12s3 7 10 7a9.74 9.74 0 0 0 5.39-1.61\"/><line x1=\"2\" x2=\"22\" y1=\"2\" y2=\"22\"/></svg>\n ) : (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/></svg>\n )}\n </button>\n )}\n </>\n )}\n\n {iconRight && type !== \"password\" && (\n <div className={iconAbsoluteRight}>\n {iconRight}\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* Validation message aligned with input */}\n {hasError && !isCheckboxOrRadio && (\n <div className=\"flex-shrink-0 min-w-[140px] flex items-center pt-3\">\n <ITText as=\"p\" className={inputError}>{errorMessage}</ITText>\n </div>\n )}\n \n {/* Length hint below if needed */}\n {showHintLength && (minLength || maxLength) && !isCheckboxOrRadio && (\n <div className=\"mt-1 text-xs\">\n<ITText as=\"p\" className=\"text-gray-500\">\n {currentLength}{maxLength && `/${maxLength}`}\n </ITText>\n </div>\n )}\n \n {/* Validation for checkbox/radio - keep below */}\n {isCheckboxOrRadio && hasError && (\n <div className=\"mt-1 text-xs\">\n <ITText as=\"p\" className=\"text-red-500\">{errorMessage}</ITText>\n </div>\n )}\n </div>\n );\n}\n","import clsx from \"clsx\";\n\n// ──────────────────────────────────────────────\n// INPUT-LIKE COMPONENTS\n// ──────────────────────────────────────────────\n\nexport function inputContainer(hasError?: boolean, disabled?: boolean) {\n return clsx(\n \"w-full border border-solid transition-all duration-200 rounded-lg px-3 py-2 text-sm\",\n \"focus:outline-none focus:ring-2\",\n hasError\n ? \"border-red-500 ring-red-100\"\n : \"border-gray-300 focus:border-primary-500 focus:ring-primary-100\",\n disabled && \"opacity-50 cursor-not-allowed bg-gray-100\"\n );\n}\n\nexport function inputLabel(error?: boolean) {\n return clsx(\n \"text-sm font-medium\",\n error ? \"text-red-500\" : \"text-gray-700 dark:text-slate-300\"\n );\n}\n\nexport const inputError = \"text-red-500 text-xs mt-1\";\n\nexport function inputWrapper(className?: string) {\n return clsx(\"flex flex-col gap-1.5\", className);\n}\n\nexport const iconAbsoluteLeft = \"absolute inset-y-0 left-0 flex items-center pl-3 z-10\";\nexport const iconAbsoluteRight = \"absolute inset-y-0 right-0 flex items-center pr-3 z-10\";\n\n// ──────────────────────────────────────────────\n// TABLE COMPONENTS\n// ──────────────────────────────────────────────\n\nexport const tableContainer = \"rounded-xl shadow-sm border border-secondary-200 overflow-hidden\";\n\nexport const tableHeaderRow = \"bg-secondary-50 border-b border-secondary-200 text-xs uppercase tracking-wider font-semibold text-secondary-500\";\n\nexport function tableHeaderCell(className?: string) {\n return clsx(\"px-4 py-4 align-top\", className);\n}\n\nexport const tableSortButtonActive = \"bg-secondary-200 text-secondary-900\";\nexport const tableSortButtonInactive = \"hover:bg-secondary-200 text-secondary-400 hover:text-secondary-700\";\n\nexport const tableBody = \"divide-y divide-secondary-100\";\n\nexport const tableRow = \"hover:bg-secondary-50/50 transition-colors duration-150 group\";\n\nexport function tableCell(className?: string) {\n return clsx(\"px-4 py-3 align-middle\", className);\n}\n\nexport const tableActionsCell = \"flex items-center justify-center gap-2\";\nexport const tableCellText = \"text-secondary-700 font-medium\";\n\nexport function tableEmptyState(colSpan: number) {\n return { colSpan, className: \"px-6 py-20 text-center\" };\n}\n\nexport const tableEmptyContent = \"flex flex-col items-center justify-center text-secondary-400\";\n\n// ──────────────────────────────────────────────\n// CARD / CONTAINER\n// ──────────────────────────────────────────────\n\nexport const cardContainer = \"overflow-hidden\";\n\n// ──────────────────────────────────────────────\n// FORM GRID\n// ──────────────────────────────────────────────\n\nexport const gridColsClasses: Record<number, string> = {\n 1: \"grid-cols-1\",\n 2: \"grid-cols-2\",\n 3: \"grid-cols-3\",\n 4: \"grid-cols-4\",\n 6: \"grid-cols-6\",\n 8: \"grid-cols-8\",\n 12: \"grid-cols-12\",\n};\n\nexport function getGridColsClass(columns: number) {\n return gridColsClasses[columns] || \"grid-cols-12\";\n}\n\nexport function getColSpanClass(\n span: number | number[] | { sm?: number; md?: number; lg?: number; xl?: number },\n maxCols: number\n) {\n if (typeof span === \"number\") {\n return `col-span-${Math.min(span, maxCols)}`;\n }\n if (Array.isArray(span)) {\n const [sm, md, lg] = span;\n return clsx(\n `col-span-${Math.min(sm, maxCols)}`,\n md !== undefined && `md:col-span-${Math.min(md, maxCols)}`,\n lg !== undefined && `lg:col-span-${Math.min(lg, maxCols)}`\n );\n }\n const classes: string[] = [];\n if (span.sm) classes.push(`col-span-${Math.min(span.sm, maxCols)}`);\n if (span.md) classes.push(`md:col-span-${Math.min(span.md, maxCols)}`);\n if (span.lg) classes.push(`lg:col-span-${Math.min(span.lg, maxCols)}`);\n if (span.xl) classes.push(`xl:col-span-${Math.min(span.xl, maxCols)}`);\n return classes.length ? clsx(classes) : `col-span-${maxCols}`;\n}\n\nexport const formGrid = (columns: number) =>\n clsx(\"grid gap-y-6 gap-x-5\", getGridColsClass(columns));\n\n// ──────────────────────────────────────────────\n// DISABLED OVERLAY\n// ──────────────────────────────────────────────\n\nexport const disabledOverlay = \"opacity-50 cursor-not-allowed\";\n","import React from \"react\";\nimport clsx from \"clsx\";\nimport { FaChevronLeft, FaChevronRight } from \"react-icons/fa\";\nimport { ITPaginationProps } from \"./pagination.props\";\nimport { theme } from \"@/theme/theme\";\nimport ITSelect from \"../select/select\";\nimport ITText from \"@/components/text/text\";\n\nconst DOTS = \"...\";\n\n// Helper hook to calculate page ranges\nconst usePagination = ({\n totalPages,\n currentPage,\n siblingCount = 1,\n}: {\n totalPages: number;\n currentPage: number;\n siblingCount?: number;\n}) => {\n return React.useMemo(() => {\n // Pages count is determined as siblingCount + firstPage + lastPage + currentPage + 2*DOTS\n const totalPageNumbers = siblingCount + 5;\n\n /*\n Case 1:\n If the number of pages is less than the page numbers we want to show in our\n paginationComponent, we return the range [1..totalPageCount]\n */\n if (totalPageNumbers >= totalPages) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n\n const leftSiblingIndex = Math.max(currentPage - siblingCount, 1);\n const rightSiblingIndex = Math.min(currentPage + siblingCount, totalPages);\n\n const shouldShowLeftDots = leftSiblingIndex > 2;\n const shouldShowRightDots = rightSiblingIndex < totalPages - 2;\n\n const firstPageIndex = 1;\n const lastPageIndex = totalPages;\n\n /*\n Case 2: No left dots to show, but rights dots to be shown\n */\n if (!shouldShowLeftDots && shouldShowRightDots) {\n let leftItemCount = 3 + 2 * siblingCount;\n let leftRange = Array.from({ length: leftItemCount }, (_, i) => i + 1);\n return [...leftRange, DOTS, totalPages];\n }\n\n /*\n Case 3: No right dots to show, but left dots to be shown\n */\n if (shouldShowLeftDots && !shouldShowRightDots) {\n let rightItemCount = 3 + 2 * siblingCount;\n let rightRange = Array.from(\n { length: rightItemCount },\n (_, i) => totalPages - rightItemCount + i + 1\n );\n return [firstPageIndex, DOTS, ...rightRange];\n }\n\n /*\n Case 4: Both left and right dots to be shown\n */\n if (shouldShowLeftDots && shouldShowRightDots) {\n let middleRange = Array.from(\n { length: rightSiblingIndex - leftSiblingIndex + 1 },\n (_, i) => leftSiblingIndex + i\n );\n return [firstPageIndex, DOTS, ...middleRange, DOTS, lastPageIndex];\n }\n }, [totalPages, currentPage, siblingCount]);\n};\n\nexport default function ITPagination({\n currentPage,\n totalPages,\n onPageChange,\n siblingCount = 1,\n color = \"primary\",\n className = \"\",\n itemsPerPageOptions,\n itemsPerPage,\n onItemsPerPageChange,\n totalItems,\n}: ITPaginationProps) {\n const paginationRange = usePagination({\n currentPage,\n totalPages,\n siblingCount,\n });\n\n // If there are less than 2 pages and no items per page options, we can hide the component\n if (currentPage === 0 || (!itemsPerPageOptions && paginationRange && paginationRange.length < 2)) {\n return null;\n }\n\n // Resolve color\n const isSemantic = color in theme.colors;\n const resolvedBgColor = isSemantic\n ? theme.colors[color as keyof typeof theme.colors][500]\n : color;\n const resolvedHoverBgColor = isSemantic\n ? theme.colors[color as keyof typeof theme.colors][50]\n : \"#f3f4f6\"; // fallback generic gray hover\n\n const handleNext = () => {\n if (currentPage < totalPages) {\n onPageChange(currentPage + 1);\n }\n };\n\n const handlePrevious = () => {\n if (currentPage > 1) {\n onPageChange(currentPage - 1);\n }\n };\n\n // Base styles for list items\n const baseItemClass =\n \"flex items-center justify-center w-8 h-8 rounded-full text-sm font-medium transition-colors cursor-pointer select-none\";\n\n const renderPaginationControls = () => (\n <div className=\"flex items-center gap-1\">\n {/* Previous Button */}\n <div\n className={clsx(\n baseItemClass,\n currentPage === 1\n ? \"text-gray-300 cursor-not-allowed\"\n : \"text-gray-500 hover:bg-gray-100\"\n )}\n onClick={handlePrevious}\n aria-disabled={currentPage === 1}\n >\n <FaChevronLeft size={12} />\n </div>\n\n {/* Pages */}\n {paginationRange?.map((pageNumber, idx) => {\n if (pageNumber === DOTS) {\n return (\n <ITText\n as=\"div\"\n key={`dots-${idx}`}\n className=\"flex items-center justify-center w-8 h-8 select-none text-gray-400\"\n >\n …\n </ITText>\n );\n }\n\n const isActive = pageNumber === currentPage;\n\n return (\n <ITText\n as=\"div\"\n key={pageNumber}\n className={clsx(\n baseItemClass,\n isActive ? \"text-white\" : \"text-gray-600 hover:bg-gray-100\"\n )}\n style={{\n backgroundColor: isActive ? resolvedBgColor : undefined,\n ...(isActive ? {} : { \"--hover-bg\": resolvedHoverBgColor } as React.CSSProperties),\n }}\n onClick={() => onPageChange(pageNumber as number)}\n title={`Page ${pageNumber}`}\n >\n <ITText as=\"span\">{pageNumber}</ITText>\n </ITText>\n );\n })}\n\n {/* Next Button */}\n <div\n className={clsx(\n baseItemClass,\n currentPage === totalPages\n ? \"text-gray-300 cursor-not-allowed\"\n : \"text-gray-500 hover:bg-gray-100\"\n )}\n onClick={handleNext}\n aria-disabled={currentPage === totalPages}\n >\n <FaChevronRight size={12} />\n </div>\n </div>\n );\n\n // If itemsPerPageOptions is provided, wrap in a wider container with the select\n if (itemsPerPageOptions && itemsPerPage && onItemsPerPageChange) {\n const startItem = Math.min((currentPage - 1) * itemsPerPage + 1, totalItems || 0);\n const endItem = Math.min(currentPage * itemsPerPage, totalItems || 0);\n\n return (\n <div className={clsx(\"flex flex-col sm:flex-row justify-between items-center gap-4 w-full\", className)}>\n <div className=\"flex items-center gap-4 text-sm text-gray-500\">\n <div className=\"flex items-center gap-2 bg-gray-50 px-3 py-1 rounded-lg border border-gray-200\">\n <ITText as=\"span\" className=\"text-xs font-medium\">Mostrar</ITText>\n <ITSelect\n name=\"itemsPerPage\"\n options={itemsPerPageOptions.map((option) => ({\n value: String(option),\n label: String(option),\n }))}\n value={String(itemsPerPage)}\n onChange={(e) => onItemsPerPageChange(Number(e.target.value))}\n onBlur={() => {}}\n size=\"small\"\n className=\"!w-14 !h-6 !text-xs !py-0 !px-1! !border-none !bg-transparent !ring-0 focus:!ring-0 cursor-pointer font-bold text-gray-700\"\n placeholder=\"\"\n />\n </div>\n \n {totalItems !== undefined && (\n <>\n <ITText as=\"span\" className=\"text-gray-300\">|</ITText>\n <ITText as=\"span\" className=\"text-xs\">\n <ITText as=\"span\" className=\"font-semibold text-gray-700\">{startItem}</ITText><ITText as=\"span\"> - </ITText><ITText as=\"span\" className=\"font-semibold text-gray-700\">{endItem}</ITText><ITText as=\"span\"> de </ITText><ITText as=\"span\" className=\"font-semibold text-gray-900\">{totalItems}</ITText>\n </ITText>\n </>\n )}\n </div>\n \n <nav aria-label=\"Pagination\">\n {renderPaginationControls()}\n </nav>\n </div>\n );\n }\n\n // Otherwise, render just the standard pagination component\n return (\n <nav aria-label=\"Pagination\" className={clsx(\"inline-flex\", className)}>\n {renderPaginationControls()}\n </nav>\n );\n}\n","import { theme } from \"@/theme/theme\";\nimport clsx from \"clsx\";\nimport { useState } from \"react\";\nimport { FaAngleDown } from \"react-icons/fa\";\nimport { ITSelectProps } from \"./select.props\";\nimport ITText from \"@/components/text/text\";\n\n/**\n * Componente de selección (select) con soporte para opciones personalizadas, validación y personalización de estilo.\n * Matches styles of ITInput.\n */\nexport default function ITSelect({\n name,\n options,\n label,\n placeholder,\n valueField = \"value\",\n labelField = \"label\",\n value,\n onChange,\n onBlur,\n disabled = false,\n className,\n touched,\n required,\n error,\n readOnly = false,\n}: ITSelectProps) {\n const [isFocused, setIsFocused] = useState(false);\n const [localTouched, setLocalTouched] = useState(false);\n\n // Theme logic - reuse input theme for consistency\n const inputTheme = (theme as any).input || {};\n\n const isTouched = touched !== undefined ? touched : localTouched;\n const isEmpty = value === undefined || value === null || String(value).trim() === \"\";\n\n const effectiveError = error !== undefined && error !== false\n ? (error === true ? \"Este campo es requerido\" : error)\n : (required && isEmpty ? \"Este campo es requerido\" : undefined);\n\n const hasError = isTouched && !!effectiveError;\n const errorMessage = typeof effectiveError === \"string\" ? effectiveError : \"Este campo es requerido\";\n\n const getStyle = () => {\n const style: React.CSSProperties = {\n backgroundColor: inputTheme.backgroundColor,\n borderColor: inputTheme.borderColor,\n borderRadius: inputTheme.borderRadius,\n padding: inputTheme.padding,\n fontSize: inputTheme.fontSize,\n borderWidth: '1px',\n borderStyle: 'solid',\n transition: 'all 0.2s',\n color: 'var(--input-text-color, var(--color-secondary-900))',\n appearance: 'none', // Important for custom styling\n };\n\n if (disabled) {\n style.backgroundColor = inputTheme.disabled?.backgroundColor || style.backgroundColor;\n style.borderColor = inputTheme.disabled?.borderColor || style.borderColor;\n style.opacity = 0.7;\n }\n\n if (hasError) {\n style.borderColor = inputTheme.error?.borderColor || 'red';\n if (isFocused) {\n style.boxShadow = inputTheme.error?.ring;\n }\n } else if (isFocused && !readOnly) {\n style.boxShadow = inputTheme.focus?.ring;\n }\n\n return style;\n };\n\n return (\n <div className=\"w-full\">\n <div className={clsx(\"relative\", {\n \"flex flex-col gap-1.5\": label,\n })}>\n {label && (\n <ITText\n as=\"label\"\n htmlFor={name}\n className={clsx(\n \"text-sm font-medium text-gray-700 dark:text-slate-300 pt-0\",\n { \"text-red-500\": hasError }\n )}\n >\n <ITText as=\"span\">{label}</ITText>\n {required && <ITText as=\"span\" className=\"text-red-500 ml-1\">*</ITText>}\n </ITText>\n )}\n <div className=\"flex flex-col w-full\">\n <div className=\"relative flex-1\">\n <select\n name={name}\n id={name}\n value={value}\n onChange={readOnly ? undefined : onChange}\n onBlur={(e) => {\n setIsFocused(false);\n setLocalTouched(true);\n readOnly ? undefined : onBlur?.(e);\n }}\n onFocus={() => setIsFocused(true)}\n disabled={disabled}\n className={clsx(\n \"w-full focus:outline-none\", // Core structure only\n className,\n { \"cursor-not-allowed\": disabled }\n )}\n style={getStyle()}\n >\n <option value=\"\"><ITText as=\"span\">{placeholder || \"Selecciona una opción\"}</ITText></option>\n {\n readOnly ? (\n <option value={value} disabled>\n <ITText as=\"span\">{options.find((option) => option[valueField] === value)?.[labelField]}</ITText>\n </option>\n ) : (\n options.map((option) => (\n <option\n key={option[valueField]}\n value={option[valueField]}\n title={option[labelField]}\n >\n <ITText as=\"span\">{option[labelField]}</ITText>\n </option>\n ))\n )\n }\n </select>\n <div className=\"absolute inset-y-0 right-0 flex items-center pr-3 pointer-events-none text-gray-500\">\n <FaAngleDown />\n </div>\n </div>\n {/* Validation message aligned with select */}\n {hasError && (\n <div className=\"flex-shrink-0 min-w-[140px] flex items-center pt-3\">\n <ITText as=\"p\" className=\"text-red-500 text-xs\">{errorMessage}</ITText>\n </div>\n )}\n </div>\n\n </div>\n </div>\n );\n}\n","import { useTableState } from \"@/hooks/useTableState\";\nimport { sizeStyles, variantStyles } from \"@/types/table.types\";\nimport clsx from \"clsx\";\nimport React from \"react\";\nimport {\n FaCheck,\n FaSpinner,\n FaTimes\n} from \"react-icons/fa\";\nimport { MdOutlineSwapVert } from \"react-icons/md\";\nimport ITInput from \"../input/input\";\nimport ITPagination from \"../pagination/pagination\";\nimport ITSelect from \"../select/select\";\nimport { Column, ITTableProps } from \"./table.props\";\nimport ITText from \"@/components/text/text\";\n\nconst getNestedValue = (obj: unknown, path: string) => {\n return path.split(\".\").reduce((acc, part) => acc && acc[part], obj);\n};\nexport const formatCurrencyMX = (value: number) => {\n return value.toLocaleString(\"es-MX\", {\n style: \"currency\",\n currency: \"MXN\",\n });\n};\nexport default function ITTable<T extends Record<string, unknown>>({\n columns,\n data = [],\n containerClassName,\n className,\n variant = \"default\",\n size = \"md\",\n itemsPerPageOptions = [5, 10, 20],\n defaultItemsPerPage = 10,\n title,\n}: ITTableProps<T>) {\n const {\n currentPage,\n itemsPerPage,\n filters,\n sortConfig,\n goToPage,\n handleFilterChange,\n handleSort,\n handleItemsPerPageChange,\n } = useTableState({ defaultItemsPerPage });\n\n const sortedData = React.useMemo(() => {\n const safeData = Array.isArray(data) ? data : [];\n if (!sortConfig) return safeData;\n\n return [...safeData].sort((a, b) => {\n const aValue = getNestedValue(a, sortConfig.key);\n const bValue = getNestedValue(b, sortConfig.key);\n\n if (aValue == null || bValue == null) return 0;\n\n let comparison = 0;\n\n const column = columns.find((col) => col.key === sortConfig.key);\n if (!column || !column.sortable) return 0;\n\n switch (column.type) {\n case \"number\":\n comparison = (aValue as number) - (bValue as number);\n break;\n case \"date\":\n comparison =\n new Date(aValue as string).getTime() -\n new Date(bValue as string).getTime();\n break; \n case \"boolean\":\n comparison = aValue === bValue ? 0 : aValue ? 1 : -1;\n break;\n case \"catalog\": {\n const catalogItemA = column.catalogOptions?.data.find(\n (item) => item.id === aValue\n );\n const catalogItemB = column.catalogOptions?.data.find(\n (item) => item.id === bValue\n );\n comparison = String(catalogItemA?.name || aValue).localeCompare(\n String(catalogItemB?.name || bValue)\n );\n break;\n }\n case \"string\":\n default:\n comparison = (aValue as string).localeCompare(bValue as string);\n break;\n }\n\n return sortConfig.direction === \"asc\" ? comparison : -comparison;\n });\n }, [data, sortConfig, columns]);\n\n const filteredData = sortedData.filter((row) =>\n columns.every((col) => {\n if (\n !col.filter ||\n filters[col.key] === undefined ||\n filters[col.key] === \"\"\n )\n return true;\n\n const value = getNestedValue(row, col.key);\n const filterValue = String(filters[col.key]).toLowerCase();\n\n switch (col.type) {\n case \"number\":\n return String(value).includes(filterValue);\n case \"boolean\":\n return value === filters[col.key];\n case \"catalog\": {\n if (!col.catalogOptions) return true;\n const catalogItem = col.catalogOptions.data.find(\n (item) =>\n String(item.id).toLowerCase().includes(filterValue) ||\n item.name.toLowerCase().includes(filterValue)\n );\n return catalogItem ? value === catalogItem.id : false;\n }\n case \"string\":\n default:\n return String(value).toLowerCase().includes(filterValue);\n }\n })\n );\n\n const computedTotalPages = Math.ceil(filteredData.length / itemsPerPage) || 1;\n const currentData = filteredData.slice(\n (currentPage - 1) * itemsPerPage,\n currentPage * itemsPerPage\n );\n\n const renderFilterInput = (col: Column<T>) => {\n if (!col.filter) return null;\n\n if (col.type === \"boolean\") {\n const currentValue = filters[col.key];\n const nextValue =\n currentValue === undefined\n ? true\n : currentValue === true\n ? false\n : undefined;\n\n const getToggleLabel = () => {\n if (currentValue === undefined) return \"Mostrar todos\";\n if (currentValue === true) return \"Filtrar solo verdaderos\";\n return \"Filtrar solo falsos\";\n };\n\n return (\n <button\n className=\"flex items-center justify-center cursor-pointer focus:outline-none focus:ring-2 focus:ring-slate-400 focus:ring-offset-2 rounded-full p-1 transition-all duration-200\"\n onClick={() => handleFilterChange(col.key, nextValue)}\n aria-label={`${getToggleLabel()} para ${col.label}`}\n title={`${getToggleLabel()} para ${col.label}`}\n >\n <div className=\"relative w-10 h-5 bg-gray-300 rounded-full\">\n <div\n className={clsx(\n \"absolute top-0.5 w-4 h-4 rounded-full transition-all duration-300 shadow-sm\",\n {\n \"left-0.5 bg-gray-400\": currentValue === undefined,\n \"left-5 bg-slate-500\": currentValue === true,\n \"left-0.5 bg-gray-500\": currentValue === false,\n }\n )}\n />\n </div>\n </button>\n );\n }\n\n if (col.filter === \"catalog\" && col.catalogOptions) {\n if (col.catalogOptions.loading) {\n return (\n <FaSpinner \n className=\"animate-spin\" \n aria-label=\"Cargando opciones\"\n title=\"Cargando opciones\"\n />\n );\n }\n\n if (col.catalogOptions.error) {\n return <ITText as=\"span\" className=\"text-red-500 text-xs\">Error cargando</ITText>;\n }\n\n return (\n <ITSelect\n name={`filter-${col.key}`}\n options={[\n { value: \"\", label: \"Todos\" },\n ...col.catalogOptions.data.map((item) => ({\n value: String(item.id),\n label: item.name,\n })),\n ]}\n value={String(filters[col.key] || \"\")}\n onChange={(e) => {\n const value = e.target.value === \"\" ? undefined : e.target.value;\n handleFilterChange(col.key, value);\n }}\n onBlur={() => {}}\n className=\"w-full text-xs\"\n />\n );\n }\n\n return (\n <ITInput\n name={`filter-${col.key}`}\n className=\"w-full text-xs\"\n placeholder=\"Buscar...\"\n value={String(filters[col.key] || \"\")}\n onChange={(e) => handleFilterChange(col.key, e.target.value)}\n onBlur={() => {}}\n />\n );\n };\n\n const renderCellContent = (col: Column<T>, row: T) => {\n const value = getNestedValue(row, col.key);\n\n if (col.render) {\n return col.render(row);\n }\n\n switch (col.type) {\n case \"number\": \n return (typeof value === \"number\") && col.currencyMX ?formatCurrencyMX(value) : value;\n case \"boolean\":\n return value ? (\n <FaCheck \n className=\"text-green-500\" \n aria-label=\"Verdadero\"\n title=\"Verdadero\"\n />\n ) : (\n <FaTimes \n className=\"text-red-500\"\n aria-label=\"Falso\" \n title=\"Falso\"\n />\n );\n case \"actions\":\n return col.actions ? col.actions(row) : null;\n case \"catalog\":\n if (col.catalogOptions) {\n const catalogItem = col.catalogOptions.data.find(\n (item) => item.id === value\n );\n return catalogItem?.name || value;\n }\n return value as React.ReactNode;\n default:\n return value as React.ReactNode;\n }\n };\n\n return (\n<div className={clsx(\"space-y-4 w-full\", containerClassName)}>\n <div className=\"rounded-xl shadow-sm border border-secondary-200 overflow-hidden\" style={{ backgroundColor: 'var(--color-table-rowBg, #ffffff)' }}>\n {/* Header outside overflow */}\n {title && (\n <div className=\"px-6 py-5 border-b border-secondary-100\" style={{ backgroundColor: 'var(--color-table-rowBg, #ffffff)' }}>\n <ITText as=\"h2\" className=\"text-xl font-bold text-secondary-900 leading-tight\">{title}</ITText>\n </div>\n )}\n\n {/* Scrollable Table */}\n <div className=\"overflow-x-auto\">\n <table\n className={clsx(\n \"min-w-max w-full text-sm text-left text-secondary-600\",\n variantStyles[variant],\n sizeStyles[size]\n )}\n >\n\n <thead>\n <tr className=\"bg-secondary-50 border-b border-secondary-200 text-xs uppercase tracking-wider font-semibold text-secondary-500\">\n {columns.map((col) => (\n <th\n key={col.key}\n scope=\"col\"\n className={clsx(\"px-4 py-4 align-top\", col.className)}\n >\n <div className=\"flex flex-col gap-3 min-w-[150px]\">\n {/* Column header */}\n <div className=\"flex items-center justify-between gap-2\">\n <ITText as=\"span\" className=\"text-secondary-700 font-bold\">{col.label}</ITText>\n {col.sortable && col.type !== \"actions\" && (\n <button\n onClick={() => handleSort(col.key)}\n className={`p-1 rounded-md transition-colors ${\n sortConfig?.key === col.key\n ? \"bg-secondary-200 text-secondary-900\" \n : \"hover:bg-secondary-200 text-secondary-400 hover:text-secondary-700\"\n }`}\n title={`Ordenar por ${col.label}`}\n >\n <MdOutlineSwapVert className=\"w-4 h-4\" aria-hidden=\"true\" />\n </button>\n )}\n </div>\n \n {/* Filter section */}\n <div className=\"w-full\">\n {col.filter ? renderFilterInput(col) : null}\n </div>\n </div>\n </th>\n ))}\n </tr>\n </thead>\n <tbody className=\"divide-y divide-secondary-100\">\n {currentData.length > 0 ? (\n currentData.map((row, rowIndex) => (\n <tr\n key={rowIndex}\n className=\"hover:bg-secondary-50/50 transition-colors duration-150 group\"\n >\n {columns.map((col) => (\n <td\n key={`${rowIndex}-${col.key}`}\n className={clsx(\"px-4 py-3 align-middle\", col.className)}\n >\n {col.type === \"actions\" ? (\n <div className=\"flex items-center justify-center gap-2\">\n {renderCellContent(col, row) as React.ReactNode}\n </div>\n ) : (\n <div className=\"text-secondary-700 font-medium\">\n {renderCellContent(col, row) as React.ReactNode}\n </div>\n )}\n </td>\n ))}\n </tr>\n ))\n ) : (\n <tr>\n <td colSpan={columns.length} className=\"px-6 py-12 text-center\">\n <div className=\"flex flex-col items-center justify-center text-secondary-400\">\n <ITText as=\"span\" className=\"text-lg\">No se encontraron resultados</ITText>\n <ITText as=\"span\" className=\"text-sm mt-1\">Intenta ajustar los filtros</ITText>\n </div>\n </td>\n </tr>\n )}\n </tbody>\n </table>\n </div>\n\n\n {/* Pagination */}\n <div className=\"rounded-b-xl border-t border-secondary-200 px-6 py-4\" style={{ backgroundColor: 'var(--color-table-rowBg, #ffffff)' }}>\n <ITPagination\n currentPage={currentPage}\n totalPages={computedTotalPages}\n onPageChange={goToPage}\n color=\"primary\"\n itemsPerPageOptions={itemsPerPageOptions}\n itemsPerPage={itemsPerPage}\n onItemsPerPageChange={handleItemsPerPageChange}\n totalItems={filteredData.length}\n />\n </div>\n </div>\n</div>\n );\n}","import clsx from \"clsx\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { FaCalendarAlt } from \"react-icons/fa\";\nimport { isBefore } from \"date-fns\";\nimport ITCalendar from \"../calendar/calendar\";\nimport ITInput from \"../input/input\";\nimport { ITDatePickerProps } from \"./date-picker.props\";\nimport { theme } from \"@/theme/theme\";\n\nexport default function ITDatePicker({\n name,\n value,\n onChange,\n onBlur,\n variant = \"primary\",\n size = \"medium\",\n className,\n calendarClassName,\n disabled = false,\n label,\n touched,\n error,\n required,\n placeholder,\n minDate,\n maxDate,\n range = false,\n}: ITDatePickerProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [inputValue, setInputValue] = useState(\"\");\n const [isValidDate, setIsValidDate] = useState(true);\n \n // For range selection, we'll keep track of the internal state if not provided\n const [internalRange, setInternalRange] = useState<[Date | null, Date | null]>([null, null]);\n\n const wrapperRef = useRef<HTMLDivElement>(null);\n const [calendarPosition, setCalendarPosition] = useState({ top: 0, left: 0 });\n\n // Normalize single vs range values\n const dateRange = React.useMemo(() => {\n if (range) {\n if (Array.isArray(value)) return value;\n return internalRange;\n }\n return [value instanceof Date ? value : null, null] as [Date | null, Date | null];\n }, [value, range, internalRange]);\n\n const [startDate, endDate] = dateRange;\n\n useEffect(() => {\n if (range) {\n if (startDate && endDate) {\n setInputValue(`${formatDate(startDate)} - ${formatDate(endDate)}`);\n } else if (startDate) {\n setInputValue(`${formatDate(startDate)} - ...`);\n } else {\n setInputValue(\"\");\n }\n } else {\n if (startDate instanceof Date && !isNaN(startDate.getTime())) {\n setInputValue(formatDate(startDate));\n } else {\n setInputValue(\"\");\n }\n }\n }, [startDate, endDate, range]);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n wrapperRef.current &&\n !wrapperRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n const calculateCalendarPosition = () => {\n if (wrapperRef.current) {\n const inputRect = wrapperRef.current.getBoundingClientRect();\n const calendarHeight = 300;\n const viewportHeight = window.innerHeight;\n\n let top = inputRect.bottom + 4;\n if (inputRect.bottom + calendarHeight > viewportHeight) {\n top = inputRect.top - calendarHeight - 4;\n }\n\n setCalendarPosition({\n top,\n left: inputRect.left,\n });\n }\n };\n\n const handleDateChange = (date: Date) => {\n if (range) {\n let newRange: [Date | null, Date | null];\n \n if (!startDate || (startDate && endDate)) {\n // Start a new range\n newRange = [date, null];\n } else {\n // Closing a range\n if (isBefore(date, startDate)) {\n newRange = [date, startDate];\n } else {\n newRange = [startDate, date];\n }\n }\n \n setInternalRange(newRange);\n \n // If range is complete, notify parent and close\n if (newRange[0] && newRange[1]) {\n onChange({\n target: {\n name,\n value: newRange,\n },\n });\n setIsOpen(false);\n } else {\n // Just notify start (optional, but good for reactivity)\n onChange({\n target: {\n name,\n value: newRange,\n },\n });\n }\n } else {\n const event = {\n target: {\n name,\n value: date,\n },\n };\n onChange(event);\n setInputValue(formatDate(date));\n setIsOpen(false);\n }\n };\n\n const handleIconClick = () => {\n if (!disabled) {\n calculateCalendarPosition();\n setIsOpen(!isOpen);\n }\n };\n\n const formatDate = (date: Date) =>\n date\n .toLocaleDateString(\"es-ES\", {\n day: \"2-digit\",\n month: \"2-digit\",\n year: \"numeric\",\n })\n .replace(/\\//g, \"/\");\n\n const validateDate = (dateString: string) => {\n const regex = /^(\\d{2})\\/(\\d{2})\\/(\\d{4})$/;\n const match = dateString.match(regex);\n if (!match) return false;\n\n const day = parseInt(match[1], 10);\n const month = parseInt(match[2], 10);\n const year = parseInt(match[3], 10);\n\n const date = new Date(year, month - 1, day);\n return (\n date.getFullYear() === year &&\n date.getMonth() === month - 1 &&\n date.getDate() === day\n );\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n let val = e.target.value.replace(/\\D/g, \"\");\n if (val.length > 8) val = val.slice(0, 8);\n\n if (val.length > 4) {\n val = `${val.slice(0, 2)}/${val.slice(2, 4)}/${val.slice(4)}`;\n } else if (val.length > 2) {\n val = `${val.slice(0, 2)}/${val.slice(2)}`;\n }\n\n setInputValue(val);\n\n if (val.length === 10 && validateDate(val)) {\n const [day, month, year] = val.split(\"/\").map(Number);\n const date = new Date(year, month - 1, day);\n const event = {\n target: {\n name,\n value: date,\n },\n };\n onChange(event);\n onChange(event);\n setIsValidDate(true);\n } else {\n setIsValidDate(false);\n }\n };\n\n const handleInputBlur = () => {\n if (range) {\n // For range, simple text input is harder to validate without complex logic\n // We'll rely on calendar for now to avoid breaking the UX\n return;\n }\n \n if (!validateDate(inputValue)) {\n // Si la fecha no es válida, usar la fecha de hoy\n const today = new Date();\n setInputValue(formatDate(today));\n const event = {\n target: {\n name,\n value: today,\n },\n };\n onChange(event);\n setIsValidDate(true);\n } else {\n // Solo construimos la fecha si es válida\n const [day, month, year] = inputValue.split(\"/\").map(Number);\n const date = new Date(year, month - 1, day);\n\n if (!isNaN(date.getTime())) {\n onBlur?.({ target: { name, value: date } });\n } else {\n // fallback a hoy por seguridad\n const today = new Date();\n setInputValue(formatDate(today));\n onChange({ target: { name, value: today } });\n }\n }\n };\n\n return (\n <div ref={wrapperRef} className={clsx(\"relative w-full\", className)}>\n <ITInput\n name={name}\n type=\"text\"\n label={label}\n placeholder={placeholder}\n value={inputValue}\n onChange={handleInputChange}\n onBlur={handleInputBlur}\n maxLength={10}\n iconRight={\n <span>\n <FaCalendarAlt\n onClick={handleIconClick}\n className=\"text-slate-900 cursor-pointer\"\n />\n </span>\n }\n variant={variant}\n size={size}\n disabled={disabled}\n required={required}\n touched={touched}\n error={!isValidDate ? \"Fecha inválida\" : error}\n onClick={handleIconClick}\n />\n\n {isOpen && (\n <div\n className={clsx(\n \"fixed z-[9999]\",\n calendarClassName,\n range ? \"w-[320px]\" : \"w-[280px]\"\n )}\n style={{\n top: `${calendarPosition.top}px`,\n left: `${calendarPosition.left}px`,\n backgroundColor: theme.card.backgroundColor,\n borderColor: theme.card.borderColor,\n borderWidth: '1px',\n borderStyle: 'solid',\n borderRadius: theme.card.borderRadius,\n boxShadow: theme.card.shadow,\n padding: '0.5rem',\n }}\n >\n <ITCalendar\n value={!range ? (startDate as Date) : undefined}\n startDate={startDate as Date}\n endDate={endDate as Date}\n selectionMode={range ? 'range' : 'single'}\n onChange={handleDateChange}\n minDate={minDate}\n maxDate={maxDate}\n variant={variant}\n className=\"h-auto border-none shadow-none w-full\"\n />\n </div>\n )}\n </div>\n );\n}\n","import { createPortal } from \"react-dom\";\nimport { theme } from \"@/theme/theme\";\nimport { useEffect, useRef } from \"react\";\nimport { FaRegTimesCircle } from \"react-icons/fa\";\nimport { ITDialogProps } from \"./dialog.props\";\nimport useClickOutside from \"@/hooks/useClickOutside\";\nimport ITFormHeader from \"../form-header/form-header\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITDialog({\n isOpen,\n onClose,\n children,\n className,\n title,\n useFormHeader = false,\n fullScreen = false,\n}: ITDialogProps) {\n const modalRef = useRef<HTMLDivElement>(null);\n\n useClickOutside(modalRef, onClose);\n\n useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n onClose();\n }\n };\n\n if (isOpen) {\n document.addEventListener(\"keydown\", handleEscape);\n }\n\n return () => {\n document.removeEventListener(\"keydown\", handleEscape);\n };\n }, [isOpen, onClose]);\n\n if (!isOpen) return null;\n if (typeof document === \"undefined\") return null;\n\n const content = (\n <div\n className={`fixed inset-0 flex ${\n fullScreen ? \"items-stretch\" : \"items-center justify-center\"\n } bg-black/50 z-[9999]`}\n >\n <div\n ref={modalRef}\n className={`overflow-hidden relative ${\n fullScreen\n ? \"w-screen h-screen max-w-none rounded-none m-0 flex flex-col\"\n : `${className || \"\"} ${useFormHeader ? \"p-0\" : \"p-6\"}`\n }`}\n style={{\n backgroundColor: theme.card.backgroundColor,\n borderRadius: fullScreen ? \"0\" : theme.card.borderRadius,\n boxShadow: fullScreen ? \"none\" : theme.card.shadow,\n borderWidth: fullScreen ? \"0\" : theme.card.borderWidth,\n borderColor: theme.card.borderColor,\n borderStyle: 'solid',\n }}\n >\n {useFormHeader && title ? (\n <>\n <ITFormHeader title={title} onClose={onClose} />\n <div className={fullScreen ? \"flex-1 overflow-auto p-6\" : \"p-6\"}>\n {children}\n </div>\n </>\n ) : (\n <>\n <button\n className=\"absolute top-2 right-2 text-gray-600 hover:text-gray-900\"\n onClick={onClose}\n >\n <FaRegTimesCircle />\n </button>\n {title && <ITText as=\"h2\" className=\"text-xl font-semibold mb-4\">{title}</ITText>}\n <div>{children}</div>\n </>\n )}\n </div>\n </div>\n );\n\n return createPortal(content, document.body);\n}\n","import { FaTimes } from \"react-icons/fa\";\nimport { ITFormHeaderProps } from \"./form-header.props\";\nimport { useITThemeSafe } from \"../theme-provider/themeProvider\";\nimport { getContrastTextColor } from \"@/utils/color.utils\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITFormHeader({\n title,\n onClose,\n className = \"\",\n}: ITFormHeaderProps) {\n const themeContext = useITThemeSafe();\n\n const isDarkMode = themeContext?.resolvedTheme === \"dark\";\n const palette = themeContext?.palette;\n const textColorClass = getContrastTextColor(\n palette?.primary || \"#06b6d4\",\n palette,\n isDarkMode\n );\n\n return (\n <div className={`bg-primary-500 ${textColorClass} px-6 py-4 rounded-t-lg flex justify-center items-center relative ${className}`}>\n <ITText as=\"h2\" className=\"text-lg font-semibold text-center\" style={{ color: \"inherit\" }}>{title}</ITText>\n {onClose && (\n <button\n onClick={onClose}\n className={`absolute right-4 ${textColorClass} hover:opacity-80 transition-colors duration-200 p-1 rounded-full`}\n style={{ color: \"inherit\" }}\n aria-label=\"Cerrar\"\n >\n <FaTimes className=\"w-4 h-4\" />\n </button>\n )}\n </div>\n );\n}\n ","import React, { createContext, useContext, useState, useEffect } from \"react\";\nimport { MdPalette, MdClose, MdRefresh } from \"react-icons/md\";\nimport { ITThemeProviderProps, ITThemePalette } from \"./themeProvider.props\";\nimport ITDialog from \"../dialog/dialog\";\nimport ITTabs from \"../tabs/tabs\";\nimport ITButton from \"../button/button\";\nimport ITInput from \"../input/input\";\nimport ITSegmentedControl from \"../segmented-control/segmented-control\";\nimport ITDivider from \"../divider/divider\";\nimport ITText from \"@/components/text/text\";\n\n// ============================================================================\n// DEFAULT PALETTE & PRESETS CONFIG\n// ============================================================================\n\nconst STORAGE_KEY = \"it-theme-palette\";\n\nexport const DEFAULT_PALETTE: ITThemePalette = {\n primary: \"#06b6d4\", // Cyan\n secondary: \"#6b7280\", // Gray\n ternary: \"#8b5cf6\", // Purple/Violet\n danger: \"#ef4444\", // Red\n success: \"#22c55e\", // Green\n info: \"#3b82f6\", // Blue\n alert: \"#f97316\", // Orange\n warning: \"#eab308\", // Yellow\n layout: {\n sidebarBg: \"#ffffff\", // White (light mode default)\n sidebarText: \"#334155\", // Slate-700 (dark text for light sidebar)\n navbarBg: \"#ffffff\", // White\n navbarText: \"#1e293b\", // Slate-800\n },\n table: {\n headerBg: \"#f8fafc\", // Slate-50\n headerText: \"#334155\", // Slate-700\n rowBg: \"#ffffff\", // White\n rowText: \"#1e293b\", // Slate-800\n },\n};\n\nexport const PRESETS: { name: string; colors: ITThemePalette }[] = [\n {\n name: \"Midnight Indigo 🌌\",\n colors: {\n primary: \"#6366f1\",\n secondary: \"#475569\",\n ternary: \"#f472b6\",\n danger: \"#ef4444\",\n success: \"#34d399\",\n info: \"#06b6d4\",\n alert: \"#fb923c\",\n warning: \"#fbbf24\",\n layout: {\n sidebarBg: \"#0b1120\",\n sidebarText: \"#94a3b8\",\n navbarBg: \"#0f172a\",\n navbarText: \"#f1f5f9\",\n },\n table: {\n headerBg: \"#f1f5f9\",\n headerText: \"#334155\",\n rowBg: \"#ffffff\",\n rowText: \"#0f172a\",\n },\n },\n },\n {\n name: \"Coral Reef 🪸\",\n colors: {\n primary: \"#f43f5e\",\n secondary: \"#57534e\",\n ternary: \"#f97316\",\n danger: \"#b91c1c\",\n success: \"#14b8a6\",\n info: \"#6366f1\",\n alert: \"#eab308\",\n warning: \"#fde047\",\n layout: {\n sidebarBg: \"#0c0808\",\n sidebarText: \"#fda4af\",\n navbarBg: \"#1c1212\",\n navbarText: \"#fff1f2\",\n },\n table: {\n headerBg: \"#fff1f2\",\n headerText: \"#881337\",\n rowBg: \"#ffffff\",\n rowText: \"#1c1212\",\n },\n },\n },\n {\n name: \"Oceanic Teal 🌊\",\n colors: {\n primary: \"#0d9488\",\n secondary: \"#64748b\",\n ternary: \"#a78bfa\",\n danger: \"#e11d48\",\n success: \"#22c55e\",\n info: \"#0284c7\",\n alert: \"#ea580c\",\n warning: \"#ca8a04\",\n layout: {\n sidebarBg: \"#042f2e\",\n sidebarText: \"#5eead4\",\n navbarBg: \"#062b2a\",\n navbarText: \"#ccfbf1\",\n },\n table: {\n headerBg: \"#f0fdfa\",\n headerText: \"#115e59\",\n rowBg: \"#ffffff\",\n rowText: \"#042f2e\",\n },\n },\n },\n {\n name: \"Golden Hour ☀️\",\n colors: {\n primary: \"#d97706\",\n secondary: \"#78716c\",\n ternary: \"#db2777\",\n danger: \"#dc2626\",\n success: \"#65a30d\",\n info: \"#2563eb\",\n alert: \"#f97316\",\n warning: \"#facc15\",\n layout: {\n sidebarBg: \"#fefce8\",\n sidebarText: \"#713f12\",\n navbarBg: \"#fffbeb\",\n navbarText: \"#451a03\",\n },\n table: {\n headerBg: \"#fefce8\",\n headerText: \"#713f12\",\n rowBg: \"#ffffff\",\n rowText: \"#292524\",\n },\n },\n },\n {\n name: \"Deep Forest 🌲\",\n colors: {\n primary: \"#16a34a\",\n secondary: \"#57534e\",\n ternary: \"#d946ef\",\n danger: \"#dc2626\",\n success: \"#14b8a6\",\n info: \"#0ea5e9\",\n alert: \"#f97316\",\n warning: \"#eab308\",\n layout: {\n sidebarBg: \"#052e16\",\n sidebarText: \"#86efac\",\n navbarBg: \"#0b3b1c\",\n navbarText: \"#dcfce7\",\n },\n table: {\n headerBg: \"#f0fdf4\",\n headerText: \"#166534\",\n rowBg: \"#ffffff\",\n rowText: \"#052e16\",\n },\n },\n },\n];\n// ============================================================================\n// CONTEXT & PROVIDER\n// ============================================================================\n\ninterface ITThemeContextType {\n palette: ITThemePalette;\n colors: ITThemePalette;\n setPalette: (newPalette: ITThemePalette) => void;\n updateColor: (key: string, value: string) => void;\n resetTheme: () => void;\n applyPreset: (colors: ITThemePalette) => void;\n resolvedTheme: \"light\" | \"dark\";\n darkModeMode: \"light\" | \"dark\" | \"system\";\n setDarkModeMode: (mode: \"light\" | \"dark\" | \"system\") => void;\n}\n\nconst ITThemeContext = createContext<ITThemeContextType | undefined>(undefined);\n\nexport const useITTheme = () => {\n const context = useContext(ITThemeContext);\n if (!context) {\n throw new Error(\"useITTheme must be used within an ITThemeProvider\");\n }\n return context;\n};\n\n/**\n * Versión segura de useITTheme que retorna undefined\n * si se usa fuera de ITThemeProvider (no lanza error).\n */\nexport const useITThemeSafe = (): ITThemeContextType | undefined => {\n return useContext(ITThemeContext);\n};\n\nconst getNestedValue = (obj: any, path: string) => {\n return path.split(\".\").reduce((acc, part) => acc && acc[part], obj);\n};\n\nconst isLightColor = (hex: string) => {\n if (!hex || typeof hex !== \"string\") return false;\n const color = hex.replace(\"#\", \"\");\n let r = 0,\n g = 0,\n b = 0;\n if (color.length === 3) {\n r = parseInt(color[0] + color[0], 16);\n g = parseInt(color[1] + color[1], 16);\n b = parseInt(color[2] + color[2], 16);\n } else if (color.length === 6) {\n r = parseInt(color.substring(0, 2), 16);\n g = parseInt(color.substring(2, 4), 16);\n b = parseInt(color.substring(4, 6), 16);\n } else {\n return false;\n }\n const brightness = (r * 299 + g * 587 + b * 114) / 1000;\n return brightness > 140;\n};\n\n/** Returns true if the hex color is very dark (brightness < 50) */\nconst isVeryDarkColor = (hex: string) => {\n if (!hex || typeof hex !== \"string\") return false;\n const color = hex.replace(\"#\", \"\");\n let r = 0,\n g = 0,\n b = 0;\n if (color.length === 3) {\n r = parseInt(color[0] + color[0], 16);\n g = parseInt(color[1] + color[1], 16);\n b = parseInt(color[2] + color[2], 16);\n } else if (color.length === 6) {\n r = parseInt(color.substring(0, 2), 16);\n g = parseInt(color.substring(2, 4), 16);\n b = parseInt(color.substring(4, 6), 16);\n } else {\n return false;\n }\n const brightness = (r * 299 + g * 587 + b * 114) / 1000;\n return brightness < 50;\n};\n\nexport default function ITThemeProvider({\n children,\n theme,\n showFab = true,\n}: ITThemeProviderProps) {\n const [palette, setPaletteState] = useState<ITThemePalette>(() => {\n const basePalette = {\n ...DEFAULT_PALETTE,\n ...theme,\n layout: { ...DEFAULT_PALETTE.layout, ...theme?.layout },\n table: { ...DEFAULT_PALETTE.table, ...theme?.table },\n };\n if (!showFab) {\n return basePalette as ITThemePalette;\n }\n try {\n const saved = localStorage.getItem(STORAGE_KEY);\n if (saved) {\n const parsed = JSON.parse(saved);\n return {\n ...basePalette,\n ...parsed,\n layout: { ...basePalette.layout, ...parsed.layout },\n table: { ...basePalette.table, ...parsed.table },\n };\n }\n } catch (e) {\n console.error(\"Failed to load theme from localStorage\", e);\n }\n return basePalette as ITThemePalette;\n });\n\n const [isOpen, setIsOpen] = useState(false);\n const [customPresets, setCustomPresets] = useState<\n { name: string; colors: ITThemePalette }[]\n >(() => {\n try {\n const saved = localStorage.getItem(\"it-theme-custom-presets\");\n return saved ? JSON.parse(saved) : [];\n } catch (e) {\n console.error(\"Failed to load custom presets\", e);\n return [];\n }\n });\n const [newPresetName, setNewPresetName] = useState(\"\");\n const [isSavingPreset, setIsSavingPreset] = useState(false);\n\n const handleSavePreset = () => {\n if (!newPresetName.trim()) return;\n const newPreset = {\n name: newPresetName.trim(),\n colors: JSON.parse(JSON.stringify(palette)),\n };\n const updated = [...customPresets, newPreset];\n setCustomPresets(updated);\n localStorage.setItem(\"it-theme-custom-presets\", JSON.stringify(updated));\n setNewPresetName(\"\");\n setIsSavingPreset(false);\n };\n\n const handleDeletePreset = (nameToDelete: string, e: React.MouseEvent) => {\n e.stopPropagation();\n const updated = customPresets.filter((p) => p.name !== nameToDelete);\n setCustomPresets(updated);\n localStorage.setItem(\"it-theme-custom-presets\", JSON.stringify(updated));\n };\n\n const [resolvedTheme, setResolvedTheme] = useState<\"light\" | \"dark\">(\"light\");\n\n const [darkModeMode, setDarkModeMode] = useState<\"light\" | \"dark\" | \"system\">(\n () => {\n const saved = localStorage.getItem(\"it-theme-dark-mode\");\n if (saved === \"light\" || saved === \"dark\" || saved === \"system\") {\n return saved;\n }\n return \"system\";\n },\n );\n\n useEffect(() => {\n localStorage.setItem(\"it-theme-dark-mode\", darkModeMode);\n\n const applyDarkMode = (isDark: boolean) => {\n if (isDark) {\n document.documentElement.classList.add(\"dark\");\n document.documentElement.setAttribute(\"data-theme\", \"dark\");\n setResolvedTheme(\"dark\");\n } else {\n document.documentElement.classList.remove(\"dark\");\n document.documentElement.setAttribute(\"data-theme\", \"light\");\n setResolvedTheme(\"light\");\n }\n };\n\n if (darkModeMode === \"system\") {\n const mediaQuery = window.matchMedia(\"(prefers-color-scheme: dark)\");\n applyDarkMode(mediaQuery.matches);\n\n const listener = (e: MediaQueryListEvent) => {\n applyDarkMode(e.matches);\n };\n\n mediaQuery.addEventListener(\"change\", listener);\n return () => mediaQuery.removeEventListener(\"change\", listener);\n } else {\n applyDarkMode(darkModeMode === \"dark\");\n }\n }, [darkModeMode]);\n\n // Sync palette with theme prop when showFab is false\n useEffect(() => {\n if (!showFab) {\n setPaletteState({\n ...DEFAULT_PALETTE,\n ...theme,\n layout: { ...DEFAULT_PALETTE.layout, ...theme?.layout },\n table: { ...DEFAULT_PALETTE.table, ...theme?.table },\n });\n }\n }, [theme, showFab]);\n\n // Inyectar variables CSS en el :root al cambiar la paleta o tema resuelto\n useEffect(() => {\n const injectStyles = (obj: any, prefix = \"\") => {\n Object.entries(obj).forEach(([key, val]) => {\n if (typeof val === \"object\" && val !== null) {\n injectStyles(val, prefix + key + \"-\");\n } else {\n document.documentElement.style.setProperty(\n `--color-${prefix}${key}`,\n val as string,\n );\n if (prefix === \"layout-\") {\n document.documentElement.style.setProperty(\n `--color-${key}`,\n val as string,\n );\n }\n }\n });\n };\n injectStyles(palette);\n if (showFab) {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(palette));\n }\n\n // Dynamic overrides for Tailwind classes and component tokens\n let styleTag = document.getElementById(\n \"it-theme-dynamic-overrides\",\n ) as HTMLStyleElement;\n if (!styleTag) {\n styleTag = document.createElement(\"style\");\n styleTag.id = \"it-theme-dynamic-overrides\";\n document.head.appendChild(styleTag);\n }\n\n const isDark = resolvedTheme === \"dark\";\n\n let tableRowBg = palette.table.rowBg;\n let tableRowText = palette.table.rowText;\n let tableHeaderBg = palette.table.headerBg;\n let tableHeaderText = palette.table.headerText;\n let navbarBg = palette.layout.navbarBg;\n let navbarText = palette.layout.navbarText;\n let sidebarBg = palette.layout.sidebarBg;\n let sidebarText = palette.layout.sidebarText;\n\n if (isDark) {\n if (isLightColor(tableRowBg)) {\n tableRowBg = `color-mix(in srgb, ${palette.table.rowBg} 8%, #111827)`;\n }\n if (!isLightColor(tableRowText)) {\n tableRowText = `color-mix(in srgb, ${palette.table.rowText} 20%, #f3f4f6)`;\n }\n if (isLightColor(tableHeaderBg)) {\n tableHeaderBg = `color-mix(in srgb, ${palette.table.headerBg} 12%, #1f2937)`;\n }\n if (!isLightColor(tableHeaderText)) {\n tableHeaderText = `color-mix(in srgb, ${palette.table.headerText} 20%, #f9fafb)`;\n }\n if (isLightColor(navbarBg)) {\n navbarBg = `color-mix(in srgb, ${palette.layout.navbarBg} 8%, #111827)`;\n }\n if (!isLightColor(navbarText)) {\n navbarText = `color-mix(in srgb, ${palette.layout.navbarText} 20%, #f3f4f6)`;\n }\n if (isLightColor(sidebarBg)) {\n sidebarBg = `color-mix(in srgb, ${palette.layout.sidebarBg} 8%, #0f172a)`;\n }\n if (!isLightColor(sidebarText)) {\n sidebarText = `color-mix(in srgb, ${palette.layout.sidebarText} 20%, #cbd5e1)`;\n }\n } else {\n // Light mode: if table colors are dark (from a dark preset), override to clean light values\n // Very dark colors (brightness < 50) get replaced directly to avoid dirty tints\n if (!isLightColor(tableRowBg)) {\n tableRowBg = isVeryDarkColor(palette.table.rowBg)\n ? \"#ffffff\"\n : `color-mix(in srgb, ${palette.table.rowBg} 8%, #ffffff)`;\n }\n if (isLightColor(tableRowText)) {\n tableRowText = `color-mix(in srgb, ${palette.table.rowText} 30%, #1e293b)`;\n } else if (\n !isLightColor(tableRowText) &&\n isVeryDarkColor(palette.table.rowText)\n ) {\n // Very dark text is fine for light mode, keep it\n }\n if (!isLightColor(tableHeaderBg)) {\n tableHeaderBg = isVeryDarkColor(palette.table.headerBg)\n ? \"#f1f5f9\"\n : `color-mix(in srgb, ${palette.table.headerBg} 12%, #f8fafc)`;\n }\n if (isLightColor(tableHeaderText)) {\n tableHeaderText = `color-mix(in srgb, ${palette.table.headerText} 30%, #334155)`;\n } else if (\n !isLightColor(tableHeaderText) &&\n isVeryDarkColor(palette.table.headerText)\n ) {\n // Dark header text is fine for light mode\n }\n if (!isLightColor(navbarBg)) {\n navbarBg = isVeryDarkColor(palette.layout.navbarBg)\n ? \"#ffffff\"\n : `color-mix(in srgb, ${palette.layout.navbarBg} 8%, #ffffff)`;\n }\n if (isLightColor(navbarText)) {\n navbarText = `color-mix(in srgb, ${palette.layout.navbarText} 30%, #1e293b)`;\n }\n if (!isLightColor(sidebarBg)) {\n sidebarBg = isVeryDarkColor(palette.layout.sidebarBg)\n ? \"#ffffff\"\n : `color-mix(in srgb, ${palette.layout.sidebarBg} 8%, #ffffff)`;\n }\n if (isLightColor(sidebarText)) {\n sidebarText = `color-mix(in srgb, ${palette.layout.sidebarText} 30%, #1e293b)`;\n }\n // If sidebar became light, ensure text is dark for contrast\n if (sidebarBg === \"#ffffff\" || isLightColor(sidebarBg)) {\n sidebarText = \"#334155\";\n }\n }\n\n styleTag.innerHTML = `\n :root {\n --color-primary: ${palette.primary};\n --color-secondary: ${palette.secondary};\n --color-ternary: ${palette.ternary};\n --color-danger: ${palette.danger};\n --color-success: ${palette.success};\n --color-info: ${palette.info};\n --color-alert: ${palette.alert};\n --color-warning: ${palette.warning};\n --color-heading-default: #1e293b;\n --color-text-default: var(--color-secondary-900);\n --color-text-muted: var(--color-secondary-600);\n\n /* Generated scales for primary */\n --color-primary-50: color-mix(in srgb, var(--color-primary) 5%, #ffffff);\n --color-primary-100: color-mix(in srgb, var(--color-primary) 10%, #ffffff);\n --color-primary-200: color-mix(in srgb, var(--color-primary) 30%, #ffffff);\n --color-primary-300: color-mix(in srgb, var(--color-primary) 50%, #ffffff);\n --color-primary-400: color-mix(in srgb, var(--color-primary) 70%, #ffffff);\n --color-primary-500: var(--color-primary);\n --color-primary-600: color-mix(in srgb, var(--color-primary) 85%, #000000);\n --color-primary-700: color-mix(in srgb, var(--color-primary) 70%, #000000);\n --color-primary-800: color-mix(in srgb, var(--color-primary) 55%, #000000);\n --color-primary-900: color-mix(in srgb, var(--color-primary) 40%, #000000);\n --color-primary-950: color-mix(in srgb, var(--color-primary) 25%, #000000);\n\n /* Generated scales for secondary */\n --color-secondary-50: color-mix(in srgb, var(--color-secondary) 5%, #ffffff);\n --color-secondary-100: color-mix(in srgb, var(--color-secondary) 10%, #ffffff);\n --color-secondary-200: color-mix(in srgb, var(--color-secondary) 30%, #ffffff);\n --color-secondary-300: color-mix(in srgb, var(--color-secondary) 50%, #ffffff);\n --color-secondary-400: color-mix(in srgb, var(--color-secondary) 70%, #ffffff);\n --color-secondary-500: var(--color-secondary);\n --color-secondary-600: color-mix(in srgb, var(--color-secondary) 85%, #000000);\n --color-secondary-700: color-mix(in srgb, var(--color-secondary) 70%, #000000);\n --color-secondary-800: color-mix(in srgb, var(--color-secondary) 55%, #000000);\n --color-secondary-900: color-mix(in srgb, var(--color-secondary) 40%, #000000);\n --color-secondary-950: color-mix(in srgb, var(--color-secondary) 25%, #000000);\n\n /* Generated scales for ternary */\n --color-ternary-50: color-mix(in srgb, var(--color-ternary) 5%, #ffffff);\n --color-ternary-100: color-mix(in srgb, var(--color-ternary) 10%, #ffffff);\n --color-ternary-200: color-mix(in srgb, var(--color-ternary) 30%, #ffffff);\n --color-ternary-300: color-mix(in srgb, var(--color-ternary) 50%, #ffffff);\n --color-ternary-400: color-mix(in srgb, var(--color-ternary) 70%, #ffffff);\n --color-ternary-500: var(--color-ternary);\n --color-ternary-600: color-mix(in srgb, var(--color-ternary) 85%, #000000);\n --color-ternary-700: color-mix(in srgb, var(--color-ternary) 70%, #000000);\n --color-ternary-800: color-mix(in srgb, var(--color-ternary) 55%, #000000);\n --color-ternary-900: color-mix(in srgb, var(--color-ternary) 40%, #000000);\n --color-ternary-950: color-mix(in srgb, var(--color-ternary) 25%, #000000);\n\n /* Purple scales mapped as aliases to ternary */\n --color-purple-50: var(--color-ternary-50);\n --color-purple-100: var(--color-ternary-100);\n --color-purple-200: var(--color-ternary-200);\n --color-purple-300: var(--color-ternary-300);\n --color-purple-400: var(--color-ternary-400);\n --color-purple-500: var(--color-ternary-500);\n --color-purple-600: var(--color-ternary-600);\n --color-purple-700: var(--color-ternary-700);\n --color-purple-800: var(--color-ternary-800);\n --color-purple-900: var(--color-ternary-900);\n --color-purple-950: var(--color-ternary-950);\n\n /* Generated scales for danger */\n --color-danger-50: color-mix(in srgb, var(--color-danger) 5%, #ffffff);\n --color-danger-100: color-mix(in srgb, var(--color-danger) 10%, #ffffff);\n --color-danger-200: color-mix(in srgb, var(--color-danger) 30%, #ffffff);\n --color-danger-300: color-mix(in srgb, var(--color-danger) 50%, #ffffff);\n --color-danger-400: color-mix(in srgb, var(--color-danger) 70%, #ffffff);\n --color-danger-500: var(--color-danger);\n --color-danger-600: color-mix(in srgb, var(--color-danger) 85%, #000000);\n --color-danger-700: color-mix(in srgb, var(--color-danger) 70%, #000000);\n --color-danger-800: color-mix(in srgb, var(--color-danger) 55%, #000000);\n --color-danger-900: color-mix(in srgb, var(--color-danger) 40%, #000000);\n --color-danger-950: color-mix(in srgb, var(--color-danger) 25%, #000000);\n\n /* Generated scales for success */\n --color-success-50: color-mix(in srgb, var(--color-success) 5%, #ffffff);\n --color-success-100: color-mix(in srgb, var(--color-success) 10%, #ffffff);\n --color-success-200: color-mix(in srgb, var(--color-success) 30%, #ffffff);\n --color-success-300: color-mix(in srgb, var(--color-success) 50%, #ffffff);\n --color-success-400: color-mix(in srgb, var(--color-success) 70%, #ffffff);\n --color-success-500: var(--color-success);\n --color-success-600: color-mix(in srgb, var(--color-success) 85%, #000000);\n --color-success-700: color-mix(in srgb, var(--color-success) 70%, #000000);\n --color-success-800: color-mix(in srgb, var(--color-success) 55%, #000000);\n --color-success-900: color-mix(in srgb, var(--color-success) 40%, #000000);\n --color-success-950: color-mix(in srgb, var(--color-success) 25%, #000000);\n\n /* Generated scales for info */\n --color-info-50: color-mix(in srgb, var(--color-info) 5%, #ffffff);\n --color-info-100: color-mix(in srgb, var(--color-info) 10%, #ffffff);\n --color-info-200: color-mix(in srgb, var(--color-info) 30%, #ffffff);\n --color-info-300: color-mix(in srgb, var(--color-info) 50%, #ffffff);\n --color-info-400: color-mix(in srgb, var(--color-info) 70%, #ffffff);\n --color-info-500: var(--color-info);\n --color-info-600: color-mix(in srgb, var(--color-info) 85%, #000000);\n --color-info-700: color-mix(in srgb, var(--color-info) 70%, #000000);\n --color-info-800: color-mix(in srgb, var(--color-info) 55%, #000000);\n --color-info-900: color-mix(in srgb, var(--color-info) 40%, #000000);\n --color-info-950: color-mix(in srgb, var(--color-info) 25%, #000000);\n\n /* Generated scales for alert */\n --color-alert-50: color-mix(in srgb, var(--color-alert) 5%, #ffffff);\n --color-alert-100: color-mix(in srgb, var(--color-alert) 10%, #ffffff);\n --color-alert-200: color-mix(in srgb, var(--color-alert) 30%, #ffffff);\n --color-alert-300: color-mix(in srgb, var(--color-alert) 50%, #ffffff);\n --color-alert-400: color-mix(in srgb, var(--color-alert) 70%, #ffffff);\n --color-alert-500: var(--color-alert);\n --color-alert-600: color-mix(in srgb, var(--color-alert) 85%, #000000);\n --color-alert-700: color-mix(in srgb, var(--color-alert) 70%, #000000);\n --color-alert-800: color-mix(in srgb, var(--color-alert) 55%, #000000);\n --color-alert-900: color-mix(in srgb, var(--color-alert) 40%, #000000);\n --color-alert-950: color-mix(in srgb, var(--color-alert) 25%, #000000);\n\n /* Generated scales for warning */\n --color-warning-50: color-mix(in srgb, var(--color-warning) 5%, #ffffff);\n --color-warning-100: color-mix(in srgb, var(--color-warning) 10%, #ffffff);\n --color-warning-200: color-mix(in srgb, var(--color-warning) 30%, #ffffff);\n --color-warning-300: color-mix(in srgb, var(--color-warning) 50%, #ffffff);\n --color-warning-400: color-mix(in srgb, var(--color-warning) 70%, #ffffff);\n --color-warning-500: var(--color-warning);\n --color-warning-600: color-mix(in srgb, var(--color-warning) 85%, #000000);\n --color-warning-700: color-mix(in srgb, var(--color-warning) 70%, #000000);\n --color-warning-800: color-mix(in srgb, var(--color-warning) 55%, #000000);\n --color-warning-900: color-mix(in srgb, var(--color-warning) 40%, #000000);\n --color-warning-950: color-mix(in srgb, var(--color-warning) 25%, #000000);\n\n /* Support legacy client app variables */\n --color-primary-focus: color-mix(in srgb, var(--color-primary) 30%, transparent);\n --color-primary-light: color-mix(in srgb, var(--color-primary) 10%, #ffffff);\n --color-secondary-border: color-mix(in srgb, var(--color-secondary) 30%, #000000);\n --color-ternary-light: color-mix(in srgb, var(--color-ternary) 15%, #ffffff);\n --color-danger-focus: color-mix(in srgb, var(--color-danger) 30%, transparent);\n --color-success-focus: color-mix(in srgb, var(--color-success) 30%, transparent);\n --color-info-focus: color-mix(in srgb, var(--color-info) 30%, transparent);\n --color-alert-focus: color-mix(in srgb, var(--color-alert) 30%, transparent);\n --color-warning-focus: color-mix(in srgb, var(--color-warning) 30%, transparent);\n\n /* Map library properties for complete safety */\n --color-primary-hover: color-mix(in srgb, var(--color-primary) 85%, #000000);\n --color-primary-ring: color-mix(in srgb, var(--color-primary) 40%, transparent);\n --color-primary-soft: color-mix(in srgb, var(--color-primary) 12%, transparent);\n --color-primary-soft-border: color-mix(in srgb, var(--color-primary) 24%, transparent);\n\n --color-secondary-hover: color-mix(in srgb, var(--color-secondary) 85%, #000000);\n --color-secondary-ring: color-mix(in srgb, var(--color-secondary) 40%, transparent);\n --color-secondary-soft: color-mix(in srgb, var(--color-secondary) 12%, transparent);\n --color-secondary-soft-border: color-mix(in srgb, var(--color-secondary) 24%, transparent);\n\n --color-ternary-hover: color-mix(in srgb, var(--color-ternary) 85%, #000000);\n --color-ternary-ring: color-mix(in srgb, var(--color-ternary) 40%, transparent);\n --color-ternary-soft: color-mix(in srgb, var(--color-ternary) 12%, transparent);\n --color-ternary-soft-border: color-mix(in srgb, var(--color-ternary) 24%, transparent);\n\n --color-danger-hover: color-mix(in srgb, var(--color-danger) 85%, #000000);\n --color-danger-ring: color-mix(in srgb, var(--color-danger) 40%, transparent);\n --color-danger-soft: color-mix(in srgb, var(--color-danger) 12%, transparent);\n --color-danger-soft-border: color-mix(in srgb, var(--color-danger) 24%, transparent);\n\n --color-success-hover: color-mix(in srgb, var(--color-success) 85%, #000000);\n --color-success-ring: color-mix(in srgb, var(--color-success) 40%, transparent);\n --color-success-soft: color-mix(in srgb, var(--color-success) 12%, transparent);\n --color-success-soft-border: color-mix(in srgb, var(--color-success) 24%, transparent);\n\n --color-info-hover: color-mix(in srgb, var(--color-info) 85%, #000000);\n --color-info-ring: color-mix(in srgb, var(--color-info) 40%, transparent);\n --color-info-soft: color-mix(in srgb, var(--color-info) 12%, transparent);\n --color-info-soft-border: color-mix(in srgb, var(--color-info) 24%, transparent);\n\n --color-alert-hover: color-mix(in srgb, var(--color-alert) 85%, #000000);\n --color-alert-ring: color-mix(in srgb, var(--color-alert) 40%, transparent);\n --color-alert-soft: color-mix(in srgb, var(--color-alert) 12%, transparent);\n --color-alert-soft-border: color-mix(in srgb, var(--color-alert) 24%, transparent);\n\n --color-warning-hover: color-mix(in srgb, var(--color-warning) 85%, #000000);\n --color-warning-ring: color-mix(in srgb, var(--color-warning) 40%, transparent);\n --color-warning-soft: color-mix(in srgb, var(--color-warning) 12%, transparent);\n --color-warning-soft-border: color-mix(in srgb, var(--color-warning) 24%, transparent);\n\n --color-sidebarBg: ${sidebarBg} !important;\n --color-sidebarText: ${sidebarText} !important;\n --color-navbarBg: ${navbarBg} !important;\n --color-navbarText: ${navbarText} !important;\n\n --color-table-headerBg: ${tableHeaderBg} !important;\n --color-table-headerText: ${tableHeaderText} !important;\n --color-table-rowBg: ${tableRowBg} !important;\n --color-table-rowText: ${tableRowText} !important;\n\n /* Native library variables integration */\n --sidebar-bg: var(--color-sidebarBg);\n --sidebar-border: color-mix(in srgb, var(--color-sidebarBg) 85%, #000000);\n --sidebar-label-color: var(--color-sidebarText);\n --sidebar-icon-color: color-mix(in srgb, var(--color-sidebarText) 80%, transparent);\n --sidebar-hover-bg: color-mix(in srgb, var(--color-sidebarText) 10%, transparent);\n --sidebar-active-bg: color-mix(in srgb, var(--color-primary) 12%, transparent);\n --sidebar-active-color: var(--color-primary);\n --sidebar-active-icon: var(--color-primary);\n --sidebar-badge-bg: var(--color-primary);\n --sidebar-badge-color: #ffffff;\n\n --topbar-bg: var(--color-navbarBg);\n --topbar-text: var(--color-navbarText);\n --topbar-border: color-mix(in srgb, var(--color-navbarBg) 85%, #000000);\n --topbar-icon: color-mix(in srgb, var(--color-navbarText) 80%, transparent);\n --topbar-icon-hover: var(--color-navbarText);\n --topbar-user-bg: var(--topbar-bg);\n --topbar-user-hover: color-mix(in srgb, var(--color-navbarText) 10%, transparent);\n --topbar-user-text: var(--color-navbarText);\n --topbar-user-subtitle: color-mix(in srgb, var(--color-navbarText) 65%, transparent);\n --topbar-user-dropdown-bg: color-mix(in srgb, var(--color-navbarBg) 100%, #ffffff);\n --topbar-user-dropdown-border: color-mix(in srgb, var(--color-navbarBg) 92%, #000000);\n --topbar-user-item-hover: color-mix(in srgb, var(--color-navbarText) 6%, transparent);\n\n --layout-bg: var(--color-secondary-50);\n --input-text-color: var(--color-secondary-900);\n\n --calendar-selected-bg: var(--color-primary);\n --calendar-selected-text: #ffffff;\n --calendar-range-bg: var(--color-primary-50);\n --calendar-today-bg: var(--color-primary-100);\n --calendar-today-text: var(--color-primary);\n }\n\n /* Dark mode overrides */\n .dark, [data-theme=\"dark\"] {\n --color-heading-default: #f8fafc;\n --color-text-default: #cbd5e1;\n --color-text-muted: #64748b;\n --layout-bg: #090f1d;\n --card-bg: #111827;\n --card-border: #1f2937;\n --card-header-bg: #1f2937;\n --card-header-border: #374151;\n --input-bg: #1f2937;\n --input-border: #374151;\n --input-placeholder: #6b7280;\n --input-text-color: #cbd5e1;\n --modal-bg: #111827;\n --modal-footer-bg: #1f2937;\n --modal-header-border: #374151;\n --modal-footer-border: #374151;\n --calendar-bg: #111827;\n --calendar-border: #1f2937;\n --calendar-header-text: #f3f4f6;\n --calendar-header-hover: #1f2937;\n --calendar-days-text: #e5e7eb;\n --calendar-selected-bg: var(--color-primary);\n --calendar-selected-text: #ffffff;\n --calendar-range-bg: var(--color-primary-50);\n --calendar-today-bg: var(--color-primary-100);\n --calendar-today-text: var(--color-primary);\n\n /* Override dynamic color-mix scales to blend with dark instead of white */\n --color-primary-50: color-mix(in srgb, var(--color-primary) 10%, #0b1329);\n --color-primary-100: color-mix(in srgb, var(--color-primary) 20%, #0b1329);\n --color-primary-200: color-mix(in srgb, var(--color-primary) 35%, #0b1329);\n --color-primary-300: color-mix(in srgb, var(--color-primary) 50%, #0b1329);\n --color-primary-400: color-mix(in srgb, var(--color-primary) 70%, #0b1329);\n\n --color-secondary-50: color-mix(in srgb, var(--color-secondary) 10%, #090f1d);\n --color-secondary-100: color-mix(in srgb, var(--color-secondary) 18%, #090f1d);\n --color-secondary-200: color-mix(in srgb, var(--color-secondary) 30%, #090f1d);\n --color-secondary-300: color-mix(in srgb, var(--color-secondary) 45%, #090f1d);\n --color-secondary-400: color-mix(in srgb, var(--color-secondary) 60%, #090f1d);\n\n --color-success-50: color-mix(in srgb, var(--color-success) 10%, #061f14);\n --color-success-100: color-mix(in srgb, var(--color-success) 20%, #061f14);\n --color-success-200: color-mix(in srgb, var(--color-success) 35%, #061f14);\n\n --color-danger-50: color-mix(in srgb, var(--color-danger) 10%, #1f0808);\n --color-danger-100: color-mix(in srgb, var(--color-danger) 20%, #1f0808);\n --color-danger-200: color-mix(in srgb, var(--color-danger) 35%, #1f0808);\n\n --color-warning-50: color-mix(in srgb, var(--color-warning) 10%, #1f1b05);\n --color-warning-100: color-mix(in srgb, var(--color-warning) 20%, #1f1b05);\n --color-warning-200: color-mix(in srgb, var(--color-warning) 35%, #1f1b05);\n\n --color-ternary-50: color-mix(in srgb, var(--color-ternary) 10%, #14081f);\n --color-ternary-100: color-mix(in srgb, var(--color-ternary) 20%, #14081f);\n --color-ternary-200: color-mix(in srgb, var(--color-ternary) 35%, #14081f);\n\n --color-info-50: color-mix(in srgb, var(--color-info) 10%, #08141f);\n --color-info-100: color-mix(in srgb, var(--color-info) 20%, #08141f);\n --color-info-200: color-mix(in srgb, var(--color-info) 35%, #08141f);\n }\n\n /* Force dark mode class overrides for common backgrounds, borders, and texts */\n .dark, [data-theme=\"dark\"] {\n color: #cbd5e1;\n }\n .dark .text-slate-800, [data-theme=\"dark\"] .text-slate-800,\n .dark .text-gray-800, [data-theme=\"dark\"] .text-gray-800 {\n color: #f8fafc !important;\n }\n .dark .text-slate-700, [data-theme=\"dark\"] .text-slate-700,\n .dark .text-gray-700, [data-theme=\"dark\"] .text-gray-700 {\n color: #cbd5e1 !important;\n }\n .dark .text-slate-600, [data-theme=\"dark\"] .text-slate-600,\n .dark .text-gray-600, [data-theme=\"dark\"] .text-gray-600 {\n color: #cbd5e1 !important;\n }\n .dark .text-slate-500, [data-theme=\"dark\"] .text-slate-500,\n .dark .text-gray-500, [data-theme=\"dark\"] .text-gray-500 {\n color: #94a3b8 !important;\n }\n .dark .text-slate-400, [data-theme=\"dark\"] .text-slate-400,\n .dark .text-gray-400, [data-theme=\"dark\"] .text-gray-400 {\n color: #64748b !important;\n }\n\n .dark .bg-white, [data-theme=\"dark\"] .bg-white {\n background-color: var(--card-bg, #111827) !important;\n }\n .dark .bg-slate-50, [data-theme=\"dark\"] .bg-slate-50,\n .dark .bg-gray-50, [data-theme=\"dark\"] .bg-gray-50 {\n background-color: #1f2937 !important;\n }\n .dark .border-slate-100, [data-theme=\"dark\"] .border-slate-100,\n .dark .border-gray-100, [data-theme=\"dark\"] .border-gray-100,\n .dark .border-slate-200, [data-theme=\"dark\"] .border-slate-200,\n .dark .border-gray-200, [data-theme=\"dark\"] .border-gray-200 {\n border-color: #374151 !important;\n }\n\n .dark .bg-gray-100, [data-theme=\"dark\"] .bg-gray-100,\n .dark .bg-slate-100, [data-theme=\"dark\"] .bg-slate-100 {\n background-color: #1f2937 !important;\n }\n .dark .border-gray-300, [data-theme=\"dark\"] .border-gray-300,\n .dark .border-slate-300, [data-theme=\"dark\"] .border-slate-300 {\n border-color: #4b5563 !important;\n }\n .dark .bg-gray-200, [data-theme=\"dark\"] .bg-gray-200,\n .dark .bg-slate-200, [data-theme=\"dark\"] .bg-slate-200 {\n background-color: #374151 !important;\n }\n\n /* Light mode overrides inside forced light subtree */\n [data-theme=\"light\"] {\n color: #334155;\n --color-text-default: #1e293b;\n --color-text-muted: #475569;\n --layout-bg: var(--color-secondary-50);\n --card-bg: #ffffff;\n --card-border: #f1f5f9;\n --card-header-bg: #f8fafc;\n --card-header-border: #e2e8f0;\n --input-bg: #ffffff;\n --input-border: #cbd5e1;\n --input-placeholder: #94a3b8;\n --input-text-color: #1e293b;\n --modal-bg: #ffffff;\n --modal-footer-bg: #f8fafc;\n --modal-header-border: #e2e8f0;\n --modal-footer-border: #e2e8f0;\n --calendar-bg: #ffffff;\n --calendar-border: #e2e8f0;\n --calendar-header-text: #1e293b;\n --calendar-header-hover: #f1f5f9;\n --calendar-days-text: #334155;\n --calendar-selected-bg: var(--color-primary);\n --calendar-selected-text: #ffffff;\n --calendar-range-bg: var(--color-primary-50);\n --calendar-today-bg: var(--color-primary-100);\n --calendar-today-text: var(--color-primary);\n\n --color-primary-50: color-mix(in srgb, var(--color-primary) 5%, #ffffff);\n --color-primary-100: color-mix(in srgb, var(--color-primary) 10%, #ffffff);\n --color-primary-200: color-mix(in srgb, var(--color-primary) 30%, #ffffff);\n --color-primary-300: color-mix(in srgb, var(--color-primary) 50%, #ffffff);\n --color-primary-400: color-mix(in srgb, var(--color-primary) 70%, #ffffff);\n\n --color-secondary-50: color-mix(in srgb, var(--color-secondary) 5%, #ffffff);\n --color-secondary-100: color-mix(in srgb, var(--color-secondary) 10%, #ffffff);\n --color-secondary-200: color-mix(in srgb, var(--color-secondary) 30%, #ffffff);\n --color-secondary-300: color-mix(in srgb, var(--color-secondary) 50%, #ffffff);\n --color-secondary-400: color-mix(in srgb, var(--color-secondary) 70%, #ffffff);\n\n --color-success-50: color-mix(in srgb, var(--color-success) 5%, #ffffff);\n --color-success-100: color-mix(in srgb, var(--color-success) 10%, #ffffff);\n --color-success-200: color-mix(in srgb, var(--color-success) 30%, #ffffff);\n\n --color-danger-50: color-mix(in srgb, var(--color-danger) 5%, #ffffff);\n --color-danger-100: color-mix(in srgb, var(--color-danger) 10%, #ffffff);\n --color-danger-200: color-mix(in srgb, var(--color-danger) 30%, #ffffff);\n\n --color-warning-50: color-mix(in srgb, var(--color-warning) 5%, #ffffff);\n --color-warning-100: color-mix(in srgb, var(--color-warning) 10%, #ffffff);\n --color-warning-200: color-mix(in srgb, var(--color-warning) 30%, #ffffff);\n\n --color-ternary-50: color-mix(in srgb, var(--color-ternary) 5%, #ffffff);\n --color-ternary-100: color-mix(in srgb, var(--color-ternary) 10%, #ffffff);\n --color-ternary-200: color-mix(in srgb, var(--color-ternary) 30%, #ffffff);\n\n --color-info-50: color-mix(in srgb, var(--color-info) 5%, #ffffff);\n --color-info-100: color-mix(in srgb, var(--color-info) 10%, #ffffff);\n --color-info-200: color-mix(in srgb, var(--color-info) 30%, #ffffff);\n }\n\n [data-theme=\"light\"] .text-slate-800,\n [data-theme=\"light\"] .text-gray-800 {\n color: #1e293b !important;\n }\n [data-theme=\"light\"] .text-slate-700,\n [data-theme=\"light\"] .text-gray-700 {\n color: #334155 !important;\n }\n [data-theme=\"light\"] .text-slate-600,\n [data-theme=\"light\"] .text-gray-600 {\n color: #475569 !important;\n }\n [data-theme=\"light\"] .text-slate-500,\n [data-theme=\"light\"] .text-gray-500 {\n color: #64748b !important;\n }\n [data-theme=\"light\"] .text-slate-400,\n [data-theme=\"light\"] .text-gray-400 {\n color: #94a3b8 !important;\n }\n\n [data-theme=\"light\"] .bg-white {\n background-color: #ffffff !important;\n }\n [data-theme=\"light\"] .bg-slate-50,\n [data-theme=\"light\"] .bg-gray-50 {\n background-color: #f8fafc !important;\n }\n [data-theme=\"light\"] .border-slate-100,\n [data-theme=\"light\"] .border-gray-100,\n [data-theme=\"light\"] .border-slate-200,\n [data-theme=\"light\"] .border-gray-200 {\n border-color: #e2e8f0 !important;\n }\n [data-theme=\"light\"] .bg-gray-100,\n [data-theme=\"light\"] .bg-slate-100 {\n background-color: #f1f5f9 !important;\n }\n [data-theme=\"light\"] .border-gray-300,\n [data-theme=\"light\"] .border-slate-300 {\n border-color: #cbd5e1 !important;\n }\n [data-theme=\"light\"] .bg-gray-200,\n [data-theme=\"light\"] .bg-slate-200 {\n background-color: #e2e8f0 !important;\n }\n\n\n /* Primary overrides (cyan mappings in UI library) */\n .bg-cyan-400 { background-color: var(--color-primary) !important; }\n .hover\\\\:bg-cyan-500:hover { background-color: var(--color-primary-hover) !important; }\n .focus\\\\:ring-cyan-300:focus { --tw-ring-color: var(--color-primary-ring) !important; }\n .text-cyan-600 { color: var(--color-primary) !important; }\n .text-cyan-500 { color: var(--color-primary) !important; }\n .border-cyan-400 { border-color: var(--color-primary) !important; }\n .focus\\\\:border-cyan-500:focus { border-color: var(--color-primary-hover) !important; }\n .focus\\\\:ring-cyan-500:focus { --tw-ring-color: var(--color-primary-hover) !important; }\n .text-cyan-100 { color: var(--color-primary-soft) !important; }\n .hover\\\\:bg-cyan-50:hover { background-color: var(--color-primary-soft) !important; }\n\n /* Success overrides (green mappings in UI library) */\n .bg-green-700 { background-color: var(--color-success) !important; }\n .hover\\\\:bg-green-800:hover { background-color: var(--color-success-hover) !important; }\n .focus\\\\:ring-green-300:focus { --tw-ring-color: var(--color-success-ring) !important; }\n .text-green-700 { color: var(--color-success) !important; }\n .border-green-700 { border-color: var(--color-success) !important; }\n .bg-green-500 { background-color: var(--color-success) !important; }\n .hover\\\\:bg-green-600:hover { background-color: var(--color-success-hover) !important; }\n\n /* Danger overrides (red mappings in UI library) */\n .bg-red-700 { background-color: var(--color-danger) !important; }\n .hover\\\\:bg-red-800:hover { background-color: var(--color-danger-hover) !important; }\n .focus\\\\:ring-red-300:focus { --tw-ring-color: var(--color-danger-ring) !important; }\n .text-red-700 { color: var(--color-danger) !important; }\n .border-red-700 { border-color: var(--color-danger) !important; }\n .bg-red-500 { background-color: var(--color-danger) !important; }\n .hover\\\\:bg-red-600:hover { background-color: var(--color-danger-hover) !important; }\n\n /* Warning overrides (yellow mappings in UI library) */\n .bg-yellow-400 { background-color: var(--color-warning) !important; }\n .hover\\\\:bg-yellow-500:hover { background-color: var(--color-warning-hover) !important; }\n .focus\\\\:ring-yellow-300:focus { --tw-ring-color: var(--color-warning-ring) !important; }\n .text-yellow-600 { color: var(--color-warning-hover) !important; }\n .border-yellow-400 { border-color: var(--color-warning) !important; }\n .bg-yellow-500 { background-color: var(--color-warning) !important; }\n .hover\\\\:bg-yellow-600:hover { background-color: var(--color-warning-hover) !important; }\n\n /* Ternary / Orange overrides */\n .bg-orange-500 { background-color: var(--color-ternary) !important; }\n .hover\\\\:bg-orange-500:hover { background-color: var(--color-ternary-hover) !important; }\n .hover\\\\:bg-orange-600:hover { background-color: var(--color-ternary-hover) !important; }\n .text-orange-500 { color: var(--color-ternary) !important; }\n .text-orange-800 { color: var(--color-ternary-hover) !important; }\n .bg-orange-200 { background-color: var(--color-ternary-soft) !important; }\n .border-orange-400 { border-color: var(--color-ternary) !important; }\n .border-orange-500 { border-color: var(--color-ternary) !important; }\n .hover\\\\:bg-orange-50\\\\/30:hover { background-color: var(--color-ternary-soft) !important; }\n\n /* Info / Blue overrides */\n .bg-blue-500 { background-color: var(--color-info) !important; }\n .hover\\\\:bg-blue-600:hover { background-color: var(--color-info-hover) !important; }\n .text-blue-500 { color: var(--color-info) !important; }\n .text-blue-600 { color: var(--color-info-hover) !important; }\n .border-blue-500 { border-color: var(--color-info) !important; }\n\n /* Secondary elements overrides */\n button[class*=\"bg-white\"][class*=\"hover:bg-gray-100\"] {\n background-color: var(--color-secondary) !important;\n border-color: var(--color-secondary-soft-border) !important;\n color: #111827 !important;\n }\n button[class*=\"bg-white\"][class*=\"hover:bg-gray-100\"]:hover {\n background-color: var(--color-secondary-hover) !important;\n }\n\n /* Custom Table styling overrides */\n thead tr, tr.bg-secondary-50, tr[class*=\"bg-secondary-50\"] {\n background-color: var(--color-table-headerBg) !important;\n border-bottom-color: color-mix(in srgb, var(--color-table-headerBg) 85%, #000000) !important;\n }\n th span, th div span {\n color: var(--color-table-headerText) !important;\n }\n tbody tr {\n background-color: var(--color-table-rowBg) !important;\n }\n tbody tr td, tbody tr td div {\n color: var(--color-table-rowText) !important;\n }\n tbody tr:hover {\n background-color: color-mix(in srgb, var(--color-primary) 8%, var(--color-table-rowBg)) !important;\n }\n\n /* Animation for Saved Indicator */\n @keyframes fadeInOut {\n 0%, 100% { opacity: 0; transform: translateY(-4px); }\n 15%, 85% { opacity: 1; transform: translateY(0); }\n }\n .animate-fade-in-out {\n animation: fadeInOut 1.5s ease-in-out forwards;\n }\n\n /* Fallback utility classes for blurs */\n .backdrop-blur-xs {\n backdrop-filter: blur(2px);\n -webkit-backdrop-filter: blur(2px);\n }\n .backdrop-blur-xl {\n backdrop-filter: blur(24px);\n -webkit-backdrop-filter: blur(24px);\n }\n\n /* =======================================================================\n AUTONOMOUS THEME DESIGNER STYLES (No Tailwind dependencies)\n ======================================================================= */\n\n @keyframes itBounce {\n 0%, 100% { transform: translateY(0); }\n 50% { transform: translateY(-8px); }\n }\n .it-theme-bounce {\n animation: itBounce 3s infinite ease-in-out !important;\n }\n\n /* FAB styles */\n .it-theme-fab {\n position: fixed !important;\n bottom: 24px !important;\n right: 24px !important;\n width: 56px !important;\n height: 56px !important;\n border-radius: 50% !important;\n border: none !important;\n color: #ffffff !important;\n box-shadow: 0 4px 14px 0 rgba(0, 0, 0, 0.15) !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n cursor: pointer !important;\n z-index: 99999 !important;\n transition: transform 0.2s cubic-bezier(0.4, 0, 0.2, 1), background-color 0.2s ease, box-shadow 0.2s ease !important;\n outline: none !important;\n }\n .it-theme-fab:hover {\n transform: scale(1.1) !important;\n box-shadow: 0 6px 20px 0 rgba(0, 0, 0, 0.2) !important;\n }\n .it-theme-fab:active {\n transform: scale(0.95) !important;\n }\n\n /* Backdrop styles */\n .it-theme-backdrop {\n position: fixed !important;\n top: 0 !important;\n left: 0 !important;\n right: 0 !important;\n bottom: 0 !important;\n background-color: rgba(15, 23, 42, 0.3) !important;\n backdrop-filter: blur(4px) !important;\n -webkit-backdrop-filter: blur(4px) !important;\n z-index: 99997 !important;\n transition: opacity 0.3s ease !important;\n }\n\n /* Drawer container */\n .it-theme-drawer {\n position: fixed !important;\n top: 0 !important;\n right: 0 !important;\n bottom: 0 !important;\n width: 100% !important;\n max-width: 420px !important;\n background-color: #ffffff !important;\n box-shadow: -10px 0 25px -5px rgba(0, 0, 0, 0.08), -8px 0 10px -6px rgba(0, 0, 0, 0.08) !important;\n z-index: 99998 !important;\n display: flex !important;\n flex-direction: column !important;\n justify-content: space-between !important;\n padding: 24px !important;\n box-sizing: border-box !important;\n border-left: 1px solid rgba(226, 232, 240, 0.8) !important;\n transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important;\n font-family: Inter, system-ui, -apple-system, sans-serif !important;\n color: #1e293b !important;\n }\n\n .dark .it-theme-drawer, [data-theme=\"dark\"] .it-theme-drawer {\n background-color: #0f172a !important;\n border-left-color: rgba(30, 41, 59, 0.8) !important;\n color: #f1f5f9 !important;\n }\n\n /* Drawer Header */\n .it-theme-drawer-header {\n display: flex !important;\n align-items: center !important;\n justify-content: space-between !important;\n padding-bottom: 16px !important;\n border-bottom: 1px solid #e2e8f0 !important;\n }\n .dark .it-theme-drawer-header, [data-theme=\"dark\"] .it-theme-drawer-header {\n border-bottom-color: #1e293b !important;\n }\n \n .it-theme-drawer-title-group {\n display: flex !important;\n align-items: center !important;\n gap: 12px !important;\n }\n\n .it-theme-icon-container {\n width: 36px !important;\n height: 36px !important;\n border-radius: 8px !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n color: #ffffff !important;\n }\n\n .it-theme-drawer-title {\n font-size: 16px !important;\n font-weight: 700 !important;\n margin: 0 !important;\n color: #1e293b !important;\n line-height: 1.2 !important;\n }\n .dark .it-theme-drawer-title, [data-theme=\"dark\"] .it-theme-drawer-title {\n color: #f8fafc !important;\n }\n\n .it-theme-drawer-subtitle {\n font-size: 11px !important;\n color: #64748b !important;\n margin: 2px 0 0 0 !important;\n font-weight: 400 !important;\n }\n .dark .it-theme-drawer-subtitle, [data-theme=\"dark\"] .it-theme-drawer-subtitle {\n color: #94a3b8 !important;\n }\n\n .it-theme-close-btn {\n background: none !important;\n border: none !important;\n color: #94a3b8 !important;\n cursor: pointer !important;\n padding: 6px !important;\n border-radius: 6px !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n transition: background-color 0.2s, color 0.2s !important;\n }\n .it-theme-close-btn:hover {\n background-color: #f1f5f9 !important;\n color: #334155 !important;\n }\n .dark .it-theme-close-btn:hover, [data-theme=\"dark\"] .it-theme-close-btn:hover {\n background-color: #1e293b !important;\n color: #f1f5f9 !important;\n }\n\n /* Sections inside Drawer */\n .it-theme-section {\n margin-top: 18px !important;\n }\n \n .it-theme-section-title {\n font-size: 10px !important;\n font-weight: 700 !important;\n text-transform: uppercase !important;\n letter-spacing: 0.05em !important;\n color: #94a3b8 !important;\n margin-bottom: 8px !important;\n margin-top: 0 !important;\n }\n\n /* Preset Grid */\n .it-theme-presets-grid {\n display: grid !important;\n grid-template-columns: repeat(2, 1fr) !important;\n gap: 8px !important;\n }\n\n .it-theme-preset-card {\n display: flex !important;\n flex-direction: column !important;\n align-items: flex-start !important;\n padding: 10px !important;\n border-radius: 10px !important;\n border: 1px solid #e2e8f0 !important;\n background-color: rgba(255, 255, 255, 0.6) !important;\n cursor: pointer !important;\n text-align: left !important;\n transition: all 0.2s ease !important;\n width: 100% !important;\n box-sizing: border-box !important;\n }\n .dark .it-theme-preset-card, [data-theme=\"dark\"] .it-theme-preset-card {\n border-color: #1e293b !important;\n background-color: rgba(15, 23, 42, 0.4) !important;\n }\n \n .it-theme-preset-card:hover {\n border-color: #cbd5e1 !important;\n transform: translateY(-1px) !important;\n }\n .dark .it-theme-preset-card:hover, [data-theme=\"dark\"] .it-theme-preset-card:hover {\n border-color: #334155 !important;\n }\n\n .it-theme-preset-name {\n font-size: 11px !important;\n font-weight: 600 !important;\n color: #334155 !important;\n margin-bottom: 6px !important;\n margin-top: 0 !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n text-overflow: ellipsis !important;\n width: 100% !important;\n }\n .dark .it-theme-preset-name, [data-theme=\"dark\"] .it-theme-preset-name {\n color: #cbd5e1 !important;\n }\n\n .it-theme-preset-colors {\n display: flex !important;\n gap: 4px !important;\n }\n\n .it-theme-preset-dot {\n width: 12px !important;\n height: 12px !important;\n border-radius: 50% !important;\n border: 1px solid rgba(0,0,0,0.08) !important;\n }\n\n /* Color controls list */\n .it-theme-color-list {\n display: flex !important;\n flex-direction: column !important;\n gap: 6px !important;\n max-height: 250px !important;\n overflow-y: auto !important;\n padding-right: 4px !important;\n }\n\n .it-theme-color-row {\n display: flex !important;\n align-items: center !important;\n justify-content: space-between !important;\n padding: 6px 10px !important;\n border-radius: 10px !important;\n border: 1px solid #f1f5f9 !important;\n background-color: rgba(248, 250, 252, 0.5) !important;\n }\n .dark .it-theme-color-row, [data-theme=\"dark\"] .it-theme-color-row {\n border-color: #1e293b !important;\n background-color: rgba(9, 15, 29, 0.5) !important;\n }\n\n .it-theme-color-left {\n display: flex !important;\n align-items: center !important;\n gap: 12px !important;\n }\n\n .it-theme-color-picker-btn {\n position: relative !important;\n width: 28px !important;\n height: 28px !important;\n border-radius: 50% !important;\n overflow: hidden !important;\n border: 1px solid #cbd5e1 !important;\n box-shadow: inset 0 2px 4px 0 rgba(0,0,0,0.06) !important;\n cursor: pointer !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n }\n .dark .it-theme-color-picker-btn, [data-theme=\"dark\"] .it-theme-color-picker-btn {\n border-color: #475569 !important;\n }\n\n .it-theme-color-picker-input {\n position: absolute !important;\n top: 0 !important;\n left: 0 !important;\n width: 100% !important;\n height: 100% !important;\n opacity: 0 !important;\n cursor: pointer !important;\n margin: 0 !important;\n padding: 0 !important;\n }\n\n .it-theme-color-picker-preview {\n width: 100% !important;\n height: 100% !important;\n border-radius: 50% !important;\n }\n\n .it-theme-color-meta {\n display: flex !important;\n flex-direction: column !important;\n }\n\n .it-theme-color-label {\n font-size: 10px !important;\n font-weight: 700 !important;\n text-transform: uppercase !important;\n color: #475569 !important;\n }\n .dark .it-theme-color-label, [data-theme=\"dark\"] .it-theme-color-label {\n color: #cbd5e1 !important;\n }\n\n .it-theme-color-hex-text {\n font-family: monospace !important;\n font-size: 9px !important;\n color: #94a3b8 !important;\n margin-top: 1px !important;\n }\n\n .it-theme-color-text-input {\n width: 80px !important;\n padding: 4px 6px !important;\n font-size: 11px !important;\n font-family: monospace !important;\n text-align: center !important;\n border-radius: 6px !important;\n border: 1px solid #cbd5e1 !important;\n background-color: #ffffff !important;\n color: #334155 !important;\n outline: none !important;\n transition: border-color 0.2s !important;\n box-sizing: border-box !important;\n }\n .dark .it-theme-color-text-input, [data-theme=\"dark\"] .it-theme-color-text-input {\n border-color: #475569 !important;\n background-color: #1e293b !important;\n color: #cbd5e1 !important;\n }\n\n /* Mode Selector Segmented Control */\n .it-theme-mode-selector {\n display: grid !important;\n grid-template-columns: repeat(3, 1fr) !important;\n gap: 2px !important;\n background-color: #f1f5f9 !important;\n padding: 2px !important;\n border-radius: 8px !important;\n width: 180px !important;\n }\n .dark .it-theme-mode-selector, [data-theme=\"dark\"] .it-theme-mode-selector {\n background-color: #1e293b !important;\n }\n\n .it-theme-mode-btn {\n background: none !important;\n border: none !important;\n padding: 6px 8px !important;\n font-size: 11px !important;\n font-weight: 600 !important;\n color: #475569 !important;\n border-radius: 6px !important;\n cursor: pointer !important;\n text-align: center !important;\n transition: all 0.2s ease !important;\n }\n .dark .it-theme-mode-btn, [data-theme=\"dark\"] .it-theme-mode-btn {\n color: #94a3b8 !important;\n }\n\n .it-theme-mode-btn-active {\n background-color: #ffffff !important;\n color: var(--color-primary) !important;\n box-shadow: 0 1px 3px rgba(0,0,0,0.06) !important;\n }\n .dark .it-theme-mode-btn-active, [data-theme=\"dark\"] .it-theme-mode-btn-active {\n background-color: #0f172a !important;\n color: var(--color-primary) !important;\n }\n\n /* Saved notification toast */\n .it-theme-toast-container {\n height: 20px !important;\n margin: 6px 0 !important;\n position: relative !important;\n }\n\n .it-theme-toast {\n position: absolute !important;\n top: 0 !important;\n left: 0 !important;\n right: 0 !important;\n display: flex !important;\n justify-content: center !important;\n }\n\n .it-theme-toast-badge {\n display: inline-flex !important;\n align-items: center !important;\n gap: 4px !important;\n font-size: 10px !important;\n font-weight: 600 !important;\n background-color: rgba(34, 197, 94, 0.1) !important;\n color: #16a34a !important;\n padding: 3px 10px !important;\n border-radius: 9999px !important;\n border: 1px solid rgba(34, 197, 94, 0.2) !important;\n }\n\n /* Drawer Footer */\n .it-theme-drawer-footer {\n padding-top: 12px !important;\n margin-top: 12px !important;\n border-top: 1px solid #e2e8f0 !important;\n display: flex !important;\n align-items: center !important;\n justify-content: space-between !important;\n }\n .dark .it-theme-drawer-footer, [data-theme=\"dark\"] .it-theme-drawer-footer {\n border-top-color: #1e293b !important;\n }\n\n .it-theme-reset-btn {\n display: flex !important;\n align-items: center !important;\n gap: 6px !important;\n padding: 6px 12px !important;\n font-size: 11px !important;\n font-weight: 600 !important;\n background: none !important;\n border: none !important;\n border-radius: 6px !important;\n color: #64748b !important;\n cursor: pointer !important;\n transition: background-color 0.2s, color 0.2s !important;\n }\n .it-theme-reset-btn:hover {\n background-color: #f1f5f9 !important;\n color: #1e293b !important;\n }\n .dark .it-theme-reset-btn:hover, [data-theme=\"dark\"] .it-theme-reset-btn:hover {\n background-color: #1e293b !important;\n color: #f8fafc !important;\n }\n\n .it-theme-done-btn {\n padding: 6px 16px !important;\n font-size: 11px !important;\n font-weight: 700 !important;\n border: none !important;\n border-radius: 6px !important;\n color: #ffffff !important;\n cursor: pointer !important;\n box-shadow: 0 2px 4px rgba(0,0,0,0.05) !important;\n transition: transform 0.2s, background-color 0.2s !important;\n }\n .it-theme-done-btn:hover {\n transform: translateY(-1px) !important;\n }\n\n h1, h2, h3 {\n color: var(--color-heading-default);\n }\n `;\n\n }, [palette, resolvedTheme]);\n\n const updateColor = (key: string, value: string) => {\n setPaletteState((prev) => {\n if (key.includes(\".\")) {\n const [section, subKey] = key.split(\".\");\n return {\n ...prev,\n [section]: {\n ...(prev[section as keyof ITThemePalette] as Record<\n string,\n string\n >),\n [subKey]: value,\n },\n };\n }\n return {\n ...prev,\n [key]: value,\n };\n });\n };\n\n const applyPreset = (colors: ITThemePalette) => {\n setPaletteState(colors);\n };\n\n const resetTheme = () => {\n const basePalette = {\n ...DEFAULT_PALETTE,\n ...theme,\n layout: { ...DEFAULT_PALETTE.layout, ...theme?.layout },\n table: { ...DEFAULT_PALETTE.table, ...theme?.table },\n };\n setPaletteState(basePalette as ITThemePalette);\n };\n\n const ColorRow = ({ colorKey }: { colorKey: string }) => {\n const isNested = colorKey.includes(\".\");\n const label = isNested ? colorKey.split(\".\")[1] : colorKey;\n const value = getNestedValue(palette, colorKey);\n\n return (\n <div\n key={colorKey}\n className=\"flex items-center justify-between p-3 rounded-xl border border-slate-100 dark:border-slate-800 bg-white dark:bg-slate-900/50 gap-3 hover:border-slate-200 dark:hover:border-slate-700 transition-colors\"\n >\n <div className=\"flex items-center gap-3 flex-1 min-w-0\">\n <div className=\"relative w-10 h-10 rounded-xl border-2 border-slate-200 dark:border-slate-700 overflow-hidden cursor-pointer flex-shrink-0 shadow-sm hover:scale-105 transition-transform\">\n <input\n type=\"color\"\n value={value}\n onChange={(e) => updateColor(colorKey, e.target.value)}\n className=\"absolute inset-0 opacity-0 cursor-pointer w-full h-full\"\n />\n <div className=\"w-full h-full\" style={{ backgroundColor: value }} />\n </div>\n <div className=\"flex flex-col min-w-0\">\n <ITText as=\"span\" className=\"text-xs font-bold text-slate-700 dark:text-slate-300 truncate capitalize\">\n {label.replace(/([A-Z])/g, \" $1\").trim()}\n </ITText>\n <div className=\"flex items-center gap-2 mt-0.5\">\n <span\n className=\"w-3 h-3 rounded-full border border-slate-200 dark:border-slate-600\"\n style={{ backgroundColor: value }}\n />\n <ITText as=\"span\" className=\"font-mono text-[11px] text-slate-400\">{value}</ITText>\n </div>\n </div>\n </div>\n <input\n type=\"text\"\n value={value}\n onChange={(e) => updateColor(colorKey, e.target.value)}\n className=\"w-24 px-2.5 py-1.5 text-xs font-mono text-center rounded-lg border border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-800 text-slate-700 dark:text-slate-300 outline-none focus:ring-2 focus:ring-primary-500/40 focus:border-primary-500 transition-all\"\n />\n </div>\n );\n };\n\n const PresetCard = ({\n preset,\n isCustom,\n }: {\n preset: { name: string; colors: ITThemePalette };\n isCustom?: boolean;\n }) => {\n const isSelected =\n JSON.stringify(preset.colors) === JSON.stringify(palette);\n return (\n <button\n type=\"button\"\n onClick={() => applyPreset(preset.colors)}\n className={`relative flex flex-col items-start p-2.5 rounded-xl border text-left transition-all group ${\n isSelected\n ? \"border-primary-500 bg-primary-500/5 shadow-sm ring-1 ring-primary-500/20\"\n : \"border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-900/50 hover:border-slate-300 dark:hover:border-slate-600\"\n }`}\n >\n {isCustom && (\n <span\n onClick={(e) => {\n e.stopPropagation();\n handleDeletePreset(preset.name, e);\n }}\n className=\"absolute top-1.5 right-1.5 opacity-0 group-hover:opacity-100 p-0.5 rounded-md hover:bg-red-500/10 hover:text-red-500 text-slate-400 dark:text-slate-500 cursor-pointer transition-all z-10\"\n title=\"Eliminar\"\n >\n <MdClose size={12} />\n </span>\n )}\n <ITText as=\"span\" className=\"text-xs font-semibold truncate w-full mb-1.5 pr-4 text-slate-700 dark:text-slate-300\">\n {preset.name}\n </ITText>\n <div className=\"flex gap-1\">\n {([\"primary\", \"secondary\", \"ternary\", \"success\"] as const).map((c) => (\n <span\n key={c}\n className=\"w-3 h-3 rounded-full border border-black/10\"\n style={{ backgroundColor: preset.colors[c] }}\n />\n ))}\n </div>\n </button>\n );\n };\n\n return (\n <ITThemeContext.Provider\n value={{\n palette,\n colors: palette,\n setPalette: setPaletteState,\n updateColor,\n resetTheme,\n applyPreset,\n resolvedTheme,\n darkModeMode,\n setDarkModeMode,\n }}\n >\n {children}\n\n {showFab && (\n <button\n onClick={() => setIsOpen((prev) => !prev)}\n className=\"it-theme-fab it-theme-bounce\"\n style={{ backgroundColor: \"var(--color-primary)\" }}\n aria-label=\"Configurar Paleta de Colores\"\n >\n <MdPalette size={28} />\n </button>\n )}\n\n {showFab && (\n <ITDialog\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n title=\"Diseñador de Temas\"\n useFormHeader\n >\n <div className=\"flex gap-6 h-[580px]\">\n {/* LEFT: Mode + Presets */}\n <div className=\"w-64 flex-shrink-0 flex flex-col gap-5 overflow-y-auto pr-1\">\n <div>\n <ITText as=\"span\" className=\"text-[11px] font-bold uppercase tracking-wider text-slate-400 dark:text-slate-500 mb-2.5 block\">\n Apariencia\n </ITText>\n <ITSegmentedControl\n options={[\n { value: \"light\", label: \"☀️\" },\n { value: \"dark\", label: \"🌙\" },\n { value: \"system\", label: \"💻\" },\n ]}\n value={darkModeMode}\n onChange={(val) => setDarkModeMode(val as \"dark\" | \"light\" | \"system\")}\n size=\"sm\"\n />\n </div>\n\n <div>\n <div className=\"flex items-center justify-between mb-2.5\">\n <ITText as=\"span\" className=\"text-[11px] font-bold uppercase tracking-wider text-slate-400 dark:text-slate-500\">\n Presets\n </ITText>\n </div>\n <div className=\"grid grid-cols-2 gap-2\">\n {PRESETS.map((preset) => (\n <PresetCard key={preset.name} preset={preset} />\n ))}\n </div>\n </div>\n\n {customPresets.length > 0 && (\n <div>\n <ITText as=\"span\" className=\"text-[11px] font-bold uppercase tracking-wider text-slate-400 dark:text-slate-500 mb-2.5 block\">\n Mis Temas\n </ITText>\n <div className=\"flex flex-col gap-1.5\">\n {customPresets.map((preset) => (\n <PresetCard key={preset.name} preset={preset} isCustom />\n ))}\n </div>\n </div>\n )}\n\n {/* Save preset inline */}\n {isSavingPreset && (\n <div className=\"flex flex-col gap-2 p-3 rounded-xl border border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-900/50\">\n <ITInput\n name=\"presetName\"\n placeholder=\"Nombre del tema...\"\n value={newPresetName}\n onChange={(e: any) => setNewPresetName(e.target.value)}\n containerClassName=\"mb-0\"\n className=\"text-xs\"\n onKeyDown={(e: React.KeyboardEvent) => {\n if (e.key === \"Enter\") handleSavePreset();\n if (e.key === \"Escape\") {\n setIsSavingPreset(false);\n setNewPresetName(\"\");\n }\n }}\n />\n <div className=\"flex gap-2\">\n <ITButton\n label=\"Guardar\"\n color=\"primary\"\n onClick={handleSavePreset}\n disabled={!newPresetName.trim()}\n size=\"small\"\n className=\"flex-1\"\n />\n <ITButton\n label=\"X\"\n variant=\"ghost\"\n onClick={() => {\n setIsSavingPreset(false);\n setNewPresetName(\"\");\n }}\n size=\"small\"\n />\n </div>\n </div>\n )}\n\n {!isSavingPreset && (\n <ITButton\n variant=\"outlined\"\n icon={<MdPalette size={14} />}\n label=\"Guardar actual\"\n onClick={() => setIsSavingPreset(true)}\n size=\"small\"\n />\n )}\n\n <ITButton\n variant=\"outlined\"\n color=\"danger\"\n icon={<MdRefresh size={14} />}\n label=\"Restaurar default\"\n onClick={resetTheme}\n size=\"small\"\n />\n </div>\n\n <ITDivider orientation=\"vertical\" />\n\n {/* RIGHT: Color editor */}\n <div className=\"flex-1 flex flex-col min-w-0\">\n <ITTabs\n variant=\"pill\"\n items={[\n {\n id: \"brand\",\n label: \"Marca\",\n content: (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-3 max-h-[480px] overflow-y-auto pr-2 mt-3\">\n {[\n \"primary\",\n \"secondary\",\n \"ternary\",\n \"danger\",\n \"success\",\n \"info\",\n \"alert\",\n \"warning\",\n ].map((key) => (\n <ColorRow key={key} colorKey={key} />\n ))}\n </div>\n ),\n },\n {\n id: \"layout\",\n label: \"Nav & Sidebar\",\n content: (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-3 max-h-[480px] overflow-y-auto pr-2 mt-3\">\n {[\n \"layout.sidebarBg\",\n \"layout.sidebarText\",\n \"layout.navbarBg\",\n \"layout.navbarText\",\n ].map((key) => (\n <ColorRow key={key} colorKey={key} />\n ))}\n </div>\n ),\n },\n {\n id: \"tables\",\n label: \"Tablas\",\n content: (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-3 max-h-[480px] overflow-y-auto pr-2 mt-3\">\n {[\n \"table.headerBg\",\n \"table.headerText\",\n \"table.rowBg\",\n \"table.rowText\",\n ].map((key) => (\n <ColorRow key={key} colorKey={key} />\n ))}\n </div>\n ),\n },\n ]}\n />\n\n <div className=\"flex items-center justify-end gap-3 mt-auto pt-4 border-t border-slate-100 dark:border-slate-800\">\n <ITText as=\"p\" className=\"text-[11px] text-slate-400 mr-auto\">\n Los cambios se guardan automáticamente\n </ITText>\n <ITButton\n label=\"Cerrar\"\n color=\"primary\"\n onClick={() => setIsOpen(false)}\n size=\"small\"\n />\n </div>\n </div>\n </div>\n </ITDialog>\n )}\n </ITThemeContext.Provider>\n );\n}\n","import React, { useState } from 'react';\nimport { ITTabsProps } from './tabs.props';\nimport { clsx } from 'clsx';\nimport ITText from \"@/components/text/text\";\n\nconst ITTabs: React.FC<ITTabsProps> = ({\n items,\n defaultActiveId,\n onChange,\n variant = 'line',\n className = '',\n containerClassName = ''\n}) => {\n const [activeId, setActiveId] = useState(defaultActiveId || items[0]?.id);\n\n const handleTabClick = (id: string, disabled?: boolean) => {\n if (disabled) return;\n setActiveId(id);\n if (onChange) onChange(id);\n };\n\n const activeContent = items.find(item => item.id === activeId)?.content;\n\n return (\n <div className={clsx(\"w-full\", containerClassName)}>\n {/* HEADER */}\n <div className={clsx(\n \"flex border-gray-200 mb-4\",\n variant === 'line' ? \"border-b\" : \"gap-2 p-1 bg-gray-100 rounded-lg w-fit\",\n className\n )}>\n {items.map((item) => {\n const isActive = item.id === activeId;\n \n return (\n <button\n key={item.id}\n onClick={() => handleTabClick(item.id, item.disabled)}\n disabled={item.disabled}\n className={clsx(\n \"flex items-center gap-2 px-4 py-2 text-sm font-medium transition-all duration-200 outline-none\",\n // LINE VARIANT\n variant === 'line' && [\n \"border-b-2 -mb-[2px]\",\n isActive \n ? \"border-primary-500 text-primary-600\" \n : \"border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300\",\n ],\n // PILL VARIANT\n variant === 'pill' && [\n \"rounded-md\",\n isActive \n ? \"bg-white text-primary-600 shadow-sm\" \n : \"text-gray-500 hover:text-gray-700\",\n ],\n item.disabled && \"opacity-50 cursor-not-allowed\"\n )}\n >\n {item.icon && <span className=\"w-4 h-4\">{item.icon}</span>}\n <ITText as=\"span\">{item.label}</ITText>\n </button>\n );\n })}\n </div>\n\n {/* CONTENT */}\n <div className=\"tab-content animate-fadeIn\">\n {activeContent}\n </div>\n </div>\n );\n};\n\nexport default ITTabs;\n","import clsx from \"clsx\";\nimport { ITSegmentedControlProps } from \"./segmented-control.props\";\nimport ITText from \"@/components/text/text\";\n\nconst sizeMap = {\n sm: { button: \"px-2.5 py-1.5 text-[11px]\", container: \"p-0.5\" },\n md: { button: \"px-3 py-2 text-xs\", container: \"p-1\" },\n};\n\nexport default function ITSegmentedControl({\n options,\n value,\n onChange,\n size = \"md\",\n className,\n disabled = false,\n}: ITSegmentedControlProps) {\n const { button, container } = sizeMap[size];\n\n return (\n <div\n className={clsx(\n \"inline-flex rounded-xl bg-slate-100 dark:bg-slate-800 border border-slate-200 dark:border-slate-700\",\n container,\n disabled && \"opacity-50 cursor-not-allowed\",\n className\n )}\n >\n {options.map((opt) => {\n const isActive = opt.value === value;\n return (\n <button\n key={opt.value}\n onClick={() => !disabled && onChange(opt.value)}\n disabled={disabled}\n className={clsx(\n button,\n \"rounded-lg font-semibold transition-all flex items-center gap-1.5\",\n isActive\n ? \"bg-white dark:bg-slate-700 text-slate-800 dark:text-white shadow-sm border border-slate-200 dark:border-slate-600\"\n : \"text-slate-500 dark:text-slate-400 hover:text-slate-700 dark:hover:text-slate-300 border border-transparent\",\n disabled && \"pointer-events-none\"\n )}\n >\n {opt.icon && <span>{opt.icon}</span>}\n <ITText as=\"span\">{opt.label}</ITText>\n </button>\n );\n })}\n </div>\n );\n}\n","import clsx from \"clsx\";\nimport { ITDividerProps } from \"./divider.props\";\n\nexport default function ITDivider({\n orientation = \"horizontal\",\n className,\n color = \"bg-slate-200 dark:bg-slate-700\",\n thickness = orientation === \"horizontal\" ? \"h-px\" : \"w-px\",\n}: ITDividerProps) {\n return (\n <div\n className={clsx(\n \"flex-shrink-0\",\n orientation === \"horizontal\" ? \"w-full\" : \"self-stretch\",\n thickness,\n color,\n className\n )}\n />\n );\n}\n","import { ITThemePalette } from \"@/components/theme-provider/themeProvider.props\";\n\n/**\n * Determina si un color hexadecimal es claro.\n */\nexport const isLightColor = (hex: string): boolean => {\n if (!hex || typeof hex !== \"string\") return false;\n const color = hex.replace(\"#\", \"\");\n let r = 0, g = 0, b = 0;\n if (color.length === 3) {\n r = parseInt(color[0] + color[0], 16);\n g = parseInt(color[1] + color[1], 16);\n b = parseInt(color[2] + color[2], 16);\n } else if (color.length === 6) {\n r = parseInt(color.substring(0, 2), 16);\n g = parseInt(color.substring(2, 4), 16);\n b = parseInt(color.substring(4, 6), 16);\n } else {\n return false;\n }\n const brightness = (r * 299 + g * 587 + b * 114) / 1000;\n return brightness > 140;\n};\n\n/**\n * Traduce un valor de color de CSS (hexadecimal o variable var(--...)) a hexadecimal absoluto.\n */\nexport const resolveCssColor = (\n colorStr: string,\n palette?: ITThemePalette,\n isDarkMode?: boolean\n): string => {\n if (!colorStr) return \"#ffffff\";\n const cleanColor = colorStr.trim();\n if (cleanColor.startsWith(\"#\")) return cleanColor;\n\n if (cleanColor.includes(\"var(\")) {\n const match = cleanColor.match(/var\\(([^,)]+)(?:,\\s*([^)]+))?\\)/);\n if (match) {\n const varName = match[1].trim();\n const fallback = match[2]?.trim();\n\n if (varName === \"--color-primary\" || varName.includes(\"primary-500\")) {\n return palette?.primary || \"#06b6d4\";\n }\n if (varName.includes(\"primary\")) {\n return palette?.primary || \"#06b6d4\";\n }\n if (varName === \"--color-secondary\" || varName.includes(\"secondary-500\")) {\n return palette?.secondary || \"#6b7280\";\n }\n if (varName.includes(\"secondary\")) {\n return palette?.secondary || \"#6b7280\";\n }\n if (varName.includes(\"ternary\")) {\n return palette?.ternary || \"#8b5cf6\";\n }\n if (varName.includes(\"danger\")) {\n return palette?.danger || \"#ef4444\";\n }\n if (varName.includes(\"success\")) {\n return palette?.success || \"#22c55e\";\n }\n if (varName.includes(\"info\")) {\n return palette?.info || \"#3b82f6\";\n }\n if (varName.includes(\"warning\")) {\n return palette?.warning || \"#eab308\";\n }\n if (varName.includes(\"alert\")) {\n return palette?.alert || \"#f97316\";\n }\n if (varName.includes(\"card-bg\")) {\n return isDarkMode ? \"#111827\" : \"#ffffff\";\n }\n if (varName.includes(\"modal-bg\")) {\n return isDarkMode ? \"#111827\" : \"#ffffff\";\n }\n\n if (fallback) {\n return resolveCssColor(fallback, palette, isDarkMode);\n }\n }\n }\n\n return \"#ffffff\";\n};\n\n/**\n * Obtiene la clase de color de texto óptima (blanca o gris oscuro) basado en el fondo.\n */\nexport const getContrastTextColor = (\n bgColor: string,\n palette?: ITThemePalette,\n isDarkMode?: boolean\n): \"text-white\" | \"text-slate-800\" => {\n const resolvedColor = resolveCssColor(bgColor, palette, isDarkMode);\n return isLightColor(resolvedColor) ? \"text-slate-800\" : \"text-white\";\n};\n","import clsx from \"clsx\";\nimport { ITDrawerProps } from \"./drawer.props\";\nimport { FaTimes } from \"react-icons/fa\";\nimport useClickOutside from \"@/hooks/useClickOutside\";\nimport { useRef } from \"react\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITDrawer({\n isOpen,\n onClose,\n position = \"right\",\n size = \"w-80\",\n title,\n children,\n className,\n style,\n}: ITDrawerProps) {\n const panelRef = useRef<HTMLDivElement>(null);\n useClickOutside(panelRef, onClose);\n\n return (\n <>\n {isOpen && (\n <div className=\"fixed inset-0 z-[100] flex\">\n <div className=\"absolute inset-0 bg-black/40 backdrop-blur-sm transition-opacity\" />\n <div\n ref={panelRef}\n className={clsx(\n \"relative z-10 h-full bg-white dark:bg-slate-900 shadow-2xl flex flex-col transition-transform duration-300\",\n position === \"right\" ? \"ml-auto\" : \"mr-auto\",\n size,\n className\n )}\n style={style}\n >\n {title && (\n <div className=\"flex items-center justify-between px-5 py-4 border-b border-slate-200 dark:border-slate-700\">\n <ITText as=\"h2\" className=\"text-lg font-bold text-slate-800 dark:text-white\">{title}</ITText>\n <button\n onClick={onClose}\n className=\"w-8 h-8 flex items-center justify-center rounded-lg hover:bg-slate-100 dark:hover:bg-slate-800 text-slate-400 hover:text-slate-600 transition-colors\"\n >\n <FaTimes size={14} />\n </button>\n </div>\n )}\n <div className=\"flex-1 overflow-y-auto p-5\">{children}</div>\n </div>\n </div>\n )}\n </>\n );\n}\n","import clsx from \"clsx\";\nimport { ITEmptyStateProps } from \"./empty-state.props\";\nimport { FaInbox } from \"react-icons/fa\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITEmptyState({\n icon = <FaInbox size={40} />,\n title,\n description,\n action,\n className,\n}: ITEmptyStateProps) {\n return (\n <div className={clsx(\"flex flex-col items-center justify-center py-16 px-6 text-center\", className)}>\n <div className=\"text-slate-300 dark:text-slate-600 mb-4\">{icon}</div>\n <ITText as=\"h3\" className=\"text-lg font-bold text-slate-700 dark:text-slate-200 mb-1\">{title}</ITText>\n {description && <ITText as=\"p\" className=\"text-sm text-slate-400 dark:text-slate-500 max-w-sm mb-4\">{description}</ITText>}\n {action && <div>{action}</div>}\n </div>\n );\n}\n","import clsx from \"clsx\";\nimport {\n ITFlexProps,\n FlexDirection,\n FlexAlign,\n FlexJustify,\n FlexWrap,\n} from \"./flex.props\";\n\nconst directionMap: Record<FlexDirection, string> = {\n row: \"flex-row\",\n column: \"flex-col\",\n \"row-reverse\": \"flex-row-reverse\",\n \"column-reverse\": \"flex-col-reverse\",\n};\n\nconst alignMap: Record<FlexAlign, string> = {\n start: \"items-start\",\n end: \"items-end\",\n center: \"items-center\",\n stretch: \"items-stretch\",\n baseline: \"items-baseline\",\n};\n\nconst justifyMap: Record<FlexJustify, string> = {\n start: \"justify-start\",\n end: \"justify-end\",\n center: \"justify-center\",\n between: \"justify-between\",\n around: \"justify-around\",\n evenly: \"justify-evenly\",\n};\n\nconst wrapMap: Record<FlexWrap, string> = {\n nowrap: \"flex-nowrap\",\n wrap: \"flex-wrap\",\n \"wrap-reverse\": \"flex-wrap-reverse\",\n};\n\nexport default function ITFlex({\n children,\n direction = \"row\",\n align,\n justify,\n wrap,\n gap = 0,\n grow,\n shrink,\n basis,\n className,\n style,\n as: Component = \"div\",\n onClick,\n}: ITFlexProps) {\n const resolvedStyle: React.CSSProperties = {\n gap: gap > 0 ? `${gap * 0.25}rem` : undefined,\n flexGrow: typeof grow === \"boolean\" ? (grow ? 1 : 0) : grow,\n flexShrink: typeof shrink === \"boolean\" ? (shrink ? 1 : 0) : shrink,\n flexBasis: typeof basis === \"number\" ? `${basis * 0.25}rem` : basis,\n ...style,\n };\n\n return (\n <Component\n className={clsx(\n \"flex\",\n directionMap[direction],\n align && alignMap[align],\n justify && justifyMap[justify],\n wrap && wrapMap[wrap],\n className\n )}\n style={resolvedStyle}\n onClick={onClick}\n >\n {children}\n </Component>\n );\n}\n","import clsx from \"clsx\";\nimport ITInput from \"../input/input\";\nimport ITSelect from \"../select/select\";\nimport { ITFormBuilderProps } from \"./formBuilder.props\";\nimport ITDatePicker from \"../date-picker/datePicker\";\nimport { useEffect, useState, useMemo } from \"react\";\nimport { ITFormBuilderProvider } from \"./formBuilder.context\";\nimport ITFieldRenderer from \"./fieldRenderer\";\nimport { formGrid, getColSpanClass } from \"@/utils/styles\";\n\nfunction buildDependentValues(\n dependsOn: string[] | undefined,\n values: Record<string, any>,\n) {\n if (!dependsOn || dependsOn.length === 0) return {};\n const deps: Record<string, any> = {};\n for (const key of dependsOn) {\n if (key in values) deps[key] = values[key];\n }\n return deps;\n}\n\nexport default function ITFormBuilder({\n fields,\n config,\n columns = 12,\n values,\n handleChange,\n handleBlur,\n touched,\n errors,\n setFieldValue = () => Promise.resolve(),\n setFieldTouched = () => Promise.resolve(),\n setFieldError = () => {},\n isSubmitting = false,\n}: ITFormBuilderProps) {\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n const providerValue = useMemo(() => ({\n config: config || [],\n values: values || {},\n errors: errors || {},\n touched: touched || {},\n handleChange,\n handleBlur,\n setFieldValue,\n setFieldTouched,\n setFieldError,\n initialValues: {},\n isSubmitting,\n isValidating: false,\n submitCount: 0,\n }), [config, values, errors, touched, handleChange, handleBlur, setFieldValue, setFieldTouched, setFieldError, isSubmitting]);\n\n if (config) {\n return (\n <ITFormBuilderProvider value={providerValue}>\n <div className={formGrid(columns)}>\n {config.map((fieldConfig) => (\n <ITFieldRenderer\n key={fieldConfig.name}\n config={fieldConfig}\n columns={columns}\n value={values[fieldConfig.name]}\n error={errors[fieldConfig.name]}\n touched={touched[fieldConfig.name]}\n dependentValues={buildDependentValues(fieldConfig.dependsOn, values)}\n />\n ))}\n </div>\n </ITFormBuilderProvider>\n );\n }\n\n return (\n <div className={formGrid(columns)}>\n {fields?.map(({\n name,\n label,\n type = \"text\",\n placeholder,\n required,\n column = 12,\n options,\n valueField,\n disabled = false,\n labelField,\n showHintLength,\n formatNumber = true,\n onChangeAction,\n ...props\n }) => (\n <div key={name} className={getColSpanClass(column, columns)}>\n {(() => {\n switch (type) {\n case \"text\":\n case \"number\":\n case \"password\":\n return (\n <ITInput\n type={type}\n name={name}\n label={label}\n placeholder={placeholder}\n disabled={disabled}\n value={values[name]}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n handleChange(e);\n if (onChangeAction && setFieldValue) {\n onChangeAction(e.target.value, setFieldValue);\n }\n }}\n onBlur={handleBlur}\n currencyFormat={props.currencyFormat}\n touched={touched[name]}\n error={errors[name]}\n required={required}\n iconRight={props.rightIcon}\n iconLeft={props.leftIcon}\n showHintLength={showHintLength}\n maxLength={props.maxLength}\n minLength={props.minLength}\n rows={props.rows}\n formatNumber={formatNumber}\n />\n );\n case \"select\":\n return (\n <ITSelect\n options={options || []}\n name={name}\n disabled={disabled}\n label={label}\n placeholder={placeholder}\n value={values[name]}\n valueField={valueField}\n labelField={labelField}\n onChange={(e: React.ChangeEvent<HTMLSelectElement>) => {\n handleChange(e);\n if (onChangeAction && setFieldValue) {\n onChangeAction(e.target.value, setFieldValue);\n }\n }}\n onBlur={handleBlur}\n touched={touched[name]}\n error={errors[name]}\n required={required}\n />\n );\n case \"date\":\n return (\n <ITDatePicker\n name={name}\n disabled={disabled}\n label={label}\n value={values[name]}\n onChange={(\n e:\n | React.ChangeEvent<HTMLInputElement>\n | { target: { name: string; value: Date } }\n ) => {\n handleChange(e);\n if (onChangeAction && setFieldValue) {\n onChangeAction(e.target.value, setFieldValue);\n }\n }}\n placeholder={placeholder}\n onBlur={handleBlur}\n touched={touched[name]}\n error={errors[name]}\n required={required}\n />\n );\n default:\n return null;\n }\n })()}\n </div>\n ))}\n </div>\n );\n}\n","import React, { createContext, useContext, useEffect, useState } from 'react';\nimport { FieldConfigV2, FieldContextV2 } from '@/types/field.types';\nimport * as Yup from 'yup';\n\ninterface ITFormBuilderContextType extends FieldContextV2 {\n config: FieldConfigV2[];\n isSubmitting: boolean;\n isValidating: boolean;\n submitCount: number;\n initialValues: Record<string, any>;\n errors: Record<string, string>;\n touched: Record<string, boolean>;\n handleBlur: (e: any) => void;\n handleChange: (e: any) => void;\n registerField: (name: string, config: FieldConfigV2) => void;\n unregisterField: (name: string) => void;\n getFieldConfig: (name: string) => FieldConfigV2 | undefined;\n}\n\nconst ITFormBuilderContext = createContext<ITFormBuilderContextType | undefined>(undefined);\n\nexport const ITFormBuilderProvider = ({\n children,\n value,\n}: {\n children: React.ReactNode;\n value: Omit<ITFormBuilderContextType, 'registerField' | 'unregisterField' | 'getFieldConfig'>;\n}) => {\n const [fieldRegistry, setFieldRegistry] = useState<Record<string, FieldConfigV2>>({});\n\n const registerField = React.useCallback((name: string, config: FieldConfigV2) => {\n setFieldRegistry((prev) => ({ ...prev, [name]: config }));\n }, []);\n\n const unregisterField = React.useCallback((name: string) => {\n setFieldRegistry((prev) => {\n const newRegistry = { ...prev };\n delete newRegistry[name];\n return newRegistry;\n });\n }, []);\n\n const getFieldConfig = React.useCallback((name: string) => {\n return fieldRegistry[name];\n }, [fieldRegistry]);\n\n const contextValue = React.useMemo(\n () => ({\n ...value,\n registerField,\n unregisterField,\n getFieldConfig,\n }),\n [value, registerField, unregisterField, getFieldConfig]\n );\n\n return (\n <ITFormBuilderContext.Provider value={contextValue}>\n {children}\n </ITFormBuilderContext.Provider>\n );\n};\n\nexport const useITFormBuilderContext = () => {\n const context = useContext(ITFormBuilderContext);\n if (!context) {\n throw new Error('useITFormBuilderContext must be used within an ITFormBuilderProvider');\n }\n return context;\n};\n","import React, { memo, useCallback, useEffect } from \"react\";\nimport clsx from \"clsx\";\nimport { FieldConfigV2 } from \"@/types/field.types\";\nimport { useITFormBuilderContext } from \"./formBuilder.context\";\nimport ITInput from \"../input/input\";\nimport ITSelect from \"../select/select\";\nimport ITDatePicker from \"../date-picker/datePicker\";\nimport ITTimePicker from \"../time-picker/timePicker\";\nimport { useFieldRules } from \"./useFormBuilder\";\nimport { getColSpanClass, getGridColsClass } from \"@/utils/styles\";\nimport ITText from \"@/components/text/text\";\n\n\n\ninterface ITFieldRendererProps {\n config: FieldConfigV2;\n columns?: number;\n value?: any;\n error?: string;\n touched?: boolean;\n dependentValues?: Record<string, any>;\n}\n\nconst ITFieldRenderer = ({\n config,\n columns = 12,\n value,\n error,\n touched,\n dependentValues = {},\n}: ITFieldRendererProps) => {\n const context = useITFormBuilderContext();\n const { isVisible, isRequired, isDisabled, dynamicProps } = useFieldRules(\n config,\n dependentValues,\n );\n\n useEffect(() => {\n context.registerField(config.name, config);\n return () => {\n context.unregisterField(config.name);\n };\n }, [config.name]);\n\n if (!isVisible) return null;\n\n const activeConfig = {\n ...config,\n ...dynamicProps,\n required: isRequired,\n disabled: isDisabled,\n };\n\n const {\n name,\n label,\n type,\n placeholder,\n options,\n valueField,\n labelField,\n formatNumber,\n showHintLength,\n leftIcon,\n rightIcon,\n } = activeConfig;\n\n const handleChangeWrapper = useCallback(\n async (val: any) => {\n const finalValue = val?.target ? val.target.value : val;\n await context.setFieldValue(name, finalValue);\n if (activeConfig.onChangeAction) {\n await activeConfig.onChangeAction(finalValue, context);\n }\n },\n [name, context]\n );\n\n const renderField = () => {\n switch (type) {\n case \"text\":\n case \"password\":\n case \"number\":\n case \"email\":\n return (\n <ITInput\n type={type === \"email\" ? \"text\" : type}\n name={name}\n label={label || \"\"}\n placeholder={placeholder}\n disabled={isDisabled as boolean}\n value={value !== undefined ? value : activeConfig.defaultValue || \"\"}\n onChange={handleChangeWrapper}\n onBlur={context.handleBlur}\n currencyFormat={activeConfig.currencyFormat}\n touched={touched}\n error={error}\n required={isRequired as boolean}\n iconRight={rightIcon}\n iconLeft={leftIcon}\n showHintLength={showHintLength}\n maxLength={activeConfig.maxLength}\n minLength={activeConfig.minLength}\n rows={activeConfig.rows}\n formatNumber={formatNumber}\n />\n );\n\n case \"select\":\n return (\n <ITSelect\n options={(Array.isArray(options) ? options : []) as any}\n name={name}\n disabled={isDisabled as boolean}\n label={label || \"\"}\n placeholder={placeholder}\n value={value !== undefined ? value : activeConfig.defaultValue || \"\"}\n valueField={valueField}\n labelField={labelField}\n onChange={handleChangeWrapper}\n onBlur={context.handleBlur}\n touched={touched}\n error={error}\n required={isRequired as boolean}\n />\n );\n\n case \"date\":\n return (\n <ITDatePicker\n name={name}\n disabled={isDisabled as boolean}\n label={label || \"\"}\n value={value}\n onChange={handleChangeWrapper}\n placeholder={placeholder}\n onBlur={context.handleBlur}\n touched={touched}\n error={error}\n required={isRequired as boolean}\n />\n );\n\n case \"time\":\n return (\n <ITTimePicker\n name={name}\n disabled={isDisabled as boolean}\n label={label || \"\"}\n value={value}\n onChange={handleChangeWrapper}\n placeholder={placeholder}\n onBlur={context.handleBlur}\n touched={touched}\n error={error}\n required={isRequired as boolean}\n />\n );\n\n case \"custom\":\n if (activeConfig.component) {\n const CustomComponent = activeConfig.component;\n return (\n <CustomComponent\n {...activeConfig}\n value={value}\n onChange={handleChangeWrapper}\n onBlur={context.handleBlur}\n error={error}\n touched={touched}\n context={context}\n />\n );\n }\n return null;\n\n case \"section\":\n return (\n <div className={clsx(\"w-full col-span-full\", activeConfig.className)}>\n {label && (\n <ITText as=\"h4\" className=\"text-lg font-semibold text-gray-800 mb-4\">\n {label}\n </ITText>\n )}\n <div className={clsx(\"grid gap-y-6 gap-x-5\", getGridColsClass(columns as any))}>\n {activeConfig.fields?.map((childConfig) => (\n <ITFieldRenderer\n key={childConfig.name}\n config={childConfig}\n columns={columns}\n />\n ))}\n </div>\n </div>\n );\n\n case \"array\":\n return (\n <div className=\"p-4 border-2 border-dashed border-gray-200 rounded-xl\">\n <ITText as=\"p\" className=\"text-sm text-gray-500 text-center\">\n Array Field: {label}\n </ITText>\n </div>\n );\n\n default:\n return null;\n }\n };\n\n return (\n <div className={clsx(getColSpanClass(activeConfig.column, columns), activeConfig.className)}>\n {renderField()}\n </div>\n );\n};\n\nexport default memo(ITFieldRenderer);","import clsx from \"clsx\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { FaClock } from \"react-icons/fa\";\nimport ITInput from \"../input/input\";\nimport ITButton from \"../button/button\";\nimport useClickOutside from \"@/hooks/useClickOutside\";\nimport { theme } from \"@/theme/theme\";\nimport { ITTimePickerProps } from \"./timePicker.props\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITTimePicker({\n name,\n value,\n label,\n placeholder = \"HH:MM\",\n onChange,\n onBlur,\n required,\n touched,\n error,\n disabled,\n className,\n size = \"medium\",\n variant = \"primary\",\n color = \"primary\",\n}: ITTimePickerProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [inputValue, setInputValue] = useState(value || \"\");\n const [isValidTime, setIsValidTime] = useState(true);\n const [dropdownPosition, setDropdownPosition] = useState({ top: 0, left: 0 });\n\n const wrapperRef = useRef<HTMLDivElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const hoursRef = useRef<HTMLDivElement>(null);\n const minutesRef = useRef<HTMLDivElement>(null);\n\n useClickOutside(dropdownRef, () => {\n // Only close if it's currently open to avoid setting state unnecessarily\n if (isOpen) {\n setIsOpen(false);\n }\n });\n\n // Resolve theme color for the dropdown highlight\n const isThemeColor = color in theme.colors;\n const highlightColor = isThemeColor\n ? theme.colors[color as keyof typeof theme.colors][50]\n : \"#f3f4f6\"; // fallback to gray-100\n\n const activeColor = isThemeColor\n ? theme.colors[color as keyof typeof theme.colors][100]\n : \"#e5e7eb\"; // fallback to gray-200\n\n useEffect(() => {\n setInputValue(value || \"\");\n }, [value]);\n\n const calculateDropdownPosition = () => {\n if (wrapperRef.current) {\n const inputRect = wrapperRef.current.getBoundingClientRect();\n const dropdownHeight = 280; // approximate height of the time picker dropdown\n const viewportHeight = window.innerHeight;\n\n let top = inputRect.bottom + 4;\n if (inputRect.bottom + dropdownHeight > viewportHeight) {\n top = inputRect.top - dropdownHeight - 4;\n }\n\n setDropdownPosition({\n top,\n left: inputRect.left,\n });\n }\n };\n\n const validateTime = (timeString: string) => {\n const regex = /^([01]\\d|2[0-3]):([0-5]\\d)$/;\n return regex.test(timeString);\n };\n\n const currentHour = validateTime(inputValue) ? inputValue.split(\":\")[0] : null;\n const currentMinute = validateTime(inputValue) ? inputValue.split(\":\")[1] : null;\n\n // Auto-scroll to selected items when opened\n useEffect(() => {\n if (isOpen) {\n setTimeout(() => {\n if (hoursRef.current && currentHour) {\n const selectedHourEl = hoursRef.current.querySelector(\n `[data-value=\"${currentHour}\"]`\n ) as HTMLElement;\n if (selectedHourEl) {\n hoursRef.current.scrollTop =\n selectedHourEl.offsetTop -\n hoursRef.current.clientHeight / 2 +\n selectedHourEl.clientHeight / 2;\n }\n }\n if (minutesRef.current && currentMinute) {\n const selectedMinuteEl = minutesRef.current.querySelector(\n `[data-value=\"${currentMinute}\"]`\n ) as HTMLElement;\n if (selectedMinuteEl) {\n minutesRef.current.scrollTop =\n selectedMinuteEl.offsetTop -\n minutesRef.current.clientHeight / 2 +\n selectedMinuteEl.clientHeight / 2;\n }\n }\n }, 50);\n }\n }, [isOpen, currentHour, currentMinute]);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n let val = e.target.value.replace(/\\D/g, \"\");\n\n if (val.length > 4) val = val.slice(0, 4);\n\n if (val.length >= 3) {\n val = `${val.slice(0, 2)}:${val.slice(2)}`;\n }\n\n setInputValue(val);\n\n if (validateTime(val)) {\n setIsValidTime(true);\n onChange({ target: { name, value: val } });\n } else {\n setIsValidTime(false);\n }\n };\n\n const handleBlurInput = () => {\n if (!validateTime(inputValue)) {\n setIsValidTime(false);\n onBlur?.({ target: { name, value } });\n return;\n }\n\n setIsValidTime(true);\n onBlur?.({ target: { name, value: inputValue } });\n };\n\n const handleHourSelect = (h: string) => {\n const min = currentMinute || \"00\";\n const newVal = `${h}:${min}`;\n setInputValue(newVal);\n onChange({ target: { name, value: newVal } });\n setIsValidTime(true);\n };\n\n const handleMinuteSelect = (m: string) => {\n const hr = currentHour || \"00\";\n const newVal = `${hr}:${m}`;\n setInputValue(newVal);\n onChange({ target: { name, value: newVal } });\n setIsValidTime(true);\n };\n\n const handleConfirm = () => {\n setIsOpen(false);\n };\n\n const hoursList = Array.from({ length: 24 }, (_, i) =>\n i.toString().padStart(2, \"0\")\n );\n const minutesList = Array.from({ length: 60 }, (_, i) =>\n i.toString().padStart(2, \"0\")\n );\n\n return (\n <div ref={wrapperRef} className={clsx(\"relative w-full\", className)}>\n <ITInput\n name={name}\n label={label}\n placeholder={placeholder}\n type=\"text\"\n value={inputValue}\n onChange={handleInputChange}\n onBlur={handleBlurInput}\n maxLength={5}\n required={required}\n disabled={disabled}\n variant={variant}\n size={size}\n touched={touched}\n error={!isValidTime ? \"Hora inválida\" : typeof error === 'string' ? error : undefined}\n iconRight={\n <FaClock\n onClick={() => {\n if (!disabled) {\n calculateDropdownPosition();\n setIsOpen(!isOpen);\n }\n }}\n className={clsx(\n \"cursor-pointer transition-colors\",\n disabled\n ? \"text-slate-400 cursor-not-allowed\"\n : \"text-slate-900 hover:text-slate-600\"\n )}\n />\n }\n />\n\n {isOpen && !disabled && (\n <div \n ref={dropdownRef}\n className=\"fixed z-[9999] bg-white border border-gray-100 shadow-xl rounded-xl w-64 overflow-hidden flex flex-col animate-in fade-in zoom-in-95 duration-200 origin-top it-timepicker-dropdown\"\n style={{\n top: `${dropdownPosition.top}px`,\n left: `${dropdownPosition.left}px`,\n }}\n >\n <div className=\"flex bg-gray-50 border-b border-gray-100 text-xs font-semibold text-gray-500 uppercase tracking-wider\">\n <ITText as=\"div\" className=\"flex-1 text-center py-2 border-r border-gray-100\">\n Horas\n </ITText>\n <ITText as=\"div\" className=\"flex-1 text-center py-2\">Minutos</ITText>\n </div>\n\n <div className=\"flex h-56 relative bg-white\">\n {/* Hours Column */}\n <div\n ref={hoursRef}\n className=\"flex-1 overflow-y-auto no-scrollbar border-r border-gray-50 scroll-smooth relative\"\n >\n <div className=\"py-2\">\n {hoursList.map((h) => {\n const isSelected = currentHour === h;\n return (\n <div\n key={h}\n data-value={h}\n className={clsx(\n \"text-center py-2 cursor-pointer transition-all duration-200 text-sm font-medium mx-2 rounded-lg my-1\",\n isSelected\n ? \"text-slate-900 shadow-sm\"\n : \"text-slate-600 hover:text-slate-900\"\n )}\n style={{\n backgroundColor: isSelected ? activeColor : undefined,\n }}\n onMouseEnter={(e) => {\n if (!isSelected)\n e.currentTarget.style.backgroundColor = highlightColor;\n }}\n onMouseLeave={(e) => {\n if (!isSelected)\n e.currentTarget.style.backgroundColor = \"transparent\";\n }}\n onClick={() => handleHourSelect(h)}\n >\n {h}\n </div>\n );\n })}\n </div>\n </div>\n\n {/* Minutes Column */}\n <div\n ref={minutesRef}\n className=\"flex-1 overflow-y-auto no-scrollbar scroll-smooth relative\"\n >\n <div className=\"py-2\">\n {minutesList.map((m) => {\n const isSelected = currentMinute === m;\n return (\n <div\n key={m}\n data-value={m}\n className={clsx(\n \"text-center py-2 cursor-pointer transition-all duration-200 text-sm font-medium mx-2 rounded-lg my-1\",\n isSelected\n ? \"text-slate-900 shadow-sm\"\n : \"text-slate-600 hover:text-slate-900\"\n )}\n style={{\n backgroundColor: isSelected ? activeColor : undefined,\n }}\n onMouseEnter={(e) => {\n if (!isSelected)\n e.currentTarget.style.backgroundColor = highlightColor;\n }}\n onMouseLeave={(e) => {\n if (!isSelected)\n e.currentTarget.style.backgroundColor = \"transparent\";\n }}\n onClick={() => handleMinuteSelect(m)}\n >\n {m}\n </div>\n );\n })}\n </div>\n </div>\n\n {/* Center Selection Overlay */}\n <div className=\"absolute top-1/2 left-0 right-0 h-10 -mt-5 bg-black/5 pointer-events-none border-y border-black/10 z-10\" />\n </div>\n\n <div className=\"p-3 bg-gray-50 border-t border-gray-100 flex justify-end\">\n <ITButton\n variant=\"solid\"\n color={color as any}\n size=\"small\"\n onClick={handleConfirm}\n >\n <ITText as=\"span\">Aceptar</ITText>\n </ITButton>\n </div>\n </div>\n )}\n </div>\n );\n}","import { useMemo } from 'react';\nimport { useITFormBuilderContext } from './formBuilder.context';\nimport type { FieldConfigV2 } from '@/types/field.types';\n\nexport const useFormBuilder = () => {\n const context = useITFormBuilderContext();\n const { values, errors, touched } = context;\n\n const progress = useMemo(() => {\n const requiredFields = Object.keys(context.getFieldConfig).filter((name) => {\n const config = context.getFieldConfig(name);\n if (!config) return false;\n if (typeof config.required === 'function') {\n return config.required(values);\n }\n return config.required;\n });\n\n if (requiredFields.length === 0) return 100;\n\n let filledFields = 0;\n requiredFields.forEach((fieldName) => {\n const val = values[fieldName];\n const hasValue = val !== undefined && val !== null && val !== '';\n const hasError = !!errors[fieldName];\n if (hasValue && !hasError) filledFields++;\n });\n\n return Math.round((filledFields / requiredFields.length) * 100);\n }, [values, errors, context]);\n\n return {\n ...context,\n progress,\n isDirty: Object.keys(touched).length > 0,\n };\n};\n\n/**\n * Hook to evaluate dynamic rules using only the dependent values passed as props.\n * This avoids subscribing to the entire `values` context, enabling true React.memo isolation.\n *\n * `dependentValues` should be a filtered object containing only the fields this\n * field depends on (derived from `dependsOn` in FieldConfigV2).\n */\nexport const useFieldRules = (\n config: FieldConfigV2,\n dependentValues: Record<string, any>,\n) => {\n const { getFieldConfig } = useITFormBuilderContext();\n const fieldConfig = getFieldConfig(config.name) || config;\n\n const isVisible = useMemo(() => {\n if (!fieldConfig.renderWhen) return true;\n return fieldConfig.renderWhen(dependentValues);\n }, [fieldConfig.renderWhen, dependentValues]);\n\n const dynamicProps = useMemo(() => {\n if (!fieldConfig.dynamicProps) return {};\n return fieldConfig.dynamicProps(dependentValues);\n }, [fieldConfig.dynamicProps, dependentValues]);\n\n const isRequired = useMemo(() => {\n if (typeof dynamicProps.required !== 'undefined') return dynamicProps.required;\n if (typeof fieldConfig.required === 'function') {\n return fieldConfig.required(dependentValues);\n }\n return fieldConfig.required || false;\n }, [fieldConfig.required, dynamicProps.required, dependentValues]);\n\n const isDisabled = useMemo(() => {\n if (typeof dynamicProps.disabled !== 'undefined') return dynamicProps.disabled;\n if (typeof fieldConfig.disabled === 'function') {\n return fieldConfig.disabled(dependentValues);\n }\n return fieldConfig.disabled || false;\n }, [fieldConfig.disabled, dynamicProps.disabled, dependentValues]);\n\n return { isVisible, dynamicProps, isRequired, isDisabled };\n};\n","import clsx from \"clsx\";\nimport { ITGridProps } from \"./grid.props\";\n\nfunction colSpanClass(span: number | undefined, cols: number) {\n if (span === undefined) return undefined;\n const clamped = Math.min(Math.max(Math.round(span), 1), cols);\n return `col-span-${clamped}`;\n}\n\nfunction breakpointSpan(span: number | undefined, bp: string, cols: number) {\n if (span === undefined) return undefined;\n const clamped = Math.min(Math.max(Math.round(span), 1), cols);\n return `${bp}:col-span-${clamped}`;\n}\n\nexport default function ITGrid({\n children,\n container,\n item,\n spacing = 0,\n columns = 12,\n xs,\n sm,\n md,\n lg,\n xl,\n className,\n style,\n as: Component = \"div\",\n}: ITGridProps) {\n if (container) {\n return (\n <Component\n className={clsx(\"grid\", className)}\n style={{\n gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))`,\n gap: spacing > 0 ? `${spacing * 0.25}rem` : undefined,\n ...style,\n }}\n >\n {children}\n </Component>\n );\n }\n\n if (item) {\n return (\n <Component\n className={clsx(\n colSpanClass(xs ?? sm, columns),\n sm !== undefined && breakpointSpan(sm, \"sm\", columns),\n md !== undefined && breakpointSpan(md, \"md\", columns),\n lg !== undefined && breakpointSpan(lg, \"lg\", columns),\n xl !== undefined && breakpointSpan(xl, \"xl\", columns),\n className\n )}\n style={style}\n >\n {children}\n </Component>\n );\n }\n\n return (\n <Component className={className} style={style}>\n {children}\n </Component>\n );\n}\n","import { useState } from \"react\";\nimport { ITImageProps } from \"./image.props\";\n\nconst ITImage = ({\n src,\n alt,\n className = \"\",\n fallback = \"\",\n}: ITImageProps) => {\n const [imageError, setImageError] = useState(false);\n\n const handleImageError = () => {\n setImageError(true);\n };\n\n return (\n <div\n className={`${className} flex items-center justify-center bg-transparent`}\n >\n {imageError ? (\n <img\n src={fallback}\n alt=\"Fallback\"\n className=\"w-full h-full object-cover\"\n />\n ) : (\n <img\n src={src}\n alt={alt}\n onError={handleImageError}\n className=\"w-full h-full object-cover\"\n />\n )}\n </div>\n );\n};\n\nexport default ITImage;\n","import useClickOutside from \"@/hooks/useClickOutside\";\nimport { useRef, useState } from \"react\";\nimport { FaChevronDown, FaChevronRight, FaUserCircle } from \"react-icons/fa\";\nimport { ITNavbarProps, ITNavigationItem } from \"./navbar.props\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITNavbar({\n logo,\n logoText,\n navigationItems = [],\n userMenu,\n children,\n // Legacy props for backward compatibility\n navItems,\n showSidebar = false,\n showSidebarOnMobile = false,\n sidebarItems,\n}: ITNavbarProps) {\n const [isUserMenuOpen, setIsUserMenuOpen] = useState(false);\n const [expandedItems, setExpandedItems] = useState<Set<string>>(new Set());\n\n const userMenuRef = useRef<HTMLDivElement>(null);\n\n useClickOutside(userMenuRef, () => setIsUserMenuOpen(false));\n\n const toggleUserMenu = () => {\n setIsUserMenuOpen(!isUserMenuOpen);\n };\n\n const toggleExpanded = (itemId: string) => {\n const newExpanded = new Set(expandedItems);\n if (newExpanded.has(itemId)) {\n newExpanded.delete(itemId);\n } else {\n newExpanded.add(itemId);\n }\n setExpandedItems(newExpanded);\n };\n\n const handleItemClick = (item: ITNavigationItem) => {\n if (item.subitems && item.subitems.length > 0) {\n toggleExpanded(item.id);\n } else if (item.action) {\n item.action();\n }\n };\n\n // Use new navigation items if provided, otherwise fall back to legacy\n const shouldUseLegacy = !navigationItems.length && (navItems || sidebarItems);\n\n if (shouldUseLegacy) {\n // Legacy behavior - original navbar implementation\n return (\n <div className=\"flex flex-col h-screen\">\n <nav className=\"bg-white border-b border-gray-200\">\n <div className=\"flex items-center justify-between mx-auto p-4\">\n <div className=\"flex items-center space-x-3 rtl:space-x-reverse\">\n {logo && <div className=\"h-8\">{logo}</div>}\n {logoText && (\n <ITText as=\"span\" className=\"self-center text-2xl font-semibold whitespace-nowrap text-gray-900\">\n {logoText}\n </ITText>\n )}\n </div>\n\n <div className=\"flex items-center justify-end w-full md:w-auto md:order-2\">\n <div className=\"flex items-center space-x-4 md:order-2\">\n <ul className=\"hidden md:flex space-x-4\">{navItems}</ul>\n\n {userMenu && (\n <div className=\"relative\">\n <button\n type=\"button\"\n className=\"flex text-sm bg-gray-200 rounded-full md:me-0 focus:ring-4 focus:ring-gray-300\"\n onClick={toggleUserMenu}\n >\n {userMenu.userImage ? (\n <img\n className=\"w-8 h-8 rounded-full\"\n src={userMenu.userImage}\n alt=\"user photo\"\n />\n ) : (\n <FaUserCircle className=\"w-8 h-8 text-gray-500\" />\n )}\n </button>\n\n {isUserMenuOpen && (\n <div\n ref={userMenuRef}\n className=\"z-50 absolute right-0 mt-2 text-base list-none bg-white divide-y divide-gray-100 rounded-lg shadow-sm\"\n >\n <div className=\"px-4 py-3\">\n <ITText as=\"span\" className=\"block text-sm text-gray-900\">\n {userMenu.userName}\n </ITText>\n <ITText as=\"span\" className=\"block text-sm text-gray-500 truncate\">\n {userMenu.userEmail}\n </ITText>\n </div>\n <ul className=\"py-2\">\n {userMenu.menuItems.map((item, index) => (\n <li key={index}>\n <button\n onClick={() => {\n item.onClick();\n setIsUserMenuOpen(false);\n }}\n className=\"block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 w-full text-left\"\n >\n <ITText as=\"span\">{item.label}</ITText>\n </button>\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n </div>\n </nav>\n\n <div className=\"flex-1 flex overflow-hidden relative\">\n {(showSidebar || showSidebarOnMobile) && (\n <aside className=\"fixed inset-y-0 left-0 w-64 bg-gray-50 transform transition-transform duration-300 ease-in-out z-50 shadow-lg md:static md:transform-none md:shadow-none md:border-r md:border-gray-200\">\n <div className=\"h-full overflow-y-auto py-4 px-3\">\n <ul className=\"space-y-2 font-medium\">{sidebarItems}</ul>\n </div>\n </aside>\n )}\n <main className=\"flex-1 bg-gray-100 overflow-y-auto\">\n {children}\n </main>\n </div>\n </div>\n );\n }\n\n // New sidebar design\n return (\n <div className=\"flex h-screen font-sans\" style={{ backgroundColor: \"var(--layout-bg, #f8fafc)\" }}>\n {/* Sidebar */}\n <aside className=\"w-72 shadow-xl flex flex-col transition-all duration-300 ease-in-out\" style={{ backgroundColor: \"var(--sidebar-bg, #0f172a)\", borderRight: \"1px solid var(--sidebar-border, #1e293b)\" }}>\n {/* Logo Section */}\n <div className=\"p-6 flex items-center gap-3\" style={{ borderBottom: \"1px solid var(--sidebar-border, #1e293b)\" }}>\n {logo && <div className=\"h-8 w-auto object-contain transition-transform hover:scale-105\">{logo}</div>}\n {logoText && (\n <ITText as=\"span\" className=\"text-lg font-bold tracking-wide\" style={{ color: \"var(--sidebar-active-color, #ffffff)\" }}>\n {logoText}\n </ITText>\n )}\n </div>\n\n {/* Navigation Items */}\n <nav className=\"flex-1 px-4 py-6 overflow-y-auto custom-scrollbar\">\n <ul className=\"flex flex-col gap-1.5\">\n {navigationItems.map((item) => (\n <li key={item.id}>\n <div\n className={`group flex items-center justify-between px-4 py-3 rounded-xl cursor-pointer transition-all duration-200 border-l-4 ${\n item.isActive \n ? 'shadow-sm' \n : 'hover:shadow-sm'\n }`}\n onClick={() => handleItemClick(item)}\n style={{\n backgroundColor: item.isActive ? \"var(--sidebar-active-bg, rgba(255,255,255,0.1))\" : \"transparent\",\n borderColor: item.isActive ? \"var(--sidebar-active-icon, #3b82f6)\" : \"transparent\",\n color: item.isActive ? \"var(--sidebar-active-color, #ffffff)\" : \"var(--sidebar-label-color, #94a3b8)\"\n }}\n onMouseEnter={(e) => {\n if (!item.isActive) {\n e.currentTarget.style.backgroundColor = \"var(--sidebar-hover-bg, rgba(255,255,255,0.05))\";\n e.currentTarget.style.color = \"var(--sidebar-active-color, #ffffff)\";\n }\n }}\n onMouseLeave={(e) => {\n if (!item.isActive) {\n e.currentTarget.style.backgroundColor = \"transparent\";\n e.currentTarget.style.color = \"var(--sidebar-label-color, #94a3b8)\";\n }\n }}\n >\n <div className=\"flex items-center gap-3\">\n {/* Icon */}\n {item.icon && (\n <div className=\"text-xl transition-colors\" style={{\n color: item.isActive ? \"var(--sidebar-active-icon, #3b82f6)\" : \"var(--sidebar-icon-color, #64748b)\"\n }}>\n {item.icon}\n </div>\n )}\n \n {/* Label */}\n <ITText as=\"span\" className={`font-medium text-sm ${item.isActive ? 'font-semibold' : ''}`}>{item.label}</ITText>\n </div>\n\n {/* Chevron for expandable items */}\n {item.subitems && item.subitems.length > 0 && (\n <div className=\"transition-transform\" style={{ color: \"var(--sidebar-icon-color, #64748b)\" }}>\n {expandedItems.has(item.id) ? (\n <FaChevronDown className=\"w-3 h-3\" />\n ) : (\n <FaChevronRight className=\"w-3 h-3\" />\n )}\n </div>\n )}\n </div>\n\n {/* Submenu */}\n {item.subitems && \n item.subitems.length > 0 && \n expandedItems.has(item.id) && (\n <ul className=\"mt-1 ml-4 pl-4 space-y-1\" style={{ borderLeft: \"1px solid var(--sidebar-border, #1e293b)\" }}>\n {item.subitems.map((subitem) => (\n <li key={subitem.id}>\n <button\n onClick={subitem.action}\n className=\"block w-full text-left px-4 py-2.5 rounded-lg text-sm transition-all duration-200\"\n style={{\n color: subitem.isActive ? \"var(--sidebar-active-color, #ffffff)\" : \"var(--sidebar-label-color, #94a3b8)\",\n backgroundColor: subitem.isActive ? \"var(--sidebar-active-bg, rgba(255,255,255,0.1))\" : \"transparent\"\n }}\n onMouseEnter={(e) => {\n if (!subitem.isActive) {\n e.currentTarget.style.backgroundColor = \"var(--sidebar-hover-bg, rgba(255,255,255,0.05))\";\n }\n }}\n onMouseLeave={(e) => {\n if (!subitem.isActive) {\n e.currentTarget.style.backgroundColor = \"transparent\";\n }\n }}\n >\n <ITText as=\"span\">{subitem.label}</ITText>\n </button>\n </li>\n ))}\n </ul>\n )}\n </li>\n ))}\n </ul>\n </nav>\n\n {/* User Menu */}\n {userMenu && (\n <div className=\"p-4\" style={{ borderTop: \"1px solid var(--sidebar-border, #1e293b)\" }}>\n <div className=\"relative\">\n <button\n type=\"button\"\n className=\"flex items-center gap-3 w-full p-3 rounded-xl transition-colors duration-200 group\"\n style={{ color: \"var(--sidebar-label-color, #94a3b8)\" }}\n onMouseEnter={(e) => { e.currentTarget.style.backgroundColor = \"var(--sidebar-hover-bg, rgba(255,255,255,0.05))\"; e.currentTarget.style.color = \"var(--sidebar-active-color, #ffffff)\"; }}\n onMouseLeave={(e) => { e.currentTarget.style.backgroundColor = \"transparent\"; e.currentTarget.style.color = \"var(--sidebar-label-color, #94a3b8)\"; }}\n onClick={toggleUserMenu}\n >\n {userMenu.userImage ? (\n <img\n className=\"w-10 h-10 rounded-full border-2 transition-colors\"\n src={userMenu.userImage}\n alt=\"user photo\"\n style={{ borderColor: \"var(--sidebar-border, #1e293b)\" }}\n />\n ) : (\n <div className=\"w-10 h-10 rounded-full flex items-center justify-center transition-colors\" style={{ backgroundColor: \"var(--sidebar-hover-bg, rgba(255,255,255,0.1))\", color: \"var(--sidebar-icon-color, #64748b)\" }}>\n <FaUserCircle className=\"w-6 h-6\" />\n </div>\n )}\n <div className=\"flex-1 text-left overflow-hidden\">\n <ITText as=\"div\" className=\"font-medium text-sm truncate\" style={{ color: \"var(--sidebar-active-color, #ffffff)\" }}>\n {userMenu.userName}\n </ITText>\n <ITText as=\"div\" className=\"text-xs truncate\" style={{ color: \"var(--sidebar-label-color, #94a3b8)\" }}>\n {userMenu.userEmail}\n </ITText>\n </div>\n <FaChevronRight className=\"w-3 h-3\" style={{ color: \"var(--sidebar-icon-color, #64748b)\" }} />\n </button>\n\n {isUserMenuOpen && (\n <div\n ref={userMenuRef}\n className=\"absolute bottom-full left-0 mb-3 w-full rounded-xl shadow-2xl overflow-hidden transform transition-all duration-200 origin-bottom\"\n style={{ backgroundColor: \"var(--topbar-user-dropdown-bg, #ffffff)\", border: \"1px solid var(--topbar-user-dropdown-border, #e2e8f0)\" }}\n >\n <div className=\"px-4 py-3\" style={{ backgroundColor: \"var(--topbar-user-bg, #f8fafc)\", borderBottom: \"1px solid var(--topbar-user-dropdown-border, #e2e8f0)\" }}>\n <ITText as=\"span\" className=\"block text-sm font-semibold\" style={{ color: \"var(--topbar-user-text, #0f172a)\" }}>\n {userMenu.userName}\n </ITText>\n <ITText as=\"span\" className=\"block text-xs truncate\" style={{ color: \"var(--topbar-user-subtitle, #64748b)\" }}>\n {userMenu.userEmail}\n </ITText>\n </div>\n <ul className=\"py-1\">\n {userMenu.menuItems.map((item, index) => (\n <li key={index}>\n <button\n onClick={() => {\n item.onClick();\n setIsUserMenuOpen(false);\n }}\n className=\"flex items-center w-full px-4 py-2.5 text-sm transition-colors\"\n style={{ color: \"var(--topbar-user-text, #334155)\" }}\n onMouseEnter={(e) => { e.currentTarget.style.backgroundColor = \"var(--topbar-user-item-hover, #f8fafc)\"; }}\n onMouseLeave={(e) => { e.currentTarget.style.backgroundColor = \"transparent\"; }}\n >\n <ITText as=\"span\">{item.label}</ITText>\n </button>\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n </div>\n )}\n </aside>\n\n {/* Main Content */}\n <main className=\"flex-1 overflow-y-auto relative\" style={{ backgroundColor: \"var(--layout-bg, #f8fafc)\" }}>\n {children}\n </main>\n </div>\n );\n}\n","import clsx from \"clsx\";\nimport { ITPageProps } from \"./page.props\";\nimport ITPageHeader from \"../page-header/page-header\";\nimport ITSkeleton from \"../skeleton/skeleton\";\nimport ITEmptyState from \"../empty-state/empty-state\";\nimport ITButton from \"../button/button\";\nimport ITStack from \"../stack/stack\";\n\nexport default function ITPage({\n title,\n description,\n breadcrumbs,\n actions,\n backAction,\n loading = false,\n error = null,\n onRetry,\n empty = false,\n emptyTitle,\n emptyDescription,\n emptyAction,\n className,\n children,\n}: ITPageProps) {\n if (loading) {\n return (\n <div className={className}>\n {title && (\n <ITPageHeader title={title} />\n )}\n <div className=\"mt-6\">\n <ITStack spacing={4}>\n <ITSkeleton variant=\"rectangular\" height={40} width=\"40%\" />\n <ITSkeleton variant=\"rectangular\" height={200} />\n <ITSkeleton variant=\"rectangular\" height={200} />\n </ITStack>\n </div>\n </div>\n );\n }\n\n if (error) {\n return (\n <div className={className}>\n {title && (\n <ITPageHeader title={title} />\n )}\n <ITEmptyState\n title=\"Error\"\n description={error}\n action={\n onRetry ? (\n <ITButton label=\"Reintentar\" onClick={onRetry} size=\"small\" />\n ) : undefined\n }\n />\n </div>\n );\n }\n\n if (empty) {\n return (\n <div className={className}>\n {title && (\n <ITPageHeader title={title} />\n )}\n <ITEmptyState\n title={emptyTitle || \"Sin datos\"}\n description={emptyDescription || \"No hay información para mostrar\"}\n action={emptyAction}\n />\n </div>\n );\n }\n\n return (\n <div className={clsx(\"space-y-6\", className)}>\n {(title || breadcrumbs || actions || backAction) && (\n <ITPageHeader\n title={title || \"\"}\n description={description}\n breadcrumbs={breadcrumbs}\n actions={actions}\n backAction={backAction}\n />\n )}\n {children}\n </div>\n );\n}\n","import clsx from \"clsx\";\nimport { FaChevronLeft } from \"react-icons/fa\";\nimport { ITPageHeaderProps } from \"./page-header.props\";\nimport ITBreadcrumbs from \"../breadcrumbs/breadcrumbs\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITPageHeader({\n title,\n description,\n breadcrumbs,\n actions,\n backAction,\n className,\n}: ITPageHeaderProps) {\n const showTopRow = breadcrumbs?.length || backAction;\n\n return (\n <div className={clsx(className)}>\n {showTopRow && (\n <div className=\"flex items-center justify-between gap-4 mb-1\">\n <div className=\"flex items-center gap-2 min-w-0\">\n {backAction && (\n <button\n onClick={backAction}\n className=\"p-1.5 rounded-lg text-slate-400 hover:text-slate-600 hover:bg-slate-100 dark:text-slate-500 dark:hover:text-slate-200 dark:hover:bg-slate-800 transition-colors flex-shrink-0\"\n aria-label=\"Volver\"\n >\n <FaChevronLeft size={14} />\n </button>\n )}\n {breadcrumbs && breadcrumbs.length > 0 && (\n <ITBreadcrumbs items={breadcrumbs} />\n )}\n </div>\n {actions && (\n <div className=\"flex items-center gap-2 flex-shrink-0\">\n {actions}\n </div>\n )}\n </div>\n )}\n\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"min-w-0\">\n <ITText as=\"h1\" className=\"text-2xl font-extrabold text-slate-800 dark:text-white tracking-tight\">\n {title}\n </ITText>\n {description && (\n <ITText as=\"p\" className=\"text-sm text-slate-500 dark:text-slate-400 mt-0.5\">\n {description}\n </ITText>\n )}\n </div>\n {!showTopRow && actions && (\n <div className=\"flex items-center gap-2 flex-shrink-0\">\n {actions}\n </div>\n )}\n </div>\n </div>\n );\n}\n","import clsx from \"clsx\";\nimport { ITSkeletonProps, SkeletonVariant } from \"./skeleton.props\";\n\nconst variantClasses: Record<SkeletonVariant, string> = {\n text: \"rounded-md h-4 w-full\",\n circular: \"rounded-full\",\n rectangular: \"rounded-lg\",\n};\n\nexport default function ITSkeleton({\n variant = \"text\",\n width,\n height,\n count = 1,\n className,\n style,\n}: ITSkeletonProps) {\n const baseStyle: React.CSSProperties = {\n ...(width ? { width } : variant === \"text\" ? {} : width ? { width } : {}),\n ...(height ? { height } : {}),\n ...style,\n };\n\n const items = Array.from({ length: count }, (_, i) => i);\n\n return (\n <>\n {items.map((i) => (\n <div\n key={i}\n className={clsx(\n \"animate-pulse bg-slate-200 dark:bg-slate-700\",\n variantClasses[variant],\n variant === \"text\" && count > 1 && i < count - 1 && \"mb-2\",\n className\n )}\n style={{\n ...baseStyle,\n width: variant === \"text\" && width === undefined ? `${Math.random() * 30 + 60}%` : width,\n }}\n />\n ))}\n </>\n );\n}\n","import clsx from \"clsx\";\nimport { Children, cloneElement, isValidElement, Fragment } from \"react\";\nimport { ITStackProps, StackDirection, StackAlignment, StackJustify, StackWrap } from \"./stack.props\";\n\nconst directionMap: Record<StackDirection, string> = {\n row: \"flex-row\",\n column: \"flex-col\",\n \"row-reverse\": \"flex-row-reverse\",\n \"column-reverse\": \"flex-col-reverse\",\n};\n\nconst alignMap: Record<StackAlignment, string> = {\n start: \"items-start\",\n end: \"items-end\",\n center: \"items-center\",\n stretch: \"items-stretch\",\n baseline: \"items-baseline\",\n};\n\nconst justifyMap: Record<StackJustify, string> = {\n start: \"justify-start\",\n end: \"justify-end\",\n center: \"justify-center\",\n between: \"justify-between\",\n around: \"justify-around\",\n evenly: \"justify-evenly\",\n};\n\nconst wrapMap: Record<StackWrap, string> = {\n nowrap: \"flex-nowrap\",\n wrap: \"flex-wrap\",\n \"wrap-reverse\": \"flex-wrap-reverse\",\n};\n\nexport default function ITStack({\n children,\n direction = \"column\",\n spacing = 0,\n alignItems,\n justifyContent,\n flexWrap,\n divider,\n className,\n style,\n as: Component = \"div\",\n}: ITStackProps) {\n const hasDivider = divider !== undefined;\n const items = Children.toArray(children);\n\n const resolvedStyle: React.CSSProperties = {\n gap: spacing > 0 ? `${spacing * 0.25}rem` : undefined,\n ...style,\n };\n\n return (\n <Component\n className={clsx(\n \"flex\",\n directionMap[direction],\n alignItems && alignMap[alignItems],\n justifyContent && justifyMap[justifyContent],\n flexWrap && wrapMap[flexWrap],\n className\n )}\n style={resolvedStyle}\n >\n {hasDivider\n ? items.map((child, index) => (\n <Fragment key={index}>\n {child}\n {index < items.length - 1 && isValidElement(divider)\n ? cloneElement(divider, { key: `divider-${index}` })\n : null}\n </Fragment>\n ))\n : children}\n </Component>\n );\n}\n","import { useState, useRef } from \"react\";\nimport clsx from \"clsx\";\nimport { ITPopoverProps, PopoverPosition } from \"./popover.props\";\nimport useClickOutside from \"@/hooks/useClickOutside\";\n\nconst positionClasses: Record<PopoverPosition, string> = {\n top: \"bottom-full left-1/2 -translate-x-1/2 mb-2\",\n bottom: \"top-full left-1/2 -translate-x-1/2 mt-2\",\n left: \"right-full top-1/2 -translate-y-1/2 mr-2\",\n right: \"left-full top-1/2 -translate-y-1/2 ml-2\",\n};\n\nexport default function ITPopover({\n trigger,\n children,\n position = \"bottom\",\n isOpen: controlledOpen,\n onClose,\n className,\n}: ITPopoverProps) {\n const [internalOpen, setInternalOpen] = useState(false);\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n const ref = useRef<HTMLDivElement>(null);\n\n useClickOutside(ref, () => {\n if (isControlled) onClose?.();\n else setInternalOpen(false);\n });\n\n return (\n <div ref={ref} className={clsx(\"relative inline-flex\", className)}>\n <div onClick={() => (isControlled ? onClose?.() : setInternalOpen((p) => !p))} className=\"cursor-pointer\">\n {trigger}\n </div>\n {open && (\n <div className={clsx(\"absolute z-[200]\", positionClasses[position])}>\n <div className=\"bg-white dark:bg-slate-800 rounded-xl shadow-xl border border-slate-200 dark:border-slate-700 p-3 min-w-[160px]\">\n {children}\n </div>\n </div>\n )}\n </div>\n );\n}\n","import clsx from \"clsx\";\nimport { ITProgressProps } from \"./progress.props\";\nimport { ColorsTypes } from \"@/types/colors.types\";\n\nconst colorMap: Record<ColorsTypes, string> = {\n primary: \"bg-primary-500\",\n secondary: \"bg-secondary-500\",\n success: \"bg-success-500\",\n danger: \"bg-danger-500\",\n warning: \"bg-warning-500\",\n info: \"bg-info-500\",\n purple: \"bg-purple-500\",\n error: \"bg-danger-500\",\n gray: \"bg-secondary-500\",\n};\n\nconst sizeMap = {\n sm: \"h-1\",\n md: \"h-2\",\n lg: \"h-3\",\n};\n\nexport default function ITProgress({\n value = 0,\n max = 100,\n variant = \"determinate\",\n color = \"primary\",\n size = \"md\",\n className,\n style,\n}: ITProgressProps) {\n const pct = Math.min(Math.max((value / max) * 100, 0), 100);\n\n return (\n <div\n className={clsx(\"w-full bg-slate-200 dark:bg-slate-700 rounded-full overflow-hidden\", sizeMap[size], className)}\n style={style}\n role=\"progressbar\"\n aria-valuenow={variant === \"determinate\" ? value : undefined}\n aria-valuemax={max}\n >\n <div\n className={clsx(\n \"h-full rounded-full transition-all duration-500\",\n colorMap[color],\n variant === \"indeterminate\" && \"animate-pulse w-1/2\"\n )}\n style={variant === \"determinate\" ? { width: `${pct}%` } : undefined}\n />\n </div>\n );\n}\n","import clsx from \"clsx\";\nimport { ITRadioGroupProps } from \"./radio.props\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITRadioGroup({\n name,\n value,\n onChange,\n options,\n disabled = false,\n direction = \"column\",\n className,\n}: ITRadioGroupProps) {\n return (\n <div\n className={clsx(\n \"flex gap-3\",\n direction === \"row\" ? \"flex-row flex-wrap\" : \"flex-col\",\n className\n )}\n >\n {options.map((opt) => {\n const isSelected = opt.value === value;\n return (\n <label\n key={opt.value}\n className={clsx(\n \"inline-flex items-center gap-2 cursor-pointer select-none\",\n disabled && \"opacity-50 cursor-not-allowed\"\n )}\n >\n <input\n type=\"radio\"\n name={name}\n value={opt.value}\n checked={isSelected}\n onChange={() => onChange(opt.value)}\n disabled={disabled}\n className=\"peer sr-only\"\n />\n <div\n className={clsx(\n \"w-4 h-4 rounded-full border-2 flex items-center justify-center transition-all\",\n isSelected\n ? \"border-primary-500\"\n : \"border-slate-300 dark:border-slate-600\",\n !disabled && \"peer-focus:ring-2 peer-focus:ring-primary-200\",\n )}\n >\n {isSelected && <div className=\"w-2 h-2 rounded-full bg-primary-500\" />}\n </div>\n <ITText as=\"span\" className=\"text-sm text-slate-700 dark:text-slate-300\">{opt.label}</ITText>\n </label>\n );\n })}\n </div>\n );\n}\n","import React, { useState, useEffect, useRef, useMemo } from \"react\";\nimport clsx from \"clsx\";\nimport { FaAngleDown, FaSearch, FaTimes } from \"react-icons/fa\";\nimport { ITSearchSelectProps, ITSearchSelectOption } from \"./search-select.props\";\nimport { theme } from \"@/theme/theme\";\nimport ITText from \"@/components/text/text\";\n\n/**\n * ITSearchSelect - Un componente de selección con buscador integrado.\n * Soporta filtrado local y búsqueda remota via API.\n */\nexport default function ITSearchSelect({\n name,\n options = [],\n label,\n placeholder = \"Selecciona una opción\",\n valueField = \"value\",\n labelField = \"label\",\n value,\n onChange,\n onBlur,\n disabled = false,\n className,\n touched,\n required,\n error,\n readOnly = false,\n onSearch,\n isLoading = false,\n noResultsMessage = \"No se encontraron resultados\",\n}: ITSearchSelectProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [isFocused, setIsFocused] = useState(false);\n const [localTouched, setLocalTouched] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const timeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n // Encontrar la opción seleccionada inicialmente\n const selectedOption = useMemo(() => {\n return options.find((opt) => opt[valueField] === value);\n }, [options, value, valueField]);\n\n // Sincronizar el searchTerm con el label de la opción seleccionada si no se está editando\n useEffect(() => {\n if (!isFocused) {\n setSearchTerm(selectedOption ? String(selectedOption[labelField]) : \"\");\n }\n }, [selectedOption, isFocused, labelField]);\n\n // Cerrar el dropdown al hacer click afuera\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n }\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n // Filtrado local de opciones (Modo 1)\n const filteredOptions = useMemo(() => {\n if (onSearch) return options; // Modo API\n if (!searchTerm || !isFocused) return options;\n return options.filter((opt) =>\n String(opt[labelField]).toLowerCase().includes(searchTerm.toLowerCase())\n );\n }, [options, searchTerm, onSearch, labelField, isFocused]);\n\n // Manejar cambio en el input\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const query = e.target.value;\n setSearchTerm(query);\n setIsOpen(true);\n\n if (onSearch) {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => {\n onSearch(query);\n }, 500);\n }\n };\n\n const handleSelect = (option: ITSearchSelectOption) => {\n if (onChange) {\n onChange(option[valueField], option);\n }\n setSearchTerm(String(option[labelField]));\n setIsOpen(false);\n };\n\n const handleFocus = () => {\n if (disabled || readOnly) return;\n setIsFocused(true);\n setIsOpen(true);\n // Opcional: borrar el texto al entrar para facilitar la búsqueda\n // setSearchTerm(\"\"); \n };\n\n const handleInputBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n // Retrasar el cierre para permitir el click en la opción\n setTimeout(() => {\n setIsFocused(false);\n setLocalTouched(true);\n onBlur?.(e);\n }, 200);\n };\n\n // Theme logic\n const inputTheme = (theme as any).input || {};\n\n const isTouched = touched !== undefined ? touched : localTouched;\n const isEmpty = value === undefined || value === null || String(value).trim() === \"\";\n\n const effectiveError = error !== undefined && error !== false\n ? (error === true ? \"Este campo es requerido\" : error)\n : (required && isEmpty ? \"Este campo es requerido\" : undefined);\n\n const hasError = isTouched && !!effectiveError;\n const errorMessage = typeof effectiveError === \"string\" ? effectiveError : \"Este campo es requerido\";\n \n const getInputStyle = () => {\n const style: React.CSSProperties = {\n backgroundColor: inputTheme.backgroundColor || \"#ffffff\",\n borderColor: inputTheme.borderColor || \"#e2e8f0\",\n borderRadius: inputTheme.borderRadius || \"0.5rem\",\n padding: inputTheme.padding || \"0.5rem 0.75rem\",\n fontSize: inputTheme.fontSize || \"0.875rem\",\n borderWidth: '1px',\n borderStyle: 'solid',\n transition: 'all 0.2s',\n color: 'var(--input-text-color, var(--color-secondary-900))',\n width: '100%',\n };\n\n if (disabled) {\n style.backgroundColor = inputTheme.disabled?.backgroundColor || \"#f1f5f9\";\n style.borderColor = inputTheme.disabled?.borderColor || \"#e2e8f0\";\n style.opacity = 0.7;\n style.cursor = \"not-allowed\";\n }\n\n if (hasError) {\n style.borderColor = inputTheme.error?.borderColor || 'red';\n if (isFocused) {\n style.boxShadow = inputTheme.error?.ring;\n }\n } else if (isFocused && !readOnly) {\n style.boxShadow = inputTheme.focus?.ring;\n style.borderColor = inputTheme.focus?.borderColor;\n }\n\n return style;\n };\n\n return (\n <div className={clsx(\"w-full flex flex-col gap-1.5\", className, isOpen && \"relative z-30\")} ref={containerRef}>\n {label && (\n <ITText\n as=\"label\"\n className={clsx(\"text-sm font-medium text-gray-700 dark:text-slate-300\", {\n \"text-red-500\": hasError,\n })}\n >\n <ITText as=\"span\">{label}</ITText>\n {required && <ITText as=\"span\" className=\"text-red-500 ml-1\">*</ITText>}\n </ITText>\n )}\n\n <div className=\"relative\">\n <div className=\"relative flex items-center\">\n <input\n type=\"text\"\n name={name}\n value={searchTerm}\n onChange={handleInputChange}\n onFocus={handleFocus}\n onBlur={handleInputBlur}\n disabled={disabled}\n readOnly={readOnly}\n placeholder={placeholder}\n className=\"outline-none pr-10\"\n style={getInputStyle()}\n autoComplete=\"off\"\n />\n <div className=\"absolute right-3 flex items-center gap-2 text-gray-400 pointer-events-none\">\n {isLoading && <div className=\"animate-spin h-4 w-4 border-2 border-primary-500 border-t-transparent rounded-full\" />}\n {!isLoading && <FaSearch size={14} className={clsx({ \"text-primary-500\": isFocused })} />}\n </div>\n </div>\n\n {/* Dropdown Panel */}\n {isOpen && (\n <div className=\"absolute z-50 w-full mt-1 bg-white dark:bg-slate-900 border border-gray-200 dark:border-slate-800 rounded-lg shadow-xl overflow-hidden animate-in fade-in zoom-in duration-200 origin-top\">\n <div className=\"max-h-60 overflow-y-auto\">\n {filteredOptions.length > 0 ? (\n filteredOptions.map((option) => (\n <ITText\n as=\"div\"\n key={option[valueField]}\n onClick={() => handleSelect(option)}\n className={clsx(\n \"px-4 py-2 text-sm cursor-pointer transition-colors\",\n value === option[valueField]\n ? \"bg-primary-50 dark:bg-primary-950/40 text-primary-700 dark:text-primary-300 font-medium\"\n : \"hover:bg-gray-50 dark:hover:bg-slate-800 text-gray-700 dark:text-slate-300\"\n )}\n >\n <ITText as=\"span\">{option[labelField]}</ITText>\n </ITText>\n ))\n ) : (\n <ITText as=\"div\" className=\"px-4 py-6 text-sm text-center text-gray-500 italic\">\n {isLoading ? \"Cargando...\" : noResultsMessage}\n </ITText>\n )}\n </div>\n </div>\n )}\n </div>\n\n {/* Error Message */}\n {hasError && (\n <ITText as=\"p\" className=\"text-red-500 text-xs mt-1\">{errorMessage}</ITText>\n )}\n </div>\n );\n}\n","import { useDebouncedSearch } from \"@/hooks/useDebouncedSearch\";\nimport clsx from \"clsx\";\nimport React, { useState } from \"react\";\n\nimport { sizeStyles, variantStyles } from \"@/types/table.types\";\nimport { ITSearchTableProps } from \"./searchTable.props\";\nimport SearchAndSortBar from \"./components/SearchAndSortBar\";\nimport TableHeader from \"./components/TableHeader\";\nimport TableRow from \"./components/TableRow\";\nimport { getNestedValue } from \"@/utils/table.utils\";\nimport TableEmptyState from \"./components/TableEmptyState\";\nimport PaginationControls from \"./components/PaginationControls\";\nimport ITText from \"@/components/text/text\";\n\ninterface CustomITSearchTableProps<T> extends ITSearchTableProps<T> {\n editingRow?: number | null;\n searchTermInitial?: string;\n onClearSearch?: () => void;\n onEdit?: (row: T, index: number) => void;\n onSave?: (row: T, index: number) => void;\n onCancel?: () => void;\n sortConfig?: {\n key: string;\n direction: \"asc\" | \"desc\";\n };\n}\n\nexport default function ITSearchTable<T extends Record<string, unknown>>({\n columns,\n data,\n containerClassName,\n searchTermInitial = \"\",\n searchInputPlaceholder = \"Buscar en todos los campos...\",\n className,\n variant = \"default\",\n size = \"md\",\n itemsPerPageOptions = [10, 20, 50, 100],\n defaultItemsPerPage = 10,\n title,\n pageIndex,\n totalCount,\n totalPages,\n hasPreviousPage,\n hasNextPage,\n onPageChange,\n onItemsPerPageChange,\n onSortChange,\n onFilterChange,\n sortConfig,\n editingRow = null,\n validationSchema,\n onClearSearch,\n onEdit,\n onSave,\n onCancel,\n}: CustomITSearchTableProps<T>) {\n const [itemsPerPage, setItemsPerPage] = useState(defaultItemsPerPage);\n\n const { searchTerm, handleSearchChange, handleClearSearch } = useDebouncedSearch({\n initialValue: searchTermInitial,\n onSearch: (value) => {\n if (onFilterChange) {\n onFilterChange(value ? { query: value } : {});\n }\n },\n });\n\n const handleItemsPerPageChange = (value: number) => {\n setItemsPerPage(value);\n onItemsPerPageChange?.(value);\n };\n\n const goToPage = (page: number) => {\n onPageChange?.(page);\n };\n\n const handleGlobalSort = () => {\n const newDirection = sortConfig?.direction === \"asc\" ? \"desc\" : \"asc\";\n onSortChange?.({ key: \"id\", direction: newDirection });\n };\n\n const handleSort = (key: string) => {\n const column = columns.find((col) => col.key === key);\n if (!column || !column.sortable) return;\n\n let newDirection: \"asc\" | \"desc\" = \"asc\";\n if (sortConfig && sortConfig.key === key) {\n newDirection = sortConfig.direction === \"asc\" ? \"desc\" : \"asc\";\n }\n\n onSortChange?.({ key, direction: newDirection });\n };\n\n const handleEdit = (row: T, index: number) => onEdit?.(row, index);\n const handleSave = (updatedRow: T, index: number) => onSave?.(updatedRow, index);\n const handleCancelEdit = () => onCancel?.();\n\n const handleClearSearchWithClear = () => {\n handleClearSearch();\n onClearSearch?.();\n };\n\nreturn (\n <div className={clsx(\"space-y-4 w-full\", containerClassName)}>\n {/* Card principal con sombra */}\n <div className=\"shadow-md sm:rounded-lg overflow-hidden\">\n {/* Header fijo */}\n {title && (\n <div className=\"bg-teal-500 text-white px-6 py-4\">\n <ITText as=\"h2\" className=\"text-xl font-bold text-center whitespace-nowrap\">\n {title}\n </ITText>\n </div>\n )}\n\n {/* Contenido con scroll */}\n <div className=\"bg-white\">\n {/* Barra de búsqueda y ordenamiento */}\n <div className=\"p-4 border-b border-gray-200\">\n <SearchAndSortBar\n searchTerm={searchTerm}\n onSearchChange={handleSearchChange}\n onClearSearch={handleClearSearchWithClear}\n onGlobalSort={handleGlobalSort}\n sortConfig={sortConfig}\n searchInputPlaceholder={searchInputPlaceholder}\n />\n </div>\n\n {/* Tabla con scroll horizontal */}\n <div className=\"overflow-x-auto\">\n <table\n className={clsx(\n \"min-w-full text-sm text-left bg-white text-gray-900 table-auto\",\n variantStyles[variant],\n sizeStyles[size]\n )}\n >\n <TableHeader\n columns={columns}\n onSort={handleSort}\n sortConfig={sortConfig}\n />\n <tbody>\n {data.length > 0 ? (\n data.map((row, rowIndex) => (\n <TableRow\n key={rowIndex}\n row={row}\n rowIndex={rowIndex}\n columns={columns}\n validationSchema={validationSchema}\n getNestedValue={getNestedValue}\n isEditing={editingRow === rowIndex}\n onEdit={() => handleEdit(row, rowIndex)}\n onSave={(updatedRow) => handleSave(updatedRow, rowIndex)}\n onCancel={handleCancelEdit}\n />\n ))\n ) : (\n <TableEmptyState\n colSpan={columns.length + 1}\n searchTerm={searchTerm}\n />\n )}\n </tbody>\n </table>\n </div>\n </div>\n </div>\n\n {/* Paginación */}\n <PaginationControls\n pageIndex={pageIndex}\n totalPages={totalPages}\n hasPreviousPage={hasPreviousPage}\n hasNextPage={hasNextPage}\n onPageChange={goToPage}\n itemsPerPage={itemsPerPage}\n itemsPerPageOptions={itemsPerPageOptions}\n onItemsPerPageChange={handleItemsPerPageChange}\n currentCount={data.length}\n totalCount={totalCount}\n />\n </div>\n);\n}","import ITInput from \"@/components/input/input\";\nimport React from \"react\";\nimport { FaSearch } from \"react-icons/fa\";\n\ninterface SearchInputProps {\n placeholder?: string;\n value: string;\n onChange: (value: string) => void;\n className?: string;\n}\n\nexport default function SearchInput({\n placeholder = \"Buscar en todos los campos...\",\n value,\n onChange,\n className = \"\",\n}: SearchInputProps) {\n return (\n <div className={`relative flex-1 ${className}`}>\n <div className=\"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none\">\n <FaSearch className=\"h-5 w-5 text-gray-400\" />\n </div>\n <ITInput\n name=\"global-search\"\n placeholder={placeholder}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onBlur={() => {}}\n className=\"pl-10 w-full\"\n />\n </div>\n );\n}\n","import React from \"react\";\nimport { FaSort, FaSortUp, FaSortDown } from \"react-icons/fa\";\nimport ITText from \"@/components/text/text\";\n\ninterface SortButtonProps {\n sortConfig?: {\n key: string;\n direction: \"asc\" | \"desc\";\n };\n onClick: () => void;\n className?: string;\n}\n\nexport default function SortButton({\n sortConfig,\n onClick,\n className = \"\",\n}: SortButtonProps) {\n return (\n <button\n onClick={onClick}\n className={`p-3 rounded-lg bg-white border border-gray-300 hover:bg-gray-50 transition-colors duration-200 flex items-center gap-2 min-w-[120px] ${className}`}\n aria-label={`Ordenar tabla ${\n sortConfig\n ? sortConfig.direction === \"asc\"\n ? \"descendente\"\n : \"ascendente\"\n : \"ascendente\"\n }`}\n title=\"Ordenar tabla\"\n >\n {sortConfig ? (\n sortConfig.direction === \"asc\" ? (\n <FaSortUp className=\"w-4 h-4 text-slate-500\" />\n ) : (\n <FaSortDown className=\"w-4 h-4 text-slate-500\" />\n )\n ) : (\n <FaSort className=\"w-4 h-4 text-gray-500\" />\n )}\n <ITText as=\"span\" className=\"text-sm font-medium text-gray-700\">\n {sortConfig\n ? sortConfig.direction === \"asc\"\n ? \"Asc ↑\"\n : \"Desc ↓\"\n : \"Ordenar\"}\n </ITText>\n </button>\n );\n}\n","import React from \"react\";\nimport SearchInput from \"./SearchInput\";\nimport SortButton from \"./SortButton\";\nimport ITButton from \"@/components/button/button\";\nimport ITText from \"@/components/text/text\";\n\ninterface SearchAndSortBarProps {\n searchTerm: string;\n onSearchChange: (value: string) => void;\n onClearSearch: () => void;\n onGlobalSort: () => void;\n sortConfig?: {\n key: string;\n direction: \"asc\" | \"desc\";\n };\n searchInputPlaceholder?: string;\n}\n\nexport default function SearchAndSortBar({\n searchTerm,\n onSearchChange,\n onClearSearch,\n onGlobalSort,\n sortConfig,\n searchInputPlaceholder = \"Buscar en todos los campos...\",\n}: SearchAndSortBarProps) {\n return (\n <div className=\"bg-gray-50 px-6 py-4 border-b border-gray-200\">\n <div className=\"flex items-center gap-4\">\n <SearchInput\n placeholder={searchInputPlaceholder}\n value={searchTerm}\n onChange={onSearchChange}\n />\n\n <SortButton sortConfig={sortConfig} onClick={onGlobalSort} />\n\n {searchTerm && (\n <ITButton\n size=\"small\"\n variant=\"outlined\"\n color=\"danger\"\n onClick={onClearSearch}\n ariaLabel=\"Limpiar búsqueda\"\n title=\"Limpiar búsqueda\"\n >\n <ITText as=\"span\">Limpiar</ITText>\n </ITButton>\n )}\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport SortButton from \"./SortButton\";\nimport ITText from \"@/components/text/text\";\n\ninterface TableHeaderCellProps {\n label: string;\n sortable?: boolean;\n onSort: () => void;\n sortConfig?: {\n key: string;\n direction: \"asc\" | \"desc\";\n };\n className?: string;\n}\n\nexport default function TableHeaderCell({\n label,\n sortable = false,\n onSort,\n sortConfig,\n className = \"\",\n}: TableHeaderCellProps) {\n return (\n <th className={className}>\n <div className=\"flex flex-col items-center gap-2 w-full\">\n <div className=\"flex items-center justify-center gap-2 w-full\">\n <ITText as=\"span\"\n className=\"inline-block w-[96%] text-sm font-medium text-white bg-slate-400 px-3 py-1.5 pb-2 rounded-lg text-center leading-tight\"\n style={{\n display: \"-webkit-box\",\n WebkitBoxOrient: \"vertical\",\n WebkitLineClamp:4,\n overflow: \"hidden\",\n }}\n>\n {label}\n</ITText>\n {sortable && <SortButton sortConfig={sortConfig} onClick={onSort} />}\n </div>\n </div>\n </th>\n );\n}\n","import React from \"react\";\nimport TableHeaderCell from \"./TableHeaderCell\";\nimport { SearchColumn } from \"../searchTable.props\";\n\ninterface TableHeaderProps<T> {\n columns: SearchColumn<T>[];\n onSort: (key: string) => void;\n sortConfig?: {\n key: string;\n direction: \"asc\" | \"desc\";\n };\n}\n\nexport default function TableHeader<T>({\n columns,\n onSort,\n sortConfig,\n}: TableHeaderProps<T>) {\n return (\n <thead>\n <tr className=\"bg-white border-b border-gray-200\">\n {columns.map((col) => (\n <TableHeaderCell\n key={col.key}\n label={col.label}\n sortable={col.sortable && col.type !== \"actions\"}\n onSort={() => onSort(col.key)}\n sortConfig={sortConfig?.key === col.key ? sortConfig : undefined}\n className=\"px-3 py-3 text-center align-middle\"\n />\n ))}\n </tr>\n </thead>\n );\n}\n","export const formatCurrencyMX = (value: number) => {\n return value.toLocaleString(\"es-MX\", {\n style: \"currency\",\n currency: \"MXN\",\n });\n};\n\nexport const getNestedValue = (obj: any, path: string) => {\n return path.split('.').reduce((acc, part) => acc && acc[part], obj);\n};\n","import { useEditableRow } from \"@/hooks/useEditableRow\";\nimport { formatCurrencyMX } from \"@/utils/table.utils\";\nimport clsx from \"clsx\";\nimport React from \"react\";\nimport { FaCheck, FaTimes } from \"react-icons/fa\";\nimport { SearchColumn } from \"../searchTable.props\";\nimport EditableCell from \"./EditableCell\";\nimport * as yup from \"yup\";\n\ninterface TableRowProps<T> {\n row: T;\n rowIndex: number;\n columns: SearchColumn<T>[];\n getNestedValue: (obj: unknown, path: string) => unknown;\n onSave?: (row: T) => void;\n onCancel?: () => void;\n validationSchema?: yup.ObjectSchema<any>;\n isEditing?: boolean;\n onEdit?: (row: T) => void;\n onDelete?: (row: T) => void;\n}\n\nexport default function TableRow<T>({\n row,\n rowIndex,\n columns,\n getNestedValue,\n onSave,\n onCancel,\n validationSchema,\n isEditing = false,\n onEdit,\n}: TableRowProps<T>) {\n const {\n editedRow,\n errors,\n isHovered,\n setIsHovered,\n hasErrors,\n handleEdit,\n handleSave,\n handleCancel,\n handleChange,\n } = useEditableRow({ row, columns, getNestedValue, validationSchema });\n\n const onEditAction = () => handleEdit(onEdit);\n const onSaveAction = () => handleSave(onSave);\n const onCancelAction = () => handleCancel(onCancel);\n\n const renderCellContent = (col: SearchColumn<T>, rowData: T) => {\n const value = getNestedValue(rowData, col.key);\n\n if (col.render) return col.render(rowData);\n\n switch (col.type) {\n case \"number\":\n return typeof value === \"number\" && col.currencyMX\n ? formatCurrencyMX(value)\n : (value as React.ReactNode);\n\n case \"boolean\":\n return value ? (\n <FaCheck\n className=\"text-green-500\"\n aria-label=\"Verdadero\"\n title=\"Verdadero\"\n />\n ) : (\n <FaTimes className=\"text-red-500\" aria-label=\"Falso\" title=\"Falso\" />\n );\n\n case \"actions\":\n if (isEditing && col.saveActions) {\n return col.saveActions(rowData, {\n onSave: onSaveAction,\n onCancel: onCancelAction,\n hasErrors,\n });\n } else if (col.actions) {\n return col.actions(rowData, { onEdit: onEditAction });\n }\n return null;\n\n case \"catalog\":\n if (col.catalogOptions) {\n const catalogItem = col.catalogOptions.data.find(\n (item) => item.id === value\n );\n return catalogItem?.name || (value as React.ReactNode);\n }\n return value as React.ReactNode;\n\n default:\n return value as React.ReactNode;\n }\n };\n\n return (\n <tr\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n className={`border-b border-gray-200 transition-colors duration-150 ${\n isEditing\n ? \"bg-slate-50\"\n : rowIndex % 2 === 0\n ? \"bg-white\"\n : \"bg-gray-50\"\n } ${isHovered && !isEditing ? \"bg-gray-100\" : \"\"}`}\n >\n {columns.map((col) => (\n <td\n key={`${rowIndex}-${col.key}`}\n className={clsx(\"pl-5 py-2\", col.className, {\n \"text-center\": col.type === \"actions\" || col.type === \"boolean\",\n })}\n >\n {isEditing && col.editable ? (\n <EditableCell\n column={col}\n value={getNestedValue(editedRow, col.key)}\n onChange={(value) => handleChange(col.key, value)}\n error={errors[col.key]}\n row={editedRow}\n />\n ) : (\n <div\n className={clsx({\n \"flex flex-col items-center justify-center gap-1 \":\n col.type === \"actions\",\n })}\n >\n {\n renderCellContent(\n col,\n isEditing ? editedRow : row\n ) as React.ReactNode\n }\n </div>\n )}\n </td>\n ))}\n </tr>\n );\n}\n","import React from \"react\";\nimport { SearchColumn } from \"../searchTable.props\";\nimport ITInput from \"@/components/input/input\";\nimport ITSelect from \"@/components/select/select\";\nimport ITDatePicker from \"@/components/date-picker/datePicker\";\nimport ITText from \"@/components/text/text\";\n\ninterface EditableCellProps<T> {\n column: SearchColumn<T>;\n value: any;\n onChange: (value: any, error?: string) => void;\n error?: string;\n row: T;\n}\n\nexport default function EditableCell<T>({\n column,\n value,\n onChange,\n error,\n row,\n}: EditableCellProps<T>) {\n const validate = (val: any) => {\n if (column.validation) return column.validation(val);\n return undefined;\n };\n\n const normalizeAndNotify = (input: any) => {\n let newValue = input;\n\n if (input && typeof input === \"object\" && \"target\" in input) {\n const t = input.target as HTMLInputElement;\n if (column.inputType === \"checkbox\") newValue = t.checked;\n else newValue = t.value;\n }\n\n if (column.inputType === \"number\") {\n newValue = newValue === \"\" || newValue === null ? \"\" : Number(newValue);\n }\n\n const errorMsg = validate(newValue);\n onChange(newValue, errorMsg);\n };\n\n const handleBlur = () => {\n const errorMsg = validate(value);\n onChange(value, errorMsg);\n };\n\n // Funciones de renderizado centralizadas\n const renderITInput = (type: \"text\" | \"number\") => {\n return (\n <ITInput\n type={type}\n name={column.key}\n value={type === \"number\" ? value ?? \"\" : value || \"\"}\n onChange={normalizeAndNotify}\n onBlur={handleBlur}\n className=\"w-full\"\n error={error}\n />\n );\n };\n\n const renderITDatePicker = () => {\n return (\n <ITDatePicker\n name={column.key}\n value={value || null}\n onChange={normalizeAndNotify}\n onBlur={handleBlur}\n className=\"w-full\"\n error={error}\n />\n );\n };\n\n const renderITSelect = (\n options: { value: any; label: string | number }[]\n ) => {\n return (\n <ITSelect\n name={column.key}\n options={options as any}\n value={value}\n onChange={normalizeAndNotify}\n onBlur={handleBlur as any}\n className=\"w-full\"\n error={error}\n />\n );\n };\n\n const renderBooleanInput = () => {\n return (\n <ITInput\n type=\"checkbox\"\n name={column.key}\n checked={!!value}\n onChange={(e) => {\n normalizeAndNotify(e.target.checked);\n }}\n onBlur={handleBlur}\n className=\"w-full\"\n error={error}\n />\n );\n };\n\n // Función principal que decide qué componente renderizar\n const renderInput = () => {\n const inputType = column.inputType || column.type;\n\n switch (inputType) {\n case \"number\":\n return renderITInput(\"number\");\n\n case \"select\":\n return renderITSelect(column.options || []);\n\n case \"checkbox\":\n case \"boolean\":\n return renderBooleanInput();\n\n case \"date\":\n return renderITDatePicker();\n\n case \"catalog\":\n if (column.catalogOptions) {\n const options = column.catalogOptions.data.map((item) => ({\n value: item[column.catalogOptions.key || \"id\"],\n label: item[column.catalogOptions.label || \"name\"],\n }));\n return renderITSelect(options);\n }\n return renderITInput(\"text\"); // fallback si no hay catalogOptions\n\n default:\n return renderITInput(\"text\");\n }\n };\n\n return (\n <div className=\"w-full\">\n {renderInput()}\n {error && <div className=\"text-red-500 text-xs mt-1\"><ITText as=\"span\">{error}</ITText></div>}\n </div>\n );\n}\n","import React from \"react\";\nimport ITText from \"@/components/text/text\";\n\ninterface TableEmptyStateProps {\n colSpan: number;\n searchTerm: string;\n}\n\nexport default function TableEmptyState({\n colSpan,\n searchTerm,\n}: TableEmptyStateProps) {\n return (\n <tr>\n <td colSpan={colSpan} className=\"px-6 py-4 text-center\">\n {searchTerm\n ? <ITText as=\"span\">No se encontraron resultados para tu búsqueda</ITText>\n : <ITText as=\"span\">No se encontraron resultados</ITText>}\n </td>\n </tr>\n );\n}\n","import React from \"react\";\nimport { FaArrowLeft, FaArrowRight } from \"react-icons/fa\";\nimport PaginationInfo from \"./PaginationInfo\";\nimport ITSelect from \"@/components/select/select\";\nimport ITButton from \"@/components/button/button\";\nimport ITText from \"@/components/text/text\";\n\ninterface PaginationControlsProps {\n pageIndex: number;\n totalPages: number;\n hasPreviousPage: boolean;\n hasNextPage: boolean;\n onPageChange: (page: number) => void;\n itemsPerPage: number;\n itemsPerPageOptions: number[];\n onItemsPerPageChange: (value: number) => void;\n currentCount: number;\n totalCount: number;\n}\n\nexport default function PaginationControls({\n pageIndex,\n totalPages,\n hasPreviousPage,\n hasNextPage,\n onPageChange,\n itemsPerPage,\n itemsPerPageOptions,\n onItemsPerPageChange,\n currentCount,\n totalCount,\n}: PaginationControlsProps) {\n return (\n <div className=\"flex flex-col sm:flex-row justify-between items-center gap-4\">\n <div className=\"flex items-center space-x-4\">\n <PaginationInfo currentCount={currentCount} totalCount={totalCount} />\n\n <div className=\"flex items-center space-x-2\">\n <ITText as=\"span\" className=\"text-sm text-gray-700\">Mostrar:</ITText>\n <ITSelect\n name=\"itemsPerPage\"\n options={itemsPerPageOptions.map((option) => ({\n value: String(option),\n label: String(option),\n }))}\n value={String(itemsPerPage)}\n onChange={(e) => onItemsPerPageChange(Number(e.target.value))}\n onBlur={() => {}}\n size=\"small\"\n className=\"w-20\"\n />\n </div>\n </div>\n\n <div className=\"flex items-center space-x-2\">\n <ITButton\n color=\"secondary\"\n size=\"small\"\n onClick={() => onPageChange(pageIndex - 1)}\n disabled={!hasPreviousPage}\n className=\"min-w-[32px]\"\n ariaLabel=\"Página anterior\"\n title=\"Ir a la página anterior\"\n >\n <FaArrowLeft aria-hidden=\"true\" />\n </ITButton>\n\n <ITText as=\"span\" className=\"px-4 py-2 text-sm text-gray-700\" aria-live=\"polite\">\n Página {pageIndex} de {totalPages}\n </ITText>\n\n <ITButton\n size=\"small\"\n color=\"secondary\"\n onClick={() => onPageChange(pageIndex + 1)}\n disabled={!hasNextPage}\n className=\"min-w-[32px]\"\n ariaLabel=\"Página siguiente\"\n title=\"Ir a la página siguiente\"\n >\n <FaArrowRight aria-hidden=\"true\" />\n </ITButton>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport ITText from \"@/components/text/text\";\n\ninterface PaginationInfoProps {\n currentCount: number;\n totalCount: number;\n className?: string;\n}\n\nexport default function PaginationInfo({\n currentCount,\n totalCount,\n className = \"\",\n}: PaginationInfoProps) {\n return (\n <ITText as=\"span\" className={`text-sm text-gray-700 ${className}`}>\n Mostrando {currentCount} de {totalCount} resultados\n </ITText>\n );\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport { FaChevronDown } from \"react-icons/fa\";\nimport { ITNavigationItem, ITSidebarProps } from \"./sidebar.props\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITSidebar({\n navigationItems = [],\n isCollapsed = false,\n onToggleCollapse,\n className = \"\",\n visibleOnMobile = false,\n onItemClick,\n onSubItemClick,\n subitemConnector = 'dot',\n}: ITSidebarProps) {\n const [expandedItems, setExpandedItems] = useState<Set<string>>(new Set());\n const [isHovering, setIsHovering] = useState(false);\n const sidebarRef = useRef<HTMLDivElement>(null);\n const hoverTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const leaveTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n const handleMouseEnter = () => {\n if (hoverTimeoutRef.current) clearTimeout(hoverTimeoutRef.current);\n if (leaveTimeoutRef.current) clearTimeout(leaveTimeoutRef.current);\n setIsHovering(true);\n };\n\n const handleMouseLeave = () => {\n leaveTimeoutRef.current = setTimeout(() => {\n setIsHovering(false);\n }, 300);\n };\n\n const sidebar = sidebarRef.current;\n if (sidebar) {\n sidebar.addEventListener(\"mouseenter\", handleMouseEnter);\n sidebar.addEventListener(\"mouseleave\", handleMouseLeave);\n }\n return () => {\n if (sidebar) {\n sidebar.removeEventListener(\"mouseenter\", handleMouseEnter);\n sidebar.removeEventListener(\"mouseleave\", handleMouseLeave);\n }\n if (hoverTimeoutRef.current) clearTimeout(hoverTimeoutRef.current);\n if (leaveTimeoutRef.current) clearTimeout(leaveTimeoutRef.current);\n };\n }, [isCollapsed]);\n\n // Auto-expand parent items when a subitem is active\n useEffect(() => {\n const activeParents = new Set<string>();\n navigationItems.forEach(item => {\n if (item.subitems && item.subitems.some(sub => sub.isActive)) {\n activeParents.add(item.id);\n }\n });\n\n if (activeParents.size > 0) {\n setExpandedItems(prev => {\n const next = new Set(prev);\n let changed = false;\n activeParents.forEach(id => {\n if (!next.has(id)) {\n next.add(id);\n changed = true;\n }\n });\n return changed ? next : prev;\n });\n }\n }, [navigationItems]);\n\n const toggleExpanded = (itemId: string) => {\n const newExpanded = new Set(expandedItems);\n if (newExpanded.has(itemId)) newExpanded.delete(itemId);\n else newExpanded.add(itemId);\n setExpandedItems(newExpanded);\n };\n\n const handleItemClick = (item: ITNavigationItem) => {\n if (item.subitems && item.subitems.length > 0) {\n toggleExpanded(item.id);\n } else {\n if (item.action) item.action();\n if (onItemClick) onItemClick(item);\n }\n };\n\n const isSidebarCollapsed = visibleOnMobile ? false : (!isHovering && isCollapsed);\n const sidebarWidth = isSidebarCollapsed ? \"w-[88px]\" : \"w-[280px]\";\n\n return (\n <aside\n ref={sidebarRef}\n className={`\n relative flex flex-col \n transition-all duration-400 ease-[cubic-bezier(0.2,0,0,1)]\n ${sidebarWidth}\n ${className}\n ${!visibleOnMobile ? \"hidden lg:flex\" : \"flex\"}\n shadow-[4px_0_24px_rgba(0,0,0,0.02)]\n `}\n style={{\n zIndex: 50,\n backgroundColor: \"var(--sidebar-bg, rgba(255, 255, 255, 0.90))\",\n borderRight: \"1px solid var(--sidebar-border, #e2e8f0)\",\n WebkitBackdropFilter: 'blur(12px)',\n backdropFilter: 'blur(12px)',\n }}\n >\n {/* Navigation Items */}\n <nav className=\"flex-1 py-6 overflow-y-auto overflow-x-hidden custom-scrollbar px-4\">\n <ul className=\"space-y-2\">\n {navigationItems.map((item) => (\n <li key={item.id} className=\"relative group/navitem\">\n <div\n className={`flex items-center cursor-pointer \n transition-all duration-300 ease-[cubic-bezier(0.2,0,0,1)]\n rounded-xl relative overflow-visible\n ${isSidebarCollapsed ? \"justify-center p-2.5 mb-2\" : \"justify-between px-3.5 py-3 mb-1\"}\n `}\n style={{\n backgroundColor: item.isActive ? \"var(--sidebar-active-bg, #f8fafc)\" : 'transparent',\n boxShadow: item.isActive ? '0 1px 2px 0 rgba(0, 0, 0, 0.05)' : 'none',\n border: item.isActive ? \"1px solid var(--sidebar-border, #e2e8f0)\" : '1px solid transparent'\n }}\n onMouseEnter={(e) => {\n if (!item.isActive) e.currentTarget.style.backgroundColor = \"var(--sidebar-hover-bg, #f1f5f9)\";\n }}\n onMouseLeave={(e) => {\n if (!item.isActive) e.currentTarget.style.backgroundColor = 'transparent';\n }}\n onClick={() => handleItemClick(item)}\n >\n {item.isActive && !isSidebarCollapsed && (\n <div\n className=\"absolute left-0 top-1/4 bottom-1/4 w-[3px] rounded-r-full transition-all\"\n style={{ backgroundColor: \"var(--sidebar-active-icon, #10b981)\", boxShadow: \"0 0 10px var(--sidebar-active-icon, #10b981)\" }}\n />\n )}\n\n <div className={`flex items-center ${!isSidebarCollapsed ? \"gap-3.5\" : \"justify-center\"} relative z-10 w-full`}>\n {item.icon && (\n <div\n className={`transition-all duration-300 flex-shrink-0 flex items-center justify-center`}\n style={{\n color: item.isActive ? \"var(--sidebar-active-icon, #10b981)\" : \"var(--sidebar-icon-color, #9ca3af)\",\n opacity: item.isActive ? 1 : 0.8,\n fontSize: item.isActive ? '1.35rem' : '1.25rem',\n filter: item.isActive ? 'drop-shadow(0 0 8px rgba(255,255,255,0.2))' : 'none'\n }}\n >\n {item.icon}\n </div>\n )}\n\n {!isSidebarCollapsed && (\n <ITText as=\"span\"\n className={`transition-all duration-300 truncate tracking-wide`}\n style={{\n color: item.isActive ? \"var(--sidebar-active-color, #ffffff)\" : \"var(--sidebar-label-color, #d1d5db)\",\n fontSize: '0.9rem',\n fontWeight: item.isActive ? '600' : '500'\n }}\n >\n {item.label}\n </ITText>\n )}\n </div>\n\n {!isSidebarCollapsed && item.subitems && item.subitems.length > 0 && (\n <div className={`flex-shrink-0 transition-transform duration-300 ease-[cubic-bezier(0.2,0,0,1)] ${expandedItems.has(item.id) ? \"rotate-180\" : \"\"}`}\n style={{ color: item.isActive ? \"var(--sidebar-active-color, #0f172a)\" : \"var(--sidebar-icon-color, #64748b)\", opacity: 0.7 }}>\n <FaChevronDown className=\"w-3 h-3\" />\n </div>\n )}\n\n {item.badge && (\n <span\n className={`\n absolute flex items-center justify-center font-bold shadow-md\n ${isSidebarCollapsed\n ? \"top-1 right-1 w-2.5 h-2.5 rounded-full ring-2 ring-white\"\n : \"right-3 top-1/2 transform -translate-y-1/2 px-2 py-0.5 text-[10px] rounded-full backdrop-blur-sm\"}\n `}\n style={{\n backgroundColor: \"var(--sidebar-badge-bg, #10b981)\",\n color: \"var(--sidebar-badge-color, #ffffff)\",\n boxShadow: isSidebarCollapsed ? \"0 0 0 2px var(--sidebar-bg, #111827)\" : 'none'\n }}\n >\n {isSidebarCollapsed ? \"\" : item.badge}\n </span>\n )}\n </div>\n\n {/* Glassmorphism Collapsed Tooltip / Submenu */}\n {isSidebarCollapsed && (\n <div\n className=\"absolute left-full top-0 ml-4 rounded-2xl opacity-0 invisible group-hover/navitem:opacity-100 group-hover/navitem:visible transition-all duration-300 pointer-events-none z-50 min-w-[220px] overflow-hidden -translate-x-2 group-hover/navitem:translate-x-0 shadow-[0_10px_40px_-10px_rgba(0,0,0,0.15)]\"\n style={{\n backgroundColor: \"var(--sidebar-bg, #ffffff)\",\n border: \"1px solid var(--sidebar-border, #e2e8f0)\",\n WebkitBackdropFilter: 'blur(16px)',\n backdropFilter: 'blur(16px)',\n }}\n >\n <div className=\"px-5 py-4 flex items-center gap-3 font-semibold border-b\" style={{ borderColor: \"var(--sidebar-border, #e2e8f0)\", color: \"var(--sidebar-active-color, #0f172a)\" }}>\n {item.icon && <span style={{ color: \"var(--sidebar-active-icon, #10b981)\" }} className=\"text-xl drop-shadow-sm\">{item.icon}</span>}\n <ITText as=\"span\" className=\"tracking-wide text-[15px]\">{item.label}</ITText>\n </div>\n\n {item.subitems && item.subitems.length > 0 ? (\n <div className=\"py-2\">\n {item.subitems.map((subitem) => (\n <div\n key={subitem.id}\n className={`px-5 py-2.5 text-sm flex items-center gap-3 transition-colors relative`}\n >\n {subitem.isActive && subitemConnector === '|' && (\n <div\n className=\"absolute left-0 top-1/3 bottom-1/3 w-[2.5px] rounded-r-full\"\n style={{\n backgroundColor: \"var(--sidebar-active-icon, #10b981)\",\n boxShadow: \"0 0 6px color-mix(in srgb, var(--sidebar-active-icon, #10b981) 25%, transparent)\",\n }}\n />\n )}\n <span className={`w-1.5 h-1.5 rounded-full transition-all ${subitem.isActive ? \"scale-125\" : \"\"}`} style={{ backgroundColor: subitem.isActive ? \"var(--sidebar-active-icon, #10b981)\" : \"var(--sidebar-icon-color, #94a3b8)\" }} />\n <ITText as=\"span\" style={{ color: subitem.isActive ? \"var(--sidebar-active-color, #0f172a)\" : \"var(--sidebar-label-color, #475569)\", fontWeight: subitem.isActive ? 600 : 500 }}>{subitem.label}</ITText>\n </div>\n ))}\n </div>\n ) : (\n <ITText as=\"div\" className=\"px-5 py-3 text-sm italic\" style={{ color: \"var(--sidebar-label-color, #71717a)\" }}>No hay submenú</ITText>\n )}\n </div>\n )}\n\n {/* Submenu - smooth height/opacity when not collapsed */}\n {!isSidebarCollapsed && item.subitems && item.subitems.length > 0 && (\n <div className={`overflow-hidden transition-all duration-400 ease-[cubic-bezier(0.2,0,0,1)] ${expandedItems.has(item.id) ? \"max-h-[500px] opacity-100 mt-1\" : \"max-h-0 opacity-0\"}`}>\n <ul\n className=\"ml-5 flex flex-col gap-0.5 py-1\"\n style={{\n borderLeft: subitemConnector === '|'\n ? \"1px solid var(--sidebar-border, #e2e8f0)\"\n : 'none'\n }}\n >\n {item.subitems.map((subitem) => (\n <li key={subitem.id} className=\"relative\">\n <button\n onClick={() => {\n if (subitem.action) subitem.action();\n if (onSubItemClick) onSubItemClick(subitem);\n }}\n className={`flex items-center gap-2.5 w-full text-left px-3 py-2 rounded-xl transition-all duration-300`}\n style={{\n color: subitem.isActive ? \"var(--sidebar-active-color, #0f172a)\" : \"var(--sidebar-label-color, #475569)\",\n backgroundColor: subitem.isActive ? \"var(--sidebar-active-bg, #f8fafc)\" : 'transparent',\n fontSize: '0.85rem',\n fontWeight: subitem.isActive ? 600 : 500,\n letterSpacing: '0.01em',\n marginLeft: subitemConnector === '|' ? '-1px' : '0',\n }}\n onMouseEnter={(e) => {\n if (!subitem.isActive) {\n e.currentTarget.style.backgroundColor = \"var(--sidebar-hover-bg, #f1f5f9)\";\n e.currentTarget.style.transform = 'translateX(3px)';\n }\n }}\n onMouseLeave={(e) => {\n if (!subitem.isActive) {\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.transform = 'translateX(0)';\n }\n }}\n >\n {subitem.isActive && subitemConnector === '|' && (\n <div\n className=\"absolute left-0 top-1/3 bottom-1/3 w-[2.5px] rounded-r-full transition-all\"\n style={{\n backgroundColor: \"var(--sidebar-active-icon, #10b981)\",\n boxShadow: \"0 0 6px color-mix(in srgb, var(--sidebar-active-icon, #10b981) 25%, transparent)\",\n }}\n />\n )}\n {subitemConnector === 'dot' && (\n <span\n className={`w-1.5 h-1.5 rounded-full flex-shrink-0 transition-all duration-300 ${subitem.isActive ? 'scale-125' : ''}`}\n style={{\n backgroundColor: subitem.isActive\n ? \"var(--sidebar-active-icon, #10b981)\"\n : \"var(--sidebar-icon-color, #94a3b8)\"\n }}\n />\n )}\n <ITText as=\"span\" className=\"truncate\">{subitem.label}</ITText>\n </button>\n </li>\n ))}\n </ul>\n </div>\n )}\n </li>\n ))}\n </ul>\n </nav>\n </aside>\n );\n}","import { useState, useEffect } from \"react\";\nimport clsx from \"clsx\";\nimport { ITSlideToggleProps } from \"./slide.props\";\nimport { theme } from \"@/theme/theme\";\n\n/**\n * Slide toggle switch component.\n * Supports fully controlled (`isOn`) or uncontrolled (`initialState`) modes.\n */\nexport default function ITSlideToggle({\n onToggle,\n isOn: controlledIsOn,\n initialState = false,\n activeColor = \"success\",\n inactiveColor = \"#9ca3af\", // default gray-400\n disabled = false,\n size = \"md\",\n className = \"\",\n}: ITSlideToggleProps) {\n // Handle internal state if not controlled\n const isControlled = controlledIsOn !== undefined;\n const [internalIsOn, setInternalIsOn] = useState(initialState);\n\n // Sync internal state with controlled state if it changes externally\n useEffect(() => {\n if (isControlled) {\n setInternalIsOn(controlledIsOn);\n }\n }, [controlledIsOn, isControlled]);\n\n const isOn = isControlled ? controlledIsOn : internalIsOn;\n\n const toggleSwitch = () => {\n if (disabled) return;\n \n const newState = !isOn;\n if (!isControlled) {\n setInternalIsOn(newState);\n }\n if (onToggle) {\n onToggle(newState);\n }\n };\n\n // Resolve active theme color\n const isThemeColor = activeColor in theme.colors;\n const resolvedActiveColor = isThemeColor\n ? theme.colors[activeColor as keyof typeof theme.colors][500]\n : activeColor;\n\n // Resolve inactive color (could also be theme color, but defaulting to hex)\n const isInactiveThemeColor = inactiveColor in theme.colors;\n const resolvedInactiveColor = isInactiveThemeColor\n ? theme.colors[inactiveColor as keyof typeof theme.colors][400]\n : inactiveColor;\n\n const backgroundColor = isOn ? resolvedActiveColor : resolvedInactiveColor;\n\n // Sizing definitions\n const sizeClasses = {\n sm: {\n container: \"w-10 h-5\",\n knob: \"w-3.5 h-3.5\",\n translate: \"translate-x-5\",\n },\n md: {\n container: \"w-14 h-7\",\n knob: \"w-5 h-5\",\n translate: \"translate-x-7\",\n },\n lg: {\n container: \"w-16 h-8\",\n knob: \"w-6 h-6\",\n translate: \"translate-x-8\",\n },\n };\n\n const { container, knob, translate } = sizeClasses[size];\n\n return (\n <div\n onClick={toggleSwitch}\n className={clsx(\n \"flex items-center rounded-full p-1 transition-colors duration-300\",\n container,\n disabled ? \"opacity-50 cursor-not-allowed\" : \"cursor-pointer\",\n className\n )}\n style={{ backgroundColor }}\n role=\"switch\"\n aria-checked={isOn}\n tabIndex={disabled ? -1 : 0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n toggleSwitch();\n }\n }}\n >\n <div\n className={clsx(\n \"bg-white rounded-full shadow-md transform transition-transform duration-300 pointer-events-none\",\n knob,\n isOn ? translate : \"translate-x-0\"\n )}\n />\n </div>\n );\n}\n","import clsx from \"clsx\";\nimport { ITSliderProps } from \"./slider.props\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITSlider({\n value,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n label,\n disabled = false,\n className,\n}: ITSliderProps) {\n return (\n <div className={clsx(\"flex flex-col gap-1.5\", className)}>\n {label && (\n <ITText as=\"label\" className=\"text-xs font-semibold text-gray-600 dark:text-gray-400\">\n {label}: {value}\n </ITText>\n )}\n <div className=\"relative w-full h-5 flex items-center\">\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={value}\n onChange={(e) => onChange(Number(e.target.value))}\n disabled={disabled}\n className={clsx(\n \"w-full h-1.5 appearance-none rounded-full outline-none cursor-pointer\",\n \"bg-gray-200 dark:bg-gray-700\",\n \"accent-primary-500\",\n \"disabled:opacity-50 disabled:cursor-not-allowed\",\n \"[&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:w-4 [&::-webkit-slider-thumb]:h-4\",\n \"[&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:bg-primary-500\",\n \"[&::-webkit-slider-thumb]:shadow-md [&::-webkit-slider-thumb]:border-2 [&::-webkit-slider-thumb]:border-white\",\n \"[&::-webkit-slider-thumb]:hover:bg-primary-600 [&::-webkit-slider-thumb]:transition-colors\",\n \"[&::-moz-range-thumb]:w-4 [&::-moz-range-thumb]:h-4 [&::-moz-range-thumb]:rounded-full\",\n \"[&::-moz-range-thumb]:bg-primary-500 [&::-moz-range-thumb]:border-2 [&::-moz-range-thumb]:border-white\",\n \"[&::-moz-range-track]:bg-gray-200 dark:[&::-moz-range-track]:bg-gray-700\",\n \"[&::-moz-range-track]:rounded-full [&::-moz-range-track]:h-1.5\"\n )}\n />\n </div>\n </div>\n );\n}\n","import clsx from \"clsx\";\nimport { ITStatCardProps } from \"./stat-card.props\";\nimport ITText from \"@/components/text/text\";\n\nconst trendColors = {\n up: \"text-emerald-600 bg-emerald-50 dark:text-emerald-400 dark:bg-emerald-950/30\",\n down: \"text-rose-600 bg-rose-50 dark:text-rose-400 dark:bg-rose-950/30\",\n neutral: \"text-slate-500 bg-slate-100 dark:text-slate-400 dark:bg-slate-800\",\n};\n\nexport default function ITStatCard({\n label,\n value,\n trend,\n trendDirection = trend && trend.startsWith(\"-\") ? \"down\" : \"neutral\",\n icon,\n color = \"bg-primary-50 dark:bg-primary-950/20\",\n className,\n style,\n onClick,\n}: ITStatCardProps) {\n return (\n <div\n className={clsx(\"rounded-xl p-4 border border-slate-100 dark:border-slate-800\", color, className)}\n style={style}\n onClick={onClick}\n role={onClick ? \"button\" : undefined}\n tabIndex={onClick ? 0 : undefined}\n >\n <div className=\"flex items-start justify-between mb-1\">\n <ITText as=\"span\" className=\"text-xs font-medium text-slate-400 dark:text-slate-500\">{label}</ITText>\n {icon && <span className=\"text-slate-400\">{icon}</span>}\n </div>\n <div className=\"flex items-baseline gap-2\">\n <ITText as=\"span\" className=\"text-2xl font-bold text-slate-800 dark:text-white\">{value}</ITText>\n {trend && (\n <ITText as=\"span\" className={clsx(\"text-[11px] font-semibold px-1.5 py-0.5 rounded-md\", trendColors[trendDirection])}>\n {trend}\n </ITText>\n )}\n </div>\n </div>\n );\n}\n","import clsx from \"clsx\";\nimport { ITTextareaProps } from \"./textarea.props\";\nimport { inputLabel, inputError } from \"@/utils/styles\";\nimport ITText from \"@/components/text/text\";\n\nconst resizeMap = {\n none: \"resize-none\",\n vertical: \"resize-y\",\n horizontal: \"resize-x\",\n both: \"resize\",\n};\n\nexport default function ITTextarea({\n value,\n onChange,\n label,\n placeholder,\n rows = 4,\n disabled = false,\n error,\n className,\n name,\n maxLength,\n resize = \"vertical\",\n}: ITTextareaProps) {\n return (\n <div className={clsx(\"flex flex-col gap-1.5\", className)}>\n {label && (\n <ITText as=\"label\" className={inputLabel(!!error)} htmlFor={name}>\n {label}\n </ITText>\n )}\n <textarea\n id={name}\n name={name}\n value={value}\n onChange={(e) => onChange?.(e.target.value)}\n placeholder={placeholder}\n rows={rows}\n disabled={disabled}\n maxLength={maxLength}\n className={clsx(\n \"w-full border border-solid transition-all duration-200 rounded-lg px-3 py-2 text-sm outline-none\",\n \"focus:ring-2\",\n resizeMap[resize],\n error\n ? \"border-red-500 ring-red-100 focus:border-red-500 focus:ring-red-100\"\n : \"border-gray-300 focus:border-primary-500 focus:ring-primary-100\",\n disabled && \"opacity-50 cursor-not-allowed bg-gray-100 dark:bg-slate-800\"\n )}\n />\n {error && <ITText as=\"span\" className={inputError}>{error}</ITText>}\n </div>\n );\n}\n","import clsx from \"clsx\";\nimport { ITTripleFilterProps } from \"./tripleFilter.props\";\nimport { ColorsTypes } from \"@/types/colors.types\";\nimport ITText from \"@/components/text/text\";\n\nconst colorMap: Record<ColorsTypes, string> = {\n primary: \"text-primary-600\",\n secondary: \"text-secondary-600\",\n success: \"text-success-600\",\n danger: \"text-danger-600\",\n warning: \"text-warning-600\",\n info: \"text-info-600\",\n purple: \"text-purple-600\",\n error: \"text-danger-600\",\n gray: \"text-secondary-600\",\n};\n\n/**\n * @description Generic triple/segmented filter component with color support.\n */\nexport const ITTripleFilter = <T extends string | boolean>({\n value,\n onChange,\n options,\n color = \"primary\",\n className,\n}: ITTripleFilterProps<T>) => {\n return (\n <div\n className={clsx(\"flex bg-slate-100 p-1 rounded-xl gap-1 w-fit\", className)}\n >\n {options.map((option) => (\n <button\n key={String(option.value)}\n onClick={() => onChange(option.value)}\n className={clsx(\n \"px-4 py-1.5 rounded-lg text-[10px] font-bold uppercase tracking-wider transition-all duration-200 whitespace-nowrap\",\n value === option.value\n ? clsx(\"bg-white shadow-sm\", colorMap[color])\n : \"text-slate-400 hover:text-slate-600\"\n )}\n >\n <ITText as=\"span\">{option.label}</ITText>\n </button>\n ))}\n </div>\n );\n};\n\nexport default ITTripleFilter;\n","export const positionStyles = {\n \"top-right\": \"top-4 right-4\",\n \"top-center\": \"top-4 left-1/2 transform -translate-x-1/2\",\n \"top-left\": \"top-4 left-4\",\n \"bottom-right\": \"bottom-4 right-4\",\n \"bottom-center\": \"bottom-4 left-1/2 transform -translate-x-1/2\",\n \"bottom-left\": \"bottom-4 left-4\",\n};\n","import { positionStyles } from \"@/types/toast.types\";\nimport { theme } from \"@/theme/theme\";\nimport clsx from \"clsx\";\nimport { useEffect, useState } from \"react\";\nimport \"./toast.css\";\nimport { ITToastProps } from \"./toast.props\";\nimport { FaTimesCircle, FaCheckCircle, FaExclamationTriangle, FaInfoCircle, FaTimes } from \"react-icons/fa\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITToast({\n message,\n type = \"info\",\n duration = 1500,\n position = \"top-right\",\n onClose,\n}: ITToastProps) {\n const [isVisible, setIsVisible] = useState(true);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setIsVisible(false);\n setTimeout(() => {\n if (onClose) onClose();\n }, 300); // Wait for transition to finish\n }, duration);\n\n return () => clearTimeout(timer);\n }, [duration, onClose]);\n\n const handleClose = () => {\n setIsVisible(false);\n setTimeout(() => {\n if (onClose) onClose();\n }, 300);\n };\n\n // Resolve dynamic theme colors for background\n const isThemeColor = type in theme.colors;\n const backgroundColor = isThemeColor\n ? theme.colors[type as keyof typeof theme.colors][500]\n : theme.colors.primary[500];\n\n // Determine Icon based on type\n const TypeIcon = () => {\n switch (type) {\n case \"success\":\n return <FaCheckCircle className=\"w-5 h-5 flex-shrink-0\" />;\n case \"error\":\n case \"danger\":\n return <FaTimesCircle className=\"w-5 h-5 flex-shrink-0\" />;\n case \"warning\":\n return <FaExclamationTriangle className=\"w-5 h-5 flex-shrink-0\" />;\n case \"info\":\n default:\n return <FaInfoCircle className=\"w-5 h-5 flex-shrink-0\" />;\n }\n };\n\n return (\n <div\n className={clsx(\n \"fixed z-50 p-4 rounded-xl shadow-xl flex items-center justify-between gap-4 transition-all duration-300 text-white min-w-[300px]\",\n positionStyles[position],\n {\n \"opacity-100 translate-y-0 scale-100\": isVisible,\n \"opacity-0 scale-95\": !isVisible,\n \"-translate-y-4\": !isVisible && position.startsWith(\"top\"),\n \"translate-y-4\": !isVisible && position.startsWith(\"bottom\"),\n }\n )}\n style={{ backgroundColor }}\n role=\"alert\"\n >\n <div className=\"flex items-center gap-3\">\n <TypeIcon />\n <ITText as=\"span\" className=\"font-medium text-sm sm:text-base leading-snug\">{message}</ITText>\n </div>\n <button\n onClick={handleClose}\n className=\"p-1.5 rounded-full hover:bg-black/15 transition-colors focus:outline-none focus:ring-2 focus:ring-white/50\"\n aria-label=\"Close notification\"\n >\n <FaTimes className=\"w-4 h-4\" />\n </button>\n </div>\n );\n}\n","import React, { useState, useEffect, useRef } from \"react\";\nimport { useDropzone } from \"react-dropzone\";\n// import pdfjsLib from \"@/hooks/pdf\"; // Disabled as hook is missing\nimport clsx from \"clsx\";\nimport ITText from \"@/components/text/text\";\n\n/** Enum con tipos de archivo permitidos */\nexport enum FileTypeEnum {\n PDF = \"application/pdf\",\n XLS = \"application/vnd.ms-excel\",\n XLSX = \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n CSV = \"text/csv\",\n PNG = \"image/png\",\n JPG = \"image/jpg\",\n JPEG = \"image/jpeg\",\n}\n\n/** Enum para el estado de subida */\nexport enum UploadStatus {\n PENDING = \"pendiente\",\n UPLOADING = \"subiendo\",\n UPLOADED = \"subido\",\n ERROR = \"error\",\n}\n\n/** Props del componente */\nexport interface ITDropfileProps {\n onFileSelect: (file: File | null) => void;\n onCancel?: () => void;\n onSubmit?: (file: File) => void;\n acceptedFileTypes?: FileTypeEnum[];\n contentClassName?: string;\n containerClassName?: string;\n showStatusBadge?: boolean;\n uploadStatus?: UploadStatus;\n onStatusChange?: (status: UploadStatus) => void;\n initialPreviewUrl?: string | null;\n}\n\nconst ITDropfile: React.FC<ITDropfileProps> = ({\n onFileSelect,\n onCancel,\n onSubmit,\n contentClassName,\n containerClassName,\n acceptedFileTypes = [FileTypeEnum.PDF, FileTypeEnum.XLS, FileTypeEnum.XLSX, FileTypeEnum.JPG, FileTypeEnum.PNG, FileTypeEnum.JPEG],\n showStatusBadge = true,\n uploadStatus: externalStatus,\n onStatusChange,\n initialPreviewUrl,\n}) => {\n const [selectedFile, setSelectedFile] = useState<File | null>(null);\n const [fileType, setFileType] = useState<string | null>(null);\n // Initialize preview with prop if available\n const [imagePreview, setImagePreview] = useState<string | null>(initialPreviewUrl || null);\n const [isConfirmed, setIsConfirmed] = useState(false);\n // If initial URL exists, assume uploaded\n const [internalUploadStatus, setInternalUploadStatus] = useState<UploadStatus>(\n initialPreviewUrl ? UploadStatus.UPLOADED : UploadStatus.PENDING\n );\n const canvasRef = useRef<HTMLCanvasElement | null>(null);\n\n // Sync initialPreviewUrl if it changes\n useEffect(() => {\n if (initialPreviewUrl && !selectedFile) {\n setImagePreview(initialPreviewUrl);\n if (externalStatus === undefined) setInternalUploadStatus(UploadStatus.UPLOADED);\n }\n }, [initialPreviewUrl, selectedFile, externalStatus]);\n\n // Determinar qué estado usar (interno o externo)\n const uploadStatus = externalStatus || internalUploadStatus;\n\n // Función para actualizar el estado\n const setUploadStatus = (status: UploadStatus) => {\n if (externalStatus === undefined) {\n setInternalUploadStatus(status);\n }\n onStatusChange?.(status);\n };\n\n // 🔹 Configuración correcta para react-dropzone\n const getAcceptedFileTypes = () => {\n const accept: Record<string, string[]> = {};\n \n acceptedFileTypes.forEach(type => {\n switch (type) {\n case FileTypeEnum.PDF:\n accept[FileTypeEnum.PDF] = [\".pdf\"];\n break;\n case FileTypeEnum.XLS:\n accept[FileTypeEnum.XLS] = [\".xls\"];\n break;\n case FileTypeEnum.XLSX:\n accept[FileTypeEnum.XLSX] = [\".xlsx\"];\n break;\n case FileTypeEnum.CSV:\n accept[FileTypeEnum.CSV] = [\".csv\"];\n break;\n case FileTypeEnum.PNG:\n accept[FileTypeEnum.PNG] = [\".png\"];\n break;\n case FileTypeEnum.JPG:\n accept[FileTypeEnum.JPG] = [\".jpg\", \".jpeg\"];\n break;\n case FileTypeEnum.JPEG:\n accept[FileTypeEnum.JPEG] = [\".jpeg\", \".jpg\"];\n break;\n }\n });\n \n return accept;\n };\n\n // 🔹 Obtener extensiones para mostrar en el label\n const getFileExtensions = () => {\n const extensions: string[] = [];\n \n acceptedFileTypes.forEach(type => {\n switch (type) {\n case FileTypeEnum.PDF:\n if (!extensions.includes(\"PDF\")) extensions.push(\"PDF\");\n break;\n case FileTypeEnum.XLS:\n case FileTypeEnum.XLSX:\n if (!extensions.includes(\"EXCEL\")) extensions.push(\"EXCEL\");\n break;\n case FileTypeEnum.CSV:\n if (!extensions.includes(\"CSV\")) extensions.push(\"CSV\");\n break;\n case FileTypeEnum.PNG:\n case FileTypeEnum.JPG:\n case FileTypeEnum.JPEG:\n if (!extensions.includes(\"IMAGEN\")) extensions.push(\"IMAGEN\");\n break;\n }\n });\n \n return extensions.join(\", \");\n };\n\n // Componente para el badge de estado\n const StatusBadge = ({ status }: { status: UploadStatus }) => {\n const config = {\n [UploadStatus.PENDING]: {\n label: \"Pendiente\",\n color: \"bg-warning-100 text-warning-800 border-warning-200\",\n dotColor: \"bg-warning-400\",\n },\n [UploadStatus.UPLOADING]: {\n label: \"Subiendo...\",\n color: \"bg-primary-100 text-primary-800 border-primary-200\",\n dotColor: \"bg-primary-400 animate-pulse\",\n },\n [UploadStatus.UPLOADED]: {\n label: \"Subido\",\n color: \"bg-success-100 text-success-800 border-success-200\",\n dotColor: \"bg-success-400\",\n },\n [UploadStatus.ERROR]: {\n label: \"Error\",\n color: \"bg-danger-100 text-danger-800 border-danger-200\",\n dotColor: \"bg-danger-400\",\n },\n };\n\n const { label, color, dotColor } = config[status];\n\n return (\n <div className={`inline-flex items-center gap-2 px-2.5 py-1 rounded-full border ${color}`}>\n <div className={`w-2 h-2 rounded-full ${dotColor}`}></div>\n <ITText as=\"span\" className=\"text-xs font-medium flex items-center gap-1.5\">\n {label}\n </ITText>\n </div>\n );\n };\n\n const onDrop = (acceptedFiles: File[]) => {\n const file = acceptedFiles[0];\n if (file) {\n if (acceptedFileTypes.includes(file.type as FileTypeEnum)) {\n setSelectedFile(file);\n setFileType(file.type);\n setUploadStatus(UploadStatus.PENDING);\n \n if (imagePreview) {\n URL.revokeObjectURL(imagePreview);\n setImagePreview(null);\n }\n \n if (file.type.startsWith('image/')) {\n const previewUrl = URL.createObjectURL(file);\n setImagePreview(previewUrl);\n }\n } else {\n alert(`Tipo de archivo no permitido.`);\n setSelectedFile(null);\n setFileType(null);\n setImagePreview(null);\n setUploadStatus(UploadStatus.PENDING);\n }\n }\n };\n\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n onDrop,\n accept: getAcceptedFileTypes(),\n maxFiles: 1,\n });\n\n // Renderizar PDF si aplica (COMENTADO)\n useEffect(() => {\n const renderPDF = async () => {\n /*\n if (selectedFile && fileType === FileTypeEnum.PDF) {\n // Logic for PDF would go here\n }\n */\n };\n renderPDF();\n }, [selectedFile, fileType]);\n\n useEffect(() => {\n return () => {\n if (imagePreview) {\n URL.revokeObjectURL(imagePreview);\n }\n };\n }, [imagePreview]);\n\n const handleConfirm = async () => {\n if (selectedFile) {\n setIsConfirmed(true);\n setUploadStatus(UploadStatus.UPLOADING);\n \n try {\n await new Promise(resolve => setTimeout(resolve, 1500)); // Simulación\n onFileSelect(selectedFile);\n onSubmit?.(selectedFile);\n setUploadStatus(UploadStatus.UPLOADED);\n } catch (error) {\n setUploadStatus(UploadStatus.ERROR);\n console.error(\"Error al subir archivo:\", error);\n }\n }\n };\n\n const handleCancel = () => {\n setSelectedFile(null);\n setFileType(null);\n setIsConfirmed(false);\n setUploadStatus(UploadStatus.PENDING);\n if (imagePreview) {\n URL.revokeObjectURL(imagePreview);\n setImagePreview(null);\n }\n onFileSelect(null);\n onCancel?.();\n };\n\n const handleDelete = () => {\n handleCancel();\n };\n\n const isImage = fileType && fileType.startsWith('image/');\n\n return (\n <div className={clsx(\"w-full transition-all duration-300\", containerClassName)}>\n <div className=\"flex items-center justify-between mb-2\">\n <label className=\"block text-sm font-semibold text-gray-700\">\n <ITText as=\"span\">Subir archivo </ITText><ITText as=\"span\" className=\"text-gray-400 font-normal text-xs\">({getFileExtensions()})</ITText>\n </label>\n \n {showStatusBadge && selectedFile && (\n <StatusBadge status={uploadStatus} />\n )}\n </div>\n\n {!selectedFile && !imagePreview ? (\n <div\n {...getRootProps()}\n className={`\n relative group flex flex-col items-center justify-center w-full p-6 \n border-2 border-dashed rounded-xl cursor-pointer transition-all duration-300 ease-in-out\n ${\n isDragActive\n ? \"border-primary-500 bg-primary-50 scale-[1.01]\"\n : \"border-gray-300 bg-white hover:border-primary-400 hover:bg-gray-50\"\n }\n `}\n >\n <input {...getInputProps()} />\n \n <div className={`mb-3 p-3 rounded-full transition-colors duration-300 ${isDragActive ? 'bg-primary-100' : 'bg-gray-100 group-hover:bg-primary-50'}`}>\n <svg \n className={`w-6 h-6 transition-colors duration-300 ${isDragActive ? 'text-primary-600' : 'text-gray-400 group-hover:text-primary-500'}`} \n fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12\" />\n </svg>\n </div>\n\n <div className=\"text-center space-y-1\">\n <ITText as=\"p\" className={`text-sm font-medium transition-colors duration-300 ${isDragActive ? 'text-primary-700' : 'text-gray-700'}`}>\n {isDragActive ? \"¡Suelta aquí!\" : \"Haz clic o arrastra\"}\n </ITText>\n </div>\n </div>\n ) : (\n <div className=\"w-full bg-white border border-gray-200 rounded-xl shadow-sm overflow-hidden animate-fade-in\">\n <div className=\"flex items-center justify-between p-3 bg-gray-50 border-b border-gray-100\">\n <div className=\"flex items-center gap-3 overflow-hidden\">\n <div className=\"flex-shrink-0 w-8 h-8 rounded-lg bg-primary-100 flex items-center justify-center text-primary-600\">\n {(selectedFile && fileType?.startsWith('image/')) || (!selectedFile && imagePreview) ? (\n <svg className=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z\" />\n </svg>\n ) : (\n <svg className=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" />\n </svg>\n )}\n </div>\n <div className=\"min-w-0\">\n <ITText as=\"p\" className=\"text-xs font-medium text-gray-900 truncate\" title={selectedFile?.name || \"Imagen cargada\"}>\n {selectedFile?.name || \"Imagen cargada\"}\n </ITText>\n <ITText as=\"p\" className=\"text-[10px] text-gray-500\">\n {selectedFile ? (selectedFile.size / 1024 / 1024).toFixed(2) + \" MB\" : \"\"}\n </ITText>\n </div>\n </div>\n </div>\n\n <div className={clsx(\"relative bg-gray-100 flex items-center justify-center\", !contentClassName ? \"max-h-[200px] min-h-[100px] overflow-auto\" : contentClassName)}>\n {((selectedFile && fileType?.startsWith('image/')) || (!selectedFile && imagePreview)) ? (\n <img \n src={imagePreview} \n alt=\"Vista previa\" \n className=\"w-full h-full object-contain max-h-[200px]\"\n />\n ) : (\n <div className=\"py-8 flex flex-col items-center text-gray-400\">\n <svg className=\"w-10 h-10 mb-2 opacity-50\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z\" />\n </svg>\n <ITText as=\"span\" className=\"text-xs\">Sin vista previa</ITText>\n </div>\n )}\n </div>\n\n <div className=\"px-3 py-2 bg-white border-t border-gray-100 flex justify-end gap-2\">\n {!isConfirmed ? (\n <>\n <button\n type=\"button\"\n onClick={handleCancel}\n className=\"px-3 py-1.5 text-xs font-medium text-gray-700 bg-white border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors\"\n >\n <ITText as=\"span\">Cancelar</ITText>\n </button>\n <button\n type=\"button\"\n onClick={handleConfirm}\n className=\"px-3 py-1.5 text-xs font-medium text-white bg-primary-600 rounded-lg hover:bg-primary-700 shadow-sm transition-colors flex items-center gap-1\"\n >\n <ITText as=\"span\">Confirmar</ITText>\n <svg className=\"w-3 h-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n </button>\n </>\n ) : (\n <button\n type=\"button\"\n onClick={handleDelete}\n className=\"px-3 py-1.5 text-xs font-medium text-danger-600 bg-danger-50 border border-danger-100 rounded-lg hover:bg-danger-100 transition-colors flex items-center gap-1\"\n >\n <svg className=\"w-3 h-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\" />\n </svg>\n <ITText as=\"span\">Eliminar</ITText>\n </button>\n )}\n </div>\n\n {uploadStatus === UploadStatus.UPLOADING && (\n <div className=\"px-4 pb-2\">\n <div className=\"w-full bg-gray-200 rounded-full h-1.5\">\n <div \n className=\"bg-primary-600 h-1.5 rounded-full transition-all duration-1000 ease-out\"\n style={{ \n width: '100%',\n animation: 'pulse 1.5s cubic-bezier(0.4, 0, 0.6, 1) infinite'\n }}\n ></div>\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n\nexport default ITDropfile;","import { useState } from \"react\";\nimport ITTopBar from \"../topbar/topbar\";\nimport ITSidebar from \"../sidebar/sidebar\";\nimport { ITLayoutProps } from \"./layout.props\";\nexport default function ITLayout({\n topBar,\n sidebar,\n children,\n className = \"\",\n contentClassName = \"\",\n}: ITLayoutProps) {\n\n // Desktop states\n const [desktopCollapsed, setDesktopCollapsed] = useState(true); // Default to collapsed\n\n // Mobile drawer state\n const [mobileSidebarOpen, setMobileSidebarOpen] = useState(false);\n\n return (\n <div className={`flex flex-col h-screen overflow-hidden w-full ${className}`}>\n \n {/* TOPBAR - Full Width at Top */}\n <ITTopBar\n {...topBar}\n showMobileMenuButton\n onToggleMobileMenu={() => setMobileSidebarOpen(v => !v)}\n />\n\n <div className=\"flex flex-1 overflow-hidden relative\" style={{ backgroundColor: \"var(--layout-bg, #f8fafc)\" }}>\n \n {/* DESKTOP SIDEBAR - Floating over content when expanded */}\n <div className=\"hidden lg:block relative z-40 h-full\">\n {/* Spacer to keep main content from shifting. Width matches collapsed sidebar. */}\n <div className=\"w-[88px] h-full flex-shrink-0\" />\n \n <div className=\"absolute top-0 left-0 h-full\">\n <ITSidebar\n {...sidebar}\n isCollapsed={desktopCollapsed}\n onToggleCollapse={() => setDesktopCollapsed(v => !v)}\n visibleOnMobile={false}\n className={`h-full drop-shadow-2xl transition-all duration-400 ease-[cubic-bezier(0.2,0,0,1)] flex-shrink-0`}\n />\n </div>\n </div>\n\n {/* MOBILE SIDEBAR PANE */}\n {mobileSidebarOpen && (\n <div\n className=\"lg:hidden fixed inset-0 z-50 transition-opacity duration-300 backdrop-blur-sm bg-black/40\"\n onClick={() => setMobileSidebarOpen(false)}\n >\n <div \n className=\"h-full w-fit flex transform transition-transform duration-300 ease-[cubic-bezier(0.2,0,0,1)]\"\n onClick={(e) => e.stopPropagation()} \n >\n <ITSidebar\n {...sidebar}\n isCollapsed={false}\n visibleOnMobile={true}\n className=\"h-full shadow-2xl relative z-[60]\"\n onToggleCollapse={() => setMobileSidebarOpen(false)}\n onItemClick={() => setMobileSidebarOpen(false)}\n onSubItemClick={() => setMobileSidebarOpen(false)}\n />\n </div>\n </div>\n )}\n\n {/* MAIN CONTENT AREA */}\n <main className=\"flex-1 overflow-y-auto w-full custom-scrollbar relative z-0\">\n <div className={`mx-auto w-full h-full ${contentClassName}`}>\n {children}\n </div>\n </main>\n\n </div>\n </div>\n );\n}\n","import { FaUserCircle, FaBars } from \"react-icons/fa\";\nimport useClickOutside from \"../../hooks/useClickOutside\";\nimport { useRef, useState } from \"react\";\nimport { ITTopBarProps } from \"./topbar.props\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITTopBar({\n logo,\n logoText,\n userMenu,\n showMobileMenuButton,\n onToggleMobileMenu,\n navItems,\n onNavItemClick,\n}: ITTopBarProps) {\n const [isUserMenuOpen, setIsUserMenuOpen] = useState(false);\n const userMenuRef = useRef<HTMLDivElement>(null);\n\n useClickOutside(userMenuRef, () => setIsUserMenuOpen(false));\n\n return (\n <header \n className=\"sticky top-0 z-40 backdrop-blur-md transition-all duration-300\"\n style={{\n backgroundColor: \"var(--topbar-bg, rgba(255, 255, 255, 0.9))\",\n borderBottom: \"1px solid var(--topbar-border, #e2e8f0)\",\n boxShadow: \"none\",\n }}\n >\n <div className=\"flex items-center justify-between h-[72px] px-6 lg:px-8\">\n\n {/* LEFT AREA: Logo & Mobile Toggle */}\n <div className=\"flex items-center gap-5\">\n\n {/* Mobile Sidebar Toggle */}\n {showMobileMenuButton && (\n <button\n className=\"lg:hidden p-2.5 rounded-xl transition-colors duration-200\"\n style={{\n color: \"var(--topbar-icon, #64748b)\",\n }}\n onMouseEnter={(e) => e.currentTarget.style.backgroundColor = \"var(--topbar-user-hover, #f1f5f9)\"}\n onMouseLeave={(e) => e.currentTarget.style.backgroundColor = \"transparent\"}\n onClick={onToggleMobileMenu}\n >\n <FaBars className=\"w-[1.125rem] h-[1.125rem]\" />\n </button>\n )}\n\n {/* Logo */}\n <div className=\"flex items-center gap-3\">\n {logo && (\n <div className=\"flex-shrink-0 drop-shadow-sm\">\n {logo}\n </div>\n )}\n \n {logoText && (\n <ITText as=\"span\" \n className=\"text-[1.15rem] font-bold tracking-tight\"\n style={{ color: \"var(--topbar-text, #0f172a)\" }}\n >\n {logoText}\n </ITText>\n )}\n </div>\n\n {/* Top Navigation Items (Desktop) */}\n {navItems && navItems.length > 0 && (\n <nav className=\"hidden md:flex ml-8 space-x-1 border-l pl-8\" style={{ borderColor: \"var(--topbar-border, #e2e8f0)\" }}>\n {navItems.map((item) => (\n <button\n key={item.id}\n onClick={() => onNavItemClick?.(item.id)}\n className=\"px-4 py-2 rounded-lg font-medium text-[0.9rem] transition-all duration-200 ease-[cubic-bezier(0.2,0,0,1)]\"\n style={{ color: \"var(--topbar-text, #475569)\" }}\n onMouseEnter={(e) => {\n e.currentTarget.style.color = \"var(--topbar-text, #0f172a)\";\n e.currentTarget.style.backgroundColor = \"var(--topbar-user-hover, #f1f5f9)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.color = \"var(--topbar-text, #475569)\";\n e.currentTarget.style.backgroundColor = \"transparent\";\n }}\n >\n <div className=\"flex items-center gap-2\">\n {item.icon && <span className=\"opacity-70\">{item.icon}</span>}\n <ITText as=\"span\">{item.label}</ITText>\n </div>\n </button>\n ))}\n </nav>\n )}\n </div>\n\n {/* RIGHT AREA: User Menu */}\n {userMenu && (\n <div className=\"relative\">\n <button\n type=\"button\"\n className=\"flex items-center gap-3 rounded-full pl-2 pr-4 py-1.5 transition-all duration-200 ease-[cubic-bezier(0.2,0,0,1)] border border-transparent hover:border-gray-200\"\n style={{\n backgroundColor: isUserMenuOpen ? \"var(--topbar-user-hover, #f1f5f9)\" : \"transparent\",\n }}\n onMouseEnter={(e) => {\n if (!isUserMenuOpen) e.currentTarget.style.backgroundColor = \"var(--topbar-user-hover, #f1f5f9)\";\n }}\n onMouseLeave={(e) => {\n if (!isUserMenuOpen) e.currentTarget.style.backgroundColor = \"transparent\";\n }}\n onClick={() => setIsUserMenuOpen(!isUserMenuOpen)}\n >\n {/* Avatar */}\n <div className=\"relative\">\n {userMenu.userImage ? (\n <img\n className=\"w-9 h-9 rounded-full object-cover ring-2 ring-white shadow-sm\"\n src={userMenu.userImage}\n alt=\"Current user\"\n />\n ) : (\n <div className=\"w-9 h-9 rounded-full bg-slate-100 flex items-center justify-center ring-2 ring-white shadow-sm\">\n <FaUserCircle className=\"w-6 h-6\" style={{ color: \"var(--topbar-icon, #94a3b8)\" }} />\n </div>\n )}\n {/* Active dot indicator */}\n <div className=\"absolute bottom-0 right-0 w-2.5 h-2.5 bg-green-500 border-2 border-white rounded-full\"></div>\n </div>\n\n {/* Name Details */}\n <div className=\"hidden sm:flex flex-col text-left py-0.5\">\n <ITText as=\"span\" \n className=\"font-semibold text-[0.85rem] leading-tight\"\n style={{ color: \"var(--topbar-user-text, #0f172a)\" }}\n >\n {userMenu.userName}\n </ITText>\n <ITText as=\"span\" \n className=\"text-[0.7rem] font-medium\"\n style={{ color: \"var(--topbar-user-subtitle, #64748b)\" }}\n >\n {userMenu.userEmail}\n </ITText>\n </div>\n </button>\n\n {/* Dropdown Menu */}\n <div\n ref={userMenuRef}\n className={`\n absolute right-0 mt-3 w-64 rounded-2xl shadow-[0_10px_40px_-10px_rgba(0,0,0,0.15)] z-50 overflow-hidden transform origin-top-right transition-all duration-200 ease-[cubic-bezier(0.2,0,0,1)]\n ${isUserMenuOpen ? \"scale-100 opacity-100 translate-y-0\" : \"scale-95 opacity-0 -translate-y-2 pointer-events-none\"}\n `}\n style={{ \n backgroundColor: \"var(--topbar-user-dropdown-bg, #ffffff)\",\n border: \"1px solid var(--topbar-user-dropdown-border, #f1f5f9)\"\n }}\n >\n {/* Dropdown Header */}\n <div className=\"px-5 py-4 border-b\" style={{ borderColor: \"var(--topbar-user-dropdown-border, #f1f5f9)\", backgroundColor: \"var(--topbar-user-bg, #f8fafc)\" }}>\n <ITText as=\"span\" className=\"block font-bold text-[0.9rem]\" style={{ color: \"var(--topbar-user-text, #0f172a)\" }}>\n {userMenu.userName}\n </ITText>\n <ITText as=\"span\" className=\"block text-xs font-medium truncate mt-0.5\" style={{ color: \"var(--topbar-user-subtitle, #64748b)\" }}>\n {userMenu.userEmail}\n </ITText>\n </div>\n \n {/* Dropdown Items */}\n <ul className=\"py-2\">\n {userMenu.menuItems.map((m, i) => {\n const isDestructive = m.label.toLowerCase().includes('salir') || m.label.toLowerCase().includes('cerrar') || m.label.toLowerCase().includes('logout');\n \n return (\n <li key={i} className=\"px-2\">\n {i === userMenu.menuItems.length - 1 && isDestructive && i > 0 && (\n <div className=\"h-px bg-slate-100 my-1 mx-2\"></div>\n )}\n <button\n onClick={(e) => {\n m.onClick();\n setIsUserMenuOpen(false);\n }}\n className=\"block w-full text-left px-3 py-2.5 rounded-xl text-[0.875rem] font-medium transition-colors duration-150\"\n style={{ color: isDestructive ? '#ef4444' : \"var(--topbar-user-text, #334155)\" }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = isDestructive ? '#fef2f2' : \"var(--topbar-user-item-hover, #f8fafc)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = \"transparent\";\n }}\n >\n <ITText as=\"span\">{m.label}</ITText>\n </button>\n </li>\n )\n })}\n </ul>\n </div>\n </div>\n )}\n </div>\n </header>\n );\n}\n","export type LoaderSize = \"sm\" | \"md\" | \"lg\" | \"xl\";\nexport type LoaderVariant = \"spinner\" | \"dots\" | \"bar\" | \"pulse\";\n\nexport const sizeClasses: Record<LoaderSize, string> = {\n sm: \"h-4 w-4\",\n md: \"h-8 w-8\",\n lg: \"h-12 w-12\",\n xl: \"h-16 w-16\",\n};\n","import { theme } from \"@/theme/theme\";\nimport { LoaderSize, sizeClasses } from \"@/types/loader.types\";\nimport { LoaderProps } from \"./loader.props\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITLoader({\n size = \"md\",\n variant = \"spinner\",\n color = \"primary\", // Default to semantic primary\n className = \"\",\n}: LoaderProps) {\n \n // Resolve color: Check if it's a semantic color in theme, otherwise use as-is\n const isSemantic = color in theme.colors;\n const resolvedColor = isSemantic \n ? theme.colors[color as keyof typeof theme.colors][500] \n : color;\n\n // Helper for conditional styles\n const isCssValue = isSemantic || color.startsWith(\"#\") || color.startsWith(\"rgb\");\n \n // Base style object\n const style = isCssValue ? { color: resolvedColor } : {};\n const bgStyle = isCssValue ? { backgroundColor: resolvedColor } : {};\n\n // Legacy class handling: if it's not a CSS value, inject it as a class\n const colorClass = !isCssValue ? color : \"\";\n\n if (variant === \"spinner\") {\n return (\n <div\n className={`inline-block ${sizeClasses[size]} animate-spin rounded-full border-2 border-solid border-current border-r-transparent align-[-0.125em] motion-reduce:animate-[spin_1.5s_linear_infinite] ${colorClass} ${className}`}\n role=\"status\"\n style={style}\n >\n <ITText as=\"span\" className=\"!absolute !-m-px !h-px !w-px !overflow-hidden !whitespace-nowrap !border-0 !p-0 ![clip:rect(0,0,0,0)]\">\n Loading...\n </ITText>\n </div>\n );\n }\n\n // Dots loader\n if (variant === \"dots\") {\n return (\n <div\n className={`flex items-center justify-center space-x-2 ${className}`}\n >\n {[...Array(3)].map((_, i) => (\n <div\n key={i}\n className={`${\n sizeClasses[size.replace(/l|g/, \"\") as LoaderSize]\n } animate-bounce rounded-full ${colorClass}`}\n style={{ \n ...bgStyle,\n animationDelay: `${i * 0.1}s` \n }}\n />\n ))}\n </div>\n );\n }\n\n // Bar loader\n if (variant === \"bar\") {\n // For bar, we need a lighter shade for the background 'track' if possible, \n // or just use gray-200.\n // And the progress bar uses the resolved color.\n return (\n <div\n className={`w-full ${\n size === \"sm\"\n ? \"h-1\"\n : size === \"md\"\n ? \"h-1.5\"\n : size === \"lg\"\n ? \"h-2\"\n : \"h-2.5\"\n } bg-gray-200 rounded-full overflow-hidden ${className}`}\n >\n <div\n className={`h-full animate-progress ${colorClass}`}\n style={{\n backgroundColor: resolvedColor, \n // Simplified gradient for modern look, or keep it solid\n backgroundImage: isCssValue \n ? `linear-gradient(to right, ${resolvedColor}DD, ${resolvedColor})` \n : undefined,\n animation: \"progress 1.5s ease-in-out infinite\",\n }}\n />\n </div>\n );\n }\n\n // Pulse loader\n if (variant === \"pulse\") {\n return (\n <div\n className={`rounded-full ${sizeClasses[size]} animate-pulse ${colorClass} ${className}`}\n style={bgStyle}\n />\n );\n }\n\n return null;\n}\n","import clsx from \"clsx\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { ITStepperProps, Step } from \"./stepper.props\";\nimport { theme } from \"@/theme/theme\";\nimport ITButton from \"../button/button\";\nimport { FaChevronLeft, FaChevronRight, FaCheck } from \"react-icons/fa\";\nimport ITText from \"@/components/text/text\";\n\nexport default function ITStepper({\n steps,\n currentStep,\n onFinish,\n onStepChange,\n allowClickToJump = true,\n useIcons = false,\n disableNext = false,\n containerClassName,\n stepClassName,\n scrollableContent = false,\n maxContentHeight = \"400px\",\n color = \"primary\",\n}: ITStepperProps) {\n const [direction, setDirection] = useState<\"next\" | \"prev\">(\"next\");\n const contentRef = useRef<HTMLDivElement | null>(null);\n const progressRef = useRef<HTMLDivElement | null>(null);\n\n // Resolve theme color\n const isThemeColor = color in theme.colors;\n const resolvedColor = isThemeColor\n ? theme.colors[color as keyof typeof theme.colors][500]\n : color;\n\n // Effect for notifying parent of step change\n useEffect(() => {\n onStepChange?.(currentStep);\n }, [currentStep, onStepChange]);\n\n // Effect for animation and focus management\n useEffect(() => {\n const pct = (currentStep / Math.max(1, steps.length - 1)) * 100;\n\n if (progressRef.current) {\n progressRef.current.style.width = `${pct}%`;\n progressRef.current.style.backgroundColor = resolvedColor;\n }\n\n if (contentRef.current) {\n contentRef.current.classList.remove(\n \"animate-slide-in-left\",\n \"animate-slide-in-right\"\n );\n requestAnimationFrame(() => {\n contentRef.current?.classList.add(\n direction === \"next\"\n ? \"animate-slide-in-right\"\n : \"animate-slide-in-left\"\n );\n });\n }\n\n contentRef.current?.focus();\n }, [currentStep, direction, steps.length, resolvedColor]);\n\n\n const nextStep = () => {\n if (disableNext) return;\n if (currentStep < steps.length - 1) {\n setDirection(\"next\");\n onStepChange?.(currentStep + 1);\n } else {\n onFinish?.();\n }\n };\n\n const prevStep = () => {\n if (currentStep > 0) {\n setDirection(\"prev\");\n onStepChange?.(currentStep - 1);\n }\n };\n\n const jumpTo = (index: number) => {\n if (!allowClickToJump) return;\n if (index <= currentStep) {\n setDirection(index > currentStep ? \"next\" : \"prev\");\n onStepChange?.(index);\n }\n };\n\n const renderStepContent = (\n index: number,\n isCompleted: boolean,\n isActive: boolean\n ) => {\n const step = steps[index];\n\n if (isCompleted) {\n return <FaCheck className=\"w-4 h-4\" />;\n }\n\n if (step.icon && useIcons) {\n return (\n <div className=\"flex items-center justify-center w-5 h-5\">\n {step.icon}\n </div>\n );\n }\n\n return <ITText as=\"span\" className=\"text-sm font-semibold\">{index + 1}</ITText>;\n };\n\n return (\n <div className={clsx(\"w-full max-w-5xl mx-auto px-4\", containerClassName)}>\n <div className=\"relative mb-8\">\n <div\n className=\"absolute left-6 right-6 top-5 h-1 bg-gray-200 rounded-full z-0\"\n aria-hidden\n />\n <div\n ref={progressRef}\n className=\"absolute left-6 top-5 h-1 rounded-full z-10 transition-all duration-500 ease-in-out\"\n aria-hidden\n />\n\n <div className=\"flex items-start justify-between space-x-2 relative z-20\">\n {steps.map((step, idx) => {\n const isActive = idx === currentStep;\n const isCompleted = idx < currentStep;\n const hasIcon = step.icon && useIcons;\n\n return (\n <button\n type=\"button\"\n key={idx}\n onClick={() => jumpTo(idx)}\n disabled={!allowClickToJump && idx !== currentStep}\n aria-current={isActive ? \"step\" : undefined}\n aria-label={`Paso ${idx + 1} ${step.label}`}\n className=\"flex-1 group\"\n title={step.label}\n >\n <div className=\"flex flex-col items-center\">\n <div\n className={clsx(\n \"flex items-center justify-center w-11 h-11 rounded-full border-2 transition-all duration-300 transform\",\n hasIcon && \"p-2\",\n isCompleted && \"bg-slate-400 border-slate-400 text-white scale-100 shadow\",\n isActive && \"text-white scale-110 shadow-lg\",\n !isActive && !isCompleted && \"bg-white border-gray-300 text-gray-400\"\n )}\n style={isActive ? { backgroundColor: resolvedColor, borderColor: resolvedColor } : undefined}\n >\n {renderStepContent(idx, isCompleted, isActive)}\n </div>\n\n <ITText\n as=\"span\"\n className={clsx(\n \"mt-2 text-xs sm:text-sm font-medium transition-colors text-center\",\n isCompleted ? \"text-slate-400\" : !isActive && \"text-gray-400\"\n )}\n style={isActive ? { color: resolvedColor } : undefined}\n >\n {step.label}\n </ITText>\n </div>\n </button>\n );\n })}\n </div>\n </div>\n\n {/* --- CONTENIDO DEL STEP --- */}\n <div\n ref={contentRef}\n tabIndex={-1}\n role=\"region\"\n aria-labelledby={`step-${currentStep}`}\n className={clsx(\n stepClassName,\n \"bg-white border border-gray-100 rounded-2xl shadow-lg min-h-[280px] transition-transform duration-400 no-scrollbar p-6\",\n scrollableContent && \"overflow-y-auto hide-scrollbar\"\n )}\n style={\n scrollableContent && maxContentHeight\n ? { maxHeight: maxContentHeight }\n : undefined\n }\n >\n {steps[currentStep].content}\n </div>\n\n {/* --- BOTONES DE CONTROL --- */}\n <div className=\"flex justify-between items-center mt-6\">\n <ITButton\n variant=\"outlined\"\n color=\"secondary\"\n disabled={currentStep === 0}\n onClick={prevStep}\n >\n <div className=\"flex items-center gap-2\">\n <FaChevronLeft />\n <ITText as=\"span\">Atrás</ITText>\n </div>\n </ITButton>\n\n <div className=\"flex items-center gap-3\">\n <ITText as=\"div\" className=\"text-sm text-gray-500 mr-2 hidden sm:block\">\n Paso {currentStep + 1} de {steps.length}\n </ITText>\n \n <ITButton\n variant=\"solid\"\n color={color as any}\n disabled={disableNext}\n onClick={nextStep}\n >\n <div className=\"flex items-center gap-2\">\n <ITText as=\"span\">{currentStep === steps.length - 1 ? \"Finalizar\" : \"Siguiente\"}</ITText>\n {currentStep === steps.length - 1 ? <FaCheck /> : <FaChevronRight />}\n </div>\n </ITButton>\n </div>\n </div>\n </div>\n );\n}\n","import * as Yup from \"yup\";\nimport { FieldConfig } from \"./field.types\";\nexport const createValidationSchema = (fields: FieldConfig[]) =>\n Yup.object().shape(\n fields.reduce((acc, field) => {\n if (field.validation) {\n acc[field.name] = field.validation;\n }\n return acc;\n }, {} as Record<string, Yup.AnySchema>)\n );\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,mBAA0B;AAE1B,IAAM,kBAAkB,CACtB,KACA,aACG;AACH,8BAAU,MAAM;AACd,UAAM,qBAAqB,CAAC,UAAsB;AAChD,UAAI,IAAI,WAAW,CAAC,IAAI,QAAQ,SAAS,MAAM,MAAc,GAAG;AAC9D,iBAAS;AAAA,MACX;AAAA,IACF;AAEA,aAAS,iBAAiB,aAAa,kBAAkB;AACzD,WAAO,MAAM;AACX,eAAS,oBAAoB,aAAa,kBAAkB;AAAA,IAC9D;AAAA,EACF,GAAG,CAAC,KAAK,QAAQ,CAAC;AACpB;AAEA,IAAO,0BAAQ;;;ACpBf,IAAAC,gBAAyD;AAelD,SAAS,mBAAmB;AAAA,EACjC,eAAe;AAAA,EACf,aAAa;AAAA,EACb;AACF,GAAwD;AACtD,QAAM,CAAC,YAAY,aAAa,QAAI,wBAAS,YAAY;AACzD,QAAM,iBAAa,sBAA6C,IAAI;AAEpE,QAAM,sBAAkB;AAAA,IACtB,CAAC,UAAkB;AACjB,UAAI,WAAW,QAAS,cAAa,WAAW,OAAO;AACvD,iBAAW,UAAU,WAAW,MAAM;AACpC,iBAAS,KAAK;AAAA,MAChB,GAAG,UAAU;AAAA,IACf;AAAA,IACA,CAAC,UAAU,UAAU;AAAA,EACvB;AAEA,QAAM,yBAAqB;AAAA,IACzB,CAAC,UAAkB;AACjB,oBAAc,KAAK;AACnB,sBAAgB,KAAK;AAAA,IACvB;AAAA,IACA,CAAC,eAAe;AAAA,EAClB;AAEA,QAAM,wBAAoB,2BAAY,MAAM;AAC1C,kBAAc,EAAE;AAChB,aAAS,EAAE;AACX,QAAI,WAAW,QAAS,cAAa,WAAW,OAAO;AAAA,EACzD,GAAG,CAAC,QAAQ,CAAC;AAEb,+BAAU,MAAM;AACd,WAAO,MAAM;AACX,UAAI,WAAW,QAAS,cAAa,WAAW,OAAO;AAAA,IACzD;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO,EAAE,YAAY,eAAe,oBAAoB,kBAAkB;AAC5E;;;ACtDA,IAAAC,gBAAuD;AACvD,UAAqB;AAuBd,SAAS,eAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA,gBAAAC;AAAA,EACA;AACF,GAAsD;AACpD,QAAM,CAAC,WAAW,YAAY,QAAI,wBAAS,KAAK;AAChD,QAAM,CAAC,WAAW,YAAY,QAAI,wBAAY,EAAE,GAAG,IAAI,CAAC;AACxD,QAAM,CAAC,QAAQ,SAAS,QAAI,wBAAiC,CAAC,CAAC;AAC/D,QAAM,aAAS,sBAAO,GAAG;AACzB,SAAO,UAAU;AAEjB,QAAM,kBAAc;AAAA,IAClB,OAAO,YAAgD;AACrD,YAAM,YAAoC,CAAC;AAE3C,UAAI,kBAAkB;AACpB,YAAI;AACF,gBAAM,iBAAiB,SAAS,SAAS,EAAE,YAAY,MAAM,CAAC;AAAA,QAChE,SAAS,UAAU;AACjB,cAAI,oBAAwB,qBAAiB;AAC3C,qBAAS,MAAM,QAAQ,CAAC,UAAU;AAChC,kBAAI,MAAM,KAAM,WAAU,MAAM,IAAI,IAAI,MAAM;AAAA,YAChD,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAEA,cAAQ,QAAQ,CAAC,QAAQ;AACvB,YAAI,IAAI,YAAY,IAAI,cAAc,CAAC,UAAU,IAAI,GAAG,GAAG;AACzD,gBAAM,QAAQA,gBAAe,SAAS,IAAI,GAAG;AAC7C,gBAAM,QAAQ,IAAI,WAAW,OAAO,OAAO;AAC3C,cAAI,MAAO,WAAU,IAAI,GAAG,IAAI;AAAA,QAClC;AAAA,MACF,CAAC;AAED,aAAO;AAAA,IACT;AAAA,IACA,CAAC,SAASA,iBAAgB,gBAAgB;AAAA,EAC5C;AAEA,QAAM,iBAAa;AAAA,IACjB,OAAO,WAA8B;AACnC,UAAI,QAAQ;AACV,eAAO,OAAO,OAAO;AACrB,cAAM,QAAQ,EAAE,GAAG,OAAO,QAAQ;AAClC,qBAAa,KAAK;AAClB,cAAM,gBAAgB,MAAM,YAAY,KAAK;AAC7C,kBAAU,aAAa;AAAA,MACzB;AAAA,IACF;AAAA,IACA,CAAC,WAAW;AAAA,EACd;AAEA,QAAM,iBAAa;AAAA,IACjB,OAAO,WAA8B;AACnC,YAAM,cAAc,MAAM,YAAY,SAAS;AAC/C,UAAI,OAAO,KAAK,WAAW,EAAE,SAAS,GAAG;AACvC,kBAAU,WAAW;AACrB;AAAA,MACF;AACA,UAAI,OAAQ,QAAO,SAAS;AAAA,IAC9B;AAAA,IACA,CAAC,WAAW,WAAW;AAAA,EACzB;AAEA,QAAM,mBAAe,2BAAY,CAAC,aAA0B;AAC1D,QAAI,SAAU,UAAS;AACvB,iBAAa,EAAE,GAAG,OAAO,QAAQ,CAAC;AAClC,cAAU,CAAC,CAAC;AAAA,EACd,GAAG,CAAC,CAAC;AAEL,QAAM,mBAAe;AAAA,IACnB,OAAO,KAAa,UAAe;AACjC,YAAM,SAAS,QAAQ,KAAK,CAAC,QAAQ,IAAI,QAAQ,GAAG;AACpD,UAAI,iBAAiB;AAErB,UAAI,QAAQ;AACV,gBAAQ,OAAO,MAAM;AAAA,UACnB,KAAK;AACH,6BACE,UAAU,MAAM,UAAU,OAAO,OAAO,OAAO,KAAK;AACtD;AAAA,UACF,KAAK;AACH,gBAAI,UAAU,MAAM,UAAU,QAAQ,UAAU,QAAW;AACzD,+BAAiB;AAAA,YACnB,WAAW,OAAO,UAAU,UAAU;AACpC,+BAAiB,UAAU,UAAU,UAAU;AAAA,YACjD,OAAO;AACL,+BAAiB,QAAQ,KAAK;AAAA,YAChC;AACA;AAAA,UACF,KAAK;AACH,6BAAiB,QAAQ,IAAI,KAAK,KAAK,EAAE,YAAY,IAAI;AACzD;AAAA,UACF,KAAK;AACH,6BAAiB,SAAS;AAC1B;AAAA,UACF;AACE,6BAAiB,SAAS;AAC1B;AAAA,QACJ;AAAA,MACF;AAEA,mBAAa,CAAC,SAAS;AACrB,cAAM,UAAU,EAAE,GAAG,MAAM,CAAC,GAAG,GAAG,eAAe;AACjD,oBAAY,OAAO,EAAE,KAAK,SAAS;AACnC,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,IACA,CAAC,SAAS,WAAW;AAAA,EACvB;AAEA,QAAM,YAAQ,2BAAY,MAAM;AAC9B,iBAAa,EAAE,GAAG,OAAO,QAAQ,CAAC;AAClC,cAAU,CAAC,CAAC;AAAA,EACd,GAAG,CAAC,CAAC;AAEL,QAAM,gBAAY,uBAAQ,MAAM,OAAO,KAAK,MAAM,EAAE,SAAS,GAAG,CAAC,MAAM,CAAC;AAExE,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AC5JA,IAAAC,gBAA+C;AA8BxC,SAAS,cAAc;AAAA,EAC5B,sBAAsB;AAAA,EACtB,cAAc;AAChB,IAA0B,CAAC,GAAwB;AACjD,QAAM,CAAC,aAAa,cAAc,QAAI,wBAAS,CAAC;AAChD,QAAM,CAAC,cAAc,eAAe,QAAI,wBAAS,mBAAmB;AACpE,QAAM,CAAC,SAAS,UAAU,QAAI,wBAE5B,CAAC,CAAC;AACJ,QAAM,CAAC,YAAY,aAAa,QAAI,wBAA4B,WAAW;AAC3E,QAAM,CAAC,YAAY,aAAa,QAAI,wBAAS,CAAC;AAE9C,QAAM,eAAW;AAAA,IACf,CAAC,SAAiB;AAChB,UAAI,QAAQ,KAAK,QAAQ,YAAY;AACnC,uBAAe,IAAI;AAAA,MACrB;AAAA,IACF;AAAA,IACA,CAAC,UAAU;AAAA,EACb;AAEA,QAAM,+BAA2B,2BAAY,CAAC,UAAkB;AAC9D,oBAAgB,KAAK;AACrB,mBAAe,CAAC;AAAA,EAClB,GAAG,CAAC,CAAC;AAEL,QAAM,yBAAqB;AAAA,IACzB,CAAC,KAAa,UAAiD;AAC7D,iBAAW,CAAC,SAAS;AACnB,YAAI,UAAU,UAAa,UAAU,QAAQ,UAAU,IAAI;AACzD,gBAAM,OAAO,EAAE,GAAG,KAAK;AACvB,iBAAO,KAAK,GAAG;AACf,iBAAO;AAAA,QACT;AACA,eAAO,EAAE,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM;AAAA,MACjC,CAAC;AACD,qBAAe,CAAC;AAAA,IAClB;AAAA,IACA,CAAC;AAAA,EACH;AAEA,QAAM,iBAAa,2BAAY,CAAC,KAAa,aAAuB;AAClE,QAAI,aAAa,MAAO;AACxB,kBAAc,CAAC,SAAS;AACtB,UAAI,YAA4B;AAChC,UAAI,MAAM,QAAQ,OAAO,KAAK,cAAc,OAAO;AACjD,oBAAY;AAAA,MACd;AACA,aAAO,EAAE,KAAK,UAAU;AAAA,IAC1B,CAAC;AACD,mBAAe,CAAC;AAAA,EAClB,GAAG,CAAC,CAAC;AAEL,QAAM,gBAAY,2BAAY,MAAM,eAAe,CAAC,GAAG,CAAC,CAAC;AACzD,QAAM,mBAAe,2BAAY,MAAM;AACrC,eAAW,CAAC,CAAC;AACb,mBAAe,CAAC;AAAA,EAClB,GAAG,CAAC,CAAC;AAEL,QAAM,aAAS;AAAA,IACb,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;;;ACzHA,kBAAiB;AAEjB,gBAA2F;;;ACSvF;AATW,SAAR,OAAwB;AAAA,EAC7B;AAAA,EACA,IAAI,MAAM;AAAA,EACV,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR;AAAA,EACA,GAAG;AACL,GAAkD;AAChD,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,OAAO,QAAQ,EAAE,OAAO,2BAA2B,GAAG,MAAM,IAAI;AAAA,MAC/D,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;;;ADXU,IAAAC,sBAAA;AAFV,IAAM,SAA2E;AAAA,EAC/E,MAAM;AAAA,IACJ,MAAM,6CAAC,0BAAa,MAAM,IAAI;AAAA,IAC9B,SAAS;AAAA,EACX;AAAA,EACA,SAAS;AAAA,IACP,MAAM,6CAAC,2BAAc,MAAM,IAAI;AAAA,IAC/B,SAAS;AAAA,EACX;AAAA,EACA,SAAS;AAAA,IACP,MAAM,6CAAC,mCAAsB,MAAM,IAAI;AAAA,IACvC,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AAAA,IACL,MAAM,6CAAC,2BAAc,MAAM,IAAI;AAAA,IAC/B,SAAS;AAAA,EACX;AACF;AAEe,SAAR,QAAyB;AAAA,EAC9B,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAiB;AACf,QAAM,MAAM,OAAO,OAAO;AAC1B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW,YAAAC,SAAK,gDAAgD,IAAI,SAAS,SAAS;AAAA,MACtF,MAAK;AAAA,MAEL;AAAA,qDAAC,UAAK,WAAU,wBAAwB,kBAAQ,IAAI,MAAK;AAAA,QACzD,8CAAC,SAAI,WAAU,kBACZ;AAAA,mBAAS,6CAAC,UAAO,IAAG,KAAI,WAAU,4BAA4B,iBAAM;AAAA,UACpE,YAAY,6CAAC,UAAO,IAAG,OAAM,WAAU,sBAAsB,UAAS;AAAA,WACzE;AAAA,QACC,eAAe,aACd,6CAAC,YAAO,SAAS,WAAW,WAAU,iEACpC,uDAAC,qBAAQ,MAAM,IAAI,GACrB;AAAA;AAAA;AAAA,EAEJ;AAEJ;;;AEpDA,IAAAC,eAAiB;AAyBb,IAAAC,sBAAA;AArBJ,IAAM,UAAmE;AAAA,EACvE,IAAI,EAAE,WAAW,WAAW,MAAM,cAAc;AAAA,EAChD,IAAI,EAAE,WAAW,WAAW,MAAM,UAAU;AAAA,EAC5C,IAAI,EAAE,WAAW,aAAa,MAAM,UAAU;AAAA,EAC9C,IAAI,EAAE,WAAW,aAAa,MAAM,YAAY;AAAA,EAChD,IAAI,EAAE,WAAW,aAAa,MAAM,UAAU;AAChD;AAEe,SAAR,SAA0B;AAAA,EAC/B;AAAA,EACA,MAAM;AAAA,EACN;AAAA,EACA,OAAO;AAAA,EACP,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AACF,GAAkB;AAChB,QAAM,EAAE,WAAW,KAAK,IAAI,QAAQ,IAAI;AAExC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW,aAAAC,SAAK,+EAA+E,WAAW,SAAS;AAAA,MACnH;AAAA,MACA,MAAM,UAAU,WAAW;AAAA,MAC3B,UAAU,UAAU,IAAI;AAAA,MAEvB;AAAA,cACC;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA,WAAU;AAAA,YACV,SAAS,CAAC,MAAM;AACd,gBAAE,cAAc,MAAM,UAAU;AAAA,YAClC;AAAA;AAAA,QACF,IAEA,6CAAC,SAAI,eAAW,aAAAA,SAAK,wFAAwF,MAAM,KAAK,GACtH,uDAAC,UAAO,IAAG,QAAQ,sBAAY,IAAI,OAAO,CAAC,EAAE,YAAY,KAAK,KAAI,GACpE;AAAA,QAED,SACC,6CAAC,SAAI,WAAU,mCACZ,iBACH;AAAA;AAAA;AAAA,EAEJ;AAEJ;;;ACnDA,IAAAC,eAAiB;;;ACwBV,IAAM,aAAa;AAAA,EACxB,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACT;;;AC1BO,IAAM,UAAU;AAAA,EACrB,MAAM;AAAA,IACJ,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AAAA,EACA,MAAM;AAAA,IACJ,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AAAA,EACA,MAAM;AAAA,IACJ,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AAAA,EACA,SAAS;AAAA,IACP,IAAI;AAAA,IAAW,KAAK;AAAA,IAAW,KAAK;AAAA,IAAW,KAAK;AAAA,IACpD,KAAK;AAAA,IAAW,KAAK;AAAA,IAAW,KAAK;AAAA,IAAW,KAAK;AAAA,IACrD,KAAK;AAAA,IAAW,KAAK;AAAA,IAAW,KAAK;AAAA,EACvC;AAAA,EACA,QAAQ;AAAA,IACN,IAAI;AAAA,IAAW,KAAK;AAAA,IAAW,KAAK;AAAA,IAAW,KAAK;AAAA,IACpD,KAAK;AAAA,IAAW,KAAK;AAAA,IAAW,KAAK;AAAA,IAAW,KAAK;AAAA,IACrD,KAAK;AAAA,IAAW,KAAK;AAAA,IAAW,KAAK;AAAA,EACvC;AAAA,EACA,SAAS;AAAA,IACP,IAAI;AAAA,IAAW,KAAK;AAAA,IAAW,KAAK;AAAA,IAAW,KAAK;AAAA,IACpD,KAAK;AAAA,IAAW,KAAK;AAAA,IAAW,KAAK;AAAA,IAAW,KAAK;AAAA,IACrD,KAAK;AAAA,IAAW,KAAK;AAAA,IAAW,KAAK;AAAA,EACvC;AAAA,EACA,QAAQ;AAAA,IACN,IAAI;AAAA,IAAW,KAAK;AAAA,IAAW,KAAK;AAAA,IAAW,KAAK;AAAA,IACpD,KAAK;AAAA,IAAW,KAAK;AAAA,IAAW,KAAK;AAAA,IAAW,KAAK;AAAA,IACrD,KAAK;AAAA,IAAW,KAAK;AAAA,IAAW,KAAK;AAAA,EACvC;AAAA,EACA,MAAM;AAAA,IACJ,IAAI;AAAA,IAAW,KAAK;AAAA,IAAW,KAAK;AAAA,IAAW,KAAK;AAAA,IACpD,KAAK;AAAA,IAAW,KAAK;AAAA,IAAW,KAAK;AAAA,IAAW,KAAK;AAAA,IACrD,KAAK;AAAA,IAAW,KAAK;AAAA,IAAW,KAAK;AAAA,EACvC;AACF;AAOA,IAAM,iBAAiB,CAAC,UAAkB;AAAA,EACxC,IAAI,eAAe,IAAI;AAAA,EACvB,KAAK,eAAe,IAAI;AAAA,EACxB,KAAK,eAAe,IAAI;AAAA,EACxB,KAAK,eAAe,IAAI;AAAA,EACxB,KAAK,eAAe,IAAI;AAAA,EACxB,KAAK,eAAe,IAAI;AAAA,EACxB,KAAK,eAAe,IAAI;AAAA,EACxB,KAAK,eAAe,IAAI;AAAA,EACxB,KAAK,eAAe,IAAI;AAAA,EACxB,KAAK,eAAe,IAAI;AAAA,EACxB,KAAK,eAAe,IAAI;AAC1B;AAEO,IAAM,iBAAiB;AAAA,EAC5B,SAAS,eAAe,SAAS;AAAA,EACjC,WAAW,eAAe,WAAW;AAAA,EACrC,SAAS,eAAe,SAAS;AAAA,EACjC,QAAQ,eAAe,QAAQ;AAAA,EAC/B,SAAS,eAAe,SAAS;AAAA,EACjC,MAAM,eAAe,MAAM;AAAA,EAC3B,QAAQ,eAAe,QAAQ;AAAA,EAC/B,OAAO,eAAe,QAAQ;AAAA;AAAA,EAC9B,MAAM,eAAe,WAAW;AAAA;AAClC;AAKO,IAAM,aAAa;AAAA,EACxB,QAAQ;AAAA,IACN,iBAAiB,oBAAoB,eAAe,KAAK,EAAE,CAAC;AAAA,IAC5D,gBAAgB;AAAA,EAClB;AAAA,EACA,QAAQ;AAAA,IACN,iBAAiB;AAAA,IACjB,aAAa,wBAAwB,eAAe,KAAK,GAAG,CAAC;AAAA,IAC7D,WAAW,sBAAsB,eAAe,KAAK,GAAG,CAAC;AAAA,IACzD,gBAAgB,4BAA4B,eAAe,KAAK,GAAG,CAAC;AAAA,IACpE,QAAQ;AAAA,IACR,WAAW,sBAAsB,eAAe,KAAK,GAAG,CAAC;AAAA,IACzD,gBAAgB,4BAA4B,eAAe,KAAK,GAAG,CAAC;AAAA,IACpE,UAAU;AAAA,MACR,iBAAiB,yBAAyB,eAAe,KAAK,EAAE,CAAC;AAAA,MACjE,iBAAiB,4BAA4B,eAAe,KAAK,GAAG,CAAC;AAAA,MACrE,WAAW,2BAA2B,eAAe,KAAK,GAAG,CAAC;AAAA,MAC9D,eAAe,+BAA+B,eAAe,KAAK,GAAG,CAAC;AAAA,MACtE,UAAU;AAAA,QACR,iBAAiB;AAAA,QACjB,aAAa,sCAAsC,eAAe,KAAK,GAAG,CAAC;AAAA,QAC3E,qBAAqB,iCAAiC,eAAe,KAAK,EAAE,CAAC;AAAA,MAC/E;AAAA,IACF;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,iBAAiB;AAAA,IACjB,aAAa,yBAAyB,eAAe,KAAK,GAAG,CAAC;AAAA,IAC9D,OAAO;AAAA,MACL,OAAO,8BAA8B,eAAe,KAAK,GAAG,CAAC;AAAA,MAC7D,MAAM;AAAA,MACN,QAAQ;AAAA,IACV;AAAA,IACA,MAAM;AAAA,MACJ,OAAO,6BAA6B,eAAe,KAAK,GAAG,CAAC;AAAA,MAC5D,MAAM;AAAA,IACR;AAAA,IACA,OAAO;AAAA,MACL,iBAAiB,2BAA2B,eAAe,KAAK,GAAG,CAAC;AAAA,IACtE;AAAA,IACA,QAAQ;AAAA,MACN,iBAAiB,4BAA4B,eAAe,KAAK,EAAE,CAAC;AAAA,MACpE,OAAO,+BAA+B,eAAe,KAAK,GAAG,CAAC;AAAA,MAC9D,WAAW,8BAA8B,eAAe,QAAQ,GAAG,CAAC;AAAA,IACtE;AAAA,IACA,OAAO;AAAA,MACL,iBAAiB,2BAA2B,eAAe,QAAQ,GAAG,CAAC;AAAA,MACvE,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,QAAQ;AAAA,IACN,SAAS;AAAA,MACP,iBAAiB,eAAe,QAAQ,GAAG;AAAA,MAC3C,OAAO;AAAA,MACP,OAAO,eAAe,QAAQ,GAAG;AAAA,MACjC,QAAQ,eAAe,QAAQ,GAAG;AAAA,MAClC,OAAO,aAAa,eAAe,QAAQ,GAAG,CAAC;AAAA,MAC/C,cAAc;AAAA,MACd,SAAS;AAAA,MACT,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,YAAY;AAAA,IACd;AAAA,IAEA,WAAW;AAAA,MACT,iBAAiB,eAAe,UAAU,GAAG;AAAA,MAC7C,OAAO;AAAA,MACP,OAAO,eAAe,UAAU,GAAG;AAAA,MACnC,OAAO,aAAa,eAAe,UAAU,GAAG,CAAC;AAAA,MACjD,cAAc;AAAA,MACd,SAAS;AAAA,MACT,UAAU;AAAA,MACV,YAAY;AAAA,IACd;AAAA,IAEA,SAAS;AAAA,MACP,iBAAiB,eAAe,QAAQ,GAAG;AAAA,MAC3C,OAAO;AAAA,MACP,OAAO,eAAe,QAAQ,GAAG;AAAA,MACjC,OAAO,aAAa,eAAe,QAAQ,GAAG,CAAC;AAAA,MAC/C,cAAc;AAAA,IAChB;AAAA,IAEA,QAAQ;AAAA,MACN,iBAAiB,eAAe,OAAO,GAAG;AAAA,MAC1C,OAAO;AAAA,MACP,OAAO,eAAe,OAAO,GAAG;AAAA,MAChC,OAAO,aAAa,eAAe,OAAO,GAAG,CAAC;AAAA,MAC9C,cAAc;AAAA,IAChB;AAAA,IAEA,OAAO;AAAA,MACL,iBAAiB,eAAe,OAAO,GAAG;AAAA,MAC1C,OAAO;AAAA,MACP,OAAO,eAAe,OAAO,GAAG;AAAA,MAChC,cAAc;AAAA,IAChB;AAAA,IAEA,SAAS;AAAA,MACP,iBAAiB,eAAe,QAAQ,GAAG;AAAA,MAC3C,OAAO;AAAA,MACP,OAAO,eAAe,QAAQ,GAAG;AAAA,MACjC,OAAO,aAAa,eAAe,QAAQ,GAAG,CAAC;AAAA,MAC/C,cAAc;AAAA,IAChB;AAAA,IAEA,MAAM;AAAA,MACJ,iBAAiB,eAAe,KAAK,GAAG;AAAA,MACxC,OAAO;AAAA,MACP,OAAO,eAAe,KAAK,GAAG;AAAA,MAC9B,OAAO,aAAa,eAAe,KAAK,GAAG,CAAC;AAAA,MAC5C,cAAc;AAAA,IAChB;AAAA,IAEA,QAAQ;AAAA,MACN,iBAAiB,eAAe,OAAO,GAAG;AAAA,MAC1C,OAAO;AAAA,MACP,OAAO,eAAe,OAAO,GAAG;AAAA,MAChC,OAAO,aAAa,eAAe,OAAO,GAAG,CAAC;AAAA,MAC9C,cAAc;AAAA,IAChB;AAAA,IAEA,SAAS;AAAA,MACP,iBAAiB;AAAA,MACjB,OAAO,eAAe,QAAQ,GAAG;AAAA,MACjC,aAAa,eAAe,QAAQ,GAAG;AAAA,MACvC,aAAa;AAAA,MACb,OAAO,eAAe,QAAQ,EAAE;AAAA,MAChC,cAAc;AAAA,IAChB;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,SAAS;AAAA,MACP,iBAAiB,eAAe,QAAQ,GAAG;AAAA,MAC3C,OAAO,eAAe,QAAQ,GAAG;AAAA,MACjC,aAAa,eAAe,QAAQ,GAAG;AAAA,MACvC,cAAc;AAAA,MACd,SAAS;AAAA,MACT,UAAU;AAAA,MACV,YAAY;AAAA,IACd;AAAA,IACA,WAAW;AAAA,MACT,iBAAiB,eAAe,UAAU,GAAG;AAAA,MAC7C,OAAO,eAAe,UAAU,GAAG;AAAA,MACnC,aAAa,eAAe,UAAU,GAAG;AAAA,MACzC,cAAc;AAAA,IAChB;AAAA,IACA,SAAS;AAAA,MACP,iBAAiB,eAAe,QAAQ,GAAG;AAAA,MAC3C,OAAO,eAAe,QAAQ,GAAG;AAAA,MACjC,aAAa,eAAe,QAAQ,GAAG;AAAA,MACvC,cAAc;AAAA,IAChB;AAAA,IACA,QAAQ;AAAA,MACN,iBAAiB,eAAe,OAAO,GAAG;AAAA,MAC1C,OAAO,eAAe,OAAO,GAAG;AAAA,MAChC,aAAa,eAAe,OAAO,GAAG;AAAA,MACtC,cAAc;AAAA,IAChB;AAAA,IACA,SAAS;AAAA,MACP,iBAAiB,eAAe,QAAQ,GAAG;AAAA,MAC3C,OAAO,eAAe,QAAQ,GAAG;AAAA,MACjC,aAAa,eAAe,QAAQ,GAAG;AAAA,MACvC,cAAc;AAAA,IAChB;AAAA,IACA,MAAM;AAAA,MACJ,iBAAiB,eAAe,KAAK,GAAG;AAAA,MACxC,OAAO,eAAe,KAAK,GAAG;AAAA,MAC9B,aAAa,eAAe,KAAK,GAAG;AAAA,MACpC,cAAc;AAAA,IAChB;AAAA,IACA,QAAQ;AAAA,MACN,iBAAiB,eAAe,OAAO,GAAG;AAAA,MAC1C,OAAO,eAAe,OAAO,GAAG;AAAA,MAChC,aAAa,eAAe,OAAO,GAAG;AAAA,MACtC,cAAc;AAAA,IAChB;AAAA,IACA,OAAO;AAAA,MACL,iBAAiB,eAAe,OAAO,GAAG;AAAA,MAC1C,OAAO,eAAe,OAAO,GAAG;AAAA,MAChC,aAAa,eAAe,OAAO,GAAG;AAAA,MACtC,cAAc;AAAA,IAChB;AAAA,EACF;AAAA,EAEA,MAAM;AAAA,IACJ,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,aAAa,sBAAsB,eAAe,KAAK,GAAG,CAAC;AAAA,IAC3D,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,OAAO;AAAA,MACL,QAAQ;AAAA,IACV;AAAA,IACA,QAAQ;AAAA,MACN,iBAAiB,yBAAyB,eAAe,KAAK,EAAE,CAAC;AAAA,MACjE,cAAc;AAAA,MACd,SAAS;AAAA,MACT,qBAAqB;AAAA,MACrB,sBAAsB;AAAA,IACxB;AAAA,IACA,MAAM;AAAA,MACJ,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,iBAAiB;AAAA,IACjB,aAAa,uBAAuB,eAAe,KAAK,GAAG,CAAC;AAAA,IAC5D,cAAc;AAAA,IACd,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,MACL,aAAa,6BAA6B,eAAe,QAAQ,GAAG,CAAC;AAAA,MACrE,MAAM,qCAAqC,eAAe,QAAQ,GAAG,CAAC;AAAA,IACxE;AAAA,IACA,aAAa,4BAA4B,eAAe,KAAK,GAAG,CAAC;AAAA,IACjE,UAAU;AAAA,MACR,iBAAiB,4BAA4B,eAAe,KAAK,GAAG,CAAC;AAAA,MACrE,aAAa,gCAAgC,eAAe,KAAK,GAAG,CAAC;AAAA,IACvE;AAAA,IACA,OAAO;AAAA,MACL,aAAa,6BAA6B,eAAe,OAAO,GAAG,CAAC;AAAA,MACpE,MAAM,qCAAqC,eAAe,OAAO,GAAG,CAAC;AAAA,IACvE;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,QAAQ;AAAA,MACN,iBAAiB,eAAe,KAAK,EAAE;AAAA,MACvC,OAAO,eAAe,KAAK,GAAG;AAAA,MAC9B,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,eAAe;AAAA,IACjB;AAAA,IACA,KAAK;AAAA,MACH,OAAO,eAAe,QAAQ,EAAE;AAAA,MAChC,cAAc;AAAA,IAChB;AAAA,IACA,MAAM;AAAA,MACJ,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,iBAAiB,eAAe,KAAK,EAAE;AAAA,MACvC,aAAa,eAAe,KAAK,GAAG;AAAA,MACpC,OAAO,eAAe,KAAK,GAAG;AAAA,MAC9B,MAAM,eAAe,KAAK,GAAG;AAAA,IAC/B;AAAA,IACA,SAAS;AAAA,MACP,iBAAiB,eAAe,QAAQ,EAAE;AAAA,MAC1C,aAAa,eAAe,QAAQ,GAAG;AAAA,MACvC,OAAO,eAAe,QAAQ,GAAG;AAAA,MACjC,MAAM,eAAe,QAAQ,GAAG;AAAA,IAClC;AAAA,IACA,SAAS;AAAA,MACP,iBAAiB,eAAe,QAAQ,EAAE;AAAA,MAC1C,aAAa,eAAe,QAAQ,GAAG;AAAA,MACvC,OAAO,eAAe,QAAQ,GAAG;AAAA,MACjC,MAAM,eAAe,QAAQ,GAAG;AAAA,IAClC;AAAA,IACA,OAAO;AAAA,MACL,iBAAiB,eAAe,OAAO,EAAE;AAAA,MACzC,aAAa,eAAe,OAAO,GAAG;AAAA,MACtC,OAAO,eAAe,OAAO,GAAG;AAAA,MAChC,MAAM,eAAe,OAAO,GAAG;AAAA,IACjC;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,SAAS;AAAA,MACP,iBAAiB;AAAA,IACnB;AAAA,IACA,SAAS;AAAA,MACP,iBAAiB;AAAA,MACjB,cAAc;AAAA,MACd,QAAQ;AAAA,IACV;AAAA,IACA,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,cAAc;AAAA,IAChB;AAAA,IACA,MAAM;AAAA,MACJ,SAAS;AAAA,IACX;AAAA,IACA,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,WAAW;AAAA,MACX,iBAAiB,0BAA0B,eAAe,KAAK,EAAE,CAAC;AAAA,IACpE;AAAA,EACF;AAAA,EAEA,UAAU;AAAA,IACR,iBAAiB;AAAA,IACjB,aAAa,0BAA0B,eAAe,KAAK,GAAG,CAAC;AAAA,IAC/D,QAAQ;AAAA,MACN,WAAW,+BAA+B,eAAe,KAAK,GAAG,CAAC;AAAA,MAClE,iBAAiB,gCAAgC,eAAe,KAAK,GAAG,CAAC;AAAA,IAC3E;AAAA,IACA,MAAM;AAAA,MACJ,WAAW,6BAA6B,eAAe,KAAK,GAAG,CAAC;AAAA,MAChE,cAAc,gCAAgC,eAAe,KAAK,GAAG,CAAC;AAAA,MACtE,mBAAmB,gCAAgC,eAAe,KAAK,GAAG,CAAC;AAAA,IAC7E;AAAA,IACA,WAAW;AAAA,MACT,eAAe;AAAA,MACf,oBAAoB,+BAA+B,eAAe,QAAQ,GAAG,CAAC;AAAA,MAC9E,iBAAiB,4BAA4B,eAAe,QAAQ,EAAE,CAAC;AAAA,MACvE,iBAAiB,4BAA4B,eAAe,QAAQ,EAAE,CAAC;AAAA,MACvE,YAAY,8BAA8B,eAAe,QAAQ,GAAG,CAAC;AAAA,IACvE;AAAA,EACF;AACF;AAKO,IAAM,aAAa;AAAA,EACxB,YAAY;AAAA,IACV,MAAM,CAAC,SAAS,aAAa,iBAAiB,YAAY;AAAA,IAC1D,MAAM,CAAC,aAAa,WAAW;AAAA,EACjC;AAAA,EACA,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,YAAY;AAAA,IACV,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,MAAM;AAAA,EACR;AAAA,EACA,YAAY;AAAA,IACV,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AACF;AAKO,IAAM,QAAQ;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,GAAG;AACL;;;AFrZmB,IAAAC,sBAAA;AAhDJ,SAAR,SAA0B;AAAA,EAC/B;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,UAAU;AAAA,EACV;AACF,GAAkB;AAEhB,QAAM,aAAc,MAAc,SAAS,CAAC;AAC5C,QAAMC,UAAS,WAAW,KAAK,KAAK,WAAW,WAAW,CAAC;AAE3D,QAAM,WAAW,MAAM;AACrB,UAAM,QAA6B;AAAA,MACjC,UAAUA,QAAO;AAAA,MACjB,YAAYA,QAAO;AAAA,MACnB,SAASA,QAAO;AAAA,MAChB,cAAcA,QAAO;AAAA;AAAA,MACrB,aAAa;AAAA;AAAA,MACb,aAAa;AAAA,MACb,aAAa;AAAA;AAAA,MACb,YAAY;AAAA,IACd;AAEA,QAAI,YAAY,UAAU;AACxB,YAAM,kBAAkBA,QAAO;AAC/B,YAAM,QAAQA,QAAO;AACrB,YAAM,cAAcA,QAAO,eAAe;AAAA,IAC5C,WAAW,YAAY,YAAY;AACjC,YAAM,kBAAkB;AAExB,YAAM,QAAQA,QAAO;AACrB,YAAM,cAAcA,QAAO;AAAA,IAC7B;AAEA,WAAO;AAAA,EACT;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW,aAAAC;AAAA,QACT;AAAA;AAAA,QAEA,CAACD,QAAO,UAAU,WAAW,IAAI,IAAI;AAAA,QACrC;AAAA,MACF;AAAA,MACA,OAAO,SAAS;AAAA,MAEf,sBAAY,6CAAC,UAAO,IAAG,QAAO,eAAW,aAAAC,SAAK,eAAe,GAAI,iBAAM;AAAA;AAAA,EAC1E;AAEJ;;;AG5DA,IAAAC,eAAiB;AAEjB,IAAAC,aAA+B;AAKjB,IAAAC,sBAAA;AAFC,SAAR,cAA+B;AAAA,EACpC;AAAA,EACA,YAAY,6CAAC,6BAAe,MAAM,IAAI;AAAA,EACtC;AACF,GAAuB;AACrB,SACE,6CAAC,SAAI,eAAW,aAAAC,SAAK,qCAAqC,SAAS,GAAG,cAAW,cAC9E,gBAAM,IAAI,CAAC,MAAM,MAAM;AACtB,UAAM,SAAS,MAAM,MAAM,SAAS;AACpC,WACE,8CAAC,UAAa,WAAU,6BACrB;AAAA,UAAI,KAAK,6CAAC,UAAK,WAAU,sCAAsC,qBAAU;AAAA,MACzE,SACC,6CAAC,UAAO,IAAG,QAAO,WAAU,gDAAgD,eAAK,OAAM,IACrF,KAAK,OACP,6CAAC,OAAE,MAAM,KAAK,MAAM,WAAU,uGAC5B,uDAAC,UAAO,IAAG,QAAQ,eAAK,OAAM,GAChC,IAEA,6CAAC,YAAO,SAAS,KAAK,SAAS,WAAU,uGACvC,uDAAC,UAAO,IAAG,QAAQ,eAAK,OAAM,GAChC;AAAA,SAXO,CAaX;AAAA,EAEJ,CAAC,GACH;AAEJ;;;ACjCO,IAAM,iBAAyC;AAAA,EACpD,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,MAAM;AAAA,EACN,eAAe;AAAA,EACf,aAAa;AAAA,EACb,MAAM;AACR;AAEO,IAAM,cAAsC;AAAA,EACjD,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACT;;;ACXA,IAAAC,eAAiB;AACjB,IAAAC,gBAAyB;AAwGjB,IAAAC,sBAAA;AAnGO,SAAR,SAA0B;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,WAAW;AAAA,EACX;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AACF,GAAkB;AAChB,QAAM,CAAC,WAAW,YAAY,QAAI,wBAAS,KAAK;AAChD,QAAM,CAAC,WAAW,YAAY,QAAI,wBAAS,KAAK;AAGhD,QAAM,WAAW,MAAM;AACvB,QAAM,cAAc,SAAS,KAAK,KAAK,SAAS;AAGhD,QAAM,UAAU,CAAC,UAAU,UAAU,WAAW,WAAW,EAAE,SAAS,WAAW,QAAQ;AACzF,QAAM,aAAa,YAAY;AAC/B,QAAM,SAAS,YAAY,UAAU,YAAY;AACjD,QAAM,eAAe,YAAY;AAEjC,QAAM,WAAW,MAAM;AAGrB,UAAM,YAAY,YAAY;AAC9B,UAAM,YAAY,YAAY;AAE9B,QAAI,QAA6B;AAAA;AAAA,MAE/B,YAAY,YAAY;AAAA;AAAA,MAExB,cAAc,YAAY;AAAA;AAAA,MAC1B,YAAY,YAAY,cAAc;AAAA,IACxC;AAEA,QAAI,YAAY,WAAW;AACzB,YAAM,eAAe;AAAA,IACvB;AAEA,QAAI,YAAY,aAAa;AAC3B,YAAM,UAAU;AAAA,IAClB;AAEA,QAAI,SAAS;AACX,YAAM,kBAAmB,aAAa,CAAC,WAAY,YAAY,QAAQ;AACvE,YAAM,QAAQ;AAAA,IAChB,WAAW,YAAY;AACrB,YAAM,kBAAkB;AACxB,YAAM,QAAQ;AACd,YAAM,cAAc;AACpB,UAAI,aAAa,CAAC,UAAU;AACzB,cAAM,kBAAkB,GAAG,SAAS;AAAA,MACvC;AAAA,IACF,WAAW,QAAQ;AACjB,YAAM,kBAAmB,aAAa,CAAC,WAAY,GAAG,SAAS,OAAO;AACtE,YAAM,QAAQ;AAAA,IAChB,WAAW,cAAc;AACvB,YAAM,kBAAkB;AACxB,YAAM,QAAQ;AACd,UAAI,aAAa,CAAC,SAAU,OAAM,kBAAkB;AAAA,IACtD;AAGA,QAAI,aAAa,YAAY,SAAS,CAAC,UAAU;AAC7C,YAAM,YAAY,YAAY;AAAA,IAClC;AAEA,WAAO;AAAA,EACT;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,eAAW,aAAAC;AAAA,QACT;AAAA;AAAA;AAAA,QAEA,eAAe,WAAW,QAAQ;AAAA;AAAA,QAElC,YAAY,IAAI;AAAA,QAChB;AAAA,QACA,EAAE,iCAAiC,SAAS;AAAA,MAC9C;AAAA,MACA,OAAO,SAAS;AAAA,MAChB,cAAc,MAAM,aAAa,IAAI;AAAA,MACrC,cAAc,MAAM,aAAa,KAAK;AAAA,MACtC,SAAS,MAAM,aAAa,IAAI;AAAA,MAChC,QAAQ,MAAM,aAAa,KAAK;AAAA,MAChC;AAAA,MACA;AAAA,MACA,cAAY,aAAa;AAAA,MACzB,OAAO,SAAS,aAAa;AAAA,MAE5B,sBACC,8CAAC,UAAK,eAAW,aAAAA,SAAK,kDAAkD,EAAE,cAAc,SAAS,CAAC,GAC/F;AAAA,gBAAQ,6CAAC,UAAK,WAAU,iBAAiB,gBAAK;AAAA,QAC/C,6CAAC,UAAO,IAAG,QAAQ,iBAAM;AAAA,SAC3B;AAAA;AAAA,EAEJ;AAEJ;;;ACpHA,IAAAC,gBAAoD;AACpD,sBAkBO;AACP,oBAAmB;AACnB,IAAAC,eAAsC;AACtC,4BAAwB;AACxB,IAAAC,aAA8C;AAmPtC,IAAAC,sBAAA;AA/OR,SAAS,MAAM,QAAsB;AACnC,aAAO,mCAAQ,mBAAK,MAAM,CAAC;AAC7B;AAMA,IAAM,aAAa;AACnB,IAAM,WAAW;AACjB,IAAM,cAAc,WAAW;AAG/B,IAAM,aAAa,MAAM,KAAK,EAAE,QAAQ,cAAc,EAAE,GAAG,CAAC,GAAG,MAAM,aAAa,CAAC;AAM5E,IAAM,aAAwC,CAAC;AAAA,EACpD,SAAS,CAAC;AAAA,EACV,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AACZ,MAAM;AAEJ,QAAM,OAAO,aAAa,WAAW,UAAU;AAE/C,QAAM,CAAC,aAAa,cAAc,QAAI,wBAAS,SAAS,oBAAI,KAAK,CAAC;AAClE,QAAM,CAAC,MAAM,OAAO,QAAI,wBAA+B,UAAU;AAGjE,QAAM,mBAAmB,MAAM;AAC7B,UAAM,IAAI,WAAW;AACrB,WAAO;AAAA,MACL,0BAA0B,eAAe,CAAC;AAAA,MAC1C,uBAAuB,eAAe,CAAC;AAAA,MACvC,uBAAuB,eAAe,CAAC;AAAA,MACvC,yBAAyB,eAAe,CAAC;AAAA,IAC3C;AAAA,EACF;AAGA,+BAAU,MAAM;AACd,QAAI,MAAO,gBAAe,KAAK;AAAA,EACjC,GAAG,CAAC,KAAK,CAAC;AAGV,QAAM,aAAa,MAAM;AACvB,QAAI,SAAS,SAAS;AACpB,qBAAe,CAAC,MAAM;AACpB,cAAM,UAAU,IAAI,KAAK,CAAC;AAC1B,gBAAQ,YAAY,EAAE,YAAY,IAAI,EAAE;AACxC,eAAO;AAAA,MACT,CAAC;AAAA,IACH,WAAW,SAAS,SAAS;AAC3B,qBAAe,CAAC,UAAM,2BAAU,GAAG,CAAC,CAAC;AAAA,IACvC,WAAW,SAAS,OAAO;AACzB,qBAAe,CAAC,UAAM,yBAAQ,GAAG,CAAC,CAAC;AAAA,IACrC,OAAO;AACL,qBAAe,CAAC,UAAM,yBAAQ,GAAG,CAAC,CAAC;AAAA,IACrC;AAAA,EACF;AAEA,QAAM,aAAa,MAAM;AACtB,QAAI,SAAS,SAAS;AACrB,qBAAe,CAAC,MAAM;AACpB,cAAM,UAAU,IAAI,KAAK,CAAC;AAC1B,gBAAQ,YAAY,EAAE,YAAY,IAAI,EAAE;AACxC,eAAO;AAAA,MACT,CAAC;AAAA,IACF,WAAW,SAAS,SAAS;AAC5B,qBAAe,CAAC,UAAM,2BAAU,GAAG,EAAE,CAAC;AAAA,IACxC,WAAW,SAAS,OAAO;AACzB,qBAAe,CAAC,UAAM,yBAAQ,GAAG,EAAE,CAAC;AAAA,IACtC,OAAO;AACL,qBAAe,CAAC,UAAM,yBAAQ,GAAG,EAAE,CAAC;AAAA,IACtC;AAAA,EACF;AAEA,QAAM,cAAc,MAAM;AACxB,mBAAe,oBAAI,KAAK,CAAC;AACzB,YAAQ,UAAU;AAAA,EACpB;AAMA,QAAM,eAAW,uBAAQ,MAAM;AAC7B,QAAI,SAAS,OAAO;AAChB,aAAO,CAAC,WAAW;AAAA,IACvB;AACA,UAAM,YAAQ,6BAAY,aAAa,EAAE,cAAc,EAAE,CAAC;AAC1D,UAAM,UAAM,2BAAU,aAAa,EAAE,cAAc,EAAE,CAAC;AACtD,eAAO,mCAAkB,EAAE,OAAO,IAAI,CAAC;AAAA,EACzC,GAAG,CAAC,aAAa,IAAI,CAAC;AAEtB,QAAM,gBAAgB,CAAC,UAAyB;AAC9C,UAAM,QAAQ,OAAO,MAAM,UAAU,eAAW,0BAAS,MAAM,KAAK,IAAI,MAAM;AAC9E,UAAM,MAAM,OAAO,MAAM,QAAQ,eAAW,0BAAS,MAAM,GAAG,IAAI,MAAM;AAExE,UAAM,eAAe,MAAM,SAAS,IAAI,KAAK,MAAM,WAAW;AAC9D,UAAM,kBAAkB,aAAa;AAErC,UAAM,eAAW,qCAAoB,KAAK,KAAK;AAE/C,WAAO;AAAA,MACL,KAAK,IAAK,eAAe,mBAAmB,KAAM,EAAE;AAAA,MACpD,QAAQ,GAAI,WAAW,KAAM,EAAE;AAAA,IACjC;AAAA,EACF;AAEA,QAAM,iBAAa,uBAAQ,MAAM;AAC/B,WAAO,OAAO,OAAO,WAAS;AAC5B,YAAM,aAAa,OAAO,MAAM,UAAU,eAAW,0BAAS,MAAM,KAAK,IAAI,MAAM;AACnF,aAAO,SAAS,KAAK,aAAO,2BAAU,KAAK,UAAU,CAAC;AAAA,IACxD,CAAC;AAAA,EACH,GAAG,CAAC,QAAQ,QAAQ,CAAC;AAOrB,QAAM,gBAAY,uBAAQ,MAAM;AAC9B,UAAM,YAAQ,iCAAY,8BAAa,WAAW,GAAG,EAAE,cAAc,EAAE,CAAC;AACxE,UAAM,UAAM,+BAAU,4BAAW,WAAW,GAAG,EAAE,cAAc,EAAE,CAAC;AAClE,eAAO,mCAAkB,EAAE,OAAO,IAAI,CAAC;AAAA,EACzC,GAAG,CAAC,WAAW,CAAC;AAEhB,QAAM,iBAAiB,CAAC,SAAe;AACrC,QAAI,eAAW,0BAAS,UAAM,4BAAW,OAAO,CAAC,EAAG,QAAO;AAC3D,QAAI,eAAW,yBAAQ,UAAM,4BAAW,OAAO,CAAC,EAAG,QAAO;AAC1D,WAAO;AAAA,EACT;AAEA,QAAM,CAAC,WAAW,YAAY,QAAI,wBAAsB,IAAI;AAC5D,QAAM,CAAC,aAAa,cAAc,QAAI,wBAAsB,IAAI;AAChE,QAAM,gBAAgB,cAAAC,QAAM,OAAO,KAAK;AAExC,QAAM,kBAAkB,CAAC,MAAY,MAAwB;AAEzD,QAAI,CAAC,cAAe;AAGpB,MAAE,gBAAgB;AAClB,MAAE,eAAe;AAEjB,kBAAc,UAAU;AACxB,iBAAa,IAAI;AACjB,mBAAe,IAAI;AAAA,EACvB;AAEA,QAAM,mBAAmB,CAAC,SAAe;AACrC,QAAI,aAAa;AACb,kBAAY,IAAI;AAAA,IACpB;AACA,QAAI,WAAW;AACX,oBAAc,UAAU;AACxB,qBAAe,IAAI;AAAA,IACvB;AAAA,EACJ;AAGA,QAAM,gBAAgB,MAAM;AACxB,QAAI,aAAa,eAAe,iBAAiB,cAAc,SAAS;AAEpE,UAAI,QAAQ;AACZ,UAAI,MAAM;AACV,cAAI,0BAAS,KAAK,KAAK,GAAG;AACtB,SAAC,OAAO,GAAG,IAAI,CAAC,KAAK,KAAK;AAAA,MAC9B;AAEA,YAAM,eAAW,4BAAW,KAAK,EAAE;AAEnC,UAAI,KAAC,2BAAU,OAAO,QAAQ,SAAK,qCAAoB,UAAU,KAAK,IAAI,GAAG;AAIzE,sBAAc,OAAO,QAAQ;AAAA,MACjC,OAAO;AACJ,sBAAc,OAAO,QAAQ;AAAA,MAChC;AAAA,IACJ;AAOA,iBAAa,IAAI;AACjB,mBAAe,IAAI;AAAA,EACvB;AAKA,QAAM,YAAY,YAAY,YAAY,IAAI;AAC9C,QAAM,QAAQ,MAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,CAAC,GAAG,MAAM,YAAY,CAAC;AAMhE,SACE;AAAA,IAAC;AAAA;AAAA,MACG,WAAW,GAAG,yEAAyE,SAAS;AAAA,MAChG,OAAO;AAAA,QACL,iBAAiB;AAAA,QACjB,QAAQ;AAAA,QACR,GAAG,iBAAiB;AAAA,MACtB;AAAA,MACA,WAAW;AAAA,MACX,cAAc,MAAM;AAChB,qBAAa,IAAI;AACjB,uBAAe,IAAI;AAAA,MACvB;AAAA,MAIF;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO;AAAA,cACL,iBAAiB;AAAA,cACjB,mBAAmB;AAAA,YACrB;AAAA,YAEA;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACG,IAAG;AAAA,kBACH,WAAU;AAAA,kBACV,OAAO;AAAA,oBACL,OAAO;AAAA,kBACT;AAAA,kBACC,SAAS,MAAM,QAAQ,SAAS,aAAa,UAAU,UAAU;AAAA,kBACjE,cAAc,CAAC,MAAM;AACnB,sBAAE,cAAc,MAAM,kBAAkB;AAAA,kBAC1C;AAAA,kBACA,cAAc,CAAC,MAAM;AACnB,sBAAE,cAAc,MAAM,kBAAkB;AAAA,kBAC1C;AAAA,kBAEF,mBAAS,UACN,GAAG,MAAM,CAAC,CAAC,MAAM,MAAM,MAAM,SAAS,CAAC,CAAC,SACxC,wBAAO,aAAa,aAAa,EAAE,QAAQ,iBAAG,CAAC;AAAA;AAAA,cAErD;AAAA,cACA,8CAAC,SAAI,WAAU,2BACb;AAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,SAAS;AAAA,oBACT,MAAK;AAAA,oBACL,WAAU;AAAA,oBACV,OAAO,EAAE,OAAO,qCAAqC;AAAA,oBACrD,cAAc,CAAC,MAAM;AAAE,wBAAE,cAAc,MAAM,kBAAkB;AAAA,oBAAyC;AAAA,oBACxG,cAAc,CAAC,MAAM;AAAE,wBAAE,cAAc,MAAM,kBAAkB;AAAA,oBAAe;AAAA,oBAE9E,uDAAC,4BAAc,MAAM,IAAI;AAAA;AAAA,gBAC3B;AAAA,gBACA;AAAA,kBAAC;AAAA;AAAA,oBACC,SAAS;AAAA,oBACT,MAAK;AAAA,oBACL,WAAU;AAAA,oBACV,OAAO,EAAE,OAAO,qCAAqC;AAAA,oBACrD,cAAc,CAAC,MAAM;AAAE,wBAAE,cAAc,MAAM,kBAAkB;AAAA,oBAAyC;AAAA,oBACxG,cAAc,CAAC,MAAM;AAAE,wBAAE,cAAc,MAAM,kBAAkB;AAAA,oBAAe;AAAA,oBAE9E,uDAAC,UAAO,IAAG,QAAO,iBAAG;AAAA;AAAA,gBACvB;AAAA,gBACA;AAAA,kBAAC;AAAA;AAAA,oBACC,SAAS;AAAA,oBACT,MAAK;AAAA,oBACL,WAAU;AAAA,oBACV,OAAO,EAAE,OAAO,qCAAqC;AAAA,oBACrD,cAAc,CAAC,MAAM;AAAE,wBAAE,cAAc,MAAM,kBAAkB;AAAA,oBAAyC;AAAA,oBACxG,cAAc,CAAC,MAAM;AAAE,wBAAE,cAAc,MAAM,kBAAkB;AAAA,oBAAe;AAAA,oBAE9E,uDAAC,6BAAe,MAAM,IAAI;AAAA;AAAA,gBAC5B;AAAA,iBACF;AAAA;AAAA;AAAA,QACF;AAAA,QAGA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,iBAAiB,8BAA8B;AAAA,YAGvD,mBAAS,UACJ,6CAAC,SAAI,WAAU,8BACV,gBAAM,IAAI,UACP;AAAA,cAAC;AAAA;AAAA,gBAEG,MAAK;AAAA,gBACL,WAAW;AAAA,kBACP;AAAA,kBACA,SAAS,YAAY,YAAY,IAC7B,0EACA;AAAA,gBACR;AAAA,gBACA,OAAO;AAAA,kBACH,OAAO,SAAS,YAAY,YAAY,IACpC,2CACA;AAAA,gBACR;AAAA,gBACA,SAAS,MAAM;AACX,iCAAe,CAAC,MAAM;AAClB,0BAAM,UAAU,IAAI,KAAK,CAAC;AAC1B,4BAAQ,YAAY,IAAI;AACxB,2BAAO;AAAA,kBACX,CAAC;AACD,0BAAQ,UAAU;AAAA,gBACtB;AAAA,gBAEA,uDAAC,UAAO,IAAG,QAAQ,gBAAK;AAAA;AAAA,cAtBnB;AAAA,YAuBT,CACH,GACL,IACF,SAAS,UACV,8CAAC,SAAI,WAAU,OAEb;AAAA,2DAAC,SAAI,WAAU,yBACX,WAAC,OAAO,OAAO,UAAO,OAAO,OAAO,UAAO,KAAK,EAAE,IAAI,SACrD,6CAAC,UAAiB,IAAG,OAAM,WAAU,kEAClC,iBADU,GAEb,CACD,GACJ;AAAA,cAEC,6CAAC,SAAI,WAAU,0BACZ,oBAAU,IAAI,CAAC,QAAQ;AACtB,sBAAM,aAAa,eAAe,GAAG;AACrC,sBAAM,qBAAiB,6BAAY,KAAK,WAAW;AAGnD,sBAAM,aAAa,kBAAkB,YAAY,aAAS,2BAAU,KAAK,KAAK;AAC9E,sBAAM,eAAe,kBAAkB,WAAW,iBAAa,2BAAU,KAAK,SAAS;AACvF,sBAAM,aAAa,kBAAkB,WAAW,eAAW,2BAAU,KAAK,OAAO;AACjF,sBAAM,YAAY,kBAAkB,WAAW,aAAa,eAAW,yBAAQ,KAAK,SAAS,SAAK,0BAAS,KAAK,OAAO;AAEvH,uBACE;AAAA,kBAAC;AAAA;AAAA,oBAEC,MAAK;AAAA,oBACL,UAAU;AAAA,oBACV,SAAS,MAAM,YAAY,SAAS,GAAG;AAAA,oBACvC,WAAW;AAAA,sBACT;AAAA,sBACA,CAAC,kBAAkB;AAAA,sBACnB,cAAc;AAAA,oBAChB;AAAA,oBACA,OAAO;AAAA,sBACL,iBAAiB,cAAc,gBAAgB,aAC3C,yCACA,YACE,0CACA,yBAAQ,GAAG,IACT,sCACA;AAAA,sBACR,OAAO,cAAc,gBAAgB,aACjC,+CACA,yBAAQ,GAAG,IACT,wCACA;AAAA,sBACN,YAAY,cAAc,gBAAgB,kBAAc,yBAAQ,GAAG,IAAI,QAAQ;AAAA,oBACjF;AAAA,oBAEA;AAAA,mEAAC,UAAO,IAAG,QAAQ,sCAAO,KAAK,GAAG,GAAE;AAAA,sBAGnC,kBAAkB,WAAW,gBAAgB,WAC5C,6CAAC,SAAI,WAAU,2EAA0E;AAAA,sBAE1F,kBAAkB,WAAW,cAAc,aAC1C,6CAAC,SAAI,WAAU,0EAAyE;AAAA;AAAA;AAAA,kBAhCrF,IAAI,YAAY;AAAA,gBAkCvB;AAAA,cAEJ,CAAC,GACH;AAAA,eACH;AAAA;AAAA,cAGD,8CAAC,SAAI,WAAW,GAAG,eAAe,SAAS,SAAS,kBAAkB,QAAQ,GAE3E;AAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,WAAU;AAAA,oBACV,OAAO;AAAA,sBACL,iBAAiB;AAAA,sBACjB,aAAa;AAAA,oBACf;AAAA,oBAEC,qBAAW,IAAI,CAAC,SACf,OAAO,YACL,6CAAC,SAAe,WAAU,iCACvB,uDAAC,UAAO,IAAG,QAAO,WAAU,4FACzB,uCAAO,oBAAI,KAAK,GAAE,SAAS,MAAM,CAAC,GAAG,OAAO,GAC/C,KAHO,IAIV,CAEH;AAAA;AAAA,gBACH;AAAA,gBAGD,6CAAC,SAAI,WAAU,eACZ,mBAAS,IAAI,CAAC,QACb;AAAA,kBAAC;AAAA;AAAA,oBAEC,WAAU;AAAA,oBACV,OAAO,EAAE,aAAa,4CAA4C;AAAA,oBAIlE;AAAA;AAAA,wBAAC;AAAA;AAAA,0BACC,WAAU;AAAA,0BACV,OAAO;AAAA,4BACL,qBAAiB,yBAAQ,GAAG,IAAI,sCAAsC;AAAA,4BACtE,cAAc;AAAA,0BAChB;AAAA,0BAEA;AAAA;AAAA,8BAAC;AAAA;AAAA,gCACC,IAAG;AAAA,gCACH,WAAU;AAAA,gCACV,OAAO;AAAA,kCACL,WAAO,yBAAQ,GAAG,IAAI,wCAAwC;AAAA,kCAC9D,aAAS,yBAAQ,GAAG,IAAI,IAAI;AAAA,gCAC9B;AAAA,gCAEC,sCAAO,KAAK,OAAO,EAAE,QAAQ,iBAAG,CAAC;AAAA;AAAA,4BACpC;AAAA,4BACA;AAAA,8BAAC;AAAA;AAAA,gCACC,IAAG;AAAA,gCACH,WAAU;AAAA,gCACV,OAAO;AAAA,kCACL,WAAO,yBAAQ,GAAG,IAAI,2CAA2C;AAAA,kCACjE,qBAAiB,yBAAQ,GAAG,IAAI,yCAAyC;AAAA,gCAC3E;AAAA,gCAEC,sCAAO,KAAK,GAAG;AAAA;AAAA,4BAClB;AAAA;AAAA;AAAA,sBACF;AAAA,sBAGA,8CAAC,SAAI,WAAU,YACZ;AAAA,mCAAW,IAAI,CAAC,SACf,OAAO,YACL;AAAA,0BAAC;AAAA;AAAA,4BAEC,WAAU;AAAA,4BACV,OAAO,EAAE,cAAc,6CAA6C;AAAA,4BAGnE;AAAA;AAAA,gCAAC;AAAA;AAAA,kCACA,WAAU;AAAA,kCACT,aAAa,CAAC,MAAM;AAChB,0CAAM,IAAI,IAAI,KAAK,GAAG;AAAG,sCAAE,SAAS,MAAM,GAAG,GAAG,CAAC;AACjD,oDAAgB,GAAG,CAAC;AAAA,kCACxB;AAAA,kCACA,cAAc,MAAM;AAChB,0CAAM,IAAI,IAAI,KAAK,GAAG;AAAG,sCAAE,SAAS,MAAM,GAAG,GAAG,CAAC;AACjD,qDAAiB,CAAC;AAAA,kCACtB;AAAA,kCACA,SAAS,MAAM;AACb,wCAAI,CAAC,cAAc,SAAS;AACxB,4CAAM,IAAI,IAAI,KAAK,GAAG;AAAG,wCAAE,SAAS,MAAM,GAAG,GAAG,CAAC;AACjD,qDAAe,YAAY,CAAC;AAAA,oCAChC;AAAA,kCACF;AAAA;AAAA,8BACF;AAAA,8BAEA;AAAA,gCAAC;AAAA;AAAA,kCACA,WAAU;AAAA,kCACT,aAAa,CAAC,MAAM;AAChB,0CAAM,IAAI,IAAI,KAAK,GAAG;AAAG,sCAAE,SAAS,MAAM,IAAI,GAAG,CAAC;AAClD,oDAAgB,GAAG,CAAC;AAAA,kCACxB;AAAA,kCACA,cAAc,MAAM;AAChB,0CAAM,IAAI,IAAI,KAAK,GAAG;AAAG,sCAAE,SAAS,MAAM,IAAI,GAAG,CAAC;AAClD,qDAAiB,CAAC;AAAA,kCACtB;AAAA,kCACA,SAAS,MAAM;AACb,wCAAI,CAAC,cAAc,SAAS;AACxB,4CAAM,IAAI,IAAI,KAAK,GAAG;AAAG,wCAAE,SAAS,MAAM,IAAI,GAAG,CAAC;AAClD,qDAAe,YAAY,CAAC;AAAA,oCAChC;AAAA,kCACF;AAAA;AAAA,8BACF;AAAA;AAAA;AAAA,0BAvCI;AAAA,wBAwCP,CAEH;AAAA,wBAGA,aAAa,mBAAe,2BAAU,WAAW,GAAG,MAC/C,MAAM;AACJ,8BAAI,QAAQ;AACZ,8BAAI,MAAM;AACV,kCAAI,0BAAS,KAAK,KAAK,EAAG,EAAC,OAAO,GAAG,IAAI,CAAC,KAAK,KAAK;AACpD,gCAAM,eAAW,4BAAW,KAAK,EAAE;AAEnC,gCAAM,eAAe,MAAM,SAAS,IAAI,KAAK,MAAM,WAAW;AAC9D,gCAAM,kBAAkB,aAAa;AACrC,gCAAM,eAAW,qCAAoB,UAAU,KAAK;AACpD,gCAAM,OAAQ,eAAe,mBAAmB,KAAM;AACtD,gCAAM,SAAU,WAAW,KAAM;AAEhC,iCACI;AAAA,4BAAC;AAAA;AAAA,8BACG,WAAU;AAAA,8BACV,OAAO,EAAE,KAAK,GAAG,GAAG,MAAM,QAAQ,GAAG,MAAM,KAAK;AAAA;AAAA,0BACpD;AAAA,wBAER,GAAG;AAAA,wBAIP,WACE,OAAO,CAAC,cAAU,2BAAU,OAAO,MAAM,UAAU,eAAW,0BAAS,MAAM,KAAK,IAAI,MAAM,OAAO,GAAG,CAAC,EACvG,IAAI,CAAC,UAAU;AACd,gCAAM,QAAQ,cAAc,KAAK;AACjC,iCACE;AAAA,4BAAC;AAAA;AAAA,8BAEE,WAAW;AAAA,gCACT;AAAA,gCACA,CAAC,MAAM,SAAS;AAAA,8BAClB;AAAA,8BACD,OAAO;AAAA,gCACL,KAAK,MAAM;AAAA,gCACX,QAAQ,MAAM;AAAA,gCACd,iBAAiB,MAAM,QAAQ,GAAG,MAAM,KAAK,OAAO;AAAA,gCACpD,aAAa,MAAM;AAAA,gCACnB,OAAO,MAAM,QAAQ,MAAM,QAAQ;AAAA,8BACpC;AAAA,8BACD,SAAS,CAAC,MAAM;AACd,kCAAE,gBAAgB;AAClB,gDAAgB,aAAa,KAAK;AAAA,8BACpC;AAAA,8BAEA;AAAA,6EAAC,UAAO,IAAG,OAAM,WAAU,0BAA0B,gBAAM,OAAM;AAAA,gCACjE,8CAAC,UAAO,IAAG,OAAM,WAAU,uBACxB;AAAA,8DAAO,OAAO,MAAM,UAAU,eAAW,0BAAS,MAAM,KAAK,IAAI,MAAM,OAAO,OAAO;AAAA,kCAAE;AAAA,sCACvF,wBAAO,OAAO,MAAM,QAAQ,eAAW,0BAAS,MAAM,GAAG,IAAI,MAAM,KAAK,OAAO;AAAA,mCAClF;AAAA;AAAA;AAAA,4BArBK,MAAM;AAAA,0BAsBb;AAAA,wBAEJ,CAAC;AAAA,yBACL;AAAA,0BAGC,yBAAQ,GAAG,KACV;AAAA,wBAAC;AAAA;AAAA,0BACC,WAAU;AAAA,0BACV,OAAO;AAAA,4BACL,KAAK,KAAK,oBAAI,KAAK,GAAE,SAAS,IAAI,MAAK,oBAAI,KAAK,GAAE,WAAW,IAAK,aAAa,MAAO,KAAM,EAAE;AAAA,0BAChG;AAAA,0BAEA,uDAAC,SAAI,WAAU,kEAAiE;AAAA;AAAA,sBAClF;AAAA;AAAA;AAAA,kBAtJG,IAAI,YAAY;AAAA,gBAyJvB,CACD,GACH;AAAA,iBACF;AAAA;AAAA;AAAA,QAEJ;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,mBAAQ;;;AC/lBf,IAAAC,eAAiB;AAEjB,IAAAC,gBAAyB;AA6CjB,IAAAC,sBAAA;AA1CO,SAAR,OAAwB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAgB;AACd,QAAM,CAAC,WAAW,YAAY,QAAI,wBAAS,KAAK;AAEhD,QAAM,iBAAsC;AAAA,IAC1C,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,cAAc;AAAA,IACd,WAAW,UACP,YACE,uCACA,oCACF;AAAA,IACJ,YAAY,UAAU,yBAAyB;AAAA,IAC/C,QAAQ,UAAU,YAAY;AAAA,EAChC;AAEA,QAAM,YAAiC;AAAA,IACrC,SAAS;AAAA,EACX;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,cAAc,MAAM,WAAW,aAAa,IAAI;AAAA,MAChD,cAAc,MAAM,WAAW,aAAa,KAAK;AAAA,MACjD,eAAW,aAAAC,SAAK,iCAAiC,SAAS;AAAA,MAC1D,OAAO;AAAA,MAEN;AAAA,iBACC;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL;AAAA,YACA,eAAW,aAAAA,SAAK,4BAA4B,cAAc;AAAA;AAAA,QAC5D;AAAA,QAGF,8CAAC,SAAI,eAAW,aAAAA,SAAK,gBAAgB,GAAG,OAAO,WAC5C;AAAA,mBACC;AAAA,YAAC;AAAA;AAAA,cACC,IAAG;AAAA,cACH,eAAW,aAAAA,SAAK,8BAA8B,cAAc;AAAA,cAE3D;AAAA;AAAA,UACH;AAAA,UAEF,6CAAC,UAAO,IAAG,OAAM,WAAU,iBAAiB,UAAS;AAAA,WACvD;AAAA,QACC,WACC;AAAA,UAAC;AAAA;AAAA,YACC,eAAW,aAAAA;AAAA,cACT;AAAA,cACA;AAAA,YACF;AAAA,YAEC;AAAA;AAAA,QACH;AAAA;AAAA;AAAA,EAEJ;AAEJ;;;AC7EA,IAAAC,eAAiB;AAqBX,IAAAC,sBAAA;AAjBS,SAAR,WAA4B;AAAA,EACjC,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,gBAAgB;AAAA,EAChB;AAAA,EACA;AACF,GAAoB;AAClB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW,aAAAC;AAAA,QACT;AAAA,QACA,YAAY;AAAA,QACZ;AAAA,MACF;AAAA,MAEA;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL;AAAA,YACA;AAAA,YACA,UAAU,CAAC,MAAM,WAAW,EAAE,OAAO,OAAO;AAAA,YAC5C;AAAA,YACA,KAAK,CAAC,OAAO;AAAE,kBAAI,GAAI,IAAG,gBAAgB;AAAA,YAAe;AAAA,YACzD,WAAU;AAAA;AAAA,QACZ;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,eAAW,aAAAA;AAAA,cACT;AAAA,cACA,UACI,sCACA;AAAA,cACJ,CAAC,YAAY;AAAA,YACf;AAAA,YAEC;AAAA,yBACC,6CAAC,SAAI,WAAU,0BAAyB,SAAQ,aAAY,MAAK,QAC/D,uDAAC,UAAK,GAAE,iBAAgB,QAAO,gBAAe,aAAY,KAAI,eAAc,SAAQ,gBAAe,SAAQ,GAC7G;AAAA,cAED,iBAAiB,CAAC,WACjB,6CAAC,SAAI,WAAU,kCAAiC;AAAA;AAAA;AAAA,QAEpD;AAAA,QACC,SAAS,6CAAC,UAAO,IAAG,QAAO,WAAU,8CAA8C,iBAAM;AAAA;AAAA;AAAA,EAC5F;AAEJ;;;ACnDA,IAAAC,eAAiB;AAGjB,IAAAC,aAAsC;AAkBhC,IAAAC,uBAAA;AAfS,SAAR,gBAAiC;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,eAAe;AAAA,EACf,cAAc;AAAA,EACd,UAAU;AAAA,EACV,UAAU;AACZ,GAAyB;AACvB,MAAI,CAAC,OAAQ,QAAO;AAEpB,SACE,+CAAC,SAAI,WAAU,8DACb;AAAA,kDAAC,SAAI,WAAU,iDAAgD,SAAS,SAAS;AAAA,IACjF;AAAA,MAAC;AAAA;AAAA,QACC,eAAW,aAAAC;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,QAEA;AAAA,yDAAC,SAAI,WAAU,0BACb;AAAA,0DAAC,SAAI,WAAU,2GACb,wDAAC,oCAAsB,WAAU,kBAAiB,MAAM,IAAI,GAC9D;AAAA,YACA,+CAAC,SAAI,WAAU,UACb;AAAA,4DAAC,UAAO,IAAG,MAAK,WAAU,oDAAoD,iBAAM;AAAA,cACpF,8CAAC,UAAO,IAAG,KAAI,WAAU,mDAAmD,mBAAQ;AAAA,eACtF;AAAA,aACF;AAAA,UACA,+CAAC,SAAI,WAAU,+BACb;AAAA,0DAAC,YAAS,OAAO,aAAa,SAAQ,YAAW,MAAK,SAAQ,SAAS,SAAS,UAAU,SAAS;AAAA,YACnG,8CAAC,YAAS,OAAO,cAAc,OAAO,SAAS,MAAK,SAAQ,SAAS,WAAW,UAAU,SAAS;AAAA,aACrG;AAAA;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;;;ACxCO,IAAM,gBAA+C;AAAA,EAC1D,SAAS;AAAA,EACT,SAAS;AAAA,EACT,UAAU;AACZ;AAEO,IAAM,aAAwC;AAAA,EACnD,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;;;ACZA,IAAAC,gBAAiB;AACjB,IAAAC,iBAAgE;AAChE,IAAAC,aAA4C;AAC5C,IAAAC,aAAkC;;;ACJlC,IAAAC,gBAAiB;AAEjB,IAAAC,gBAAwE;;;ACHxE,IAAAC,gBAAiB;AAiBV,SAAS,WAAW,OAAiB;AAC1C,aAAO,cAAAC;AAAA,IACL;AAAA,IACA,QAAQ,iBAAiB;AAAA,EAC3B;AACF;AAEO,IAAM,aAAa;AAMnB,IAAM,mBAAmB;AACzB,IAAM,oBAAoB;AA4C1B,IAAM,kBAA0C;AAAA,EACrD,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,IAAI;AACN;AAEO,SAAS,iBAAiB,SAAiB;AAChD,SAAO,gBAAgB,OAAO,KAAK;AACrC;AAEO,SAAS,gBACd,MACA,SACA;AACA,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO,YAAY,KAAK,IAAI,MAAM,OAAO,CAAC;AAAA,EAC5C;AACA,MAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,UAAM,CAAC,IAAI,IAAI,EAAE,IAAI;AACrB,eAAO,cAAAC;AAAA,MACL,YAAY,KAAK,IAAI,IAAI,OAAO,CAAC;AAAA,MACjC,OAAO,UAAa,eAAe,KAAK,IAAI,IAAI,OAAO,CAAC;AAAA,MACxD,OAAO,UAAa,eAAe,KAAK,IAAI,IAAI,OAAO,CAAC;AAAA,IAC1D;AAAA,EACF;AACA,QAAM,UAAoB,CAAC;AAC3B,MAAI,KAAK,GAAI,SAAQ,KAAK,YAAY,KAAK,IAAI,KAAK,IAAI,OAAO,CAAC,EAAE;AAClE,MAAI,KAAK,GAAI,SAAQ,KAAK,eAAe,KAAK,IAAI,KAAK,IAAI,OAAO,CAAC,EAAE;AACrE,MAAI,KAAK,GAAI,SAAQ,KAAK,eAAe,KAAK,IAAI,KAAK,IAAI,OAAO,CAAC,EAAE;AACrE,MAAI,KAAK,GAAI,SAAQ,KAAK,eAAe,KAAK,IAAI,KAAK,IAAI,OAAO,CAAC,EAAE;AACrE,SAAO,QAAQ,aAAS,cAAAA,SAAK,OAAO,IAAI,YAAY,OAAO;AAC7D;AAEO,IAAM,WAAW,CAAC,gBACvB,cAAAA,SAAK,wBAAwB,iBAAiB,OAAO,CAAC;AAMjD,IAAM,kBAAkB;;;AD+SjB,IAAAC,uBAAA;AA9ZC,SAAR,QAAyB;AAAA,EAC9B;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,WAAW;AAAA,EACX,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AACF,GAAiB;AACf,QAAM,oBAAoB,SAAS,cAAc,SAAS;AAC1D,QAAM,eAAe,SAAS;AAC9B,QAAM,aAAa,SAAS;AAE5B,QAAM,CAAC,cAAc,eAAe,QAAI,wBAAiB,EAAE;AAC3D,QAAM,CAAC,WAAW,YAAY,QAAI,wBAAS,KAAK;AAChD,QAAM,CAAC,gBAAgB,iBAAiB,QAAI,wBAAS,KAAK;AAC1D,QAAM,CAAC,cAAc,eAAe,QAAI,wBAAS,KAAK;AACtD,QAAM,CAAC,cAAc,eAAe,QAAI,wBAAS,KAAK;AAEtD,QAAM,eAAW,sBAAyB,IAAI;AAG9C,QAAM,aAAc,MAAc,SAAS,CAAC;AAE5C,QAAM,WAAW,MAAM;AACrB,UAAM,QAA6B;AAAA,MACjC,iBAAiB,WAAW;AAAA,MAC5B,aAAa,WAAW;AAAA,MACxB,cAAc,WAAW;AAAA,MACzB,SAAS,WAAW;AAAA,MACpB,UAAU,WAAW;AAAA,MACrB,aAAa;AAAA,MACb,aAAa;AAAA,MACb,YAAY;AAAA,MACZ,OAAO;AAAA;AAAA,IACT;AAEA,QAAI,UAAU;AACZ,YAAM,kBAAkB,WAAW,UAAU,mBAAmB,MAAM;AACtE,YAAM,cAAc,WAAW,UAAU,eAAe,MAAM;AAC9D,YAAM,UAAU;AAAA,IAClB;AAEA,QAAI,UAAU;AACX,YAAM,cAAc,WAAW,OAAO,eAAe;AACrD,UAAI,WAAW;AACX,cAAM,YAAY,WAAW,OAAO;AAAA,MACxC;AAAA,IACH,WAAW,aAAa,CAAC,UAAU;AAChC,YAAM,YAAY,WAAW,OAAO;AAAA,IACvC;AAEA,QAAI,UAAU;AACZ,YAAM,cAAc;AAAA,IACtB;AACA,QAAI,WAAW;AACb,YAAM,eAAe;AAAA,IACvB;AAEA,WAAO;AAAA,EACT;AAEA,QAAM,YAAY,YAAY,SAAY,UAAU;AACpD,QAAM,UAAU,oBACZ,CAAC,UACA,UAAU,UAAa,UAAU,QAAQ,OAAO,KAAK,EAAE,KAAK,MAAM;AAEvE,QAAM,iBAAiB,UAAU,UAAa,UAAU,QACnD,UAAU,OAAO,4BAA4B,QAC7C,YAAY,UAAU,4BAA4B;AAEvD,QAAM,WAAW,aAAa,CAAC,CAAC;AAChC,QAAM,eAAe,OAAO,mBAAmB,WAAW,iBAAiB;AAG1E,QAAM,cAAc,CAAC,MAA0C;AAC9D,QAAI,SAAS;AACX,cAAQ;AAAA,IACV;AAEA,QAAI,CAAC,YAAY,CAAC,gBAAgB;AAChC,QAAE,cAAc,OAAO;AACvB,wBAAkB,IAAI;AAAA,IACxB;AAAA,EACF;AAEA,QAAM,kBAAc;AAAA,IAClB,CAAC,QAAoD;AACnD,YAAM,MACJ,OAAO,QAAQ,WAAW,WAAW,IAAI,QAAQ,MAAM,EAAE,CAAC,IAAI;AAEhE,UAAI,OAAO,QAAQ,MAAM,GAAG,GAAG;AAC7B,eAAO;AAAA,MACT;AAEA,UAAI,gBAAgB;AAClB,eAAO,IAAI,eAAe,SAAS;AAAA,UACjC,uBAAuB;AAAA,UACvB,uBAAuB;AAAA,QACzB,CAAC;AAAA,MACH;AAEA,aAAO,IAAI,SAAS;AAAA,IACtB;AAAA,IACA,CAAC,cAAc;AAAA,EACjB;AAEA,QAAM,oBAAgB;AAAA,IACpB,CAAC,QAAoD;AACnD,UAAI,OAAO,KAAM,QAAO;AAExB,aAAO,OAAO,GAAG,EAAE,QAAQ,MAAM,EAAE;AAAA,IACrC;AAAA,IACA,CAAC;AAAA,EACH;AAEF,+BAAU,MAAM;AACd,QAAI,CAAC,WAAW;AACd,UAAI,cAAc;AAChB,YAAI,cAAc;AAChB,0BAAgB,YAAY,KAAK,CAAC;AAAA,QACpC,OAAO;AACL,0BAAgB,OAAO,SAAS,EAAE,CAAC;AAAA,QACrC;AAAA,MACF,OAAO;AACL,wBAAgB,OAAO,SAAS,EAAE,CAAC;AAAA,MACrC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,OAAO,WAAW,cAAc,aAAa,YAAY,CAAC;AAC5D,QAAM,gBAAgB,CAAC,MAAuC;AAC5D,QAAI,YAAY,CAAC,aAAc;AAE/B,UAAM,EAAE,KAAK,SAAS,QAAQ,IAAI;AAClC,UAAM;AAAA,MACJ,OAAO;AAAA,MACP;AAAA,MACA;AAAA,IACF,IAAI,EAAE;AAEN,UAAM,cAAc;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,IACF;AACA,QAAI,YAAY,SAAS,GAAG,KAAK,WAAW,SAAS;AACnD;AAAA,IACF;AAEA,QAAI,CAAC,mBAAmB,QAAQ,OAAO,QAAQ,MAAM;AACnD,QAAE,eAAe;AACjB;AAAA,IACF;AAEA,QACE,mBACC,QAAQ,OAAO,QAAQ,QACxB,aAAa,SAAS,GAAG,GACzB;AAEA,YAAM,WAAW,aAAa,QAAQ,GAAG;AACzC,YAAM,eAAe,mBAAmB,QAAQ,iBAAiB,QAAQ,kBAAkB,YAAY,WAAW;AAClH,UAAI,CAAC,cAAc;AACjB,UAAE,eAAe;AACjB;AAAA,MACF;AAAA,IACF;AAEA,UAAM,oBAAoB,iBAAiB,cAAc;AAEzD,QAAI,QAAQ,kBAAkB,CAAC,kBAAkB,KAAK,GAAG,GAAG;AAC1D,QAAE,eAAe;AACjB;AAAA,IACF;AAEA,QACE,QAAQ,UACR,UAAU,KAAK,GAAG,KAClB,mBAAmB,QACnB,iBAAiB,MACjB;AACA,YAAM,qBAAqB,cAAc,YAAY;AACrD,YAAM,eACJ,mBAAmB,MAAM,GAAG,cAAc,IAC1C,MACA,mBAAmB,MAAM,YAAY;AAEvC,YAAM,eAAe,WAAW,YAAY;AAE5C,UAAI,CAAC,MAAM,YAAY,KAAK,eAAe,KAAK;AAC9C,UAAE,eAAe;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AAEF,QAAM,qBAAqB,CAAC,MAA2C;AACrE,QAAI,SAAU;AAEd,QAAI,WAAW,EAAE,OAAO;AACxB,QAAI,eAAe;AAEnB,QAAI,gBAAgB;AAClB,UAAI,SAAS,SAAS,GAAG,KAAK,SAAS,SAAS,GAAG,GAAG;AACpD,mBAAW,SAAS,QAAQ,MAAM,EAAE;AAAA,MACtC,WAAW,SAAS,SAAS,GAAG,GAAG;AACjC,mBAAW,SAAS,QAAQ,MAAM,GAAG;AAAA,MACvC;AAEA,qBAAe,SAAS,QAAQ,YAAY,EAAE;AAC9C,YAAM,QAAQ,aAAa,MAAM,GAAG;AACpC,UAAI,MAAM,SAAS,GAAG;AAEpB,cAAM,WAAW,MAAM,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,UAAU,GAAG,CAAC;AACvD,uBAAe,MAAM,CAAC,IAAI,MAAM;AAAA,MAClC;AAAA,IACF,OAAO;AACL,qBAAe,SAAS,QAAQ,WAAW,EAAE;AAAA,IAC/C;AAEA,oBAAgB,YAAY;AAE5B,QAAI,UAAU;AACZ,UAAI,cAA+B;AAEnC,UAAI,CAAC,cAAc;AACjB,sBAAc;AAAA,MAChB,WAAW,iBAAiB,IAAI;AAC9B,YAAI,gBAAgB;AAClB,gBAAM,eAAe,WAAW,YAAY;AAC5C,cAAI,CAAC,MAAM,YAAY,GAAG;AAExB,0BAAc;AAAA,UAChB;AAAA,QACF,OAAO;AACL,gBAAM,eAAe,SAAS,cAAc,EAAE;AAC9C,cAAI,CAAC,MAAM,YAAY,GAAG;AACxB,0BAAc;AAAA,UAChB;AAAA,QACF;AAAA,MACF;AAEA,YAAM,WAAW;AAAA,QACf,GAAG;AAAA,QACH,QAAQ;AAAA,UACN,GAAG,EAAE;AAAA,UACL;AAAA,UACA,OAAO,YAAY,SAAS;AAAA,QAC9B;AAAA,MACF;AACA,eAAS,QAAQ;AAAA,IACnB;AAAA,EACF;AAEE,QAAM,mBAAmB,CAAC,MAA2C;AACnE,QAAI,SAAU;AAEd,UAAMC,SAAQ,EAAE,OAAO;AAEvB,QAAG,WAAU;AACX,UAAGA,OAAM,SAAS,UAAW;AAAA,IAC/B;AACC,QAAI,UAAU;AAEb,YAAM,WAAW;AAAA,QACf,GAAG;AAAA,QACH,QAAQ;AAAA,UACN,GAAG,EAAE;AAAA,UACL;AAAA,UACA,OAAOA;AAAA,QACT;AAAA,MACF;AACA,eAAS,QAAQ;AAAA,IACnB;AAAA,EAEF;AAEA,QAAM,cAAc,CAAC,MAA0C;AAC7D,iBAAa,IAAI;AACjB,sBAAkB,KAAK;AACvB,QAAI,YAAY,CAAC,aAAc;AAE/B,oBAAgB,cAAc,KAAK,CAAC;AACpC,MAAE,cAAc,OAAO;AAAA,EACzB;AAEF,QAAM,aAAa,CAAC,MAA0C;AAC5D,oBAAgB,IAAI;AACpB,sBAAkB,KAAK;AACvB,iBAAa,KAAK;AAClB,QAAI,UAAU;AACZ,eAAS,CAAC;AACV;AAAA,IACF;AAEA,QAAI,cAAc;AAChB,YAAM,eAAe;AAGrB,UAAI,CAAC,cAAc;AACjB,YAAI,YAAY,OAAO,KAAK,MAAM,cAAc;AAC9C,gBAAM,WAAW;AAAA,YACf,GAAG;AAAA,YACH,QAAQ;AAAA,cACN,GAAG,EAAE;AAAA,cACL;AAAA,cACA,OAAO;AAAA;AAAA,YACT;AAAA,UACF;AACA,mBAAS,QAAQ;AAAA,QACnB;AACA,iBAAS,CAAC;AACV;AAAA,MACF;AAGA,UAAI,eAAmC;AACvC,UAAI,cAA2C;AAE/C,UAAI,eAAe;AACnB,UAAI,gBAAgB;AAClB,uBAAe,aAAa,QAAQ,YAAY,EAAE;AAClD,cAAM,QAAQ,aAAa,MAAM,GAAG;AACpC,YAAI,MAAM,SAAS,GAAG;AACpB,yBAAe,MAAM,CAAC,IAAI,MAAM,MAAM,MAAM,CAAC,EAAE,KAAK,EAAE;AAAA,QACxD;AACA,YAAI,iBAAiB,IAAK,gBAAe;AAAA,MAC3C,OAAO;AACL,uBAAe,aAAa,QAAQ,WAAW,EAAE;AAAA,MACnD;AAEA,YAAM,SAAS,iBACX,WAAW,YAAY,IACvB,SAAS,cAAc,EAAE;AAE7B,UAAI,CAAC,MAAM,MAAM,GAAG;AAClB,uBAAe;AAEf,YAAI,QAAQ,UAAa,eAAe,KAAK;AAC3C,yBAAe;AAAA,QACjB;AACA,YAAI,QAAQ,UAAa,eAAe,KAAK;AAC3C,yBAAe;AAAA,QACjB;AACA,sBAAc;AAEd,wBAAgB,YAAY,YAAY,CAAC;AAAA,MAC3C,OAAO;AACL,wBAAgB,EAAE;AAClB,sBAAc;AAAA,MAChB;AAEA,UAAI,YAAY,OAAO,KAAK,MAAM,OAAO,WAAW,GAAG;AACrD,cAAM,WAAW;AAAA,UACf,GAAG;AAAA,UACH,QAAQ;AAAA,YACN,GAAG,EAAE;AAAA,YACL;AAAA,YACA,OAAO;AAAA,UACT;AAAA,QACF;AACA,iBAAS,QAAQ;AAAA,MACnB,WACE,OAAO,KAAK,MAAM,OAAO,WAAW,KACpC,iBAAiB,YAAY,KAAK,KAClC,CAAC,MAAM,MAAM,GACb;AACA,wBAAgB,YAAY,KAAK,CAAC;AAAA,MACpC,WAAW,MAAM,MAAM,GAAG;AACxB,wBAAgB,EAAE;AAAA,MACpB;AAAA,IACF;AACA,aAAS,CAAC;AAAA,EACZ;AAEE,QAAM,gBAAgB,gBACjB,iBAAiB,aAAa,QAAQ,SAAS,EAAE,IAAI,cAAc,SACpE,OAAO,UAAU,WACjB,MAAM,SACN,OAAO,SAAS,EAAE,EAAE;AAErB,SACA,+CAAC,SAAI,eAAW,cAAAC,SAAK,UAAU,kBAAkB,GAC5C;AAAA;AAAA;AAAA,MAEC,+CAAC,SAAI,WAAU,2BACZ;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL;AAAA,YACA,IAAI;AAAA,YACJ;AAAA,YACA;AAAA,YACA,UAAU,CAAC,MAAM;AACf,8BAAgB,IAAI;AACpB,+BAAiB,CAAC;AAAA,YACpB;AAAA,YACA,QAAQ,CAAC,MAAM;AACb,8BAAgB,IAAI;AACpB,uBAAS,CAAC;AAAA,YACZ;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,eAAW,cAAAA;AAAA,cACT;AAAA,cACA;AAAA,cACC,SAAS,cAAc;AAAA,cACvB;AAAA,cACA,EAAE,CAAC,eAAe,GAAG,SAAS;AAAA,cAC9B,EAAE,kBAAkB,SAAS;AAAA,YAChC;AAAA;AAAA,QACF;AAAA,QACC,SACC,+CAAC,WAAM,SAAS,MAAM,WAAU,yDAC7B;AAAA;AAAA,UAAM;AAAA,UAAE,YAAY,8CAAC,UAAO,IAAG,QAAO,WAAU,gBAAe,eAAC;AAAA,WACnE;AAAA,SAEL;AAAA;AAAA;AAAA,MAGA,+CAAC,SAAI,WAAU,yBACZ;AAAA,iBACE;AAAA,UAAC;AAAA;AAAA,YACC,SAAS;AAAA,YACT,eAAW,cAAAA;AAAA,cACT,WAAW,QAAQ;AAAA,cACnB;AAAA,YACF;AAAA,YAEC;AAAA;AAAA,cACA,YAAY,8CAAC,UAAO,IAAG,QAAO,WAAU,qBAAoB,eAAC;AAAA;AAAA;AAAA,QAChE;AAAA,QAGH,+CAAC,SAAI,WAAU,mBACV;AAAA,sBACC,8CAAC,SAAI,WAAW,kBACb,oBACH;AAAA,UAGF,aACC;AAAA,YAAC;AAAA;AAAA,cACC;AAAA,cACA,IAAI;AAAA,cACJ;AAAA,cACA,OAAO,SAAS;AAAA,cAChB,UAAU,WAAW,SAAY;AAAA,cACjC,QAAQ,CAAC,MAAM;AACb,oBAAI,SAAU;AACd,gCAAgB,IAAI;AACpB,yBAAS,CAAC;AAAA,cACZ;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA,eAAW,cAAAA;AAAA,gBACT;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,EAAE,sBAAsB,SAAS;AAAA,cACnC;AAAA,cACA,OAAO,SAAS;AAAA;AAAA,UAClB,IAEA,gFACE;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,KAAK;AAAA,gBACL;AAAA,gBACA,IAAI;AAAA,gBACJ,MACE,eACI,SACA,SAAS,aACT,eACE,SACA,aACF;AAAA,gBAEN,WACE,eACI,iBACE,YACA,YACF;AAAA,gBAEN;AAAA,gBACA,OAAO,eAAe,eAAe,OAAO,SAAS,EAAE;AAAA,gBAEvD,UAAU,eAAe,qBAAqB;AAAA,gBAC9C,SAAS,eAAe,cAAc,MAAM,aAAa,IAAI;AAAA,gBAC7D,QACE,eACI,aACA,CAAC,MAAM;AACL,+BAAa,KAAK;AAClB,kCAAgB,IAAI;AACpB,2BAAS,CAAC;AAAA,gBACZ;AAAA,gBAEN,WAAW,eAAe,gBAAgB;AAAA,gBAC1C;AAAA,gBACA,WAAW,gBAAgB,CAAC,iBAAiB,YAAY;AAAA,gBACzD;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,SAAS,eAAe,cAAc;AAAA,gBACtC,eAAW,cAAAA;AAAA,kBACT;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA,EAAE,sBAAsB,SAAS;AAAA,kBACjC,EAAE,SAAS,SAAS;AAAA,kBACpB,EAAE,SAAS,aAAa,SAAS,WAAW;AAAA,gBAC9C;AAAA,gBACA,OAAO,SAAS;AAAA;AAAA,YAClB;AAAA,YAGC,SAAS,cACR;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,WAAU;AAAA,gBACV,SAAS,MAAM,gBAAgB,CAAC,YAAY;AAAA,gBAC5C,UAAU;AAAA,gBAET,yBACE,+CAAC,SAAI,OAAM,8BAA6B,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,eAAc,SAAQ,gBAAe,SAAQ;AAAA,gEAAC,UAAK,GAAE,kCAAgC;AAAA,kBAAE,8CAAC,UAAK,GAAE,gFAA8E;AAAA,kBAAE,8CAAC,UAAK,GAAE,0EAAwE;AAAA,kBAAE,8CAAC,UAAK,IAAG,KAAI,IAAG,MAAK,IAAG,KAAI,IAAG,MAAI;AAAA,mBAAE,IAE3a,+CAAC,SAAI,OAAM,8BAA6B,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,eAAc,SAAQ,gBAAe,SAAQ;AAAA,gEAAC,UAAK,GAAE,gDAA8C;AAAA,kBAAE,8CAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,KAAG;AAAA,mBAAE;AAAA;AAAA,YAE9Q;AAAA,aAEJ;AAAA,UAGD,aAAa,SAAS,cACrB,8CAAC,SAAI,WAAW,mBACb,qBACH;AAAA,WAEL;AAAA,SACF;AAAA;AAAA,IAIH,YAAY,CAAC,qBACZ,8CAAC,SAAI,WAAU,sDACb,wDAAC,UAAO,IAAG,KAAI,WAAW,YAAa,wBAAa,GACtD;AAAA,IAID,mBAAmB,aAAa,cAAc,CAAC,qBAC9C,8CAAC,SAAI,WAAU,gBACxB,yDAAC,UAAO,IAAG,KAAI,WAAU,iBACV;AAAA;AAAA,MAAe,aAAa,IAAI,SAAS;AAAA,OAC5C,GACH;AAAA,IAID,qBAAqB,YACpB,8CAAC,SAAI,WAAU,gBACb,wDAAC,UAAO,IAAG,KAAI,WAAU,gBAAgB,wBAAa,GACxD;AAAA,KAEL;AAEJ;;;AEtmBA,IAAAC,iBAAkB;AAClB,IAAAC,gBAAiB;AACjB,IAAAC,aAA8C;;;ACD9C,IAAAC,gBAAiB;AACjB,IAAAC,gBAAyB;AACzB,IAAAC,aAA4B;AA+ElB,IAAAC,uBAAA;AAvEK,SAAR,SAA0B;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AACb,GAAkB;AAChB,QAAM,CAAC,WAAW,YAAY,QAAI,wBAAS,KAAK;AAChD,QAAM,CAAC,cAAc,eAAe,QAAI,wBAAS,KAAK;AAGtD,QAAM,aAAc,MAAc,SAAS,CAAC;AAE5C,QAAM,YAAY,YAAY,SAAY,UAAU;AACpD,QAAM,UAAU,UAAU,UAAa,UAAU,QAAQ,OAAO,KAAK,EAAE,KAAK,MAAM;AAElF,QAAM,iBAAiB,UAAU,UAAa,UAAU,QACnD,UAAU,OAAO,4BAA4B,QAC7C,YAAY,UAAU,4BAA4B;AAEvD,QAAM,WAAW,aAAa,CAAC,CAAC;AAChC,QAAM,eAAe,OAAO,mBAAmB,WAAW,iBAAiB;AAE3E,QAAM,WAAW,MAAM;AACrB,UAAM,QAA6B;AAAA,MACjC,iBAAiB,WAAW;AAAA,MAC5B,aAAa,WAAW;AAAA,MACxB,cAAc,WAAW;AAAA,MACzB,SAAS,WAAW;AAAA,MACpB,UAAU,WAAW;AAAA,MACrB,aAAa;AAAA,MACb,aAAa;AAAA,MACb,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,YAAY;AAAA;AAAA,IACd;AAEA,QAAI,UAAU;AACZ,YAAM,kBAAkB,WAAW,UAAU,mBAAmB,MAAM;AACtE,YAAM,cAAc,WAAW,UAAU,eAAe,MAAM;AAC9D,YAAM,UAAU;AAAA,IAClB;AAEA,QAAI,UAAU;AACZ,YAAM,cAAc,WAAW,OAAO,eAAe;AACrD,UAAI,WAAW;AACb,cAAM,YAAY,WAAW,OAAO;AAAA,MACtC;AAAA,IACF,WAAW,aAAa,CAAC,UAAU;AACjC,YAAM,YAAY,WAAW,OAAO;AAAA,IACtC;AAEA,WAAO;AAAA,EACT;AAEA,SACE,8CAAC,SAAI,WAAU,UACb,yDAAC,SAAI,eAAW,cAAAC,SAAK,YAAY;AAAA,IAC/B,yBAAyB;AAAA,EAC3B,CAAC,GACE;AAAA,aACC;AAAA,MAAC;AAAA;AAAA,QACC,IAAG;AAAA,QACH,SAAS;AAAA,QACT,eAAW,cAAAA;AAAA,UACT;AAAA,UACA,EAAE,gBAAgB,SAAS;AAAA,QAC7B;AAAA,QAEA;AAAA,wDAAC,UAAO,IAAG,QAAQ,iBAAM;AAAA,UACxB,YAAY,8CAAC,UAAO,IAAG,QAAO,WAAU,qBAAoB,eAAC;AAAA;AAAA;AAAA,IAChE;AAAA,IAEF,+CAAC,SAAI,WAAU,wBACb;AAAA,qDAAC,SAAI,WAAU,mBACb;AAAA;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,IAAI;AAAA,YACJ;AAAA,YACA,UAAU,WAAW,SAAY;AAAA,YACjC,QAAQ,CAAC,MAAM;AACb,2BAAa,KAAK;AAClB,8BAAgB,IAAI;AACpB,yBAAW,SAAY,SAAS,CAAC;AAAA,YACnC;AAAA,YACA,SAAS,MAAM,aAAa,IAAI;AAAA,YAChC;AAAA,YACA,eAAW,cAAAA;AAAA,cACT;AAAA;AAAA,cACA;AAAA,cACA,EAAE,sBAAsB,SAAS;AAAA,YACnC;AAAA,YACA,OAAO,SAAS;AAAA,YAEhB;AAAA,4DAAC,YAAO,OAAM,IAAG,wDAAC,UAAO,IAAG,QAAQ,yBAAe,4BAAwB,GAAS;AAAA,cAElF,WACE,8CAAC,YAAO,OAAc,UAAQ,MAC5B,wDAAC,UAAO,IAAG,QAAQ,kBAAQ,KAAK,CAAC,WAAW,OAAO,UAAU,MAAM,KAAK,IAAI,UAAU,GAAE,GAC1F,IAEA,QAAQ,IAAI,CAAC,WACX;AAAA,gBAAC;AAAA;AAAA,kBAEC,OAAO,OAAO,UAAU;AAAA,kBACxB,OAAO,OAAO,UAAU;AAAA,kBAExB,wDAAC,UAAO,IAAG,QAAQ,iBAAO,UAAU,GAAE;AAAA;AAAA,gBAJjC,OAAO,UAAU;AAAA,cAKxB,CACD;AAAA;AAAA;AAAA,QAGP;AAAA,QACA,8CAAC,SAAI,WAAU,uFACb,wDAAC,0BAAY,GACf;AAAA,SACF;AAAA,MAEC,YACC,8CAAC,SAAI,WAAU,sDACb,wDAAC,UAAO,IAAG,KAAI,WAAU,wBAAwB,wBAAa,GAChE;AAAA,OAEJ;AAAA,KAEF,GACF;AAEJ;;;ADxBI,IAAAC,uBAAA;AArHJ,IAAM,OAAO;AAGb,IAAM,gBAAgB,CAAC;AAAA,EACrB;AAAA,EACA;AAAA,EACA,eAAe;AACjB,MAIM;AACJ,SAAO,eAAAC,QAAM,QAAQ,MAAM;AAEzB,UAAM,mBAAmB,eAAe;AAOxC,QAAI,oBAAoB,YAAY;AAClC,aAAO,MAAM,KAAK,EAAE,QAAQ,WAAW,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC;AAAA,IAC3D;AAEA,UAAM,mBAAmB,KAAK,IAAI,cAAc,cAAc,CAAC;AAC/D,UAAM,oBAAoB,KAAK,IAAI,cAAc,cAAc,UAAU;AAEzE,UAAM,qBAAqB,mBAAmB;AAC9C,UAAM,sBAAsB,oBAAoB,aAAa;AAE7D,UAAM,iBAAiB;AACvB,UAAM,gBAAgB;AAKtB,QAAI,CAAC,sBAAsB,qBAAqB;AAC9C,UAAI,gBAAgB,IAAI,IAAI;AAC5B,UAAI,YAAY,MAAM,KAAK,EAAE,QAAQ,cAAc,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC;AACrE,aAAO,CAAC,GAAG,WAAW,MAAM,UAAU;AAAA,IACxC;AAKA,QAAI,sBAAsB,CAAC,qBAAqB;AAC9C,UAAI,iBAAiB,IAAI,IAAI;AAC7B,UAAI,aAAa,MAAM;AAAA,QACrB,EAAE,QAAQ,eAAe;AAAA,QACzB,CAAC,GAAG,MAAM,aAAa,iBAAiB,IAAI;AAAA,MAC9C;AACA,aAAO,CAAC,gBAAgB,MAAM,GAAG,UAAU;AAAA,IAC7C;AAKA,QAAI,sBAAsB,qBAAqB;AAC7C,UAAI,cAAc,MAAM;AAAA,QACtB,EAAE,QAAQ,oBAAoB,mBAAmB,EAAE;AAAA,QACnD,CAAC,GAAG,MAAM,mBAAmB;AAAA,MAC/B;AACA,aAAO,CAAC,gBAAgB,MAAM,GAAG,aAAa,MAAM,aAAa;AAAA,IACnE;AAAA,EACF,GAAG,CAAC,YAAY,aAAa,YAAY,CAAC;AAC5C;AAEe,SAAR,aAA8B;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAsB;AACpB,QAAM,kBAAkB,cAAc;AAAA,IACpC;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAGD,MAAI,gBAAgB,KAAM,CAAC,uBAAuB,mBAAmB,gBAAgB,SAAS,GAAI;AAChG,WAAO;AAAA,EACT;AAGA,QAAM,aAAa,SAAS,MAAM;AAClC,QAAM,kBAAkB,aACpB,MAAM,OAAO,KAAkC,EAAE,GAAG,IACpD;AACJ,QAAM,uBAAuB,aACzB,MAAM,OAAO,KAAkC,EAAE,EAAE,IACnD;AAEJ,QAAM,aAAa,MAAM;AACvB,QAAI,cAAc,YAAY;AAC5B,mBAAa,cAAc,CAAC;AAAA,IAC9B;AAAA,EACF;AAEA,QAAM,iBAAiB,MAAM;AAC3B,QAAI,cAAc,GAAG;AACnB,mBAAa,cAAc,CAAC;AAAA,IAC9B;AAAA,EACF;AAGA,QAAM,gBACJ;AAEF,QAAM,2BAA2B,MAC/B,+CAAC,SAAI,WAAU,2BAEb;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,eAAW,cAAAC;AAAA,UACT;AAAA,UACA,gBAAgB,IACZ,qCACA;AAAA,QACN;AAAA,QACA,SAAS;AAAA,QACT,iBAAe,gBAAgB;AAAA,QAE/B,wDAAC,4BAAc,MAAM,IAAI;AAAA;AAAA,IAC3B;AAAA,IAGC,iBAAiB,IAAI,CAAC,YAAY,QAAQ;AACzC,UAAI,eAAe,MAAM;AACvB,eACE;AAAA,UAAC;AAAA;AAAA,YACC,IAAG;AAAA,YAEH,WAAU;AAAA,YACX;AAAA;AAAA,UAFM,QAAQ,GAAG;AAAA,QAIlB;AAAA,MAEJ;AAEA,YAAM,WAAW,eAAe;AAEhC,aACE;AAAA,QAAC;AAAA;AAAA,UACC,IAAG;AAAA,UAEH,eAAW,cAAAA;AAAA,YACT;AAAA,YACA,WAAW,eAAe;AAAA,UAC5B;AAAA,UACA,OAAO;AAAA,YACL,iBAAiB,WAAW,kBAAkB;AAAA,YAC9C,GAAI,WAAW,CAAC,IAAI,EAAE,cAAc,qBAAqB;AAAA,UAC3D;AAAA,UACA,SAAS,MAAM,aAAa,UAAoB;AAAA,UAChD,OAAO,QAAQ,UAAU;AAAA,UAEzB,wDAAC,UAAO,IAAG,QAAQ,sBAAW;AAAA;AAAA,QAZzB;AAAA,MAaP;AAAA,IAEJ,CAAC;AAAA,IAGD;AAAA,MAAC;AAAA;AAAA,QACC,eAAW,cAAAA;AAAA,UACT;AAAA,UACA,gBAAgB,aACZ,qCACA;AAAA,QACN;AAAA,QACA,SAAS;AAAA,QACT,iBAAe,gBAAgB;AAAA,QAE/B,wDAAC,6BAAe,MAAM,IAAI;AAAA;AAAA,IAC5B;AAAA,KACF;AAIF,MAAI,uBAAuB,gBAAgB,sBAAsB;AAC/D,UAAM,YAAY,KAAK,KAAK,cAAc,KAAK,eAAe,GAAG,cAAc,CAAC;AAChF,UAAM,UAAU,KAAK,IAAI,cAAc,cAAc,cAAc,CAAC;AAEpE,WACE,+CAAC,SAAI,eAAW,cAAAA,SAAK,uEAAuE,SAAS,GACnG;AAAA,qDAAC,SAAI,WAAU,iDACb;AAAA,uDAAC,SAAI,WAAU,kFACb;AAAA,wDAAC,UAAO,IAAG,QAAO,WAAU,uBAAsB,qBAAO;AAAA,UACzD;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS,oBAAoB,IAAI,CAAC,YAAY;AAAA,gBAC5C,OAAO,OAAO,MAAM;AAAA,gBACpB,OAAO,OAAO,MAAM;AAAA,cACtB,EAAE;AAAA,cACF,OAAO,OAAO,YAAY;AAAA,cAC1B,UAAU,CAAC,MAAM,qBAAqB,OAAO,EAAE,OAAO,KAAK,CAAC;AAAA,cAC5D,QAAQ,MAAM;AAAA,cAAC;AAAA,cACf,MAAK;AAAA,cACL,WAAU;AAAA,cACV,aAAY;AAAA;AAAA,UACd;AAAA,WACF;AAAA,QAEC,eAAe,UACd,gFACE;AAAA,wDAAC,UAAO,IAAG,QAAO,WAAU,iBAAgB,eAAC;AAAA,UAC7C,+CAAC,UAAO,IAAG,QAAO,WAAU,WAC1B;AAAA,0DAAC,UAAO,IAAG,QAAO,WAAU,+BAA+B,qBAAU;AAAA,YAAS,8CAAC,UAAO,IAAG,QAAO,iBAAG;AAAA,YAAS,8CAAC,UAAO,IAAG,QAAO,WAAU,+BAA+B,mBAAQ;AAAA,YAAS,8CAAC,UAAO,IAAG,QAAO,kBAAI;AAAA,YAAS,8CAAC,UAAO,IAAG,QAAO,WAAU,+BAA+B,sBAAW;AAAA,aAC/R;AAAA,WACF;AAAA,SAEJ;AAAA,MAEA,8CAAC,SAAI,cAAW,cACb,mCAAyB,GAC5B;AAAA,OACF;AAAA,EAEJ;AAGA,SACE,8CAAC,SAAI,cAAW,cAAa,eAAW,cAAAA,SAAK,eAAe,SAAS,GAClE,mCAAyB,GAC5B;AAEJ;;;AE9OA,IAAAC,gBAAiB;AACjB,IAAAC,iBAAkB;AAClB,IAAAC,aAIO;AACP,gBAAkC;AAwJrB,IAAAC,uBAAA;AAjJb,IAAM,iBAAiB,CAAC,KAAc,SAAiB;AACrD,SAAO,KAAK,MAAM,GAAG,EAAE,OAAO,CAAC,KAAK,SAAS,OAAO,IAAI,IAAI,GAAG,GAAG;AACpE;AACO,IAAM,mBAAmB,CAAC,UAAkB;AACjD,SAAO,MAAM,eAAe,SAAS;AAAA,IACnC,OAAO;AAAA,IACP,UAAU;AAAA,EACZ,CAAC;AACH;AACe,SAAR,QAA4D;AAAA,EACjE;AAAA,EACA,OAAO,CAAC;AAAA,EACR;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,OAAO;AAAA,EACP,sBAAsB,CAAC,GAAG,IAAI,EAAE;AAAA,EAChC,sBAAsB;AAAA,EACtB;AACF,GAAoB;AAClB,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,cAAc,EAAE,oBAAoB,CAAC;AAEzC,QAAM,aAAa,eAAAC,QAAM,QAAQ,MAAM;AACrC,UAAM,WAAW,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC;AAC/C,QAAI,CAAC,WAAY,QAAO;AAExB,WAAO,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,GAAG,MAAM;AAClC,YAAM,SAAS,eAAe,GAAG,WAAW,GAAG;AAC/C,YAAM,SAAS,eAAe,GAAG,WAAW,GAAG;AAE/C,UAAI,UAAU,QAAQ,UAAU,KAAM,QAAO;AAE7C,UAAI,aAAa;AAEjB,YAAM,SAAS,QAAQ,KAAK,CAAC,QAAQ,IAAI,QAAQ,WAAW,GAAG;AAC/D,UAAI,CAAC,UAAU,CAAC,OAAO,SAAU,QAAO;AAExC,cAAQ,OAAO,MAAM;AAAA,QACnB,KAAK;AACH,uBAAc,SAAqB;AACnC;AAAA,QACF,KAAK;AACH,uBACE,IAAI,KAAK,MAAgB,EAAE,QAAQ,IACnC,IAAI,KAAK,MAAgB,EAAE,QAAQ;AACrC;AAAA,QACF,KAAK;AACH,uBAAa,WAAW,SAAS,IAAI,SAAS,IAAI;AAClD;AAAA,QACF,KAAK,WAAW;AACd,gBAAM,eAAe,OAAO,gBAAgB,KAAK;AAAA,YAC/C,CAAC,SAAS,KAAK,OAAO;AAAA,UACxB;AACA,gBAAM,eAAe,OAAO,gBAAgB,KAAK;AAAA,YAC/C,CAAC,SAAS,KAAK,OAAO;AAAA,UACxB;AACA,uBAAa,OAAO,cAAc,QAAQ,MAAM,EAAE;AAAA,YAChD,OAAO,cAAc,QAAQ,MAAM;AAAA,UACrC;AACA;AAAA,QACF;AAAA,QACA,KAAK;AAAA,QACL;AACE,uBAAc,OAAkB,cAAc,MAAgB;AAC9D;AAAA,MACJ;AAEA,aAAO,WAAW,cAAc,QAAQ,aAAa,CAAC;AAAA,IACxD,CAAC;AAAA,EACH,GAAG,CAAC,MAAM,YAAY,OAAO,CAAC;AAE9B,QAAM,eAAe,WAAW;AAAA,IAAO,CAAC,QACtC,QAAQ,MAAM,CAAC,QAAQ;AACrB,UACE,CAAC,IAAI,UACL,QAAQ,IAAI,GAAG,MAAM,UACrB,QAAQ,IAAI,GAAG,MAAM;AAErB,eAAO;AAET,YAAM,QAAQ,eAAe,KAAK,IAAI,GAAG;AACzC,YAAM,cAAc,OAAO,QAAQ,IAAI,GAAG,CAAC,EAAE,YAAY;AAEzD,cAAQ,IAAI,MAAM;AAAA,QAChB,KAAK;AACH,iBAAO,OAAO,KAAK,EAAE,SAAS,WAAW;AAAA,QAC3C,KAAK;AACH,iBAAO,UAAU,QAAQ,IAAI,GAAG;AAAA,QAClC,KAAK,WAAW;AACd,cAAI,CAAC,IAAI,eAAgB,QAAO;AAChC,gBAAM,cAAc,IAAI,eAAe,KAAK;AAAA,YAC1C,CAAC,SACC,OAAO,KAAK,EAAE,EAAE,YAAY,EAAE,SAAS,WAAW,KAClD,KAAK,KAAK,YAAY,EAAE,SAAS,WAAW;AAAA,UAChD;AACA,iBAAO,cAAc,UAAU,YAAY,KAAK;AAAA,QAClD;AAAA,QACA,KAAK;AAAA,QACL;AACE,iBAAO,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,WAAW;AAAA,MAC3D;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,qBAAqB,KAAK,KAAK,aAAa,SAAS,YAAY,KAAK;AAC5E,QAAM,cAAc,aAAa;AAAA,KAC9B,cAAc,KAAK;AAAA,IACpB,cAAc;AAAA,EAChB;AAEA,QAAM,oBAAoB,CAAC,QAAmB;AAC5C,QAAI,CAAC,IAAI,OAAQ,QAAO;AAExB,QAAI,IAAI,SAAS,WAAW;AAC1B,YAAM,eAAe,QAAQ,IAAI,GAAG;AACpC,YAAM,YACJ,iBAAiB,SACb,OACA,iBAAiB,OACjB,QACA;AAEC,YAAM,iBAAiB,MAAM;AACjC,YAAI,iBAAiB,OAAW,QAAO;AACvC,YAAI,iBAAiB,KAAM,QAAO;AAClC,eAAO;AAAA,MACT;AAEA,aACE;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,SAAS,MAAM,mBAAmB,IAAI,KAAK,SAAS;AAAA,UACpD,cAAY,GAAG,eAAe,CAAC,SAAS,IAAI,KAAK;AAAA,UACjD,OAAO,GAAG,eAAe,CAAC,SAAS,IAAI,KAAK;AAAA,UAE5C,wDAAC,SAAI,WAAU,8CACb;AAAA,YAAC;AAAA;AAAA,cACC,eAAW,cAAAC;AAAA,gBACT;AAAA,gBACA;AAAA,kBACE,wBAAwB,iBAAiB;AAAA,kBACzC,uBAAuB,iBAAiB;AAAA,kBACxC,wBAAwB,iBAAiB;AAAA,gBAC3C;AAAA,cACF;AAAA;AAAA,UACF,GACF;AAAA;AAAA,MACF;AAAA,IAEL;AAEK,QAAI,IAAI,WAAW,aAAa,IAAI,gBAAgB;AACtD,UAAI,IAAI,eAAe,SAAS;AAC9B,eACE;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,cAAW;AAAA,YACX,OAAM;AAAA;AAAA,QACR;AAAA,MAEJ;AAED,UAAI,IAAI,eAAe,OAAO;AAC5B,eAAO,8CAAC,UAAO,IAAG,QAAO,WAAU,wBAAuB,4BAAc;AAAA,MAC1E;AAEA,aACE;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,UAAU,IAAI,GAAG;AAAA,UACvB,SAAS;AAAA,YACP,EAAE,OAAO,IAAI,OAAO,QAAQ;AAAA,YAC5B,GAAG,IAAI,eAAe,KAAK,IAAI,CAAC,UAAU;AAAA,cACxC,OAAO,OAAO,KAAK,EAAE;AAAA,cACrB,OAAO,KAAK;AAAA,YACd,EAAE;AAAA,UACJ;AAAA,UACA,OAAO,OAAO,QAAQ,IAAI,GAAG,KAAK,EAAE;AAAA,UACpC,UAAU,CAAC,MAAM;AACf,kBAAM,QAAQ,EAAE,OAAO,UAAU,KAAK,SAAY,EAAE,OAAO;AAC3D,+BAAmB,IAAI,KAAK,KAAK;AAAA,UACnC;AAAA,UACA,QAAQ,MAAM;AAAA,UAAC;AAAA,UACf,WAAU;AAAA;AAAA,MACZ;AAAA,IAEJ;AAEA,WACE;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,UAAU,IAAI,GAAG;AAAA,QACvB,WAAU;AAAA,QACV,aAAY;AAAA,QACZ,OAAO,OAAO,QAAQ,IAAI,GAAG,KAAK,EAAE;AAAA,QACpC,UAAU,CAAC,MAAM,mBAAmB,IAAI,KAAK,EAAE,OAAO,KAAK;AAAA,QAC3D,QAAQ,MAAM;AAAA,QAAC;AAAA;AAAA,IACjB;AAAA,EAEJ;AAEA,QAAM,oBAAoB,CAAC,KAAgB,QAAW;AACpD,UAAM,QAAQ,eAAe,KAAK,IAAI,GAAG;AAEzC,QAAI,IAAI,QAAQ;AACd,aAAO,IAAI,OAAO,GAAG;AAAA,IACvB;AAEA,YAAQ,IAAI,MAAM;AAAA,MAChB,KAAK;AACH,eAAQ,OAAO,UAAU,YAAa,IAAI,aAAY,iBAAiB,KAAK,IAAK;AAAA,MAC5E,KAAK;AACT,eAAO,QACL;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,cAAW;AAAA,YACX,OAAM;AAAA;AAAA,QACR,IAEA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,cAAW;AAAA,YACX,OAAM;AAAA;AAAA,QACR;AAAA,MAEL,KAAK;AACH,eAAO,IAAI,UAAU,IAAI,QAAQ,GAAG,IAAI;AAAA,MAC1C,KAAK;AACH,YAAI,IAAI,gBAAgB;AACtB,gBAAM,cAAc,IAAI,eAAe,KAAK;AAAA,YAC1C,CAAC,SAAS,KAAK,OAAO;AAAA,UACxB;AACA,iBAAO,aAAa,QAAQ;AAAA,QAC9B;AACA,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAEG,SACL,8CAAC,SAAI,eAAW,cAAAA,SAAK,oBAAoB,kBAAkB,GACzD,yDAAC,SAAI,WAAU,oEAAmE,OAAO,EAAE,iBAAiB,oCAAoC,GAE7I;AAAA,aACC,8CAAC,SAAI,WAAU,2CAA0C,OAAO,EAAE,iBAAiB,oCAAoC,GACrH,wDAAC,UAAO,IAAG,MAAK,WAAU,sDAAsD,iBAAM,GACxF;AAAA,IAIF,8CAAC,SAAI,WAAU,mBACb;AAAA,MAAC;AAAA;AAAA,QACC,eAAW,cAAAA;AAAA,UACT;AAAA,UACA,cAAc,OAAO;AAAA,UACrB,WAAW,IAAI;AAAA,QACjB;AAAA,QAGG;AAAA,wDAAC,WACC,wDAAC,QAAG,WAAU,mHACX,kBAAQ,IAAI,CAAC,QACZ;AAAA,YAAC;AAAA;AAAA,cAEC,OAAM;AAAA,cACN,eAAW,cAAAA,SAAK,uBAAuB,IAAI,SAAS;AAAA,cAEpD,yDAAC,SAAI,WAAU,qCAEb;AAAA,+DAAC,SAAI,WAAU,2CACZ;AAAA,gEAAC,UAAO,IAAG,QAAO,WAAU,gCAAgC,cAAI,OAAM;AAAA,kBACtE,IAAI,YAAY,IAAI,SAAS,aAC5B;AAAA,oBAAC;AAAA;AAAA,sBACC,SAAS,MAAM,WAAW,IAAI,GAAG;AAAA,sBACjC,WAAW,oCACT,YAAY,QAAQ,IAAI,MACpB,wCACA,oEACN;AAAA,sBACA,OAAO,eAAe,IAAI,KAAK;AAAA,sBAE/B,wDAAC,+BAAkB,WAAU,WAAU,eAAY,QAAO;AAAA;AAAA,kBAC5D;AAAA,mBAEJ;AAAA,gBAGA,8CAAC,SAAI,WAAU,UACZ,cAAI,SAAS,kBAAkB,GAAG,IAAI,MACzC;AAAA,iBACF;AAAA;AAAA,YA3BK,IAAI;AAAA,UA4BX,CACD,GACH,GACF;AAAA,UACD,8CAAC,WAAM,WAAU,iCACd,sBAAY,SAAS,IACL,YAAY,IAAI,CAAC,KAAK,aAClC;AAAA,YAAC;AAAA;AAAA,cAEC,WAAU;AAAA,cAES,kBAAQ,IAAI,CAAC,QAC9B;AAAA,gBAAC;AAAA;AAAA,kBAEC,eAAW,cAAAA,SAAK,0BAA0B,IAAI,SAAS;AAAA,kBAEtD,cAAI,SAAS,YACZ,8CAAC,SAAI,WAAU,0CACZ,4BAAkB,KAAK,GAAG,GAC7B,IAEA,8CAAC,SAAI,WAAU,kCACX,4BAAkB,KAAK,GAAG,GAC9B;AAAA;AAAA,gBAVG,GAAG,QAAQ,IAAI,IAAI,GAAG;AAAA,cAY7B,CACD;AAAA;AAAA,YAlBI;AAAA,UAmBR,CACD,IAED,8CAAC,QACC,wDAAC,QAAG,SAAS,QAAQ,QAAQ,WAAU,0BACrC,yDAAC,SAAI,WAAU,gEACb;AAAA,0DAAC,UAAO,IAAG,QAAO,WAAU,WAAU,0CAA4B;AAAA,YAClE,8CAAC,UAAO,IAAG,QAAO,WAAU,gBAAe,yCAA2B;AAAA,aACxE,GACF,GACF,GAEJ;AAAA;AAAA;AAAA,IACF,GACF;AAAA,IAIA,8CAAC,SAAI,WAAU,wDAAuD,OAAO,EAAE,iBAAiB,oCAAoC,GAClI;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,OAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA,sBAAsB;AAAA,QACtB,YAAY,aAAa;AAAA;AAAA,IAC3B,GACF;AAAA,KACF,GACJ;AAEA;;;ALtQY,IAAAC,uBAAA;AAnGZ,IAAMC,kBAAiB,CAAC,KAAc,SAAiB;AACrD,SAAO,KAAK,MAAM,GAAG,EAAE,OAAO,CAAC,KAAK,SAAS,OAAO,IAAI,IAAI,GAAG,GAAG;AACpE;AAEA,IAAM,eAAe,CAAC;AAEP,SAAR,YAAgE;AAAA,EACrE;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,kBAAkB;AAAA,EAClB;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,OAAO;AAAA,EACP,sBAAsB,CAAC,GAAG,IAAI,EAAE;AAAA,EAChC,sBAAsB;AAAA,EACtB;AACF,GAAwB;AACtB,QAAM,CAAC,MAAM,OAAO,QAAI,yBAAc,CAAC,CAAC;AACxC,QAAM,CAAC,YAAY,aAAa,QAAI,yBAAS,CAAC;AAC9C,QAAM,CAAC,WAAW,YAAY,QAAI,yBAAS,YAAY;AAEvD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,cAAc,EAAE,oBAAoB,CAAC;AAEzC,QAAM,uBAAmB,uBAA6C,IAAI;AAE1E,QAAM,qBAAqB,KAAK,KAAK,aAAa,YAAY,KAAK;AAEnE,QAAM,mBAAe,4BAAY,YAAY;AAC3C,iBAAa,IAAI;AACjB,QAAI;AACF,YAAM,WAAW,MAAM,UAAU;AAAA,QAC/B,MAAM;AAAA,QACN,OAAO;AAAA,QACP,SAAS,EAAE,GAAG,SAAS,GAAG,gBAAgB;AAAA,QAC1C,MAAM,cAAc;AAAA,MACtB,CAAC;AACD,cAAQ,SAAS,QAAQ,CAAC,CAAC;AAC3B,oBAAc,SAAS,SAAS,CAAC;AAAA,IACnC,SAAS,OAAO;AACd,cAAQ,MAAM,oCAAoC,KAAK;AACvD,cAAQ,CAAC,CAAC;AACV,oBAAc,CAAC;AAAA,IACjB,UAAE;AACA,mBAAa,KAAK;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,aAAa,cAAc,SAAS,YAAY,WAAW,eAAe,CAAC;AAE/E,gCAAU,MAAM;AACd,QAAI,CAAC,gBAAgB,KAAK,WAAW,KAAK,CAAC,UAAW;AAEtD,QAAI,iBAAiB,QAAS,cAAa,iBAAiB,OAAO;AAEnE,qBAAiB,UAAU,WAAW,MAAM;AAC1C,mBAAa;AAAA,IACf,GAAG,UAAU;AAEb,WAAO,MAAM;AACX,UAAI,iBAAiB,QAAS,cAAa,iBAAiB,OAAO;AAAA,IACrE;AAAA,EACF,GAAG,CAAC,aAAa,cAAc,YAAY,SAAS,iBAAiB,eAAe,cAAc,YAAY,CAAC;AAE/G,QAAM,oBAAoB,CAAC,QAAmB;AAC5C,QAAI,CAAC,IAAI,OAAQ,QAAO;AAExB,QAAI,IAAI,SAAS,WAAW;AAC1B,YAAM,eAAe,QAAQ,IAAI,GAAG;AACpC,YAAM,YACJ,iBAAiB,SAAY,OAAO,iBAAiB,OAAO,QAAQ;AAEtE,YAAM,iBAAiB,MAAM;AAC3B,YAAI,iBAAiB,OAAW,QAAO;AACvC,YAAI,iBAAiB,KAAM,QAAO;AAClC,eAAO;AAAA,MACT;AAEA,aACE;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,SAAS,MAAM,mBAAmB,IAAI,KAAK,SAAS;AAAA,UACpD,cAAY,GAAG,eAAe,CAAC,SAAS,IAAI,KAAK;AAAA,UACjD,OAAO,GAAG,eAAe,CAAC,SAAS,IAAI,KAAK;AAAA,UAC5C,UAAU;AAAA,UAEV,wDAAC,SAAI,WAAU,8CACb;AAAA,YAAC;AAAA;AAAA,cACC,eAAW,cAAAC;AAAA,gBACT;AAAA,gBACA;AAAA,kBACE,wBAAwB,iBAAiB;AAAA,kBACzC,uBAAuB,iBAAiB;AAAA,kBACxC,wBAAwB,iBAAiB;AAAA,gBAC3C;AAAA,cACF;AAAA;AAAA,UACF,GACF;AAAA;AAAA,MACF;AAAA,IAEJ;AAEA,QAAI,IAAI,WAAW,aAAa,IAAI,gBAAgB;AAClD,UAAI,IAAI,eAAe,SAAS;AAC9B,eAAO,8CAAC,wBAAU,WAAU,gBAAe,cAAW,qBAAoB,OAAM,qBAAoB;AAAA,MACtG;AACA,UAAI,IAAI,eAAe,OAAO;AAC5B,eAAO,8CAAC,UAAO,IAAG,QAAO,WAAU,wBAAuB,4BAAc;AAAA,MAC1E;AACA,aACE;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,UAAU,IAAI,GAAG;AAAA,UACvB,SAAS;AAAA,YACP,EAAE,OAAO,IAAI,OAAO,QAAQ;AAAA,YAC5B,GAAG,IAAI,eAAe,KAAK,IAAI,CAAC,UAAU;AAAA,cACxC,OAAO,OAAO,KAAK,EAAE;AAAA,cACrB,OAAO,KAAK;AAAA,YACd,EAAE;AAAA,UACJ;AAAA,UACA,OAAO,OAAO,QAAQ,IAAI,GAAG,KAAK,EAAE;AAAA,UACpC,UAAU,CAAC,MAAM;AACf,kBAAM,QAAQ,EAAE,OAAO,UAAU,KAAK,SAAY,EAAE,OAAO;AAC3D,+BAAmB,IAAI,KAAK,KAAK;AAAA,UACnC;AAAA,UACA,QAAQ,MAAM;AAAA,UAAC;AAAA,UACf,WAAU;AAAA,UACV,UAAU;AAAA;AAAA,MACZ;AAAA,IAEJ;AAEA,WACE;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,UAAU,IAAI,GAAG;AAAA,QACvB,WAAU;AAAA,QACV,aAAY;AAAA,QACZ,OAAO,OAAO,QAAQ,IAAI,GAAG,KAAK,EAAE;AAAA,QACpC,UAAU,CAAC,MAAM,mBAAmB,IAAI,KAAK,EAAE,OAAO,KAAK;AAAA,QAC3D,QAAQ,MAAM;AAAA,QAAC;AAAA,QACf,UAAU;AAAA;AAAA,IACZ;AAAA,EAEJ;AAEA,QAAM,oBAAoB,CAAC,KAAgB,QAAW;AACpD,UAAM,QAAQD,gBAAe,KAAK,IAAI,GAAG;AACzC,QAAI,IAAI,OAAQ,QAAO,IAAI,OAAO,GAAG;AAErC,YAAQ,IAAI,MAAM;AAAA,MAChB,KAAK;AACH,eAAO,OAAO,UAAU,YAAY,IAAI,aAAa,iBAAiB,KAAK,IAAI;AAAA,MACjF,KAAK;AACH,eAAO,QACL,8CAAC,sBAAQ,WAAU,kBAAiB,cAAW,aAAY,OAAM,aAAY,IAE7E,8CAAC,sBAAQ,WAAU,gBAAe,cAAW,SAAQ,OAAM,SAAQ;AAAA,MAEvE,KAAK;AACH,eAAO,IAAI,UAAU,IAAI,QAAQ,GAAG,IAAI;AAAA,MAC1C,KAAK;AACH,YAAI,IAAI,gBAAgB;AACtB,gBAAM,cAAc,IAAI,eAAe,KAAK,KAAK,CAAC,SAAS,KAAK,OAAO,KAAK;AAC5E,iBAAO,aAAa,QAAQ;AAAA,QAC9B;AACA,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAEA,SACE,+CAAC,SAAI,eAAW,cAAAC,SAAK,6BAA6B,kBAAkB,GAClE;AAAA,mDAAC,SAAI,WAAU,oEAAmE,OAAO,EAAE,iBAAiB,oCAAoC,GAC7I;AAAA,eACC,+CAAC,SAAI,WAAU,6EAA4E,OAAO,EAAE,iBAAiB,oCAAoC,GACvJ;AAAA,sDAAC,UAAO,IAAG,MAAK,WAAU,sDAAsD,iBAAM;AAAA,QACrF,aACC,8CAAC,SAAI,WAAU,sBACZ,8BAAoB,8CAAC,wBAAU,WAAU,yCAAwC,GACpF;AAAA,SAEJ;AAAA,MAGF,+CAAC,SAAI,WAAU,0CACZ;AAAA,qBACC,8CAAC,SAAI,WAAU,sHACd,wDAAC,SAAI,WAAU,kIAAiI,OAAO,EAAE,iBAAiB,oCAAoC,GACxM,8BACC,gFACE;AAAA,wDAAC,wBAAU,WAAU,0CAAyC;AAAA,UAC9D,8CAAC,UAAO,IAAG,QAAO,WAAU,0DAAyD,+BAAiB;AAAA,WACxG,GAEL,GACH;AAAA,QAGF;AAAA,UAAC;AAAA;AAAA,YACC,eAAW,cAAAA;AAAA,cACT;AAAA,cACA,YAAY,eAAe;AAAA,cAC3B,cAAc,OAAO;AAAA,cACrB,WAAW,IAAI;AAAA,cACf;AAAA,YACF;AAAA,YAEA;AAAA,4DAAC,WACC,wDAAC,QAAG,WAAU,mHACX,kBAAQ,IAAI,CAAC,QACZ,8CAAC,QAAiB,OAAM,OAAM,eAAW,cAAAA,SAAK,uBAAuB,IAAI,SAAS,GAChF,yDAAC,SAAI,WAAU,qCACb;AAAA,+DAAC,SAAI,WAAU,2CACb;AAAA,gEAAC,UAAO,IAAG,QAAO,WAAU,gCAAgC,cAAI,OAAM;AAAA,kBACrE,IAAI,YAAY,IAAI,SAAS,aAC5B;AAAA,oBAAC;AAAA;AAAA,sBACC,SAAS,MAAM,WAAW,IAAI,GAAG;AAAA,sBACjC,UAAU;AAAA,sBACV,WAAW,oCACT,YAAY,QAAQ,IAAI,MACpB,wCACA,oEACN;AAAA,sBACA,OAAO,eAAe,IAAI,KAAK;AAAA,sBAE/B,wDAAC,gCAAkB,WAAU,WAAU,eAAY,QAAO;AAAA;AAAA,kBAC5D;AAAA,mBAEJ;AAAA,gBAEA,8CAAC,SAAI,WAAU,UAAU,cAAI,SAAS,kBAAkB,GAAG,IAAI,MAAK;AAAA,iBACtE,KArBO,IAAI,GAsBb,CACD,GACH,GACF;AAAA,cACA,8CAAC,WAAM,WAAU,iCACd,eAAK,SAAS,IACb,KAAK,IAAI,CAAC,KAAK,aACb,8CAAC,QAAkB,WAAU,iEAC1B,kBAAQ,IAAI,CAAC,QACZ,8CAAC,QAAkC,eAAW,cAAAA,SAAK,0BAA0B,IAAI,SAAS,GACvF,cAAI,SAAS,YACZ,8CAAC,SAAI,WAAU,0CACZ,4BAAkB,KAAK,GAAG,GAC7B,IAEA,8CAAC,SAAI,WAAU,kCACZ,4BAAkB,KAAK,GAAG,GAC7B,KARK,GAAG,QAAQ,IAAI,IAAI,GAAG,EAU/B,CACD,KAbM,QAcT,CACD,IAED,8CAAC,QACC,wDAAC,QAAG,SAAS,QAAQ,QAAQ,WAAU,0BACpC,WAAC,aACA,+CAAC,SAAI,WAAU,gEACb;AAAA,8DAAC,UAAO,IAAG,QAAO,WAAU,WAAU,0CAA4B;AAAA,gBAClE,8CAAC,UAAO,IAAG,QAAO,WAAU,gBAAe,yCAA2B;AAAA,iBACxE,GAEJ,GACF,GAEJ;AAAA;AAAA;AAAA,QACF;AAAA,SACF;AAAA,OACF;AAAA,IAEA,8CAAC,SAAI,WAAU,wDAAuD,OAAO,EAAE,iBAAiB,oCAAoC,GAClI;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,OAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA,sBAAsB;AAAA,QACtB;AAAA;AAAA,IACF,GACF;AAAA,KACF;AAEJ;;;AMxTA,IAAAC,gBAAiB;AACjB,IAAAC,iBAAmD;AACnD,IAAAC,aAA8B;AAC9B,IAAAC,mBAAyB;AAkPrB,IAAAC,uBAAA;AA5OW,SAAR,aAA8B;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AACV,GAAsB;AACpB,QAAM,CAAC,QAAQ,SAAS,QAAI,yBAAS,KAAK;AAC1C,QAAM,CAAC,YAAY,aAAa,QAAI,yBAAS,EAAE;AAC/C,QAAM,CAAC,aAAa,cAAc,QAAI,yBAAS,IAAI;AAGnD,QAAM,CAAC,eAAe,gBAAgB,QAAI,yBAAqC,CAAC,MAAM,IAAI,CAAC;AAE3F,QAAM,iBAAa,uBAAuB,IAAI;AAC9C,QAAM,CAAC,kBAAkB,mBAAmB,QAAI,yBAAS,EAAE,KAAK,GAAG,MAAM,EAAE,CAAC;AAG5E,QAAM,YAAY,eAAAC,QAAM,QAAQ,MAAM;AACpC,QAAI,OAAO;AACT,UAAI,MAAM,QAAQ,KAAK,EAAG,QAAO;AACjC,aAAO;AAAA,IACT;AACA,WAAO,CAAC,iBAAiB,OAAO,QAAQ,MAAM,IAAI;AAAA,EACpD,GAAG,CAAC,OAAO,OAAO,aAAa,CAAC;AAEhC,QAAM,CAAC,WAAW,OAAO,IAAI;AAE7B,gCAAU,MAAM;AACd,QAAI,OAAO;AACT,UAAI,aAAa,SAAS;AACxB,sBAAc,GAAG,WAAW,SAAS,CAAC,MAAM,WAAW,OAAO,CAAC,EAAE;AAAA,MACnE,WAAW,WAAW;AACpB,sBAAc,GAAG,WAAW,SAAS,CAAC,QAAQ;AAAA,MAChD,OAAO;AACL,sBAAc,EAAE;AAAA,MAClB;AAAA,IACF,OAAO;AACL,UAAI,qBAAqB,QAAQ,CAAC,MAAM,UAAU,QAAQ,CAAC,GAAG;AAC5D,sBAAc,WAAW,SAAS,CAAC;AAAA,MACrC,OAAO;AACL,sBAAc,EAAE;AAAA,MAClB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,WAAW,SAAS,KAAK,CAAC;AAE9B,gCAAU,MAAM;AACd,UAAM,qBAAqB,CAAC,UAAsB;AAChD,UACE,WAAW,WACX,CAAC,WAAW,QAAQ,SAAS,MAAM,MAAc,GACjD;AACA,kBAAU,KAAK;AAAA,MACjB;AAAA,IACF;AACA,aAAS,iBAAiB,aAAa,kBAAkB;AACzD,WAAO,MAAM,SAAS,oBAAoB,aAAa,kBAAkB;AAAA,EAC3E,GAAG,CAAC,CAAC;AAEL,QAAM,4BAA4B,MAAM;AACtC,QAAI,WAAW,SAAS;AACtB,YAAM,YAAY,WAAW,QAAQ,sBAAsB;AAC3D,YAAM,iBAAiB;AACvB,YAAM,iBAAiB,OAAO;AAE9B,UAAI,MAAM,UAAU,SAAS;AAC7B,UAAI,UAAU,SAAS,iBAAiB,gBAAgB;AACtD,cAAM,UAAU,MAAM,iBAAiB;AAAA,MACzC;AAEA,0BAAoB;AAAA,QAClB;AAAA,QACA,MAAM,UAAU;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,mBAAmB,CAAC,SAAe;AACvC,QAAI,OAAO;AACT,UAAI;AAEJ,UAAI,CAAC,aAAc,aAAa,SAAU;AAExC,mBAAW,CAAC,MAAM,IAAI;AAAA,MACxB,OAAO;AAEL,gBAAI,2BAAS,MAAM,SAAS,GAAG;AAC7B,qBAAW,CAAC,MAAM,SAAS;AAAA,QAC7B,OAAO;AACL,qBAAW,CAAC,WAAW,IAAI;AAAA,QAC7B;AAAA,MACF;AAEA,uBAAiB,QAAQ;AAGzB,UAAI,SAAS,CAAC,KAAK,SAAS,CAAC,GAAG;AAC9B,iBAAS;AAAA,UACP,QAAQ;AAAA,YACN;AAAA,YACA,OAAO;AAAA,UACT;AAAA,QACF,CAAC;AACD,kBAAU,KAAK;AAAA,MACjB,OAAO;AAEL,iBAAS;AAAA,UACP,QAAQ;AAAA,YACN;AAAA,YACA,OAAO;AAAA,UACT;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,OAAO;AACL,YAAM,QAAQ;AAAA,QACZ,QAAQ;AAAA,UACN;AAAA,UACA,OAAO;AAAA,QACT;AAAA,MACF;AACA,eAAS,KAAK;AACd,oBAAc,WAAW,IAAI,CAAC;AAC9B,gBAAU,KAAK;AAAA,IACjB;AAAA,EACF;AAEA,QAAM,kBAAkB,MAAM;AAC5B,QAAI,CAAC,UAAU;AACb,gCAA0B;AAC1B,gBAAU,CAAC,MAAM;AAAA,IACnB;AAAA,EACF;AAEA,QAAM,aAAa,CAAC,SAClB,KACG,mBAAmB,SAAS;AAAA,IAC3B,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,EACR,CAAC,EACA,QAAQ,OAAO,GAAG;AAEvB,QAAM,eAAe,CAAC,eAAuB;AAC3C,UAAM,QAAQ;AACd,UAAM,QAAQ,WAAW,MAAM,KAAK;AACpC,QAAI,CAAC,MAAO,QAAO;AAEnB,UAAM,MAAM,SAAS,MAAM,CAAC,GAAG,EAAE;AACjC,UAAM,QAAQ,SAAS,MAAM,CAAC,GAAG,EAAE;AACnC,UAAM,OAAO,SAAS,MAAM,CAAC,GAAG,EAAE;AAElC,UAAM,OAAO,IAAI,KAAK,MAAM,QAAQ,GAAG,GAAG;AAC1C,WACE,KAAK,YAAY,MAAM,QACvB,KAAK,SAAS,MAAM,QAAQ,KAC5B,KAAK,QAAQ,MAAM;AAAA,EAEvB;AAEA,QAAM,oBAAoB,CAAC,MAA2C;AACpE,QAAI,MAAM,EAAE,OAAO,MAAM,QAAQ,OAAO,EAAE;AAC1C,QAAI,IAAI,SAAS,EAAG,OAAM,IAAI,MAAM,GAAG,CAAC;AAExC,QAAI,IAAI,SAAS,GAAG;AAClB,YAAM,GAAG,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC;AAAA,IAC7D,WAAW,IAAI,SAAS,GAAG;AACzB,YAAM,GAAG,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC;AAAA,IAC1C;AAEA,kBAAc,GAAG;AAEjB,QAAI,IAAI,WAAW,MAAM,aAAa,GAAG,GAAG;AAC1C,YAAM,CAAC,KAAK,OAAO,IAAI,IAAI,IAAI,MAAM,GAAG,EAAE,IAAI,MAAM;AACpD,YAAM,OAAO,IAAI,KAAK,MAAM,QAAQ,GAAG,GAAG;AAC1C,YAAM,QAAQ;AAAA,QACZ,QAAQ;AAAA,UACN;AAAA,UACA,OAAO;AAAA,QACT;AAAA,MACF;AACA,eAAS,KAAK;AACd,eAAS,KAAK;AACd,qBAAe,IAAI;AAAA,IACrB,OAAO;AACL,qBAAe,KAAK;AAAA,IACtB;AAAA,EACF;AAEA,QAAM,kBAAkB,MAAM;AAC5B,QAAI,OAAO;AAGT;AAAA,IACF;AAEA,QAAI,CAAC,aAAa,UAAU,GAAG;AAE7B,YAAM,QAAQ,oBAAI,KAAK;AACvB,oBAAc,WAAW,KAAK,CAAC;AAC/B,YAAM,QAAQ;AAAA,QACZ,QAAQ;AAAA,UACN;AAAA,UACA,OAAO;AAAA,QACT;AAAA,MACF;AACA,eAAS,KAAK;AACd,qBAAe,IAAI;AAAA,IACrB,OAAO;AAEL,YAAM,CAAC,KAAK,OAAO,IAAI,IAAI,WAAW,MAAM,GAAG,EAAE,IAAI,MAAM;AAC3D,YAAM,OAAO,IAAI,KAAK,MAAM,QAAQ,GAAG,GAAG;AAE1C,UAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,GAAG;AAC1B,iBAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,KAAK,EAAE,CAAC;AAAA,MAC5C,OAAO;AAEL,cAAM,QAAQ,oBAAI,KAAK;AACvB,sBAAc,WAAW,KAAK,CAAC;AAC/B,iBAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,MAAM,EAAE,CAAC;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AAEA,SACE,+CAAC,SAAI,KAAK,YAAY,eAAW,cAAAC,SAAK,mBAAmB,SAAS,GAChE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA,OAAO;AAAA,QACP,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,WACE,8CAAC,UACC;AAAA,UAAC;AAAA;AAAA,YACC,SAAS;AAAA,YACT,WAAU;AAAA;AAAA,QACZ,GACF;AAAA,QAEF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,CAAC,cAAc,sBAAmB;AAAA,QACzC,SAAS;AAAA;AAAA,IACX;AAAA,IAEC,UACC;AAAA,MAAC;AAAA;AAAA,QACC,eAAW,cAAAA;AAAA,UACT;AAAA,UACA;AAAA,UACA,QAAQ,cAAc;AAAA,QACxB;AAAA,QACA,OAAO;AAAA,UACL,KAAK,GAAG,iBAAiB,GAAG;AAAA,UAC5B,MAAM,GAAG,iBAAiB,IAAI;AAAA,UAC7B,iBAAiB,MAAM,KAAK;AAAA,UAC5B,aAAa,MAAM,KAAK;AAAA,UACxB,aAAa;AAAA,UACb,aAAa;AAAA,UACb,cAAc,MAAM,KAAK;AAAA,UACzB,WAAW,MAAM,KAAK;AAAA,UACtB,SAAS;AAAA,QACZ;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACC,OAAO,CAAC,QAAS,YAAqB;AAAA,YACtC;AAAA,YACA;AAAA,YACA,eAAe,QAAQ,UAAU;AAAA,YACjC,UAAU;AAAA,YACV;AAAA,YACA;AAAA,YACA;AAAA,YACA,WAAU;AAAA;AAAA,QACZ;AAAA;AAAA,IACF;AAAA,KAEJ;AAEJ;;;AClTA,uBAA6B;AAE7B,IAAAC,iBAAkC;AAClC,IAAAC,cAAiC;;;ACHjC,IAAAC,cAAwB;;;ACAxB,IAAAC,iBAAsE;AACtE,IAAAC,aAA8C;;;ACD9C,IAAAC,iBAAgC;AAEhC,IAAAC,gBAAqB;AAiCT,IAAAC,uBAAA;AA9BZ,IAAM,SAAgC,CAAC;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,qBAAqB;AACvB,MAAM;AACJ,QAAM,CAAC,UAAU,WAAW,QAAI,yBAAS,mBAAmB,MAAM,CAAC,GAAG,EAAE;AAExE,QAAM,iBAAiB,CAAC,IAAY,aAAuB;AACzD,QAAI,SAAU;AACd,gBAAY,EAAE;AACd,QAAI,SAAU,UAAS,EAAE;AAAA,EAC3B;AAEA,QAAM,gBAAgB,MAAM,KAAK,UAAQ,KAAK,OAAO,QAAQ,GAAG;AAEhE,SACE,+CAAC,SAAI,eAAW,oBAAK,UAAU,kBAAkB,GAE/C;AAAA,kDAAC,SAAI,eAAW;AAAA,MACd;AAAA,MACA,YAAY,SAAS,aAAa;AAAA,MAClC;AAAA,IACF,GACG,gBAAM,IAAI,CAAC,SAAS;AACnB,YAAM,WAAW,KAAK,OAAO;AAE7B,aACE;AAAA,QAAC;AAAA;AAAA,UAEC,SAAS,MAAM,eAAe,KAAK,IAAI,KAAK,QAAQ;AAAA,UACpD,UAAU,KAAK;AAAA,UACf,eAAW;AAAA,YACT;AAAA;AAAA,YAEA,YAAY,UAAU;AAAA,cACpB;AAAA,cACA,WACI,wCACA;AAAA,YACN;AAAA;AAAA,YAEA,YAAY,UAAU;AAAA,cACpB;AAAA,cACA,WACI,wCACA;AAAA,YACN;AAAA,YACA,KAAK,YAAY;AAAA,UACnB;AAAA,UAEC;AAAA,iBAAK,QAAQ,8CAAC,UAAK,WAAU,WAAW,eAAK,MAAK;AAAA,YACnD,8CAAC,UAAO,IAAG,QAAQ,eAAK,OAAM;AAAA;AAAA;AAAA,QAvBzB,KAAK;AAAA,MAwBZ;AAAA,IAEJ,CAAC,GACH;AAAA,IAGA,8CAAC,SAAI,WAAU,8BACZ,yBACH;AAAA,KACF;AAEJ;AAEA,IAAO,eAAQ;;;ACzEf,IAAAC,gBAAiB;AA+BP,IAAAC,uBAAA;AA3BV,IAAMC,WAAU;AAAA,EACd,IAAI,EAAE,QAAQ,6BAA6B,WAAW,QAAQ;AAAA,EAC9D,IAAI,EAAE,QAAQ,qBAAqB,WAAW,MAAM;AACtD;AAEe,SAAR,mBAAoC;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA,WAAW;AACb,GAA4B;AAC1B,QAAM,EAAE,QAAQ,UAAU,IAAIA,SAAQ,IAAI;AAE1C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW,cAAAC;AAAA,QACT;AAAA,QACA;AAAA,QACA,YAAY;AAAA,QACZ;AAAA,MACF;AAAA,MAEC,kBAAQ,IAAI,CAAC,QAAQ;AACpB,cAAM,WAAW,IAAI,UAAU;AAC/B,eACE;AAAA,UAAC;AAAA;AAAA,YAEC,SAAS,MAAM,CAAC,YAAY,SAAS,IAAI,KAAK;AAAA,YAC9C;AAAA,YACA,eAAW,cAAAA;AAAA,cACT;AAAA,cACA;AAAA,cACA,WACI,sHACA;AAAA,cACJ,YAAY;AAAA,YACd;AAAA,YAEC;AAAA,kBAAI,QAAQ,8CAAC,UAAM,cAAI,MAAK;AAAA,cAC7B,8CAAC,UAAO,IAAG,QAAQ,cAAI,OAAM;AAAA;AAAA;AAAA,UAbxB,IAAI;AAAA,QAcX;AAAA,MAEJ,CAAC;AAAA;AAAA,EACH;AAEJ;;;ACnDA,IAAAC,gBAAiB;AAUb,IAAAC,uBAAA;AAPW,SAAR,UAA2B;AAAA,EAChC,cAAc;AAAA,EACd;AAAA,EACA,QAAQ;AAAA,EACR,YAAY,gBAAgB,eAAe,SAAS;AACtD,GAAmB;AACjB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW,cAAAC;AAAA,QACT;AAAA,QACA,gBAAgB,eAAe,WAAW;AAAA,QAC1C;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;;;AHggDU,IAAAC,uBAAA;AArgDV,IAAM,cAAc;AAEb,IAAM,kBAAkC;AAAA,EAC7C,SAAS;AAAA;AAAA,EACT,WAAW;AAAA;AAAA,EACX,SAAS;AAAA;AAAA,EACT,QAAQ;AAAA;AAAA,EACR,SAAS;AAAA;AAAA,EACT,MAAM;AAAA;AAAA,EACN,OAAO;AAAA;AAAA,EACP,SAAS;AAAA;AAAA,EACT,QAAQ;AAAA,IACN,WAAW;AAAA;AAAA,IACX,aAAa;AAAA;AAAA,IACb,UAAU;AAAA;AAAA,IACV,YAAY;AAAA;AAAA,EACd;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA;AAAA,IACV,YAAY;AAAA;AAAA,IACZ,OAAO;AAAA;AAAA,IACP,SAAS;AAAA;AAAA,EACX;AACF;AAEO,IAAM,UAAsD;AAAA,EACjE;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,WAAW;AAAA,MACX,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,MACP,SAAS;AAAA,MACT,QAAQ;AAAA,QACN,WAAW;AAAA,QACX,aAAa;AAAA,QACb,UAAU;AAAA,QACV,YAAY;AAAA,MACd;AAAA,MACA,OAAO;AAAA,QACL,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,WAAW;AAAA,MACX,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,MACP,SAAS;AAAA,MACT,QAAQ;AAAA,QACN,WAAW;AAAA,QACX,aAAa;AAAA,QACb,UAAU;AAAA,QACV,YAAY;AAAA,MACd;AAAA,MACA,OAAO;AAAA,QACL,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,WAAW;AAAA,MACX,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,MACP,SAAS;AAAA,MACT,QAAQ;AAAA,QACN,WAAW;AAAA,QACX,aAAa;AAAA,QACb,UAAU;AAAA,QACV,YAAY;AAAA,MACd;AAAA,MACA,OAAO;AAAA,QACL,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,WAAW;AAAA,MACX,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,MACP,SAAS;AAAA,MACT,QAAQ;AAAA,QACN,WAAW;AAAA,QACX,aAAa;AAAA,QACb,UAAU;AAAA,QACV,YAAY;AAAA,MACd;AAAA,MACA,OAAO;AAAA,QACL,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,WAAW;AAAA,MACX,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,MACP,SAAS;AAAA,MACT,QAAQ;AAAA,QACN,WAAW;AAAA,QACX,aAAa;AAAA,QACb,UAAU;AAAA,QACV,YAAY;AAAA,MACd;AAAA,MACA,OAAO;AAAA,QACL,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;AAiBA,IAAM,qBAAiB,8BAA8C,MAAS;AAEvE,IAAM,aAAa,MAAM;AAC9B,QAAM,cAAU,2BAAW,cAAc;AACzC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,mDAAmD;AAAA,EACrE;AACA,SAAO;AACT;AAMO,IAAM,iBAAiB,MAAsC;AAClE,aAAO,2BAAW,cAAc;AAClC;AAEA,IAAMC,kBAAiB,CAAC,KAAU,SAAiB;AACjD,SAAO,KAAK,MAAM,GAAG,EAAE,OAAO,CAAC,KAAK,SAAS,OAAO,IAAI,IAAI,GAAG,GAAG;AACpE;AAEA,IAAM,eAAe,CAAC,QAAgB;AACpC,MAAI,CAAC,OAAO,OAAO,QAAQ,SAAU,QAAO;AAC5C,QAAM,QAAQ,IAAI,QAAQ,KAAK,EAAE;AACjC,MAAI,IAAI,GACN,IAAI,GACJ,IAAI;AACN,MAAI,MAAM,WAAW,GAAG;AACtB,QAAI,SAAS,MAAM,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE;AACpC,QAAI,SAAS,MAAM,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE;AACpC,QAAI,SAAS,MAAM,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE;AAAA,EACtC,WAAW,MAAM,WAAW,GAAG;AAC7B,QAAI,SAAS,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE;AACtC,QAAI,SAAS,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE;AACtC,QAAI,SAAS,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE;AAAA,EACxC,OAAO;AACL,WAAO;AAAA,EACT;AACA,QAAM,cAAc,IAAI,MAAM,IAAI,MAAM,IAAI,OAAO;AACnD,SAAO,aAAa;AACtB;AAGA,IAAM,kBAAkB,CAAC,QAAgB;AACvC,MAAI,CAAC,OAAO,OAAO,QAAQ,SAAU,QAAO;AAC5C,QAAM,QAAQ,IAAI,QAAQ,KAAK,EAAE;AACjC,MAAI,IAAI,GACN,IAAI,GACJ,IAAI;AACN,MAAI,MAAM,WAAW,GAAG;AACtB,QAAI,SAAS,MAAM,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE;AACpC,QAAI,SAAS,MAAM,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE;AACpC,QAAI,SAAS,MAAM,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE;AAAA,EACtC,WAAW,MAAM,WAAW,GAAG;AAC7B,QAAI,SAAS,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE;AACtC,QAAI,SAAS,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE;AACtC,QAAI,SAAS,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE;AAAA,EACxC,OAAO;AACL,WAAO;AAAA,EACT;AACA,QAAM,cAAc,IAAI,MAAM,IAAI,MAAM,IAAI,OAAO;AACnD,SAAO,aAAa;AACtB;AAEe,SAAR,gBAAiC;AAAA,EACtC;AAAA,EACA,OAAAC;AAAA,EACA,UAAU;AACZ,GAAyB;AACvB,QAAM,CAACC,UAAS,eAAe,QAAI,yBAAyB,MAAM;AAChE,UAAM,cAAc;AAAA,MAClB,GAAG;AAAA,MACH,GAAGD;AAAA,MACH,QAAQ,EAAE,GAAG,gBAAgB,QAAQ,GAAGA,QAAO,OAAO;AAAA,MACtD,OAAO,EAAE,GAAG,gBAAgB,OAAO,GAAGA,QAAO,MAAM;AAAA,IACrD;AACA,QAAI,CAAC,SAAS;AACZ,aAAO;AAAA,IACT;AACA,QAAI;AACF,YAAM,QAAQ,aAAa,QAAQ,WAAW;AAC9C,UAAI,OAAO;AACT,cAAM,SAAS,KAAK,MAAM,KAAK;AAC/B,eAAO;AAAA,UACL,GAAG;AAAA,UACH,GAAG;AAAA,UACH,QAAQ,EAAE,GAAG,YAAY,QAAQ,GAAG,OAAO,OAAO;AAAA,UAClD,OAAO,EAAE,GAAG,YAAY,OAAO,GAAG,OAAO,MAAM;AAAA,QACjD;AAAA,MACF;AAAA,IACF,SAAS,GAAG;AACV,cAAQ,MAAM,0CAA0C,CAAC;AAAA,IAC3D;AACA,WAAO;AAAA,EACT,CAAC;AAED,QAAM,CAAC,QAAQ,SAAS,QAAI,yBAAS,KAAK;AAC1C,QAAM,CAAC,eAAe,gBAAgB,QAAI,yBAExC,MAAM;AACN,QAAI;AACF,YAAM,QAAQ,aAAa,QAAQ,yBAAyB;AAC5D,aAAO,QAAQ,KAAK,MAAM,KAAK,IAAI,CAAC;AAAA,IACtC,SAAS,GAAG;AACV,cAAQ,MAAM,iCAAiC,CAAC;AAChD,aAAO,CAAC;AAAA,IACV;AAAA,EACF,CAAC;AACD,QAAM,CAAC,eAAe,gBAAgB,QAAI,yBAAS,EAAE;AACrD,QAAM,CAAC,gBAAgB,iBAAiB,QAAI,yBAAS,KAAK;AAE1D,QAAM,mBAAmB,MAAM;AAC7B,QAAI,CAAC,cAAc,KAAK,EAAG;AAC3B,UAAM,YAAY;AAAA,MAChB,MAAM,cAAc,KAAK;AAAA,MACzB,QAAQ,KAAK,MAAM,KAAK,UAAUC,QAAO,CAAC;AAAA,IAC5C;AACA,UAAM,UAAU,CAAC,GAAG,eAAe,SAAS;AAC5C,qBAAiB,OAAO;AACxB,iBAAa,QAAQ,2BAA2B,KAAK,UAAU,OAAO,CAAC;AACvE,qBAAiB,EAAE;AACnB,sBAAkB,KAAK;AAAA,EACzB;AAEA,QAAM,qBAAqB,CAAC,cAAsB,MAAwB;AACxE,MAAE,gBAAgB;AAClB,UAAM,UAAU,cAAc,OAAO,CAAC,MAAM,EAAE,SAAS,YAAY;AACnE,qBAAiB,OAAO;AACxB,iBAAa,QAAQ,2BAA2B,KAAK,UAAU,OAAO,CAAC;AAAA,EACzE;AAEA,QAAM,CAAC,eAAe,gBAAgB,QAAI,yBAA2B,OAAO;AAE5E,QAAM,CAAC,cAAc,eAAe,QAAI;AAAA,IACtC,MAAM;AACJ,YAAM,QAAQ,aAAa,QAAQ,oBAAoB;AACvD,UAAI,UAAU,WAAW,UAAU,UAAU,UAAU,UAAU;AAC/D,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAAA,EACF;AAEA,gCAAU,MAAM;AACd,iBAAa,QAAQ,sBAAsB,YAAY;AAEvD,UAAM,gBAAgB,CAAC,WAAoB;AACzC,UAAI,QAAQ;AACV,iBAAS,gBAAgB,UAAU,IAAI,MAAM;AAC7C,iBAAS,gBAAgB,aAAa,cAAc,MAAM;AAC1D,yBAAiB,MAAM;AAAA,MACzB,OAAO;AACL,iBAAS,gBAAgB,UAAU,OAAO,MAAM;AAChD,iBAAS,gBAAgB,aAAa,cAAc,OAAO;AAC3D,yBAAiB,OAAO;AAAA,MAC1B;AAAA,IACF;AAEA,QAAI,iBAAiB,UAAU;AAC7B,YAAM,aAAa,OAAO,WAAW,8BAA8B;AACnE,oBAAc,WAAW,OAAO;AAEhC,YAAM,WAAW,CAAC,MAA2B;AAC3C,sBAAc,EAAE,OAAO;AAAA,MACzB;AAEA,iBAAW,iBAAiB,UAAU,QAAQ;AAC9C,aAAO,MAAM,WAAW,oBAAoB,UAAU,QAAQ;AAAA,IAChE,OAAO;AACL,oBAAc,iBAAiB,MAAM;AAAA,IACvC;AAAA,EACF,GAAG,CAAC,YAAY,CAAC;AAGjB,gCAAU,MAAM;AACd,QAAI,CAAC,SAAS;AACZ,sBAAgB;AAAA,QACd,GAAG;AAAA,QACH,GAAGD;AAAA,QACH,QAAQ,EAAE,GAAG,gBAAgB,QAAQ,GAAGA,QAAO,OAAO;AAAA,QACtD,OAAO,EAAE,GAAG,gBAAgB,OAAO,GAAGA,QAAO,MAAM;AAAA,MACrD,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAACA,QAAO,OAAO,CAAC;AAGnB,gCAAU,MAAM;AACd,UAAM,eAAe,CAAC,KAAU,SAAS,OAAO;AAC9C,aAAO,QAAQ,GAAG,EAAE,QAAQ,CAAC,CAAC,KAAK,GAAG,MAAM;AAC1C,YAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAC3C,uBAAa,KAAK,SAAS,MAAM,GAAG;AAAA,QACtC,OAAO;AACL,mBAAS,gBAAgB,MAAM;AAAA,YAC7B,WAAW,MAAM,GAAG,GAAG;AAAA,YACvB;AAAA,UACF;AACA,cAAI,WAAW,WAAW;AACxB,qBAAS,gBAAgB,MAAM;AAAA,cAC7B,WAAW,GAAG;AAAA,cACd;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,iBAAaC,QAAO;AACpB,QAAI,SAAS;AACX,mBAAa,QAAQ,aAAa,KAAK,UAAUA,QAAO,CAAC;AAAA,IAC3D;AAGA,QAAI,WAAW,SAAS;AAAA,MACtB;AAAA,IACF;AACA,QAAI,CAAC,UAAU;AACb,iBAAW,SAAS,cAAc,OAAO;AACzC,eAAS,KAAK;AACd,eAAS,KAAK,YAAY,QAAQ;AAAA,IACpC;AAEA,UAAM,SAAS,kBAAkB;AAEjC,QAAI,aAAaA,SAAQ,MAAM;AAC/B,QAAI,eAAeA,SAAQ,MAAM;AACjC,QAAI,gBAAgBA,SAAQ,MAAM;AAClC,QAAI,kBAAkBA,SAAQ,MAAM;AACpC,QAAI,WAAWA,SAAQ,OAAO;AAC9B,QAAI,aAAaA,SAAQ,OAAO;AAChC,QAAI,YAAYA,SAAQ,OAAO;AAC/B,QAAI,cAAcA,SAAQ,OAAO;AAEjC,QAAI,QAAQ;AACV,UAAI,aAAa,UAAU,GAAG;AAC5B,qBAAa,sBAAsBA,SAAQ,MAAM,KAAK;AAAA,MACxD;AACA,UAAI,CAAC,aAAa,YAAY,GAAG;AAC/B,uBAAe,sBAAsBA,SAAQ,MAAM,OAAO;AAAA,MAC5D;AACA,UAAI,aAAa,aAAa,GAAG;AAC/B,wBAAgB,sBAAsBA,SAAQ,MAAM,QAAQ;AAAA,MAC9D;AACA,UAAI,CAAC,aAAa,eAAe,GAAG;AAClC,0BAAkB,sBAAsBA,SAAQ,MAAM,UAAU;AAAA,MAClE;AACA,UAAI,aAAa,QAAQ,GAAG;AAC1B,mBAAW,sBAAsBA,SAAQ,OAAO,QAAQ;AAAA,MAC1D;AACA,UAAI,CAAC,aAAa,UAAU,GAAG;AAC7B,qBAAa,sBAAsBA,SAAQ,OAAO,UAAU;AAAA,MAC9D;AACA,UAAI,aAAa,SAAS,GAAG;AAC3B,oBAAY,sBAAsBA,SAAQ,OAAO,SAAS;AAAA,MAC5D;AACA,UAAI,CAAC,aAAa,WAAW,GAAG;AAC9B,sBAAc,sBAAsBA,SAAQ,OAAO,WAAW;AAAA,MAChE;AAAA,IACF,OAAO;AAGL,UAAI,CAAC,aAAa,UAAU,GAAG;AAC7B,qBAAa,gBAAgBA,SAAQ,MAAM,KAAK,IAC5C,YACA,sBAAsBA,SAAQ,MAAM,KAAK;AAAA,MAC/C;AACA,UAAI,aAAa,YAAY,GAAG;AAC9B,uBAAe,sBAAsBA,SAAQ,MAAM,OAAO;AAAA,MAC5D,WACE,CAAC,aAAa,YAAY,KAC1B,gBAAgBA,SAAQ,MAAM,OAAO,GACrC;AAAA,MAEF;AACA,UAAI,CAAC,aAAa,aAAa,GAAG;AAChC,wBAAgB,gBAAgBA,SAAQ,MAAM,QAAQ,IAClD,YACA,sBAAsBA,SAAQ,MAAM,QAAQ;AAAA,MAClD;AACA,UAAI,aAAa,eAAe,GAAG;AACjC,0BAAkB,sBAAsBA,SAAQ,MAAM,UAAU;AAAA,MAClE,WACE,CAAC,aAAa,eAAe,KAC7B,gBAAgBA,SAAQ,MAAM,UAAU,GACxC;AAAA,MAEF;AACA,UAAI,CAAC,aAAa,QAAQ,GAAG;AAC3B,mBAAW,gBAAgBA,SAAQ,OAAO,QAAQ,IAC9C,YACA,sBAAsBA,SAAQ,OAAO,QAAQ;AAAA,MACnD;AACA,UAAI,aAAa,UAAU,GAAG;AAC5B,qBAAa,sBAAsBA,SAAQ,OAAO,UAAU;AAAA,MAC9D;AACA,UAAI,CAAC,aAAa,SAAS,GAAG;AAC5B,oBAAY,gBAAgBA,SAAQ,OAAO,SAAS,IAChD,YACA,sBAAsBA,SAAQ,OAAO,SAAS;AAAA,MACpD;AACA,UAAI,aAAa,WAAW,GAAG;AAC7B,sBAAc,sBAAsBA,SAAQ,OAAO,WAAW;AAAA,MAChE;AAEA,UAAI,cAAc,aAAa,aAAa,SAAS,GAAG;AACtD,sBAAc;AAAA,MAChB;AAAA,IACF;AAEA,aAAS,YAAY;AAAA;AAAA,2BAEEA,SAAQ,OAAO;AAAA,6BACbA,SAAQ,SAAS;AAAA,2BACnBA,SAAQ,OAAO;AAAA,0BAChBA,SAAQ,MAAM;AAAA,2BACbA,SAAQ,OAAO;AAAA,wBAClBA,SAAQ,IAAI;AAAA,yBACXA,SAAQ,KAAK;AAAA,2BACXA,SAAQ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6BA8Kb,SAAS;AAAA,+BACP,WAAW;AAAA,4BACd,QAAQ;AAAA,8BACN,UAAU;AAAA;AAAA,kCAEN,aAAa;AAAA,oCACX,eAAe;AAAA,+BACpB,UAAU;AAAA,iCACR,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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","names":["isLightColor","import_react","import_react","getNestedValue","import_react","import_jsx_runtime","clsx","import_clsx","import_jsx_runtime","clsx","import_clsx","import_jsx_runtime","config","clsx","import_clsx","import_fa","import_jsx_runtime","clsx","import_clsx","import_react","import_jsx_runtime","clsx","import_react","import_clsx","import_fa","import_jsx_runtime","React","import_clsx","import_react","import_jsx_runtime","clsx","import_clsx","import_jsx_runtime","clsx","import_clsx","import_fa","import_jsx_runtime","clsx","import_clsx","import_react","import_fa","import_md","import_clsx","import_react","import_clsx","clsx","clsx","import_jsx_runtime","value","clsx","import_react","import_clsx","import_fa","import_clsx","import_react","import_fa","import_jsx_runtime","clsx","import_jsx_runtime","React","clsx","import_clsx","import_react","import_fa","import_jsx_runtime","React","clsx","import_jsx_runtime","getNestedValue","clsx","import_clsx","import_react","import_fa","import_date_fns","import_jsx_runtime","React","clsx","import_react","import_fa","import_fa","import_react","import_md","import_react","import_clsx","import_jsx_runtime","import_clsx","import_jsx_runtime","sizeMap","clsx","import_clsx","import_jsx_runtime","clsx","import_jsx_runtime","getNestedValue","theme","palette","isLightColor","palette","import_jsx_runtime","palette","import_jsx_runtime","import_clsx","import_fa","import_react","import_jsx_runtime","clsx","import_clsx","import_fa","import_jsx_runtime","clsx","import_clsx","import_jsx_runtime","clsx","import_react","import_react","import_jsx_runtime","React","config","import_react","import_clsx","import_clsx","import_react","import_fa","import_jsx_runtime","clsx","import_react","config","import_jsx_runtime","config","clsx","import_jsx_runtime","config","import_clsx","import_jsx_runtime","clsx","import_react","import_jsx_runtime","import_react","import_fa","import_jsx_runtime","import_clsx","import_clsx","import_fa","import_jsx_runtime","clsx","import_clsx","import_jsx_runtime","clsx","import_clsx","import_react","import_jsx_runtime","directionMap","alignMap","justifyMap","wrapMap","clsx","import_jsx_runtime","clsx","import_react","import_clsx","import_jsx_runtime","clsx","import_clsx","import_jsx_runtime","sizeMap","clsx","import_clsx","import_jsx_runtime","clsx","import_react","import_clsx","import_fa","import_jsx_runtime","clsx","import_clsx","import_react","import_fa","import_jsx_runtime","import_fa","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","formatCurrencyMX","getNestedValue","import_clsx","import_fa","import_jsx_runtime","import_jsx_runtime","getNestedValue","formatCurrencyMX","clsx","import_jsx_runtime","import_fa","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","clsx","getNestedValue","import_react","import_fa","import_jsx_runtime","import_react","import_clsx","import_jsx_runtime","sizeClasses","clsx","import_clsx","import_jsx_runtime","clsx","import_clsx","import_jsx_runtime","clsx","import_clsx","import_jsx_runtime","clsx","import_clsx","import_jsx_runtime","colorMap","clsx","import_clsx","import_react","import_fa","import_jsx_runtime","clsx","import_react","import_clsx","import_jsx_runtime","FileTypeEnum","UploadStatus","config","clsx","import_react","import_fa","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_clsx","import_react","import_fa","import_jsx_runtime","clsx"]}
|