@nar-bus/lena-ui-shared 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +2935 -0
- package/dist/index.js +17416 -0
- package/dist/index.js.map +1 -0
- package/dist/theme.css +464 -0
- package/package.json +106 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../node_modules/clsx/dist/clsx.mjs","../node_modules/tailwind-merge/dist/bundle-mjs.mjs","../src/lib/utils.ts","../src/components/ui/accordion.tsx","../node_modules/class-variance-authority/dist/index.mjs","../src/components/ui/button.variants.ts","../src/components/ui/button.tsx","../src/components/ui/alert-dialog.tsx","../src/components/ui/avatar.tsx","../src/components/ui/badge.variants.ts","../src/components/ui/badge.tsx","../src/components/ui/breadcrumb.tsx","../node_modules/@date-fns/tz/tzName/index.js","../node_modules/@date-fns/tz/tzOffset/index.js","../node_modules/@date-fns/tz/date/mini.js","../node_modules/@date-fns/tz/date/index.js","../node_modules/react-day-picker/dist/esm/helpers/getBroadcastWeeksInMonth.js","../node_modules/react-day-picker/dist/esm/helpers/startOfBroadcastWeek.js","../node_modules/react-day-picker/dist/esm/helpers/endOfBroadcastWeek.js","../node_modules/react-day-picker/dist/esm/locale/en-US.js","../node_modules/react-day-picker/dist/esm/classes/DateLib.js","../node_modules/react-day-picker/dist/esm/classes/CalendarDay.js","../node_modules/react-day-picker/dist/esm/classes/CalendarMonth.js","../node_modules/react-day-picker/dist/esm/classes/CalendarWeek.js","../node_modules/react-day-picker/dist/esm/components/Button.js","../node_modules/react-day-picker/dist/esm/components/CaptionLabel.js","../node_modules/react-day-picker/dist/esm/components/Chevron.js","../node_modules/react-day-picker/dist/esm/components/Day.js","../node_modules/react-day-picker/dist/esm/components/DayButton.js","../node_modules/react-day-picker/dist/esm/UI.js","../node_modules/react-day-picker/dist/esm/components/Dropdown.js","../node_modules/react-day-picker/dist/esm/components/DropdownNav.js","../node_modules/react-day-picker/dist/esm/components/Footer.js","../node_modules/react-day-picker/dist/esm/components/Month.js","../node_modules/react-day-picker/dist/esm/components/MonthCaption.js","../node_modules/react-day-picker/dist/esm/components/MonthGrid.js","../node_modules/react-day-picker/dist/esm/components/Months.js","../node_modules/react-day-picker/dist/esm/useDayPicker.js","../node_modules/react-day-picker/dist/esm/components/MonthsDropdown.js","../node_modules/react-day-picker/dist/esm/components/Nav.js","../node_modules/react-day-picker/dist/esm/components/NextMonthButton.js","../node_modules/react-day-picker/dist/esm/components/Option.js","../node_modules/react-day-picker/dist/esm/components/PreviousMonthButton.js","../node_modules/react-day-picker/dist/esm/components/Root.js","../node_modules/react-day-picker/dist/esm/components/Select.js","../node_modules/react-day-picker/dist/esm/components/Week.js","../node_modules/react-day-picker/dist/esm/components/Weekday.js","../node_modules/react-day-picker/dist/esm/components/Weekdays.js","../node_modules/react-day-picker/dist/esm/components/WeekNumber.js","../node_modules/react-day-picker/dist/esm/components/WeekNumberHeader.js","../node_modules/react-day-picker/dist/esm/components/Weeks.js","../node_modules/react-day-picker/dist/esm/components/YearsDropdown.js","../node_modules/react-day-picker/dist/esm/utils/rangeIncludesDate.js","../node_modules/react-day-picker/dist/esm/utils/typeguards.js","../node_modules/react-day-picker/dist/esm/utils/dateMatchModifiers.js","../node_modules/react-day-picker/dist/esm/helpers/createGetModifiers.js","../node_modules/react-day-picker/dist/esm/helpers/getClassNamesForModifiers.js","../node_modules/react-day-picker/dist/esm/helpers/getComponents.js","../node_modules/react-day-picker/dist/esm/helpers/getDataAttributes.js","../node_modules/react-day-picker/dist/esm/helpers/getDefaultClassNames.js","../node_modules/react-day-picker/dist/esm/formatters/formatCaption.js","../node_modules/react-day-picker/dist/esm/formatters/formatDay.js","../node_modules/react-day-picker/dist/esm/formatters/formatMonthDropdown.js","../node_modules/react-day-picker/dist/esm/formatters/formatWeekdayName.js","../node_modules/react-day-picker/dist/esm/formatters/formatWeekNumber.js","../node_modules/react-day-picker/dist/esm/formatters/formatWeekNumberHeader.js","../node_modules/react-day-picker/dist/esm/formatters/formatYearDropdown.js","../node_modules/react-day-picker/dist/esm/helpers/getFormatters.js","../node_modules/react-day-picker/dist/esm/labels/labelDayButton.js","../node_modules/react-day-picker/dist/esm/labels/labelGrid.js","../node_modules/react-day-picker/dist/esm/labels/labelGridcell.js","../node_modules/react-day-picker/dist/esm/labels/labelMonthDropdown.js","../node_modules/react-day-picker/dist/esm/labels/labelNav.js","../node_modules/react-day-picker/dist/esm/labels/labelNext.js","../node_modules/react-day-picker/dist/esm/labels/labelPrevious.js","../node_modules/react-day-picker/dist/esm/labels/labelWeekday.js","../node_modules/react-day-picker/dist/esm/labels/labelWeekNumber.js","../node_modules/react-day-picker/dist/esm/labels/labelWeekNumberHeader.js","../node_modules/react-day-picker/dist/esm/labels/labelYearDropdown.js","../node_modules/react-day-picker/dist/esm/helpers/getLabels.js","../node_modules/react-day-picker/dist/esm/helpers/getMonthOptions.js","../node_modules/react-day-picker/dist/esm/helpers/getStyleForModifiers.js","../node_modules/react-day-picker/dist/esm/helpers/getWeekdays.js","../node_modules/react-day-picker/dist/esm/helpers/getYearOptions.js","../node_modules/react-day-picker/dist/esm/noonDateLib.js","../node_modules/react-day-picker/dist/esm/useAnimation.js","../node_modules/react-day-picker/dist/esm/helpers/getDates.js","../node_modules/react-day-picker/dist/esm/helpers/getDays.js","../node_modules/react-day-picker/dist/esm/helpers/getDisplayMonths.js","../node_modules/react-day-picker/dist/esm/helpers/getInitialMonth.js","../node_modules/react-day-picker/dist/esm/helpers/getMonths.js","../node_modules/react-day-picker/dist/esm/helpers/getNavMonth.js","../node_modules/react-day-picker/dist/esm/helpers/getNextMonth.js","../node_modules/react-day-picker/dist/esm/helpers/getPreviousMonth.js","../node_modules/react-day-picker/dist/esm/helpers/getWeeks.js","../node_modules/react-day-picker/dist/esm/helpers/useControlledValue.js","../node_modules/react-day-picker/dist/esm/useCalendar.js","../node_modules/react-day-picker/dist/esm/helpers/calculateFocusTarget.js","../node_modules/react-day-picker/dist/esm/helpers/getFocusableDate.js","../node_modules/react-day-picker/dist/esm/helpers/getNextFocus.js","../node_modules/react-day-picker/dist/esm/useFocus.js","../node_modules/react-day-picker/dist/esm/selection/useMulti.js","../node_modules/react-day-picker/dist/esm/utils/addToRange.js","../node_modules/react-day-picker/dist/esm/utils/rangeContainsDayOfWeek.js","../node_modules/react-day-picker/dist/esm/utils/rangeOverlaps.js","../node_modules/react-day-picker/dist/esm/utils/rangeContainsModifiers.js","../node_modules/react-day-picker/dist/esm/selection/useRange.js","../node_modules/react-day-picker/dist/esm/selection/useSingle.js","../node_modules/react-day-picker/dist/esm/useSelection.js","../node_modules/react-day-picker/dist/esm/utils/toTimeZone.js","../node_modules/react-day-picker/dist/esm/utils/convertMatchersToTimeZone.js","../node_modules/react-day-picker/dist/esm/DayPicker.js","../src/components/ui/calendar.tsx","../src/components/ui/card.tsx","../src/components/ui/checkbox.tsx","../src/components/ui/collapsible.tsx","../src/components/ui/dialog.tsx","../src/components/ui/command.tsx","../src/components/ui/dropdown-menu.tsx","../src/components/ui/input.tsx","../src/components/ui/label.tsx","../src/components/ui/pagination.tsx","../src/components/ui/popover.tsx","../src/components/ui/progress.tsx","../src/components/ui/radio-group.tsx","../src/components/ui/scroll-area.tsx","../src/components/ui/select.tsx","../src/components/ui/separator.tsx","../src/components/ui/sheet.tsx","../src/components/ui/skeleton.tsx","../src/components/ui/sonner.tsx","../src/components/ui/switch.tsx","../src/components/ui/table.tsx","../src/components/ui/tabs.variants.ts","../src/components/ui/tabs.tsx","../src/components/ui/textarea.tsx","../src/components/ui/tooltip.tsx","../src/components/ui/alert.tsx","../src/components/ui/toggle.tsx","../src/components/ui/toggle-group.tsx","../src/components/ui/context-menu.tsx","../node_modules/react-resizable-panels/dist/react-resizable-panels.js","../src/components/ui/resizable.tsx","../src/components/ui/slider.tsx","../src/components/ui/SelectableCard.tsx","../src/components/ui/SegmentedControl.tsx","../src/components/data-table/constants.ts","../src/components/data-table/components/toolbar/DataTableSearch.tsx","../node_modules/nanoid/url-alphabet/index.js","../node_modules/nanoid/index.browser.js","../src/components/data-table/components/filters/FilterFieldSelect.tsx","../src/components/data-table/components/filters/FilterOperatorSelect.tsx","../src/components/data-table/components/filters/FilterValueInput.tsx","../src/components/data-table/components/filters/FilterRow.tsx","../src/components/data-table/components/filters/FilterBuilder.tsx","../src/components/data-table/utils/filter-utils.ts","../src/components/data-table/components/toolbar/DataTableToolbar.tsx","../src/components/data-table/components/pagination/DataTablePagination.tsx","../src/components/data-table/components/actions/DataTableBulkActions.tsx","../src/components/data-table/components/actions/DataTableRowActions.tsx","../src/components/data-table/components/states/DataTableEmpty.tsx","../src/components/data-table/components/states/DataTableLoading.tsx","../src/components/data-table/components/core/DataTable.tsx","../src/components/data-table/components/core/SimpleDataTable.tsx","../src/components/data-table/components/columns/DataTableColumnHeader.tsx","../src/components/data-table/cells/TextCell.tsx","../src/lib/date-formatting.ts","../src/components/data-table/cells/DateCell.tsx","../src/lib/status-colors.ts","../src/components/data-table/cells/StatusBadge.tsx","../src/components/data-table/cells/BooleanCell.tsx","../src/components/data-table/cells/CopyableCell.tsx","../src/components/data-table/cells/RelativeTimeCell.tsx","../src/components/data-table/cells/BadgeCell.tsx","../src/components/data-table/cells/IconTextCell.tsx","../src/components/data-table/cells/StackedTextCell.tsx","../src/components/data-table/cells/LinkCell.tsx","../node_modules/zustand/esm/vanilla/shallow.mjs","../node_modules/zustand/esm/react/shallow.mjs","../node_modules/immer/dist/immer.mjs","../node_modules/zustand/esm/middleware/immer.mjs","../src/components/data-table/store/createDataTableStore.ts","../src/components/data-table/store/selectors.ts","../src/components/data-table/utils/url-utils.ts","../src/components/data-table/hooks/useDataTableUrl.ts","../src/components/data-table/hooks/useDataTable.ts","../src/components/data-table/BulkActionBar.tsx","../src/hooks/useOptimisticList.ts","../src/hooks/useValidatedParams.ts","../src/hooks/usePrefetch.ts","../src/i18n/tr.ts","../src/i18n/en.ts","../src/i18n/context.tsx","../src/components/dialogs/EntityDeleteDialog.tsx","../src/components/data-table/CRUDTabContent.tsx","../src/components/form/FormField.tsx","../src/components/form/FormSection.tsx","../src/components/form/FormSheet.tsx","../src/components/form/SubmitButton.tsx","../src/components/form/fields/TextField.tsx","../src/components/form/fields/NumberField.tsx","../src/components/form/fields/SelectField.tsx","../src/components/form/fields/SwitchField.tsx","../src/components/form/fields/TextareaField.tsx","../src/components/form/fields/CheckboxField.tsx","../src/components/form/fields/RadioGroupField.tsx","../src/components/form/fields/ComboboxField.tsx","../src/components/form/fields/MultiSelectField.tsx","../src/components/form/fields/AsyncSelectField.tsx","../src/components/form/fields/DateField.tsx","../src/components/form/fields/DateRangeField.tsx","../src/components/form/fields/FileField.tsx","../src/components/form/fields/PasswordField.tsx","../src/components/form/SearchBar.tsx","../src/components/property-panel/CollapsibleSection.tsx","../src/components/json-editor/utils/syntax-highlighter.ts","../src/components/display/JsonViewer.tsx","../src/components/json-editor/hooks/useJsonValidation.ts","../src/components/json-editor/components/JsonTextEditor.tsx","../src/components/json-editor/utils/json-tree-utils.ts","../src/components/json-editor/hooks/useJsonTree.ts","../src/components/json-editor/components/JsonTreeNode.tsx","../src/components/json-editor/components/JsonTreeEditor.tsx","../src/components/json-editor/components/JsonToolbar.tsx","../src/components/json-editor/components/ValidationStatus.tsx","../src/components/json-editor/AdvancedJsonEditor.tsx","../src/components/page/PageHeader.tsx","../src/components/page/useLazyTabs.ts","../src/components/page/useTabUrlSync.ts","../src/components/page/tab-animations.ts","../src/components/page/UnifiedTabs.tsx","../src/components/page/DetailPageMetadataFooter.tsx","../src/components/page/TabPanel.tsx","../src/components/property-panel/CopyButton.tsx","../src/components/property-panel/PropertyRow.tsx","../src/components/property-panel/JsonEditorSection.tsx","../src/components/display/InfoCard.tsx","../src/components/display/Timeline.tsx","../src/components/display/SupportBadge.tsx","../src/components/display/StatCard.tsx","../src/components/display/QuickActionTile.tsx","../src/components/display/LocationMap.tsx","../src/components/display/CircularGauge.tsx","../src/components/sidebar/icon-registry.ts","../src/components/sidebar/AppSidebar.tsx","../src/components/header/AppHeader.tsx","../src/components/header/LocaleToggle.tsx","../src/components/ErrorBoundary.tsx","../src/components/SuspenseWrapper.tsx","../src/types/common.ts"],"sourcesContent":["function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * Concatenates two arrays faster than the array spread operator.\n */\nconst concatArrays = (array1, array2) => {\n // Pre-allocate for better V8 optimization\n const combinedArray = new Array(array1.length + array2.length);\n for (let i = 0; i < array1.length; i++) {\n combinedArray[i] = array1[i];\n }\n for (let i = 0; i < array2.length; i++) {\n combinedArray[array1.length + i] = array2[i];\n }\n return combinedArray;\n};\n\n// Factory function ensures consistent object shapes\nconst createClassValidatorObject = (classGroupId, validator) => ({\n classGroupId,\n validator\n});\n// Factory ensures consistent ClassPartObject shape\nconst createClassPartObject = (nextPart = new Map(), validators = null, classGroupId) => ({\n nextPart,\n validators,\n classGroupId\n});\nconst CLASS_PART_SEPARATOR = '-';\nconst EMPTY_CONFLICTS = [];\n// I use two dots here because one dot is used as prefix for class groups in plugins\nconst ARBITRARY_PROPERTY_PREFIX = 'arbitrary..';\nconst createClassGroupUtils = config => {\n const classMap = createClassMap(config);\n const {\n conflictingClassGroups,\n conflictingClassGroupModifiers\n } = config;\n const getClassGroupId = className => {\n if (className.startsWith('[') && className.endsWith(']')) {\n return getGroupIdForArbitraryProperty(className);\n }\n const classParts = className.split(CLASS_PART_SEPARATOR);\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and skip it.\n const startIndex = classParts[0] === '' && classParts.length > 1 ? 1 : 0;\n return getGroupRecursive(classParts, startIndex, classMap);\n };\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n if (hasPostfixModifier) {\n const modifierConflicts = conflictingClassGroupModifiers[classGroupId];\n const baseConflicts = conflictingClassGroups[classGroupId];\n if (modifierConflicts) {\n if (baseConflicts) {\n // Merge base conflicts with modifier conflicts\n return concatArrays(baseConflicts, modifierConflicts);\n }\n // Only modifier conflicts\n return modifierConflicts;\n }\n // Fall back to without postfix if no modifier conflicts\n return baseConflicts || EMPTY_CONFLICTS;\n }\n return conflictingClassGroups[classGroupId] || EMPTY_CONFLICTS;\n };\n return {\n getClassGroupId,\n getConflictingClassGroupIds\n };\n};\nconst getGroupRecursive = (classParts, startIndex, classPartObject) => {\n const classPathsLength = classParts.length - startIndex;\n if (classPathsLength === 0) {\n return classPartObject.classGroupId;\n }\n const currentClassPart = classParts[startIndex];\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n if (nextClassPartObject) {\n const result = getGroupRecursive(classParts, startIndex + 1, nextClassPartObject);\n if (result) return result;\n }\n const validators = classPartObject.validators;\n if (validators === null) {\n return undefined;\n }\n // Build classRest string efficiently by joining from startIndex onwards\n const classRest = startIndex === 0 ? classParts.join(CLASS_PART_SEPARATOR) : classParts.slice(startIndex).join(CLASS_PART_SEPARATOR);\n const validatorsLength = validators.length;\n for (let i = 0; i < validatorsLength; i++) {\n const validatorObj = validators[i];\n if (validatorObj.validator(classRest)) {\n return validatorObj.classGroupId;\n }\n }\n return undefined;\n};\n/**\n * Get the class group ID for an arbitrary property.\n *\n * @param className - The class name to get the group ID for. Is expected to be string starting with `[` and ending with `]`.\n */\nconst getGroupIdForArbitraryProperty = className => className.slice(1, -1).indexOf(':') === -1 ? undefined : (() => {\n const content = className.slice(1, -1);\n const colonIndex = content.indexOf(':');\n const property = content.slice(0, colonIndex);\n return property ? ARBITRARY_PROPERTY_PREFIX + property : undefined;\n})();\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n const {\n theme,\n classGroups\n } = config;\n return processClassGroups(classGroups, theme);\n};\n// Split into separate functions to maintain monomorphic call sites\nconst processClassGroups = (classGroups, theme) => {\n const classMap = createClassPartObject();\n for (const classGroupId in classGroups) {\n const group = classGroups[classGroupId];\n processClassesRecursively(group, classMap, classGroupId, theme);\n }\n return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n const len = classGroup.length;\n for (let i = 0; i < len; i++) {\n const classDefinition = classGroup[i];\n processClassDefinition(classDefinition, classPartObject, classGroupId, theme);\n }\n};\n// Split into separate functions for each type to maintain monomorphic call sites\nconst processClassDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (typeof classDefinition === 'string') {\n processStringDefinition(classDefinition, classPartObject, classGroupId);\n return;\n }\n if (typeof classDefinition === 'function') {\n processFunctionDefinition(classDefinition, classPartObject, classGroupId, theme);\n return;\n }\n processObjectDefinition(classDefinition, classPartObject, classGroupId, theme);\n};\nconst processStringDefinition = (classDefinition, classPartObject, classGroupId) => {\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n};\nconst processFunctionDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n if (classPartObject.validators === null) {\n classPartObject.validators = [];\n }\n classPartObject.validators.push(createClassValidatorObject(classGroupId, classDefinition));\n};\nconst processObjectDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n const entries = Object.entries(classDefinition);\n const len = entries.length;\n for (let i = 0; i < len; i++) {\n const [key, value] = entries[i];\n processClassesRecursively(value, getPart(classPartObject, key), classGroupId, theme);\n }\n};\nconst getPart = (classPartObject, path) => {\n let current = classPartObject;\n const parts = path.split(CLASS_PART_SEPARATOR);\n const len = parts.length;\n for (let i = 0; i < len; i++) {\n const part = parts[i];\n let next = current.nextPart.get(part);\n if (!next) {\n next = createClassPartObject();\n current.nextPart.set(part, next);\n }\n current = next;\n }\n return current;\n};\n// Type guard maintains monomorphic check\nconst isThemeGetter = func => 'isThemeGetter' in func && func.isThemeGetter === true;\n\n// LRU cache implementation using plain objects for simplicity\nconst createLruCache = maxCacheSize => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {}\n };\n }\n let cacheSize = 0;\n let cache = Object.create(null);\n let previousCache = Object.create(null);\n const update = (key, value) => {\n cache[key] = value;\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = Object.create(null);\n }\n };\n return {\n get(key) {\n let value = cache[key];\n if (value !== undefined) {\n return value;\n }\n if ((value = previousCache[key]) !== undefined) {\n update(key, value);\n return value;\n }\n },\n set(key, value) {\n if (key in cache) {\n cache[key] = value;\n } else {\n update(key, value);\n }\n }\n };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst MODIFIER_SEPARATOR = ':';\nconst EMPTY_MODIFIERS = [];\n// Pre-allocated result object shape for consistency\nconst createResultObject = (modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition, isExternal) => ({\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n isExternal\n});\nconst createParseClassName = config => {\n const {\n prefix,\n experimentalParseClassName\n } = config;\n /**\n * Parse class name into parts.\n *\n * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n */\n let parseClassName = className => {\n // Use simple array with push for better performance\n const modifiers = [];\n let bracketDepth = 0;\n let parenDepth = 0;\n let modifierStart = 0;\n let postfixModifierPosition;\n const len = className.length;\n for (let index = 0; index < len; index++) {\n const currentCharacter = className[index];\n if (bracketDepth === 0 && parenDepth === 0) {\n if (currentCharacter === MODIFIER_SEPARATOR) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + 1;\n continue;\n }\n if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') bracketDepth++;else if (currentCharacter === ']') bracketDepth--;else if (currentCharacter === '(') parenDepth++;else if (currentCharacter === ')') parenDepth--;\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.slice(modifierStart);\n // Inline important modifier check\n let baseClassName = baseClassNameWithImportantModifier;\n let hasImportantModifier = false;\n if (baseClassNameWithImportantModifier.endsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(0, -1);\n hasImportantModifier = true;\n } else if (\n /**\n * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n */\n baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(1);\n hasImportantModifier = true;\n }\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return createResultObject(modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition);\n };\n if (prefix) {\n const fullPrefix = prefix + MODIFIER_SEPARATOR;\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => className.startsWith(fullPrefix) ? parseClassNameOriginal(className.slice(fullPrefix.length)) : createResultObject(EMPTY_MODIFIERS, false, className, undefined, true);\n }\n if (experimentalParseClassName) {\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => experimentalParseClassName({\n className,\n parseClassName: parseClassNameOriginal\n });\n }\n return parseClassName;\n};\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst createSortModifiers = config => {\n // Pre-compute weights for all known modifiers for O(1) comparison\n const modifierWeights = new Map();\n // Assign weights to sensitive modifiers (highest priority, but preserve order)\n config.orderSensitiveModifiers.forEach((mod, index) => {\n modifierWeights.set(mod, 1000000 + index); // High weights for sensitive mods\n });\n return modifiers => {\n const result = [];\n let currentSegment = [];\n // Process modifiers in one pass\n for (let i = 0; i < modifiers.length; i++) {\n const modifier = modifiers[i];\n // Check if modifier is sensitive (starts with '[' or in orderSensitiveModifiers)\n const isArbitrary = modifier[0] === '[';\n const isOrderSensitive = modifierWeights.has(modifier);\n if (isArbitrary || isOrderSensitive) {\n // Sort and flush current segment alphabetically\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n currentSegment = [];\n }\n result.push(modifier);\n } else {\n // Regular modifier - add to current segment for batch sorting\n currentSegment.push(modifier);\n }\n }\n // Sort and add any remaining segment items\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n }\n return result;\n };\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n sortModifiers: createSortModifiers(config),\n ...createClassGroupUtils(config)\n});\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds,\n sortModifiers\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n isExternal,\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n if (isExternal) {\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n let hasPostfixModifier = !!maybePostfixModifierPosition;\n let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n hasPostfixModifier = false;\n }\n // Fast path: skip sorting for empty or single modifier\n const variantModifier = modifiers.length === 0 ? '' : modifiers.length === 1 ? modifiers[0] : sortModifiers(modifiers).join(':');\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n const classId = modifierId + classGroupId;\n if (classGroupsInConflict.indexOf(classId) > -1) {\n // Tailwind class omitted due to conflict\n continue;\n }\n classGroupsInConflict.push(classId);\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i];\n classGroupsInConflict.push(modifierId + group);\n }\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n }\n return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nconst twJoin = (...classLists) => {\n let index = 0;\n let argument;\n let resolvedValue;\n let string = '';\n while (index < classLists.length) {\n if (argument = classLists[index++]) {\n if (resolvedValue = toValue(argument)) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst toValue = mix => {\n // Fast path for strings\n if (typeof mix === 'string') {\n return mix;\n }\n let resolvedValue;\n let string = '';\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst createTailwindMerge = (createConfigFirst, ...createConfigRest) => {\n let configUtils;\n let cacheGet;\n let cacheSet;\n let functionToCall;\n const initTailwindMerge = classList => {\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n };\n const tailwindMerge = classList => {\n const cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n const result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n };\n functionToCall = initTailwindMerge;\n return (...args) => functionToCall(twJoin(...args));\n};\nconst fallbackThemeArr = [];\nconst fromTheme = key => {\n const themeGetter = theme => theme[key] || fallbackThemeArr;\n themeGetter.isThemeGetter = true;\n return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i;\nconst arbitraryVariableRegex = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i;\nconst fractionRegex = /^\\d+\\/\\d+$/;\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isFraction = value => fractionRegex.test(value);\nconst isNumber = value => !!value && !Number.isNaN(Number(value));\nconst isInteger = value => !!value && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst isAny = () => true;\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst isAnyNonArbitrary = value => !isArbitraryValue(value) && !isArbitraryVariable(value);\nconst isArbitrarySize = value => getIsArbitraryValue(value, isLabelSize, isNever);\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, isLabelLength, isLengthOnly);\nconst isArbitraryNumber = value => getIsArbitraryValue(value, isLabelNumber, isNumber);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, isLabelPosition, isNever);\nconst isArbitraryImage = value => getIsArbitraryValue(value, isLabelImage, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, isLabelShadow, isShadow);\nconst isArbitraryVariable = value => arbitraryVariableRegex.test(value);\nconst isArbitraryVariableLength = value => getIsArbitraryVariable(value, isLabelLength);\nconst isArbitraryVariableFamilyName = value => getIsArbitraryVariable(value, isLabelFamilyName);\nconst isArbitraryVariablePosition = value => getIsArbitraryVariable(value, isLabelPosition);\nconst isArbitraryVariableSize = value => getIsArbitraryVariable(value, isLabelSize);\nconst isArbitraryVariableImage = value => getIsArbitraryVariable(value, isLabelImage);\nconst isArbitraryVariableShadow = value => getIsArbitraryVariable(value, isLabelShadow, true);\n// Helpers\nconst getIsArbitraryValue = (value, testLabel, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) => {\n const result = arbitraryVariableRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return shouldMatchNoLabel;\n }\n return false;\n};\n// Labels\nconst isLabelPosition = label => label === 'position' || label === 'percentage';\nconst isLabelImage = label => label === 'image' || label === 'url';\nconst isLabelSize = label => label === 'length' || label === 'size' || label === 'bg-size';\nconst isLabelLength = label => label === 'length';\nconst isLabelNumber = label => label === 'number';\nconst isLabelFamilyName = label => label === 'family-name';\nconst isLabelShadow = label => label === 'shadow';\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isAnyNonArbitrary,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isArbitraryVariable,\n isArbitraryVariableFamilyName,\n isArbitraryVariableImage,\n isArbitraryVariableLength,\n isArbitraryVariablePosition,\n isArbitraryVariableShadow,\n isArbitraryVariableSize,\n isFraction,\n isInteger,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n /**\n * Theme getters for theme variable namespaces\n * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n */\n /***/\n const themeColor = fromTheme('color');\n const themeFont = fromTheme('font');\n const themeText = fromTheme('text');\n const themeFontWeight = fromTheme('font-weight');\n const themeTracking = fromTheme('tracking');\n const themeLeading = fromTheme('leading');\n const themeBreakpoint = fromTheme('breakpoint');\n const themeContainer = fromTheme('container');\n const themeSpacing = fromTheme('spacing');\n const themeRadius = fromTheme('radius');\n const themeShadow = fromTheme('shadow');\n const themeInsetShadow = fromTheme('inset-shadow');\n const themeTextShadow = fromTheme('text-shadow');\n const themeDropShadow = fromTheme('drop-shadow');\n const themeBlur = fromTheme('blur');\n const themePerspective = fromTheme('perspective');\n const themeAspect = fromTheme('aspect');\n const themeEase = fromTheme('ease');\n const themeAnimate = fromTheme('animate');\n /**\n * Helpers to avoid repeating the same scales\n *\n * We use functions that create a new array every time they're called instead of static arrays.\n * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.\n */\n /***/\n const scaleBreak = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const scalePosition = () => ['center', 'top', 'bottom', 'left', 'right', 'top-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-top', 'top-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-top', 'bottom-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-bottom', 'bottom-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-bottom'];\n const scalePositionWithArbitrary = () => [...scalePosition(), isArbitraryVariable, isArbitraryValue];\n const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const scaleOverscroll = () => ['auto', 'contain', 'none'];\n const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];\n const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()];\n const scaleGridTemplateColsRows = () => [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartAndEnd = () => ['auto', {\n span: ['full', isInteger, isArbitraryVariable, isArbitraryValue]\n }, isInteger, isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartOrEnd = () => [isInteger, 'auto', isArbitraryVariable, isArbitraryValue];\n const scaleGridAutoColsRows = () => ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue];\n const scaleAlignPrimaryAxis = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch', 'baseline', 'center-safe', 'end-safe'];\n const scaleAlignSecondaryAxis = () => ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'];\n const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()];\n const scaleSizing = () => [isFraction, 'auto', 'full', 'dvw', 'dvh', 'lvw', 'lvh', 'svw', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];\n const scaleBgPosition = () => [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition, {\n position: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleBgRepeat = () => ['no-repeat', {\n repeat: ['', 'x', 'y', 'space', 'round']\n }];\n const scaleBgSize = () => ['auto', 'cover', 'contain', isArbitraryVariableSize, isArbitrarySize, {\n size: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleGradientStopPosition = () => [isPercent, isArbitraryVariableLength, isArbitraryLength];\n const scaleRadius = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', 'full', themeRadius, isArbitraryVariable, isArbitraryValue];\n const scaleBorderWidth = () => ['', isNumber, isArbitraryVariableLength, isArbitraryLength];\n const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'];\n const scaleBlendMode = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const scaleMaskImagePosition = () => [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition];\n const scaleBlur = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeBlur, isArbitraryVariable, isArbitraryValue];\n const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()];\n return {\n cacheSize: 500,\n theme: {\n animate: ['spin', 'ping', 'pulse', 'bounce'],\n aspect: ['video'],\n blur: [isTshirtSize],\n breakpoint: [isTshirtSize],\n color: [isAny],\n container: [isTshirtSize],\n 'drop-shadow': [isTshirtSize],\n ease: ['in', 'out', 'in-out'],\n font: [isAnyNonArbitrary],\n 'font-weight': ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black'],\n 'inset-shadow': [isTshirtSize],\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],\n perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],\n radius: [isTshirtSize],\n shadow: [isTshirtSize],\n spacing: ['px', isNumber],\n text: [isTshirtSize],\n 'text-shadow': [isTshirtSize],\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest']\n },\n classGroups: {\n // --------------\n // --- Layout ---\n // --------------\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', isFraction, isArbitraryValue, isArbitraryVariable, themeAspect]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n * @deprecated since Tailwind CSS v4.0.0\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': scaleBreak()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': scaleBreak()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n /**\n * Screen Reader Only\n * @see https://tailwindcss.com/docs/display#screen-reader-only\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: scalePositionWithArbitrary()\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: scaleOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': scaleOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': scaleOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: scaleOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': scaleOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': scaleOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Top / Right / Bottom / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: scaleInset()\n }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': scaleInset()\n }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': scaleInset()\n }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{\n start: scaleInset()\n }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{\n end: scaleInset()\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: scaleInset()\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: scaleInset()\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: scaleInset()\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: scaleInset()\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------------\n // --- Flexbox and Grid ---\n // ------------------------\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: [isFraction, 'full', 'auto', themeContainer, ...scaleUnambiguousSpacing()]\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['nowrap', 'wrap', 'wrap-reverse']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: [isInteger, 'first', 'last', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': scaleGridAutoColsRows()\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': scaleGridAutoColsRows()\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: scaleUnambiguousSpacing()\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': scaleUnambiguousSpacing()\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': scaleUnambiguousSpacing()\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: [...scaleAlignPrimaryAxis(), 'normal']\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': [...scaleAlignSecondaryAxis(), 'normal']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...scaleAlignPrimaryAxis()]\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: [...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', ...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': scaleAlignPrimaryAxis()\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': [...scaleAlignSecondaryAxis(), 'baseline']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: scaleUnambiguousSpacing()\n }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: scaleUnambiguousSpacing()\n }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: scaleUnambiguousSpacing()\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: scaleMargin()\n }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: scaleMargin()\n }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: scaleMargin()\n }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: scaleMargin()\n }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: scaleMargin()\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: scaleMargin()\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: scaleMargin()\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: scaleMargin()\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: scaleMargin()\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x': [{\n 'space-x': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y': [{\n 'space-y': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y-reverse': ['space-y-reverse'],\n // --------------\n // --- Sizing ---\n // --------------\n /**\n * Size\n * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n */\n size: [{\n size: scaleSizing()\n }],\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: [themeContainer, 'screen', ...scaleSizing()]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [themeContainer, 'screen', /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'none', ...scaleSizing()]\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [themeContainer, 'screen', 'none', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'prose', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n {\n screen: [themeBreakpoint]\n }, ...scaleSizing()]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: ['screen', 'lh', ...scaleSizing()]\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': ['screen', 'lh', 'none', ...scaleSizing()]\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': ['screen', 'lh', ...scaleSizing()]\n }],\n // ------------------\n // --- Typography ---\n // ------------------\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: [themeFontWeight, isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Font Stretch\n * @see https://tailwindcss.com/docs/font-stretch\n */\n 'font-stretch': [{\n 'font-stretch': ['ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded', isPercent, isArbitraryValue]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isArbitraryVariableFamilyName, isArbitraryValue, themeFont]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: [themeTracking, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: [/** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n themeLeading, ...scaleUnambiguousSpacing()]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://v3.tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: scaleColor()\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: scaleColor()\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...scaleLineStyle(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: [isNumber, 'from-font', 'auto', isArbitraryVariable, isArbitraryLength]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: scaleColor()\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: scaleUnambiguousSpacing()\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Overflow Wrap\n * @see https://tailwindcss.com/docs/overflow-wrap\n */\n wrap: [{\n wrap: ['break-word', 'anywhere', 'normal']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // -------------------\n // --- Backgrounds ---\n // -------------------\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: scaleBgPosition()\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: scaleBgRepeat()\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: scaleBgSize()\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n linear: [{\n to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isInteger, isArbitraryVariable, isArbitraryValue],\n radial: ['', isArbitraryVariable, isArbitraryValue],\n conic: [isInteger, isArbitraryVariable, isArbitraryValue]\n }, isArbitraryVariableImage, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: scaleColor()\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: scaleColor()\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: scaleColor()\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: scaleColor()\n }],\n // ---------------\n // --- Borders ---\n // ---------------\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: scaleRadius()\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': scaleRadius()\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': scaleRadius()\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': scaleRadius()\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': scaleRadius()\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': scaleRadius()\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': scaleRadius()\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': scaleRadius()\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': scaleRadius()\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': scaleRadius()\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': scaleRadius()\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': scaleRadius()\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': scaleRadius()\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': scaleRadius()\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': scaleRadius()\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: scaleBorderWidth()\n }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': scaleBorderWidth()\n }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': scaleBorderWidth()\n }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': scaleBorderWidth()\n }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': scaleBorderWidth()\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': scaleBorderWidth()\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': scaleBorderWidth()\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': scaleBorderWidth()\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': scaleBorderWidth()\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x': [{\n 'divide-x': scaleBorderWidth()\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y': [{\n 'divide-y': scaleBorderWidth()\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n */\n 'divide-style': [{\n divide: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: scaleColor()\n }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': scaleColor()\n }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': scaleColor()\n }],\n /**\n * Border Color S\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': scaleColor()\n }],\n /**\n * Border Color E\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': scaleColor()\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': scaleColor()\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': scaleColor()\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': scaleColor()\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': scaleColor()\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: scaleColor()\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: [...scaleLineStyle(), 'none', 'hidden']\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: scaleColor()\n }],\n // ---------------\n // --- Effects ---\n // ---------------\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n */\n 'shadow-color': [{\n shadow: scaleColor()\n }],\n /**\n * Inset Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n */\n 'inset-shadow': [{\n 'inset-shadow': ['none', themeInsetShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Inset Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n */\n 'inset-shadow-color': [{\n 'inset-shadow': scaleColor()\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n */\n 'ring-w': [{\n ring: scaleBorderWidth()\n }],\n /**\n * Ring Width Inset\n * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n */\n 'ring-color': [{\n ring: scaleColor()\n }],\n /**\n * Ring Offset Width\n * @see https://v3.tailwindcss.com/docs/ring-offset-width\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-w': [{\n 'ring-offset': [isNumber, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://v3.tailwindcss.com/docs/ring-offset-color\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-color': [{\n 'ring-offset': scaleColor()\n }],\n /**\n * Inset Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n */\n 'inset-ring-w': [{\n 'inset-ring': scaleBorderWidth()\n }],\n /**\n * Inset Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n */\n 'inset-ring-color': [{\n 'inset-ring': scaleColor()\n }],\n /**\n * Text Shadow\n * @see https://tailwindcss.com/docs/text-shadow\n */\n 'text-shadow': [{\n 'text-shadow': ['none', themeTextShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Text Shadow Color\n * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n */\n 'text-shadow-color': [{\n 'text-shadow': scaleColor()\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': scaleBlendMode()\n }],\n /**\n * Mask Clip\n * @see https://tailwindcss.com/docs/mask-clip\n */\n 'mask-clip': [{\n 'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }, 'mask-no-clip'],\n /**\n * Mask Composite\n * @see https://tailwindcss.com/docs/mask-composite\n */\n 'mask-composite': [{\n mask: ['add', 'subtract', 'intersect', 'exclude']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image-linear-pos': [{\n 'mask-linear': [isNumber]\n }],\n 'mask-image-linear-from-pos': [{\n 'mask-linear-from': scaleMaskImagePosition()\n }],\n 'mask-image-linear-to-pos': [{\n 'mask-linear-to': scaleMaskImagePosition()\n }],\n 'mask-image-linear-from-color': [{\n 'mask-linear-from': scaleColor()\n }],\n 'mask-image-linear-to-color': [{\n 'mask-linear-to': scaleColor()\n }],\n 'mask-image-t-from-pos': [{\n 'mask-t-from': scaleMaskImagePosition()\n }],\n 'mask-image-t-to-pos': [{\n 'mask-t-to': scaleMaskImagePosition()\n }],\n 'mask-image-t-from-color': [{\n 'mask-t-from': scaleColor()\n }],\n 'mask-image-t-to-color': [{\n 'mask-t-to': scaleColor()\n }],\n 'mask-image-r-from-pos': [{\n 'mask-r-from': scaleMaskImagePosition()\n }],\n 'mask-image-r-to-pos': [{\n 'mask-r-to': scaleMaskImagePosition()\n }],\n 'mask-image-r-from-color': [{\n 'mask-r-from': scaleColor()\n }],\n 'mask-image-r-to-color': [{\n 'mask-r-to': scaleColor()\n }],\n 'mask-image-b-from-pos': [{\n 'mask-b-from': scaleMaskImagePosition()\n }],\n 'mask-image-b-to-pos': [{\n 'mask-b-to': scaleMaskImagePosition()\n }],\n 'mask-image-b-from-color': [{\n 'mask-b-from': scaleColor()\n }],\n 'mask-image-b-to-color': [{\n 'mask-b-to': scaleColor()\n }],\n 'mask-image-l-from-pos': [{\n 'mask-l-from': scaleMaskImagePosition()\n }],\n 'mask-image-l-to-pos': [{\n 'mask-l-to': scaleMaskImagePosition()\n }],\n 'mask-image-l-from-color': [{\n 'mask-l-from': scaleColor()\n }],\n 'mask-image-l-to-color': [{\n 'mask-l-to': scaleColor()\n }],\n 'mask-image-x-from-pos': [{\n 'mask-x-from': scaleMaskImagePosition()\n }],\n 'mask-image-x-to-pos': [{\n 'mask-x-to': scaleMaskImagePosition()\n }],\n 'mask-image-x-from-color': [{\n 'mask-x-from': scaleColor()\n }],\n 'mask-image-x-to-color': [{\n 'mask-x-to': scaleColor()\n }],\n 'mask-image-y-from-pos': [{\n 'mask-y-from': scaleMaskImagePosition()\n }],\n 'mask-image-y-to-pos': [{\n 'mask-y-to': scaleMaskImagePosition()\n }],\n 'mask-image-y-from-color': [{\n 'mask-y-from': scaleColor()\n }],\n 'mask-image-y-to-color': [{\n 'mask-y-to': scaleColor()\n }],\n 'mask-image-radial': [{\n 'mask-radial': [isArbitraryVariable, isArbitraryValue]\n }],\n 'mask-image-radial-from-pos': [{\n 'mask-radial-from': scaleMaskImagePosition()\n }],\n 'mask-image-radial-to-pos': [{\n 'mask-radial-to': scaleMaskImagePosition()\n }],\n 'mask-image-radial-from-color': [{\n 'mask-radial-from': scaleColor()\n }],\n 'mask-image-radial-to-color': [{\n 'mask-radial-to': scaleColor()\n }],\n 'mask-image-radial-shape': [{\n 'mask-radial': ['circle', 'ellipse']\n }],\n 'mask-image-radial-size': [{\n 'mask-radial': [{\n closest: ['side', 'corner'],\n farthest: ['side', 'corner']\n }]\n }],\n 'mask-image-radial-pos': [{\n 'mask-radial-at': scalePosition()\n }],\n 'mask-image-conic-pos': [{\n 'mask-conic': [isNumber]\n }],\n 'mask-image-conic-from-pos': [{\n 'mask-conic-from': scaleMaskImagePosition()\n }],\n 'mask-image-conic-to-pos': [{\n 'mask-conic-to': scaleMaskImagePosition()\n }],\n 'mask-image-conic-from-color': [{\n 'mask-conic-from': scaleColor()\n }],\n 'mask-image-conic-to-color': [{\n 'mask-conic-to': scaleColor()\n }],\n /**\n * Mask Mode\n * @see https://tailwindcss.com/docs/mask-mode\n */\n 'mask-mode': [{\n mask: ['alpha', 'luminance', 'match']\n }],\n /**\n * Mask Origin\n * @see https://tailwindcss.com/docs/mask-origin\n */\n 'mask-origin': [{\n 'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }],\n /**\n * Mask Position\n * @see https://tailwindcss.com/docs/mask-position\n */\n 'mask-position': [{\n mask: scaleBgPosition()\n }],\n /**\n * Mask Repeat\n * @see https://tailwindcss.com/docs/mask-repeat\n */\n 'mask-repeat': [{\n mask: scaleBgRepeat()\n }],\n /**\n * Mask Size\n * @see https://tailwindcss.com/docs/mask-size\n */\n 'mask-size': [{\n mask: scaleBgSize()\n }],\n /**\n * Mask Type\n * @see https://tailwindcss.com/docs/mask-type\n */\n 'mask-type': [{\n 'mask-type': ['alpha', 'luminance']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image': [{\n mask: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // ---------------\n // --- Filters ---\n // ---------------\n /**\n * Filter\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: scaleBlur()\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeDropShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Drop Shadow Color\n * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n */\n 'drop-shadow-color': [{\n 'drop-shadow': scaleColor()\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Filter\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': scaleBlur()\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n // --------------\n // --- Tables ---\n // --------------\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': scaleUnambiguousSpacing()\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // ---------------------------------\n // --- Transitions and Animation ---\n // ---------------------------------\n /**\n * Transition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['', 'all', 'colors', 'opacity', 'shadow', 'transform', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Behavior\n * @see https://tailwindcss.com/docs/transition-behavior\n */\n 'transition-behavior': [{\n transition: ['normal', 'discrete']\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------\n // --- Transforms ---\n // ------------------\n /**\n * Backface Visibility\n * @see https://tailwindcss.com/docs/backface-visibility\n */\n backface: [{\n backface: ['hidden', 'visible']\n }],\n /**\n * Perspective\n * @see https://tailwindcss.com/docs/perspective\n */\n perspective: [{\n perspective: [themePerspective, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Perspective Origin\n * @see https://tailwindcss.com/docs/perspective-origin\n */\n 'perspective-origin': [{\n 'perspective-origin': scalePositionWithArbitrary()\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: scaleRotate()\n }],\n /**\n * Rotate X\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-x': [{\n 'rotate-x': scaleRotate()\n }],\n /**\n * Rotate Y\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-y': [{\n 'rotate-y': scaleRotate()\n }],\n /**\n * Rotate Z\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-z': [{\n 'rotate-z': scaleRotate()\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: scaleScale()\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': scaleScale()\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': scaleScale()\n }],\n /**\n * Scale Z\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-z': [{\n 'scale-z': scaleScale()\n }],\n /**\n * Scale 3D\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-3d': ['scale-3d'],\n /**\n * Skew\n * @see https://tailwindcss.com/docs/skew\n */\n skew: [{\n skew: scaleSkew()\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': scaleSkew()\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': scaleSkew()\n }],\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu']\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: scalePositionWithArbitrary()\n }],\n /**\n * Transform Style\n * @see https://tailwindcss.com/docs/transform-style\n */\n 'transform-style': [{\n transform: ['3d', 'flat']\n }],\n /**\n * Translate\n * @see https://tailwindcss.com/docs/translate\n */\n translate: [{\n translate: scaleTranslate()\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': scaleTranslate()\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': scaleTranslate()\n }],\n /**\n * Translate Z\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-z': [{\n 'translate-z': scaleTranslate()\n }],\n /**\n * Translate None\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-none': ['translate-none'],\n // ---------------------\n // --- Interactivity ---\n // ---------------------\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: scaleColor()\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: scaleColor()\n }],\n /**\n * Color Scheme\n * @see https://tailwindcss.com/docs/color-scheme\n */\n 'color-scheme': [{\n scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Field Sizing\n * @see https://tailwindcss.com/docs/field-sizing\n */\n 'field-sizing': [{\n 'field-sizing': ['fixed', 'content']\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['auto', 'none']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', '', 'y', 'x']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryVariable, isArbitraryValue]\n }],\n // -----------\n // --- SVG ---\n // -----------\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: ['none', ...scaleColor()]\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isNumber, isArbitraryVariableLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: ['none', ...scaleColor()]\n }],\n // ---------------------\n // --- Accessibility ---\n // ---------------------\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': ['border-w-x', 'border-w-y', 'border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': ['border-color-x', 'border-color-y', 'border-color-s', 'border-color-e', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n translate: ['translate-x', 'translate-y', 'translate-none'],\n 'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch']\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading']\n },\n orderSensitiveModifiers: ['*', '**', 'after', 'backdrop', 'before', 'details-content', 'file', 'first-letter', 'first-line', 'marker', 'placeholder', 'selection']\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n overrideConfigProperties(baseConfig.theme, override.theme);\n overrideConfigProperties(baseConfig.classGroups, override.classGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroups, override.conflictingClassGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroupModifiers, override.conflictingClassGroupModifiers);\n overrideProperty(baseConfig, 'orderSensitiveModifiers', override.orderSensitiveModifiers);\n mergeConfigProperties(baseConfig.theme, extend.theme);\n mergeConfigProperties(baseConfig.classGroups, extend.classGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroups, extend.conflictingClassGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroupModifiers, extend.conflictingClassGroupModifiers);\n mergeArrayProperties(baseConfig, extend, 'orderSensitiveModifiers');\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n mergeArrayProperties(baseObject, mergeObject, key);\n }\n }\n};\nconst mergeArrayProperties = (baseObject, mergeObject, key) => {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = baseObject[key] ? baseObject[key].concat(mergeValue) : mergeValue;\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import * as React from \"react\"\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\"\nimport { ChevronDownIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Accordion({\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Root>) {\n return <AccordionPrimitive.Root data-slot=\"accordion\" {...props} />\n}\n\nfunction AccordionItem({\n className,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Item>) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={cn(\"border-b last:border-b-0\", className)}\n {...props}\n />\n )\n}\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Trigger>) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n \"focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronDownIcon className=\"text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n )\n}\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Content>) {\n return (\n <AccordionPrimitive.Content\n data-slot=\"accordion-content\"\n className=\"data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm\"\n {...props}\n >\n <div className={cn(\"pt-0 pb-4\", className)}>{children}</div>\n </AccordionPrimitive.Content>\n )\n}\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n","/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>(props)=>{\n var _config_compoundVariants;\n if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n const { variants, defaultVariants } = config;\n const getVariantClassNames = Object.keys(variants).map((variant)=>{\n const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n return variants[variant][variantKey];\n });\n const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n let [key, value] = param;\n if (value === undefined) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\n let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n return Object.entries(compoundVariantOptions).every((param)=>{\n let [key, value] = param;\n return Array.isArray(value) ? value.includes({\n ...defaultVariants,\n ...propsWithoutUndefined\n }[key]) : ({\n ...defaultVariants,\n ...propsWithoutUndefined\n })[key] === value;\n }) ? [\n ...acc,\n cvClass,\n cvClassName\n ] : acc;\n }, []);\n return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n };\n\n","import { cva } from \"class-variance-authority\"\n\nexport const buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n xs: \"h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n \"icon-xs\": \"size-6 rounded-md [&_svg:not([class*='size-'])]:size-3\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\nimport { buttonVariants } from \"./button.variants\"\n\nfunction Button({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button }\n","import * as React from \"react\"\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\n\nfunction AlertDialog({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />\n}\n\nfunction AlertDialogTrigger({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return (\n <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n )\n}\n\nfunction AlertDialogPortal({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n return (\n <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\n )\n}\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n return (\n <AlertDialogPrimitive.Overlay\n data-slot=\"alert-dialog-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-overlay\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogContent({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Content> & {\n size?: \"default\" | \"sm\"\n}) {\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n data-slot=\"alert-dialog-content\"\n data-size={size}\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 group/alert-dialog-content fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-lg\",\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n )\n}\n\nfunction AlertDialogHeader({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\n \"grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogFooter({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\n \"text-lg font-semibold sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogMedia({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-media\"\n className={cn(\n \"bg-muted mb-2 inline-flex size-16 items-center justify-center rounded-md sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogAction({\n className,\n variant = \"default\",\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Action> &\n Pick<React.ComponentProps<typeof Button>, \"variant\" | \"size\">) {\n return (\n <Button variant={variant} size={size} asChild>\n <AlertDialogPrimitive.Action\n data-slot=\"alert-dialog-action\"\n className={cn(className)}\n {...props}\n />\n </Button>\n )\n}\n\nfunction AlertDialogCancel({\n className,\n variant = \"outline\",\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel> &\n Pick<React.ComponentProps<typeof Button>, \"variant\" | \"size\">) {\n return (\n <Button variant={variant} size={size} asChild>\n <AlertDialogPrimitive.Cancel\n data-slot=\"alert-dialog-cancel\"\n className={cn(className)}\n {...props}\n />\n </Button>\n )\n}\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n}\n","import * as React from \"react\"\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Avatar({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Root> & {\n size?: \"default\" | \"sm\" | \"lg\"\n}) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n data-size={size}\n className={cn(\n \"group/avatar relative flex size-8 shrink-0 overflow-hidden rounded-full select-none data-[size=lg]:size-10 data-[size=sm]:size-6\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarImage({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn(\"aspect-square size-full\", className)}\n {...props}\n />\n )\n}\n\nfunction AvatarFallback({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn(\n \"bg-muted text-muted-foreground flex size-full items-center justify-center rounded-full text-sm group-data-[size=sm]/avatar:text-xs\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarBadge({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"avatar-badge\"\n className={cn(\n \"bg-primary text-primary-foreground ring-background absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full ring-2 select-none\",\n \"group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden\",\n \"group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2\",\n \"group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar-group\"\n className={cn(\n \"*:data-[slot=avatar]:ring-background group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarGroupCount({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar-group-count\"\n className={cn(\n \"bg-muted text-muted-foreground ring-background relative flex size-8 shrink-0 items-center justify-center rounded-full text-sm ring-2 group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Avatar,\n AvatarImage,\n AvatarFallback,\n AvatarBadge,\n AvatarGroup,\n AvatarGroupCount,\n}\n","import { cva } from \"class-variance-authority\"\n\nexport const badgeVariants = cva(\n \"inline-flex items-center justify-center rounded-full border border-transparent px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n secondary:\n \"bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n destructive:\n \"bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n ghost: \"[a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 [a&]:hover:underline\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\nimport { badgeVariants } from \"./badge.variants\"\n\nfunction Badge({\n className,\n variant = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> &\n VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"span\"\n\n return (\n <Comp\n data-slot=\"badge\"\n data-variant={variant}\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nexport { Badge }\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { ChevronRight, MoreHorizontal } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Breadcrumb({ ...props }: React.ComponentProps<\"nav\">) {\n return <nav aria-label=\"breadcrumb\" data-slot=\"breadcrumb\" {...props} />\n}\n\nfunction BreadcrumbList({ className, ...props }: React.ComponentProps<\"ol\">) {\n return (\n <ol\n data-slot=\"breadcrumb-list\"\n className={cn(\n \"text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"breadcrumb-item\"\n className={cn(\"inline-flex items-center gap-1.5\", className)}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbLink({\n asChild,\n className,\n ...props\n}: React.ComponentProps<\"a\"> & {\n asChild?: boolean\n}) {\n const Comp = asChild ? Slot : \"a\"\n\n return (\n <Comp\n data-slot=\"breadcrumb-link\"\n className={cn(\"hover:text-foreground transition-colors\", className)}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbPage({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"breadcrumb-page\"\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn(\"text-foreground font-normal\", className)}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"breadcrumb-separator\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"[&>svg]:size-3.5\", className)}\n {...props}\n >\n {children ?? <ChevronRight />}\n </li>\n )\n}\n\nfunction BreadcrumbEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"breadcrumb-ellipsis\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"flex size-9 items-center justify-center\", className)}\n {...props}\n >\n <MoreHorizontal className=\"size-4\" />\n <span className=\"sr-only\">More</span>\n </span>\n )\n}\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n}\n","/**\n * Time zone name format.\n */\n\n/**\n * The function returns the time zone name for the given date in the specified\n * time zone.\n *\n * It uses the `Intl.DateTimeFormat` API and by default outputs the time zone\n * name in a long format, e.g. \"Pacific Standard Time\" or\n * \"Singapore Standard Time\".\n *\n * It is possible to specify the format as the third argument using one of the following options\n *\n * - \"short\": e.g. \"EDT\" or \"GMT+8\".\n * - \"long\": e.g. \"Eastern Daylight Time\".\n * - \"shortGeneric\": e.g. \"ET\" or \"Singapore Time\".\n * - \"longGeneric\": e.g. \"Eastern Time\" or \"Singapore Standard Time\".\n *\n * These options correspond to TR35 tokens `z..zzz`, `zzzz`, `v`, and `vvvv` respectively: https://www.unicode.org/reports/tr35/tr35-dates.html#dfst-zone\n *\n * @param timeZone - Time zone name (IANA or UTC offset)\n * @param date - Date object to get the time zone name for\n * @param format - Optional format of the time zone name. Defaults to \"long\". Can be \"short\", \"long\", \"shortGeneric\", or \"longGeneric\".\n *\n * @returns Time zone name (e.g. \"Singapore Standard Time\")\n */\nexport function tzName(timeZone, date, format = \"long\") {\n return new Intl.DateTimeFormat(\"en-US\", {\n // Enforces engine to render the time. Without the option JavaScriptCore omits it.\n hour: \"numeric\",\n timeZone: timeZone,\n timeZoneName: format\n }).format(date).split(/\\s/g) // Format.JS uses non-breaking spaces\n .slice(2) // Skip the hour and AM/PM parts\n .join(\" \");\n}","const offsetFormatCache = {};\nconst offsetCache = {};\n\n/**\n * The function extracts UTC offset in minutes from the given date in specified\n * time zone.\n *\n * Unlike `Date.prototype.getTimezoneOffset`, this function returns the value\n * mirrored to the sign of the offset in the time zone. For Asia/Singapore\n * (UTC+8), `tzOffset` returns 480, while `getTimezoneOffset` returns -480.\n *\n * @param timeZone - Time zone name (IANA or UTC offset)\n * @param date - Date to check the offset for\n *\n * @returns UTC offset in minutes\n */\nexport function tzOffset(timeZone, date) {\n try {\n const format = offsetFormatCache[timeZone] ||= new Intl.DateTimeFormat(\"en-US\", {\n timeZone,\n timeZoneName: \"longOffset\"\n }).format;\n const offsetStr = format(date).split(\"GMT\")[1];\n if (offsetStr in offsetCache) return offsetCache[offsetStr];\n return calcOffset(offsetStr, offsetStr.split(\":\"));\n } catch {\n // Fallback to manual parsing if the runtime doesn't support ±HH:MM/±HHMM/±HH\n // See: https://github.com/nodejs/node/issues/53419\n if (timeZone in offsetCache) return offsetCache[timeZone];\n const captures = timeZone?.match(offsetRe);\n if (captures) return calcOffset(timeZone, captures.slice(1));\n return NaN;\n }\n}\nconst offsetRe = /([+-]\\d\\d):?(\\d\\d)?/;\nfunction calcOffset(cacheStr, values) {\n const hours = +(values[0] || 0);\n const minutes = +(values[1] || 0);\n // Convert seconds to minutes by dividing by 60 to keep the function return in minutes.\n const seconds = +(values[2] || 0) / 60;\n return offsetCache[cacheStr] = hours * 60 + minutes > 0 ? hours * 60 + minutes + seconds : hours * 60 - minutes - seconds;\n}","import { tzOffset } from \"../tzOffset/index.js\";\nexport class TZDateMini extends Date {\n //#region static\n\n constructor(...args) {\n super();\n if (args.length > 1 && typeof args[args.length - 1] === \"string\") {\n this.timeZone = args.pop();\n }\n this.internal = new Date();\n if (isNaN(tzOffset(this.timeZone, this))) {\n this.setTime(NaN);\n } else {\n if (!args.length) {\n this.setTime(Date.now());\n } else if (typeof args[0] === \"number\" && (args.length === 1 || args.length === 2 && typeof args[1] !== \"number\")) {\n this.setTime(args[0]);\n } else if (typeof args[0] === \"string\") {\n this.setTime(+new Date(args[0]));\n } else if (args[0] instanceof Date) {\n this.setTime(+args[0]);\n } else {\n this.setTime(+new Date(...args));\n adjustToSystemTZ(this, NaN);\n syncToInternal(this);\n }\n }\n }\n static tz(tz, ...args) {\n return args.length ? new TZDateMini(...args, tz) : new TZDateMini(Date.now(), tz);\n }\n\n //#endregion\n\n //#region time zone\n\n withTimeZone(timeZone) {\n return new TZDateMini(+this, timeZone);\n }\n getTimezoneOffset() {\n const offset = -tzOffset(this.timeZone, this);\n // Remove the seconds offset\n // use Math.floor for negative GMT timezones and Math.ceil for positive GMT timezones.\n return offset > 0 ? Math.floor(offset) : Math.ceil(offset);\n }\n\n //#endregion\n\n //#region time\n\n setTime(time) {\n Date.prototype.setTime.apply(this, arguments);\n syncToInternal(this);\n return +this;\n }\n\n //#endregion\n\n //#region date-fns integration\n\n [Symbol.for(\"constructDateFrom\")](date) {\n return new TZDateMini(+new Date(date), this.timeZone);\n }\n\n //#endregion\n}\n\n// Assign getters and setters\nconst re = /^(get|set)(?!UTC)/;\nObject.getOwnPropertyNames(Date.prototype).forEach(method => {\n if (!re.test(method)) return;\n const utcMethod = method.replace(re, \"$1UTC\");\n // Filter out methods without UTC counterparts\n if (!TZDateMini.prototype[utcMethod]) return;\n if (method.startsWith(\"get\")) {\n // Delegate to internal date's UTC method\n TZDateMini.prototype[method] = function () {\n return this.internal[utcMethod]();\n };\n } else {\n // Assign regular setter\n TZDateMini.prototype[method] = function () {\n Date.prototype[utcMethod].apply(this.internal, arguments);\n syncFromInternal(this);\n return +this;\n };\n\n // Assign UTC setter\n TZDateMini.prototype[utcMethod] = function () {\n Date.prototype[utcMethod].apply(this, arguments);\n syncToInternal(this);\n return +this;\n };\n }\n});\n\n/**\n * Function syncs time to internal date, applying the time zone offset.\n *\n * @param {Date} date - Date to sync\n */\nfunction syncToInternal(date) {\n date.internal.setTime(+date);\n date.internal.setUTCSeconds(date.internal.getUTCSeconds() - Math.round(-tzOffset(date.timeZone, date) * 60));\n}\n\n/**\n * Function syncs the internal date UTC values to the date. It allows to get\n * accurate timestamp value.\n *\n * @param {Date} date - The date to sync\n */\nfunction syncFromInternal(date) {\n // First we transpose the internal values\n Date.prototype.setFullYear.call(date, date.internal.getUTCFullYear(), date.internal.getUTCMonth(), date.internal.getUTCDate());\n Date.prototype.setHours.call(date, date.internal.getUTCHours(), date.internal.getUTCMinutes(), date.internal.getUTCSeconds(), date.internal.getUTCMilliseconds());\n\n // Now we have to adjust the date to the system time zone\n adjustToSystemTZ(date);\n}\n\n/**\n * Function adjusts the date to the system time zone. It uses the time zone\n * differences to calculate the offset and adjust the date.\n *\n * @param {Date} date - Date to adjust\n */\nfunction adjustToSystemTZ(date) {\n // Save the time zone offset before all the adjustments\n const baseOffset = tzOffset(date.timeZone, date);\n // Remove the seconds offset\n // use Math.floor for negative GMT timezones and Math.ceil for positive GMT timezones.\n const offset = baseOffset > 0 ? Math.floor(baseOffset) : Math.ceil(baseOffset);\n //#region System DST adjustment\n\n // The biggest problem with using the system time zone is that when we create\n // a date from internal values stored in UTC, the system time zone might end\n // up on the DST hour:\n //\n // $ TZ=America/New_York node\n // > new Date(2020, 2, 8, 1).toString()\n // 'Sun Mar 08 2020 01:00:00 GMT-0500 (Eastern Standard Time)'\n // > new Date(2020, 2, 8, 2).toString()\n // 'Sun Mar 08 2020 03:00:00 GMT-0400 (Eastern Daylight Time)'\n // > new Date(2020, 2, 8, 3).toString()\n // 'Sun Mar 08 2020 03:00:00 GMT-0400 (Eastern Daylight Time)'\n // > new Date(2020, 2, 8, 4).toString()\n // 'Sun Mar 08 2020 04:00:00 GMT-0400 (Eastern Daylight Time)'\n //\n // Here we get the same hour for both 2 and 3, because the system time zone\n // has DST beginning at 8 March 2020, 2 a.m. and jumps to 3 a.m. So we have\n // to adjust the internal date to reflect that.\n //\n // However we want to adjust only if that's the DST hour the change happenes,\n // not the hour where DST moves to.\n\n // We calculate the previous hour to see if the time zone offset has changed\n // and we have landed on the DST hour.\n const prevHour = new Date(+date);\n // We use UTC methods here as we don't want to land on the same hour again\n // in case of DST.\n prevHour.setUTCHours(prevHour.getUTCHours() - 1);\n\n // Calculate if we are on the system DST hour.\n const systemOffset = -new Date(+date).getTimezoneOffset();\n const prevHourSystemOffset = -new Date(+prevHour).getTimezoneOffset();\n const systemDSTChange = systemOffset - prevHourSystemOffset;\n // Detect the DST shift. System DST change will occur both on\n const dstShift = Date.prototype.getHours.apply(date) !== date.internal.getUTCHours();\n\n // Move the internal date when we are on the system DST hour.\n if (systemDSTChange && dstShift) date.internal.setUTCMinutes(date.internal.getUTCMinutes() + systemDSTChange);\n\n //#endregion\n\n //#region System diff adjustment\n\n // Now we need to adjust the date, since we just applied internal values.\n // We need to calculate the difference between the system and date time zones\n // and apply it to the date.\n\n const offsetDiff = systemOffset - offset;\n if (offsetDiff) Date.prototype.setUTCMinutes.call(date, Date.prototype.getUTCMinutes.call(date) + offsetDiff);\n\n //#endregion\n\n //#region Seconds System diff adjustment\n\n const systemDate = new Date(+date);\n // Set the UTC seconds to 0 to isolate the timezone offset in seconds.\n systemDate.setUTCSeconds(0);\n // For negative systemOffset, invert the seconds.\n const systemSecondsOffset = systemOffset > 0 ? systemDate.getSeconds() : (systemDate.getSeconds() - 60) % 60;\n\n // Calculate the seconds offset based on the timezone offset.\n const secondsOffset = Math.round(-(tzOffset(date.timeZone, date) * 60)) % 60;\n if (secondsOffset || systemSecondsOffset) {\n date.internal.setUTCSeconds(date.internal.getUTCSeconds() + secondsOffset);\n Date.prototype.setUTCSeconds.call(date, Date.prototype.getUTCSeconds.call(date) + secondsOffset + systemSecondsOffset);\n }\n\n //#endregion\n\n //#region Post-adjustment DST fix\n\n const postBaseOffset = tzOffset(date.timeZone, date);\n // Remove the seconds offset\n // use Math.floor for negative GMT timezones and Math.ceil for positive GMT timezones.\n const postOffset = postBaseOffset > 0 ? Math.floor(postBaseOffset) : Math.ceil(postBaseOffset);\n const postSystemOffset = -new Date(+date).getTimezoneOffset();\n const postOffsetDiff = postSystemOffset - postOffset;\n const offsetChanged = postOffset !== offset;\n const postDiff = postOffsetDiff - offsetDiff;\n if (offsetChanged && postDiff) {\n Date.prototype.setUTCMinutes.call(date, Date.prototype.getUTCMinutes.call(date) + postDiff);\n\n // Now we need to check if got offset change during the post-adjustment.\n // If so, we also need both dates to reflect that.\n\n const newBaseOffset = tzOffset(date.timeZone, date);\n // Remove the seconds offset\n // use Math.floor for negative GMT timezones and Math.ceil for positive GMT timezones.\n const newOffset = newBaseOffset > 0 ? Math.floor(newBaseOffset) : Math.ceil(newBaseOffset);\n const offsetChange = postOffset - newOffset;\n if (offsetChange) {\n date.internal.setUTCMinutes(date.internal.getUTCMinutes() + offsetChange);\n Date.prototype.setUTCMinutes.call(date, Date.prototype.getUTCMinutes.call(date) + offsetChange);\n }\n }\n\n //#endregion\n}","import { tzName } from \"../tzName/index.js\";\nimport { TZDateMini } from \"./mini.js\";\nexport class TZDate extends TZDateMini {\n //#region static\n\n static tz(tz, ...args) {\n return args.length ? new TZDate(...args, tz) : new TZDate(Date.now(), tz);\n }\n\n //#endregion\n\n //#region representation\n\n toISOString() {\n const [sign, hours, minutes] = this.tzComponents();\n const tz = `${sign}${hours}:${minutes}`;\n return this.internal.toISOString().slice(0, -1) + tz;\n }\n toString() {\n // \"Tue Aug 13 2024 07:50:19 GMT+0800 (Singapore Standard Time)\";\n return `${this.toDateString()} ${this.toTimeString()}`;\n }\n toDateString() {\n // toUTCString returns RFC 7231 (\"Mon, 12 Aug 2024 23:36:08 GMT\")\n const [day, date, month, year] = this.internal.toUTCString().split(\" \");\n // \"Tue Aug 13 2024\"\n return `${day?.slice(0, -1) /* Remove \",\" */} ${month} ${date} ${year}`;\n }\n toTimeString() {\n // toUTCString returns RFC 7231 (\"Mon, 12 Aug 2024 23:36:08 GMT\")\n const time = this.internal.toUTCString().split(\" \")[4];\n const [sign, hours, minutes] = this.tzComponents();\n // \"07:42:23 GMT+0800 (Singapore Standard Time)\"\n return `${time} GMT${sign}${hours}${minutes} (${tzName(this.timeZone, this)})`;\n }\n toLocaleString(locales, options) {\n return Date.prototype.toLocaleString.call(this, locales, {\n ...options,\n timeZone: options?.timeZone || this.timeZone\n });\n }\n toLocaleDateString(locales, options) {\n return Date.prototype.toLocaleDateString.call(this, locales, {\n ...options,\n timeZone: options?.timeZone || this.timeZone\n });\n }\n toLocaleTimeString(locales, options) {\n return Date.prototype.toLocaleTimeString.call(this, locales, {\n ...options,\n timeZone: options?.timeZone || this.timeZone\n });\n }\n\n //#endregion\n\n //#region private\n\n tzComponents() {\n const offset = this.getTimezoneOffset();\n const sign = offset > 0 ? \"-\" : \"+\";\n const hours = String(Math.floor(Math.abs(offset) / 60)).padStart(2, \"0\");\n const minutes = String(Math.abs(offset) % 60).padStart(2, \"0\");\n return [sign, hours, minutes];\n }\n\n //#endregion\n\n withTimeZone(timeZone) {\n return new TZDate(+this, timeZone);\n }\n\n //#region date-fns integration\n\n [Symbol.for(\"constructDateFrom\")](date) {\n return new TZDate(+new Date(date), this.timeZone);\n }\n\n //#endregion\n}","const FIVE_WEEKS = 5;\nconst FOUR_WEEKS = 4;\n/**\n * Returns the number of weeks to display in the broadcast calendar for a given\n * month.\n *\n * The broadcast calendar may have either 4 or 5 weeks in a month, depending on\n * the start and end dates of the broadcast weeks.\n *\n * @since 9.4.0\n * @param month The month for which to calculate the number of weeks.\n * @param dateLib The date library to use for date manipulation.\n * @returns The number of weeks in the broadcast calendar (4 or 5).\n */\nexport function getBroadcastWeeksInMonth(month, dateLib) {\n // Get the first day of the month\n const firstDayOfMonth = dateLib.startOfMonth(month);\n // Get the day of the week for the first day of the month (1-7, where 1 is Monday)\n const firstDayOfWeek = firstDayOfMonth.getDay() > 0 ? firstDayOfMonth.getDay() : 7;\n const broadcastStartDate = dateLib.addDays(month, -firstDayOfWeek + 1);\n const lastDateOfLastWeek = dateLib.addDays(broadcastStartDate, FIVE_WEEKS * 7 - 1);\n const numberOfWeeks = dateLib.getMonth(month) === dateLib.getMonth(lastDateOfLastWeek)\n ? FIVE_WEEKS\n : FOUR_WEEKS;\n return numberOfWeeks;\n}\n","/**\n * Returns the start date of the week in the broadcast calendar.\n *\n * The broadcast week starts on Monday. If the first day of the month is not a\n * Monday, this function calculates the previous Monday as the start of the\n * broadcast week.\n *\n * @since 9.4.0\n * @param date The date for which to calculate the start of the broadcast week.\n * @param dateLib The date library to use for date manipulation.\n * @returns The start date of the broadcast week.\n */\nexport function startOfBroadcastWeek(date, dateLib) {\n const firstOfMonth = dateLib.startOfMonth(date);\n const dayOfWeek = firstOfMonth.getDay();\n if (dayOfWeek === 1) {\n return firstOfMonth;\n }\n else if (dayOfWeek === 0) {\n return dateLib.addDays(firstOfMonth, -1 * 6);\n }\n else {\n return dateLib.addDays(firstOfMonth, -1 * (dayOfWeek - 1));\n }\n}\n","import { getBroadcastWeeksInMonth } from \"./getBroadcastWeeksInMonth.js\";\nimport { startOfBroadcastWeek } from \"./startOfBroadcastWeek.js\";\n/**\n * Returns the end date of the week in the broadcast calendar.\n *\n * The broadcast week ends on the last day of the last broadcast week for the\n * given date.\n *\n * @since 9.4.0\n * @param date The date for which to calculate the end of the broadcast week.\n * @param dateLib The date library to use for date manipulation.\n * @returns The end date of the broadcast week.\n */\nexport function endOfBroadcastWeek(date, dateLib) {\n const startDate = startOfBroadcastWeek(date, dateLib);\n const numberOfWeeks = getBroadcastWeeksInMonth(date, dateLib);\n const endDate = dateLib.addDays(startDate, numberOfWeeks * 7 - 1);\n return endDate;\n}\n","import { format } from \"date-fns\";\nimport { enUS as dateFnsEnUS } from \"date-fns/locale\";\n/** English (United States) locale extended with DayPicker-specific translations. */\nexport const enUS = {\n ...dateFnsEnUS,\n labels: {\n labelDayButton: (date, modifiers, options, dateLib) => {\n let formatDate;\n if (dateLib && typeof dateLib.format === \"function\") {\n formatDate = dateLib.format.bind(dateLib);\n }\n else {\n formatDate = (d, pattern) => format(d, pattern, { locale: dateFnsEnUS, ...options });\n }\n let label = formatDate(date, \"PPPP\");\n if (modifiers.today)\n label = `Today, ${label}`;\n if (modifiers.selected)\n label = `${label}, selected`;\n return label;\n },\n labelMonthDropdown: \"Choose the Month\",\n labelNext: \"Go to the Next Month\",\n labelPrevious: \"Go to the Previous Month\",\n labelWeekNumber: (weekNumber) => `Week ${weekNumber}`,\n labelYearDropdown: \"Choose the Year\",\n labelGrid: (date, options, dateLib) => {\n let formatDate;\n if (dateLib && typeof dateLib.format === \"function\") {\n formatDate = dateLib.format.bind(dateLib);\n }\n else {\n formatDate = (d, pattern) => format(d, pattern, { locale: dateFnsEnUS, ...options });\n }\n return formatDate(date, \"LLLL yyyy\");\n },\n labelGridcell: (date, modifiers, options, dateLib) => {\n let formatDate;\n if (dateLib && typeof dateLib.format === \"function\") {\n formatDate = dateLib.format.bind(dateLib);\n }\n else {\n formatDate = (d, pattern) => format(d, pattern, { locale: dateFnsEnUS, ...options });\n }\n let label = formatDate(date, \"PPPP\");\n if (modifiers?.today) {\n label = `Today, ${label}`;\n }\n return label;\n },\n labelNav: \"Navigation bar\",\n labelWeekNumberHeader: \"Week Number\",\n labelWeekday: (date, options, dateLib) => {\n let formatDate;\n if (dateLib && typeof dateLib.format === \"function\") {\n formatDate = dateLib.format.bind(dateLib);\n }\n else {\n formatDate = (d, pattern) => format(d, pattern, { locale: dateFnsEnUS, ...options });\n }\n return formatDate(date, \"cccc\");\n },\n },\n};\n","import { TZDate } from \"@date-fns/tz\";\nimport { addDays, addMonths, addWeeks, addYears, differenceInCalendarDays, differenceInCalendarMonths, eachMonthOfInterval, eachYearOfInterval, endOfISOWeek, endOfMonth, endOfWeek, endOfYear, format, getISOWeek, getMonth, getWeek, getYear, isAfter, isBefore, isDate, isSameDay, isSameMonth, isSameYear, max, min, setMonth, setYear, startOfDay, startOfISOWeek, startOfMonth, startOfWeek, startOfYear, } from \"date-fns\";\nimport { endOfBroadcastWeek } from \"../helpers/endOfBroadcastWeek.js\";\nimport { startOfBroadcastWeek } from \"../helpers/startOfBroadcastWeek.js\";\nimport { enUS } from \"../locale/en-US.js\";\n/**\n * A wrapper class around [date-fns](http://date-fns.org) that provides utility\n * methods for date manipulation and formatting.\n *\n * @since 9.2.0\n * @example\n * const dateLib = new DateLib({ locale: es });\n * const newDate = dateLib.addDays(new Date(), 5);\n */\nexport class DateLib {\n /**\n * Creates an instance of `DateLib`.\n *\n * @param options Configuration options for the date library.\n * @param overrides Custom overrides for the date library functions.\n */\n constructor(options, overrides) {\n /**\n * Reference to the built-in Date constructor.\n *\n * @deprecated Use `newDate()` or `today()`.\n */\n this.Date = Date;\n /**\n * Creates a new `Date` object representing today's date.\n *\n * @since 9.5.0\n * @returns A `Date` object for today's date.\n */\n this.today = () => {\n if (this.overrides?.today) {\n return this.overrides.today();\n }\n if (this.options.timeZone) {\n return TZDate.tz(this.options.timeZone);\n }\n return new this.Date();\n };\n /**\n * Creates a new `Date` object with the specified year, month, and day.\n *\n * @since 9.5.0\n * @param year The year.\n * @param monthIndex The month (0-11).\n * @param date The day of the month.\n * @returns A new `Date` object.\n */\n this.newDate = (year, monthIndex, date) => {\n if (this.overrides?.newDate) {\n return this.overrides.newDate(year, monthIndex, date);\n }\n if (this.options.timeZone) {\n return new TZDate(year, monthIndex, date, this.options.timeZone);\n }\n return new Date(year, monthIndex, date);\n };\n /**\n * Adds the specified number of days to the given date.\n *\n * @param date The date to add days to.\n * @param amount The number of days to add.\n * @returns The new date with the days added.\n */\n this.addDays = (date, amount) => {\n return this.overrides?.addDays\n ? this.overrides.addDays(date, amount)\n : addDays(date, amount);\n };\n /**\n * Adds the specified number of months to the given date.\n *\n * @param date The date to add months to.\n * @param amount The number of months to add.\n * @returns The new date with the months added.\n */\n this.addMonths = (date, amount) => {\n return this.overrides?.addMonths\n ? this.overrides.addMonths(date, amount)\n : addMonths(date, amount);\n };\n /**\n * Adds the specified number of weeks to the given date.\n *\n * @param date The date to add weeks to.\n * @param amount The number of weeks to add.\n * @returns The new date with the weeks added.\n */\n this.addWeeks = (date, amount) => {\n return this.overrides?.addWeeks\n ? this.overrides.addWeeks(date, amount)\n : addWeeks(date, amount);\n };\n /**\n * Adds the specified number of years to the given date.\n *\n * @param date The date to add years to.\n * @param amount The number of years to add.\n * @returns The new date with the years added.\n */\n this.addYears = (date, amount) => {\n return this.overrides?.addYears\n ? this.overrides.addYears(date, amount)\n : addYears(date, amount);\n };\n /**\n * Returns the number of calendar days between the given dates.\n *\n * @param dateLeft The later date.\n * @param dateRight The earlier date.\n * @returns The number of calendar days between the dates.\n */\n this.differenceInCalendarDays = (dateLeft, dateRight) => {\n return this.overrides?.differenceInCalendarDays\n ? this.overrides.differenceInCalendarDays(dateLeft, dateRight)\n : differenceInCalendarDays(dateLeft, dateRight);\n };\n /**\n * Returns the number of calendar months between the given dates.\n *\n * @param dateLeft The later date.\n * @param dateRight The earlier date.\n * @returns The number of calendar months between the dates.\n */\n this.differenceInCalendarMonths = (dateLeft, dateRight) => {\n return this.overrides?.differenceInCalendarMonths\n ? this.overrides.differenceInCalendarMonths(dateLeft, dateRight)\n : differenceInCalendarMonths(dateLeft, dateRight);\n };\n /**\n * Returns the months between the given dates.\n *\n * @param interval The interval to get the months for.\n */\n this.eachMonthOfInterval = (interval) => {\n return this.overrides?.eachMonthOfInterval\n ? this.overrides.eachMonthOfInterval(interval)\n : eachMonthOfInterval(interval);\n };\n /**\n * Returns the years between the given dates.\n *\n * @since 9.11.1\n * @param interval The interval to get the years for.\n * @returns The array of years in the interval.\n */\n this.eachYearOfInterval = (interval) => {\n const years = this.overrides?.eachYearOfInterval\n ? this.overrides.eachYearOfInterval(interval)\n : eachYearOfInterval(interval);\n // Remove duplicates that may happen across DST transitions (e.g., \"America/Sao_Paulo\")\n // See https://github.com/date-fns/tz/issues/72\n const uniqueYears = new Set(years.map((d) => this.getYear(d)));\n if (uniqueYears.size === years.length) {\n // No duplicates, return as is\n return years;\n }\n // Rebuild the array to ensure one date per year\n const yearsArray = [];\n uniqueYears.forEach((y) => {\n yearsArray.push(new Date(y, 0, 1));\n });\n return yearsArray;\n };\n /**\n * Returns the end of the broadcast week for the given date.\n *\n * @param date The original date.\n * @returns The end of the broadcast week.\n */\n this.endOfBroadcastWeek = (date) => {\n return this.overrides?.endOfBroadcastWeek\n ? this.overrides.endOfBroadcastWeek(date)\n : endOfBroadcastWeek(date, this);\n };\n /**\n * Returns the end of the ISO week for the given date.\n *\n * @param date The original date.\n * @returns The end of the ISO week.\n */\n this.endOfISOWeek = (date) => {\n return this.overrides?.endOfISOWeek\n ? this.overrides.endOfISOWeek(date)\n : endOfISOWeek(date);\n };\n /**\n * Returns the end of the month for the given date.\n *\n * @param date The original date.\n * @returns The end of the month.\n */\n this.endOfMonth = (date) => {\n return this.overrides?.endOfMonth\n ? this.overrides.endOfMonth(date)\n : endOfMonth(date);\n };\n /**\n * Returns the end of the week for the given date.\n *\n * @param date The original date.\n * @returns The end of the week.\n */\n this.endOfWeek = (date, options) => {\n return this.overrides?.endOfWeek\n ? this.overrides.endOfWeek(date, options)\n : endOfWeek(date, this.options);\n };\n /**\n * Returns the end of the year for the given date.\n *\n * @param date The original date.\n * @returns The end of the year.\n */\n this.endOfYear = (date) => {\n return this.overrides?.endOfYear\n ? this.overrides.endOfYear(date)\n : endOfYear(date);\n };\n /**\n * Formats the given date using the specified format string.\n *\n * @param date The date to format.\n * @param formatStr The format string.\n * @returns The formatted date string.\n */\n this.format = (date, formatStr, _options) => {\n const formatted = this.overrides?.format\n ? this.overrides.format(date, formatStr, this.options)\n : format(date, formatStr, this.options);\n if (this.options.numerals && this.options.numerals !== \"latn\") {\n return this.replaceDigits(formatted);\n }\n return formatted;\n };\n /**\n * Returns the ISO week number for the given date.\n *\n * @param date The date to get the ISO week number for.\n * @returns The ISO week number.\n */\n this.getISOWeek = (date) => {\n return this.overrides?.getISOWeek\n ? this.overrides.getISOWeek(date)\n : getISOWeek(date);\n };\n /**\n * Returns the month of the given date.\n *\n * @param date The date to get the month for.\n * @returns The month.\n */\n this.getMonth = (date, _options) => {\n return this.overrides?.getMonth\n ? this.overrides.getMonth(date, this.options)\n : getMonth(date, this.options);\n };\n /**\n * Returns the year of the given date.\n *\n * @param date The date to get the year for.\n * @returns The year.\n */\n this.getYear = (date, _options) => {\n return this.overrides?.getYear\n ? this.overrides.getYear(date, this.options)\n : getYear(date, this.options);\n };\n /**\n * Returns the local week number for the given date.\n *\n * @param date The date to get the week number for.\n * @returns The week number.\n */\n this.getWeek = (date, _options) => {\n return this.overrides?.getWeek\n ? this.overrides.getWeek(date, this.options)\n : getWeek(date, this.options);\n };\n /**\n * Checks if the first date is after the second date.\n *\n * @param date The date to compare.\n * @param dateToCompare The date to compare with.\n * @returns True if the first date is after the second date.\n */\n this.isAfter = (date, dateToCompare) => {\n return this.overrides?.isAfter\n ? this.overrides.isAfter(date, dateToCompare)\n : isAfter(date, dateToCompare);\n };\n /**\n * Checks if the first date is before the second date.\n *\n * @param date The date to compare.\n * @param dateToCompare The date to compare with.\n * @returns True if the first date is before the second date.\n */\n this.isBefore = (date, dateToCompare) => {\n return this.overrides?.isBefore\n ? this.overrides.isBefore(date, dateToCompare)\n : isBefore(date, dateToCompare);\n };\n /**\n * Checks if the given value is a Date object.\n *\n * @param value The value to check.\n * @returns True if the value is a Date object.\n */\n this.isDate = (value) => {\n return this.overrides?.isDate\n ? this.overrides.isDate(value)\n : isDate(value);\n };\n /**\n * Checks if the given dates are on the same day.\n *\n * @param dateLeft The first date to compare.\n * @param dateRight The second date to compare.\n * @returns True if the dates are on the same day.\n */\n this.isSameDay = (dateLeft, dateRight) => {\n return this.overrides?.isSameDay\n ? this.overrides.isSameDay(dateLeft, dateRight)\n : isSameDay(dateLeft, dateRight);\n };\n /**\n * Checks if the given dates are in the same month.\n *\n * @param dateLeft The first date to compare.\n * @param dateRight The second date to compare.\n * @returns True if the dates are in the same month.\n */\n this.isSameMonth = (dateLeft, dateRight) => {\n return this.overrides?.isSameMonth\n ? this.overrides.isSameMonth(dateLeft, dateRight)\n : isSameMonth(dateLeft, dateRight);\n };\n /**\n * Checks if the given dates are in the same year.\n *\n * @param dateLeft The first date to compare.\n * @param dateRight The second date to compare.\n * @returns True if the dates are in the same year.\n */\n this.isSameYear = (dateLeft, dateRight) => {\n return this.overrides?.isSameYear\n ? this.overrides.isSameYear(dateLeft, dateRight)\n : isSameYear(dateLeft, dateRight);\n };\n /**\n * Returns the latest date in the given array of dates.\n *\n * @param dates The array of dates to compare.\n * @returns The latest date.\n */\n this.max = (dates) => {\n return this.overrides?.max ? this.overrides.max(dates) : max(dates);\n };\n /**\n * Returns the earliest date in the given array of dates.\n *\n * @param dates The array of dates to compare.\n * @returns The earliest date.\n */\n this.min = (dates) => {\n return this.overrides?.min ? this.overrides.min(dates) : min(dates);\n };\n /**\n * Sets the month of the given date.\n *\n * @param date The date to set the month on.\n * @param month The month to set (0-11).\n * @returns The new date with the month set.\n */\n this.setMonth = (date, month) => {\n return this.overrides?.setMonth\n ? this.overrides.setMonth(date, month)\n : setMonth(date, month);\n };\n /**\n * Sets the year of the given date.\n *\n * @param date The date to set the year on.\n * @param year The year to set.\n * @returns The new date with the year set.\n */\n this.setYear = (date, year) => {\n return this.overrides?.setYear\n ? this.overrides.setYear(date, year)\n : setYear(date, year);\n };\n /**\n * Returns the start of the broadcast week for the given date.\n *\n * @param date The original date.\n * @returns The start of the broadcast week.\n */\n this.startOfBroadcastWeek = (date, _dateLib) => {\n return this.overrides?.startOfBroadcastWeek\n ? this.overrides.startOfBroadcastWeek(date, this)\n : startOfBroadcastWeek(date, this);\n };\n /**\n * Returns the start of the day for the given date.\n *\n * @param date The original date.\n * @returns The start of the day.\n */\n this.startOfDay = (date) => {\n return this.overrides?.startOfDay\n ? this.overrides.startOfDay(date)\n : startOfDay(date);\n };\n /**\n * Returns the start of the ISO week for the given date.\n *\n * @param date The original date.\n * @returns The start of the ISO week.\n */\n this.startOfISOWeek = (date) => {\n return this.overrides?.startOfISOWeek\n ? this.overrides.startOfISOWeek(date)\n : startOfISOWeek(date);\n };\n /**\n * Returns the start of the month for the given date.\n *\n * @param date The original date.\n * @returns The start of the month.\n */\n this.startOfMonth = (date) => {\n return this.overrides?.startOfMonth\n ? this.overrides.startOfMonth(date)\n : startOfMonth(date);\n };\n /**\n * Returns the start of the week for the given date.\n *\n * @param date The original date.\n * @returns The start of the week.\n */\n this.startOfWeek = (date, _options) => {\n return this.overrides?.startOfWeek\n ? this.overrides.startOfWeek(date, this.options)\n : startOfWeek(date, this.options);\n };\n /**\n * Returns the start of the year for the given date.\n *\n * @param date The original date.\n * @returns The start of the year.\n */\n this.startOfYear = (date) => {\n return this.overrides?.startOfYear\n ? this.overrides.startOfYear(date)\n : startOfYear(date);\n };\n this.options = { locale: enUS, ...options };\n this.overrides = overrides;\n }\n /**\n * Generates a mapping of Arabic digits (0-9) to the target numbering system\n * digits.\n *\n * @since 9.5.0\n * @returns A record mapping Arabic digits to the target numerals.\n */\n getDigitMap() {\n const { numerals = \"latn\" } = this.options;\n // Use Intl.NumberFormat to create a formatter with the specified numbering system\n const formatter = new Intl.NumberFormat(\"en-US\", {\n numberingSystem: numerals,\n });\n // Map Arabic digits (0-9) to the target numerals\n const digitMap = {};\n for (let i = 0; i < 10; i++) {\n digitMap[i.toString()] = formatter.format(i);\n }\n return digitMap;\n }\n /**\n * Replaces Arabic digits in a string with the target numbering system digits.\n *\n * @since 9.5.0\n * @param input The string containing Arabic digits.\n * @returns The string with digits replaced.\n */\n replaceDigits(input) {\n const digitMap = this.getDigitMap();\n return input.replace(/\\d/g, (digit) => digitMap[digit] || digit);\n }\n /**\n * Formats a number using the configured numbering system.\n *\n * @since 9.5.0\n * @param value The number to format.\n * @returns The formatted number as a string.\n */\n formatNumber(value) {\n return this.replaceDigits(value.toString());\n }\n /**\n * Returns the preferred ordering for month and year labels for the current\n * locale.\n */\n getMonthYearOrder() {\n const code = this.options.locale?.code;\n if (!code) {\n return \"month-first\";\n }\n return DateLib.yearFirstLocales.has(code) ? \"year-first\" : \"month-first\";\n }\n /**\n * Formats the month/year pair respecting locale conventions.\n *\n * @since 9.11.0\n */\n formatMonthYear(date) {\n const { locale, timeZone, numerals } = this.options;\n const localeCode = locale?.code;\n if (localeCode && DateLib.yearFirstLocales.has(localeCode)) {\n try {\n const intl = new Intl.DateTimeFormat(localeCode, {\n month: \"long\",\n year: \"numeric\",\n timeZone,\n numberingSystem: numerals,\n });\n const formatted = intl.format(date);\n return formatted;\n }\n catch {\n // Fallback to date-fns formatting below.\n }\n }\n const pattern = this.getMonthYearOrder() === \"year-first\" ? \"y LLLL\" : \"LLLL y\";\n return this.format(date, pattern);\n }\n}\nDateLib.yearFirstLocales = new Set([\n \"eu\",\n \"hu\",\n \"ja\",\n \"ja-Hira\",\n \"ja-JP\",\n \"ko\",\n \"ko-KR\",\n \"lt\",\n \"lt-LT\",\n \"lv\",\n \"lv-LV\",\n \"mn\",\n \"mn-MN\",\n \"zh\",\n \"zh-CN\",\n \"zh-HK\",\n \"zh-TW\",\n]);\n/** The default locale (English). */\nexport { enUS as defaultLocale } from \"../locale/en-US.js\";\n/**\n * The default date library with English locale.\n *\n * @since 9.2.0\n */\nexport const defaultDateLib = new DateLib();\n/**\n * @ignore\n * @deprecated Use `defaultDateLib`.\n */\nexport const dateLib = defaultDateLib;\n","import { defaultDateLib } from \"./DateLib.js\";\n/**\n * Represents a day displayed in the calendar.\n *\n * In DayPicker, a `CalendarDay` is a wrapper around a `Date` object that\n * provides additional information about the day, such as whether it belongs to\n * the displayed month.\n */\nexport class CalendarDay {\n constructor(date, displayMonth, dateLib = defaultDateLib) {\n this.date = date;\n this.displayMonth = displayMonth;\n this.outside = Boolean(displayMonth && !dateLib.isSameMonth(date, displayMonth));\n this.dateLib = dateLib;\n this.isoDate = dateLib.format(date, \"yyyy-MM-dd\");\n this.displayMonthId = dateLib.format(displayMonth, \"yyyy-MM\");\n this.dateMonthId = dateLib.format(date, \"yyyy-MM\");\n }\n /**\n * Checks if this day is equal to another `CalendarDay`, considering both the\n * date and the displayed month.\n *\n * @param day The `CalendarDay` to compare with.\n * @returns `true` if the days are equal, otherwise `false`.\n */\n isEqualTo(day) {\n return (this.dateLib.isSameDay(day.date, this.date) &&\n this.dateLib.isSameMonth(day.displayMonth, this.displayMonth));\n }\n}\n","/**\n * Represents a month in a calendar year.\n *\n * A `CalendarMonth` contains the weeks within the month and the date of the\n * month.\n */\nexport class CalendarMonth {\n constructor(month, weeks) {\n this.date = month;\n this.weeks = weeks;\n }\n}\n","/**\n * Represents a week in a calendar month.\n *\n * A `CalendarWeek` contains the days within the week and the week number.\n */\nexport class CalendarWeek {\n constructor(weekNumber, days) {\n this.days = days;\n this.weekNumber = weekNumber;\n }\n}\n","import React from \"react\";\n/**\n * Render the button elements in the calendar.\n *\n * @private\n * @deprecated Use `PreviousMonthButton` or `@link NextMonthButton` instead.\n */\nexport function Button(props) {\n return React.createElement(\"button\", { ...props });\n}\n","import React from \"react\";\n/**\n * Render the label in the month caption.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function CaptionLabel(props) {\n return React.createElement(\"span\", { ...props });\n}\n","import React from \"react\";\n/**\n * Render the chevron icon used in the navigation buttons and dropdowns.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function Chevron(props) {\n const { size = 24, orientation = \"left\", className } = props;\n return (\n // biome-ignore lint/a11y/noSvgWithoutTitle: handled by the parent component\n React.createElement(\"svg\", { className: className, width: size, height: size, viewBox: \"0 0 24 24\" },\n orientation === \"up\" && (React.createElement(\"polygon\", { points: \"6.77 17 12.5 11.43 18.24 17 20 15.28 12.5 8 5 15.28\" })),\n orientation === \"down\" && (React.createElement(\"polygon\", { points: \"6.77 8 12.5 13.57 18.24 8 20 9.72 12.5 17 5 9.72\" })),\n orientation === \"left\" && (React.createElement(\"polygon\", { points: \"16 18.112 9.81111111 12 16 5.87733333 14.0888889 4 6 12 14.0888889 20\" })),\n orientation === \"right\" && (React.createElement(\"polygon\", { points: \"8 18.112 14.18888889 12 8 5.87733333 9.91111111 4 18 12 9.91111111 20\" }))));\n}\n","import React from \"react\";\n/**\n * Render a grid cell for a specific day in the calendar.\n *\n * Handles interaction and focus for the day. If you only need to change the\n * content of the day cell, consider swapping the `DayButton` component\n * instead.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function Day(props) {\n const { day, modifiers, ...tdProps } = props;\n return React.createElement(\"td\", { ...tdProps });\n}\n","import React from \"react\";\n/**\n * Render a button for a specific day in the calendar.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function DayButton(props) {\n const { day, modifiers, ...buttonProps } = props;\n const ref = React.useRef(null);\n React.useEffect(() => {\n if (modifiers.focused)\n ref.current?.focus();\n }, [modifiers.focused]);\n return React.createElement(\"button\", { ref: ref, ...buttonProps });\n}\n","/**\n * Enum representing the UI elements composing DayPicker. These elements are\n * mapped to {@link CustomComponents}, {@link ClassNames}, and {@link Styles}.\n *\n * Some elements are extended by flags and modifiers.\n */\nexport var UI;\n(function (UI) {\n /** The root component displaying the months and the navigation bar. */\n UI[\"Root\"] = \"root\";\n /** The Chevron SVG element used by navigation buttons and dropdowns. */\n UI[\"Chevron\"] = \"chevron\";\n /**\n * The grid cell with the day's date. Extended by {@link DayFlag} and\n * {@link SelectionState}.\n */\n UI[\"Day\"] = \"day\";\n /** The button containing the formatted day's date, inside the grid cell. */\n UI[\"DayButton\"] = \"day_button\";\n /** The caption label of the month (when not showing the dropdown navigation). */\n UI[\"CaptionLabel\"] = \"caption_label\";\n /** The container of the dropdown navigation (when enabled). */\n UI[\"Dropdowns\"] = \"dropdowns\";\n /** The dropdown element to select for years and months. */\n UI[\"Dropdown\"] = \"dropdown\";\n /** The container element of the dropdown. */\n UI[\"DropdownRoot\"] = \"dropdown_root\";\n /** The root element of the footer. */\n UI[\"Footer\"] = \"footer\";\n /** The month grid. */\n UI[\"MonthGrid\"] = \"month_grid\";\n /** Contains the dropdown navigation or the caption label. */\n UI[\"MonthCaption\"] = \"month_caption\";\n /** The dropdown with the months. */\n UI[\"MonthsDropdown\"] = \"months_dropdown\";\n /** Wrapper of the month grid. */\n UI[\"Month\"] = \"month\";\n /** The container of the displayed months. */\n UI[\"Months\"] = \"months\";\n /** The navigation bar with the previous and next buttons. */\n UI[\"Nav\"] = \"nav\";\n /**\n * The next month button in the navigation. *\n *\n * @since 9.1.0\n */\n UI[\"NextMonthButton\"] = \"button_next\";\n /**\n * The previous month button in the navigation.\n *\n * @since 9.1.0\n */\n UI[\"PreviousMonthButton\"] = \"button_previous\";\n /** The row containing the week. */\n UI[\"Week\"] = \"week\";\n /** The group of row weeks in a month (`tbody`). */\n UI[\"Weeks\"] = \"weeks\";\n /** The column header with the weekday. */\n UI[\"Weekday\"] = \"weekday\";\n /** The row grouping the weekdays in the column headers. */\n UI[\"Weekdays\"] = \"weekdays\";\n /** The cell containing the week number. */\n UI[\"WeekNumber\"] = \"week_number\";\n /** The cell header of the week numbers column. */\n UI[\"WeekNumberHeader\"] = \"week_number_header\";\n /** The dropdown with the years. */\n UI[\"YearsDropdown\"] = \"years_dropdown\";\n})(UI || (UI = {}));\n/** Enum representing flags for the {@link UI | UI.Day} element. */\nexport var DayFlag;\n(function (DayFlag) {\n /** The day is disabled. */\n DayFlag[\"disabled\"] = \"disabled\";\n /** The day is hidden. */\n DayFlag[\"hidden\"] = \"hidden\";\n /** The day is outside the current month. */\n DayFlag[\"outside\"] = \"outside\";\n /** The day is focused. */\n DayFlag[\"focused\"] = \"focused\";\n /** The day is today. */\n DayFlag[\"today\"] = \"today\";\n})(DayFlag || (DayFlag = {}));\n/**\n * Enum representing selection states that can be applied to the {@link UI | UI.Day}\n * element in selection mode.\n */\nexport var SelectionState;\n(function (SelectionState) {\n /** The day is at the end of a selected range. */\n SelectionState[\"range_end\"] = \"range_end\";\n /** The day is at the middle of a selected range. */\n SelectionState[\"range_middle\"] = \"range_middle\";\n /** The day is at the start of a selected range. */\n SelectionState[\"range_start\"] = \"range_start\";\n /** The day is selected. */\n SelectionState[\"selected\"] = \"selected\";\n})(SelectionState || (SelectionState = {}));\n/**\n * Enum representing different animation states for transitioning between\n * months.\n */\nexport var Animation;\n(function (Animation) {\n /** The entering weeks when they appear before the exiting month. */\n Animation[\"weeks_before_enter\"] = \"weeks_before_enter\";\n /** The exiting weeks when they disappear before the entering month. */\n Animation[\"weeks_before_exit\"] = \"weeks_before_exit\";\n /** The entering weeks when they appear after the exiting month. */\n Animation[\"weeks_after_enter\"] = \"weeks_after_enter\";\n /** The exiting weeks when they disappear after the entering month. */\n Animation[\"weeks_after_exit\"] = \"weeks_after_exit\";\n /** The entering caption when it appears after the exiting month. */\n Animation[\"caption_after_enter\"] = \"caption_after_enter\";\n /** The exiting caption when it disappears after the entering month. */\n Animation[\"caption_after_exit\"] = \"caption_after_exit\";\n /** The entering caption when it appears before the exiting month. */\n Animation[\"caption_before_enter\"] = \"caption_before_enter\";\n /** The exiting caption when it disappears before the entering month. */\n Animation[\"caption_before_exit\"] = \"caption_before_exit\";\n})(Animation || (Animation = {}));\n","import React from \"react\";\nimport { UI } from \"../UI.js\";\n/**\n * Render a dropdown component for navigation in the calendar.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function Dropdown(props) {\n const { options, className, components, classNames, ...selectProps } = props;\n const cssClassSelect = [classNames[UI.Dropdown], className].join(\" \");\n const selectedOption = options?.find(({ value }) => value === selectProps.value);\n return (React.createElement(\"span\", { \"data-disabled\": selectProps.disabled, className: classNames[UI.DropdownRoot] },\n React.createElement(components.Select, { className: cssClassSelect, ...selectProps }, options?.map(({ value, label, disabled }) => (React.createElement(components.Option, { key: value, value: value, disabled: disabled }, label)))),\n React.createElement(\"span\", { className: classNames[UI.CaptionLabel], \"aria-hidden\": true },\n selectedOption?.label,\n React.createElement(components.Chevron, { orientation: \"down\", size: 18, className: classNames[UI.Chevron] }))));\n}\n","import React from \"react\";\n/**\n * Render the navigation dropdowns for the calendar.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function DropdownNav(props) {\n return React.createElement(\"div\", { ...props });\n}\n","import React from \"react\";\n/**\n * Render the footer of the calendar.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function Footer(props) {\n return React.createElement(\"div\", { ...props });\n}\n","import React from \"react\";\n/**\n * Render the grid with the weekday header row and the weeks for a specific\n * month.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function Month(props) {\n const { calendarMonth, displayIndex, ...divProps } = props;\n return React.createElement(\"div\", { ...divProps }, props.children);\n}\n","import React from \"react\";\n/**\n * Render the caption for a month in the calendar.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function MonthCaption(props) {\n const { calendarMonth, displayIndex, ...divProps } = props;\n return React.createElement(\"div\", { ...divProps });\n}\n","import React from \"react\";\n/**\n * Render the grid of days for a specific month.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function MonthGrid(props) {\n return React.createElement(\"table\", { ...props });\n}\n","import React from \"react\";\n/**\n * Render a container wrapping the month grids.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function Months(props) {\n return React.createElement(\"div\", { ...props });\n}\n","import { createContext, useContext } from \"react\";\n/** @ignore */\nexport const dayPickerContext = createContext(undefined);\n/**\n * Provides access to the DayPicker context, which includes properties and\n * methods to interact with the DayPicker component. This hook must be used\n * within a custom component.\n *\n * @template T - Use this type to refine the returned context type with a\n * specific selection mode.\n * @returns The context to work with DayPicker.\n * @throws {Error} If the hook is used outside of a DayPicker provider.\n * @group Hooks\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function useDayPicker() {\n const context = useContext(dayPickerContext);\n if (context === undefined) {\n throw new Error(\"useDayPicker() must be used within a custom component.\");\n }\n return context;\n}\n","import React from \"react\";\nimport { useDayPicker } from \"../useDayPicker.js\";\n/**\n * Render a dropdown to navigate between months in the calendar.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function MonthsDropdown(props) {\n const { components } = useDayPicker();\n return React.createElement(components.Dropdown, { ...props });\n}\n","import React, { useCallback, } from \"react\";\nimport { UI } from \"../UI.js\";\nimport { useDayPicker } from \"../useDayPicker.js\";\n/**\n * Render the navigation toolbar with buttons to navigate between months.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function Nav(props) {\n const { onPreviousClick, onNextClick, previousMonth, nextMonth, ...navProps } = props;\n const { components, classNames, labels: { labelPrevious, labelNext }, } = useDayPicker();\n const handleNextClick = useCallback((e) => {\n if (nextMonth) {\n onNextClick?.(e);\n }\n }, [nextMonth, onNextClick]);\n const handlePreviousClick = useCallback((e) => {\n if (previousMonth) {\n onPreviousClick?.(e);\n }\n }, [previousMonth, onPreviousClick]);\n return (React.createElement(\"nav\", { ...navProps },\n React.createElement(components.PreviousMonthButton, { type: \"button\", className: classNames[UI.PreviousMonthButton], tabIndex: previousMonth ? undefined : -1, \"aria-disabled\": previousMonth ? undefined : true, \"aria-label\": labelPrevious(previousMonth), onClick: handlePreviousClick },\n React.createElement(components.Chevron, { disabled: previousMonth ? undefined : true, className: classNames[UI.Chevron], orientation: \"left\" })),\n React.createElement(components.NextMonthButton, { type: \"button\", className: classNames[UI.NextMonthButton], tabIndex: nextMonth ? undefined : -1, \"aria-disabled\": nextMonth ? undefined : true, \"aria-label\": labelNext(nextMonth), onClick: handleNextClick },\n React.createElement(components.Chevron, { disabled: nextMonth ? undefined : true, orientation: \"right\", className: classNames[UI.Chevron] }))));\n}\n","import React from \"react\";\nimport { useDayPicker } from \"../useDayPicker.js\";\n/**\n * Render the button to navigate to the next month in the calendar.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function NextMonthButton(props) {\n const { components } = useDayPicker();\n return React.createElement(components.Button, { ...props });\n}\n","import React from \"react\";\n/**\n * Render an `option` element.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function Option(props) {\n return React.createElement(\"option\", { ...props });\n}\n","import React from \"react\";\nimport { useDayPicker } from \"../useDayPicker.js\";\n/**\n * Render the button to navigate to the previous month in the calendar.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function PreviousMonthButton(props) {\n const { components } = useDayPicker();\n return React.createElement(components.Button, { ...props });\n}\n","import React from \"react\";\n/**\n * Render the root element of the calendar.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function Root(props) {\n const { rootRef, ...rest } = props;\n return React.createElement(\"div\", { ...rest, ref: rootRef });\n}\n","import React from \"react\";\n/**\n * Render a `select` element.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function Select(props) {\n return React.createElement(\"select\", { ...props });\n}\n","import React from \"react\";\n/**\n * Render a table row representing a week in the calendar.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function Week(props) {\n const { week, ...trProps } = props;\n return React.createElement(\"tr\", { ...trProps });\n}\n","import React from \"react\";\n/**\n * Render a table header cell with the name of a weekday (e.g., \"Mo\", \"Tu\").\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function Weekday(props) {\n return React.createElement(\"th\", { ...props });\n}\n","import React from \"react\";\n/**\n * Render the table row containing the weekday names.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function Weekdays(props) {\n return (React.createElement(\"thead\", { \"aria-hidden\": true },\n React.createElement(\"tr\", { ...props })));\n}\n","import React from \"react\";\n/**\n * Render a table cell displaying the number of the week.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function WeekNumber(props) {\n const { week, ...thProps } = props;\n return React.createElement(\"th\", { ...thProps });\n}\n","import React from \"react\";\n/**\n * Render the header cell for the week numbers column.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function WeekNumberHeader(props) {\n return React.createElement(\"th\", { ...props });\n}\n","import React from \"react\";\n/**\n * Render the container for the weeks in the month grid.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function Weeks(props) {\n return React.createElement(\"tbody\", { ...props });\n}\n","import React from \"react\";\nimport { useDayPicker } from \"../useDayPicker.js\";\n/**\n * Render a dropdown to navigate between years in the calendar.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function YearsDropdown(props) {\n const { components } = useDayPicker();\n return React.createElement(components.Dropdown, { ...props });\n}\n","import { defaultDateLib } from \"../classes/index.js\";\n/**\n * Checks if a given date is within a specified date range.\n *\n * @since 9.0.0\n * @param range - The date range to check against.\n * @param date - The date to check.\n * @param excludeEnds - If `true`, the range's start and end dates are excluded.\n * @param dateLib - The date utility library instance.\n * @returns `true` if the date is within the range, otherwise `false`.\n * @group Utilities\n */\nexport function rangeIncludesDate(range, date, excludeEnds = false, dateLib = defaultDateLib) {\n let { from, to } = range;\n const { differenceInCalendarDays, isSameDay } = dateLib;\n if (from && to) {\n const isRangeInverted = differenceInCalendarDays(to, from) < 0;\n if (isRangeInverted) {\n [from, to] = [to, from];\n }\n const isInRange = differenceInCalendarDays(date, from) >= (excludeEnds ? 1 : 0) &&\n differenceInCalendarDays(to, date) >= (excludeEnds ? 1 : 0);\n return isInRange;\n }\n if (!excludeEnds && to) {\n return isSameDay(to, date);\n }\n if (!excludeEnds && from) {\n return isSameDay(from, date);\n }\n return false;\n}\n/**\n * @private\n * @deprecated Use {@link rangeIncludesDate} instead.\n */\nexport const isDateInRange = (range, date) => rangeIncludesDate(range, date, false, defaultDateLib);\n","/**\n * Checks if the given value is of type {@link DateInterval}.\n *\n * @param matcher - The value to check.\n * @returns `true` if the value is a {@link DateInterval}, otherwise `false`.\n * @group Utilities\n */\nexport function isDateInterval(matcher) {\n return Boolean(matcher &&\n typeof matcher === \"object\" &&\n \"before\" in matcher &&\n \"after\" in matcher);\n}\n/**\n * Checks if the given value is of type {@link DateRange}.\n *\n * @param value - The value to check.\n * @returns `true` if the value is a {@link DateRange}, otherwise `false`.\n * @group Utilities\n */\nexport function isDateRange(value) {\n return Boolean(value && typeof value === \"object\" && \"from\" in value);\n}\n/**\n * Checks if the given value is of type {@link DateAfter}.\n *\n * @param value - The value to check.\n * @returns `true` if the value is a {@link DateAfter}, otherwise `false`.\n * @group Utilities\n */\nexport function isDateAfterType(value) {\n return Boolean(value && typeof value === \"object\" && \"after\" in value);\n}\n/**\n * Checks if the given value is of type {@link DateBefore}.\n *\n * @param value - The value to check.\n * @returns `true` if the value is a {@link DateBefore}, otherwise `false`.\n * @group Utilities\n */\nexport function isDateBeforeType(value) {\n return Boolean(value && typeof value === \"object\" && \"before\" in value);\n}\n/**\n * Checks if the given value is of type {@link DayOfWeek}.\n *\n * @param value - The value to check.\n * @returns `true` if the value is a {@link DayOfWeek}, otherwise `false`.\n * @group Utilities\n */\nexport function isDayOfWeekType(value) {\n return Boolean(value && typeof value === \"object\" && \"dayOfWeek\" in value);\n}\n/**\n * Checks if the given value is an array of valid dates.\n *\n * @private\n * @param value - The value to check.\n * @param dateLib - The date utility library instance.\n * @returns `true` if the value is an array of valid dates, otherwise `false`.\n */\nexport function isDatesArray(value, dateLib) {\n return Array.isArray(value) && value.every(dateLib.isDate);\n}\n","import { defaultDateLib } from \"../classes/DateLib.js\";\nimport { rangeIncludesDate } from \"./rangeIncludesDate.js\";\nimport { isDateAfterType, isDateBeforeType, isDateInterval, isDateRange, isDatesArray, isDayOfWeekType, } from \"./typeguards.js\";\n/**\n * Checks if a given date matches at least one of the specified {@link Matcher}.\n *\n * @param date - The date to check.\n * @param matchers - The matchers to check against.\n * @param dateLib - The date utility library instance.\n * @returns `true` if the date matches any of the matchers, otherwise `false`.\n * @group Utilities\n */\nexport function dateMatchModifiers(date, matchers, dateLib = defaultDateLib) {\n const matchersArr = !Array.isArray(matchers) ? [matchers] : matchers;\n const { isSameDay, differenceInCalendarDays, isAfter } = dateLib;\n return matchersArr.some((matcher) => {\n if (typeof matcher === \"boolean\") {\n return matcher;\n }\n if (dateLib.isDate(matcher)) {\n return isSameDay(date, matcher);\n }\n if (isDatesArray(matcher, dateLib)) {\n return matcher.some((matcherDate) => isSameDay(date, matcherDate));\n }\n if (isDateRange(matcher)) {\n return rangeIncludesDate(matcher, date, false, dateLib);\n }\n if (isDayOfWeekType(matcher)) {\n if (!Array.isArray(matcher.dayOfWeek)) {\n return matcher.dayOfWeek === date.getDay();\n }\n return matcher.dayOfWeek.includes(date.getDay());\n }\n if (isDateInterval(matcher)) {\n const diffBefore = differenceInCalendarDays(matcher.before, date);\n const diffAfter = differenceInCalendarDays(matcher.after, date);\n const isDayBefore = diffBefore > 0;\n const isDayAfter = diffAfter < 0;\n const isClosedInterval = isAfter(matcher.before, matcher.after);\n if (isClosedInterval) {\n return isDayAfter && isDayBefore;\n }\n else {\n return isDayBefore || isDayAfter;\n }\n }\n if (isDateAfterType(matcher)) {\n return differenceInCalendarDays(date, matcher.after) > 0;\n }\n if (isDateBeforeType(matcher)) {\n return differenceInCalendarDays(matcher.before, date) > 0;\n }\n if (typeof matcher === \"function\") {\n return matcher(date);\n }\n return false;\n });\n}\n/**\n * @private\n * @deprecated Use {@link dateMatchModifiers} instead.\n */\nexport const isMatch = dateMatchModifiers;\n","import { DayFlag } from \"../UI.js\";\nimport { dateMatchModifiers } from \"../utils/dateMatchModifiers.js\";\n/**\n * Creates a function to retrieve the modifiers for a given day.\n *\n * This function calculates both internal and custom modifiers for each day\n * based on the provided calendar days and DayPicker props.\n *\n * @private\n * @param days The array of `CalendarDay` objects to process.\n * @param props The DayPicker props, including modifiers and configuration\n * options.\n * @param dateLib The date library to use for date manipulation.\n * @returns A function that retrieves the modifiers for a given `CalendarDay`.\n */\nexport function createGetModifiers(days, props, navStart, navEnd, dateLib) {\n const { disabled, hidden, modifiers, showOutsideDays, broadcastCalendar, today = dateLib.today(), } = props;\n const { isSameDay, isSameMonth, startOfMonth, isBefore, endOfMonth, isAfter, } = dateLib;\n const computedNavStart = navStart && startOfMonth(navStart);\n const computedNavEnd = navEnd && endOfMonth(navEnd);\n const internalModifiersMap = {\n [DayFlag.focused]: [],\n [DayFlag.outside]: [],\n [DayFlag.disabled]: [],\n [DayFlag.hidden]: [],\n [DayFlag.today]: [],\n };\n const customModifiersMap = {};\n for (const day of days) {\n const { date, displayMonth } = day;\n const isOutside = Boolean(displayMonth && !isSameMonth(date, displayMonth));\n const isBeforeNavStart = Boolean(computedNavStart && isBefore(date, computedNavStart));\n const isAfterNavEnd = Boolean(computedNavEnd && isAfter(date, computedNavEnd));\n const isDisabled = Boolean(disabled && dateMatchModifiers(date, disabled, dateLib));\n const isHidden = Boolean(hidden && dateMatchModifiers(date, hidden, dateLib)) ||\n isBeforeNavStart ||\n isAfterNavEnd ||\n // Broadcast calendar will show outside days as default\n (!broadcastCalendar && !showOutsideDays && isOutside) ||\n (broadcastCalendar && showOutsideDays === false && isOutside);\n const isToday = isSameDay(date, today);\n if (isOutside)\n internalModifiersMap.outside.push(day);\n if (isDisabled)\n internalModifiersMap.disabled.push(day);\n if (isHidden)\n internalModifiersMap.hidden.push(day);\n if (isToday)\n internalModifiersMap.today.push(day);\n // Add custom modifiers\n if (modifiers) {\n Object.keys(modifiers).forEach((name) => {\n const modifierValue = modifiers?.[name];\n const isMatch = modifierValue\n ? dateMatchModifiers(date, modifierValue, dateLib)\n : false;\n if (!isMatch)\n return;\n if (customModifiersMap[name]) {\n customModifiersMap[name].push(day);\n }\n else {\n customModifiersMap[name] = [day];\n }\n });\n }\n }\n return (day) => {\n // Initialize all the modifiers to false\n const dayFlags = {\n [DayFlag.focused]: false,\n [DayFlag.disabled]: false,\n [DayFlag.hidden]: false,\n [DayFlag.outside]: false,\n [DayFlag.today]: false,\n };\n const customModifiers = {};\n // Find the modifiers for the given day\n for (const name in internalModifiersMap) {\n const days = internalModifiersMap[name];\n dayFlags[name] = days.some((d) => d === day);\n }\n for (const name in customModifiersMap) {\n customModifiers[name] = customModifiersMap[name].some((d) => d === day);\n }\n return {\n ...dayFlags,\n // custom modifiers should override all the previous ones\n ...customModifiers,\n };\n };\n}\n","import { DayFlag, SelectionState, UI } from \"../UI.js\";\n/**\n * Returns the class names for a day based on its modifiers.\n *\n * This function combines the base class name for the day with any class names\n * associated with active modifiers.\n *\n * @param modifiers The modifiers applied to the day.\n * @param classNames The base class names for the calendar elements.\n * @param modifiersClassNames The class names associated with specific\n * modifiers.\n * @returns An array of class names for the day.\n */\nexport function getClassNamesForModifiers(modifiers, classNames, modifiersClassNames = {}) {\n const modifierClassNames = Object.entries(modifiers)\n .filter(([, active]) => active === true)\n .reduce((previousValue, [key]) => {\n if (modifiersClassNames[key]) {\n previousValue.push(modifiersClassNames[key]);\n }\n else if (classNames[DayFlag[key]]) {\n previousValue.push(classNames[DayFlag[key]]);\n }\n else if (classNames[SelectionState[key]]) {\n previousValue.push(classNames[SelectionState[key]]);\n }\n return previousValue;\n }, [classNames[UI.Day]]);\n return modifierClassNames;\n}\n","import * as components from \"../components/custom-components.js\";\n/**\n * Merges custom components from the props with the default components.\n *\n * This function ensures that any custom components provided in the props\n * override the default components.\n *\n * @param customComponents The custom components provided in the DayPicker\n * props.\n * @returns An object containing the merged components.\n */\nexport function getComponents(customComponents) {\n return {\n ...components,\n ...customComponents,\n };\n}\n","/**\n * Extracts `data-` attributes from the DayPicker props.\n *\n * This function collects all `data-` attributes from the props and adds\n * additional attributes based on the DayPicker configuration.\n *\n * @param props The DayPicker props.\n * @returns An object containing the `data-` attributes.\n */\nexport function getDataAttributes(props) {\n const dataAttributes = {\n \"data-mode\": props.mode ?? undefined,\n \"data-required\": \"required\" in props ? props.required : undefined,\n \"data-multiple-months\": (props.numberOfMonths && props.numberOfMonths > 1) || undefined,\n \"data-week-numbers\": props.showWeekNumber || undefined,\n \"data-broadcast-calendar\": props.broadcastCalendar || undefined,\n \"data-nav-layout\": props.navLayout || undefined,\n };\n Object.entries(props).forEach(([key, val]) => {\n if (key.startsWith(\"data-\")) {\n dataAttributes[key] = val;\n }\n });\n return dataAttributes;\n}\n","import { Animation, DayFlag, SelectionState, UI } from \"../UI.js\";\n/**\n * Returns the default class names for the UI elements.\n *\n * This function generates a mapping of default class names for various UI\n * elements, day flags, selection states, and animations.\n *\n * @returns An object containing the default class names.\n * @group Utilities\n */\nexport function getDefaultClassNames() {\n const classNames = {};\n for (const key in UI) {\n classNames[UI[key]] =\n `rdp-${UI[key]}`;\n }\n for (const key in DayFlag) {\n classNames[DayFlag[key]] =\n `rdp-${DayFlag[key]}`;\n }\n for (const key in SelectionState) {\n classNames[SelectionState[key]] =\n `rdp-${SelectionState[key]}`;\n }\n for (const key in Animation) {\n classNames[Animation[key]] =\n `rdp-${Animation[key]}`;\n }\n return classNames;\n}\n","import { DateLib } from \"../classes/DateLib.js\";\n/**\n * Formats the caption of the month.\n *\n * @defaultValue Locale-specific month/year order (e.g., \"November 2022\").\n * @param month The date representing the month.\n * @param options Configuration options for the date library.\n * @param dateLib The date library to use for formatting. If not provided, a new\n * instance is created.\n * @returns The formatted caption as a string.\n * @group Formatters\n * @see https://daypicker.dev/docs/translation#custom-formatters\n */\nexport function formatCaption(month, options, dateLib) {\n const lib = dateLib ?? new DateLib(options);\n return lib.formatMonthYear(month);\n}\n/**\n * @private\n * @deprecated Use {@link formatCaption} instead.\n * @group Formatters\n */\nexport const formatMonthCaption = formatCaption;\n","import { DateLib } from \"../classes/DateLib.js\";\n/**\n * Formats the day date shown in the day cell.\n *\n * @defaultValue `d` (e.g., \"1\").\n * @param date The date to format.\n * @param options Configuration options for the date library.\n * @param dateLib The date library to use for formatting. If not provided, a new\n * instance is created.\n * @returns The formatted day as a string.\n * @group Formatters\n * @see https://daypicker.dev/docs/translation#custom-formatters\n */\nexport function formatDay(date, options, dateLib) {\n return (dateLib ?? new DateLib(options)).format(date, \"d\");\n}\n","import { defaultDateLib } from \"../classes/DateLib.js\";\n/**\n * Formats the month for the dropdown option label.\n *\n * @defaultValue The localized full month name.\n * @param month The date representing the month.\n * @param dateLib The date library to use for formatting. Defaults to\n * `defaultDateLib`.\n * @returns The formatted month name as a string.\n * @group Formatters\n * @see https://daypicker.dev/docs/translation#custom-formatters\n */\nexport function formatMonthDropdown(month, dateLib = defaultDateLib) {\n return dateLib.format(month, \"LLLL\");\n}\n","import { DateLib } from \"../classes/DateLib.js\";\n/**\n * Formats the name of a weekday to be displayed in the weekdays header.\n *\n * @defaultValue `cccccc` (e.g., \"Mo\" for Monday).\n * @param weekday The date representing the weekday.\n * @param options Configuration options for the date library.\n * @param dateLib The date library to use for formatting. If not provided, a new\n * instance is created.\n * @returns The formatted weekday name as a string.\n * @group Formatters\n * @see https://daypicker.dev/docs/translation#custom-formatters\n */\nexport function formatWeekdayName(weekday, options, dateLib) {\n return (dateLib ?? new DateLib(options)).format(weekday, \"cccccc\");\n}\n","import { defaultDateLib } from \"../classes/DateLib.js\";\n/**\n * Formats the week number.\n *\n * @defaultValue The week number as a string, with a leading zero for single-digit numbers.\n * @param weekNumber The week number to format.\n * @param dateLib The date library to use for formatting. Defaults to\n * `defaultDateLib`.\n * @returns The formatted week number as a string.\n * @group Formatters\n * @see https://daypicker.dev/docs/translation#custom-formatters\n */\nexport function formatWeekNumber(weekNumber, dateLib = defaultDateLib) {\n if (weekNumber < 10) {\n return dateLib.formatNumber(`0${weekNumber.toLocaleString()}`);\n }\n return dateLib.formatNumber(`${weekNumber.toLocaleString()}`);\n}\n","/**\n * Formats the header for the week number column.\n *\n * @defaultValue An empty string `\"\"`.\n * @returns The formatted week number header as a string.\n * @group Formatters\n * @see https://daypicker.dev/docs/translation#custom-formatters\n */\nexport function formatWeekNumberHeader() {\n return ``;\n}\n","import { defaultDateLib } from \"../classes/DateLib.js\";\n/**\n * Formats the year for the dropdown option label.\n *\n * @param year The year to format.\n * @param dateLib The date library to use for formatting. Defaults to\n * `defaultDateLib`.\n * @returns The formatted year as a string.\n * @group Formatters\n * @see https://daypicker.dev/docs/translation#custom-formatters\n */\nexport function formatYearDropdown(year, dateLib = defaultDateLib) {\n return dateLib.format(year, \"yyyy\");\n}\n/**\n * @private\n * @deprecated Use `formatYearDropdown` instead.\n * @group Formatters\n */\nexport const formatYearCaption = formatYearDropdown;\n","import * as defaultFormatters from \"../formatters/index.js\";\n/**\n * Merges custom formatters from the props with the default formatters.\n *\n * @param customFormatters The custom formatters provided in the DayPicker\n * props.\n * @returns The merged formatters object.\n */\nexport function getFormatters(customFormatters) {\n if (customFormatters?.formatMonthCaption && !customFormatters.formatCaption) {\n customFormatters.formatCaption = customFormatters.formatMonthCaption;\n }\n if (customFormatters?.formatYearCaption &&\n !customFormatters.formatYearDropdown) {\n customFormatters.formatYearDropdown = customFormatters.formatYearCaption;\n }\n return {\n ...defaultFormatters,\n ...customFormatters,\n };\n}\n","import { DateLib } from \"../classes/DateLib.js\";\n/**\n * Generates the ARIA label for a day button.\n *\n * Use the `modifiers` argument to provide additional context for the label,\n * such as indicating if the day is \"today\" or \"selected.\"\n *\n * @defaultValue The formatted date.\n * @param date - The date to format.\n * @param modifiers - The modifiers providing context for the day.\n * @param options - Optional configuration for the date formatting library.\n * @param dateLib - An optional instance of the date formatting library.\n * @returns The ARIA label for the day button.\n * @group Labels\n * @see https://daypicker.dev/docs/translation#aria-labels\n */\nexport function labelDayButton(date, modifiers, options, dateLib) {\n let label = (dateLib ?? new DateLib(options)).format(date, \"PPPP\");\n if (modifiers.today)\n label = `Today, ${label}`;\n if (modifiers.selected)\n label = `${label}, selected`;\n return label;\n}\n/**\n * @ignore\n * @deprecated Use `labelDayButton` instead.\n */\nexport const labelDay = labelDayButton;\n","import { DateLib } from \"../classes/DateLib.js\";\n/**\n * Generates the ARIA label for the month grid, which is announced when entering\n * the grid.\n *\n * @defaultValue Locale-specific month/year order (e.g., \"November 2022\").\n * @param date - The date representing the month.\n * @param options - Optional configuration for the date formatting library.\n * @param dateLib - An optional instance of the date formatting library.\n * @returns The ARIA label for the month grid.\n * @group Labels\n * @see https://daypicker.dev/docs/translation#aria-labels\n */\nexport function labelGrid(date, options, dateLib) {\n const lib = dateLib ?? new DateLib(options);\n return lib.formatMonthYear(date);\n}\n/**\n * @ignore\n * @deprecated Use {@link labelGrid} instead.\n */\nexport const labelCaption = labelGrid;\n","import { DateLib } from \"../classes/DateLib.js\";\n/**\n * Generates the label for a day grid cell when the calendar is not interactive.\n *\n * @param date - The date to format.\n * @param modifiers - Optional modifiers providing context for the day.\n * @param options - Optional configuration for the date formatting library.\n * @param dateLib - An optional instance of the date formatting library.\n * @returns The label for the day grid cell.\n * @group Labels\n * @see https://daypicker.dev/docs/translation#aria-labels\n */\nexport function labelGridcell(date, modifiers, options, dateLib) {\n let label = (dateLib ?? new DateLib(options)).format(date, \"PPPP\");\n if (modifiers?.today) {\n label = `Today, ${label}`;\n }\n return label;\n}\n","/**\n * Generates the ARIA label for the months dropdown.\n *\n * @defaultValue `\"Choose the Month\"`\n * @param options - Optional configuration for the date formatting library.\n * @returns The ARIA label for the months dropdown.\n * @group Labels\n * @see https://daypicker.dev/docs/translation#aria-labels\n */\nexport function labelMonthDropdown(_options) {\n return \"Choose the Month\";\n}\n","/**\n * Generates the ARIA label for the navigation toolbar.\n *\n * @defaultValue `\"\"`\n * @returns The ARIA label for the navigation toolbar.\n * @group Labels\n * @see https://daypicker.dev/docs/translation#aria-labels\n */\nexport function labelNav() {\n return \"\";\n}\n","const defaultLabel = \"Go to the Next Month\";\n/**\n * Generates the ARIA label for the \"next month\" button.\n *\n * @defaultValue `\"Go to the Next Month\"`\n * @param month - The date representing the next month, or `undefined` if there\n * is no next month.\n * @returns The ARIA label for the \"next month\" button.\n * @group Labels\n * @see https://daypicker.dev/docs/translation#aria-labels\n */\nexport function labelNext(_month, _options) {\n return defaultLabel;\n}\n","/**\n * Generates the ARIA label for the \"previous month\" button.\n *\n * @defaultValue `\"Go to the Previous Month\"`\n * @param month - The date representing the previous month, or `undefined` if\n * there is no previous month.\n * @returns The ARIA label for the \"previous month\" button.\n * @group Labels\n * @see https://daypicker.dev/docs/translation#aria-labels\n */\nexport function labelPrevious(_month) {\n return \"Go to the Previous Month\";\n}\n","import { DateLib } from \"../classes/DateLib.js\";\n/**\n * Generates the ARIA label for a weekday column header.\n *\n * @defaultValue `\"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\", \"Sunday\"`\n * @param date - The date representing the weekday.\n * @param options - Optional configuration for the date formatting library.\n * @param dateLib - An optional instance of the date formatting library.\n * @returns The ARIA label for the weekday column header.\n * @group Labels\n * @see https://daypicker.dev/docs/translation#aria-labels\n */\nexport function labelWeekday(date, options, dateLib) {\n return (dateLib ?? new DateLib(options)).format(date, \"cccc\");\n}\n","/**\n * Generates the ARIA label for the week number cell (the first cell in a row).\n *\n * @defaultValue `Week ${weekNumber}`\n * @param weekNumber - The number of the week.\n * @param options - Optional configuration for the date formatting library.\n * @returns The ARIA label for the week number cell.\n * @group Labels\n * @see https://daypicker.dev/docs/translation#aria-labels\n */\nexport function labelWeekNumber(weekNumber, _options) {\n return `Week ${weekNumber}`;\n}\n","/**\n * Generates the ARIA label for the week number header element.\n *\n * @defaultValue `\"Week Number\"`\n * @param options - Optional configuration for the date formatting library.\n * @returns The ARIA label for the week number header.\n * @group Labels\n * @see https://daypicker.dev/docs/translation#aria-labels\n */\nexport function labelWeekNumberHeader(_options) {\n return \"Week Number\";\n}\n","/**\n * Generates the ARIA label for the years dropdown.\n *\n * @defaultValue `\"Choose the Year\"`\n * @param options - Optional configuration for the date formatting library.\n * @returns The ARIA label for the years dropdown.\n * @group Labels\n * @see https://daypicker.dev/docs/translation#aria-labels\n */\nexport function labelYearDropdown(_options) {\n return \"Choose the Year\";\n}\n","import * as defaultLabels from \"../labels/index.js\";\nconst resolveLabel = (defaultLabel, customLabel, localeLabel) => {\n if (customLabel)\n return customLabel;\n if (localeLabel) {\n return (typeof localeLabel === \"function\"\n ? localeLabel\n : (..._args) => localeLabel);\n }\n return defaultLabel;\n};\n/**\n * Merges custom labels from the props with the default labels.\n *\n * When available, uses the locale-provided translation for `labelNext`.\n *\n * @param customLabels The custom labels provided in the DayPicker props.\n * @param options Options from the date library, used to resolve locale\n * translations.\n * @returns The merged labels object with locale-aware defaults.\n */\nexport function getLabels(customLabels, options) {\n const localeLabels = options.locale?.labels ?? {};\n return {\n ...defaultLabels,\n ...(customLabels ?? {}),\n labelDayButton: resolveLabel(defaultLabels.labelDayButton, customLabels?.labelDayButton, localeLabels.labelDayButton),\n labelMonthDropdown: resolveLabel(defaultLabels.labelMonthDropdown, customLabels?.labelMonthDropdown, localeLabels.labelMonthDropdown),\n labelNext: resolveLabel(defaultLabels.labelNext, customLabels?.labelNext, localeLabels.labelNext),\n labelPrevious: resolveLabel(defaultLabels.labelPrevious, customLabels?.labelPrevious, localeLabels.labelPrevious),\n labelWeekNumber: resolveLabel(defaultLabels.labelWeekNumber, customLabels?.labelWeekNumber, localeLabels.labelWeekNumber),\n labelYearDropdown: resolveLabel(defaultLabels.labelYearDropdown, customLabels?.labelYearDropdown, localeLabels.labelYearDropdown),\n labelGrid: resolveLabel(defaultLabels.labelGrid, customLabels?.labelGrid, localeLabels.labelGrid),\n labelGridcell: resolveLabel(defaultLabels.labelGridcell, customLabels?.labelGridcell, localeLabels.labelGridcell),\n labelNav: resolveLabel(defaultLabels.labelNav, customLabels?.labelNav, localeLabels.labelNav),\n labelWeekNumberHeader: resolveLabel(defaultLabels.labelWeekNumberHeader, customLabels?.labelWeekNumberHeader, localeLabels.labelWeekNumberHeader),\n labelWeekday: resolveLabel(defaultLabels.labelWeekday, customLabels?.labelWeekday, localeLabels.labelWeekday),\n };\n}\n","/**\n * Returns the months to show in the dropdown.\n *\n * This function generates a list of months for the current year, formatted\n * using the provided formatter, and determines whether each month should be\n * disabled based on the navigation range.\n *\n * @param displayMonth The currently displayed month.\n * @param navStart The start date for navigation.\n * @param navEnd The end date for navigation.\n * @param formatters The formatters to use for formatting the month labels.\n * @param dateLib The date library to use for date manipulation.\n * @returns An array of dropdown options representing the months, or `undefined`\n * if no months are available.\n */\nexport function getMonthOptions(displayMonth, navStart, navEnd, formatters, dateLib) {\n const { startOfMonth, startOfYear, endOfYear, eachMonthOfInterval, getMonth, } = dateLib;\n const months = eachMonthOfInterval({\n start: startOfYear(displayMonth),\n end: endOfYear(displayMonth),\n });\n const options = months.map((month) => {\n const label = formatters.formatMonthDropdown(month, dateLib);\n const value = getMonth(month);\n const disabled = (navStart && month < startOfMonth(navStart)) ||\n (navEnd && month > startOfMonth(navEnd)) ||\n false;\n return { value, label, disabled };\n });\n return options;\n}\n","import { UI } from \"../UI.js\";\n/**\n * Returns the computed style for a day based on its modifiers.\n *\n * This function merges the base styles for the day with any styles associated\n * with active modifiers.\n *\n * @param dayModifiers The modifiers applied to the day.\n * @param styles The base styles for the calendar elements.\n * @param modifiersStyles The styles associated with specific modifiers.\n * @returns The computed style for the day.\n */\nexport function getStyleForModifiers(dayModifiers, styles = {}, modifiersStyles = {}) {\n let style = { ...styles?.[UI.Day] };\n Object.entries(dayModifiers)\n .filter(([, active]) => active === true)\n .forEach(([modifier]) => {\n style = {\n ...style,\n ...modifiersStyles?.[modifier],\n };\n });\n return style;\n}\n","/**\n * Generates a series of 7 days, starting from the beginning of the week, to use\n * for formatting weekday names (e.g., Monday, Tuesday, etc.).\n *\n * @param dateLib The date library to use for date manipulation.\n * @param ISOWeek Whether to use ISO week numbering (weeks start on Monday).\n * @param broadcastCalendar Whether to use the broadcast calendar (weeks start\n * on Monday, but may include adjustments for broadcast-specific rules).\n * @returns An array of 7 dates representing the weekdays.\n */\nexport function getWeekdays(dateLib, ISOWeek, broadcastCalendar, today) {\n const referenceToday = today ?? dateLib.today();\n const start = broadcastCalendar\n ? dateLib.startOfBroadcastWeek(referenceToday, dateLib)\n : ISOWeek\n ? dateLib.startOfISOWeek(referenceToday)\n : dateLib.startOfWeek(referenceToday);\n const days = [];\n for (let i = 0; i < 7; i++) {\n const day = dateLib.addDays(start, i);\n days.push(day);\n }\n return days;\n}\n","/**\n * Returns the years to display in the dropdown.\n *\n * This function generates a list of years between the navigation start and end\n * dates, formatted using the provided formatter.\n *\n * @param navStart The start date for navigation.\n * @param navEnd The end date for navigation.\n * @param formatters The formatters to use for formatting the year labels.\n * @param dateLib The date library to use for date manipulation.\n * @param reverse If true, reverses the order of the years (descending).\n * @returns An array of dropdown options representing the years, or `undefined`\n * if `navStart` or `navEnd` is not provided.\n */\nexport function getYearOptions(navStart, navEnd, formatters, dateLib, reverse = false) {\n if (!navStart)\n return undefined;\n if (!navEnd)\n return undefined;\n const { startOfYear, endOfYear, eachYearOfInterval, getYear } = dateLib;\n const firstNavYear = startOfYear(navStart);\n const lastNavYear = endOfYear(navEnd);\n const years = eachYearOfInterval({ start: firstNavYear, end: lastNavYear });\n if (reverse)\n years.reverse();\n return years.map((year) => {\n const label = formatters.formatYearDropdown(year, dateLib);\n return {\n value: getYear(year),\n label,\n disabled: false,\n };\n });\n}\n","import { TZDate } from \"@date-fns/tz\";\nimport { differenceInCalendarDays as differenceInCalendarDaysFn, differenceInCalendarMonths as differenceInCalendarMonthsFn, getISOWeek as getISOWeekFn, getWeek as getWeekFn, } from \"date-fns\";\n/**\n * Creates `dateLib` overrides that keep all calendar math at noon in the target\n * time zone. This avoids second-level offset changes (e.g., historical zones\n * with +03:41:12) from pushing dates backward across midnight.\n */\nexport function createNoonOverrides(timeZone, options = {}) {\n const { weekStartsOn, locale } = options;\n const fallbackWeekStartsOn = (weekStartsOn ??\n locale?.options?.weekStartsOn ??\n 0);\n // Keep all internal math anchored at noon in the target zone to avoid\n // historical second-level offsets from crossing midnight.\n const toNoonTZDate = (date) => {\n const normalizedDate = typeof date === \"number\" || typeof date === \"string\"\n ? new Date(date)\n : date;\n return new TZDate(normalizedDate.getFullYear(), normalizedDate.getMonth(), normalizedDate.getDate(), 12, 0, 0, timeZone);\n };\n // Convert a value into a host `Date` that represents the same calendar day\n // as the target-zone noon. This is useful for helpers (e.g., date-fns week\n // utilities) that expect local `Date` instances rather than `TZDate`s.\n const toCalendarDate = (date) => {\n const zoned = toNoonTZDate(date);\n return new Date(zoned.getFullYear(), zoned.getMonth(), zoned.getDate(), 0, 0, 0, 0);\n };\n return {\n today: () => {\n return toNoonTZDate(TZDate.tz(timeZone));\n },\n newDate: (year, monthIndex, date) => {\n return new TZDate(year, monthIndex, date, 12, 0, 0, timeZone);\n },\n startOfDay: (date) => {\n return toNoonTZDate(date);\n },\n startOfWeek: (date, options) => {\n const base = toNoonTZDate(date);\n const weekStartsOnValue = (options?.weekStartsOn ??\n fallbackWeekStartsOn);\n const diff = (base.getDay() - weekStartsOnValue + 7) % 7;\n base.setDate(base.getDate() - diff);\n return base;\n },\n startOfISOWeek: (date) => {\n const base = toNoonTZDate(date);\n const diff = (base.getDay() - 1 + 7) % 7;\n base.setDate(base.getDate() - diff);\n return base;\n },\n startOfMonth: (date) => {\n const base = toNoonTZDate(date);\n base.setDate(1);\n return base;\n },\n startOfYear: (date) => {\n const base = toNoonTZDate(date);\n base.setMonth(0, 1);\n return base;\n },\n endOfWeek: (date, options) => {\n const base = toNoonTZDate(date);\n const weekStartsOnValue = (options?.weekStartsOn ??\n fallbackWeekStartsOn);\n const endDow = (weekStartsOnValue + 6) % 7;\n const diff = (endDow - base.getDay() + 7) % 7;\n base.setDate(base.getDate() + diff);\n return base;\n },\n endOfISOWeek: (date) => {\n const base = toNoonTZDate(date);\n const diff = (7 - base.getDay()) % 7;\n base.setDate(base.getDate() + diff);\n return base;\n },\n endOfMonth: (date) => {\n const base = toNoonTZDate(date);\n base.setMonth(base.getMonth() + 1, 0);\n return base;\n },\n endOfYear: (date) => {\n const base = toNoonTZDate(date);\n base.setMonth(11, 31);\n return base;\n },\n eachMonthOfInterval: (interval) => {\n const start = toNoonTZDate(interval.start);\n const end = toNoonTZDate(interval.end);\n const result = [];\n const cursor = new TZDate(start.getFullYear(), start.getMonth(), 1, 12, 0, 0, timeZone);\n const endKey = end.getFullYear() * 12 + end.getMonth();\n while (cursor.getFullYear() * 12 + cursor.getMonth() <= endKey) {\n result.push(new TZDate(cursor, timeZone));\n cursor.setMonth(cursor.getMonth() + 1, 1);\n }\n return result;\n },\n // Normalize to noon once before arithmetic (avoid DST/midnight edge cases),\n // mutate the same TZDate, and return it.\n addDays: (date, amount) => {\n const base = toNoonTZDate(date);\n base.setDate(base.getDate() + amount);\n return base;\n },\n addWeeks: (date, amount) => {\n const base = toNoonTZDate(date);\n base.setDate(base.getDate() + amount * 7);\n return base;\n },\n addMonths: (date, amount) => {\n const base = toNoonTZDate(date);\n base.setMonth(base.getMonth() + amount);\n return base;\n },\n addYears: (date, amount) => {\n const base = toNoonTZDate(date);\n base.setFullYear(base.getFullYear() + amount);\n return base;\n },\n eachYearOfInterval: (interval) => {\n const start = toNoonTZDate(interval.start);\n const end = toNoonTZDate(interval.end);\n const years = [];\n const cursor = new TZDate(start.getFullYear(), 0, 1, 12, 0, 0, timeZone);\n while (cursor.getFullYear() <= end.getFullYear()) {\n years.push(new TZDate(cursor, timeZone));\n cursor.setFullYear(cursor.getFullYear() + 1, 0, 1);\n }\n return years;\n },\n getWeek: (date, options) => {\n const base = toCalendarDate(date);\n return getWeekFn(base, {\n weekStartsOn: options?.weekStartsOn ?? fallbackWeekStartsOn,\n firstWeekContainsDate: options?.firstWeekContainsDate ??\n locale?.options?.firstWeekContainsDate ??\n 1,\n });\n },\n getISOWeek: (date) => {\n const base = toCalendarDate(date);\n return getISOWeekFn(base);\n },\n differenceInCalendarDays: (dateLeft, dateRight) => {\n const left = toCalendarDate(dateLeft);\n const right = toCalendarDate(dateRight);\n return differenceInCalendarDaysFn(left, right);\n },\n differenceInCalendarMonths: (dateLeft, dateRight) => {\n const left = toCalendarDate(dateLeft);\n const right = toCalendarDate(dateRight);\n return differenceInCalendarMonthsFn(left, right);\n },\n };\n}\n","import { useLayoutEffect, useRef } from \"react\";\nimport { Animation } from \"./UI.js\";\nconst asHtmlElement = (element) => {\n if (element instanceof HTMLElement)\n return element;\n return null;\n};\nconst queryMonthEls = (element) => [\n ...(element.querySelectorAll(\"[data-animated-month]\") ?? []),\n];\nconst queryMonthEl = (element) => asHtmlElement(element.querySelector(\"[data-animated-month]\"));\nconst queryCaptionEl = (element) => asHtmlElement(element.querySelector(\"[data-animated-caption]\"));\nconst queryWeeksEl = (element) => asHtmlElement(element.querySelector(\"[data-animated-weeks]\"));\nconst queryNavEl = (element) => asHtmlElement(element.querySelector(\"[data-animated-nav]\"));\nconst queryWeekdaysEl = (element) => asHtmlElement(element.querySelector(\"[data-animated-weekdays]\"));\n/**\n * Handles animations for transitioning between months in the DayPicker\n * component.\n *\n * @private\n * @param rootElRef - A reference to the root element of the DayPicker\n * component.\n * @param enabled - Whether animations are enabled.\n * @param options - Configuration options for the animation, including class\n * names, months, focused day, and the date utility library.\n */\nexport function useAnimation(rootElRef, enabled, { classNames, months, focused, dateLib, }) {\n const previousRootElSnapshotRef = useRef(null);\n const previousMonthsRef = useRef(months);\n const animatingRef = useRef(false);\n useLayoutEffect(() => {\n // get previous months before updating the previous months ref\n const previousMonths = previousMonthsRef.current;\n // update previous months ref for next effect trigger\n previousMonthsRef.current = months;\n if (!enabled ||\n !rootElRef.current ||\n // safety check because the ref can be set to anything by consumers\n !(rootElRef.current instanceof HTMLElement) ||\n // validation required for the animation to work as expected\n months.length === 0 ||\n previousMonths.length === 0 ||\n months.length !== previousMonths.length) {\n return;\n }\n const isSameMonth = dateLib.isSameMonth(months[0].date, previousMonths[0].date);\n const isAfterPreviousMonth = dateLib.isAfter(months[0].date, previousMonths[0].date);\n const captionAnimationClass = isAfterPreviousMonth\n ? classNames[Animation.caption_after_enter]\n : classNames[Animation.caption_before_enter];\n const weeksAnimationClass = isAfterPreviousMonth\n ? classNames[Animation.weeks_after_enter]\n : classNames[Animation.weeks_before_enter];\n // get previous root element snapshot before updating the snapshot ref\n const previousRootElSnapshot = previousRootElSnapshotRef.current;\n // update snapshot for next effect trigger\n const rootElSnapshot = rootElRef.current.cloneNode(true);\n if (rootElSnapshot instanceof HTMLElement) {\n // if this effect is triggered while animating, we need to clean up the new root snapshot\n // to put it in the same state as when not animating, to correctly animate the next month change\n const currentMonthElsSnapshot = queryMonthEls(rootElSnapshot);\n currentMonthElsSnapshot.forEach((currentMonthElSnapshot) => {\n if (!(currentMonthElSnapshot instanceof HTMLElement))\n return;\n // remove the old month snapshots from the new root snapshot\n const previousMonthElSnapshot = queryMonthEl(currentMonthElSnapshot);\n if (previousMonthElSnapshot &&\n currentMonthElSnapshot.contains(previousMonthElSnapshot)) {\n currentMonthElSnapshot.removeChild(previousMonthElSnapshot);\n }\n // remove animation classes from the new month snapshots\n const captionEl = queryCaptionEl(currentMonthElSnapshot);\n if (captionEl) {\n captionEl.classList.remove(captionAnimationClass);\n }\n const weeksEl = queryWeeksEl(currentMonthElSnapshot);\n if (weeksEl) {\n weeksEl.classList.remove(weeksAnimationClass);\n }\n });\n previousRootElSnapshotRef.current = rootElSnapshot;\n }\n else {\n previousRootElSnapshotRef.current = null;\n }\n if (animatingRef.current ||\n isSameMonth ||\n // skip animation if a day is focused because it can cause issues to the animation and is better for a11y\n focused) {\n return;\n }\n const previousMonthEls = previousRootElSnapshot instanceof HTMLElement\n ? queryMonthEls(previousRootElSnapshot)\n : [];\n const currentMonthEls = queryMonthEls(rootElRef.current);\n if (currentMonthEls?.every((el) => el instanceof HTMLElement) &&\n previousMonthEls &&\n previousMonthEls.every((el) => el instanceof HTMLElement)) {\n animatingRef.current = true;\n const cleanUpFunctions = [];\n // set isolation to isolate to isolate the stacking context during animation\n rootElRef.current.style.isolation = \"isolate\";\n // set z-index to 1 to ensure the nav is clickable over the other elements being animated\n const navEl = queryNavEl(rootElRef.current);\n if (navEl) {\n navEl.style.zIndex = \"1\";\n }\n currentMonthEls.forEach((currentMonthEl, index) => {\n const previousMonthEl = previousMonthEls[index];\n if (!previousMonthEl) {\n return;\n }\n // animate new displayed month\n currentMonthEl.style.position = \"relative\";\n currentMonthEl.style.overflow = \"hidden\";\n const captionEl = queryCaptionEl(currentMonthEl);\n if (captionEl) {\n captionEl.classList.add(captionAnimationClass);\n }\n const weeksEl = queryWeeksEl(currentMonthEl);\n if (weeksEl) {\n weeksEl.classList.add(weeksAnimationClass);\n }\n // animate new displayed month end\n const cleanUp = () => {\n animatingRef.current = false;\n if (rootElRef.current) {\n rootElRef.current.style.isolation = \"\";\n }\n if (navEl) {\n navEl.style.zIndex = \"\";\n }\n if (captionEl) {\n captionEl.classList.remove(captionAnimationClass);\n }\n if (weeksEl) {\n weeksEl.classList.remove(weeksAnimationClass);\n }\n currentMonthEl.style.position = \"\";\n currentMonthEl.style.overflow = \"\";\n if (currentMonthEl.contains(previousMonthEl)) {\n currentMonthEl.removeChild(previousMonthEl);\n }\n };\n cleanUpFunctions.push(cleanUp);\n // animate old displayed month\n previousMonthEl.style.pointerEvents = \"none\";\n previousMonthEl.style.position = \"absolute\";\n previousMonthEl.style.overflow = \"hidden\";\n previousMonthEl.setAttribute(\"aria-hidden\", \"true\");\n // hide the weekdays container of the old month and only the new one\n const previousWeekdaysEl = queryWeekdaysEl(previousMonthEl);\n if (previousWeekdaysEl) {\n previousWeekdaysEl.style.opacity = \"0\";\n }\n const previousCaptionEl = queryCaptionEl(previousMonthEl);\n if (previousCaptionEl) {\n previousCaptionEl.classList.add(isAfterPreviousMonth\n ? classNames[Animation.caption_before_exit]\n : classNames[Animation.caption_after_exit]);\n previousCaptionEl.addEventListener(\"animationend\", cleanUp);\n }\n const previousWeeksEl = queryWeeksEl(previousMonthEl);\n if (previousWeeksEl) {\n previousWeeksEl.classList.add(isAfterPreviousMonth\n ? classNames[Animation.weeks_before_exit]\n : classNames[Animation.weeks_after_exit]);\n }\n currentMonthEl.insertBefore(previousMonthEl, currentMonthEl.firstChild);\n });\n }\n });\n}\n","/**\n * Returns all the dates to display in the calendar.\n *\n * This function calculates the range of dates to display based on the provided\n * display months, constraints, and calendar configuration.\n *\n * @param displayMonths The months to display in the calendar.\n * @param maxDate The maximum date to include in the range.\n * @param props The DayPicker props, including calendar configuration options.\n * @param dateLib The date library to use for date manipulation.\n * @returns An array of dates to display in the calendar.\n */\nexport function getDates(displayMonths, maxDate, props, dateLib) {\n const firstMonth = displayMonths[0];\n const lastMonth = displayMonths[displayMonths.length - 1];\n const { ISOWeek, fixedWeeks, broadcastCalendar } = props ?? {};\n const { addDays, differenceInCalendarDays, differenceInCalendarMonths, endOfBroadcastWeek, endOfISOWeek, endOfMonth, endOfWeek, isAfter, startOfBroadcastWeek, startOfISOWeek, startOfWeek, } = dateLib;\n const startWeekFirstDate = broadcastCalendar\n ? startOfBroadcastWeek(firstMonth, dateLib)\n : ISOWeek\n ? startOfISOWeek(firstMonth)\n : startOfWeek(firstMonth);\n const displayMonthsWeekEnd = broadcastCalendar\n ? endOfBroadcastWeek(lastMonth)\n : ISOWeek\n ? endOfISOWeek(endOfMonth(lastMonth))\n : endOfWeek(endOfMonth(lastMonth));\n // If maxDate is set, clamp the grid to the end of that week.\n const constraintWeekEnd = maxDate &&\n (broadcastCalendar\n ? endOfBroadcastWeek(maxDate)\n : ISOWeek\n ? endOfISOWeek(maxDate)\n : endOfWeek(maxDate));\n // Pick the earliest week end between the displayed months and the constraint.\n const gridEndDate = constraintWeekEnd && isAfter(displayMonthsWeekEnd, constraintWeekEnd)\n ? constraintWeekEnd\n : displayMonthsWeekEnd;\n const nOfDays = differenceInCalendarDays(gridEndDate, startWeekFirstDate);\n const nOfMonths = differenceInCalendarMonths(lastMonth, firstMonth) + 1;\n const dates = [];\n for (let i = 0; i <= nOfDays; i++) {\n const date = addDays(startWeekFirstDate, i);\n dates.push(date);\n }\n // If fixed weeks is enabled, add the extra dates to the array\n const nrOfDaysWithFixedWeeks = broadcastCalendar ? 35 : 42;\n const extraDates = nrOfDaysWithFixedWeeks * nOfMonths;\n if (fixedWeeks && dates.length < extraDates) {\n const daysToAdd = extraDates - dates.length;\n for (let i = 0; i < daysToAdd; i++) {\n const date = addDays(dates[dates.length - 1], 1);\n dates.push(date);\n }\n }\n return dates;\n}\n","/**\n * Returns all the days belonging to the calendar by merging the days in the\n * weeks for each month.\n *\n * @param calendarMonths The array of calendar months.\n * @returns An array of `CalendarDay` objects representing all the days in the\n * calendar.\n */\nexport function getDays(calendarMonths) {\n const initialDays = [];\n return calendarMonths.reduce((days, month) => {\n const weekDays = month.weeks.reduce((weekDays, week) => {\n return weekDays.concat(week.days.slice());\n }, initialDays.slice());\n return days.concat(weekDays.slice());\n }, initialDays.slice());\n}\n","/**\n * Returns the months to display in the calendar.\n *\n * @param firstDisplayedMonth The first month currently displayed in the\n * calendar.\n * @param calendarEndMonth The latest month the user can navigate to.\n * @param props The DayPicker props, including `numberOfMonths`.\n * @param dateLib The date library to use for date manipulation.\n * @returns An array of dates representing the months to display.\n */\nexport function getDisplayMonths(firstDisplayedMonth, calendarEndMonth, props, dateLib) {\n const { numberOfMonths = 1 } = props;\n const months = [];\n for (let i = 0; i < numberOfMonths; i++) {\n const month = dateLib.addMonths(firstDisplayedMonth, i);\n if (calendarEndMonth && month > calendarEndMonth) {\n break;\n }\n months.push(month);\n }\n return months;\n}\n","/**\n * Determines the initial month to display in the calendar based on the provided\n * props.\n *\n * This function calculates the starting month, considering constraints such as\n * `startMonth`, `endMonth`, and the number of months to display.\n *\n * @param props The DayPicker props, including navigation and date constraints.\n * @param dateLib The date library to use for date manipulation.\n * @returns The initial month to display.\n */\nexport function getInitialMonth(props, navStart, navEnd, dateLib) {\n const { month, defaultMonth, today = dateLib.today(), numberOfMonths = 1, } = props;\n let initialMonth = month || defaultMonth || today;\n const { differenceInCalendarMonths, addMonths, startOfMonth } = dateLib;\n if (navEnd &&\n differenceInCalendarMonths(navEnd, initialMonth) < numberOfMonths - 1) {\n const offset = -1 * (numberOfMonths - 1);\n initialMonth = addMonths(navEnd, offset);\n }\n if (navStart && differenceInCalendarMonths(initialMonth, navStart) < 0) {\n initialMonth = navStart;\n }\n return startOfMonth(initialMonth);\n}\n","import { CalendarDay, CalendarMonth, CalendarWeek } from \"../classes/index.js\";\n/**\n * Returns the months to display in the calendar.\n *\n * This function generates `CalendarMonth` objects for each month to be\n * displayed, including their weeks and days, based on the provided display\n * months and dates.\n *\n * @param displayMonths The months (as dates) to display in the calendar.\n * @param dates The dates to display in the calendar.\n * @param props Options from the DayPicker props context.\n * @param dateLib The date library to use for date manipulation.\n * @returns An array of `CalendarMonth` objects representing the months to\n * display.\n */\nexport function getMonths(displayMonths, dates, props, dateLib) {\n const { addDays, endOfBroadcastWeek, endOfISOWeek, endOfMonth, endOfWeek, getISOWeek, getWeek, startOfBroadcastWeek, startOfISOWeek, startOfWeek, } = dateLib;\n const dayPickerMonths = displayMonths.reduce((months, month) => {\n const firstDateOfFirstWeek = props.broadcastCalendar\n ? startOfBroadcastWeek(month, dateLib)\n : props.ISOWeek\n ? startOfISOWeek(month)\n : startOfWeek(month);\n const lastDateOfLastWeek = props.broadcastCalendar\n ? endOfBroadcastWeek(month)\n : props.ISOWeek\n ? endOfISOWeek(endOfMonth(month))\n : endOfWeek(endOfMonth(month));\n /** The dates to display in the month. */\n const monthDates = dates.filter((date) => {\n return date >= firstDateOfFirstWeek && date <= lastDateOfLastWeek;\n });\n const nrOfDaysWithFixedWeeks = props.broadcastCalendar ? 35 : 42;\n if (props.fixedWeeks && monthDates.length < nrOfDaysWithFixedWeeks) {\n const extraDates = dates.filter((date) => {\n const daysToAdd = nrOfDaysWithFixedWeeks - monthDates.length;\n return (date > lastDateOfLastWeek &&\n date <= addDays(lastDateOfLastWeek, daysToAdd));\n });\n monthDates.push(...extraDates);\n }\n const weeks = monthDates.reduce((weeks, date) => {\n const weekNumber = props.ISOWeek ? getISOWeek(date) : getWeek(date);\n const week = weeks.find((week) => week.weekNumber === weekNumber);\n const day = new CalendarDay(date, month, dateLib);\n if (!week) {\n weeks.push(new CalendarWeek(weekNumber, [day]));\n }\n else {\n week.days.push(day);\n }\n return weeks;\n }, []);\n const dayPickerMonth = new CalendarMonth(month, weeks);\n months.push(dayPickerMonth);\n return months;\n }, []);\n if (!props.reverseMonths) {\n return dayPickerMonths;\n }\n else {\n return dayPickerMonths.reverse();\n }\n}\n","/**\n * Returns the start and end months for calendar navigation.\n *\n * @param props The DayPicker props, including navigation and layout options.\n * @param dateLib The date library to use for date manipulation.\n * @returns A tuple containing the start and end months for navigation.\n */\nexport function getNavMonths(props, dateLib) {\n let { startMonth, endMonth } = props;\n const { startOfYear, startOfDay, startOfMonth, endOfMonth, addYears, endOfYear, newDate, today, } = dateLib;\n // Handle deprecated code\n const { fromYear, toYear, fromMonth, toMonth } = props;\n if (!startMonth && fromMonth) {\n startMonth = fromMonth;\n }\n if (!startMonth && fromYear) {\n startMonth = dateLib.newDate(fromYear, 0, 1);\n }\n if (!endMonth && toMonth) {\n endMonth = toMonth;\n }\n if (!endMonth && toYear) {\n endMonth = newDate(toYear, 11, 31);\n }\n const hasYearDropdown = props.captionLayout === \"dropdown\" ||\n props.captionLayout === \"dropdown-years\";\n if (startMonth) {\n startMonth = startOfMonth(startMonth);\n }\n else if (fromYear) {\n startMonth = newDate(fromYear, 0, 1);\n }\n else if (!startMonth && hasYearDropdown) {\n startMonth = startOfYear(addYears(props.today ?? today(), -100));\n }\n if (endMonth) {\n endMonth = endOfMonth(endMonth);\n }\n else if (toYear) {\n endMonth = newDate(toYear, 11, 31);\n }\n else if (!endMonth && hasYearDropdown) {\n endMonth = endOfYear(props.today ?? today());\n }\n return [\n startMonth ? startOfDay(startMonth) : startMonth,\n endMonth ? startOfDay(endMonth) : endMonth,\n ];\n}\n","/**\n * Returns the next month the user can navigate to, based on the given options.\n *\n * The next month is not always the next calendar month:\n *\n * - If it is after the `calendarEndMonth`, it returns `undefined`.\n * - If paged navigation is enabled, it skips forward by the number of displayed\n * months.\n *\n * @param firstDisplayedMonth The first month currently displayed in the\n * calendar.\n * @param calendarEndMonth The latest month the user can navigate to.\n * @param options Navigation options, including `numberOfMonths` and\n * `pagedNavigation`.\n * @param dateLib The date library to use for date manipulation.\n * @returns The next month, or `undefined` if navigation is not possible.\n */\nexport function getNextMonth(firstDisplayedMonth, calendarEndMonth, options, dateLib) {\n if (options.disableNavigation) {\n return undefined;\n }\n const { pagedNavigation, numberOfMonths = 1 } = options;\n const { startOfMonth, addMonths, differenceInCalendarMonths } = dateLib;\n const offset = pagedNavigation ? numberOfMonths : 1;\n const month = startOfMonth(firstDisplayedMonth);\n if (!calendarEndMonth) {\n return addMonths(month, offset);\n }\n const monthsDiff = differenceInCalendarMonths(calendarEndMonth, firstDisplayedMonth);\n if (monthsDiff < numberOfMonths) {\n return undefined;\n }\n return addMonths(month, offset);\n}\n","/**\n * Returns the previous month the user can navigate to, based on the given\n * options.\n *\n * The previous month is not always the previous calendar month:\n *\n * - If it is before the `calendarStartMonth`, it returns `undefined`.\n * - If paged navigation is enabled, it skips back by the number of displayed\n * months.\n *\n * @param firstDisplayedMonth The first month currently displayed in the\n * calendar.\n * @param calendarStartMonth The earliest month the user can navigate to.\n * @param options Navigation options, including `numberOfMonths` and\n * `pagedNavigation`.\n * @param dateLib The date library to use for date manipulation.\n * @returns The previous month, or `undefined` if navigation is not possible.\n */\nexport function getPreviousMonth(firstDisplayedMonth, calendarStartMonth, options, dateLib) {\n if (options.disableNavigation) {\n return undefined;\n }\n const { pagedNavigation, numberOfMonths } = options;\n const { startOfMonth, addMonths, differenceInCalendarMonths } = dateLib;\n const offset = pagedNavigation ? (numberOfMonths ?? 1) : 1;\n const month = startOfMonth(firstDisplayedMonth);\n if (!calendarStartMonth) {\n return addMonths(month, -offset);\n }\n const monthsDiff = differenceInCalendarMonths(month, calendarStartMonth);\n if (monthsDiff <= 0) {\n return undefined;\n }\n return addMonths(month, -offset);\n}\n","/**\n * Returns an array of calendar weeks from an array of calendar months.\n *\n * @param months The array of calendar months.\n * @returns An array of calendar weeks.\n */\nexport function getWeeks(months) {\n const initialWeeks = [];\n return months.reduce((weeks, month) => {\n return weeks.concat(month.weeks.slice());\n }, initialWeeks.slice());\n}\n","import { useState } from \"react\";\n/**\n * A custom hook for managing both controlled and uncontrolled component states.\n *\n * This hook allows a component to support both controlled and uncontrolled\n * states by determining whether the `controlledValue` is provided. If it is\n * undefined, the hook falls back to using the internal state.\n *\n * @example\n * // Uncontrolled usage\n * const [value, setValue] = useControlledValue(0, undefined);\n *\n * // Controlled usage\n * const [value, setValue] = useControlledValue(0, props.value);\n *\n * @template T - The type of the value.\n * @param defaultValue The initial value for the uncontrolled state.\n * @param controlledValue The value for the controlled state. If undefined, the\n * component will use the uncontrolled state.\n * @returns A tuple where the first element is the current value (either\n * controlled or uncontrolled) and the second element is a setter function to\n * update the value.\n */\nexport function useControlledValue(defaultValue, controlledValue) {\n const [uncontrolledValue, setValue] = useState(defaultValue);\n const value = controlledValue === undefined ? uncontrolledValue : controlledValue;\n return [value, setValue];\n}\n","import { useEffect, useMemo } from \"react\";\nimport { getDates } from \"./helpers/getDates.js\";\nimport { getDays } from \"./helpers/getDays.js\";\nimport { getDisplayMonths } from \"./helpers/getDisplayMonths.js\";\nimport { getInitialMonth } from \"./helpers/getInitialMonth.js\";\nimport { getMonths } from \"./helpers/getMonths.js\";\nimport { getNavMonths } from \"./helpers/getNavMonth.js\";\nimport { getNextMonth } from \"./helpers/getNextMonth.js\";\nimport { getPreviousMonth } from \"./helpers/getPreviousMonth.js\";\nimport { getWeeks } from \"./helpers/getWeeks.js\";\nimport { useControlledValue } from \"./helpers/useControlledValue.js\";\n/**\n * Provides the calendar object to work with the calendar in custom components.\n *\n * @private\n * @param props - The DayPicker props related to calendar configuration.\n * @param dateLib - The date utility library instance.\n * @returns The calendar object containing displayed days, weeks, months, and\n * navigation methods.\n */\nexport function useCalendar(props, dateLib) {\n const [navStart, navEnd] = getNavMonths(props, dateLib);\n const { startOfMonth, endOfMonth } = dateLib;\n const initialMonth = getInitialMonth(props, navStart, navEnd, dateLib);\n const [firstMonth, setFirstMonth] = useControlledValue(initialMonth, \n // initialMonth is always computed from props.month if provided\n props.month ? initialMonth : undefined);\n // biome-ignore lint/correctness/useExhaustiveDependencies: change the initial month when the time zone changes.\n useEffect(() => {\n const newInitialMonth = getInitialMonth(props, navStart, navEnd, dateLib);\n setFirstMonth(newInitialMonth);\n }, [props.timeZone]);\n /** The months displayed in the calendar. */\n // biome-ignore lint/correctness/useExhaustiveDependencies: We want to recompute only when specific props change.\n const { months, weeks, days, previousMonth, nextMonth } = useMemo(() => {\n const displayMonths = getDisplayMonths(firstMonth, navEnd, { numberOfMonths: props.numberOfMonths }, dateLib);\n const dates = getDates(displayMonths, props.endMonth ? endOfMonth(props.endMonth) : undefined, {\n ISOWeek: props.ISOWeek,\n fixedWeeks: props.fixedWeeks,\n broadcastCalendar: props.broadcastCalendar,\n }, dateLib);\n const months = getMonths(displayMonths, dates, {\n broadcastCalendar: props.broadcastCalendar,\n fixedWeeks: props.fixedWeeks,\n ISOWeek: props.ISOWeek,\n reverseMonths: props.reverseMonths,\n }, dateLib);\n const weeks = getWeeks(months);\n const days = getDays(months);\n const previousMonth = getPreviousMonth(firstMonth, navStart, props, dateLib);\n const nextMonth = getNextMonth(firstMonth, navEnd, props, dateLib);\n return {\n months,\n weeks,\n days,\n previousMonth,\n nextMonth,\n };\n }, [\n dateLib,\n firstMonth.getTime(),\n navEnd?.getTime(),\n navStart?.getTime(),\n props.disableNavigation,\n props.broadcastCalendar,\n props.endMonth?.getTime(),\n props.fixedWeeks,\n props.ISOWeek,\n props.numberOfMonths,\n props.pagedNavigation,\n props.reverseMonths,\n ]);\n const { disableNavigation, onMonthChange } = props;\n const isDayInCalendar = (day) => weeks.some((week) => week.days.some((d) => d.isEqualTo(day)));\n const goToMonth = (date) => {\n if (disableNavigation) {\n return;\n }\n let newMonth = startOfMonth(date);\n // if month is before start, use the first month instead\n if (navStart && newMonth < startOfMonth(navStart)) {\n newMonth = startOfMonth(navStart);\n }\n // if month is after endMonth, use the last month instead\n if (navEnd && newMonth > startOfMonth(navEnd)) {\n newMonth = startOfMonth(navEnd);\n }\n setFirstMonth(newMonth);\n onMonthChange?.(newMonth);\n };\n const goToDay = (day) => {\n // is this check necessary?\n if (isDayInCalendar(day)) {\n return;\n }\n goToMonth(day.date);\n };\n const calendar = {\n months,\n weeks,\n days,\n navStart,\n navEnd,\n previousMonth,\n nextMonth,\n goToMonth,\n goToDay,\n };\n return calendar;\n}\n","import { DayFlag } from \"../UI.js\";\nvar FocusTargetPriority;\n(function (FocusTargetPriority) {\n FocusTargetPriority[FocusTargetPriority[\"Today\"] = 0] = \"Today\";\n FocusTargetPriority[FocusTargetPriority[\"Selected\"] = 1] = \"Selected\";\n FocusTargetPriority[FocusTargetPriority[\"LastFocused\"] = 2] = \"LastFocused\";\n FocusTargetPriority[FocusTargetPriority[\"FocusedModifier\"] = 3] = \"FocusedModifier\";\n})(FocusTargetPriority || (FocusTargetPriority = {}));\n/**\n * Determines if a day is focusable based on its modifiers.\n *\n * A day is considered focusable if it is not disabled, hidden, or outside the\n * displayed month.\n *\n * @param modifiers The modifiers applied to the day.\n * @returns `true` if the day is focusable, otherwise `false`.\n */\nfunction isFocusableDay(modifiers) {\n return (!modifiers[DayFlag.disabled] &&\n !modifiers[DayFlag.hidden] &&\n !modifiers[DayFlag.outside]);\n}\n/**\n * Calculates the focus target day based on priority.\n *\n * This function determines the day that should receive focus in the calendar,\n * prioritizing days with specific modifiers (e.g., \"focused\", \"today\") or\n * selection states.\n *\n * @param days The array of `CalendarDay` objects to evaluate.\n * @param getModifiers A function to retrieve the modifiers for a given day.\n * @param isSelected A function to determine if a day is selected.\n * @param lastFocused The last focused day, if any.\n * @returns The `CalendarDay` that should receive focus, or `undefined` if no\n * focusable day is found.\n */\nexport function calculateFocusTarget(days, getModifiers, isSelected, lastFocused) {\n let focusTarget;\n let foundFocusTargetPriority = -1;\n for (const day of days) {\n const modifiers = getModifiers(day);\n if (isFocusableDay(modifiers)) {\n if (modifiers[DayFlag.focused] &&\n foundFocusTargetPriority < FocusTargetPriority.FocusedModifier) {\n focusTarget = day;\n foundFocusTargetPriority = FocusTargetPriority.FocusedModifier;\n }\n else if (lastFocused?.isEqualTo(day) &&\n foundFocusTargetPriority < FocusTargetPriority.LastFocused) {\n focusTarget = day;\n foundFocusTargetPriority = FocusTargetPriority.LastFocused;\n }\n else if (isSelected(day.date) &&\n foundFocusTargetPriority < FocusTargetPriority.Selected) {\n focusTarget = day;\n foundFocusTargetPriority = FocusTargetPriority.Selected;\n }\n else if (modifiers[DayFlag.today] &&\n foundFocusTargetPriority < FocusTargetPriority.Today) {\n focusTarget = day;\n foundFocusTargetPriority = FocusTargetPriority.Today;\n }\n }\n }\n if (!focusTarget) {\n // Return the first day that is focusable\n focusTarget = days.find((day) => isFocusableDay(getModifiers(day)));\n }\n return focusTarget;\n}\n","/**\n * Calculates the next date that should be focused in the calendar.\n *\n * This function determines the next focusable date based on the movement\n * direction, constraints, and calendar configuration.\n *\n * @param moveBy The unit of movement (e.g., \"day\", \"week\").\n * @param moveDir The direction of movement (\"before\" or \"after\").\n * @param refDate The reference date from which to calculate the next focusable\n * date.\n * @param navStart The earliest date the user can navigate to.\n * @param navEnd The latest date the user can navigate to.\n * @param props The DayPicker props, including calendar configuration options.\n * @param dateLib The date library to use for date manipulation.\n * @returns The next focusable date.\n */\nexport function getFocusableDate(moveBy, moveDir, refDate, navStart, navEnd, props, dateLib) {\n const { ISOWeek, broadcastCalendar } = props;\n const { addDays, addMonths, addWeeks, addYears, endOfBroadcastWeek, endOfISOWeek, endOfWeek, max, min, startOfBroadcastWeek, startOfISOWeek, startOfWeek, } = dateLib;\n const moveFns = {\n day: addDays,\n week: addWeeks,\n month: addMonths,\n year: addYears,\n startOfWeek: (date) => broadcastCalendar\n ? startOfBroadcastWeek(date, dateLib)\n : ISOWeek\n ? startOfISOWeek(date)\n : startOfWeek(date),\n endOfWeek: (date) => broadcastCalendar\n ? endOfBroadcastWeek(date)\n : ISOWeek\n ? endOfISOWeek(date)\n : endOfWeek(date),\n };\n let focusableDate = moveFns[moveBy](refDate, moveDir === \"after\" ? 1 : -1);\n if (moveDir === \"before\" && navStart) {\n focusableDate = max([navStart, focusableDate]);\n }\n else if (moveDir === \"after\" && navEnd) {\n focusableDate = min([navEnd, focusableDate]);\n }\n return focusableDate;\n}\n","import { CalendarDay } from \"../classes/index.js\";\nimport { dateMatchModifiers } from \"../utils/dateMatchModifiers.js\";\nimport { getFocusableDate } from \"./getFocusableDate.js\";\n/**\n * Determines the next focusable day in the calendar.\n *\n * This function recursively calculates the next focusable day based on the\n * movement direction and modifiers applied to the days.\n *\n * @param moveBy The unit of movement (e.g., \"day\", \"week\").\n * @param moveDir The direction of movement (\"before\" or \"after\").\n * @param refDay The currently focused day.\n * @param calendarStartMonth The earliest month the user can navigate to.\n * @param calendarEndMonth The latest month the user can navigate to.\n * @param props The DayPicker props, including modifiers and configuration\n * options.\n * @param dateLib The date library to use for date manipulation.\n * @param attempt The current recursion attempt (used to limit recursion depth).\n * @returns The next focusable day, or `undefined` if no focusable day is found.\n */\nexport function getNextFocus(moveBy, moveDir, refDay, calendarStartMonth, calendarEndMonth, props, dateLib, attempt = 0) {\n if (attempt > 365) {\n // Limit the recursion to 365 attempts\n return undefined;\n }\n const focusableDate = getFocusableDate(moveBy, moveDir, refDay.date, calendarStartMonth, calendarEndMonth, props, dateLib);\n const isDisabled = Boolean(props.disabled &&\n dateMatchModifiers(focusableDate, props.disabled, dateLib));\n const isHidden = Boolean(props.hidden && dateMatchModifiers(focusableDate, props.hidden, dateLib));\n const targetMonth = focusableDate;\n const focusDay = new CalendarDay(focusableDate, targetMonth, dateLib);\n if (!isDisabled && !isHidden) {\n return focusDay;\n }\n // Recursively attempt to find the next focusable date\n return getNextFocus(moveBy, moveDir, focusDay, calendarStartMonth, calendarEndMonth, props, dateLib, attempt + 1);\n}\n","import { useState } from \"react\";\nimport { calculateFocusTarget } from \"./helpers/calculateFocusTarget.js\";\nimport { getNextFocus } from \"./helpers/getNextFocus.js\";\n/**\n * Manages focus behavior for the DayPicker component, including setting,\n * moving, and blurring focus on calendar days.\n *\n * @template T - The type of DayPicker props.\n * @param props - The DayPicker props.\n * @param calendar - The calendar object containing the displayed days and\n * months.\n * @param getModifiers - A function to retrieve modifiers for a given day.\n * @param isSelected - A function to check if a date is selected.\n * @param dateLib - The date utility library instance.\n * @returns An object containing focus-related methods and the currently focused\n * day.\n */\nexport function useFocus(props, calendar, getModifiers, isSelected, dateLib) {\n const { autoFocus } = props;\n const [lastFocused, setLastFocused] = useState();\n const focusTarget = calculateFocusTarget(calendar.days, getModifiers, isSelected || (() => false), lastFocused);\n const [focusedDay, setFocused] = useState(autoFocus ? focusTarget : undefined);\n const blur = () => {\n setLastFocused(focusedDay);\n setFocused(undefined);\n };\n const moveFocus = (moveBy, moveDir) => {\n if (!focusedDay)\n return;\n const nextFocus = getNextFocus(moveBy, moveDir, focusedDay, calendar.navStart, calendar.navEnd, props, dateLib);\n if (!nextFocus)\n return;\n if (props.disableNavigation) {\n const isNextInCalendar = calendar.days.some((day) => day.isEqualTo(nextFocus));\n if (!isNextInCalendar) {\n return;\n }\n }\n calendar.goToDay(nextFocus);\n setFocused(nextFocus);\n };\n const isFocusTarget = (day) => {\n return Boolean(focusTarget?.isEqualTo(day));\n };\n const useFocus = {\n isFocusTarget,\n setFocused,\n focused: focusedDay,\n blur,\n moveFocus,\n };\n return useFocus;\n}\n","import { useControlledValue } from \"../helpers/useControlledValue.js\";\n/**\n * Hook to manage multiple-date selection in the DayPicker component.\n *\n * @template T - The type of DayPicker props.\n * @param props - The DayPicker props.\n * @param dateLib - The date utility library instance.\n * @returns An object containing the selected dates, a function to select dates,\n * and a function to check if a date is selected.\n */\nexport function useMulti(props, dateLib) {\n const { selected: initiallySelected, required, onSelect, } = props;\n const [internallySelected, setSelected] = useControlledValue(initiallySelected, onSelect ? initiallySelected : undefined);\n const selected = !onSelect ? internallySelected : initiallySelected;\n const { isSameDay } = dateLib;\n const isSelected = (date) => {\n return selected?.some((d) => isSameDay(d, date)) ?? false;\n };\n const { min, max } = props;\n const select = (triggerDate, modifiers, e) => {\n let newDates = [...(selected ?? [])];\n if (isSelected(triggerDate)) {\n if (selected?.length === min) {\n // Min value reached, do nothing\n return;\n }\n if (required && selected?.length === 1) {\n // Required value already selected do nothing\n return;\n }\n newDates = selected?.filter((d) => !isSameDay(d, triggerDate));\n }\n else {\n if (selected?.length === max) {\n // Max value reached, reset the selection to date\n newDates = [triggerDate];\n }\n else {\n // Add the date to the selection\n newDates = [...newDates, triggerDate];\n }\n }\n if (!onSelect) {\n setSelected(newDates);\n }\n onSelect?.(newDates, triggerDate, modifiers, e);\n return newDates;\n };\n return {\n selected,\n select,\n isSelected,\n };\n}\n","import { defaultDateLib } from \"../classes/DateLib.js\";\n/**\n * Adds a date to an existing range, considering constraints like minimum and\n * maximum range size.\n *\n * @param date - The date to add to the range.\n * @param initialRange - The initial range to which the date will be added.\n * @param min - The minimum number of days in the range.\n * @param max - The maximum number of days in the range.\n * @param required - Whether the range must always include at least one date.\n * @param dateLib - The date utility library instance.\n * @returns The updated date range, or `undefined` if the range is cleared.\n * @group Utilities\n */\nexport function addToRange(date, initialRange, min = 0, max = 0, required = false, dateLib = defaultDateLib) {\n const { from, to } = initialRange || {};\n const { isSameDay, isAfter, isBefore } = dateLib;\n let range;\n if (!from && !to) {\n // the range is empty, add the date\n range = { from: date, to: min > 0 ? undefined : date };\n }\n else if (from && !to) {\n // adding date to an incomplete range\n if (isSameDay(from, date)) {\n // adding a date equal to the start of the range\n if (min === 0) {\n range = { from, to: date };\n }\n else if (required) {\n range = { from, to: undefined };\n }\n else {\n range = undefined;\n }\n }\n else if (isBefore(date, from)) {\n // adding a date before the start of the range\n range = { from: date, to: from };\n }\n else {\n // adding a date after the start of the range\n range = { from, to: date };\n }\n }\n else if (from && to) {\n // adding date to a complete range\n if (isSameDay(from, date) && isSameDay(to, date)) {\n // adding a date that is equal to both start and end of the range\n if (required) {\n range = { from, to };\n }\n else {\n range = undefined;\n }\n }\n else if (isSameDay(from, date)) {\n // adding a date equal to the the start of the range\n range = { from, to: min > 0 ? undefined : date };\n }\n else if (isSameDay(to, date)) {\n // adding a dare equal to the end of the range\n range = { from: date, to: min > 0 ? undefined : date };\n }\n else if (isBefore(date, from)) {\n // adding a date before the start of the range\n range = { from: date, to: to };\n }\n else if (isAfter(date, from)) {\n // adding a date after the start of the range\n range = { from, to: date };\n }\n else if (isAfter(date, to)) {\n // adding a date after the end of the range\n range = { from, to: date };\n }\n else {\n throw new Error(\"Invalid range\");\n }\n }\n // check for min / max\n if (range?.from && range?.to) {\n const diff = dateLib.differenceInCalendarDays(range.to, range.from);\n if (max > 0 && diff > max) {\n range = { from: date, to: undefined };\n }\n else if (min > 1 && diff < min) {\n range = { from: date, to: undefined };\n }\n }\n return range;\n}\n","import { defaultDateLib } from \"../classes/DateLib.js\";\n/**\n * Checks if a date range contains one or more specified days of the week.\n *\n * @since 9.2.2\n * @param range - The date range to check.\n * @param dayOfWeek - The day(s) of the week to check for (`0-6`, where `0` is\n * Sunday).\n * @param dateLib - The date utility library instance.\n * @returns `true` if the range contains the specified day(s) of the week,\n * otherwise `false`.\n * @group Utilities\n */\nexport function rangeContainsDayOfWeek(range, dayOfWeek, dateLib = defaultDateLib) {\n const dayOfWeekArr = !Array.isArray(dayOfWeek) ? [dayOfWeek] : dayOfWeek;\n let date = range.from;\n const totalDays = dateLib.differenceInCalendarDays(range.to, range.from);\n // iterate at maximum one week or the total days if the range is shorter than one week\n const totalDaysLimit = Math.min(totalDays, 6);\n for (let i = 0; i <= totalDaysLimit; i++) {\n if (dayOfWeekArr.includes(date.getDay())) {\n return true;\n }\n date = dateLib.addDays(date, 1);\n }\n return false;\n}\n","import { defaultDateLib } from \"../classes/index.js\";\nimport { rangeIncludesDate } from \"./rangeIncludesDate.js\";\n/**\n * Determines if two date ranges overlap.\n *\n * @since 9.2.2\n * @param rangeLeft - The first date range.\n * @param rangeRight - The second date range.\n * @param dateLib - The date utility library instance.\n * @returns `true` if the ranges overlap, otherwise `false`.\n * @group Utilities\n */\nexport function rangeOverlaps(rangeLeft, rangeRight, dateLib = defaultDateLib) {\n return (rangeIncludesDate(rangeLeft, rangeRight.from, false, dateLib) ||\n rangeIncludesDate(rangeLeft, rangeRight.to, false, dateLib) ||\n rangeIncludesDate(rangeRight, rangeLeft.from, false, dateLib) ||\n rangeIncludesDate(rangeRight, rangeLeft.to, false, dateLib));\n}\n","import { defaultDateLib } from \"../classes/DateLib.js\";\nimport { dateMatchModifiers } from \"./dateMatchModifiers.js\";\nimport { rangeContainsDayOfWeek } from \"./rangeContainsDayOfWeek.js\";\nimport { rangeIncludesDate } from \"./rangeIncludesDate.js\";\nimport { rangeOverlaps } from \"./rangeOverlaps.js\";\nimport { isDateAfterType, isDateBeforeType, isDateInterval, isDateRange, isDatesArray, isDayOfWeekType, } from \"./typeguards.js\";\n/**\n * Checks if a date range contains dates that match the given modifiers.\n *\n * @since 9.2.2\n * @param range - The date range to check.\n * @param modifiers - The modifiers to match against.\n * @param dateLib - The date utility library instance.\n * @returns `true` if the range contains matching dates, otherwise `false`.\n * @group Utilities\n */\nexport function rangeContainsModifiers(range, modifiers, dateLib = defaultDateLib) {\n const matchers = Array.isArray(modifiers) ? modifiers : [modifiers];\n // Defer function matchers evaluation as they are the least performant.\n const nonFunctionMatchers = matchers.filter((matcher) => typeof matcher !== \"function\");\n const nonFunctionMatchersResult = nonFunctionMatchers.some((matcher) => {\n if (typeof matcher === \"boolean\")\n return matcher;\n if (dateLib.isDate(matcher)) {\n return rangeIncludesDate(range, matcher, false, dateLib);\n }\n if (isDatesArray(matcher, dateLib)) {\n return matcher.some((date) => rangeIncludesDate(range, date, false, dateLib));\n }\n if (isDateRange(matcher)) {\n if (matcher.from && matcher.to) {\n return rangeOverlaps(range, { from: matcher.from, to: matcher.to }, dateLib);\n }\n return false;\n }\n if (isDayOfWeekType(matcher)) {\n return rangeContainsDayOfWeek(range, matcher.dayOfWeek, dateLib);\n }\n if (isDateInterval(matcher)) {\n const isClosedInterval = dateLib.isAfter(matcher.before, matcher.after);\n if (isClosedInterval) {\n return rangeOverlaps(range, {\n from: dateLib.addDays(matcher.after, 1),\n to: dateLib.addDays(matcher.before, -1),\n }, dateLib);\n }\n return (dateMatchModifiers(range.from, matcher, dateLib) ||\n dateMatchModifiers(range.to, matcher, dateLib));\n }\n if (isDateAfterType(matcher) || isDateBeforeType(matcher)) {\n return (dateMatchModifiers(range.from, matcher, dateLib) ||\n dateMatchModifiers(range.to, matcher, dateLib));\n }\n return false;\n });\n if (nonFunctionMatchersResult) {\n return true;\n }\n const functionMatchers = matchers.filter((matcher) => typeof matcher === \"function\");\n if (functionMatchers.length) {\n let date = range.from;\n const totalDays = dateLib.differenceInCalendarDays(range.to, range.from);\n for (let i = 0; i <= totalDays; i++) {\n if (functionMatchers.some((matcher) => matcher(date))) {\n return true;\n }\n date = dateLib.addDays(date, 1);\n }\n }\n return false;\n}\n","import { useControlledValue } from \"../helpers/useControlledValue.js\";\nimport { addToRange, rangeContainsModifiers } from \"../utils/index.js\";\nimport { rangeIncludesDate } from \"../utils/rangeIncludesDate.js\";\n/**\n * Hook to manage range selection in the DayPicker component.\n *\n * @template T - The type of DayPicker props.\n * @param props - The DayPicker props.\n * @param dateLib - The date utility library instance.\n * @returns An object containing the selected range, a function to select a\n * range, and a function to check if a date is within the range.\n */\nexport function useRange(props, dateLib) {\n const { disabled, excludeDisabled, selected: initiallySelected, required, onSelect, } = props;\n const [internallySelected, setSelected] = useControlledValue(initiallySelected, onSelect ? initiallySelected : undefined);\n const selected = !onSelect ? internallySelected : initiallySelected;\n const isSelected = (date) => selected && rangeIncludesDate(selected, date, false, dateLib);\n const select = (triggerDate, modifiers, e) => {\n const { min, max } = props;\n const newRange = triggerDate\n ? addToRange(triggerDate, selected, min, max, required, dateLib)\n : undefined;\n if (excludeDisabled && disabled && newRange?.from && newRange.to) {\n if (rangeContainsModifiers({ from: newRange.from, to: newRange.to }, disabled, dateLib)) {\n // if a disabled days is found, the range is reset\n newRange.from = triggerDate;\n newRange.to = undefined;\n }\n }\n if (!onSelect) {\n setSelected(newRange);\n }\n onSelect?.(newRange, triggerDate, modifiers, e);\n return newRange;\n };\n return {\n selected,\n select,\n isSelected,\n };\n}\n","import { useControlledValue } from \"../helpers/useControlledValue.js\";\n/**\n * Hook to manage single-date selection in the DayPicker component.\n *\n * @template T - The type of DayPicker props.\n * @param props - The DayPicker props.\n * @param dateLib - The date utility library instance.\n * @returns An object containing the selected date, a function to select a date,\n * and a function to check if a date is selected.\n */\nexport function useSingle(props, dateLib) {\n const { selected: initiallySelected, required, onSelect, } = props;\n const [internallySelected, setSelected] = useControlledValue(initiallySelected, onSelect ? initiallySelected : undefined);\n const selected = !onSelect ? internallySelected : initiallySelected;\n const { isSameDay } = dateLib;\n const isSelected = (compareDate) => {\n return selected ? isSameDay(selected, compareDate) : false;\n };\n const select = (triggerDate, modifiers, e) => {\n let newDate = triggerDate;\n if (!required && selected && selected && isSameDay(triggerDate, selected)) {\n // If the date is the same, clear the selection.\n newDate = undefined;\n }\n if (!onSelect) {\n setSelected(newDate);\n }\n if (required) {\n onSelect?.(newDate, triggerDate, modifiers, e);\n }\n else {\n onSelect?.(newDate, triggerDate, modifiers, e);\n }\n return newDate;\n };\n return {\n selected,\n select,\n isSelected,\n };\n}\n","import { useMulti } from \"./selection/useMulti.js\";\nimport { useRange } from \"./selection/useRange.js\";\nimport { useSingle } from \"./selection/useSingle.js\";\n/**\n * Determines the appropriate selection hook to use based on the selection mode\n * and returns the corresponding selection object.\n *\n * @template T - The type of DayPicker props.\n * @param props - The DayPicker props.\n * @param dateLib - The date utility library instance.\n * @returns The selection object for the specified mode, or `undefined` if no\n * mode is set.\n */\nexport function useSelection(props, dateLib) {\n const single = useSingle(props, dateLib);\n const multi = useMulti(props, dateLib);\n const range = useRange(props, dateLib);\n switch (props.mode) {\n case \"single\":\n return single;\n case \"multiple\":\n return multi;\n case \"range\":\n return range;\n default:\n return undefined;\n }\n}\n","import { TZDate } from \"@date-fns/tz\";\n/**\n * Convert a {@link Date} or {@link TZDate} instance to the given time zone.\n * Reuses the same instance when it is already a {@link TZDate} using the target\n * time zone to avoid extra allocations.\n */\nexport function toTimeZone(date, timeZone) {\n if (date instanceof TZDate && date.timeZone === timeZone) {\n return date;\n }\n return new TZDate(date, timeZone);\n}\n","import { TZDate } from \"@date-fns/tz\";\nimport { toTimeZone } from \"./toTimeZone.js\";\nimport { isDateAfterType, isDateBeforeType, isDateInterval, isDateRange, } from \"./typeguards.js\";\nfunction toZoneNoon(date, timeZone, noonSafe) {\n if (!noonSafe)\n return toTimeZone(date, timeZone);\n const zoned = toTimeZone(date, timeZone);\n const noonZoned = new TZDate(zoned.getFullYear(), zoned.getMonth(), zoned.getDate(), 12, 0, 0, timeZone);\n return new Date(noonZoned.getTime());\n}\nfunction convertMatcher(matcher, timeZone, noonSafe) {\n if (typeof matcher === \"boolean\" || typeof matcher === \"function\") {\n return matcher;\n }\n if (matcher instanceof Date) {\n return toZoneNoon(matcher, timeZone, noonSafe);\n }\n if (Array.isArray(matcher)) {\n return matcher.map((value) => value instanceof Date ? toZoneNoon(value, timeZone, noonSafe) : value);\n }\n if (isDateRange(matcher)) {\n return {\n ...matcher,\n from: matcher.from ? toTimeZone(matcher.from, timeZone) : matcher.from,\n to: matcher.to ? toTimeZone(matcher.to, timeZone) : matcher.to,\n };\n }\n if (isDateInterval(matcher)) {\n return {\n before: toZoneNoon(matcher.before, timeZone, noonSafe),\n after: toZoneNoon(matcher.after, timeZone, noonSafe),\n };\n }\n if (isDateAfterType(matcher)) {\n return {\n after: toZoneNoon(matcher.after, timeZone, noonSafe),\n };\n }\n if (isDateBeforeType(matcher)) {\n return {\n before: toZoneNoon(matcher.before, timeZone, noonSafe),\n };\n }\n return matcher;\n}\n/**\n * Convert any {@link Matcher} or array of matchers to the specified time zone.\n *\n * @param matchers - The matcher or matchers to convert.\n * @param timeZone - The target IANA time zone.\n * @returns The converted matcher(s).\n * @group Utilities\n */\nexport function convertMatchersToTimeZone(matchers, timeZone, noonSafe) {\n if (!matchers) {\n return matchers;\n }\n if (Array.isArray(matchers)) {\n return matchers.map((matcher) => convertMatcher(matcher, timeZone, noonSafe));\n }\n return convertMatcher(matchers, timeZone, noonSafe);\n}\n","import React, { useCallback, useMemo, useRef } from \"react\";\nimport { DateLib, defaultLocale } from \"./classes/DateLib.js\";\nimport { createGetModifiers } from \"./helpers/createGetModifiers.js\";\nimport { getClassNamesForModifiers } from \"./helpers/getClassNamesForModifiers.js\";\nimport { getComponents } from \"./helpers/getComponents.js\";\nimport { getDataAttributes } from \"./helpers/getDataAttributes.js\";\nimport { getDefaultClassNames } from \"./helpers/getDefaultClassNames.js\";\nimport { getFormatters } from \"./helpers/getFormatters.js\";\nimport { getLabels } from \"./helpers/getLabels.js\";\nimport { getMonthOptions } from \"./helpers/getMonthOptions.js\";\nimport { getStyleForModifiers } from \"./helpers/getStyleForModifiers.js\";\nimport { getWeekdays } from \"./helpers/getWeekdays.js\";\nimport { getYearOptions } from \"./helpers/getYearOptions.js\";\nimport { createNoonOverrides } from \"./noonDateLib.js\";\nimport { DayFlag, SelectionState, UI } from \"./UI.js\";\nimport { useAnimation } from \"./useAnimation.js\";\nimport { useCalendar } from \"./useCalendar.js\";\nimport { dayPickerContext } from \"./useDayPicker.js\";\nimport { useFocus } from \"./useFocus.js\";\nimport { useSelection } from \"./useSelection.js\";\nimport { convertMatchersToTimeZone } from \"./utils/convertMatchersToTimeZone.js\";\nimport { rangeIncludesDate } from \"./utils/rangeIncludesDate.js\";\nimport { toTimeZone } from \"./utils/toTimeZone.js\";\nimport { isDateRange } from \"./utils/typeguards.js\";\n/**\n * Renders the DayPicker calendar component.\n *\n * @param initialProps - The props for the DayPicker component.\n * @returns The rendered DayPicker component.\n * @group DayPicker\n * @see https://daypicker.dev\n */\nexport function DayPicker(initialProps) {\n let props = initialProps;\n const timeZone = props.timeZone;\n if (timeZone) {\n props = {\n ...initialProps,\n timeZone,\n };\n if (props.today) {\n props.today = toTimeZone(props.today, timeZone);\n }\n if (props.month) {\n props.month = toTimeZone(props.month, timeZone);\n }\n if (props.defaultMonth) {\n props.defaultMonth = toTimeZone(props.defaultMonth, timeZone);\n }\n if (props.startMonth) {\n props.startMonth = toTimeZone(props.startMonth, timeZone);\n }\n if (props.endMonth) {\n props.endMonth = toTimeZone(props.endMonth, timeZone);\n }\n if (props.mode === \"single\" && props.selected) {\n props.selected = toTimeZone(props.selected, timeZone);\n }\n else if (props.mode === \"multiple\" && props.selected) {\n props.selected = props.selected?.map((date) => toTimeZone(date, timeZone));\n }\n else if (props.mode === \"range\" && props.selected) {\n props.selected = {\n from: props.selected.from\n ? toTimeZone(props.selected.from, timeZone)\n : props.selected.from,\n to: props.selected.to\n ? toTimeZone(props.selected.to, timeZone)\n : props.selected.to,\n };\n }\n if (props.disabled !== undefined) {\n props.disabled = convertMatchersToTimeZone(props.disabled, timeZone);\n }\n if (props.hidden !== undefined) {\n props.hidden = convertMatchersToTimeZone(props.hidden, timeZone);\n }\n if (props.modifiers) {\n const nextModifiers = {};\n Object.keys(props.modifiers).forEach((key) => {\n nextModifiers[key] = convertMatchersToTimeZone(props.modifiers?.[key], timeZone);\n });\n props.modifiers = nextModifiers;\n }\n }\n const { components, formatters, labels, dateLib, locale, classNames } = useMemo(() => {\n const locale = { ...defaultLocale, ...props.locale };\n const weekStartsOn = props.broadcastCalendar ? 1 : props.weekStartsOn;\n const noonOverrides = props.noonSafe && props.timeZone\n ? createNoonOverrides(props.timeZone, {\n weekStartsOn,\n locale,\n })\n : undefined;\n const overrides = props.dateLib && noonOverrides\n ? { ...noonOverrides, ...props.dateLib }\n : (props.dateLib ?? noonOverrides);\n const dateLib = new DateLib({\n locale,\n weekStartsOn,\n firstWeekContainsDate: props.firstWeekContainsDate,\n useAdditionalWeekYearTokens: props.useAdditionalWeekYearTokens,\n useAdditionalDayOfYearTokens: props.useAdditionalDayOfYearTokens,\n timeZone: props.timeZone,\n numerals: props.numerals,\n }, overrides);\n return {\n dateLib,\n components: getComponents(props.components),\n formatters: getFormatters(props.formatters),\n labels: getLabels(props.labels, dateLib.options),\n locale,\n classNames: { ...getDefaultClassNames(), ...props.classNames },\n };\n }, [\n props.locale,\n props.broadcastCalendar,\n props.weekStartsOn,\n props.firstWeekContainsDate,\n props.useAdditionalWeekYearTokens,\n props.useAdditionalDayOfYearTokens,\n props.timeZone,\n props.numerals,\n props.dateLib,\n props.noonSafe,\n props.components,\n props.formatters,\n props.labels,\n props.classNames,\n ]);\n if (!props.today) {\n props = { ...props, today: dateLib.today() };\n }\n const { captionLayout, mode, navLayout, numberOfMonths = 1, onDayBlur, onDayClick, onDayFocus, onDayKeyDown, onDayMouseEnter, onDayMouseLeave, onNextClick, onPrevClick, showWeekNumber, styles, } = props;\n const { formatCaption, formatDay, formatMonthDropdown, formatWeekNumber, formatWeekNumberHeader, formatWeekdayName, formatYearDropdown, } = formatters;\n const calendar = useCalendar(props, dateLib);\n const { days, months, navStart, navEnd, previousMonth, nextMonth, goToMonth, } = calendar;\n const getModifiers = createGetModifiers(days, props, navStart, navEnd, dateLib);\n const { isSelected, select, selected: selectedValue, } = useSelection(props, dateLib) ?? {};\n const { blur, focused, isFocusTarget, moveFocus, setFocused } = useFocus(props, calendar, getModifiers, isSelected ?? (() => false), dateLib);\n const { labelDayButton, labelGridcell, labelGrid, labelMonthDropdown, labelNav, labelPrevious, labelNext, labelWeekday, labelWeekNumber, labelWeekNumberHeader, labelYearDropdown, } = labels;\n const weekdays = useMemo(() => getWeekdays(dateLib, props.ISOWeek, props.broadcastCalendar, props.today), [dateLib, props.ISOWeek, props.broadcastCalendar, props.today]);\n const isInteractive = mode !== undefined || onDayClick !== undefined;\n const handlePreviousClick = useCallback(() => {\n if (!previousMonth)\n return;\n goToMonth(previousMonth);\n onPrevClick?.(previousMonth);\n }, [previousMonth, goToMonth, onPrevClick]);\n const handleNextClick = useCallback(() => {\n if (!nextMonth)\n return;\n goToMonth(nextMonth);\n onNextClick?.(nextMonth);\n }, [goToMonth, nextMonth, onNextClick]);\n const handleDayClick = useCallback((day, m) => (e) => {\n e.preventDefault();\n e.stopPropagation();\n setFocused(day);\n if (m.disabled) {\n return;\n }\n select?.(day.date, m, e);\n onDayClick?.(day.date, m, e);\n }, [select, onDayClick, setFocused]);\n const handleDayFocus = useCallback((day, m) => (e) => {\n setFocused(day);\n onDayFocus?.(day.date, m, e);\n }, [onDayFocus, setFocused]);\n const handleDayBlur = useCallback((day, m) => (e) => {\n blur();\n onDayBlur?.(day.date, m, e);\n }, [blur, onDayBlur]);\n const handleDayKeyDown = useCallback((day, modifiers) => (e) => {\n const keyMap = {\n ArrowLeft: [\n e.shiftKey ? \"month\" : \"day\",\n props.dir === \"rtl\" ? \"after\" : \"before\",\n ],\n ArrowRight: [\n e.shiftKey ? \"month\" : \"day\",\n props.dir === \"rtl\" ? \"before\" : \"after\",\n ],\n ArrowDown: [e.shiftKey ? \"year\" : \"week\", \"after\"],\n ArrowUp: [e.shiftKey ? \"year\" : \"week\", \"before\"],\n PageUp: [e.shiftKey ? \"year\" : \"month\", \"before\"],\n PageDown: [e.shiftKey ? \"year\" : \"month\", \"after\"],\n Home: [\"startOfWeek\", \"before\"],\n End: [\"endOfWeek\", \"after\"],\n };\n if (keyMap[e.key]) {\n e.preventDefault();\n e.stopPropagation();\n const [moveBy, moveDir] = keyMap[e.key];\n moveFocus(moveBy, moveDir);\n }\n onDayKeyDown?.(day.date, modifiers, e);\n }, [moveFocus, onDayKeyDown, props.dir]);\n const handleDayMouseEnter = useCallback((day, modifiers) => (e) => {\n onDayMouseEnter?.(day.date, modifiers, e);\n }, [onDayMouseEnter]);\n const handleDayMouseLeave = useCallback((day, modifiers) => (e) => {\n onDayMouseLeave?.(day.date, modifiers, e);\n }, [onDayMouseLeave]);\n const handleMonthChange = useCallback((date) => (e) => {\n const selectedMonth = Number(e.target.value);\n const month = dateLib.setMonth(dateLib.startOfMonth(date), selectedMonth);\n goToMonth(month);\n }, [dateLib, goToMonth]);\n const handleYearChange = useCallback((date) => (e) => {\n const selectedYear = Number(e.target.value);\n const month = dateLib.setYear(dateLib.startOfMonth(date), selectedYear);\n goToMonth(month);\n }, [dateLib, goToMonth]);\n const { className, style } = useMemo(() => ({\n className: [classNames[UI.Root], props.className]\n .filter(Boolean)\n .join(\" \"),\n style: { ...styles?.[UI.Root], ...props.style },\n }), [classNames, props.className, props.style, styles]);\n const dataAttributes = getDataAttributes(props);\n const rootElRef = useRef(null);\n useAnimation(rootElRef, Boolean(props.animate), {\n classNames,\n months,\n focused,\n dateLib,\n });\n const contextValue = {\n dayPickerProps: props,\n selected: selectedValue,\n select: select,\n isSelected,\n months,\n nextMonth,\n previousMonth,\n goToMonth,\n getModifiers,\n components,\n classNames,\n styles,\n labels,\n formatters,\n };\n return (React.createElement(dayPickerContext.Provider, { value: contextValue },\n React.createElement(components.Root, { rootRef: props.animate ? rootElRef : undefined, className: className, style: style, dir: props.dir, id: props.id, lang: props.lang, nonce: props.nonce, title: props.title, role: props.role, \"aria-label\": props[\"aria-label\"], \"aria-labelledby\": props[\"aria-labelledby\"], ...dataAttributes },\n React.createElement(components.Months, { className: classNames[UI.Months], style: styles?.[UI.Months] },\n !props.hideNavigation && !navLayout && (React.createElement(components.Nav, { \"data-animated-nav\": props.animate ? \"true\" : undefined, className: classNames[UI.Nav], style: styles?.[UI.Nav], \"aria-label\": labelNav(), onPreviousClick: handlePreviousClick, onNextClick: handleNextClick, previousMonth: previousMonth, nextMonth: nextMonth })),\n months.map((calendarMonth, displayIndex) => {\n return (React.createElement(components.Month, { \"data-animated-month\": props.animate ? \"true\" : undefined, className: classNames[UI.Month], style: styles?.[UI.Month], \n // biome-ignore lint/suspicious/noArrayIndexKey: breaks animation\n key: displayIndex, displayIndex: displayIndex, calendarMonth: calendarMonth },\n navLayout === \"around\" &&\n !props.hideNavigation &&\n displayIndex === 0 && (React.createElement(components.PreviousMonthButton, { type: \"button\", className: classNames[UI.PreviousMonthButton], tabIndex: previousMonth ? undefined : -1, \"aria-disabled\": previousMonth ? undefined : true, \"aria-label\": labelPrevious(previousMonth), onClick: handlePreviousClick, \"data-animated-button\": props.animate ? \"true\" : undefined },\n React.createElement(components.Chevron, { disabled: previousMonth ? undefined : true, className: classNames[UI.Chevron], orientation: props.dir === \"rtl\" ? \"right\" : \"left\" }))),\n React.createElement(components.MonthCaption, { \"data-animated-caption\": props.animate ? \"true\" : undefined, className: classNames[UI.MonthCaption], style: styles?.[UI.MonthCaption], calendarMonth: calendarMonth, displayIndex: displayIndex }, captionLayout?.startsWith(\"dropdown\") ? (React.createElement(components.DropdownNav, { className: classNames[UI.Dropdowns], style: styles?.[UI.Dropdowns] },\n (() => {\n const monthControl = captionLayout === \"dropdown\" ||\n captionLayout === \"dropdown-months\" ? (React.createElement(components.MonthsDropdown, { key: \"month\", className: classNames[UI.MonthsDropdown], \"aria-label\": labelMonthDropdown(), classNames: classNames, components: components, disabled: Boolean(props.disableNavigation), onChange: handleMonthChange(calendarMonth.date), options: getMonthOptions(calendarMonth.date, navStart, navEnd, formatters, dateLib), style: styles?.[UI.Dropdown], value: dateLib.getMonth(calendarMonth.date) })) : (React.createElement(\"span\", { key: \"month\" }, formatMonthDropdown(calendarMonth.date, dateLib)));\n const yearControl = captionLayout === \"dropdown\" ||\n captionLayout === \"dropdown-years\" ? (React.createElement(components.YearsDropdown, { key: \"year\", className: classNames[UI.YearsDropdown], \"aria-label\": labelYearDropdown(dateLib.options), classNames: classNames, components: components, disabled: Boolean(props.disableNavigation), onChange: handleYearChange(calendarMonth.date), options: getYearOptions(navStart, navEnd, formatters, dateLib, Boolean(props.reverseYears)), style: styles?.[UI.Dropdown], value: dateLib.getYear(calendarMonth.date) })) : (React.createElement(\"span\", { key: \"year\" }, formatYearDropdown(calendarMonth.date, dateLib)));\n const controls = dateLib.getMonthYearOrder() === \"year-first\"\n ? [yearControl, monthControl]\n : [monthControl, yearControl];\n return controls;\n })(),\n React.createElement(\"span\", { role: \"status\", \"aria-live\": \"polite\", style: {\n border: 0,\n clip: \"rect(0 0 0 0)\",\n height: \"1px\",\n margin: \"-1px\",\n overflow: \"hidden\",\n padding: 0,\n position: \"absolute\",\n width: \"1px\",\n whiteSpace: \"nowrap\",\n wordWrap: \"normal\",\n } }, formatCaption(calendarMonth.date, dateLib.options, dateLib)))) : (React.createElement(components.CaptionLabel, { className: classNames[UI.CaptionLabel], role: \"status\", \"aria-live\": \"polite\" }, formatCaption(calendarMonth.date, dateLib.options, dateLib)))),\n navLayout === \"around\" &&\n !props.hideNavigation &&\n displayIndex === numberOfMonths - 1 && (React.createElement(components.NextMonthButton, { type: \"button\", className: classNames[UI.NextMonthButton], tabIndex: nextMonth ? undefined : -1, \"aria-disabled\": nextMonth ? undefined : true, \"aria-label\": labelNext(nextMonth), onClick: handleNextClick, \"data-animated-button\": props.animate ? \"true\" : undefined },\n React.createElement(components.Chevron, { disabled: nextMonth ? undefined : true, className: classNames[UI.Chevron], orientation: props.dir === \"rtl\" ? \"left\" : \"right\" }))),\n displayIndex === numberOfMonths - 1 &&\n navLayout === \"after\" &&\n !props.hideNavigation && (React.createElement(components.Nav, { \"data-animated-nav\": props.animate ? \"true\" : undefined, className: classNames[UI.Nav], style: styles?.[UI.Nav], \"aria-label\": labelNav(), onPreviousClick: handlePreviousClick, onNextClick: handleNextClick, previousMonth: previousMonth, nextMonth: nextMonth })),\n React.createElement(components.MonthGrid, { role: \"grid\", \"aria-multiselectable\": mode === \"multiple\" || mode === \"range\", \"aria-label\": labelGrid(calendarMonth.date, dateLib.options, dateLib) ||\n undefined, className: classNames[UI.MonthGrid], style: styles?.[UI.MonthGrid] },\n !props.hideWeekdays && (React.createElement(components.Weekdays, { \"data-animated-weekdays\": props.animate ? \"true\" : undefined, className: classNames[UI.Weekdays], style: styles?.[UI.Weekdays] },\n showWeekNumber && (React.createElement(components.WeekNumberHeader, { \"aria-label\": labelWeekNumberHeader(dateLib.options), className: classNames[UI.WeekNumberHeader], style: styles?.[UI.WeekNumberHeader], scope: \"col\" }, formatWeekNumberHeader())),\n weekdays.map((weekday) => (React.createElement(components.Weekday, { \"aria-label\": labelWeekday(weekday, dateLib.options, dateLib), className: classNames[UI.Weekday], key: String(weekday), style: styles?.[UI.Weekday], scope: \"col\" }, formatWeekdayName(weekday, dateLib.options, dateLib)))))),\n React.createElement(components.Weeks, { \"data-animated-weeks\": props.animate ? \"true\" : undefined, className: classNames[UI.Weeks], style: styles?.[UI.Weeks] }, calendarMonth.weeks.map((week) => {\n return (React.createElement(components.Week, { className: classNames[UI.Week], key: week.weekNumber, style: styles?.[UI.Week], week: week },\n showWeekNumber && (React.createElement(components.WeekNumber, { week: week, style: styles?.[UI.WeekNumber], \"aria-label\": labelWeekNumber(week.weekNumber, {\n locale,\n }), className: classNames[UI.WeekNumber], scope: \"row\", role: \"rowheader\" }, formatWeekNumber(week.weekNumber, dateLib))),\n week.days.map((day) => {\n const { date } = day;\n const modifiers = getModifiers(day);\n modifiers[DayFlag.focused] =\n !modifiers.hidden &&\n Boolean(focused?.isEqualTo(day));\n modifiers[SelectionState.selected] =\n isSelected?.(date) || modifiers.selected;\n if (isDateRange(selectedValue)) {\n // add range modifiers\n const { from, to } = selectedValue;\n modifiers[SelectionState.range_start] = Boolean(from && to && dateLib.isSameDay(date, from));\n modifiers[SelectionState.range_end] = Boolean(from && to && dateLib.isSameDay(date, to));\n modifiers[SelectionState.range_middle] =\n rangeIncludesDate(selectedValue, date, true, dateLib);\n }\n const style = getStyleForModifiers(modifiers, styles, props.modifiersStyles);\n const className = getClassNamesForModifiers(modifiers, classNames, props.modifiersClassNames);\n const ariaLabel = !isInteractive && !modifiers.hidden\n ? labelGridcell(date, modifiers, dateLib.options, dateLib)\n : undefined;\n return (React.createElement(components.Day, { key: `${day.isoDate}_${day.displayMonthId}`, day: day, modifiers: modifiers, className: className.join(\" \"), style: style, role: \"gridcell\", \"aria-selected\": modifiers.selected || undefined, \"aria-label\": ariaLabel, \"data-day\": day.isoDate, \"data-month\": day.outside ? day.dateMonthId : undefined, \"data-selected\": modifiers.selected || undefined, \"data-disabled\": modifiers.disabled || undefined, \"data-hidden\": modifiers.hidden || undefined, \"data-outside\": day.outside || undefined, \"data-focused\": modifiers.focused || undefined, \"data-today\": modifiers.today || undefined }, !modifiers.hidden && isInteractive ? (React.createElement(components.DayButton, { className: classNames[UI.DayButton], style: styles?.[UI.DayButton], type: \"button\", day: day, modifiers: modifiers, disabled: (!modifiers.focused &&\n modifiers.disabled) ||\n undefined, \"aria-disabled\": (modifiers.focused &&\n modifiers.disabled) ||\n undefined, tabIndex: isFocusTarget(day) ? 0 : -1, \"aria-label\": labelDayButton(date, modifiers, dateLib.options, dateLib), onClick: handleDayClick(day, modifiers), onBlur: handleDayBlur(day, modifiers), onFocus: handleDayFocus(day, modifiers), onKeyDown: handleDayKeyDown(day, modifiers), onMouseEnter: handleDayMouseEnter(day, modifiers), onMouseLeave: handleDayMouseLeave(day, modifiers) }, formatDay(date, dateLib.options, dateLib))) : (!modifiers.hidden &&\n formatDay(day.date, dateLib.options, dateLib))));\n })));\n })))));\n })),\n props.footer && (React.createElement(components.Footer, { className: classNames[UI.Footer], style: styles?.[UI.Footer], role: \"status\", \"aria-live\": \"polite\" }, props.footer)))));\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport {\n ChevronDownIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n} from \"lucide-react\"\nimport {\n DayPicker,\n getDefaultClassNames,\n type DayButton,\n} from \"react-day-picker\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { buttonVariants } from \"@/components/ui/button.variants\"\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = \"label\",\n buttonVariant = \"ghost\",\n formatters,\n components,\n ...props\n}: React.ComponentProps<typeof DayPicker> & {\n buttonVariant?: React.ComponentProps<typeof Button>[\"variant\"]\n}) {\n const defaultClassNames = getDefaultClassNames()\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n \"bg-background group/calendar p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent\",\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: (date) =>\n date.toLocaleString(\"default\", { month: \"short\" }),\n ...formatters,\n }}\n classNames={{\n root: cn(\"w-fit\", defaultClassNames.root),\n months: cn(\n \"flex gap-4 flex-col md:flex-row relative\",\n defaultClassNames.months\n ),\n month: cn(\"flex flex-col w-full gap-4\", defaultClassNames.month),\n nav: cn(\n \"flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between\",\n defaultClassNames.nav\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n defaultClassNames.button_previous\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n defaultClassNames.button_next\n ),\n month_caption: cn(\n \"flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)\",\n defaultClassNames.month_caption\n ),\n dropdowns: cn(\n \"w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5\",\n defaultClassNames.dropdowns\n ),\n dropdown_root: cn(\n \"relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md\",\n defaultClassNames.dropdown_root\n ),\n dropdown: cn(\n \"absolute bg-popover inset-0 opacity-0\",\n defaultClassNames.dropdown\n ),\n caption_label: cn(\n \"select-none font-medium\",\n captionLayout === \"label\"\n ? \"text-sm\"\n : \"rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5\",\n defaultClassNames.caption_label\n ),\n table: \"w-full border-collapse\",\n weekdays: cn(\"flex\", defaultClassNames.weekdays),\n weekday: cn(\n \"text-muted-foreground rounded-md flex-1 font-normal text-xs select-none\",\n defaultClassNames.weekday\n ),\n week: cn(\"flex w-full mt-2\", defaultClassNames.week),\n week_number_header: cn(\n \"select-none w-(--cell-size)\",\n defaultClassNames.week_number_header\n ),\n week_number: cn(\n \"text-xs select-none text-muted-foreground\",\n defaultClassNames.week_number\n ),\n day: cn(\n \"relative w-full h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none\",\n props.showWeekNumber\n ? \"[&:nth-child(2)[data-selected=true]_button]:rounded-l-md\"\n : \"[&:first-child[data-selected=true]_button]:rounded-l-md\",\n defaultClassNames.day\n ),\n range_start: cn(\n \"rounded-l-md bg-accent\",\n defaultClassNames.range_start\n ),\n range_middle: cn(\"rounded-none\", defaultClassNames.range_middle),\n range_end: cn(\"rounded-r-md bg-accent\", defaultClassNames.range_end),\n today: cn(\n \"bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none\",\n defaultClassNames.today\n ),\n outside: cn(\n \"text-muted-foreground aria-selected:text-muted-foreground\",\n defaultClassNames.outside\n ),\n disabled: cn(\n \"text-muted-foreground opacity-50\",\n defaultClassNames.disabled\n ),\n hidden: cn(\"invisible\", defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return (\n <div\n data-slot=\"calendar\"\n ref={rootRef}\n className={cn(className)}\n {...props}\n />\n )\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === \"left\") {\n return (\n <ChevronLeftIcon className={cn(\"size-4\", className)} {...props} />\n )\n }\n\n if (orientation === \"right\") {\n return (\n <ChevronRightIcon\n className={cn(\"size-4\", className)}\n {...props}\n />\n )\n }\n\n return (\n <ChevronDownIcon className={cn(\"size-4\", className)} {...props} />\n )\n },\n DayButton: CalendarDayButton,\n WeekNumber: ({ children, ...props }) => {\n return (\n <td {...props}>\n <div className=\"flex size-(--cell-size) items-center justify-center text-center\">\n {children}\n </div>\n </td>\n )\n },\n ...components,\n }}\n {...props}\n />\n )\n}\n\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n ...props\n}: React.ComponentProps<typeof DayButton>) {\n const defaultClassNames = getDefaultClassNames()\n\n const ref = React.useRef<HTMLButtonElement>(null)\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus()\n }, [modifiers.focused])\n\n return (\n <Button\n ref={ref}\n variant=\"ghost\"\n size=\"icon\"\n data-day={day.date.toLocaleDateString()}\n data-selected-single={\n modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n className={cn(\n \"data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 dark:hover:text-accent-foreground flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md [&>span]:text-xs [&>span]:opacity-70\",\n defaultClassNames.day,\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Calendar, CalendarDayButton }\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Card({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card\"\n className={cn(\n \"bg-card text-card-foreground flex flex-col gap-6 rounded-xl border shadow-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start has-data-[slot=card-action]:grid-cols-[1fr_auto] \",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-6\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"flex items-center px-6 [.border-t]:pt-6\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { CheckIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Checkbox({\n className,\n ...props\n}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n \"peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"grid place-content-center text-current transition-none\"\n >\n <CheckIcon className=\"size-3.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n )\n}\n\nexport { Checkbox }\n","import * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\"\n\nfunction Collapsible({\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.Root>) {\n return <CollapsiblePrimitive.Root data-slot=\"collapsible\" {...props} />\n}\n\nfunction CollapsibleTrigger({\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>) {\n return (\n <CollapsiblePrimitive.CollapsibleTrigger\n data-slot=\"collapsible-trigger\"\n {...props}\n />\n )\n}\n\nfunction CollapsibleContent({\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>) {\n return (\n <CollapsiblePrimitive.CollapsibleContent\n data-slot=\"collapsible-content\"\n {...props}\n />\n )\n}\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent }\n","import * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { XIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\n\nfunction Dialog({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-overlay\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 outline-none sm:max-w-lg\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showCloseButton?: boolean\n}) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close asChild>\n <Button variant=\"outline\">Close</Button>\n </DialogPrimitive.Close>\n )}\n </div>\n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Command as CommandPrimitive } from \"cmdk\"\nimport { SearchIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"@/components/ui/dialog\"\n\nfunction Command({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive>) {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n className={cn(\n \"bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandDialog({\n title = \"Command Palette\",\n description = \"Search for a command to run...\",\n children,\n className,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof Dialog> & {\n title?: string\n description?: string\n className?: string\n showCloseButton?: boolean\n}) {\n return (\n <Dialog {...props}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent\n className={cn(\"overflow-hidden p-0\", className)}\n showCloseButton={showCloseButton}\n >\n <Command className=\"[&_[cmdk-group-heading]]:text-muted-foreground **:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n )\n}\n\nfunction CommandInput({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Input>) {\n return (\n <div\n data-slot=\"command-input-wrapper\"\n className=\"flex h-9 items-center gap-2 border-b px-3\"\n >\n <SearchIcon className=\"size-4 shrink-0 opacity-50\" />\n <CommandPrimitive.Input\n data-slot=\"command-input\"\n className={cn(\n \"placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n />\n </div>\n )\n}\n\nfunction CommandList({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.List>) {\n return (\n <CommandPrimitive.List\n data-slot=\"command-list\"\n className={cn(\n \"max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandEmpty({\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Empty>) {\n return (\n <CommandPrimitive.Empty\n data-slot=\"command-empty\"\n className=\"py-6 text-center text-sm\"\n {...props}\n />\n )\n}\n\nfunction CommandGroup({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Group>) {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n \"text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Separator>) {\n return (\n <CommandPrimitive.Separator\n data-slot=\"command-separator\"\n className={cn(\"bg-border -mx-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction CommandItem({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Item>) {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn(\n \"data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn(\n \"text-muted-foreground ml-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction DropdownMenu({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return (\n <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n )\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return (\n <DropdownMenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return (\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return (\n <DropdownMenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"text-muted-foreground ml-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n // Base\n \"h-9 w-full min-w-0 rounded-md border px-3 py-1 text-xs shadow-xs outline-none\",\n \"bg-transparent\",\n \"border-border\",\n \"placeholder:text-muted-foreground/50\",\n \"selection:bg-primary selection:text-primary-foreground\",\n // Transition\n \"transition-[color,box-shadow,border-color,background-color] duration-150\",\n // Hover\n \"hover:border-accent-cyan/40 hover:bg-card\",\n // Focus\n \"focus-visible:border-accent-cyan focus-visible:ring-accent-cyan/20 focus-visible:ring-[3px]\",\n \"focus-visible:bg-card\",\n // Error (aria-invalid)\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n \"aria-invalid:hover:border-destructive\",\n // File input\n \"file:text-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium\",\n // Disabled\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Label({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n \"flex items-center gap-2 text-xs leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Label }\n","import * as React from \"react\"\nimport {\n ChevronLeftIcon,\n ChevronRightIcon,\n MoreHorizontalIcon,\n} from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { type Button } from \"@/components/ui/button\"\nimport { buttonVariants } from \"@/components/ui/button.variants\"\n\nfunction Pagination({ className, ...props }: React.ComponentProps<\"nav\">) {\n return (\n <nav\n role=\"navigation\"\n aria-label=\"pagination\"\n data-slot=\"pagination\"\n className={cn(\"mx-auto flex w-full justify-center\", className)}\n {...props}\n />\n )\n}\n\nfunction PaginationContent({\n className,\n ...props\n}: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"pagination-content\"\n className={cn(\"flex flex-row items-center gap-1\", className)}\n {...props}\n />\n )\n}\n\nfunction PaginationItem({ ...props }: React.ComponentProps<\"li\">) {\n return <li data-slot=\"pagination-item\" {...props} />\n}\n\ntype PaginationLinkProps = {\n isActive?: boolean\n} & Pick<React.ComponentProps<typeof Button>, \"size\"> &\n React.ComponentProps<\"a\">\n\nfunction PaginationLink({\n className,\n isActive,\n size = \"icon\",\n ...props\n}: PaginationLinkProps) {\n return (\n <a\n aria-current={isActive ? \"page\" : undefined}\n data-slot=\"pagination-link\"\n data-active={isActive}\n className={cn(\n buttonVariants({\n variant: isActive ? \"outline\" : \"ghost\",\n size,\n }),\n className\n )}\n {...props}\n />\n )\n}\n\nfunction PaginationPrevious({\n className,\n ...props\n}: React.ComponentProps<typeof PaginationLink>) {\n return (\n <PaginationLink\n aria-label=\"Go to previous page\"\n size=\"default\"\n className={cn(\"gap-1 px-2.5 sm:pl-2.5\", className)}\n {...props}\n >\n <ChevronLeftIcon />\n <span className=\"hidden sm:block\">Previous</span>\n </PaginationLink>\n )\n}\n\nfunction PaginationNext({\n className,\n ...props\n}: React.ComponentProps<typeof PaginationLink>) {\n return (\n <PaginationLink\n aria-label=\"Go to next page\"\n size=\"default\"\n className={cn(\"gap-1 px-2.5 sm:pr-2.5\", className)}\n {...props}\n >\n <span className=\"hidden sm:block\">Next</span>\n <ChevronRightIcon />\n </PaginationLink>\n )\n}\n\nfunction PaginationEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n aria-hidden\n data-slot=\"pagination-ellipsis\"\n className={cn(\"flex size-9 items-center justify-center\", className)}\n {...props}\n >\n <MoreHorizontalIcon className=\"size-4\" />\n <span className=\"sr-only\">More pages</span>\n </span>\n )\n}\n\nexport {\n Pagination,\n PaginationContent,\n PaginationLink,\n PaginationItem,\n PaginationPrevious,\n PaginationNext,\n PaginationEllipsis,\n}\n","import * as React from \"react\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Popover({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nfunction PopoverHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"popover-header\"\n className={cn(\"flex flex-col gap-1 text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction PopoverTitle({ className, ...props }: React.ComponentProps<\"h2\">) {\n return (\n <div\n data-slot=\"popover-title\"\n className={cn(\"font-medium\", className)}\n {...props}\n />\n )\n}\n\nfunction PopoverDescription({\n className,\n ...props\n}: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"popover-description\"\n className={cn(\"text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n PopoverAnchor,\n PopoverHeader,\n PopoverTitle,\n PopoverDescription,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Progress({\n className,\n value,\n ...props\n}: React.ComponentProps<typeof ProgressPrimitive.Root>) {\n return (\n <ProgressPrimitive.Root\n data-slot=\"progress\"\n className={cn(\n \"bg-primary/20 relative h-2 w-full overflow-hidden rounded-full\",\n className\n )}\n {...props}\n >\n <ProgressPrimitive.Indicator\n data-slot=\"progress-indicator\"\n className=\"bg-primary h-full w-full flex-1 transition-all\"\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n )\n}\n\nexport { Progress }\n","import * as React from \"react\"\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\"\nimport { CircleIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction RadioGroup({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {\n return (\n <RadioGroupPrimitive.Root\n data-slot=\"radio-group\"\n className={cn(\"grid gap-3\", className)}\n {...props}\n />\n )\n}\n\nfunction RadioGroupItem({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {\n return (\n <RadioGroupPrimitive.Item\n data-slot=\"radio-group-item\"\n className={cn(\n \"border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator\n data-slot=\"radio-group-indicator\"\n className=\"relative flex items-center justify-center\"\n >\n <CircleIcon className=\"fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n )\n}\n\nexport { RadioGroup, RadioGroupItem }\n","import * as React from \"react\"\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn(\"relative\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n className=\"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n )\n}\n\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n \"flex touch-none p-px transition-colors select-none\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n data-slot=\"scroll-area-thumb\"\n className=\"bg-border relative flex-1 rounded-full\"\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n )\n}\n\nexport { ScrollArea, ScrollBar }\n","import * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Select({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />\n}\n\nfunction SelectGroup({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n // Base\n \"flex w-fit items-center justify-between gap-2 rounded-md border px-3 py-2 text-xs whitespace-nowrap shadow-xs outline-none\",\n \"bg-transparent\",\n \"border-border\",\n \"data-[placeholder]:text-muted-foreground/50\",\n \"[&_svg:not([class*='text-'])]:text-muted-foreground\",\n // Transition\n \"transition-[color,box-shadow,border-color,background-color] duration-150\",\n // Hover\n \"hover:border-accent-cyan/40 hover:bg-card\",\n // Focus\n \"focus-visible:border-accent-cyan focus-visible:ring-accent-cyan/20 focus-visible:ring-[3px]\",\n \"focus-visible:bg-card\",\n // Error\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n \"aria-invalid:hover:border-destructive\",\n // Size\n \"data-[size=default]:h-9 data-[size=sm]:h-8\",\n // Select value styling\n \"*:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2\",\n // SVG\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n // Disabled\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n )\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"item-aligned\",\n align = \"center\",\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n align={align}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn(\"text-muted-foreground px-2 py-1.5 text-xs\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-xs outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className\n )}\n {...props}\n >\n <span\n data-slot=\"select-item-indicator\"\n className=\"absolute right-2 flex size-3.5 items-center justify-center\"\n >\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"bg-border pointer-events-none -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Separator }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SheetPrimitive from \"@radix-ui/react-dialog\"\nimport { XIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />\n}\n\nfunction SheetTrigger({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />\n}\n\nfunction SheetClose({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />\n}\n\nfunction SheetPortal({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\n}\n\nfunction SheetOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-overlay\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n showCloseButton?: boolean\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500\",\n side === \"right\" &&\n \"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm\",\n side === \"left\" &&\n \"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm\",\n side === \"top\" &&\n \"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b\",\n side === \"bottom\" &&\n \"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none\">\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Content>\n </SheetPortal>\n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"flex flex-col gap-1.5 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetTitle({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn(\"text-foreground font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n","import { cn } from \"@/lib/utils\"\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(\"bg-accent animate-pulse rounded-md\", className)}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n","import {\n CircleCheckIcon,\n InfoIcon,\n Loader2Icon,\n OctagonXIcon,\n TriangleAlertIcon,\n} from \"lucide-react\"\nimport { useTheme } from \"next-themes\"\nimport { Toaster as Sonner, type ToasterProps } from \"sonner\"\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n const { theme = \"system\" } = useTheme()\n\n return (\n <Sonner\n theme={theme as ToasterProps[\"theme\"]}\n className=\"toaster group\"\n icons={{\n success: <CircleCheckIcon className=\"size-4\" />,\n info: <InfoIcon className=\"size-4\" />,\n warning: <TriangleAlertIcon className=\"size-4\" />,\n error: <OctagonXIcon className=\"size-4\" />,\n loading: <Loader2Icon className=\"size-4 animate-spin\" />,\n }}\n style={\n {\n \"--normal-bg\": \"var(--popover)\",\n \"--normal-text\": \"var(--popover-foreground)\",\n \"--normal-border\": \"var(--border)\",\n \"--border-radius\": \"var(--radius)\",\n } as React.CSSProperties\n }\n {...props}\n />\n )\n}\n\nexport { Toaster }\n","import * as React from \"react\"\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Switch({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n \"peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 group/switch inline-flex shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-[1.15rem] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n \"bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block rounded-full ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0\"\n )}\n />\n </SwitchPrimitive.Root>\n )\n}\n\nexport { Switch }\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Table({ className, ...props }: React.ComponentProps<\"table\">) {\n return (\n <div\n data-slot=\"table-container\"\n className=\"relative w-full overflow-x-auto\"\n >\n <table\n data-slot=\"table\"\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n )\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\n return (\n <thead\n data-slot=\"table-header\"\n className={cn(\"[&_tr]:border-b\", className)}\n {...props}\n />\n )\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\n return (\n <tbody\n data-slot=\"table-body\"\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n )\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn(\n \"bg-muted/50 border-t font-medium [&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(\n \"border-b border-border/40 transition-colors duration-150\",\n \"hover:bg-muted/40\",\n \"data-[state=selected]:bg-accent-cyan/8\",\n \"data-[state=selected]:border-l-2\",\n \"data-[state=selected]:border-l-accent-cyan\",\n \"data-[state=selected]:hover:bg-accent-cyan/12\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\n \"text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n \"p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableCaption({\n className,\n ...props\n}: React.ComponentProps<\"caption\">) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn(\"text-muted-foreground mt-4 text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n}\n","import { cva } from \"class-variance-authority\"\n\nexport const tabsListVariants = cva(\n \"rounded-lg p-[3px] group-data-[orientation=horizontal]/tabs:h-9 data-[variant=line]:rounded-none group/tabs-list text-muted-foreground inline-flex w-fit items-center justify-center group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col\",\n {\n variants: {\n variant: {\n default: \"bg-muted\",\n line: \"gap-1 bg-transparent\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n","import * as React from \"react\"\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\"\nimport { type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\nimport { tabsListVariants } from \"./tabs.variants\"\n\nfunction Tabs({\n className,\n orientation = \"horizontal\",\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Root>) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n data-orientation={orientation}\n orientation={orientation}\n className={cn(\n \"group/tabs flex gap-2 data-[orientation=horizontal]:flex-col\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TabsList({\n className,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List> &\n VariantProps<typeof tabsListVariants>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n data-variant={variant}\n className={cn(tabsListVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction TabsTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring text-foreground/60 hover:text-foreground dark:text-muted-foreground dark:hover:text-foreground relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-all group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 group-data-[variant=default]/tabs-list:data-[state=active]:shadow-sm group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n \"group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent\",\n \"data-[state=active]:bg-background dark:data-[state=active]:text-foreground dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 data-[state=active]:text-foreground\",\n \"after:bg-foreground after:absolute after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TabsContent({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn(\"flex-1 outline-none\", className)}\n {...props}\n />\n )\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n // Base\n \"flex field-sizing-content min-h-16 w-full rounded-md border px-3 py-2 text-xs shadow-xs outline-none\",\n \"bg-transparent\",\n \"border-border\",\n \"placeholder:text-muted-foreground/50\",\n // Transition\n \"transition-[color,box-shadow,border-color,background-color] duration-150\",\n // Hover\n \"hover:border-accent-cyan/40 hover:bg-card\",\n // Focus\n \"focus-visible:border-accent-cyan focus-visible:ring-accent-cyan/20 focus-visible:ring-[3px]\",\n \"focus-visible:bg-card\",\n // Error\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n \"aria-invalid:hover:border-destructive\",\n // Disabled\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n )\n}\n\nfunction Tooltip({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n )\n}\n\nfunction TooltipTrigger({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n \"bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance\",\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","import * as React from \"react\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nconst alertVariants = cva(\r\n \"relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-card text-foreground\",\r\n destructive:\r\n \"text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n },\r\n }\r\n)\r\n\r\nfunction Alert({\r\n className,\r\n variant,\r\n ...props\r\n}: React.ComponentProps<\"div\"> & VariantProps<typeof alertVariants>) {\r\n return (\r\n <div\r\n data-slot=\"alert\"\r\n role=\"alert\"\r\n className={cn(alertVariants({ variant }), className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction AlertTitle({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"alert-title\"\r\n className={cn(\r\n \"col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction AlertDescription({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"alert-description\"\r\n className={cn(\r\n \"text-muted-foreground col-start-2 text-sm [&_p]:leading-relaxed\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Alert, AlertTitle, AlertDescription }\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nconst toggleVariants = cva(\r\n \"inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-transparent\",\r\n outline:\r\n \"border border-input bg-transparent shadow-sm hover:bg-accent hover:text-accent-foreground\",\r\n },\r\n size: {\r\n default: \"h-9 px-2 min-w-9\",\r\n sm: \"h-8 px-1.5 min-w-8\",\r\n lg: \"h-10 px-2.5 min-w-10\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n size: \"default\",\r\n },\r\n }\r\n)\r\n\r\nfunction Toggle({\r\n className,\r\n variant,\r\n size,\r\n ...props\r\n}: React.ComponentProps<typeof TogglePrimitive.Root> &\r\n VariantProps<typeof toggleVariants>) {\r\n return (\r\n <TogglePrimitive.Root\r\n data-slot=\"toggle\"\r\n className={cn(toggleVariants({ variant, size, className }))}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Toggle, toggleVariants }\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport * as ToggleGroupPrimitive from \"@radix-ui/react-toggle-group\"\r\nimport { type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport { toggleVariants } from \"./toggle\"\r\n\r\nconst ToggleGroupContext = React.createContext<\r\n VariantProps<typeof toggleVariants>\r\n>({\r\n size: \"default\",\r\n variant: \"default\",\r\n})\r\n\r\nfunction ToggleGroup({\r\n className,\r\n variant,\r\n size,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Root> &\r\n VariantProps<typeof toggleVariants>) {\r\n return (\r\n <ToggleGroupPrimitive.Root\r\n data-slot=\"toggle-group\"\r\n className={cn(\r\n \"flex items-center justify-center gap-1\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <ToggleGroupContext.Provider value={{ variant, size }}>\r\n {children}\r\n </ToggleGroupContext.Provider>\r\n </ToggleGroupPrimitive.Root>\r\n )\r\n}\r\n\r\nfunction ToggleGroupItem({\r\n className,\r\n children,\r\n variant,\r\n size,\r\n ...props\r\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Item> &\r\n VariantProps<typeof toggleVariants>) {\r\n const context = React.useContext(ToggleGroupContext)\r\n\r\n return (\r\n <ToggleGroupPrimitive.Item\r\n data-slot=\"toggle-group-item\"\r\n className={cn(\r\n toggleVariants({\r\n variant: variant || context.variant,\r\n size: size || context.size,\r\n }),\r\n \"focus-visible:z-10\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </ToggleGroupPrimitive.Item>\r\n )\r\n}\r\n\r\nexport { ToggleGroup, ToggleGroupItem }\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport * as ContextMenuPrimitive from \"@radix-ui/react-context-menu\"\r\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction ContextMenu({\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Root>) {\r\n return <ContextMenuPrimitive.Root data-slot=\"context-menu\" {...props} />\r\n}\r\n\r\nfunction ContextMenuTrigger({\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Trigger>) {\r\n return <ContextMenuPrimitive.Trigger data-slot=\"context-menu-trigger\" {...props} />\r\n}\r\n\r\nfunction ContextMenuGroup({\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Group>) {\r\n return <ContextMenuPrimitive.Group data-slot=\"context-menu-group\" {...props} />\r\n}\r\n\r\nfunction ContextMenuPortal({\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Portal>) {\r\n return <ContextMenuPrimitive.Portal data-slot=\"context-menu-portal\" {...props} />\r\n}\r\n\r\nfunction ContextMenuSub({\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Sub>) {\r\n return <ContextMenuPrimitive.Sub data-slot=\"context-menu-sub\" {...props} />\r\n}\r\n\r\nfunction ContextMenuRadioGroup({\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.RadioGroup>) {\r\n return <ContextMenuPrimitive.RadioGroup data-slot=\"context-menu-radio-group\" {...props} />\r\n}\r\n\r\nfunction ContextMenuSubTrigger({\r\n className,\r\n inset,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.SubTrigger> & {\r\n inset?: boolean\r\n}) {\r\n return (\r\n <ContextMenuPrimitive.SubTrigger\r\n data-slot=\"context-menu-sub-trigger\"\r\n className={cn(\r\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none\",\r\n inset && \"pl-8\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <ChevronRightIcon className=\"ml-auto h-4 w-4\" />\r\n </ContextMenuPrimitive.SubTrigger>\r\n )\r\n}\r\n\r\nfunction ContextMenuSubContent({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.SubContent>) {\r\n return (\r\n <ContextMenuPrimitive.SubContent\r\n data-slot=\"context-menu-sub-content\"\r\n className={cn(\r\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] overflow-hidden rounded-md border p-1 shadow-md\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ContextMenuContent({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Content>) {\r\n return (\r\n <ContextMenuPrimitive.Portal>\r\n <ContextMenuPrimitive.Content\r\n data-slot=\"context-menu-content\"\r\n className={cn(\r\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] overflow-hidden rounded-md border p-1 shadow-md\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </ContextMenuPrimitive.Portal>\r\n )\r\n}\r\n\r\nfunction ContextMenuItem({\r\n className,\r\n inset,\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Item> & {\r\n inset?: boolean\r\n}) {\r\n return (\r\n <ContextMenuPrimitive.Item\r\n data-slot=\"context-menu-item\"\r\n className={cn(\r\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\r\n inset && \"pl-8\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ContextMenuCheckboxItem({\r\n className,\r\n children,\r\n checked,\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.CheckboxItem>) {\r\n return (\r\n <ContextMenuPrimitive.CheckboxItem\r\n data-slot=\"context-menu-checkbox-item\"\r\n className={cn(\r\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\r\n className\r\n )}\r\n checked={checked}\r\n {...props}\r\n >\r\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\r\n <ContextMenuPrimitive.ItemIndicator>\r\n <CheckIcon className=\"h-4 w-4\" />\r\n </ContextMenuPrimitive.ItemIndicator>\r\n </span>\r\n {children}\r\n </ContextMenuPrimitive.CheckboxItem>\r\n )\r\n}\r\n\r\nfunction ContextMenuRadioItem({\r\n className,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.RadioItem>) {\r\n return (\r\n <ContextMenuPrimitive.RadioItem\r\n data-slot=\"context-menu-radio-item\"\r\n className={cn(\r\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\r\n <ContextMenuPrimitive.ItemIndicator>\r\n <CircleIcon className=\"h-2 w-2 fill-current\" />\r\n </ContextMenuPrimitive.ItemIndicator>\r\n </span>\r\n {children}\r\n </ContextMenuPrimitive.RadioItem>\r\n )\r\n}\r\n\r\nfunction ContextMenuLabel({\r\n className,\r\n inset,\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Label> & {\r\n inset?: boolean\r\n}) {\r\n return (\r\n <ContextMenuPrimitive.Label\r\n data-slot=\"context-menu-label\"\r\n className={cn(\r\n \"px-2 py-1.5 text-sm font-semibold text-foreground\",\r\n inset && \"pl-8\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ContextMenuSeparator({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Separator>) {\r\n return (\r\n <ContextMenuPrimitive.Separator\r\n data-slot=\"context-menu-separator\"\r\n className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ContextMenuShortcut({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"span\">) {\r\n return (\r\n <span\r\n data-slot=\"context-menu-shortcut\"\r\n className={cn(\r\n \"ml-auto text-xs tracking-widest text-muted-foreground\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n ContextMenu,\r\n ContextMenuTrigger,\r\n ContextMenuContent,\r\n ContextMenuItem,\r\n ContextMenuCheckboxItem,\r\n ContextMenuRadioItem,\r\n ContextMenuLabel,\r\n ContextMenuSeparator,\r\n ContextMenuShortcut,\r\n ContextMenuGroup,\r\n ContextMenuPortal,\r\n ContextMenuSub,\r\n ContextMenuSubContent,\r\n ContextMenuSubTrigger,\r\n ContextMenuRadioGroup,\r\n}\r\n","\"use client\";\nimport { jsx as te } from \"react/jsx-runtime\";\nimport { useState as ne, useCallback as Q, useId as ot, useLayoutEffect as Ae, useEffect as ue, useRef as O, createContext as it, useImperativeHandle as Ne, useMemo as _e, useSyncExternalStore as Fe, useContext as rt } from \"react\";\nfunction st(e, t) {\n const n = getComputedStyle(e), o = parseFloat(n.fontSize);\n return t * o;\n}\nfunction at(e, t) {\n const n = getComputedStyle(e.ownerDocument.body), o = parseFloat(n.fontSize);\n return t * o;\n}\nfunction lt(e) {\n return e / 100 * window.innerHeight;\n}\nfunction ut(e) {\n return e / 100 * window.innerWidth;\n}\nfunction ct(e) {\n switch (typeof e) {\n case \"number\":\n return [e, \"px\"];\n case \"string\": {\n const t = parseFloat(e);\n return e.endsWith(\"%\") ? [t, \"%\"] : e.endsWith(\"px\") ? [t, \"px\"] : e.endsWith(\"rem\") ? [t, \"rem\"] : e.endsWith(\"em\") ? [t, \"em\"] : e.endsWith(\"vh\") ? [t, \"vh\"] : e.endsWith(\"vw\") ? [t, \"vw\"] : [t, \"%\"];\n }\n }\n}\nfunction re({\n groupSize: e,\n panelElement: t,\n styleProp: n\n}) {\n let o;\n const [i, s] = ct(n);\n switch (s) {\n case \"%\": {\n o = i / 100 * e;\n break;\n }\n case \"px\": {\n o = i;\n break;\n }\n case \"rem\": {\n o = at(t, i);\n break;\n }\n case \"em\": {\n o = st(t, i);\n break;\n }\n case \"vh\": {\n o = lt(i);\n break;\n }\n case \"vw\": {\n o = ut(i);\n break;\n }\n }\n return o;\n}\nfunction _(e) {\n return parseFloat(e.toFixed(3));\n}\nfunction J({\n group: e\n}) {\n const { orientation: t, panels: n } = e;\n return n.reduce((o, i) => (o += t === \"horizontal\" ? i.element.offsetWidth : i.element.offsetHeight, o), 0);\n}\nfunction de(e) {\n const { panels: t } = e, n = J({ group: e });\n return n === 0 ? t.map((o) => ({\n collapsedSize: 0,\n collapsible: o.panelConstraints.collapsible === !0,\n defaultSize: void 0,\n disabled: o.panelConstraints.disabled,\n minSize: 0,\n maxSize: 100,\n panelId: o.id\n })) : t.map((o) => {\n const { element: i, panelConstraints: s } = o;\n let l = 0;\n if (s.collapsedSize !== void 0) {\n const u = re({\n groupSize: n,\n panelElement: i,\n styleProp: s.collapsedSize\n });\n l = _(u / n * 100);\n }\n let r;\n if (s.defaultSize !== void 0) {\n const u = re({\n groupSize: n,\n panelElement: i,\n styleProp: s.defaultSize\n });\n r = _(u / n * 100);\n }\n let a = 0;\n if (s.minSize !== void 0) {\n const u = re({\n groupSize: n,\n panelElement: i,\n styleProp: s.minSize\n });\n a = _(u / n * 100);\n }\n let c = 100;\n if (s.maxSize !== void 0) {\n const u = re({\n groupSize: n,\n panelElement: i,\n styleProp: s.maxSize\n });\n c = _(u / n * 100);\n }\n return {\n collapsedSize: l,\n collapsible: s.collapsible === !0,\n defaultSize: r,\n disabled: s.disabled,\n minSize: a,\n maxSize: c,\n panelId: o.id\n };\n });\n}\nfunction P(e, t = \"Assertion error\") {\n if (!e)\n throw Error(t);\n}\nfunction pe(e, t) {\n return Array.from(t).sort(\n e === \"horizontal\" ? ft : dt\n );\n}\nfunction ft(e, t) {\n const n = e.element.offsetLeft - t.element.offsetLeft;\n return n !== 0 ? n : e.element.offsetWidth - t.element.offsetWidth;\n}\nfunction dt(e, t) {\n const n = e.element.offsetTop - t.element.offsetTop;\n return n !== 0 ? n : e.element.offsetHeight - t.element.offsetHeight;\n}\nfunction $e(e) {\n return e !== null && typeof e == \"object\" && \"nodeType\" in e && e.nodeType === Node.ELEMENT_NODE;\n}\nfunction He(e, t) {\n return {\n x: e.x >= t.left && e.x <= t.right ? 0 : Math.min(\n Math.abs(e.x - t.left),\n Math.abs(e.x - t.right)\n ),\n y: e.y >= t.top && e.y <= t.bottom ? 0 : Math.min(\n Math.abs(e.y - t.top),\n Math.abs(e.y - t.bottom)\n )\n };\n}\nfunction pt({\n orientation: e,\n rects: t,\n targetRect: n\n}) {\n const o = {\n x: n.x + n.width / 2,\n y: n.y + n.height / 2\n };\n let i, s = Number.MAX_VALUE;\n for (const l of t) {\n const { x: r, y: a } = He(o, l), c = e === \"horizontal\" ? r : a;\n c < s && (s = c, i = l);\n }\n return P(i, \"No rect found\"), i;\n}\nlet se;\nfunction mt() {\n return se === void 0 && (typeof matchMedia == \"function\" ? se = !!matchMedia(\"(pointer:coarse)\").matches : se = !1), se;\n}\nfunction Ve(e) {\n const { element: t, orientation: n, panels: o, separators: i } = e, s = pe(\n n,\n Array.from(t.children).filter($e).map((h) => ({ element: h }))\n ).map(({ element: h }) => h), l = [];\n let r = !1, a = !1, c = -1, u = -1, g = 0, b, S = [];\n {\n let h = -1;\n for (const d of s)\n d.hasAttribute(\"data-panel\") && (h++, d.ariaDisabled === null && (g++, c === -1 && (c = h), u = h));\n }\n if (g > 1) {\n let h = -1;\n for (const d of s)\n if (d.hasAttribute(\"data-panel\")) {\n h++;\n const f = o.find(\n (m) => m.element === d\n );\n if (f) {\n if (b) {\n const m = b.element.getBoundingClientRect(), v = d.getBoundingClientRect();\n let x;\n if (a) {\n const y = n === \"horizontal\" ? new DOMRect(\n m.right,\n m.top,\n 0,\n m.height\n ) : new DOMRect(\n m.left,\n m.bottom,\n m.width,\n 0\n ), p = n === \"horizontal\" ? new DOMRect(v.left, v.top, 0, v.height) : new DOMRect(v.left, v.top, v.width, 0);\n switch (S.length) {\n case 0: {\n x = [\n y,\n p\n ];\n break;\n }\n case 1: {\n const w = S[0], C = pt({\n orientation: n,\n rects: [m, v],\n targetRect: w.element.getBoundingClientRect()\n });\n x = [\n w,\n C === m ? p : y\n ];\n break;\n }\n default: {\n x = S;\n break;\n }\n }\n } else\n S.length ? x = S : x = [\n n === \"horizontal\" ? new DOMRect(\n m.right,\n v.top,\n v.left - m.right,\n v.height\n ) : new DOMRect(\n v.left,\n m.bottom,\n v.width,\n v.top - m.bottom\n )\n ];\n for (const y of x) {\n let p = \"width\" in y ? y : y.element.getBoundingClientRect();\n const w = mt() ? e.resizeTargetMinimumSize.coarse : e.resizeTargetMinimumSize.fine;\n if (p.width < w) {\n const R = w - p.width;\n p = new DOMRect(\n p.x - R / 2,\n p.y,\n p.width + R,\n p.height\n );\n }\n if (p.height < w) {\n const R = w - p.height;\n p = new DOMRect(\n p.x,\n p.y - R / 2,\n p.width,\n p.height + R\n );\n }\n const C = h <= c || h > u;\n !r && !C && l.push({\n group: e,\n groupSize: J({ group: e }),\n panels: [b, f],\n separator: \"width\" in y ? void 0 : y,\n rect: p\n }), r = !1;\n }\n }\n a = !1, b = f, S = [];\n }\n } else if (d.hasAttribute(\"data-separator\")) {\n d.ariaDisabled !== null && (r = !0);\n const f = i.find(\n (m) => m.element === d\n );\n f ? S.push(f) : (b = void 0, S = []);\n } else\n a = !0;\n }\n return l;\n}\nclass ht {\n #e = {};\n addListener(t, n) {\n const o = this.#e[t];\n return o === void 0 ? this.#e[t] = [n] : o.includes(n) || o.push(n), () => {\n this.removeListener(t, n);\n };\n }\n emit(t, n) {\n const o = this.#e[t];\n if (o !== void 0)\n if (o.length === 1)\n o[0].call(null, n);\n else {\n let i = !1, s = null;\n const l = Array.from(o);\n for (let r = 0; r < l.length; r++) {\n const a = l[r];\n try {\n a.call(null, n);\n } catch (c) {\n s === null && (i = !0, s = c);\n }\n }\n if (i)\n throw s;\n }\n }\n removeAllListeners() {\n this.#e = {};\n }\n removeListener(t, n) {\n const o = this.#e[t];\n if (o !== void 0) {\n const i = o.indexOf(n);\n i >= 0 && o.splice(i, 1);\n }\n }\n}\nfunction k(e, t, n = 0) {\n return Math.abs(_(e) - _(t)) <= n;\n}\nlet A = {\n cursorFlags: 0,\n interactionState: {\n state: \"inactive\"\n },\n mountedGroups: /* @__PURE__ */ new Map()\n};\nconst $ = new ht();\nfunction G() {\n return A;\n}\nfunction I(e) {\n const t = typeof e == \"function\" ? e(A) : e;\n if (A === t)\n return A;\n const n = A;\n return A = {\n ...A,\n ...t\n }, t.cursorFlags !== void 0 && $.emit(\"cursorFlagsChange\", A.cursorFlags), t.interactionState !== void 0 && $.emit(\"interactionStateChange\", A.interactionState), t.mountedGroups !== void 0 && (A.mountedGroups.forEach((o, i) => {\n o.derivedPanelConstraints.forEach((s) => {\n if (s.collapsible) {\n const { layout: l } = n.mountedGroups.get(i) ?? {};\n if (l) {\n const r = k(\n s.collapsedSize,\n o.layout[s.panelId]\n ), a = k(\n s.collapsedSize,\n l[s.panelId]\n );\n r && !a && (i.inMemoryLastExpandedPanelSizes[s.panelId] = l[s.panelId]);\n }\n }\n });\n }), $.emit(\"mountedGroupsChange\", A.mountedGroups)), A;\n}\nfunction gt(e, t, n) {\n let o, i = {\n x: 1 / 0,\n y: 1 / 0\n };\n for (const s of t) {\n const l = He(n, s.rect);\n switch (e) {\n case \"horizontal\": {\n l.x <= i.x && (o = s, i = l);\n break;\n }\n case \"vertical\": {\n l.y <= i.y && (o = s, i = l);\n break;\n }\n }\n }\n return o ? {\n distance: i,\n hitRegion: o\n } : void 0;\n}\nfunction yt(e) {\n return e !== null && typeof e == \"object\" && \"nodeType\" in e && e.nodeType === Node.DOCUMENT_FRAGMENT_NODE;\n}\nfunction St(e, t) {\n if (e === t) throw new Error(\"Cannot compare node with itself\");\n const n = {\n a: we(e),\n b: we(t)\n };\n let o;\n for (; n.a.at(-1) === n.b.at(-1); )\n o = n.a.pop(), n.b.pop();\n P(\n o,\n \"Stacking order can only be calculated for elements with a common ancestor\"\n );\n const i = {\n a: be(ze(n.a)),\n b: be(ze(n.b))\n };\n if (i.a === i.b) {\n const s = o.childNodes, l = {\n a: n.a.at(-1),\n b: n.b.at(-1)\n };\n let r = s.length;\n for (; r--; ) {\n const a = s[r];\n if (a === l.a) return 1;\n if (a === l.b) return -1;\n }\n }\n return Math.sign(i.a - i.b);\n}\nconst vt = /\\b(?:position|zIndex|opacity|transform|webkitTransform|mixBlendMode|filter|webkitFilter|isolation)\\b/;\nfunction xt(e) {\n const t = getComputedStyle(je(e) ?? e).display;\n return t === \"flex\" || t === \"inline-flex\";\n}\nfunction zt(e) {\n const t = getComputedStyle(e);\n return !!(t.position === \"fixed\" || t.zIndex !== \"auto\" && (t.position !== \"static\" || xt(e)) || +t.opacity < 1 || \"transform\" in t && t.transform !== \"none\" || \"webkitTransform\" in t && t.webkitTransform !== \"none\" || \"mixBlendMode\" in t && t.mixBlendMode !== \"normal\" || \"filter\" in t && t.filter !== \"none\" || \"webkitFilter\" in t && t.webkitFilter !== \"none\" || \"isolation\" in t && t.isolation === \"isolate\" || vt.test(t.willChange) || t.webkitOverflowScrolling === \"touch\");\n}\nfunction ze(e) {\n let t = e.length;\n for (; t--; ) {\n const n = e[t];\n if (P(n, \"Missing node\"), zt(n)) return n;\n }\n return null;\n}\nfunction be(e) {\n return e && Number(getComputedStyle(e).zIndex) || 0;\n}\nfunction we(e) {\n const t = [];\n for (; e; )\n t.push(e), e = je(e);\n return t;\n}\nfunction je(e) {\n const { parentNode: t } = e;\n return yt(t) ? t.host : t;\n}\nfunction bt(e, t) {\n return e.x < t.x + t.width && e.x + e.width > t.x && e.y < t.y + t.height && e.y + e.height > t.y;\n}\nfunction wt({\n groupElement: e,\n hitRegion: t,\n pointerEventTarget: n\n}) {\n if (!$e(n) || n.contains(e) || e.contains(n))\n return !0;\n if (St(n, e) > 0) {\n let o = n;\n for (; o; ) {\n if (o.contains(e))\n return !0;\n if (bt(o.getBoundingClientRect(), t))\n return !1;\n o = o.parentElement;\n }\n }\n return !0;\n}\nfunction me(e, t) {\n const n = [];\n return t.forEach((o, i) => {\n if (i.disabled)\n return;\n const s = Ve(i), l = gt(i.orientation, s, {\n x: e.clientX,\n y: e.clientY\n });\n l && l.distance.x <= 0 && l.distance.y <= 0 && wt({\n groupElement: i.element,\n hitRegion: l.hitRegion.rect,\n pointerEventTarget: e.target\n }) && n.push(l.hitRegion);\n }), n;\n}\nfunction Lt(e, t) {\n if (e.length !== t.length)\n return !1;\n for (let n = 0; n < e.length; n++)\n if (e[n] != t[n])\n return !1;\n return !0;\n}\nfunction F(e, t) {\n return k(e, t) ? 0 : e > t ? 1 : -1;\n}\nfunction Y({\n overrideDisabledPanels: e,\n panelConstraints: t,\n prevSize: n,\n size: o\n}) {\n const {\n collapsedSize: i = 0,\n collapsible: s,\n disabled: l,\n maxSize: r = 100,\n minSize: a = 0\n } = t;\n if (l && !e)\n return n;\n if (F(o, a) < 0)\n if (s) {\n const c = (i + a) / 2;\n F(o, c) < 0 ? o = i : o = a;\n } else\n o = a;\n return o = Math.min(r, o), o = _(o), o;\n}\nfunction oe({\n delta: e,\n initialLayout: t,\n panelConstraints: n,\n pivotIndices: o,\n prevLayout: i,\n trigger: s\n}) {\n if (k(e, 0))\n return t;\n const l = s === \"imperative-api\", r = Object.values(t), a = Object.values(i), c = [...r], [u, g] = o;\n P(u != null, \"Invalid first pivot index\"), P(g != null, \"Invalid second pivot index\");\n let b = 0;\n switch (s) {\n case \"keyboard\": {\n {\n const d = e < 0 ? g : u, f = n[d];\n P(\n f,\n `Panel constraints not found for index ${d}`\n );\n const {\n collapsedSize: m = 0,\n collapsible: v,\n minSize: x = 0\n } = f;\n if (v) {\n const y = r[d];\n if (P(\n y != null,\n `Previous layout not found for panel index ${d}`\n ), k(y, m)) {\n const p = x - y;\n F(p, Math.abs(e)) > 0 && (e = e < 0 ? 0 - p : p);\n }\n }\n }\n {\n const d = e < 0 ? u : g, f = n[d];\n P(\n f,\n `No panel constraints found for index ${d}`\n );\n const {\n collapsedSize: m = 0,\n collapsible: v,\n minSize: x = 0\n } = f;\n if (v) {\n const y = r[d];\n if (P(\n y != null,\n `Previous layout not found for panel index ${d}`\n ), k(y, x)) {\n const p = y - m;\n F(p, Math.abs(e)) > 0 && (e = e < 0 ? 0 - p : p);\n }\n }\n }\n break;\n }\n default: {\n const d = e < 0 ? g : u, f = n[d];\n P(\n f,\n `Panel constraints not found for index ${d}`\n );\n const m = r[d], { collapsible: v, collapsedSize: x, minSize: y } = f;\n if (v && F(m, y) < 0)\n if (e > 0) {\n const p = y - x, w = p / 2, C = m + e;\n F(C, y) < 0 && (e = F(e, w) <= 0 ? 0 : p);\n } else {\n const p = y - x, w = 100 - p / 2, C = m - e;\n F(C, y) < 0 && (e = F(100 + e, w) > 0 ? 0 : -p);\n }\n break;\n }\n }\n {\n const d = e < 0 ? 1 : -1;\n let f = e < 0 ? g : u, m = 0;\n for (; ; ) {\n const x = r[f];\n P(\n x != null,\n `Previous layout not found for panel index ${f}`\n );\n const p = Y({\n overrideDisabledPanels: l,\n panelConstraints: n[f],\n prevSize: x,\n size: 100\n }) - x;\n if (m += p, f += d, f < 0 || f >= n.length)\n break;\n }\n const v = Math.min(Math.abs(e), Math.abs(m));\n e = e < 0 ? 0 - v : v;\n }\n {\n let f = e < 0 ? u : g;\n for (; f >= 0 && f < n.length; ) {\n const m = Math.abs(e) - Math.abs(b), v = r[f];\n P(\n v != null,\n `Previous layout not found for panel index ${f}`\n );\n const x = v - m, y = Y({\n overrideDisabledPanels: l,\n panelConstraints: n[f],\n prevSize: v,\n size: x\n });\n if (!k(v, y) && (b += v - y, c[f] = y, b.toFixed(3).localeCompare(Math.abs(e).toFixed(3), void 0, {\n numeric: !0\n }) >= 0))\n break;\n e < 0 ? f-- : f++;\n }\n }\n if (Lt(a, c))\n return i;\n {\n const d = e < 0 ? g : u, f = r[d];\n P(\n f != null,\n `Previous layout not found for panel index ${d}`\n );\n const m = f + b, v = Y({\n overrideDisabledPanels: l,\n panelConstraints: n[d],\n prevSize: f,\n size: m\n });\n if (c[d] = v, !k(v, m)) {\n let x = m - v, p = e < 0 ? g : u;\n for (; p >= 0 && p < n.length; ) {\n const w = c[p];\n P(\n w != null,\n `Previous layout not found for panel index ${p}`\n );\n const C = w + x, R = Y({\n overrideDisabledPanels: l,\n panelConstraints: n[p],\n prevSize: w,\n size: C\n });\n if (k(w, R) || (x -= R - w, c[p] = R), k(x, 0))\n break;\n e > 0 ? p-- : p++;\n }\n }\n }\n const S = Object.values(c).reduce(\n (d, f) => f + d,\n 0\n );\n if (!k(S, 100, 0.1))\n return i;\n const h = Object.keys(i);\n return c.reduce((d, f, m) => (d[h[m]] = f, d), {});\n}\nfunction U(e, t) {\n if (Object.keys(e).length !== Object.keys(t).length)\n return !1;\n for (const n in e)\n if (t[n] === void 0 || F(e[n], t[n]) !== 0)\n return !1;\n return !0;\n}\nfunction B({\n layout: e,\n panelConstraints: t\n}) {\n const n = Object.values(e), o = [...n], i = o.reduce(\n (r, a) => r + a,\n 0\n );\n if (o.length !== t.length)\n throw Error(\n `Invalid ${t.length} panel layout: ${o.map((r) => `${r}%`).join(\", \")}`\n );\n if (!k(i, 100) && o.length > 0)\n for (let r = 0; r < t.length; r++) {\n const a = o[r];\n P(a != null, `No layout data found for index ${r}`);\n const c = 100 / i * a;\n o[r] = c;\n }\n let s = 0;\n for (let r = 0; r < t.length; r++) {\n const a = n[r];\n P(a != null, `No layout data found for index ${r}`);\n const c = o[r];\n P(c != null, `No layout data found for index ${r}`);\n const u = Y({\n overrideDisabledPanels: !0,\n panelConstraints: t[r],\n prevSize: a,\n size: c\n });\n c != u && (s += c - u, o[r] = u);\n }\n if (!k(s, 0))\n for (let r = 0; r < t.length; r++) {\n const a = o[r];\n P(a != null, `No layout data found for index ${r}`);\n const c = a + s, u = Y({\n overrideDisabledPanels: !0,\n panelConstraints: t[r],\n prevSize: a,\n size: c\n });\n if (a !== u && (s -= u - a, o[r] = u, k(s, 0)))\n break;\n }\n const l = Object.keys(e);\n return o.reduce((r, a, c) => (r[l[c]] = a, r), {});\n}\nfunction We({\n groupId: e,\n panelId: t\n}) {\n const n = () => {\n const { mountedGroups: r } = G();\n for (const [\n a,\n {\n defaultLayoutDeferred: c,\n derivedPanelConstraints: u,\n layout: g,\n separatorToPanels: b\n }\n ] of r)\n if (a.id === e)\n return {\n defaultLayoutDeferred: c,\n derivedPanelConstraints: u,\n group: a,\n layout: g,\n separatorToPanels: b\n };\n throw Error(`Group ${e} not found`);\n }, o = () => {\n const r = n().derivedPanelConstraints.find(\n (a) => a.panelId === t\n );\n if (r !== void 0)\n return r;\n throw Error(`Panel constraints not found for Panel ${t}`);\n }, i = () => {\n const r = n().group.panels.find((a) => a.id === t);\n if (r !== void 0)\n return r;\n throw Error(`Layout not found for Panel ${t}`);\n }, s = () => {\n const r = n().layout[t];\n if (r !== void 0)\n return r;\n throw Error(`Layout not found for Panel ${t}`);\n }, l = (r) => {\n const a = s();\n if (r === a)\n return;\n const {\n defaultLayoutDeferred: c,\n derivedPanelConstraints: u,\n group: g,\n layout: b,\n separatorToPanels: S\n } = n(), h = g.panels.findIndex((v) => v.id === t), d = h === g.panels.length - 1, f = oe({\n delta: d ? a - r : r - a,\n initialLayout: b,\n panelConstraints: u,\n pivotIndices: d ? [h - 1, h] : [h, h + 1],\n prevLayout: b,\n trigger: \"imperative-api\"\n }), m = B({\n layout: f,\n panelConstraints: u\n });\n U(b, m) || I((v) => ({\n mountedGroups: new Map(v.mountedGroups).set(g, {\n defaultLayoutDeferred: c,\n derivedPanelConstraints: u,\n layout: m,\n separatorToPanels: S\n })\n }));\n };\n return {\n collapse: () => {\n const { collapsible: r, collapsedSize: a } = o(), { mutableValues: c } = i(), u = s();\n r && u !== a && (c.expandToSize = u, l(a));\n },\n expand: () => {\n const { collapsible: r, collapsedSize: a, minSize: c } = o(), { mutableValues: u } = i(), g = s();\n if (r && g === a) {\n let b = u.expandToSize ?? c;\n b === 0 && (b = 1), l(b);\n }\n },\n getSize: () => {\n const { group: r } = n(), a = s(), { element: c } = i(), u = r.orientation === \"horizontal\" ? c.offsetWidth : c.offsetHeight;\n return {\n asPercentage: a,\n inPixels: u\n };\n },\n isCollapsed: () => {\n const { collapsible: r, collapsedSize: a } = o(), c = s();\n return r && k(a, c);\n },\n resize: (r) => {\n if (s() !== r) {\n let c;\n switch (typeof r) {\n case \"number\": {\n const { group: u } = n(), g = J({ group: u });\n c = _(r / g * 100);\n break;\n }\n case \"string\": {\n c = parseFloat(r);\n break;\n }\n }\n l(c);\n }\n }\n };\n}\nfunction Le(e) {\n if (e.defaultPrevented)\n return;\n const { mountedGroups: t } = G();\n me(e, t).forEach((o) => {\n if (o.separator) {\n const i = o.panels.find(\n (s) => s.panelConstraints.defaultSize !== void 0\n );\n if (i) {\n const s = i.panelConstraints.defaultSize, l = We({\n groupId: o.group.id,\n panelId: i.id\n });\n l && s !== void 0 && (l.resize(s), e.preventDefault());\n }\n }\n });\n}\nfunction le(e) {\n const { mountedGroups: t } = G();\n for (const [n] of t)\n if (n.separators.some(\n (o) => o.element === e\n ))\n return n;\n throw Error(\"Could not find parent Group for separator element\");\n}\nfunction Ue({\n groupId: e\n}) {\n const t = () => {\n const { mountedGroups: n } = G();\n for (const [o, i] of n)\n if (o.id === e)\n return { group: o, ...i };\n throw Error(`Could not find Group with id \"${e}\"`);\n };\n return {\n getLayout() {\n const { defaultLayoutDeferred: n, layout: o } = t();\n return n ? {} : o;\n },\n setLayout(n) {\n const {\n defaultLayoutDeferred: o,\n derivedPanelConstraints: i,\n group: s,\n layout: l,\n separatorToPanels: r\n } = t(), a = B({\n layout: n,\n panelConstraints: i\n });\n if (o)\n return l;\n if (!U(l, a)) {\n I((u) => ({\n mountedGroups: new Map(u.mountedGroups).set(s, {\n defaultLayoutDeferred: o,\n derivedPanelConstraints: i,\n layout: a,\n separatorToPanels: r\n })\n }));\n const c = s.panels.map(({ id: u }) => u).join(\",\");\n s.inMemoryLayouts[c] = a;\n }\n return a;\n }\n };\n}\nfunction Be(e) {\n const { mountedGroups: t } = G(), n = t.get(e);\n return P(n, `Mounted Group ${e.id} not found`), n;\n}\nfunction W(e, t) {\n const n = le(e), o = Be(n), i = n.separators.find(\n (g) => g.element === e\n );\n P(i, \"Matching separator not found\");\n const s = o.separatorToPanels.get(i);\n P(s, \"Matching panels not found\");\n const l = s.map((g) => n.panels.indexOf(g)), a = Ue({ groupId: n.id }).getLayout(), c = oe({\n delta: t,\n initialLayout: a,\n panelConstraints: o.derivedPanelConstraints,\n pivotIndices: l,\n prevLayout: a,\n trigger: \"keyboard\"\n }), u = B({\n layout: c,\n panelConstraints: o.derivedPanelConstraints\n });\n U(a, u) || I((g) => ({\n mountedGroups: new Map(g.mountedGroups).set(n, {\n defaultLayoutDeferred: o.defaultLayoutDeferred,\n derivedPanelConstraints: o.derivedPanelConstraints,\n layout: u,\n separatorToPanels: o.separatorToPanels\n })\n }));\n}\nfunction Pe(e) {\n if (e.defaultPrevented)\n return;\n const t = e.currentTarget, n = le(t);\n if (!n.disabled)\n switch (e.key) {\n case \"ArrowDown\": {\n e.preventDefault(), n.orientation === \"vertical\" && W(t, 5);\n break;\n }\n case \"ArrowLeft\": {\n e.preventDefault(), n.orientation === \"horizontal\" && W(t, -5);\n break;\n }\n case \"ArrowRight\": {\n e.preventDefault(), n.orientation === \"horizontal\" && W(t, 5);\n break;\n }\n case \"ArrowUp\": {\n e.preventDefault(), n.orientation === \"vertical\" && W(t, -5);\n break;\n }\n case \"End\": {\n e.preventDefault(), W(t, 100);\n break;\n }\n case \"Enter\": {\n e.preventDefault();\n const o = le(t), { derivedPanelConstraints: i, layout: s, separatorToPanels: l } = Be(o), r = o.separators.find(\n (g) => g.element === t\n );\n P(r, \"Matching separator not found\");\n const a = l.get(r);\n P(a, \"Matching panels not found\");\n const c = a[0], u = i.find(\n (g) => g.panelId === c.id\n );\n if (P(u, \"Panel metadata not found\"), u.collapsible) {\n const g = s[c.id], b = u.collapsedSize === g ? o.inMemoryLastExpandedPanelSizes[c.id] ?? u.minSize : u.collapsedSize;\n W(t, b - g);\n }\n break;\n }\n case \"F6\": {\n e.preventDefault();\n const i = le(t).separators.map(\n (a) => a.element\n ), s = Array.from(i).findIndex(\n (a) => a === e.currentTarget\n );\n P(s !== null, \"Index not found\");\n const l = e.shiftKey ? s > 0 ? s - 1 : i.length - 1 : s + 1 < i.length ? s + 1 : 0;\n i[l].focus();\n break;\n }\n case \"Home\": {\n e.preventDefault(), W(t, -100);\n break;\n }\n }\n}\nfunction Ce(e) {\n if (e.defaultPrevented)\n return;\n if (e.pointerType === \"mouse\" && e.button > 0)\n return;\n const { mountedGroups: t } = G(), n = me(e, t), o = /* @__PURE__ */ new Map();\n let i = !1;\n n.forEach((s) => {\n s.separator && (i || (i = !0, s.separator.element.focus()));\n const l = t.get(s.group);\n l && o.set(s.group, l.layout);\n }), I({\n interactionState: {\n hitRegions: n,\n initialLayoutMap: o,\n pointerDownAtPoint: { x: e.clientX, y: e.clientY },\n state: \"active\"\n }\n }), n.length && e.preventDefault();\n}\nconst Pt = (e) => e, ce = () => {\n}, Ke = 1, Xe = 2, qe = 4, Ye = 8, Re = 3, Me = 12;\nlet ae;\nfunction Ee() {\n return ae === void 0 && (ae = !1, typeof window < \"u\" && (window.navigator.userAgent.includes(\"Chrome\") || window.navigator.userAgent.includes(\"Firefox\")) && (ae = !0)), ae;\n}\nfunction Ct({\n cursorFlags: e,\n groups: t,\n state: n\n}) {\n let o = 0, i = 0;\n switch (n) {\n case \"active\":\n case \"hover\":\n t.forEach((s) => {\n if (!s.disableCursor)\n switch (s.orientation) {\n case \"horizontal\": {\n o++;\n break;\n }\n case \"vertical\": {\n i++;\n break;\n }\n }\n });\n }\n if (!(o === 0 && i === 0)) {\n switch (n) {\n case \"active\": {\n if (e && Ee()) {\n const s = (e & Ke) !== 0, l = (e & Xe) !== 0, r = (e & qe) !== 0, a = (e & Ye) !== 0;\n if (s)\n return r ? \"se-resize\" : a ? \"ne-resize\" : \"e-resize\";\n if (l)\n return r ? \"sw-resize\" : a ? \"nw-resize\" : \"w-resize\";\n if (r)\n return \"s-resize\";\n if (a)\n return \"n-resize\";\n }\n break;\n }\n }\n return Ee() ? o > 0 && i > 0 ? \"move\" : o > 0 ? \"ew-resize\" : \"ns-resize\" : o > 0 && i > 0 ? \"grab\" : o > 0 ? \"col-resize\" : \"row-resize\";\n }\n}\nconst ke = /* @__PURE__ */ new WeakMap();\nfunction he(e) {\n if (e.defaultView === null || e.defaultView === void 0)\n return;\n let { prevStyle: t, styleSheet: n } = ke.get(e) ?? {};\n n === void 0 && (n = new e.defaultView.CSSStyleSheet(), e.adoptedStyleSheets.push(n));\n const { cursorFlags: o, interactionState: i } = G();\n switch (i.state) {\n case \"active\":\n case \"hover\": {\n const s = Ct({\n cursorFlags: o,\n groups: i.hitRegions.map((r) => r.group),\n state: i.state\n }), l = `*, *:hover {cursor: ${s} !important; }`;\n if (t === l)\n return;\n t = l, s ? n.cssRules.length === 0 ? n.insertRule(l) : n.replaceSync(l) : n.cssRules.length === 1 && n.deleteRule(0);\n break;\n }\n case \"inactive\": {\n t = void 0, n.cssRules.length === 1 && n.deleteRule(0);\n break;\n }\n }\n ke.set(e, {\n prevStyle: t,\n styleSheet: n\n });\n}\nfunction Je({\n document: e,\n event: t,\n hitRegions: n,\n initialLayoutMap: o,\n mountedGroups: i,\n pointerDownAtPoint: s,\n prevCursorFlags: l\n}) {\n let r = 0;\n const a = new Map(i);\n n.forEach((u) => {\n const { group: g, groupSize: b } = u, { disableCursor: S, orientation: h, panels: d } = g;\n let f = 0;\n s ? h === \"horizontal\" ? f = (t.clientX - s.x) / b * 100 : f = (t.clientY - s.y) / b * 100 : h === \"horizontal\" ? f = t.clientX < 0 ? -100 : 100 : f = t.clientY < 0 ? -100 : 100;\n const m = o.get(g), {\n defaultLayoutDeferred: v,\n derivedPanelConstraints: x,\n layout: y,\n separatorToPanels: p\n } = i.get(g) ?? { defaultLayoutDeferred: !1 };\n if (x && m && y && p) {\n const w = oe({\n delta: f,\n initialLayout: m,\n panelConstraints: x,\n pivotIndices: u.panels.map((C) => d.indexOf(C)),\n prevLayout: y,\n trigger: \"mouse-or-touch\"\n });\n if (U(w, y)) {\n if (f !== 0 && !S)\n switch (h) {\n case \"horizontal\": {\n r |= f < 0 ? Ke : Xe;\n break;\n }\n case \"vertical\": {\n r |= f < 0 ? qe : Ye;\n break;\n }\n }\n } else {\n a.set(u.group, {\n defaultLayoutDeferred: v,\n derivedPanelConstraints: x,\n layout: w,\n separatorToPanels: p\n });\n const C = u.group.panels.map(({ id: R }) => R).join(\",\");\n u.group.inMemoryLayouts[C] = w;\n }\n }\n });\n let c = 0;\n t.movementX === 0 ? c |= l & Re : c |= r & Re, t.movementY === 0 ? c |= l & Me : c |= r & Me, I({\n cursorFlags: c,\n mountedGroups: a\n }), he(e);\n}\nfunction Ge(e) {\n const { cursorFlags: t, interactionState: n, mountedGroups: o } = G();\n switch (n.state) {\n case \"active\":\n Je({\n document: e.currentTarget,\n event: e,\n hitRegions: n.hitRegions,\n initialLayoutMap: n.initialLayoutMap,\n mountedGroups: o,\n prevCursorFlags: t\n });\n }\n}\nfunction Ie(e) {\n if (e.defaultPrevented)\n return;\n const { cursorFlags: t, interactionState: n, mountedGroups: o } = G();\n switch (n.state) {\n case \"active\": {\n if (\n // Skip this check for \"pointerleave\" events, else Firefox triggers a false positive (see #514)\n e.buttons === 0\n ) {\n I(\n (i) => i.interactionState.state === \"inactive\" ? i : {\n cursorFlags: 0,\n interactionState: { state: \"inactive\" }\n }\n ), I((i) => ({\n mountedGroups: new Map(i.mountedGroups)\n }));\n return;\n }\n Je({\n document: e.currentTarget,\n event: e,\n hitRegions: n.hitRegions,\n initialLayoutMap: n.initialLayoutMap,\n mountedGroups: o,\n pointerDownAtPoint: n.pointerDownAtPoint,\n prevCursorFlags: t\n });\n break;\n }\n default: {\n const i = me(e, o);\n i.length === 0 ? n.state !== \"inactive\" && I({\n interactionState: {\n state: \"inactive\"\n }\n }) : I({\n interactionState: {\n hitRegions: i,\n state: \"hover\"\n }\n }), he(e.currentTarget);\n break;\n }\n }\n}\nfunction De(e) {\n if (e.relatedTarget instanceof HTMLIFrameElement) {\n const { interactionState: t } = G();\n switch (t.state) {\n case \"hover\":\n I({\n interactionState: {\n state: \"inactive\"\n }\n });\n }\n }\n}\nfunction Oe(e) {\n if (e.defaultPrevented)\n return;\n if (e.pointerType === \"mouse\" && e.button > 0)\n return;\n const { interactionState: t } = G();\n switch (t.state) {\n case \"active\":\n I({\n cursorFlags: 0,\n interactionState: {\n state: \"inactive\"\n }\n }), t.hitRegions.length > 0 && (he(e.currentTarget), I((n) => ({\n mountedGroups: new Map(n.mountedGroups)\n })), e.preventDefault());\n }\n}\nfunction Te(e) {\n let t = 0, n = 0;\n const o = {};\n for (const s of e)\n if (s.defaultSize !== void 0) {\n t++;\n const l = _(s.defaultSize);\n n += l, o[s.panelId] = l;\n } else\n o[s.panelId] = void 0;\n const i = e.length - t;\n if (i !== 0) {\n const s = _((100 - n) / i);\n for (const l of e)\n l.defaultSize === void 0 && (o[l.panelId] = s);\n }\n return o;\n}\nfunction Rt(e, t, n) {\n if (!n[0])\n return;\n const i = e.panels.find((c) => c.element === t);\n if (!i || !i.onResize)\n return;\n const s = J({ group: e }), l = e.orientation === \"horizontal\" ? i.element.offsetWidth : i.element.offsetHeight, r = i.mutableValues.prevSize, a = {\n asPercentage: _(l / s * 100),\n inPixels: l\n };\n i.mutableValues.prevSize = a, i.onResize(a, i.id, r);\n}\nfunction Mt(e, t) {\n if (Object.keys(e).length !== Object.keys(t).length)\n return !1;\n for (const o in e)\n if (e[o] !== t[o])\n return !1;\n return !0;\n}\nfunction Et(e, t) {\n const n = e.map((i) => i.id), o = Object.keys(t);\n if (n.length !== o.length)\n return !1;\n for (const i of n)\n if (!o.includes(i))\n return !1;\n return !0;\n}\nconst q = /* @__PURE__ */ new Map();\nfunction kt(e) {\n let t = !0;\n P(\n e.element.ownerDocument.defaultView,\n \"Cannot register an unmounted Group\"\n );\n const n = e.element.ownerDocument.defaultView.ResizeObserver, o = /* @__PURE__ */ new Set(), i = /* @__PURE__ */ new Set(), s = new n((h) => {\n for (const d of h) {\n const { borderBoxSize: f, target: m } = d;\n if (m === e.element) {\n if (t) {\n if (J({ group: e }) === 0)\n return;\n I((x) => {\n const y = x.mountedGroups.get(e);\n if (y) {\n const p = de(e), w = y.defaultLayoutDeferred ? Te(p) : y.layout, C = B({\n layout: w,\n panelConstraints: p\n });\n return !y.defaultLayoutDeferred && U(w, C) && Mt(\n y.derivedPanelConstraints,\n p\n ) ? x : {\n mountedGroups: new Map(x.mountedGroups).set(e, {\n defaultLayoutDeferred: !1,\n derivedPanelConstraints: p,\n layout: C,\n separatorToPanels: y.separatorToPanels\n })\n };\n }\n return x;\n });\n }\n } else\n Rt(e, m, f);\n }\n });\n s.observe(e.element), e.panels.forEach((h) => {\n P(\n !o.has(h.id),\n `Panel ids must be unique; id \"${h.id}\" was used more than once`\n ), o.add(h.id), h.onResize && s.observe(h.element);\n });\n const l = J({ group: e }), r = de(e), a = e.panels.map(({ id: h }) => h).join(\",\");\n let c = e.defaultLayout;\n c && (Et(e.panels, c) || (c = void 0));\n const u = e.inMemoryLayouts[a] ?? c ?? Te(r), g = B({\n layout: u,\n panelConstraints: r\n }), b = Ve(e), S = e.element.ownerDocument;\n return I((h) => {\n const d = /* @__PURE__ */ new Map();\n return q.set(\n S,\n (q.get(S) ?? 0) + 1\n ), b.forEach((f) => {\n f.separator && d.set(f.separator, f.panels);\n }), {\n mountedGroups: new Map(h.mountedGroups).set(e, {\n defaultLayoutDeferred: l === 0,\n derivedPanelConstraints: r,\n layout: g,\n separatorToPanels: d\n })\n };\n }), e.separators.forEach((h) => {\n P(\n !i.has(h.id),\n `Separator ids must be unique; id \"${h.id}\" was used more than once`\n ), i.add(h.id), h.element.addEventListener(\"keydown\", Pe);\n }), q.get(S) === 1 && (S.addEventListener(\"dblclick\", Le, !0), S.addEventListener(\"pointerdown\", Ce, !0), S.addEventListener(\"pointerleave\", Ge), S.addEventListener(\"pointermove\", Ie), S.addEventListener(\"pointerout\", De), S.addEventListener(\"pointerup\", Oe, !0)), function() {\n t = !1, q.set(\n S,\n Math.max(0, (q.get(S) ?? 0) - 1)\n ), I((d) => {\n const f = new Map(d.mountedGroups);\n return f.delete(e), { mountedGroups: f };\n }), e.separators.forEach((d) => {\n d.element.removeEventListener(\"keydown\", Pe);\n }), q.get(S) || (S.removeEventListener(\n \"dblclick\",\n Le,\n !0\n ), S.removeEventListener(\n \"pointerdown\",\n Ce,\n !0\n ), S.removeEventListener(\"pointerleave\", Ge), S.removeEventListener(\"pointermove\", Ie), S.removeEventListener(\"pointerout\", De), S.removeEventListener(\"pointerup\", Oe, !0)), s.disconnect();\n };\n}\nfunction Gt() {\n const [e, t] = ne({}), n = Q(() => t({}), []);\n return [e, n];\n}\nfunction ge(e) {\n const t = ot();\n return `${e ?? t}`;\n}\nconst K = typeof window < \"u\" ? Ae : ue;\nfunction ee(e) {\n const t = O(e);\n return K(() => {\n t.current = e;\n }, [e]), Q(\n (...n) => t.current?.(...n),\n [t]\n );\n}\nfunction ye(...e) {\n return ee((t) => {\n e.forEach((n) => {\n if (n)\n switch (typeof n) {\n case \"function\": {\n n(t);\n break;\n }\n case \"object\": {\n n.current = t;\n break;\n }\n }\n });\n });\n}\nfunction Se(e) {\n const t = O({ ...e });\n return K(() => {\n for (const n in e)\n t.current[n] = e[n];\n }, [e]), t.current;\n}\nconst Ze = it(null);\nfunction It(e, t) {\n const n = O({\n getLayout: () => ({}),\n setLayout: Pt\n });\n Ne(t, () => n.current, []), K(() => {\n Object.assign(\n n.current,\n Ue({ groupId: e })\n );\n });\n}\nfunction Dt({\n children: e,\n className: t,\n defaultLayout: n,\n disableCursor: o,\n disabled: i,\n elementRef: s,\n groupRef: l,\n id: r,\n onLayoutChange: a,\n onLayoutChanged: c,\n orientation: u = \"horizontal\",\n resizeTargetMinimumSize: g = {\n coarse: 20,\n fine: 10\n },\n style: b,\n ...S\n}) {\n const h = O({\n onLayoutChange: {},\n onLayoutChanged: {}\n }), d = ee((z) => {\n U(h.current.onLayoutChange, z) || (h.current.onLayoutChange = z, a?.(z));\n }), f = ee((z) => {\n U(h.current.onLayoutChanged, z) || (h.current.onLayoutChanged = z, c?.(z));\n }), m = ge(r), v = O(null), [x, y] = Gt(), p = O({\n lastExpandedPanelSizes: {},\n layouts: {},\n panels: [],\n resizeTargetMinimumSize: g,\n separators: []\n }), w = ye(v, s);\n It(m, l);\n const C = ee(\n (z, L) => {\n const { interactionState: M, mountedGroups: E } = G();\n for (const D of E.keys())\n if (D.id === z) {\n const T = E.get(D);\n if (T) {\n let N = !1;\n switch (M.state) {\n case \"active\": {\n N = M.hitRegions.some(\n (Z) => Z.group === D\n );\n break;\n }\n }\n return {\n flexGrow: T.layout[L] ?? 1,\n pointerEvents: N ? \"none\" : void 0\n };\n }\n }\n return {\n flexGrow: n?.[L] ?? 1\n };\n }\n ), R = Se({\n defaultLayout: n,\n disableCursor: o\n }), X = _e(\n () => ({\n get disableCursor() {\n return !!R.disableCursor;\n },\n getPanelStyles: C,\n id: m,\n orientation: u,\n registerPanel: (z) => {\n const L = p.current;\n return L.panels = pe(u, [\n ...L.panels,\n z\n ]), y(), () => {\n L.panels = L.panels.filter(\n (M) => M !== z\n ), y();\n };\n },\n registerSeparator: (z) => {\n const L = p.current;\n return L.separators = pe(u, [\n ...L.separators,\n z\n ]), y(), () => {\n L.separators = L.separators.filter(\n (M) => M !== z\n ), y();\n };\n },\n togglePanelDisabled: (z, L) => {\n const E = p.current.panels.find(\n (T) => T.id === z\n );\n E && (E.panelConstraints.disabled = L);\n const { mountedGroups: D } = G();\n for (const T of D.keys())\n if (T.id === m) {\n const N = D.get(T);\n N && (N.derivedPanelConstraints = de(T));\n }\n },\n toggleSeparatorDisabled: (z, L) => {\n const E = p.current.separators.find(\n (D) => D.id === z\n );\n E && (E.disabled = L);\n }\n }),\n [C, m, y, u, R]\n ), V = O(null);\n return K(() => {\n const z = v.current;\n if (z === null)\n return;\n const L = p.current;\n let M;\n if (R.defaultLayout !== void 0 && Object.keys(R.defaultLayout).length === L.panels.length) {\n M = {};\n for (const H of L.panels) {\n const j = R.defaultLayout[H.id];\n j !== void 0 && (M[H.id] = j);\n }\n }\n const E = {\n defaultLayout: M,\n disableCursor: !!R.disableCursor,\n disabled: !!i,\n element: z,\n id: m,\n inMemoryLastExpandedPanelSizes: p.current.lastExpandedPanelSizes,\n inMemoryLayouts: p.current.layouts,\n orientation: u,\n panels: L.panels,\n resizeTargetMinimumSize: L.resizeTargetMinimumSize,\n separators: L.separators\n };\n V.current = E;\n const D = kt(E), N = G().mountedGroups.get(E);\n if (N) {\n const { defaultLayoutDeferred: H, derivedPanelConstraints: j, layout: ie } = N;\n !H && j.length > 0 && (d(ie), f(ie));\n }\n const Z = $.addListener(\n \"interactionStateChange\",\n (H) => {\n H.state;\n }\n ), Qe = $.addListener(\n \"mountedGroupsChange\",\n (H) => {\n const j = H.get(E);\n if (j) {\n const { defaultLayoutDeferred: ie, derivedPanelConstraints: et, layout: xe } = j;\n if (ie || et.length === 0)\n return;\n const { interactionState: tt } = G(), nt = tt.state !== \"active\";\n d(xe), nt && f(xe);\n }\n }\n );\n return () => {\n V.current = null, D(), Z(), Qe();\n };\n }, [\n i,\n m,\n f,\n d,\n u,\n x,\n R\n ]), ue(() => {\n const z = V.current;\n z && (z.defaultLayout = n, z.disableCursor = !!o);\n }), /* @__PURE__ */ te(Ze.Provider, { value: X, children: /* @__PURE__ */ te(\n \"div\",\n {\n ...S,\n className: t,\n \"data-group\": !0,\n \"data-testid\": m,\n id: m,\n ref: w,\n style: {\n height: \"100%\",\n width: \"100%\",\n overflow: \"hidden\",\n ...b,\n display: \"flex\",\n flexDirection: u === \"horizontal\" ? \"row\" : \"column\",\n flexWrap: \"nowrap\",\n // Inform the browser that the library is handling touch events for this element\n // but still allow users to scroll content within panels in the non-resizing direction\n // NOTE This is not an inherited style\n // See github.com/bvaughn/react-resizable-panels/issues/662\n touchAction: u === \"horizontal\" ? \"pan-y\" : \"pan-x\"\n },\n children: e\n }\n ) });\n}\nDt.displayName = \"Group\";\nfunction fe(e, t) {\n return `react-resizable-panels:${[e, ...t].join(\":\")}`;\n}\nfunction Vt({\n debounceSaveMs: e = 100,\n panelIds: t,\n storage: n = localStorage,\n ...o\n}) {\n const i = t !== void 0, s = \"id\" in o ? o.id : o.groupId, l = fe(s, t ?? []), r = Fe(\n Ot,\n () => n.getItem(l),\n () => n.getItem(l)\n ), a = _e(\n () => r ? JSON.parse(r) : void 0,\n [r]\n ), c = O(null), u = Q(() => {\n const S = c.current;\n S && (c.current = null, clearTimeout(S));\n }, []);\n Ae(() => () => {\n u();\n }, [u]);\n const g = Q(\n (S) => {\n u();\n let h;\n i ? h = fe(s, Object.keys(S)) : h = fe(s, []);\n try {\n n.setItem(h, JSON.stringify(S));\n } catch (d) {\n console.error(d);\n }\n },\n [u, i, s, n]\n ), b = Q(\n (S) => {\n u(), e === 0 ? g(S) : c.current = setTimeout(() => {\n g(S);\n }, e);\n },\n [u, e, g]\n );\n return {\n /**\n * Pass this value to `Group` as the `defaultLayout` prop.\n */\n defaultLayout: a,\n /**\n * Attach this callback on the `Group` as the `onLayoutChange` prop.\n *\n * @deprecated Use the {@link onLayoutChanged} prop instead.\n */\n onLayoutChange: b,\n /**\n * Attach this callback on the `Group` as the `onLayoutChanged` prop.\n */\n onLayoutChanged: g\n };\n}\nfunction Ot() {\n return function() {\n };\n}\nfunction jt() {\n return ne(null);\n}\nfunction Wt() {\n return O(null);\n}\nfunction ve() {\n const e = rt(Ze);\n return P(\n e,\n \"Group Context not found; did you render a Panel or Separator outside of a Group?\"\n ), e;\n}\nfunction Tt(e, t) {\n const { id: n } = ve(), o = O({\n collapse: ce,\n expand: ce,\n getSize: () => ({\n asPercentage: 0,\n inPixels: 0\n }),\n isCollapsed: () => !1,\n resize: ce\n });\n Ne(t, () => o.current, []), K(() => {\n Object.assign(\n o.current,\n We({ groupId: n, panelId: e })\n );\n });\n}\nfunction At({\n children: e,\n className: t,\n collapsedSize: n = \"0%\",\n collapsible: o = !1,\n defaultSize: i,\n disabled: s,\n elementRef: l,\n id: r,\n maxSize: a = \"100%\",\n minSize: c = \"0%\",\n onResize: u,\n panelRef: g,\n style: b,\n ...S\n}) {\n const h = !!r, d = ge(r), f = Se({\n disabled: s\n }), m = O(null), v = ye(m, l), {\n getPanelStyles: x,\n id: y,\n orientation: p,\n registerPanel: w,\n togglePanelDisabled: C\n } = ve(), R = u !== null, X = ee(\n (z, L, M) => {\n u?.(z, r, M);\n }\n );\n K(() => {\n const z = m.current;\n if (z !== null) {\n const L = {\n element: z,\n id: d,\n idIsStable: h,\n mutableValues: {\n expandToSize: void 0,\n prevSize: void 0\n },\n onResize: R ? X : void 0,\n panelConstraints: {\n collapsedSize: n,\n collapsible: o,\n defaultSize: i,\n disabled: f.disabled,\n maxSize: a,\n minSize: c\n }\n };\n return w(L);\n }\n }, [\n n,\n o,\n i,\n R,\n d,\n h,\n a,\n c,\n X,\n w,\n f\n ]), ue(() => {\n C(d, !!s);\n }, [s, d, C]), Tt(d, g);\n const V = Fe(\n (z) => ($.addListener(\"mountedGroupsChange\", z), () => {\n $.removeListener(\"mountedGroupsChange\", z);\n }),\n // useSyncExternalStore does not support a custom equality check\n // stringify avoids re-rendering when the style value hasn't changed\n () => JSON.stringify(x(y, d)),\n () => JSON.stringify(x(y, d))\n );\n return /* @__PURE__ */ te(\n \"div\",\n {\n ...S,\n \"aria-disabled\": s || void 0,\n \"data-panel\": !0,\n \"data-testid\": d,\n id: d,\n ref: v,\n style: {\n ...Nt,\n display: \"flex\",\n flexBasis: 0,\n flexShrink: 1,\n // Prevent Panel content from interfering with panel size\n overflow: \"hidden\",\n ...JSON.parse(V)\n },\n children: /* @__PURE__ */ te(\n \"div\",\n {\n className: t,\n style: {\n maxHeight: \"100%\",\n maxWidth: \"100%\",\n flexGrow: 1,\n ...b,\n // Inform the browser that the library is handling touch events for this element\n // but still allow users to scroll content within panels in the non-resizing direction\n // NOTE This is not an inherited style\n // See github.com/bvaughn/react-resizable-panels/issues/662\n touchAction: p === \"horizontal\" ? \"pan-y\" : \"pan-x\"\n },\n children: e\n }\n )\n }\n );\n}\nAt.displayName = \"Panel\";\nconst Nt = {\n minHeight: 0,\n maxHeight: \"100%\",\n height: \"auto\",\n minWidth: 0,\n maxWidth: \"100%\",\n width: \"auto\",\n border: \"none\",\n borderWidth: 0,\n padding: 0,\n margin: 0\n};\nfunction Ut() {\n return ne(null);\n}\nfunction Bt() {\n return O(null);\n}\nfunction _t({\n layout: e,\n panelConstraints: t,\n panelId: n,\n panelIndex: o\n}) {\n let i, s;\n const l = e[n], r = t.find(\n (a) => a.panelId === n\n );\n if (r) {\n const a = r.maxSize, c = r.collapsible ? r.collapsedSize : r.minSize, u = [o, o + 1];\n s = B({\n layout: oe({\n delta: c - l,\n initialLayout: e,\n panelConstraints: t,\n pivotIndices: u,\n prevLayout: e\n }),\n panelConstraints: t\n })[n], i = B({\n layout: oe({\n delta: a - l,\n initialLayout: e,\n panelConstraints: t,\n pivotIndices: u,\n prevLayout: e\n }),\n panelConstraints: t\n })[n];\n }\n return {\n valueControls: n,\n valueMax: i,\n valueMin: s,\n valueNow: l\n };\n}\nfunction Ft({\n children: e,\n className: t,\n disabled: n,\n elementRef: o,\n id: i,\n style: s,\n ...l\n}) {\n const r = ge(i), a = Se({\n disabled: n\n }), [c, u] = ne({}), [g, b] = ne(\"inactive\"), S = O(null), h = ye(S, o), {\n disableCursor: d,\n id: f,\n orientation: m,\n registerSeparator: v,\n toggleSeparatorDisabled: x\n } = ve(), y = m === \"horizontal\" ? \"vertical\" : \"horizontal\";\n K(() => {\n const w = S.current;\n if (w !== null) {\n const C = {\n disabled: a.disabled,\n element: w,\n id: r\n }, R = v(C), X = $.addListener(\n \"interactionStateChange\",\n (z) => {\n b(\n z.state !== \"inactive\" && z.hitRegions.some(\n (L) => L.separator === C\n ) ? z.state : \"inactive\"\n );\n }\n ), V = $.addListener(\n \"mountedGroupsChange\",\n (z) => {\n z.forEach(\n ({ derivedPanelConstraints: L, layout: M, separatorToPanels: E }, D) => {\n if (D.id === f) {\n const T = E.get(C);\n if (T) {\n const N = T[0], Z = D.panels.indexOf(N);\n u(\n _t({\n layout: M,\n panelConstraints: L,\n panelId: N.id,\n panelIndex: Z\n })\n );\n }\n }\n }\n );\n }\n );\n return () => {\n X(), V(), R();\n };\n }\n }, [f, r, v, a]), ue(() => {\n x(r, !!n);\n }, [n, r, x]);\n let p;\n return n && !d && (p = \"not-allowed\"), /* @__PURE__ */ te(\n \"div\",\n {\n ...l,\n \"aria-controls\": c.valueControls,\n \"aria-disabled\": n || void 0,\n \"aria-orientation\": y,\n \"aria-valuemax\": c.valueMax,\n \"aria-valuemin\": c.valueMin,\n \"aria-valuenow\": c.valueNow,\n children: e,\n className: t,\n \"data-separator\": n ? \"disabled\" : g,\n \"data-testid\": r,\n id: r,\n ref: h,\n role: \"separator\",\n style: {\n flexBasis: \"auto\",\n cursor: p,\n ...s,\n flexGrow: 0,\n flexShrink: 0,\n // Inform the browser that the library is handling touch events for this element\n // See github.com/bvaughn/react-resizable-panels/issues/662\n touchAction: \"none\"\n },\n tabIndex: n ? void 0 : 0\n }\n );\n}\nFt.displayName = \"Separator\";\nexport {\n Dt as Group,\n At as Panel,\n Ft as Separator,\n mt as isCoarsePointer,\n Vt as useDefaultLayout,\n jt as useGroupCallbackRef,\n Wt as useGroupRef,\n Ut as usePanelCallbackRef,\n Bt as usePanelRef\n};\n//# sourceMappingURL=react-resizable-panels.js.map\n","\"use client\"\r\n\r\nimport { GripVerticalIcon } from \"lucide-react\"\r\nimport {\r\n Group as PanelGroup,\r\n Panel,\r\n Separator as PanelResizeHandle,\r\n} from \"react-resizable-panels\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction ResizablePanelGroup({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof PanelGroup>) {\r\n return (\r\n <PanelGroup\r\n data-slot=\"resizable-panel-group\"\r\n className={cn(\r\n \"flex h-full w-full data-[panel-group-direction=vertical]:flex-col\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction ResizablePanel({\r\n ...props\r\n}: React.ComponentProps<typeof Panel>) {\r\n return <Panel data-slot=\"resizable-panel\" {...props} />\r\n}\r\n\r\nfunction ResizableHandle({\r\n withHandle,\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof PanelResizeHandle> & {\r\n withHandle?: boolean\r\n}) {\r\n return (\r\n <PanelResizeHandle\r\n data-slot=\"resizable-handle\"\r\n className={cn(\r\n \"bg-border focus-visible:ring-ring relative flex w-px items-center justify-center after:absolute after:inset-y-0 after:-left-2 after:-right-2 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-offset-1 data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:right-0 data-[panel-group-direction=vertical]:after:-top-2 data-[panel-group-direction=vertical]:after:-bottom-2 [&[data-panel-group-direction=vertical]>div]:rotate-90\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {withHandle && (\r\n <div className=\"bg-border z-10 flex h-4 w-3 items-center justify-center rounded-sm border\">\r\n <GripVerticalIcon className=\"size-2.5\" />\r\n </div>\r\n )}\r\n </PanelResizeHandle>\r\n )\r\n}\r\n\r\nexport { ResizablePanelGroup, ResizablePanel, ResizableHandle }\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport * as SliderPrimitive from \"@radix-ui/react-slider\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Slider({\r\n className,\r\n defaultValue,\r\n value,\r\n min = 0,\r\n max = 100,\r\n ...props\r\n}: React.ComponentProps<typeof SliderPrimitive.Root>) {\r\n const _values = React.useMemo(\r\n () => value ?? defaultValue ?? [min, max],\r\n [value, defaultValue, min, max]\r\n )\r\n\r\n return (\r\n <SliderPrimitive.Root\r\n data-slot=\"slider\"\r\n defaultValue={defaultValue}\r\n value={value}\r\n min={min}\r\n max={max}\r\n className={cn(\r\n \"relative flex w-full touch-none select-none items-center data-[disabled]:opacity-50\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <SliderPrimitive.Track\r\n data-slot=\"slider-track\"\r\n className=\"bg-muted relative h-1.5 w-full grow overflow-hidden rounded-full\"\r\n >\r\n <SliderPrimitive.Range\r\n data-slot=\"slider-range\"\r\n className=\"bg-primary absolute h-full\"\r\n />\r\n </SliderPrimitive.Track>\r\n {Array.from({ length: _values.length }, (_, index) => (\r\n <SliderPrimitive.Thumb\r\n data-slot=\"slider-thumb\"\r\n key={index}\r\n className=\"border-primary bg-background focus-visible:ring-ring block h-4 w-4 rounded-full border shadow transition-colors focus-visible:outline-none focus-visible:ring-1 disabled:pointer-events-none\"\r\n />\r\n ))}\r\n </SliderPrimitive.Root>\r\n )\r\n}\r\n\r\nexport { Slider }\r\n","import { memo, type ReactNode } from 'react';\nimport { Check } from 'lucide-react';\nimport { cn } from '@/lib/utils';\n\nexport interface SelectableCardProps {\n title: string;\n icon?: ReactNode;\n isSelected: boolean;\n onSelect: () => void;\n description?: string;\n className?: string;\n}\n\nexport const SelectableCard = memo(function SelectableCard({\n title,\n icon,\n isSelected,\n onSelect,\n description,\n className,\n}: SelectableCardProps) {\n return (\n <button\n type=\"button\"\n onClick={onSelect}\n className={cn(\n 'group relative w-full overflow-hidden rounded-lg border text-left',\n 'transition-all duration-150 ease-out',\n 'focus:outline-none focus:ring-2 focus:ring-primary/50 focus:ring-offset-1 focus:ring-offset-background',\n isSelected\n ? 'border-primary bg-primary/10 shadow-sm'\n : 'border-border bg-card hover:border-primary/30 hover:bg-primary/5',\n className\n )}\n >\n {/* Top accent line */}\n <div\n className={cn(\n 'absolute inset-x-0 top-0 h-0.5 transition-all duration-150 ease-out',\n isSelected\n ? 'bg-primary'\n : 'bg-transparent group-hover:bg-primary/20'\n )}\n />\n\n {/* Content */}\n <div className=\"relative px-3 py-2.5\">\n <div className=\"flex items-center gap-2.5\">\n {/* Icon */}\n {icon && (\n <div\n className={cn(\n 'flex h-7 w-7 flex-shrink-0 items-center justify-center rounded-md',\n 'transition-all duration-150 ease-out',\n isSelected\n ? 'bg-primary text-primary-foreground'\n : 'bg-muted/50 text-muted-foreground group-hover:bg-primary/10 group-hover:text-primary'\n )}\n >\n {icon}\n </div>\n )}\n\n {/* Title + Description */}\n <div className=\"flex-1 min-w-0\">\n <h4\n className={cn(\n 'text-sm leading-tight truncate transition-colors duration-150',\n isSelected ? 'text-foreground font-medium' : 'text-foreground/80'\n )}\n >\n {title}\n </h4>\n {description && (\n <p className=\"text-xs text-muted-foreground truncate mt-0.5\">\n {description}\n </p>\n )}\n </div>\n\n {/* Selection indicator */}\n <div\n className={cn(\n 'flex h-4 w-4 flex-shrink-0 items-center justify-center rounded-full border',\n 'transition-all duration-150 ease-out',\n isSelected\n ? 'border-primary bg-primary text-primary-foreground scale-100'\n : 'border-border/50 bg-transparent group-hover:border-primary/40 scale-90 group-hover:scale-100'\n )}\n >\n {isSelected && <Check className=\"h-2.5 w-2.5\" strokeWidth={3} />}\n </div>\n </div>\n </div>\n </button>\n );\n});\n","import { memo, type ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface SegmentedControlItem<T extends string = string> {\n key: T;\n label: string;\n icon?: ReactNode;\n count?: number;\n}\n\nexport interface SegmentedControlProps<T extends string = string> {\n items: SegmentedControlItem<T>[];\n activeKey: T;\n onActiveChange: (key: T) => void;\n showLabels?: boolean;\n className?: string;\n}\n\nexport const SegmentedControl = memo(function SegmentedControl<T extends string = string>({\n items,\n activeKey,\n onActiveChange,\n showLabels = true,\n className,\n}: SegmentedControlProps<T>) {\n return (\n <div className={cn('flex gap-1 p-1 rounded-lg bg-muted/30 border border-border', className)}>\n {items.map((item) => {\n const isActive = activeKey === item.key;\n\n return (\n <button\n key={item.key}\n type=\"button\"\n onClick={() => onActiveChange(item.key)}\n className={cn(\n 'relative flex flex-1 items-center justify-center gap-2 rounded-md px-3 py-2 text-sm',\n 'transition-all duration-150 ease-out',\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-primary/50',\n isActive\n ? 'bg-primary text-primary-foreground shadow-sm'\n : 'text-muted-foreground hover:text-foreground hover:bg-primary/5'\n )}\n >\n {item.icon && (\n <span className={cn(\n 'transition-colors duration-150',\n isActive ? 'text-primary-foreground' : ''\n )}>\n {item.icon}\n </span>\n )}\n {showLabels && (\n <span className=\"hidden sm:inline\">{item.label}</span>\n )}\n {item.count !== undefined && (\n <span\n className={cn(\n 'flex h-5 min-w-5 items-center justify-center rounded px-1 text-xs',\n 'transition-colors duration-150',\n isActive\n ? 'bg-primary-foreground/20 text-primary-foreground'\n : 'bg-muted/50 text-muted-foreground'\n )}\n >\n {item.count}\n </span>\n )}\n </button>\n );\n })}\n </div>\n );\n}) as <T extends string = string>(props: SegmentedControlProps<T>) => React.JSX.Element;\n","import type { FilterOperator, FieldType } from './types';\n\n/**\n * Available operators grouped by field type\n * Matches backend GenericSpecification supported operations\n */\nexport const OPERATORS_BY_TYPE: Record<FieldType, FilterOperator[]> = {\n string: [\n 'EQUALS',\n 'NOT_EQUALS',\n 'CONTAINS',\n 'STARTS_WITH',\n 'ENDS_WITH',\n 'IN',\n 'NOT_IN',\n 'IS_NULL',\n 'IS_NOT_NULL',\n ],\n number: [\n 'EQUALS',\n 'NOT_EQUALS',\n 'GREATER_THAN',\n 'GREATER_THAN_OR_EQUALS',\n 'LESS_THAN',\n 'LESS_THAN_OR_EQUALS',\n 'BETWEEN',\n 'IN',\n 'IS_NULL',\n 'IS_NOT_NULL',\n ],\n date: [\n 'EQUALS',\n 'NOT_EQUALS',\n 'GREATER_THAN',\n 'GREATER_THAN_OR_EQUALS',\n 'LESS_THAN',\n 'LESS_THAN_OR_EQUALS',\n 'BETWEEN',\n 'IS_NULL',\n 'IS_NOT_NULL',\n ],\n timestamp: [\n 'EQUALS',\n 'NOT_EQUALS',\n 'GREATER_THAN',\n 'GREATER_THAN_OR_EQUALS',\n 'LESS_THAN',\n 'LESS_THAN_OR_EQUALS',\n 'BETWEEN',\n 'IS_NULL',\n 'IS_NOT_NULL',\n ],\n boolean: [\n 'EQUALS',\n 'IS_NULL',\n 'IS_NOT_NULL',\n ],\n enum: [\n 'EQUALS',\n 'NOT_EQUALS',\n 'IN',\n 'NOT_IN',\n 'IS_NULL',\n 'IS_NOT_NULL',\n ],\n} as const;\n\n/**\n * Human-readable labels for filter operators\n */\nexport const OPERATOR_LABELS: Record<FilterOperator, string> = {\n EQUALS: 'equals',\n NOT_EQUALS: 'not equals',\n CONTAINS: 'contains',\n STARTS_WITH: 'starts with',\n ENDS_WITH: 'ends with',\n GREATER_THAN: 'greater than',\n GREATER_THAN_OR_EQUALS: 'greater than or equal',\n LESS_THAN: 'less than',\n LESS_THAN_OR_EQUALS: 'less than or equal',\n IN: 'is one of',\n NOT_IN: 'is not one of',\n BETWEEN: 'between',\n IS_NULL: 'is empty',\n IS_NOT_NULL: 'is not empty',\n};\n\n/**\n * Operators that use the `values` array instead of single `value`\n */\nexport const ARRAY_OPERATORS: FilterOperator[] = ['IN', 'NOT_IN', 'BETWEEN'];\n\n/**\n * Operators that don't require any value\n */\nexport const NO_VALUE_OPERATORS: FilterOperator[] = ['IS_NULL', 'IS_NOT_NULL'];\n\n/**\n * Default pagination options\n */\nexport const DEFAULT_PAGE_SIZE_OPTIONS = [10, 20, 50, 100];\n\n/**\n * Default values\n */\nexport const DEFAULTS = {\n PAGE_SIZE: 20,\n PAGE: 0,\n SORT_BY: 'id',\n SORT_DIRECTION: 'ASC' as const,\n SEARCH_DEBOUNCE_MS: 300,\n};\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport { Input } from '@/components/ui/input';\nimport { Search, X } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { DEFAULTS } from '../../constants';\n\ninterface DataTableSearchProps {\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n debounceMs?: number;\n className?: string;\n}\n\nexport function DataTableSearch({\n value,\n onChange,\n placeholder = 'Search...',\n debounceMs = DEFAULTS.SEARCH_DEBOUNCE_MS,\n className,\n}: DataTableSearchProps) {\n const [localValue, setLocalValue] = useState(value);\n\n // Use stable ref for onChange to avoid unnecessary effect re-runs\n const onChangeRef = useRef(onChange);\n\n // Update ref in effect instead of during render (React Compiler requirement)\n useEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n\n // Sync external value changes\n useEffect(() => {\n setLocalValue(value);\n }, [value]);\n\n // Debounced onChange - using ref to avoid recreating timer on onChange changes\n useEffect(() => {\n // Don't trigger if values are the same\n if (localValue === value) return;\n\n const timer = setTimeout(() => {\n onChangeRef.current(localValue);\n }, debounceMs);\n\n return () => clearTimeout(timer);\n }, [localValue, debounceMs, value]);\n\n const handleClear = useCallback(() => {\n setLocalValue('');\n onChangeRef.current('');\n }, []);\n\n return (\n <div className={cn('relative group', className)}>\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground pointer-events-none transition-colors duration-150 group-focus-within:text-accent-cyan\" />\n <Input\n type=\"text\"\n value={localValue}\n onChange={(e) => setLocalValue(e.target.value)}\n placeholder={placeholder}\n className={cn(\n // Size - match SelectTrigger size=\"sm\"\n 'h-8 w-64 pl-9 pr-8',\n // Text - match SelectTrigger\n 'text-sm',\n // Background - match SelectTrigger\n 'bg-transparent',\n // Border - match SelectTrigger\n 'border border-border',\n // Shadow - match SelectTrigger\n 'shadow-xs',\n // Placeholder - match SelectTrigger\n 'placeholder:text-muted-foreground/50',\n // Transition - match SelectTrigger\n 'transition-[color,box-shadow,border-color,background-color] duration-150',\n // Hover - match SelectTrigger\n 'hover:border-accent-cyan/40 hover:bg-card',\n // Focus - match SelectTrigger\n 'focus-visible:border-accent-cyan focus-visible:ring-accent-cyan/20 focus-visible:ring-[3px]',\n 'focus-visible:bg-card'\n )}\n />\n {localValue && (\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"absolute right-2 top-1/2 -translate-y-1/2 p-0.5 rounded text-muted-foreground hover:text-accent-cyan transition-colors duration-150\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n );\n}\n","export const urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n","/* @ts-self-types=\"./index.d.ts\" */\nimport { urlAlphabet as scopedUrlAlphabet } from './url-alphabet/index.js'\nexport { urlAlphabet } from './url-alphabet/index.js'\nexport let random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\nexport let customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << Math.log2(alphabet.length - 1)) - 1\n let step = -~((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let j = step | 0\n while (j--) {\n id += alphabet[bytes[j] & mask] || ''\n if (id.length >= size) return id\n }\n }\n }\n}\nexport let customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size | 0, random)\nexport let nanoid = (size = 21) => {\n let id = ''\n let bytes = crypto.getRandomValues(new Uint8Array((size |= 0)))\n while (size--) {\n id += scopedUrlAlphabet[bytes[size] & 63]\n }\n return id\n}\n","import {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select';\nimport { cn } from '@/lib/utils';\nimport type { FieldConfig } from '../../types';\n\ninterface FilterFieldSelectProps {\n value: string;\n options: FieldConfig[];\n onChange: (field: string) => void;\n disabled?: boolean;\n className?: string;\n}\n\nexport function FilterFieldSelect({\n value,\n options,\n onChange,\n disabled,\n className,\n}: FilterFieldSelectProps) {\n return (\n <Select value={value} onValueChange={onChange} disabled={disabled}>\n <SelectTrigger\n size=\"sm\"\n className={cn(\n 'w-filter-lg text-xs',\n 'text-foreground font-medium',\n '[&>svg]:text-muted-foreground',\n className\n )}\n >\n <SelectValue placeholder=\"Alan\" />\n </SelectTrigger>\n <SelectContent>\n {options.map((field) => (\n <SelectItem key={field.field} value={field.field} className=\"text-xs\">\n {field.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n}\n","import {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select';\nimport { cn } from '@/lib/utils';\nimport type { FilterOperator } from '../../types';\nimport { OPERATOR_LABELS } from '../../constants';\n\ninterface FilterOperatorSelectProps {\n value: FilterOperator;\n operators: FilterOperator[];\n onChange: (operator: FilterOperator) => void;\n disabled?: boolean;\n className?: string;\n}\n\nexport function FilterOperatorSelect({\n value,\n operators,\n onChange,\n disabled,\n className,\n}: FilterOperatorSelectProps) {\n return (\n <Select\n value={value}\n onValueChange={(v) => onChange(v as FilterOperator)}\n disabled={disabled}\n >\n <SelectTrigger size=\"sm\" className={cn('w-filter-md text-xs', className)}>\n <SelectValue placeholder=\"Operatör\" />\n </SelectTrigger>\n <SelectContent>\n {operators.map((operator) => (\n <SelectItem key={operator} value={operator} className=\"text-xs\">\n {OPERATOR_LABELS[operator]}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { Input } from '@/components/ui/input';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select';\nimport { Badge } from '@/components/ui/badge';\nimport { X } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport type { FieldConfig, FilterOperator, FilterState } from '../../types';\nimport { NO_VALUE_OPERATORS, ARRAY_OPERATORS } from '../../constants';\n\ninterface FilterValueInputProps {\n field: FieldConfig | undefined;\n operator: FilterOperator;\n value?: FilterState['value'];\n values?: FilterState['values'];\n onChange: (updates: { value?: FilterState['value']; values?: FilterState['values'] }) => void;\n disabled?: boolean;\n className?: string;\n}\n\nexport function FilterValueInput({\n field,\n operator,\n value,\n values,\n onChange,\n disabled,\n className,\n}: FilterValueInputProps) {\n const [asyncOptions, setAsyncOptions] = useState(field?.options ?? []);\n const [loadedField, setLoadedField] = useState<string | undefined>(undefined);\n\n // Load async options only when field changes and has loadOptions\n useEffect(() => {\n const fieldKey = field?.field;\n if (field?.loadOptions && !field.options && fieldKey !== loadedField) {\n setLoadedField(fieldKey);\n const loadOptions = async () => {\n const options = await field.loadOptions!();\n setAsyncOptions(options);\n };\n loadOptions();\n }\n }, [field?.field, field?.loadOptions, field?.options, loadedField]);\n\n const options = field?.loadOptions ? asyncOptions : (field?.options ?? asyncOptions);\n\n // Styles\n const inputClass = 'h-8 text-xs';\n const selectClass = 'text-xs';\n\n // No value needed for IS_NULL, IS_NOT_NULL\n if (NO_VALUE_OPERATORS.includes(operator)) {\n return (\n <span className={cn('px-2 text-xs text-muted-foreground italic', className)}>\n —\n </span>\n );\n }\n\n // BETWEEN - two inputs\n if (operator === 'BETWEEN') {\n const betweenValues = (values as (string | number)[]) ?? ['', ''];\n const min = betweenValues[0] ?? '';\n const max = betweenValues[1] ?? '';\n return (\n <div className={cn('flex items-center gap-1.5', className)}>\n {field?.type === 'date' || field?.type === 'timestamp' ? (\n <>\n <Input\n type=\"date\"\n value={String(min)}\n onChange={(e) => onChange({ values: [e.target.value, max || ''] })}\n className={cn(inputClass, 'w-filter-lg')}\n disabled={disabled}\n />\n <span className=\"text-muted-foreground text-xs\">→</span>\n <Input\n type=\"date\"\n value={String(max)}\n onChange={(e) => onChange({ values: [min || '', e.target.value] })}\n className={cn(inputClass, 'w-filter-lg')}\n disabled={disabled}\n />\n </>\n ) : (\n <>\n <Input\n type=\"number\"\n value={String(min)}\n onChange={(e) => onChange({ values: [e.target.value, max || ''] })}\n placeholder=\"Min\"\n className={cn(inputClass, 'w-filter-sm')}\n disabled={disabled}\n />\n <span className=\"text-muted-foreground text-xs\">→</span>\n <Input\n type=\"number\"\n value={String(max)}\n onChange={(e) => onChange({ values: [min || '', e.target.value] })}\n placeholder=\"Max\"\n className={cn(inputClass, 'w-filter-sm')}\n disabled={disabled}\n />\n </>\n )}\n </div>\n );\n }\n\n // IN, NOT_IN - multi-select or tag input\n if (ARRAY_OPERATORS.includes(operator)) {\n const selectedValues = (values as (string | number)[]) ?? [];\n\n if (options.length > 0) {\n return (\n <div className={cn('flex flex-wrap items-center gap-1.5', className)}>\n {selectedValues.map((v) => {\n const option = options.find((o) => o.value === v);\n return (\n <Badge\n key={String(v)}\n variant=\"secondary\"\n className=\"text-2xs px-1.5 py-0.5 h-6 gap-1 bg-muted text-foreground border border-border\"\n >\n {option?.label ?? String(v)}\n <button\n type=\"button\"\n onClick={() => onChange({ values: selectedValues.filter((sv) => sv !== v) })}\n className=\"hover:text-destructive\"\n disabled={disabled}\n >\n <X className=\"h-2.5 w-2.5\" />\n </button>\n </Badge>\n );\n })}\n <Select\n value=\"\"\n onValueChange={(v) => {\n if (!selectedValues.includes(v)) {\n onChange({ values: [...selectedValues, v] });\n }\n }}\n disabled={disabled}\n >\n <SelectTrigger size=\"sm\" className={cn(selectClass, 'w-filter-xs border-dashed')}>\n <SelectValue placeholder=\"+\" />\n </SelectTrigger>\n <SelectContent>\n {options\n .filter((o) => !selectedValues.includes(o.value))\n .map((option) => (\n <SelectItem key={String(option.value)} value={String(option.value)} className=\"text-xs\">\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n );\n }\n\n return (\n <Input\n value={selectedValues.join(', ')}\n onChange={(e) => {\n const newValues = e.target.value.split(',').map((v) => v.trim()).filter(Boolean);\n onChange({ values: newValues });\n }}\n placeholder=\"a, b, c...\"\n className={cn(inputClass, 'w-filter-lg', className)}\n disabled={disabled}\n />\n );\n }\n\n // Enum field - dropdown\n if (field?.type === 'enum' && options.length > 0) {\n return (\n <Select\n value={String(value ?? '')}\n onValueChange={(v) => onChange({ value: v })}\n disabled={disabled}\n >\n <SelectTrigger size=\"sm\" className={cn(selectClass, 'w-filter-lg', className)}>\n <SelectValue placeholder=\"Seç\" />\n </SelectTrigger>\n <SelectContent>\n {options.map((option) => (\n <SelectItem key={String(option.value)} value={String(option.value)} className=\"text-xs\">\n <div className=\"flex items-center gap-2\">\n {option.color && (\n <div\n className={cn(\n 'h-2 w-2 rounded-full',\n option.color === 'green' && 'bg-status-online',\n option.color === 'red' && 'bg-status-error',\n option.color === 'yellow' && 'bg-status-warning',\n option.color === 'gray' && 'bg-muted-foreground'\n )}\n />\n )}\n {option.label}\n </div>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n }\n\n // Boolean field\n if (field?.type === 'boolean') {\n return (\n <Select\n value={value === true ? 'true' : value === false ? 'false' : ''}\n onValueChange={(v) => onChange({ value: v === 'true' })}\n disabled={disabled}\n >\n <SelectTrigger size=\"sm\" className={cn(selectClass, 'w-filter-sm', className)}>\n <SelectValue placeholder=\"?\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"true\" className=\"text-xs\">Evet</SelectItem>\n <SelectItem value=\"false\" className=\"text-xs\">Hayır</SelectItem>\n </SelectContent>\n </Select>\n );\n }\n\n // Date field\n if (field?.type === 'date') {\n return (\n <Input\n type=\"date\"\n value={String(value ?? '')}\n onChange={(e) => onChange({ value: e.target.value })}\n className={cn(inputClass, 'w-filter-xl', className)}\n disabled={disabled}\n />\n );\n }\n\n // Timestamp field (stored as Long in backend, displayed as date in UI)\n if (field?.type === 'timestamp') {\n return (\n <Input\n type=\"date\"\n value={String(value ?? '')}\n onChange={(e) => onChange({ value: e.target.value })}\n className={cn(inputClass, 'w-filter-xl', className)}\n disabled={disabled}\n />\n );\n }\n\n // Number field\n if (field?.type === 'number') {\n return (\n <Input\n type=\"number\"\n value={String(value ?? '')}\n onChange={(e) => onChange({ value: e.target.value ? Number(e.target.value) : '' })}\n placeholder={field.placeholder ?? '#'}\n className={cn(inputClass, 'w-filter-sm', className)}\n disabled={disabled}\n />\n );\n }\n\n // Default - text input\n return (\n <Input\n type=\"text\"\n value={String(value ?? '')}\n onChange={(e) => onChange({ value: e.target.value })}\n placeholder={field?.placeholder ?? 'Değer...'}\n className={cn(inputClass, 'w-filter-lg', className)}\n disabled={disabled}\n />\n );\n}\n","import { memo, useMemo } from 'react';\nimport { Button } from '@/components/ui/button';\nimport { X } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport type { FieldConfig, FilterState } from '../../types';\nimport { OPERATORS_BY_TYPE } from '../../constants';\nimport { FilterFieldSelect } from './FilterFieldSelect';\nimport { FilterOperatorSelect } from './FilterOperatorSelect';\nimport { FilterValueInput } from './FilterValueInput';\n\ninterface FilterRowProps {\n filter: FilterState;\n fieldConfigMap: Map<string, FieldConfig>;\n onChange: (updates: Partial<FilterState>) => void;\n onRemove: () => void;\n className?: string;\n}\n\nexport const FilterRow = memo(function FilterRow({\n filter,\n fieldConfigMap,\n onChange,\n onRemove,\n className,\n}: FilterRowProps) {\n // O(1) lookup instead of O(n) find\n const currentField = fieldConfigMap.get(filter.field);\n const operators = currentField ? OPERATORS_BY_TYPE[currentField.type] : OPERATORS_BY_TYPE.string;\n\n // Convert Map to array for FilterFieldSelect (memoized)\n const fieldOptions = useMemo(\n () => Array.from(fieldConfigMap.values()),\n [fieldConfigMap]\n );\n\n // Stable callback for field change\n const handleFieldChange = useMemo(\n () => (field: string) => {\n const newField = fieldConfigMap.get(field);\n onChange({\n field,\n operator: newField?.defaultOperator ?? 'EQUALS',\n value: undefined,\n values: undefined,\n });\n },\n [fieldConfigMap, onChange]\n );\n\n // Stable callback for operator change\n const handleOperatorChange = useMemo(\n () => (operator: FilterState['operator']) => {\n onChange({ operator, value: undefined, values: undefined });\n },\n [onChange]\n );\n\n return (\n <div className={cn('inline-flex items-center gap-1.5', className)}>\n <FilterFieldSelect\n value={filter.field}\n options={fieldOptions}\n onChange={handleFieldChange}\n />\n\n <FilterOperatorSelect\n value={filter.operator}\n operators={operators}\n onChange={handleOperatorChange}\n />\n\n <FilterValueInput\n field={currentField}\n operator={filter.operator}\n value={filter.value}\n values={filter.values}\n onChange={onChange}\n />\n\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n onClick={onRemove}\n className=\"text-muted-foreground hover:text-destructive hover:bg-destructive/10\"\n >\n <X className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n );\n});\n","import { useState, useCallback, useEffect, createContext, useContext, useMemo, memo } from 'react';\nimport { nanoid } from 'nanoid';\nimport { Button } from '@/components/ui/button';\nimport { Badge } from '@/components/ui/badge';\nimport { Plus, Check, Trash2, Filter } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport type { FieldConfig, FilterState } from '../../types';\nimport { FilterRow } from './FilterRow';\n\n// Context for sharing state between FilterActions and FilterList\ninterface FilterContextValue {\n pendingFilters: FilterState[];\n appliedFilterCount: number;\n fieldConfigMap: Map<string, FieldConfig>;\n hasPendingChanges: boolean;\n onAdd: () => void;\n onUpdate: (id: string, updates: Partial<FilterState>) => void;\n onRemove: (id: string) => void;\n onClear: () => void;\n onApply: () => void;\n}\n\nconst FilterContext = createContext<FilterContextValue | null>(null);\n\nfunction useFilterContext() {\n const context = useContext(FilterContext);\n if (!context) {\n throw new Error('Filter components must be used within FilterBuilder');\n }\n return context;\n}\n\n// Optimized comparison - avoid JSON.stringify on every render\nfunction hasFiltersChanged(pending: FilterState[], applied: FilterState[]): boolean {\n if (pending.length !== applied.length) return true;\n\n for (let i = 0; i < pending.length; i++) {\n const p = pending[i];\n const a = applied[i];\n if (!p || !a) return true;\n if (\n p.id !== a.id ||\n p.field !== a.field ||\n p.operator !== a.operator ||\n p.value !== a.value ||\n p.enabled !== a.enabled\n ) {\n return true;\n }\n // Only stringify values array if other checks pass\n if (p.values !== a.values) {\n if (!p.values || !a.values) return true;\n if (p.values.length !== a.values.length) return true;\n for (let j = 0; j < p.values.length; j++) {\n if (p.values[j] !== a.values[j]) return true;\n }\n }\n }\n return false;\n}\n\n// Main container that provides context\ninterface FilterBuilderProps {\n fieldConfig: FieldConfig[];\n filters: FilterState[];\n onFiltersChange: (filters: FilterState[]) => void;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function FilterBuilder({\n fieldConfig,\n filters,\n onFiltersChange,\n children,\n className,\n}: FilterBuilderProps) {\n const [pendingFilters, setPendingFilters] = useState<FilterState[]>(filters);\n\n // Sync when external filters change\n useEffect(() => {\n setPendingFilters(filters);\n }, [filters]);\n\n // Memoized field config map for O(1) lookups\n const fieldConfigMap = useMemo(\n () => new Map(fieldConfig.map((f) => [f.field, f])),\n [fieldConfig]\n );\n\n // Optimized change detection\n const hasPendingChanges = useMemo(\n () => hasFiltersChanged(pendingFilters, filters),\n [pendingFilters, filters]\n );\n\n const handleAdd = useCallback(() => {\n const firstField = fieldConfig[0];\n const newFilter: FilterState = {\n id: nanoid(),\n field: firstField?.field ?? '',\n operator: firstField?.defaultOperator ?? 'EQUALS',\n enabled: true,\n };\n setPendingFilters((prev) => [...prev, newFilter]);\n }, [fieldConfig]);\n\n const handleUpdate = useCallback((id: string, updates: Partial<FilterState>) => {\n setPendingFilters((prev) => prev.map((f) => (f.id === id ? { ...f, ...updates } : f)));\n }, []);\n\n const handleRemove = useCallback((id: string) => {\n setPendingFilters((prev) => prev.filter((f) => f.id !== id));\n }, []);\n\n const handleClear = useCallback(() => {\n setPendingFilters([]);\n onFiltersChange([]);\n }, [onFiltersChange]);\n\n const handleApply = useCallback(() => {\n onFiltersChange(pendingFilters);\n }, [pendingFilters, onFiltersChange]);\n\n const contextValue = useMemo(\n () => ({\n pendingFilters,\n appliedFilterCount: filters.length,\n fieldConfigMap,\n hasPendingChanges,\n onAdd: handleAdd,\n onUpdate: handleUpdate,\n onRemove: handleRemove,\n onClear: handleClear,\n onApply: handleApply,\n }),\n [pendingFilters, filters.length, fieldConfigMap, hasPendingChanges, handleAdd, handleUpdate, handleRemove, handleClear, handleApply]\n );\n\n return (\n <FilterContext.Provider value={contextValue}>\n <div className={className}>{children}</div>\n </FilterContext.Provider>\n );\n}\n\n// Action bar component (badge + buttons)\ninterface FilterActionsProps {\n className?: string;\n}\n\nexport const FilterActions = memo(function FilterActions({ className }: FilterActionsProps) {\n const { pendingFilters, appliedFilterCount, hasPendingChanges, onAdd, onClear, onApply } = useFilterContext();\n const filterCount = pendingFilters.length;\n\n return (\n <div className={cn('flex items-center gap-2', className)}>\n {/* Filter count badge */}\n {filterCount > 0 && (\n <div className=\"flex items-center gap-1.5\">\n <Filter className=\"h-4 w-4 text-muted-foreground\" />\n <Badge\n variant=\"secondary\"\n className=\"bg-muted text-foreground border-border font-medium\"\n >\n {filterCount}\n </Badge>\n {hasPendingChanges && (\n <span className=\"h-2 w-2 rounded-full bg-status-warning animate-pulse\" />\n )}\n </div>\n )}\n\n {/* Action buttons */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={onAdd}\n className=\"text-foreground border-border hover:bg-muted hover:border-border\"\n >\n <Plus className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">Filtre</span>\n </Button>\n\n {(filterCount > 0 || appliedFilterCount > 0) && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={onClear}\n className=\"text-muted-foreground hover:text-destructive hover:border-destructive/50 hover:bg-destructive/10\"\n >\n <Trash2 className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">Temizle</span>\n </Button>\n )}\n\n <Button\n size=\"sm\"\n onClick={onApply}\n disabled={!hasPendingChanges}\n className={cn(\n hasPendingChanges\n ? 'bg-foreground hover:bg-foreground/90 text-background'\n : 'bg-muted text-muted-foreground'\n )}\n >\n <Check className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">Uygula</span>\n </Button>\n </div>\n );\n});\n\n// Filter rows component\ninterface FilterListProps {\n className?: string;\n}\n\nexport const FilterList = memo(function FilterList({ className }: FilterListProps) {\n const { pendingFilters, fieldConfigMap, onUpdate, onRemove } = useFilterContext();\n\n // Stable callback factory - returns memoized callbacks per filter id\n const getUpdateHandler = useCallback(\n (id: string) => (updates: Partial<FilterState>) => onUpdate(id, updates),\n [onUpdate]\n );\n\n const getRemoveHandler = useCallback(\n (id: string) => () => onRemove(id),\n [onRemove]\n );\n\n if (pendingFilters.length === 0) {\n return null;\n }\n\n return (\n <div className={cn('flex flex-wrap items-center gap-2', className)}>\n {pendingFilters.map((filter) => (\n <FilterRowWrapper\n key={filter.id}\n filter={filter}\n fieldConfigMap={fieldConfigMap}\n onUpdate={getUpdateHandler}\n onRemove={getRemoveHandler}\n />\n ))}\n </div>\n );\n});\n\n// Wrapper to stabilize callbacks for FilterRow\ninterface FilterRowWrapperProps {\n filter: FilterState;\n fieldConfigMap: Map<string, FieldConfig>;\n onUpdate: (id: string) => (updates: Partial<FilterState>) => void;\n onRemove: (id: string) => () => void;\n}\n\nconst FilterRowWrapper = memo(function FilterRowWrapper({\n filter,\n fieldConfigMap,\n onUpdate,\n onRemove,\n}: FilterRowWrapperProps) {\n // Create stable callbacks for this specific filter\n const handleChange = useMemo(() => onUpdate(filter.id), [onUpdate, filter.id]);\n const handleRemove = useMemo(() => onRemove(filter.id), [onRemove, filter.id]);\n\n return (\n <FilterRow\n filter={filter}\n fieldConfigMap={fieldConfigMap}\n onChange={handleChange}\n onRemove={handleRemove}\n />\n );\n});\n","import type { FilterState, SearchCriteria, FieldConfig } from '../types';\nimport { ARRAY_OPERATORS, NO_VALUE_OPERATORS } from '../constants';\n\n// ============================================================================\n// TIMESTAMP CONVERSION UTILITIES\n// ============================================================================\n\n/**\n * Convert date string (YYYY-MM-DD) to Unix timestamp (milliseconds)\n * @param dateStr - Date string in YYYY-MM-DD format\n * @param endOfDay - If true, sets time to 23:59:59.999; otherwise 00:00:00.000\n * @returns Unix timestamp in milliseconds\n */\nexport function dateStringToTimestamp(dateStr: string, endOfDay = false): number {\n const date = new Date(dateStr);\n if (endOfDay) {\n date.setHours(23, 59, 59, 999);\n } else {\n date.setHours(0, 0, 0, 0);\n }\n return date.getTime();\n}\n\n/**\n * Convert Unix timestamp (milliseconds) to date string (YYYY-MM-DD)\n * @param timestamp - Unix timestamp in milliseconds\n * @returns Date string in YYYY-MM-DD format\n */\nexport function timestampToDateString(timestamp: number): string {\n const date = new Date(timestamp);\n const isoString = date.toISOString().split('T')[0];\n return isoString ?? '';\n}\n\n/**\n * Convert a single timestamp value based on operator context\n * For comparison operators, determines if the value should be start or end of day\n */\nfunction convertTimestampValue(\n value: string | number | boolean,\n operator: string,\n isEndValue = false\n): number {\n // If already a number (timestamp), return as-is\n if (typeof value === 'number') {\n return value;\n }\n\n // Convert date string to timestamp\n const dateStr = String(value);\n\n // For LESS_THAN and LESS_THAN_OR_EQUALS, use end of day\n // For GREATER_THAN and GREATER_THAN_OR_EQUALS, use start of day\n // For BETWEEN: first value is start of day, second is end of day\n // For EQUALS: use start of day (exact match on day boundary)\n const useEndOfDay =\n isEndValue ||\n operator === 'LESS_THAN' ||\n operator === 'LESS_THAN_OR_EQUALS';\n\n return dateStringToTimestamp(dateStr, useEndOfDay);\n}\n\n/**\n * Convert UI FilterState array to backend-compatible SearchCriteria array\n * Handles the value/values field distinction based on operator\n * @param filters - Array of filter states from UI\n * @param fieldConfigs - Optional field configurations to determine field types\n */\nexport function convertFiltersToSearchCriteria(\n filters: FilterState[],\n fieldConfigs?: FieldConfig[]\n): SearchCriteria[] {\n // Create a map for quick field config lookup\n const fieldConfigMap = new Map<string, FieldConfig>(\n fieldConfigs?.map(fc => [fc.field, fc]) ?? []\n );\n\n return filters\n .filter((f) => f.enabled)\n .map(({ field, operator, value, values }) => {\n const criteria: SearchCriteria = { field, operator };\n const fieldConfig = fieldConfigMap.get(field);\n const isTimestamp = fieldConfig?.type === 'timestamp';\n\n // Handle operators that use 'values' array (IN, NOT_IN, BETWEEN)\n if (ARRAY_OPERATORS.includes(operator)) {\n if (values && values.length > 0) {\n if (isTimestamp && operator === 'BETWEEN') {\n // Convert BETWEEN values: first is start of day, second is end of day\n const firstValue = values[0];\n const secondValue = values[1];\n if (firstValue !== undefined && secondValue !== undefined) {\n criteria.values = [\n convertTimestampValue(firstValue, operator, false),\n convertTimestampValue(secondValue, operator, true),\n ];\n }\n } else if (isTimestamp) {\n // Convert all values for IN/NOT_IN operators\n criteria.values = values.map(v => convertTimestampValue(v, operator));\n } else {\n criteria.values = values;\n }\n }\n } else if (!NO_VALUE_OPERATORS.includes(operator)) {\n // Handle operators that use single 'value'\n // IS_NULL and IS_NOT_NULL don't need value or values\n if (value !== undefined && value !== null && value !== '') {\n if (isTimestamp) {\n criteria.value = convertTimestampValue(value, operator);\n } else {\n criteria.value = value;\n }\n }\n }\n\n return criteria;\n })\n .filter((criteria) => {\n // Filter out incomplete criteria\n if (NO_VALUE_OPERATORS.includes(criteria.operator)) {\n return true; // IS_NULL and IS_NOT_NULL are always valid\n }\n if (ARRAY_OPERATORS.includes(criteria.operator)) {\n return criteria.values && criteria.values.length > 0;\n }\n return criteria.value !== undefined && criteria.value !== null && criteria.value !== '';\n });\n}\n\n/**\n * Check if a filter has a valid value\n */\nexport function isFilterComplete(filter: FilterState): boolean {\n if (NO_VALUE_OPERATORS.includes(filter.operator)) {\n return true;\n }\n if (ARRAY_OPERATORS.includes(filter.operator)) {\n return filter.values !== undefined && filter.values.length > 0;\n }\n return filter.value !== undefined && filter.value !== null && filter.value !== '';\n}\n\n/**\n * Create a new empty filter with defaults\n */\nexport function createEmptyFilter(\n field: string,\n operator: FilterState['operator'] = 'EQUALS'\n): Omit<FilterState, 'id'> {\n return {\n field,\n operator,\n value: undefined,\n values: undefined,\n enabled: true,\n };\n}\n\n/**\n * Get display value for a filter (for UI chips)\n */\nexport function getFilterDisplayValue(filter: FilterState): string {\n if (NO_VALUE_OPERATORS.includes(filter.operator)) {\n return '';\n }\n\n if (ARRAY_OPERATORS.includes(filter.operator)) {\n if (filter.operator === 'BETWEEN' && filter.values) {\n return `${filter.values[0]} - ${filter.values[1]}`;\n }\n return filter.values?.join(', ') ?? '';\n }\n\n return String(filter.value ?? '');\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\nimport { DataTableSearch } from './DataTableSearch';\nimport { FilterBuilder, FilterActions, FilterList } from '../filters';\nimport type { FieldConfig, FilterState } from '../../types';\n\ninterface DataTableToolbarProps {\n // Search\n searchValue?: string;\n onSearchChange?: (value: string) => void;\n searchPlaceholder?: string;\n searchDebounceMs?: number;\n\n // Filters\n fieldConfig?: FieldConfig[];\n filters?: FilterState[];\n onFiltersChange?: (filters: FilterState[]) => void;\n\n // Slots\n toolbarStart?: ReactNode;\n toolbarEnd?: ReactNode;\n\n className?: string;\n}\n\nexport function DataTableToolbar({\n searchValue,\n onSearchChange,\n searchPlaceholder,\n searchDebounceMs,\n fieldConfig,\n filters,\n onFiltersChange,\n toolbarStart,\n toolbarEnd,\n className,\n}: DataTableToolbarProps) {\n const hasSearch = onSearchChange !== undefined;\n const hasFilters =\n fieldConfig && fieldConfig.length > 0 && onFiltersChange !== undefined;\n\n // Without filters - simple single row\n if (!hasFilters) {\n return (\n <div\n className={cn(\n 'flex items-center gap-3 px-4 py-3 border-b border-border/60 bg-muted/20',\n className\n )}\n >\n {toolbarStart}\n {hasSearch && (\n <DataTableSearch\n value={searchValue ?? ''}\n onChange={onSearchChange}\n placeholder={searchPlaceholder}\n debounceMs={searchDebounceMs}\n />\n )}\n <div className=\"flex-1\" />\n {toolbarEnd}\n </div>\n );\n }\n\n // With filters - two row layout\n return (\n <FilterBuilder\n fieldConfig={fieldConfig}\n filters={filters!}\n onFiltersChange={onFiltersChange!}\n >\n <div\n className={cn(\n 'flex flex-col gap-3 px-4 py-3 border-b border-border/60 bg-muted/20',\n className\n )}\n >\n {/* Row 1: Search (left) + Filter actions (right) */}\n <div className=\"flex items-center gap-3\">\n {toolbarStart}\n\n {hasSearch && (\n <DataTableSearch\n value={searchValue ?? ''}\n onChange={onSearchChange}\n placeholder={searchPlaceholder}\n debounceMs={searchDebounceMs}\n />\n )}\n\n <div className=\"flex-1\" />\n\n <FilterActions />\n\n {toolbarEnd}\n </div>\n\n {/* Row 2: Filter chips (flexible wrap) */}\n <FilterList />\n </div>\n </FilterBuilder>\n );\n}\n","import { Button } from '@/components/ui/button';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select';\nimport {\n ChevronLeft,\n ChevronRight,\n ChevronsLeft,\n ChevronsRight,\n} from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport type { PaginationInfo } from '../../types';\nimport { DEFAULT_PAGE_SIZE_OPTIONS } from '../../constants';\n\ninterface DataTablePaginationProps {\n pagination: PaginationInfo;\n onPageChange: (page: number) => void;\n onPageSizeChange: (size: number) => void;\n onPrefetchPage?: (page: number) => void;\n pageSizeOptions?: number[];\n className?: string;\n}\n\nexport function DataTablePagination({\n pagination,\n onPageChange,\n onPageSizeChange,\n onPrefetchPage,\n pageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS,\n className,\n}: DataTablePaginationProps) {\n const { page, size, totalElements, totalPages, hasNext, hasPrevious } = pagination;\n\n // Calculate display range\n const startItem = page * size + 1;\n const endItem = Math.min((page + 1) * size, totalElements);\n\n return (\n <div\n className={cn(\n 'flex items-center justify-between px-4 py-3 border-t border-border/60 bg-muted/10',\n className\n )}\n >\n {/* Page size selector */}\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs text-muted-foreground\">Show</span>\n <Select\n value={String(size)}\n onValueChange={(value) => onPageSizeChange(Number(value))}\n >\n <SelectTrigger className=\"h-8 w-16 text-xs\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {pageSizeOptions.map((option) => (\n <SelectItem\n key={option}\n value={String(option)}\n className=\"text-xs\"\n >\n {option}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <span className=\"text-xs text-muted-foreground\">entries</span>\n </div>\n\n {/* Results summary */}\n <div className=\"text-xs text-muted-foreground\">\n {totalElements > 0 ? (\n <>\n Showing{' '}\n <span className=\"font-medium text-foreground\">{startItem}</span> to{' '}\n <span className=\"font-medium text-foreground\">{endItem}</span> of{' '}\n <span className=\"font-medium text-foreground\">\n {totalElements.toLocaleString()}\n </span>{' '}\n results\n </>\n ) : (\n 'No results'\n )}\n </div>\n\n {/* Pagination controls */}\n <div className=\"flex items-center gap-1\">\n {/* First page */}\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => onPageChange(0)}\n onMouseEnter={() => hasPrevious && onPrefetchPage?.(0)}\n disabled={!hasPrevious}\n >\n <ChevronsLeft className=\"h-4 w-4\" />\n </Button>\n\n {/* Previous page */}\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => onPageChange(page - 1)}\n onMouseEnter={() => hasPrevious && onPrefetchPage?.(page - 1)}\n disabled={!hasPrevious}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n\n {/* Page indicator */}\n <div className=\"flex items-center gap-1 px-2\">\n <span className=\"text-xs text-muted-foreground\">Page</span>\n <span className=\"text-xs font-medium text-foreground\">\n {page + 1}\n </span>\n <span className=\"text-xs text-muted-foreground\">of</span>\n <span className=\"text-xs font-medium text-foreground\">\n {totalPages || 1}\n </span>\n </div>\n\n {/* Next page */}\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => onPageChange(page + 1)}\n onMouseEnter={() => hasNext && onPrefetchPage?.(page + 1)}\n disabled={!hasNext}\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n\n {/* Last page */}\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => onPageChange(totalPages - 1)}\n onMouseEnter={() => hasNext && onPrefetchPage?.(totalPages - 1)}\n disabled={!hasNext}\n >\n <ChevronsRight className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n );\n}\n","import { useState } from 'react';\nimport { Button } from '@/components/ui/button';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from '@/components/ui/alert-dialog';\nimport { X, MoreHorizontal } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport type { BulkAction } from '../../types';\n\ninterface DataTableBulkActionsProps<TData> {\n selectedCount: number;\n selectedRows: TData[];\n actions: BulkAction<TData>[];\n onClearSelection: () => void;\n className?: string;\n}\n\nexport function DataTableBulkActions<TData>({\n selectedCount,\n selectedRows,\n actions,\n onClearSelection,\n className,\n}: DataTableBulkActionsProps<TData>) {\n const [confirmAction, setConfirmAction] = useState<BulkAction<TData> | null>(\n null\n );\n const [isLoading, setIsLoading] = useState(false);\n\n if (selectedCount === 0) return null;\n\n const handleAction = async (action: BulkAction<TData>) => {\n if (action.confirm) {\n setConfirmAction(action);\n return;\n }\n\n await executeAction(action);\n };\n\n const executeAction = async (action: BulkAction<TData>) => {\n setIsLoading(true);\n try {\n await action.onClick(selectedRows);\n } catch (error) {\n if (import.meta.env.DEV) console.error(`Bulk action \"${action.label}\" failed:`, error);\n } finally {\n setIsLoading(false);\n setConfirmAction(null);\n }\n };\n\n // Split actions into primary (first 2) and overflow\n const primaryActions = actions.slice(0, 2);\n const overflowActions = actions.slice(2);\n\n return (\n <>\n <div\n className={cn(\n 'fixed bottom-6 left-1/2 -translate-x-1/2 z-50',\n 'flex items-center gap-4 px-5 py-3',\n 'rounded-xl border border-border/50',\n 'bg-card/90 backdrop-blur-xl',\n 'shadow-lg shadow-black/10 dark:shadow-black/30',\n 'animate-in fade-in slide-in-from-bottom-4 duration-300',\n className\n )}\n >\n {/* Selection count */}\n <div className=\"flex items-center gap-2 pr-4 border-r border-border/50\">\n <div className=\"flex items-center gap-2 px-3 py-1.5 rounded-md bg-accent-cyan/15 border border-accent-cyan/25\">\n <span className=\"text-sm font-bold text-accent-cyan\">\n {selectedCount}\n </span>\n <span className=\"text-xs text-accent-cyan/80\">\n seçili\n </span>\n </div>\n </div>\n\n {/* Primary actions */}\n <div className=\"flex items-center gap-2\">\n {primaryActions.map((action) => {\n const isDisabled = action.disabled\n ? typeof action.disabled === 'function'\n ? action.disabled(selectedRows)\n : action.disabled\n : false;\n\n return (\n <Button\n key={action.id}\n size=\"sm\"\n variant={\n action.variant === 'primary'\n ? 'default'\n : action.variant === 'destructive'\n ? 'outline'\n : 'outline'\n }\n onClick={() => handleAction(action)}\n disabled={isDisabled || isLoading}\n className={cn(\n 'h-8 gap-2 text-xs',\n action.variant === 'primary' &&\n 'bg-primary hover:bg-primary/90',\n action.variant === 'destructive' &&\n 'text-status-error border-status-error/30 hover:bg-status-error/10'\n )}\n >\n {action.icon && <span className=\"mr-1.5\">{action.icon}</span>}\n {action.label}\n </Button>\n );\n })}\n\n {/* Overflow menu */}\n {overflowActions.length > 0 && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" size=\"sm\" className=\"px-2\">\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-48\">\n {overflowActions.map((action) => {\n const isDisabled = action.disabled\n ? typeof action.disabled === 'function'\n ? action.disabled(selectedRows)\n : action.disabled\n : false;\n\n return (\n <DropdownMenuItem\n key={action.id}\n onClick={() => handleAction(action)}\n disabled={isDisabled || isLoading}\n className={cn(\n 'text-xs',\n action.variant === 'destructive' &&\n 'text-destructive focus:text-destructive'\n )}\n >\n {action.icon && <span className=\"mr-2\">{action.icon}</span>}\n {action.label}\n </DropdownMenuItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n\n {/* Divider */}\n <div className=\"h-6 w-px bg-border/50\" />\n\n {/* Clear selection */}\n <button\n onClick={onClearSelection}\n className=\"p-1.5 rounded-md text-muted-foreground/60 hover:text-foreground hover:bg-muted/50 transition-colors\"\n aria-label=\"Clear selection\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n\n {/* Keyboard hint */}\n <div className=\"hidden lg:flex items-center gap-1 pl-3 border-l border-border/50\">\n <kbd className=\"px-1.5 py-0.5 rounded border border-border bg-muted/50 text-xs text-muted-foreground\">\n Esc\n </kbd>\n <span className=\"text-xs text-muted-foreground/60\">\n to cancel\n </span>\n </div>\n </div>\n\n {/* Confirmation dialog */}\n <AlertDialog\n open={!!confirmAction}\n onOpenChange={() => setConfirmAction(null)}\n >\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>\n {confirmAction?.confirm?.title ?? 'Confirm action'}\n </AlertDialogTitle>\n <AlertDialogDescription>\n {confirmAction?.confirm?.description ??\n 'Are you sure you want to perform this action?'}\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel disabled={isLoading}>Cancel</AlertDialogCancel>\n <AlertDialogAction\n onClick={() => confirmAction && executeAction(confirmAction)}\n disabled={isLoading}\n className={cn(\n confirmAction?.variant === 'destructive' &&\n 'bg-destructive hover:bg-destructive/90'\n )}\n >\n {confirmAction?.confirm?.confirmLabel ?? 'Confirm'}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </>\n );\n}\n","import { Button } from '@/components/ui/button';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\nimport { MoreHorizontal } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport type { RowAction } from '../../types';\n\ninterface DataTableRowActionsProps<TData> {\n row: TData;\n actions: RowAction<TData>[];\n}\n\nexport function DataTableRowActions<TData>({\n row,\n actions,\n}: DataTableRowActionsProps<TData>) {\n const visibleActions = actions.filter((action) => {\n if (action.hidden) {\n return !action.hidden(row);\n }\n return true;\n });\n\n if (visibleActions.length === 0) {\n return null;\n }\n\n return (\n <div className=\"flex items-center justify-center w-full\">\n <DropdownMenu>\n <DropdownMenuTrigger asChild onClick={(e) => e.stopPropagation()}>\n <Button\n variant=\"ghost\"\n className=\"flex h-8 w-8 p-0 data-[state=open]:bg-muted\"\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n <span className=\"sr-only\">Open menu</span>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-dropdown-md\">\n {visibleActions.map((action, index) => {\n // Handle separator\n if (action.separator) {\n return <DropdownMenuSeparator key={`sep-${index}`} />;\n }\n\n const isDisabled = action.disabled\n ? typeof action.disabled === 'function'\n ? action.disabled(row)\n : action.disabled\n : false;\n\n return (\n <DropdownMenuItem\n key={action.id}\n onClick={(e) => {\n e.stopPropagation();\n action.onClick(row);\n }}\n disabled={isDisabled}\n className={cn(\n 'text-xs',\n action.variant === 'destructive' &&\n 'text-destructive focus:text-destructive'\n )}\n >\n {action.icon && <span className=\"mr-2\">{action.icon}</span>}\n {action.label}\n </DropdownMenuItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n}\n","import { Database } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport type { ReactNode } from 'react';\n\ninterface DataTableEmptyProps {\n icon?: ReactNode;\n title?: string;\n description?: string;\n className?: string;\n}\n\nexport function DataTableEmpty({\n icon,\n title = 'No results found',\n description = 'Try adjusting your search or filter criteria',\n className,\n}: DataTableEmptyProps) {\n return (\n <div\n className={cn(\n 'flex flex-col items-center justify-center py-12 px-4',\n className\n )}\n >\n <div className=\"flex h-14 w-14 items-center justify-center rounded-full bg-muted/50 border border-border mb-4\">\n {icon ?? <Database className=\"h-6 w-6 text-muted-foreground\" />}\n </div>\n <h3 className=\"text-sm font-medium text-foreground mb-1\">\n {title}\n </h3>\n <p className=\"text-xs text-muted-foreground text-center max-w-sm\">\n {description}\n </p>\n </div>\n );\n}\n","import { Skeleton } from '@/components/ui/skeleton';\nimport { cn } from '@/lib/utils';\n\ninterface DataTableLoadingProps {\n columns?: number;\n rows?: number;\n className?: string;\n}\n\nexport function DataTableLoading({\n columns = 5,\n rows = 10,\n className,\n}: DataTableLoadingProps) {\n return (\n <div className={cn('w-full', className)}>\n {/* Header skeleton */}\n <div className=\"flex items-center gap-4 px-4 py-3 border-b border-border bg-muted/30\">\n {Array.from({ length: columns }).map((_, i) => (\n <Skeleton\n key={i}\n className={cn(\n 'h-4',\n i === 0 ? 'w-8' : 'flex-1',\n i === columns - 1 && 'w-12'\n )}\n />\n ))}\n </div>\n\n {/* Row skeletons */}\n {Array.from({ length: rows }).map((_, rowIndex) => (\n <div\n key={rowIndex}\n className=\"flex items-center gap-4 px-4 py-4 border-b border-border/50\"\n style={{\n opacity: 1 - rowIndex * 0.08,\n }}\n >\n {Array.from({ length: columns }).map((_, colIndex) => (\n <Skeleton\n key={colIndex}\n className={cn(\n 'h-4',\n colIndex === 0 ? 'w-8' : 'flex-1',\n colIndex === columns - 1 && 'w-12'\n )}\n />\n ))}\n </div>\n ))}\n </div>\n );\n}\n","import { useCallback, useEffect, useMemo } from 'react';\nimport {\n flexRender,\n getCoreRowModel,\n useReactTable,\n type ColumnDef,\n type RowSelectionState,\n type SortingState,\n type Updater,\n} from '@tanstack/react-table';\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '@/components/ui/table';\nimport { Checkbox } from '@/components/ui/checkbox';\nimport { cn } from '@/lib/utils';\nimport type {\n PaginationInfo,\n FieldConfig,\n FilterState,\n BulkAction,\n RowAction,\n} from '../../types';\nimport { DataTableToolbar } from '../toolbar';\nimport { DataTablePagination } from '../pagination';\nimport { DataTableBulkActions, DataTableRowActions } from '../actions';\nimport { DataTableEmpty, DataTableLoading } from '../states';\n\ninterface DataTableComponentProps<TData> {\n // Required\n columns: ColumnDef<TData, unknown>[];\n getRowId: (row: TData) => string;\n\n // Data\n data: TData[];\n isLoading?: boolean;\n error?: Error | null;\n\n // Pagination\n pagination: PaginationInfo;\n onPageChange: (page: number) => void;\n onPageSizeChange: (size: number) => void;\n onPrefetchPage?: (page: number) => void;\n pageSizeOptions?: number[];\n\n // Sorting\n sortBy: string;\n sortDirection: 'ASC' | 'DESC';\n onSortChange: (sortBy: string, sortDirection: 'ASC' | 'DESC') => void;\n\n // Search\n searchValue?: string;\n onSearchChange?: (value: string) => void;\n searchPlaceholder?: string;\n searchDebounceMs?: number;\n\n // Filters\n fieldConfig?: FieldConfig[];\n filters?: FilterState[];\n onFiltersChange?: (filters: FilterState[]) => void;\n\n // Selection\n enableRowSelection?: boolean | ((row: TData) => boolean);\n rowSelection?: Record<string, boolean>;\n onRowSelectionChange?: (selection: Record<string, boolean>) => void;\n\n // Actions\n bulkActions?: BulkAction<TData>[];\n rowActions?: RowAction<TData>[];\n\n // Toolbar\n toolbarStart?: React.ReactNode;\n toolbarEnd?: React.ReactNode;\n\n // Customization\n className?: string;\n emptyIcon?: React.ReactNode;\n emptyTitle?: string;\n emptyDescription?: string;\n onRowClick?: (row: TData) => void;\n onRowHover?: (row: TData) => void;\n rowClassName?: (row: TData) => string;\n\n // Meta - custom data passed to column cells\n meta?: Record<string, unknown>;\n}\n\nexport function DataTable<TData>({\n columns,\n getRowId,\n data,\n isLoading,\n error,\n pagination,\n onPageChange,\n onPageSizeChange,\n onPrefetchPage,\n pageSizeOptions,\n sortBy,\n sortDirection,\n onSortChange,\n searchValue,\n onSearchChange,\n searchPlaceholder,\n searchDebounceMs,\n fieldConfig,\n filters,\n onFiltersChange,\n enableRowSelection = false,\n rowSelection = {},\n onRowSelectionChange,\n bulkActions,\n rowActions,\n toolbarStart,\n toolbarEnd,\n className,\n emptyIcon,\n emptyTitle,\n emptyDescription,\n onRowClick,\n onRowHover,\n rowClassName,\n meta,\n}: DataTableComponentProps<TData>) {\n // Build columns with selection and actions\n const tableColumns = useMemo(() => {\n const cols: ColumnDef<TData, unknown>[] = [];\n\n // Add selection column if enabled\n if (enableRowSelection) {\n cols.push({\n id: 'select',\n header: ({ table }) => (\n <div onClick={(e) => e.stopPropagation()}>\n <Checkbox\n checked={\n table.getIsAllPageRowsSelected() ||\n (table.getIsSomePageRowsSelected() && 'indeterminate')\n }\n onCheckedChange={(value) =>\n table.toggleAllPageRowsSelected(!!value)\n }\n aria-label=\"Select all\"\n className=\"translate-y-[2px]\"\n />\n </div>\n ),\n cell: ({ row }) => (\n <div onClick={(e) => e.stopPropagation()}>\n <Checkbox\n checked={row.getIsSelected()}\n onCheckedChange={(value) => row.toggleSelected(!!value)}\n aria-label=\"Select row\"\n className=\"translate-y-[2px]\"\n />\n </div>\n ),\n enableSorting: false,\n enableHiding: false,\n size: 40,\n });\n }\n\n // Add user columns (filter out 'select' and 'actions' if they exist)\n cols.push(\n ...columns.filter((col) => {\n const id = 'id' in col ? col.id : undefined;\n return id !== 'select' && id !== 'actions';\n })\n );\n\n // Add actions column if there are row actions\n if (rowActions && rowActions.length > 0) {\n const existingActionsCol = columns.find(\n (col) => 'id' in col && col.id === 'actions'\n );\n\n if (!existingActionsCol) {\n cols.push({\n id: 'actions',\n header: () => <span className=\"flex w-full justify-center\">İşlemler</span>,\n cell: ({ row }) => (\n <DataTableRowActions row={row.original} actions={rowActions} />\n ),\n enableSorting: false,\n enableHiding: false,\n size: 80,\n meta: { sticky: 'right' },\n });\n }\n }\n\n return cols;\n }, [columns, enableRowSelection, rowActions]);\n\n // Convert sorting to TanStack format\n const sorting = useMemo(\n () => [{ id: sortBy, desc: sortDirection === 'DESC' }],\n [sortBy, sortDirection]\n );\n\n // Handle sorting change from TanStack\n const handleSortingChange = useCallback(\n (updaterOrValue: Updater<SortingState>) => {\n const newSorting =\n typeof updaterOrValue === 'function'\n ? updaterOrValue(sorting)\n : updaterOrValue;\n\n const firstSort = newSorting[0];\n if (firstSort) {\n // Check if column has a custom sortField in meta (for nested entity fields)\n const column = tableColumns.find(\n (col) =>\n ('accessorKey' in col && col.accessorKey === firstSort.id) ||\n ('id' in col && col.id === firstSort.id)\n );\n const sortField = column?.meta?.sortField || firstSort.id;\n\n onSortChange(sortField, firstSort.desc ? 'DESC' : 'ASC');\n }\n },\n [sorting, onSortChange, tableColumns]\n );\n\n // Convert row selection to TanStack format\n const rowSelectionState: RowSelectionState = rowSelection;\n\n // Handle row selection change\n const handleRowSelectionChange = useCallback(\n (updaterOrValue: Updater<RowSelectionState>) => {\n const newSelection =\n typeof updaterOrValue === 'function'\n ? updaterOrValue(rowSelectionState)\n : updaterOrValue;\n\n onRowSelectionChange?.(newSelection);\n },\n [rowSelectionState, onRowSelectionChange]\n );\n\n // Create table instance\n const table = useReactTable({\n data,\n columns: tableColumns,\n getCoreRowModel: getCoreRowModel(),\n manualPagination: true,\n manualSorting: true,\n manualFiltering: true,\n pageCount: pagination.totalPages,\n getRowId,\n state: {\n sorting,\n rowSelection: rowSelectionState,\n },\n onSortingChange: handleSortingChange,\n onRowSelectionChange: handleRowSelectionChange,\n enableRowSelection:\n typeof enableRowSelection === 'function'\n ? (row) => enableRowSelection(row.original)\n : enableRowSelection,\n meta,\n });\n\n // Get selected rows\n const selectedRows = useMemo(() => {\n return data.filter((row) => rowSelection[getRowId(row)]);\n }, [data, rowSelection, getRowId]);\n\n // Handle keyboard escape to clear selection\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n // Don't clear selection if a dialog/modal is open\n if (document.querySelector('[role=\"dialog\"]')) return;\n // Don't clear if inside a popover or dropdown\n if (document.querySelector('[data-radix-popper-content-wrapper]')) return;\n\n if (e.key === 'Escape' && Object.keys(rowSelection).length > 0) {\n onRowSelectionChange?.({});\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [rowSelection, onRowSelectionChange]);\n\n // Show toolbar if we have any toolbar features\n const showToolbar =\n onSearchChange !== undefined ||\n (fieldConfig && fieldConfig.length > 0 && onFiltersChange) ||\n toolbarStart ||\n toolbarEnd;\n\n return (\n <div\n className={cn(\n 'rounded-lg border border-border/80 bg-card overflow-hidden shadow-sm',\n className\n )}\n >\n {/* Toolbar */}\n {showToolbar && (\n <DataTableToolbar\n searchValue={searchValue}\n onSearchChange={onSearchChange}\n searchPlaceholder={searchPlaceholder}\n searchDebounceMs={searchDebounceMs}\n fieldConfig={fieldConfig}\n filters={filters}\n onFiltersChange={onFiltersChange}\n toolbarStart={toolbarStart}\n toolbarEnd={toolbarEnd}\n />\n )}\n\n {/* Table */}\n <div className=\"relative\">\n {isLoading ? (\n <DataTableLoading\n columns={tableColumns.length}\n rows={pagination.size}\n />\n ) : error ? (\n <DataTableEmpty\n title=\"Error loading data\"\n description={error.message}\n />\n ) : data.length === 0 ? (\n <DataTableEmpty\n icon={emptyIcon}\n title={emptyTitle}\n description={emptyDescription}\n />\n ) : (\n <Table>\n <TableHeader className=\"sticky top-0 z-10 backdrop-blur-sm\">\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id} className=\"hover:bg-transparent border-b border-border/80\">\n {headerGroup.headers.map((header) => (\n <TableHead\n key={header.id}\n style={{ width: header.getSize() }}\n aria-sort={\n header.column.getIsSorted()\n ? header.column.getIsSorted() === 'desc'\n ? 'descending'\n : 'ascending'\n : undefined\n }\n className={cn(\n \"bg-muted/50 px-2.5 py-2 text-xs font-semibold uppercase tracking-wider text-accent-cyan/80 hover:text-accent-cyan transition-colors\",\n header.column.columnDef.meta?.sticky === 'right' && 'sticky right-0 z-20 bg-muted border-l border-border/50'\n )}\n >\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows.map((row) => (\n <TableRow\n key={row.id}\n data-state={row.getIsSelected() && 'selected'}\n onClick={() => onRowClick?.(row.original)}\n onMouseEnter={() => onRowHover?.(row.original)}\n className={cn(\n 'data-table-row group cursor-default',\n onRowClick && 'cursor-pointer',\n rowClassName?.(row.original)\n )}\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell\n key={cell.id}\n style={{ width: cell.column.getSize() }}\n className={cn(\n \"px-2.5 py-1.5 text-xs\",\n cell.column.columnDef.meta?.sticky === 'right' && 'sticky right-0 z-[1] bg-card group-hover:bg-muted border-l border-border/50'\n )}\n >\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext()\n )}\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n )}\n </div>\n\n {/* Pagination */}\n {!isLoading && !error && data.length > 0 && (\n <DataTablePagination\n pagination={pagination}\n onPageChange={onPageChange}\n onPageSizeChange={onPageSizeChange}\n onPrefetchPage={onPrefetchPage}\n pageSizeOptions={pageSizeOptions}\n />\n )}\n\n {/* Bulk Actions Bar */}\n {bulkActions && bulkActions.length > 0 && (\n <DataTableBulkActions\n selectedCount={selectedRows.length}\n selectedRows={selectedRows}\n actions={bulkActions}\n onClearSelection={() => onRowSelectionChange?.({})}\n />\n )}\n </div>\n );\n}\n","/**\n * SimpleDataTable - Lightweight table for small, non-paginated datasets\n *\n * ⚠️ IMPORTANT: Bu bileşen SADECE küçük veri setleri için tasarlanmıştır!\n *\n * NE ZAMAN KULLANILMALI:\n * - Maksimum 50-100 satır veri\n * - Gateway'e bağlı sayaçlar, röleler, IO'lar gibi ilişkisel veriler\n * - Detay sayfalarındaki alt tablolar\n * - Pagination gerektirmeyen küçük listeler\n *\n * NE ZAMAN KULLANILMAMALI:\n * - 100+ satır veri içeren tablolar (performans sorunu!)\n * - Ana liste sayfaları (Gateway listesi, Sayaç listesi vb.)\n * - Server-side pagination, sorting veya filtering gereken durumlar\n * - Büyük veri setleri (tüm veri memory'de tutulur!)\n *\n * Büyük veri setleri için DataTable bileşenini kullanın:\n * @see DataTable - Server-side pagination, sorting ve filtering destekler\n *\n * Özellikler:\n * - Client-side search (opsiyonel)\n * - Loading/Error/Empty state desteği\n * - TanStack Table ile client-side filtreleme\n * - DataTable cell bileşenleriyle uyumlu (LinkCell, DateCell, StatusBadge vb.)\n */\n\nimport { useState, useMemo } from 'react';\nimport {\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n useReactTable,\n type ColumnDef,\n} from '@tanstack/react-table';\nimport { Search } from 'lucide-react';\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '@/components/ui/table';\nimport { Input } from '@/components/ui/input';\nimport { cn } from '@/lib/utils';\nimport { DataTableEmpty, DataTableLoading } from '../states';\n\ninterface SimpleDataTableProps<TData> {\n /** Column definitions */\n columns: ColumnDef<TData, unknown>[];\n /** Table data */\n data: TData[];\n /** Function to get unique row ID */\n getRowId: (row: TData) => string;\n /** Loading state */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Custom meta passed to column cells */\n meta?: Record<string, unknown>;\n /** Enable client-side search */\n enableSearch?: boolean;\n /** Search placeholder */\n searchPlaceholder?: string;\n /** Column to search (accessorKey) - defaults to global filter */\n searchColumn?: string;\n /** Empty state icon */\n emptyIcon?: React.ReactNode;\n /** Empty state title */\n emptyTitle?: string;\n /** Empty state description */\n emptyDescription?: string;\n /** Row click handler */\n onRowClick?: (row: TData) => void;\n /** Custom row class */\n rowClassName?: (row: TData) => string;\n /** Container class */\n className?: string;\n /** Number of skeleton rows for loading state */\n loadingRows?: number;\n}\n\nexport function SimpleDataTable<TData>({\n columns,\n data,\n getRowId,\n isLoading,\n error,\n meta,\n enableSearch = false,\n searchPlaceholder = 'Ara...',\n searchColumn,\n emptyIcon,\n emptyTitle = 'Veri bulunamadı',\n emptyDescription,\n onRowClick,\n rowClassName,\n className,\n loadingRows = 5,\n}: SimpleDataTableProps<TData>) {\n const [globalFilter, setGlobalFilter] = useState('');\n\n // Memoize filter state to prevent unnecessary TanStack re-processing\n const columnFilters = useMemo(\n () => (searchColumn ? [{ id: searchColumn, value: globalFilter }] : []),\n [searchColumn, globalFilter]\n );\n\n const tableState = useMemo(\n () => ({\n globalFilter: searchColumn ? undefined : globalFilter,\n columnFilters,\n }),\n [searchColumn, globalFilter, columnFilters]\n );\n\n // Create table instance\n const table = useReactTable({\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getRowId,\n state: tableState,\n onGlobalFilterChange: searchColumn ? undefined : setGlobalFilter,\n meta,\n });\n\n // Filtered row count\n const filteredCount = table.getFilteredRowModel().rows.length;\n const hasFilter = globalFilter.length > 0;\n\n return (\n <div className={cn('rounded-lg border border-border/80 bg-card overflow-hidden shadow-sm', className)}>\n {/* Search Bar */}\n {enableSearch && (\n <div className=\"flex items-center gap-2 px-3 py-2 border-b border-border/60 bg-muted/30\">\n <div className=\"relative flex-1 max-w-xs\">\n <Search className=\"absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground\" />\n <Input\n placeholder={searchPlaceholder}\n value={globalFilter}\n onChange={(e) => setGlobalFilter(e.target.value)}\n className=\"pl-8 h-8 text-xs border-border/60 focus:border-primary/50\"\n />\n </div>\n {hasFilter && (\n <span className=\"text-xs text-muted-foreground\">\n {filteredCount} / {data.length} sonuç\n </span>\n )}\n </div>\n )}\n\n {/* Table Content */}\n <div className=\"relative\">\n {isLoading ? (\n <DataTableLoading columns={columns.length} rows={loadingRows} />\n ) : error ? (\n <DataTableEmpty\n title=\"Veri yüklenemedi\"\n description={error.message}\n />\n ) : data.length === 0 ? (\n <DataTableEmpty\n icon={emptyIcon}\n title={emptyTitle}\n description={emptyDescription}\n />\n ) : filteredCount === 0 && hasFilter ? (\n <DataTableEmpty\n title=\"Sonuç bulunamadı\"\n description=\"Arama kriterlerinizi değiştirin\"\n />\n ) : (\n <Table>\n <TableHeader className=\"sticky top-0 z-10 backdrop-blur-sm\">\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id} className=\"hover:bg-transparent border-b border-border/80\">\n {headerGroup.headers.map((header) => (\n <TableHead\n key={header.id}\n style={{ width: header.getSize() }}\n className={cn(\n \"bg-muted/50 px-2.5 py-2 text-xs font-semibold uppercase tracking-wider text-accent-cyan/80 hover:text-accent-cyan transition-colors\",\n header.column.columnDef.meta?.sticky === 'right' && 'sticky right-0 z-20 bg-muted border-l border-border/50'\n )}\n >\n {header.isPlaceholder\n ? null\n : flexRender(header.column.columnDef.header, header.getContext())}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows.map((row) => (\n <TableRow\n key={row.id}\n onClick={onRowClick ? () => onRowClick(row.original) : undefined}\n className={cn(\n 'group cursor-default',\n onRowClick && 'cursor-pointer',\n rowClassName?.(row.original)\n )}\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell\n key={cell.id}\n style={{ width: cell.column.getSize() }}\n className={cn(\n \"px-2.5 py-1.5 text-xs\",\n cell.column.columnDef.meta?.sticky === 'right' && 'sticky right-0 z-[1] bg-card group-hover:bg-muted border-l border-border/50'\n )}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n )}\n </div>\n </div>\n );\n}\n","import type { Column } from '@tanstack/react-table';\nimport { ArrowDown, ArrowUp, ArrowUpDown, EyeOff } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\n\ninterface DataTableColumnHeaderProps<TData, TValue>\n extends React.HTMLAttributes<HTMLDivElement> {\n column: Column<TData, TValue>;\n title: string;\n sortable?: boolean;\n}\n\nexport function DataTableColumnHeader<TData, TValue>({\n column,\n title,\n sortable = true,\n className,\n}: DataTableColumnHeaderProps<TData, TValue>) {\n if (!column.getCanSort() || !sortable) {\n return (\n <div className={cn('text-xs font-medium text-accent-cyan', className)}>\n {title}\n </div>\n );\n }\n\n const isSorted = column.getIsSorted();\n\n return (\n <div className={cn('flex items-center space-x-2', className)}>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n '-ml-2 h-7 px-2',\n 'text-xs font-medium',\n 'text-accent-cyan hover:text-accent-cyan/80',\n isSorted && 'text-accent-cyan',\n 'data-[state=open]:bg-accent'\n )}\n >\n <span>{title}</span>\n {isSorted === 'desc' ? (\n <ArrowDown className=\"ml-1.5 h-3 w-3\" />\n ) : isSorted === 'asc' ? (\n <ArrowUp className=\"ml-1.5 h-3 w-3\" />\n ) : (\n <ArrowUpDown className=\"ml-1.5 h-3 w-3 opacity-40\" />\n )}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"min-w-dropdown-sm\">\n <DropdownMenuItem onClick={() => column.toggleSorting(false)} className=\"text-xs\">\n <ArrowUp className=\"mr-2 h-3 w-3 text-muted-foreground\" />\n Artan\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => column.toggleSorting(true)} className=\"text-xs\">\n <ArrowDown className=\"mr-2 h-3 w-3 text-muted-foreground\" />\n Azalan\n </DropdownMenuItem>\n {column.getIsSorted() && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem onClick={() => column.clearSorting()} className=\"text-xs\">\n <ArrowUpDown className=\"mr-2 h-3 w-3 text-muted-foreground\" />\n Temizle\n </DropdownMenuItem>\n </>\n )}\n {column.getCanHide() && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem onClick={() => column.toggleVisibility(false)} className=\"text-xs\">\n <EyeOff className=\"mr-2 h-3 w-3 text-muted-foreground\" />\n Gizle\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n}\n","import { cn } from '@/lib/utils';\n\ninterface TextCellProps {\n value: string | null | undefined;\n variant?: 'primary' | 'secondary' | 'muted';\n className?: string;\n truncate?: boolean;\n maxWidth?: string;\n}\n\nconst variantStyles = {\n primary: 'text-muted-foreground',\n secondary: 'text-muted-foreground/80',\n muted: 'text-muted-foreground/60',\n};\n\n/**\n * Standard text cell for table columns.\n * Handles null/undefined values and provides consistent styling.\n */\nexport function TextCell({\n value,\n variant = 'primary',\n className,\n truncate = false,\n maxWidth,\n}: TextCellProps) {\n if (value === null || value === undefined || value === '') {\n return <span className=\"text-muted-foreground/40 text-xs\">-</span>;\n }\n\n return (\n <span\n className={cn(\n 'text-xs leading-none',\n variantStyles[variant],\n truncate && 'truncate block',\n className\n )}\n style={maxWidth ? { maxWidth } : undefined}\n title={truncate ? value : undefined}\n >\n {value}\n </span>\n );\n}\n","/**\n * Shared date formatting utilities for detail pages and table cells\n */\n\nimport { format, formatDistanceToNow, isValid } from 'date-fns';\nimport { tr } from 'date-fns/locale';\n\ntype DateInput = number | string | Date | null | undefined;\n\n/**\n * Safely parse a date input to a Date object\n */\nfunction parseDate(timestamp: DateInput): Date | null {\n if (!timestamp) return null;\n const date = timestamp instanceof Date ? timestamp : new Date(timestamp);\n return isValid(date) ? date : null;\n}\n\n/**\n * Format a timestamp to a short date string (e.g., \"Jan 1, 2024\")\n */\nexport function formatDate(timestamp: DateInput): string {\n const date = parseDate(timestamp);\n if (!date) return '-';\n return format(date, 'd MMM yyyy', { locale: tr });\n}\n\n/**\n * Format a timestamp to date with time (e.g., \"Jan 1, 2024 14:30\")\n */\nexport function formatDateTime(timestamp: DateInput): string {\n const date = parseDate(timestamp);\n if (!date) return '-';\n return format(date, 'd MMM yyyy HH:mm', { locale: tr });\n}\n\n/**\n * Format a timestamp to relative time (e.g., \"2 hours ago\")\n */\nexport function formatRelativeTime(timestamp: DateInput, locale: 'en' | 'tr' = 'tr'): string {\n const date = parseDate(timestamp);\n if (!date) return '-';\n return formatDistanceToNow(date, {\n addSuffix: true,\n locale: locale === 'tr' ? tr : undefined,\n });\n}\n\n/**\n * Format a timestamp to ISO string (e.g., \"2024-01-01T14:30:00Z\")\n */\nexport function formatISODate(timestamp: DateInput): string {\n const date = parseDate(timestamp);\n if (!date) return '-';\n return date.toISOString();\n}\n\n/**\n * Format a timestamp to a short time string (e.g., \"14:30\")\n */\nexport function formatTime(timestamp: DateInput): string {\n const date = parseDate(timestamp);\n if (!date) return '-';\n return format(date, 'HH:mm');\n}\n\n/**\n * Format a timestamp to full date with seconds (e.g., \"Jan 1, 2024 14:30:45\")\n */\nexport function formatDateTimeFull(timestamp: DateInput): string {\n const date = parseDate(timestamp);\n if (!date) return '-';\n return format(date, 'd MMM yyyy HH:mm:ss', { locale: tr });\n}\n\n/**\n * Parse backend timestamp format (YYYYMMDDHHmmssSSS) to Date\n * Example: 20260127004431907 -> Date(2026, 0, 27, 0, 44, 31)\n */\nexport function parseBackendTimestamp(timestamp: number | string | null | undefined): Date | null {\n if (!timestamp) return null;\n const str = timestamp.toString();\n if (str.length < 14) return null;\n\n const year = parseInt(str.slice(0, 4));\n const month = parseInt(str.slice(4, 6)) - 1; // 0-indexed\n const day = parseInt(str.slice(6, 8));\n const hour = parseInt(str.slice(8, 10));\n const minute = parseInt(str.slice(10, 12));\n const second = parseInt(str.slice(12, 14));\n\n const date = new Date(year, month, day, hour, minute, second);\n return isValid(date) ? date : null;\n}\n\n/**\n * Format backend timestamp to short datetime (e.g., \"27 Oca 00:44\")\n */\nexport function formatBackendTimestamp(timestamp: number | string | null | undefined): string {\n const date = parseBackendTimestamp(timestamp);\n if (!date) return '-';\n return format(date, 'd MMM HH:mm', { locale: tr });\n}\n","import { cn } from '@/lib/utils';\nimport { formatDate, formatDateTime, formatRelativeTime } from '@/lib/date-formatting';\n\ntype DateInput = number | string | Date | null | undefined;\n\ninterface DateCellProps {\n value: DateInput;\n format?: 'date' | 'datetime' | 'relative';\n className?: string;\n showTooltip?: boolean;\n}\n\n/**\n * Date cell for table columns.\n * Formats dates consistently across the application.\n */\nexport function DateCell({\n value,\n format = 'datetime',\n className,\n showTooltip = true,\n}: DateCellProps) {\n if (value === null || value === undefined) {\n return <span className=\"text-muted-foreground/40 text-xs\">-</span>;\n }\n\n const formatters = {\n date: formatDate,\n datetime: formatDateTime,\n relative: formatRelativeTime,\n };\n\n const displayValue = formatters[format](value);\n const tooltipValue = format === 'relative' ? formatDateTime(value) : undefined;\n\n return (\n <span\n className={cn('text-xs leading-none text-muted-foreground', className)}\n title={showTooltip ? tooltipValue : undefined}\n >\n {displayValue}\n </span>\n );\n}\n","/**\n * Standardized color palette for status badges and indicators.\n * Semantic colors with consistent light/dark mode support.\n */\n\n// Semantic status colors with theme variable Tailwind classes\nexport const statusColors = {\n success: 'bg-status-success/10 text-status-success-foreground border-status-success/30',\n warning: 'bg-status-warning/10 text-status-warning border-status-warning/30',\n error: 'bg-status-error/10 text-status-error border-status-error/30',\n info: 'bg-status-info/10 text-status-info-foreground border-status-info/30',\n neutral: 'bg-status-neutral/10 text-status-neutral-foreground border-status-neutral/30',\n accent: 'bg-accent-cyan/10 text-accent-cyan border-accent-cyan/30',\n purple: 'bg-status-purple/10 text-status-purple-foreground border-status-purple/30',\n} as const;\n\nexport type StatusColor = keyof typeof statusColors;\n\n/** Surface colors for containers, cards, banners - more opaque than statusColors */\nexport const surfaceColors = {\n success: 'bg-surface-success text-surface-success-foreground',\n warning: 'bg-surface-warning text-surface-warning-foreground',\n error: 'bg-surface-error text-surface-error-foreground',\n info: 'bg-surface-info text-surface-info-foreground',\n purple: 'bg-surface-purple text-surface-purple-foreground',\n} as const;\n\nexport type SurfaceColor = keyof typeof surfaceColors;\n\n// Common device status color mappings\nexport const deviceStatusColors = {\n ACTIVE: statusColors.success,\n INACTIVE: statusColors.neutral,\n MAINTENANCE: statusColors.warning,\n FAULTY: statusColors.error,\n ONLINE: statusColors.success,\n OFFLINE: statusColors.neutral,\n PENDING: statusColors.warning,\n CONNECTED: statusColors.success,\n DISCONNECTED: statusColors.neutral,\n} as const;\n\n// Protocol type color mappings\nexport const protocolTypeColors = {\n DLMS: statusColors.info,\n MODBUS: statusColors.purple,\n IEC_62056_21: statusColors.accent,\n ANSI_C12_18: statusColors.warning,\n} as const;\n\n// Priority color mappings\nexport const priorityColors = {\n HIGH: statusColors.error,\n MEDIUM: statusColors.warning,\n LOW: statusColors.info,\n CRITICAL: statusColors.error,\n NORMAL: statusColors.neutral,\n} as const;\n\n// Boolean color mappings\nexport const booleanColors = {\n true: statusColors.success,\n false: statusColors.neutral,\n} as const;\n\n/**\n * Get status color classes for a given value from a color map\n */\nexport function getStatusColor<T extends string>(\n value: T | null | undefined,\n colorMap: Record<T, string>,\n fallback = statusColors.neutral\n): string {\n if (!value) return fallback;\n return colorMap[value] ?? fallback;\n}\n","import { cn } from '@/lib/utils';\nimport { statusColors } from '@/lib/status-colors';\n\ninterface StatusBadgeProps<T extends string> {\n value: T | null | undefined;\n colorMap: Record<T, string>;\n labelMap?: Record<T, string>;\n icon?: React.ReactNode;\n showDot?: boolean;\n dotColorMap?: Record<T, string>;\n pulse?: boolean | Record<T, boolean>;\n size?: 'sm' | 'md';\n showLabel?: boolean;\n className?: string;\n}\n\n/**\n * Status badge for displaying enum/status values.\n * Provides consistent styling across all tables.\n *\n * @example\n * ```tsx\n * <StatusBadge\n * value={row.status}\n * colorMap={{\n * ACTIVE: statusColors.success,\n * INACTIVE: statusColors.neutral,\n * }}\n * labelMap={{\n * ACTIVE: 'Active',\n * INACTIVE: 'Inactive',\n * }}\n * showDot\n * icon={<Wifi className=\"h-3 w-3\" />}\n * />\n * ```\n */\nexport function StatusBadge<T extends string>({\n value,\n colorMap,\n labelMap,\n icon,\n showDot = false,\n dotColorMap,\n pulse = false,\n size = 'md',\n showLabel = true,\n className,\n}: StatusBadgeProps<T>) {\n if (value === null || value === undefined) {\n return <span className=\"text-muted-foreground/40 text-xs\">-</span>;\n }\n\n const colorClasses = colorMap[value] ?? statusColors.neutral;\n const label = labelMap?.[value] ?? value;\n const shouldPulse = typeof pulse === 'boolean' ? pulse : (pulse[value] ?? false);\n\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1.5 rounded font-medium border leading-none',\n size === 'sm' ? 'h-5 px-2 text-xs' : 'px-1.5 py-0.5 text-xs',\n colorClasses,\n className\n )}\n >\n {showDot && (\n <span\n className={cn(\n 'h-1.5 w-1.5 rounded-full flex-shrink-0',\n dotColorMap?.[value] ?? 'bg-current',\n shouldPulse && 'animate-pulse'\n )}\n />\n )}\n {icon}\n {showLabel && label}\n </span>\n );\n}\n","import { Check, X } from 'lucide-react';\nimport { cn } from '@/lib/utils';\n\ninterface BooleanCellProps {\n value: boolean | null | undefined;\n trueIcon?: React.ReactNode;\n falseIcon?: React.ReactNode;\n trueLabel?: string;\n falseLabel?: string;\n showLabel?: boolean;\n className?: string;\n}\n\n/**\n * Boolean cell for displaying true/false values.\n * Shows check/X icons with consistent styling.\n */\nexport function BooleanCell({\n value,\n trueIcon,\n falseIcon,\n trueLabel = 'Yes',\n falseLabel = 'No',\n showLabel = false,\n className,\n}: BooleanCellProps) {\n if (value === null || value === undefined) {\n return <span className=\"text-muted-foreground/40 text-xs\">-</span>;\n }\n\n const icon = value\n ? (trueIcon ?? <Check className=\"h-3 w-3\" />)\n : (falseIcon ?? <X className=\"h-3 w-3\" />);\n\n const label = value ? trueLabel : falseLabel;\n\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1 leading-none',\n value\n ? 'text-status-success-foreground'\n : 'text-status-neutral-foreground',\n className\n )}\n >\n {icon}\n {showLabel && <span className=\"text-xs font-medium\">{label}</span>}\n </span>\n );\n}\n","import { useState, useCallback } from 'react';\nimport { Copy, Check } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { toast } from 'sonner';\n\ninterface CopyableCellProps {\n value: string | null | undefined;\n truncate?: boolean;\n maxWidth?: string;\n className?: string;\n successMessage?: string;\n}\n\n/**\n * Copyable text cell for table columns.\n * Shows copy button on hover and provides feedback.\n *\n * Ideal for: ICCID, IP addresses, serial numbers, etc.\n */\nexport function CopyableCell({\n value,\n truncate = true,\n maxWidth = '160px',\n className,\n successMessage = 'Copied to clipboard',\n}: CopyableCellProps) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(\n async (e: React.MouseEvent) => {\n e.stopPropagation();\n if (!value) return;\n\n try {\n await navigator.clipboard.writeText(value);\n setCopied(true);\n toast.success(successMessage);\n setTimeout(() => setCopied(false), 2000);\n } catch {\n toast.error('Failed to copy');\n }\n },\n [value, successMessage]\n );\n\n if (value === null || value === undefined || value === '') {\n return <span className=\"text-muted-foreground/40 text-xs\">-</span>;\n }\n\n return (\n <div className={cn('group flex items-center gap-1', className)}>\n <span\n className={cn(\n 'text-xs leading-none text-muted-foreground',\n truncate && 'truncate'\n )}\n style={truncate ? { maxWidth } : undefined}\n title={value}\n >\n {value}\n </span>\n <button\n type=\"button\"\n onClick={handleCopy}\n className={cn(\n 'opacity-0 group-hover:opacity-100 transition-opacity flex-shrink-0',\n 'p-0.5 rounded hover:bg-muted',\n copied && 'opacity-100'\n )}\n title=\"Copy to clipboard\"\n >\n {copied ? (\n <Check className=\"h-3 w-3 text-feedback-success\" />\n ) : (\n <Copy className=\"h-3 w-3 text-muted-foreground\" />\n )}\n </button>\n </div>\n );\n}\n","import { cn } from '@/lib/utils';\nimport { formatRelativeTime, formatDateTime } from '@/lib/date-formatting';\n\ntype DateInput = number | string | Date | null | undefined;\n\ninterface RelativeTimeCellProps {\n value: DateInput;\n className?: string;\n warningThresholdMs?: number;\n errorThresholdMs?: number;\n}\n\nconst ONE_HOUR = 60 * 60 * 1000;\nconst ONE_DAY = 24 * ONE_HOUR;\n\n/**\n * Relative time cell for displaying \"time ago\" values.\n * Changes color based on how old the timestamp is.\n *\n * Ideal for: lastSeen, lastSync, updatedAt fields\n */\nexport function RelativeTimeCell({\n value,\n className,\n warningThresholdMs = ONE_HOUR,\n errorThresholdMs = ONE_DAY,\n}: RelativeTimeCellProps) {\n if (value === null || value === undefined) {\n return <span className=\"text-muted-foreground/40 text-xs\">-</span>;\n }\n\n const date = value instanceof Date ? value : new Date(value);\n const now = Date.now();\n const age = now - date.getTime();\n\n let colorClass = 'text-status-success-foreground';\n if (age > errorThresholdMs) {\n colorClass = 'text-status-error';\n } else if (age > warningThresholdMs) {\n colorClass = 'text-status-warning';\n }\n\n const displayValue = formatRelativeTime(value);\n const tooltipValue = formatDateTime(value);\n\n return (\n <span\n className={cn('text-xs leading-none', colorClass, className)}\n title={tooltipValue}\n >\n {displayValue}\n </span>\n );\n}\n","import { cn } from '@/lib/utils';\n\ninterface BadgeCellProps {\n value: string | number | null | undefined;\n variant?: 'default' | 'accent';\n className?: string;\n}\n\nconst variantStyles = {\n default: 'bg-muted',\n accent: 'bg-accent-cyan/10 text-accent-cyan border border-accent-cyan/30',\n};\n\n/**\n * Simple badge cell for displaying values like port numbers or version numbers.\n * Use StatusBadge for colored enum/status values instead.\n */\nexport function BadgeCell({\n value,\n variant = 'default',\n className,\n}: BadgeCellProps) {\n if (value === null || value === undefined) {\n return <span className=\"text-muted-foreground/40 text-xs\">-</span>;\n }\n\n return (\n <span\n className={cn(\n 'inline-flex items-center px-1.5 py-0.5 rounded text-xs leading-none',\n variantStyles[variant],\n className\n )}\n >\n {value}\n </span>\n );\n}\n","import { cn } from '@/lib/utils';\n\ninterface IconTextCellProps {\n value: string | null | undefined;\n icon: React.ReactNode;\n className?: string;\n}\n\n/**\n * Cell with icon + text combination.\n * Useful for displaying items like SIM cards, gateway assignments, etc.\n */\nexport function IconTextCell({ value, icon, className }: IconTextCellProps) {\n if (value === null || value === undefined) {\n return <span className=\"text-muted-foreground/40 text-xs\">-</span>;\n }\n\n return (\n <div\n className={cn(\n 'inline-flex items-center gap-1 text-muted-foreground',\n className\n )}\n >\n {icon}\n <span className=\"text-xs leading-none\">{value}</span>\n </div>\n );\n}\n","import { cn } from '@/lib/utils';\n\ninterface StackedTextCellProps {\n primary: string | null | undefined;\n secondary?: string | null | undefined;\n primaryClassName?: string;\n}\n\n/**\n * Two-line stacked text cell.\n * Useful for displaying model + brand or similar hierarchical information.\n */\nexport function StackedTextCell({\n primary,\n secondary,\n primaryClassName,\n}: StackedTextCellProps) {\n if (!primary) {\n return <span className=\"text-muted-foreground/40 text-xs\">-</span>;\n }\n\n return (\n <div className=\"flex flex-col gap-0.5\">\n <span className={cn('text-xs leading-none text-muted-foreground', primaryClassName)}>\n {primary}\n </span>\n {secondary && (\n <span className=\"text-xs text-muted-foreground/60 leading-none\">\n {secondary}\n </span>\n )}\n </div>\n );\n}\n","import { Link } from '@tanstack/react-router';\nimport { ExternalLink } from 'lucide-react';\nimport { cn } from '@/lib/utils';\n\ninterface LinkCellProps {\n to: string;\n params?: Record<string, string>;\n value: string | null | undefined;\n showExternalIcon?: boolean;\n hoverColor?: 'cyan' | 'violet';\n className?: string;\n}\n\nconst hoverColors = {\n cyan: 'group-hover/link:text-accent-cyan',\n violet: 'group-hover/link:text-accent-violet',\n};\n\n/**\n * Link cell for navigable table values.\n * Shows external link icon on hover and supports different hover colors.\n */\nexport function LinkCell({\n to,\n params,\n value,\n showExternalIcon = true,\n hoverColor = 'cyan',\n className,\n}: LinkCellProps) {\n if (!value) {\n return <span className=\"text-muted-foreground/40 text-xs\">-</span>;\n }\n\n return (\n <Link\n to={to}\n params={params}\n className={cn('group/link inline-flex items-center gap-1', className)}\n >\n <span\n className={cn(\n 'text-xs font-medium text-muted-foreground transition-colors leading-none',\n hoverColors[hoverColor]\n )}\n >\n {value}\n </span>\n {showExternalIcon && (\n <ExternalLink className=\"h-2.5 w-2.5 text-muted-foreground/60 opacity-0 group-hover/link:opacity-100 transition-opacity\" />\n )}\n </Link>\n );\n}\n","const isIterable = (obj) => Symbol.iterator in obj;\nconst hasIterableEntries = (value) => (\n // HACK: avoid checking entries type\n \"entries\" in value\n);\nconst compareEntries = (valueA, valueB) => {\n const mapA = valueA instanceof Map ? valueA : new Map(valueA.entries());\n const mapB = valueB instanceof Map ? valueB : new Map(valueB.entries());\n if (mapA.size !== mapB.size) {\n return false;\n }\n for (const [key, value] of mapA) {\n if (!mapB.has(key) || !Object.is(value, mapB.get(key))) {\n return false;\n }\n }\n return true;\n};\nconst compareIterables = (valueA, valueB) => {\n const iteratorA = valueA[Symbol.iterator]();\n const iteratorB = valueB[Symbol.iterator]();\n let nextA = iteratorA.next();\n let nextB = iteratorB.next();\n while (!nextA.done && !nextB.done) {\n if (!Object.is(nextA.value, nextB.value)) {\n return false;\n }\n nextA = iteratorA.next();\n nextB = iteratorB.next();\n }\n return !!nextA.done && !!nextB.done;\n};\nfunction shallow(valueA, valueB) {\n if (Object.is(valueA, valueB)) {\n return true;\n }\n if (typeof valueA !== \"object\" || valueA === null || typeof valueB !== \"object\" || valueB === null) {\n return false;\n }\n if (Object.getPrototypeOf(valueA) !== Object.getPrototypeOf(valueB)) {\n return false;\n }\n if (isIterable(valueA) && isIterable(valueB)) {\n if (hasIterableEntries(valueA) && hasIterableEntries(valueB)) {\n return compareEntries(valueA, valueB);\n }\n return compareIterables(valueA, valueB);\n }\n return compareEntries(\n { entries: () => Object.entries(valueA) },\n { entries: () => Object.entries(valueB) }\n );\n}\n\nexport { shallow };\n","import React from 'react';\nimport { shallow } from 'zustand/vanilla/shallow';\n\nfunction useShallow(selector) {\n const prev = React.useRef(void 0);\n return (state) => {\n const next = selector(state);\n return shallow(prev.current, next) ? prev.current : prev.current = next;\n };\n}\n\nexport { useShallow };\n","// src/utils/env.ts\nvar NOTHING = Symbol.for(\"immer-nothing\");\nvar DRAFTABLE = Symbol.for(\"immer-draftable\");\nvar DRAFT_STATE = Symbol.for(\"immer-state\");\n\n// src/utils/errors.ts\nvar errors = process.env.NODE_ENV !== \"production\" ? [\n // All error codes, starting by 0:\n function(plugin) {\n return `The plugin for '${plugin}' has not been loaded into Immer. To enable the plugin, import and call \\`enable${plugin}()\\` when initializing your application.`;\n },\n function(thing) {\n return `produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${thing}'`;\n },\n \"This object has been frozen and should not be mutated\",\n function(data) {\n return \"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \" + data;\n },\n \"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",\n \"Immer forbids circular references\",\n \"The first or second argument to `produce` must be a function\",\n \"The third argument to `produce` must be a function or undefined\",\n \"First argument to `createDraft` must be a plain object, an array, or an immerable object\",\n \"First argument to `finishDraft` must be a draft returned by `createDraft`\",\n function(thing) {\n return `'current' expects a draft, got: ${thing}`;\n },\n \"Object.defineProperty() cannot be used on an Immer draft\",\n \"Object.setPrototypeOf() cannot be used on an Immer draft\",\n \"Immer only supports deleting array indices\",\n \"Immer only supports setting array indices and the 'length' property\",\n function(thing) {\n return `'original' expects a draft, got: ${thing}`;\n }\n // Note: if more errors are added, the errorOffset in Patches.ts should be increased\n // See Patches.ts for additional errors\n] : [];\nfunction die(error, ...args) {\n if (process.env.NODE_ENV !== \"production\") {\n const e = errors[error];\n const msg = isFunction(e) ? e.apply(null, args) : e;\n throw new Error(`[Immer] ${msg}`);\n }\n throw new Error(\n `[Immer] minified error nr: ${error}. Full error at: https://bit.ly/3cXEKWf`\n );\n}\n\n// src/utils/common.ts\nvar O = Object;\nvar getPrototypeOf = O.getPrototypeOf;\nvar CONSTRUCTOR = \"constructor\";\nvar PROTOTYPE = \"prototype\";\nvar CONFIGURABLE = \"configurable\";\nvar ENUMERABLE = \"enumerable\";\nvar WRITABLE = \"writable\";\nvar VALUE = \"value\";\nvar isDraft = (value) => !!value && !!value[DRAFT_STATE];\nfunction isDraftable(value) {\n if (!value)\n return false;\n return isPlainObject(value) || isArray(value) || !!value[DRAFTABLE] || !!value[CONSTRUCTOR]?.[DRAFTABLE] || isMap(value) || isSet(value);\n}\nvar objectCtorString = O[PROTOTYPE][CONSTRUCTOR].toString();\nvar cachedCtorStrings = /* @__PURE__ */ new WeakMap();\nfunction isPlainObject(value) {\n if (!value || !isObjectish(value))\n return false;\n const proto = getPrototypeOf(value);\n if (proto === null || proto === O[PROTOTYPE])\n return true;\n const Ctor = O.hasOwnProperty.call(proto, CONSTRUCTOR) && proto[CONSTRUCTOR];\n if (Ctor === Object)\n return true;\n if (!isFunction(Ctor))\n return false;\n let ctorString = cachedCtorStrings.get(Ctor);\n if (ctorString === void 0) {\n ctorString = Function.toString.call(Ctor);\n cachedCtorStrings.set(Ctor, ctorString);\n }\n return ctorString === objectCtorString;\n}\nfunction original(value) {\n if (!isDraft(value))\n die(15, value);\n return value[DRAFT_STATE].base_;\n}\nfunction each(obj, iter, strict = true) {\n if (getArchtype(obj) === 0 /* Object */) {\n const keys = strict ? Reflect.ownKeys(obj) : O.keys(obj);\n keys.forEach((key) => {\n iter(key, obj[key], obj);\n });\n } else {\n obj.forEach((entry, index) => iter(index, entry, obj));\n }\n}\nfunction getArchtype(thing) {\n const state = thing[DRAFT_STATE];\n return state ? state.type_ : isArray(thing) ? 1 /* Array */ : isMap(thing) ? 2 /* Map */ : isSet(thing) ? 3 /* Set */ : 0 /* Object */;\n}\nvar has = (thing, prop, type = getArchtype(thing)) => type === 2 /* Map */ ? thing.has(prop) : O[PROTOTYPE].hasOwnProperty.call(thing, prop);\nvar get = (thing, prop, type = getArchtype(thing)) => (\n // @ts-ignore\n type === 2 /* Map */ ? thing.get(prop) : thing[prop]\n);\nvar set = (thing, propOrOldValue, value, type = getArchtype(thing)) => {\n if (type === 2 /* Map */)\n thing.set(propOrOldValue, value);\n else if (type === 3 /* Set */) {\n thing.add(value);\n } else\n thing[propOrOldValue] = value;\n};\nfunction is(x, y) {\n if (x === y) {\n return x !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\nvar isArray = Array.isArray;\nvar isMap = (target) => target instanceof Map;\nvar isSet = (target) => target instanceof Set;\nvar isObjectish = (target) => typeof target === \"object\";\nvar isFunction = (target) => typeof target === \"function\";\nvar isBoolean = (target) => typeof target === \"boolean\";\nfunction isArrayIndex(value) {\n const n = +value;\n return Number.isInteger(n) && String(n) === value;\n}\nvar getProxyDraft = (value) => {\n if (!isObjectish(value))\n return null;\n return value?.[DRAFT_STATE];\n};\nvar latest = (state) => state.copy_ || state.base_;\nvar getValue = (value) => {\n const proxyDraft = getProxyDraft(value);\n return proxyDraft ? proxyDraft.copy_ ?? proxyDraft.base_ : value;\n};\nvar getFinalValue = (state) => state.modified_ ? state.copy_ : state.base_;\nfunction shallowCopy(base, strict) {\n if (isMap(base)) {\n return new Map(base);\n }\n if (isSet(base)) {\n return new Set(base);\n }\n if (isArray(base))\n return Array[PROTOTYPE].slice.call(base);\n const isPlain = isPlainObject(base);\n if (strict === true || strict === \"class_only\" && !isPlain) {\n const descriptors = O.getOwnPropertyDescriptors(base);\n delete descriptors[DRAFT_STATE];\n let keys = Reflect.ownKeys(descriptors);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const desc = descriptors[key];\n if (desc[WRITABLE] === false) {\n desc[WRITABLE] = true;\n desc[CONFIGURABLE] = true;\n }\n if (desc.get || desc.set)\n descriptors[key] = {\n [CONFIGURABLE]: true,\n [WRITABLE]: true,\n // could live with !!desc.set as well here...\n [ENUMERABLE]: desc[ENUMERABLE],\n [VALUE]: base[key]\n };\n }\n return O.create(getPrototypeOf(base), descriptors);\n } else {\n const proto = getPrototypeOf(base);\n if (proto !== null && isPlain) {\n return { ...base };\n }\n const obj = O.create(proto);\n return O.assign(obj, base);\n }\n}\nfunction freeze(obj, deep = false) {\n if (isFrozen(obj) || isDraft(obj) || !isDraftable(obj))\n return obj;\n if (getArchtype(obj) > 1) {\n O.defineProperties(obj, {\n set: dontMutateMethodOverride,\n add: dontMutateMethodOverride,\n clear: dontMutateMethodOverride,\n delete: dontMutateMethodOverride\n });\n }\n O.freeze(obj);\n if (deep)\n each(\n obj,\n (_key, value) => {\n freeze(value, true);\n },\n false\n );\n return obj;\n}\nfunction dontMutateFrozenCollections() {\n die(2);\n}\nvar dontMutateMethodOverride = {\n [VALUE]: dontMutateFrozenCollections\n};\nfunction isFrozen(obj) {\n if (obj === null || !isObjectish(obj))\n return true;\n return O.isFrozen(obj);\n}\n\n// src/utils/plugins.ts\nvar PluginMapSet = \"MapSet\";\nvar PluginPatches = \"Patches\";\nvar PluginArrayMethods = \"ArrayMethods\";\nvar plugins = {};\nfunction getPlugin(pluginKey) {\n const plugin = plugins[pluginKey];\n if (!plugin) {\n die(0, pluginKey);\n }\n return plugin;\n}\nvar isPluginLoaded = (pluginKey) => !!plugins[pluginKey];\nfunction loadPlugin(pluginKey, implementation) {\n if (!plugins[pluginKey])\n plugins[pluginKey] = implementation;\n}\n\n// src/core/scope.ts\nvar currentScope;\nvar getCurrentScope = () => currentScope;\nvar createScope = (parent_, immer_) => ({\n drafts_: [],\n parent_,\n immer_,\n // Whenever the modified draft contains a draft from another scope, we\n // need to prevent auto-freezing so the unowned draft can be finalized.\n canAutoFreeze_: true,\n unfinalizedDrafts_: 0,\n handledSet_: /* @__PURE__ */ new Set(),\n processedForPatches_: /* @__PURE__ */ new Set(),\n mapSetPlugin_: isPluginLoaded(PluginMapSet) ? getPlugin(PluginMapSet) : void 0,\n arrayMethodsPlugin_: isPluginLoaded(PluginArrayMethods) ? getPlugin(PluginArrayMethods) : void 0\n});\nfunction usePatchesInScope(scope, patchListener) {\n if (patchListener) {\n scope.patchPlugin_ = getPlugin(PluginPatches);\n scope.patches_ = [];\n scope.inversePatches_ = [];\n scope.patchListener_ = patchListener;\n }\n}\nfunction revokeScope(scope) {\n leaveScope(scope);\n scope.drafts_.forEach(revokeDraft);\n scope.drafts_ = null;\n}\nfunction leaveScope(scope) {\n if (scope === currentScope) {\n currentScope = scope.parent_;\n }\n}\nvar enterScope = (immer2) => currentScope = createScope(currentScope, immer2);\nfunction revokeDraft(draft) {\n const state = draft[DRAFT_STATE];\n if (state.type_ === 0 /* Object */ || state.type_ === 1 /* Array */)\n state.revoke_();\n else\n state.revoked_ = true;\n}\n\n// src/core/finalize.ts\nfunction processResult(result, scope) {\n scope.unfinalizedDrafts_ = scope.drafts_.length;\n const baseDraft = scope.drafts_[0];\n const isReplaced = result !== void 0 && result !== baseDraft;\n if (isReplaced) {\n if (baseDraft[DRAFT_STATE].modified_) {\n revokeScope(scope);\n die(4);\n }\n if (isDraftable(result)) {\n result = finalize(scope, result);\n }\n const { patchPlugin_ } = scope;\n if (patchPlugin_) {\n patchPlugin_.generateReplacementPatches_(\n baseDraft[DRAFT_STATE].base_,\n result,\n scope\n );\n }\n } else {\n result = finalize(scope, baseDraft);\n }\n maybeFreeze(scope, result, true);\n revokeScope(scope);\n if (scope.patches_) {\n scope.patchListener_(scope.patches_, scope.inversePatches_);\n }\n return result !== NOTHING ? result : void 0;\n}\nfunction finalize(rootScope, value) {\n if (isFrozen(value))\n return value;\n const state = value[DRAFT_STATE];\n if (!state) {\n const finalValue = handleValue(value, rootScope.handledSet_, rootScope);\n return finalValue;\n }\n if (!isSameScope(state, rootScope)) {\n return value;\n }\n if (!state.modified_) {\n return state.base_;\n }\n if (!state.finalized_) {\n const { callbacks_ } = state;\n if (callbacks_) {\n while (callbacks_.length > 0) {\n const callback = callbacks_.pop();\n callback(rootScope);\n }\n }\n generatePatchesAndFinalize(state, rootScope);\n }\n return state.copy_;\n}\nfunction maybeFreeze(scope, value, deep = false) {\n if (!scope.parent_ && scope.immer_.autoFreeze_ && scope.canAutoFreeze_) {\n freeze(value, deep);\n }\n}\nfunction markStateFinalized(state) {\n state.finalized_ = true;\n state.scope_.unfinalizedDrafts_--;\n}\nvar isSameScope = (state, rootScope) => state.scope_ === rootScope;\nvar EMPTY_LOCATIONS_RESULT = [];\nfunction updateDraftInParent(parent, draftValue, finalizedValue, originalKey) {\n const parentCopy = latest(parent);\n const parentType = parent.type_;\n if (originalKey !== void 0) {\n const currentValue = get(parentCopy, originalKey, parentType);\n if (currentValue === draftValue) {\n set(parentCopy, originalKey, finalizedValue, parentType);\n return;\n }\n }\n if (!parent.draftLocations_) {\n const draftLocations = parent.draftLocations_ = /* @__PURE__ */ new Map();\n each(parentCopy, (key, value) => {\n if (isDraft(value)) {\n const keys = draftLocations.get(value) || [];\n keys.push(key);\n draftLocations.set(value, keys);\n }\n });\n }\n const locations = parent.draftLocations_.get(draftValue) ?? EMPTY_LOCATIONS_RESULT;\n for (const location of locations) {\n set(parentCopy, location, finalizedValue, parentType);\n }\n}\nfunction registerChildFinalizationCallback(parent, child, key) {\n parent.callbacks_.push(function childCleanup(rootScope) {\n const state = child;\n if (!state || !isSameScope(state, rootScope)) {\n return;\n }\n rootScope.mapSetPlugin_?.fixSetContents(state);\n const finalizedValue = getFinalValue(state);\n updateDraftInParent(parent, state.draft_ ?? state, finalizedValue, key);\n generatePatchesAndFinalize(state, rootScope);\n });\n}\nfunction generatePatchesAndFinalize(state, rootScope) {\n const shouldFinalize = state.modified_ && !state.finalized_ && (state.type_ === 3 /* Set */ || state.type_ === 1 /* Array */ && state.allIndicesReassigned_ || (state.assigned_?.size ?? 0) > 0);\n if (shouldFinalize) {\n const { patchPlugin_ } = rootScope;\n if (patchPlugin_) {\n const basePath = patchPlugin_.getPath(state);\n if (basePath) {\n patchPlugin_.generatePatches_(state, basePath, rootScope);\n }\n }\n markStateFinalized(state);\n }\n}\nfunction handleCrossReference(target, key, value) {\n const { scope_ } = target;\n if (isDraft(value)) {\n const state = value[DRAFT_STATE];\n if (isSameScope(state, scope_)) {\n state.callbacks_.push(function crossReferenceCleanup() {\n prepareCopy(target);\n const finalizedValue = getFinalValue(state);\n updateDraftInParent(target, value, finalizedValue, key);\n });\n }\n } else if (isDraftable(value)) {\n target.callbacks_.push(function nestedDraftCleanup() {\n const targetCopy = latest(target);\n if (target.type_ === 3 /* Set */) {\n if (targetCopy.has(value)) {\n handleValue(value, scope_.handledSet_, scope_);\n }\n } else {\n if (get(targetCopy, key, target.type_) === value) {\n if (scope_.drafts_.length > 1 && (target.assigned_.get(key) ?? false) === true && target.copy_) {\n handleValue(\n get(target.copy_, key, target.type_),\n scope_.handledSet_,\n scope_\n );\n }\n }\n }\n });\n }\n}\nfunction handleValue(target, handledSet, rootScope) {\n if (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1) {\n return target;\n }\n if (isDraft(target) || handledSet.has(target) || !isDraftable(target) || isFrozen(target)) {\n return target;\n }\n handledSet.add(target);\n each(target, (key, value) => {\n if (isDraft(value)) {\n const state = value[DRAFT_STATE];\n if (isSameScope(state, rootScope)) {\n const updatedValue = getFinalValue(state);\n set(target, key, updatedValue, target.type_);\n markStateFinalized(state);\n }\n } else if (isDraftable(value)) {\n handleValue(value, handledSet, rootScope);\n }\n });\n return target;\n}\n\n// src/core/proxy.ts\nfunction createProxyProxy(base, parent) {\n const baseIsArray = isArray(base);\n const state = {\n type_: baseIsArray ? 1 /* Array */ : 0 /* Object */,\n // Track which produce call this is associated with.\n scope_: parent ? parent.scope_ : getCurrentScope(),\n // True for both shallow and deep changes.\n modified_: false,\n // Used during finalization.\n finalized_: false,\n // Track which properties have been assigned (true) or deleted (false).\n // actually instantiated in `prepareCopy()`\n assigned_: void 0,\n // The parent draft state.\n parent_: parent,\n // The base state.\n base_: base,\n // The base proxy.\n draft_: null,\n // set below\n // The base copy with any updated values.\n copy_: null,\n // Called by the `produce` function.\n revoke_: null,\n isManual_: false,\n // `callbacks` actually gets assigned in `createProxy`\n callbacks_: void 0\n };\n let target = state;\n let traps = objectTraps;\n if (baseIsArray) {\n target = [state];\n traps = arrayTraps;\n }\n const { revoke, proxy } = Proxy.revocable(target, traps);\n state.draft_ = proxy;\n state.revoke_ = revoke;\n return [proxy, state];\n}\nvar objectTraps = {\n get(state, prop) {\n if (prop === DRAFT_STATE)\n return state;\n let arrayPlugin = state.scope_.arrayMethodsPlugin_;\n const isArrayWithStringProp = state.type_ === 1 /* Array */ && typeof prop === \"string\";\n if (isArrayWithStringProp) {\n if (arrayPlugin?.isArrayOperationMethod(prop)) {\n return arrayPlugin.createMethodInterceptor(state, prop);\n }\n }\n const source = latest(state);\n if (!has(source, prop, state.type_)) {\n return readPropFromProto(state, source, prop);\n }\n const value = source[prop];\n if (state.finalized_ || !isDraftable(value)) {\n return value;\n }\n if (isArrayWithStringProp && state.operationMethod && arrayPlugin?.isMutatingArrayMethod(\n state.operationMethod\n ) && isArrayIndex(prop)) {\n return value;\n }\n if (value === peek(state.base_, prop)) {\n prepareCopy(state);\n const childKey = state.type_ === 1 /* Array */ ? +prop : prop;\n const childDraft = createProxy(state.scope_, value, state, childKey);\n return state.copy_[childKey] = childDraft;\n }\n return value;\n },\n has(state, prop) {\n return prop in latest(state);\n },\n ownKeys(state) {\n return Reflect.ownKeys(latest(state));\n },\n set(state, prop, value) {\n const desc = getDescriptorFromProto(latest(state), prop);\n if (desc?.set) {\n desc.set.call(state.draft_, value);\n return true;\n }\n if (!state.modified_) {\n const current2 = peek(latest(state), prop);\n const currentState = current2?.[DRAFT_STATE];\n if (currentState && currentState.base_ === value) {\n state.copy_[prop] = value;\n state.assigned_.set(prop, false);\n return true;\n }\n if (is(value, current2) && (value !== void 0 || has(state.base_, prop, state.type_)))\n return true;\n prepareCopy(state);\n markChanged(state);\n }\n if (state.copy_[prop] === value && // special case: handle new props with value 'undefined'\n (value !== void 0 || prop in state.copy_) || // special case: NaN\n Number.isNaN(value) && Number.isNaN(state.copy_[prop]))\n return true;\n state.copy_[prop] = value;\n state.assigned_.set(prop, true);\n handleCrossReference(state, prop, value);\n return true;\n },\n deleteProperty(state, prop) {\n prepareCopy(state);\n if (peek(state.base_, prop) !== void 0 || prop in state.base_) {\n state.assigned_.set(prop, false);\n markChanged(state);\n } else {\n state.assigned_.delete(prop);\n }\n if (state.copy_) {\n delete state.copy_[prop];\n }\n return true;\n },\n // Note: We never coerce `desc.value` into an Immer draft, because we can't make\n // the same guarantee in ES5 mode.\n getOwnPropertyDescriptor(state, prop) {\n const owner = latest(state);\n const desc = Reflect.getOwnPropertyDescriptor(owner, prop);\n if (!desc)\n return desc;\n return {\n [WRITABLE]: true,\n [CONFIGURABLE]: state.type_ !== 1 /* Array */ || prop !== \"length\",\n [ENUMERABLE]: desc[ENUMERABLE],\n [VALUE]: owner[prop]\n };\n },\n defineProperty() {\n die(11);\n },\n getPrototypeOf(state) {\n return getPrototypeOf(state.base_);\n },\n setPrototypeOf() {\n die(12);\n }\n};\nvar arrayTraps = {};\nfor (let key in objectTraps) {\n let fn = objectTraps[key];\n arrayTraps[key] = function() {\n const args = arguments;\n args[0] = args[0][0];\n return fn.apply(this, args);\n };\n}\narrayTraps.deleteProperty = function(state, prop) {\n if (process.env.NODE_ENV !== \"production\" && isNaN(parseInt(prop)))\n die(13);\n return arrayTraps.set.call(this, state, prop, void 0);\n};\narrayTraps.set = function(state, prop, value) {\n if (process.env.NODE_ENV !== \"production\" && prop !== \"length\" && isNaN(parseInt(prop)))\n die(14);\n return objectTraps.set.call(this, state[0], prop, value, state[0]);\n};\nfunction peek(draft, prop) {\n const state = draft[DRAFT_STATE];\n const source = state ? latest(state) : draft;\n return source[prop];\n}\nfunction readPropFromProto(state, source, prop) {\n const desc = getDescriptorFromProto(source, prop);\n return desc ? VALUE in desc ? desc[VALUE] : (\n // This is a very special case, if the prop is a getter defined by the\n // prototype, we should invoke it with the draft as context!\n desc.get?.call(state.draft_)\n ) : void 0;\n}\nfunction getDescriptorFromProto(source, prop) {\n if (!(prop in source))\n return void 0;\n let proto = getPrototypeOf(source);\n while (proto) {\n const desc = Object.getOwnPropertyDescriptor(proto, prop);\n if (desc)\n return desc;\n proto = getPrototypeOf(proto);\n }\n return void 0;\n}\nfunction markChanged(state) {\n if (!state.modified_) {\n state.modified_ = true;\n if (state.parent_) {\n markChanged(state.parent_);\n }\n }\n}\nfunction prepareCopy(state) {\n if (!state.copy_) {\n state.assigned_ = /* @__PURE__ */ new Map();\n state.copy_ = shallowCopy(\n state.base_,\n state.scope_.immer_.useStrictShallowCopy_\n );\n }\n}\n\n// src/core/immerClass.ts\nvar Immer2 = class {\n constructor(config) {\n this.autoFreeze_ = true;\n this.useStrictShallowCopy_ = false;\n this.useStrictIteration_ = false;\n /**\n * The `produce` function takes a value and a \"recipe function\" (whose\n * return value often depends on the base state). The recipe function is\n * free to mutate its first argument however it wants. All mutations are\n * only ever applied to a __copy__ of the base state.\n *\n * Pass only a function to create a \"curried producer\" which relieves you\n * from passing the recipe function every time.\n *\n * Only plain objects and arrays are made mutable. All other objects are\n * considered uncopyable.\n *\n * Note: This function is __bound__ to its `Immer` instance.\n *\n * @param {any} base - the initial state\n * @param {Function} recipe - function that receives a proxy of the base state as first argument and which can be freely modified\n * @param {Function} patchListener - optional function that will be called with all the patches produced here\n * @returns {any} a new state, or the initial state if nothing was modified\n */\n this.produce = (base, recipe, patchListener) => {\n if (isFunction(base) && !isFunction(recipe)) {\n const defaultBase = recipe;\n recipe = base;\n const self = this;\n return function curriedProduce(base2 = defaultBase, ...args) {\n return self.produce(base2, (draft) => recipe.call(this, draft, ...args));\n };\n }\n if (!isFunction(recipe))\n die(6);\n if (patchListener !== void 0 && !isFunction(patchListener))\n die(7);\n let result;\n if (isDraftable(base)) {\n const scope = enterScope(this);\n const proxy = createProxy(scope, base, void 0);\n let hasError = true;\n try {\n result = recipe(proxy);\n hasError = false;\n } finally {\n if (hasError)\n revokeScope(scope);\n else\n leaveScope(scope);\n }\n usePatchesInScope(scope, patchListener);\n return processResult(result, scope);\n } else if (!base || !isObjectish(base)) {\n result = recipe(base);\n if (result === void 0)\n result = base;\n if (result === NOTHING)\n result = void 0;\n if (this.autoFreeze_)\n freeze(result, true);\n if (patchListener) {\n const p = [];\n const ip = [];\n getPlugin(PluginPatches).generateReplacementPatches_(base, result, {\n patches_: p,\n inversePatches_: ip\n });\n patchListener(p, ip);\n }\n return result;\n } else\n die(1, base);\n };\n this.produceWithPatches = (base, recipe) => {\n if (isFunction(base)) {\n return (state, ...args) => this.produceWithPatches(state, (draft) => base(draft, ...args));\n }\n let patches, inversePatches;\n const result = this.produce(base, recipe, (p, ip) => {\n patches = p;\n inversePatches = ip;\n });\n return [result, patches, inversePatches];\n };\n if (isBoolean(config?.autoFreeze))\n this.setAutoFreeze(config.autoFreeze);\n if (isBoolean(config?.useStrictShallowCopy))\n this.setUseStrictShallowCopy(config.useStrictShallowCopy);\n if (isBoolean(config?.useStrictIteration))\n this.setUseStrictIteration(config.useStrictIteration);\n }\n createDraft(base) {\n if (!isDraftable(base))\n die(8);\n if (isDraft(base))\n base = current(base);\n const scope = enterScope(this);\n const proxy = createProxy(scope, base, void 0);\n proxy[DRAFT_STATE].isManual_ = true;\n leaveScope(scope);\n return proxy;\n }\n finishDraft(draft, patchListener) {\n const state = draft && draft[DRAFT_STATE];\n if (!state || !state.isManual_)\n die(9);\n const { scope_: scope } = state;\n usePatchesInScope(scope, patchListener);\n return processResult(void 0, scope);\n }\n /**\n * Pass true to automatically freeze all copies created by Immer.\n *\n * By default, auto-freezing is enabled.\n */\n setAutoFreeze(value) {\n this.autoFreeze_ = value;\n }\n /**\n * Pass true to enable strict shallow copy.\n *\n * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n */\n setUseStrictShallowCopy(value) {\n this.useStrictShallowCopy_ = value;\n }\n /**\n * Pass false to use faster iteration that skips non-enumerable properties\n * but still handles symbols for compatibility.\n *\n * By default, strict iteration is enabled (includes all own properties).\n */\n setUseStrictIteration(value) {\n this.useStrictIteration_ = value;\n }\n shouldUseStrictIteration() {\n return this.useStrictIteration_;\n }\n applyPatches(base, patches) {\n let i;\n for (i = patches.length - 1; i >= 0; i--) {\n const patch = patches[i];\n if (patch.path.length === 0 && patch.op === \"replace\") {\n base = patch.value;\n break;\n }\n }\n if (i > -1) {\n patches = patches.slice(i + 1);\n }\n const applyPatchesImpl = getPlugin(PluginPatches).applyPatches_;\n if (isDraft(base)) {\n return applyPatchesImpl(base, patches);\n }\n return this.produce(\n base,\n (draft) => applyPatchesImpl(draft, patches)\n );\n }\n};\nfunction createProxy(rootScope, value, parent, key) {\n const [draft, state] = isMap(value) ? getPlugin(PluginMapSet).proxyMap_(value, parent) : isSet(value) ? getPlugin(PluginMapSet).proxySet_(value, parent) : createProxyProxy(value, parent);\n const scope = parent?.scope_ ?? getCurrentScope();\n scope.drafts_.push(draft);\n state.callbacks_ = parent?.callbacks_ ?? [];\n state.key_ = key;\n if (parent && key !== void 0) {\n registerChildFinalizationCallback(parent, state, key);\n } else {\n state.callbacks_.push(function rootDraftCleanup(rootScope2) {\n rootScope2.mapSetPlugin_?.fixSetContents(state);\n const { patchPlugin_ } = rootScope2;\n if (state.modified_ && patchPlugin_) {\n patchPlugin_.generatePatches_(state, [], rootScope2);\n }\n });\n }\n return draft;\n}\n\n// src/core/current.ts\nfunction current(value) {\n if (!isDraft(value))\n die(10, value);\n return currentImpl(value);\n}\nfunction currentImpl(value) {\n if (!isDraftable(value) || isFrozen(value))\n return value;\n const state = value[DRAFT_STATE];\n let copy;\n let strict = true;\n if (state) {\n if (!state.modified_)\n return state.base_;\n state.finalized_ = true;\n copy = shallowCopy(value, state.scope_.immer_.useStrictShallowCopy_);\n strict = state.scope_.immer_.shouldUseStrictIteration();\n } else {\n copy = shallowCopy(value, true);\n }\n each(\n copy,\n (key, childValue) => {\n set(copy, key, currentImpl(childValue));\n },\n strict\n );\n if (state) {\n state.finalized_ = false;\n }\n return copy;\n}\n\n// src/plugins/patches.ts\nfunction enablePatches() {\n const errorOffset = 16;\n if (process.env.NODE_ENV !== \"production\") {\n errors.push(\n 'Sets cannot have \"replace\" patches.',\n function(op) {\n return \"Unsupported patch operation: \" + op;\n },\n function(path) {\n return \"Cannot apply patch, path doesn't resolve: \" + path;\n },\n \"Patching reserved attributes like __proto__, prototype and constructor is not allowed\"\n );\n }\n function getPath(state, path = []) {\n if (state.key_ !== void 0) {\n const parentCopy = state.parent_.copy_ ?? state.parent_.base_;\n const proxyDraft = getProxyDraft(get(parentCopy, state.key_));\n const valueAtKey = get(parentCopy, state.key_);\n if (valueAtKey === void 0) {\n return null;\n }\n if (valueAtKey !== state.draft_ && valueAtKey !== state.base_ && valueAtKey !== state.copy_) {\n return null;\n }\n if (proxyDraft != null && proxyDraft.base_ !== state.base_) {\n return null;\n }\n const isSet2 = state.parent_.type_ === 3 /* Set */;\n let key;\n if (isSet2) {\n const setParent = state.parent_;\n key = Array.from(setParent.drafts_.keys()).indexOf(state.key_);\n } else {\n key = state.key_;\n }\n if (!(isSet2 && parentCopy.size > key || has(parentCopy, key))) {\n return null;\n }\n path.push(key);\n }\n if (state.parent_) {\n return getPath(state.parent_, path);\n }\n path.reverse();\n try {\n resolvePath(state.copy_, path);\n } catch (e) {\n return null;\n }\n return path;\n }\n function resolvePath(base, path) {\n let current2 = base;\n for (let i = 0; i < path.length - 1; i++) {\n const key = path[i];\n current2 = get(current2, key);\n if (!isObjectish(current2) || current2 === null) {\n throw new Error(`Cannot resolve path at '${path.join(\"/\")}'`);\n }\n }\n return current2;\n }\n const REPLACE = \"replace\";\n const ADD = \"add\";\n const REMOVE = \"remove\";\n function generatePatches_(state, basePath, scope) {\n if (state.scope_.processedForPatches_.has(state)) {\n return;\n }\n state.scope_.processedForPatches_.add(state);\n const { patches_, inversePatches_ } = scope;\n switch (state.type_) {\n case 0 /* Object */:\n case 2 /* Map */:\n return generatePatchesFromAssigned(\n state,\n basePath,\n patches_,\n inversePatches_\n );\n case 1 /* Array */:\n return generateArrayPatches(\n state,\n basePath,\n patches_,\n inversePatches_\n );\n case 3 /* Set */:\n return generateSetPatches(\n state,\n basePath,\n patches_,\n inversePatches_\n );\n }\n }\n function generateArrayPatches(state, basePath, patches, inversePatches) {\n let { base_, assigned_ } = state;\n let copy_ = state.copy_;\n if (copy_.length < base_.length) {\n ;\n [base_, copy_] = [copy_, base_];\n [patches, inversePatches] = [inversePatches, patches];\n }\n const allReassigned = state.allIndicesReassigned_ === true;\n for (let i = 0; i < base_.length; i++) {\n const copiedItem = copy_[i];\n const baseItem = base_[i];\n const isAssigned = allReassigned || assigned_?.get(i.toString());\n if (isAssigned && copiedItem !== baseItem) {\n const childState = copiedItem?.[DRAFT_STATE];\n if (childState && childState.modified_) {\n continue;\n }\n const path = basePath.concat([i]);\n patches.push({\n op: REPLACE,\n path,\n // Need to maybe clone it, as it can in fact be the original value\n // due to the base/copy inversion at the start of this function\n value: clonePatchValueIfNeeded(copiedItem)\n });\n inversePatches.push({\n op: REPLACE,\n path,\n value: clonePatchValueIfNeeded(baseItem)\n });\n }\n }\n for (let i = base_.length; i < copy_.length; i++) {\n const path = basePath.concat([i]);\n patches.push({\n op: ADD,\n path,\n // Need to maybe clone it, as it can in fact be the original value\n // due to the base/copy inversion at the start of this function\n value: clonePatchValueIfNeeded(copy_[i])\n });\n }\n for (let i = copy_.length - 1; base_.length <= i; --i) {\n const path = basePath.concat([i]);\n inversePatches.push({\n op: REMOVE,\n path\n });\n }\n }\n function generatePatchesFromAssigned(state, basePath, patches, inversePatches) {\n const { base_, copy_, type_ } = state;\n each(state.assigned_, (key, assignedValue) => {\n const origValue = get(base_, key, type_);\n const value = get(copy_, key, type_);\n const op = !assignedValue ? REMOVE : has(base_, key) ? REPLACE : ADD;\n if (origValue === value && op === REPLACE)\n return;\n const path = basePath.concat(key);\n patches.push(\n op === REMOVE ? { op, path } : { op, path, value: clonePatchValueIfNeeded(value) }\n );\n inversePatches.push(\n op === ADD ? { op: REMOVE, path } : op === REMOVE ? { op: ADD, path, value: clonePatchValueIfNeeded(origValue) } : { op: REPLACE, path, value: clonePatchValueIfNeeded(origValue) }\n );\n });\n }\n function generateSetPatches(state, basePath, patches, inversePatches) {\n let { base_, copy_ } = state;\n let i = 0;\n base_.forEach((value) => {\n if (!copy_.has(value)) {\n const path = basePath.concat([i]);\n patches.push({\n op: REMOVE,\n path,\n value\n });\n inversePatches.unshift({\n op: ADD,\n path,\n value\n });\n }\n i++;\n });\n i = 0;\n copy_.forEach((value) => {\n if (!base_.has(value)) {\n const path = basePath.concat([i]);\n patches.push({\n op: ADD,\n path,\n value\n });\n inversePatches.unshift({\n op: REMOVE,\n path,\n value\n });\n }\n i++;\n });\n }\n function generateReplacementPatches_(baseValue, replacement, scope) {\n const { patches_, inversePatches_ } = scope;\n patches_.push({\n op: REPLACE,\n path: [],\n value: replacement === NOTHING ? void 0 : replacement\n });\n inversePatches_.push({\n op: REPLACE,\n path: [],\n value: baseValue\n });\n }\n function applyPatches_(draft, patches) {\n patches.forEach((patch) => {\n const { path, op } = patch;\n let base = draft;\n for (let i = 0; i < path.length - 1; i++) {\n const parentType = getArchtype(base);\n let p = path[i];\n if (typeof p !== \"string\" && typeof p !== \"number\") {\n p = \"\" + p;\n }\n if ((parentType === 0 /* Object */ || parentType === 1 /* Array */) && (p === \"__proto__\" || p === CONSTRUCTOR))\n die(errorOffset + 3);\n if (isFunction(base) && p === PROTOTYPE)\n die(errorOffset + 3);\n base = get(base, p);\n if (!isObjectish(base))\n die(errorOffset + 2, path.join(\"/\"));\n }\n const type = getArchtype(base);\n const value = deepClonePatchValue(patch.value);\n const key = path[path.length - 1];\n switch (op) {\n case REPLACE:\n switch (type) {\n case 2 /* Map */:\n return base.set(key, value);\n case 3 /* Set */:\n die(errorOffset);\n default:\n return base[key] = value;\n }\n case ADD:\n switch (type) {\n case 1 /* Array */:\n return key === \"-\" ? base.push(value) : base.splice(key, 0, value);\n case 2 /* Map */:\n return base.set(key, value);\n case 3 /* Set */:\n return base.add(value);\n default:\n return base[key] = value;\n }\n case REMOVE:\n switch (type) {\n case 1 /* Array */:\n return base.splice(key, 1);\n case 2 /* Map */:\n return base.delete(key);\n case 3 /* Set */:\n return base.delete(patch.value);\n default:\n return delete base[key];\n }\n default:\n die(errorOffset + 1, op);\n }\n });\n return draft;\n }\n function deepClonePatchValue(obj) {\n if (!isDraftable(obj))\n return obj;\n if (isArray(obj))\n return obj.map(deepClonePatchValue);\n if (isMap(obj))\n return new Map(\n Array.from(obj.entries()).map(([k, v]) => [k, deepClonePatchValue(v)])\n );\n if (isSet(obj))\n return new Set(Array.from(obj).map(deepClonePatchValue));\n const cloned = Object.create(getPrototypeOf(obj));\n for (const key in obj)\n cloned[key] = deepClonePatchValue(obj[key]);\n if (has(obj, DRAFTABLE))\n cloned[DRAFTABLE] = obj[DRAFTABLE];\n return cloned;\n }\n function clonePatchValueIfNeeded(obj) {\n if (isDraft(obj)) {\n return deepClonePatchValue(obj);\n } else\n return obj;\n }\n loadPlugin(PluginPatches, {\n applyPatches_,\n generatePatches_,\n generateReplacementPatches_,\n getPath\n });\n}\n\n// src/plugins/mapset.ts\nfunction enableMapSet() {\n class DraftMap extends Map {\n constructor(target, parent) {\n super();\n this[DRAFT_STATE] = {\n type_: 2 /* Map */,\n parent_: parent,\n scope_: parent ? parent.scope_ : getCurrentScope(),\n modified_: false,\n finalized_: false,\n copy_: void 0,\n assigned_: void 0,\n base_: target,\n draft_: this,\n isManual_: false,\n revoked_: false,\n callbacks_: []\n };\n }\n get size() {\n return latest(this[DRAFT_STATE]).size;\n }\n has(key) {\n return latest(this[DRAFT_STATE]).has(key);\n }\n set(key, value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!latest(state).has(key) || latest(state).get(key) !== value) {\n prepareMapCopy(state);\n markChanged(state);\n state.assigned_.set(key, true);\n state.copy_.set(key, value);\n state.assigned_.set(key, true);\n handleCrossReference(state, key, value);\n }\n return this;\n }\n delete(key) {\n if (!this.has(key)) {\n return false;\n }\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareMapCopy(state);\n markChanged(state);\n if (state.base_.has(key)) {\n state.assigned_.set(key, false);\n } else {\n state.assigned_.delete(key);\n }\n state.copy_.delete(key);\n return true;\n }\n clear() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (latest(state).size) {\n prepareMapCopy(state);\n markChanged(state);\n state.assigned_ = /* @__PURE__ */ new Map();\n each(state.base_, (key) => {\n state.assigned_.set(key, false);\n });\n state.copy_.clear();\n }\n }\n forEach(cb, thisArg) {\n const state = this[DRAFT_STATE];\n latest(state).forEach((_value, key, _map) => {\n cb.call(thisArg, this.get(key), key, this);\n });\n }\n get(key) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n const value = latest(state).get(key);\n if (state.finalized_ || !isDraftable(value)) {\n return value;\n }\n if (value !== state.base_.get(key)) {\n return value;\n }\n const draft = createProxy(state.scope_, value, state, key);\n prepareMapCopy(state);\n state.copy_.set(key, draft);\n return draft;\n }\n keys() {\n return latest(this[DRAFT_STATE]).keys();\n }\n values() {\n const iterator = this.keys();\n return {\n [Symbol.iterator]: () => this.values(),\n next: () => {\n const r = iterator.next();\n if (r.done)\n return r;\n const value = this.get(r.value);\n return {\n done: false,\n value\n };\n }\n };\n }\n entries() {\n const iterator = this.keys();\n return {\n [Symbol.iterator]: () => this.entries(),\n next: () => {\n const r = iterator.next();\n if (r.done)\n return r;\n const value = this.get(r.value);\n return {\n done: false,\n value: [r.value, value]\n };\n }\n };\n }\n [(DRAFT_STATE, Symbol.iterator)]() {\n return this.entries();\n }\n }\n function proxyMap_(target, parent) {\n const map = new DraftMap(target, parent);\n return [map, map[DRAFT_STATE]];\n }\n function prepareMapCopy(state) {\n if (!state.copy_) {\n state.assigned_ = /* @__PURE__ */ new Map();\n state.copy_ = new Map(state.base_);\n }\n }\n class DraftSet extends Set {\n constructor(target, parent) {\n super();\n this[DRAFT_STATE] = {\n type_: 3 /* Set */,\n parent_: parent,\n scope_: parent ? parent.scope_ : getCurrentScope(),\n modified_: false,\n finalized_: false,\n copy_: void 0,\n base_: target,\n draft_: this,\n drafts_: /* @__PURE__ */ new Map(),\n revoked_: false,\n isManual_: false,\n assigned_: void 0,\n callbacks_: []\n };\n }\n get size() {\n return latest(this[DRAFT_STATE]).size;\n }\n has(value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!state.copy_) {\n return state.base_.has(value);\n }\n if (state.copy_.has(value))\n return true;\n if (state.drafts_.has(value) && state.copy_.has(state.drafts_.get(value)))\n return true;\n return false;\n }\n add(value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!this.has(value)) {\n prepareSetCopy(state);\n markChanged(state);\n state.copy_.add(value);\n handleCrossReference(state, value, value);\n }\n return this;\n }\n delete(value) {\n if (!this.has(value)) {\n return false;\n }\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n markChanged(state);\n return state.copy_.delete(value) || (state.drafts_.has(value) ? state.copy_.delete(state.drafts_.get(value)) : (\n /* istanbul ignore next */\n false\n ));\n }\n clear() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (latest(state).size) {\n prepareSetCopy(state);\n markChanged(state);\n state.copy_.clear();\n }\n }\n values() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n return state.copy_.values();\n }\n entries() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n return state.copy_.entries();\n }\n keys() {\n return this.values();\n }\n [(DRAFT_STATE, Symbol.iterator)]() {\n return this.values();\n }\n forEach(cb, thisArg) {\n const iterator = this.values();\n let result = iterator.next();\n while (!result.done) {\n cb.call(thisArg, result.value, result.value, this);\n result = iterator.next();\n }\n }\n }\n function proxySet_(target, parent) {\n const set2 = new DraftSet(target, parent);\n return [set2, set2[DRAFT_STATE]];\n }\n function prepareSetCopy(state) {\n if (!state.copy_) {\n state.copy_ = /* @__PURE__ */ new Set();\n state.base_.forEach((value) => {\n if (isDraftable(value)) {\n const draft = createProxy(state.scope_, value, state, value);\n state.drafts_.set(value, draft);\n state.copy_.add(draft);\n } else {\n state.copy_.add(value);\n }\n });\n }\n }\n function assertUnrevoked(state) {\n if (state.revoked_)\n die(3, JSON.stringify(latest(state)));\n }\n function fixSetContents(target) {\n if (target.type_ === 3 /* Set */ && target.copy_) {\n const copy = new Set(target.copy_);\n target.copy_.clear();\n copy.forEach((value) => {\n target.copy_.add(getValue(value));\n });\n }\n }\n loadPlugin(PluginMapSet, { proxyMap_, proxySet_, fixSetContents });\n}\n\n// src/plugins/arrayMethods.ts\nfunction enableArrayMethods() {\n const SHIFTING_METHODS = /* @__PURE__ */ new Set([\"shift\", \"unshift\"]);\n const QUEUE_METHODS = /* @__PURE__ */ new Set([\"push\", \"pop\"]);\n const RESULT_RETURNING_METHODS = /* @__PURE__ */ new Set([\n ...QUEUE_METHODS,\n ...SHIFTING_METHODS\n ]);\n const REORDERING_METHODS = /* @__PURE__ */ new Set([\"reverse\", \"sort\"]);\n const MUTATING_METHODS = /* @__PURE__ */ new Set([\n ...RESULT_RETURNING_METHODS,\n ...REORDERING_METHODS,\n \"splice\"\n ]);\n const FIND_METHODS = /* @__PURE__ */ new Set([\"find\", \"findLast\"]);\n const NON_MUTATING_METHODS = /* @__PURE__ */ new Set([\n \"filter\",\n \"slice\",\n \"concat\",\n \"flat\",\n ...FIND_METHODS,\n \"findIndex\",\n \"findLastIndex\",\n \"some\",\n \"every\",\n \"indexOf\",\n \"lastIndexOf\",\n \"includes\",\n \"join\",\n \"toString\",\n \"toLocaleString\"\n ]);\n function isMutatingArrayMethod(method) {\n return MUTATING_METHODS.has(method);\n }\n function isNonMutatingArrayMethod(method) {\n return NON_MUTATING_METHODS.has(method);\n }\n function isArrayOperationMethod(method) {\n return isMutatingArrayMethod(method) || isNonMutatingArrayMethod(method);\n }\n function enterOperation(state, method) {\n state.operationMethod = method;\n }\n function exitOperation(state) {\n state.operationMethod = void 0;\n }\n function executeArrayMethod(state, operation, markLength = true) {\n prepareCopy(state);\n const result = operation();\n markChanged(state);\n if (markLength)\n state.assigned_.set(\"length\", true);\n return result;\n }\n function markAllIndicesReassigned(state) {\n state.allIndicesReassigned_ = true;\n }\n function normalizeSliceIndex(index, length) {\n if (index < 0) {\n return Math.max(length + index, 0);\n }\n return Math.min(index, length);\n }\n function handleInsertedValues(state, startIndex, values) {\n for (let i = 0; i < values.length; i++) {\n const index = startIndex + i;\n state.assigned_.set(index, true);\n handleCrossReference(state, index, values[i]);\n }\n }\n function handleSimpleOperation(state, method, args) {\n return executeArrayMethod(state, () => {\n const lengthBefore = state.copy_.length;\n const result = state.copy_[method](...args);\n if (SHIFTING_METHODS.has(method)) {\n markAllIndicesReassigned(state);\n }\n if (method === \"push\" && args.length > 0) {\n handleInsertedValues(state, lengthBefore, args);\n } else if (method === \"unshift\" && args.length > 0) {\n handleInsertedValues(state, 0, args);\n }\n return RESULT_RETURNING_METHODS.has(method) ? result : state.draft_;\n });\n }\n function handleReorderingOperation(state, method, args) {\n return executeArrayMethod(\n state,\n () => {\n ;\n state.copy_[method](...args);\n markAllIndicesReassigned(state);\n return state.draft_;\n },\n false\n );\n }\n function createMethodInterceptor(state, originalMethod) {\n return function interceptedMethod(...args) {\n const method = originalMethod;\n enterOperation(state, method);\n try {\n if (isMutatingArrayMethod(method)) {\n if (RESULT_RETURNING_METHODS.has(method)) {\n return handleSimpleOperation(state, method, args);\n }\n if (REORDERING_METHODS.has(method)) {\n return handleReorderingOperation(state, method, args);\n }\n if (method === \"splice\") {\n const res = executeArrayMethod(\n state,\n () => state.copy_.splice(...args)\n );\n markAllIndicesReassigned(state);\n if (args.length > 2) {\n const startIndex = normalizeSliceIndex(\n args[0] ?? 0,\n state.copy_.length\n );\n handleInsertedValues(state, startIndex, args.slice(2));\n }\n return res;\n }\n } else {\n return handleNonMutatingOperation(state, method, args);\n }\n } finally {\n exitOperation(state);\n }\n };\n }\n function handleNonMutatingOperation(state, method, args) {\n const source = latest(state);\n if (method === \"filter\") {\n const predicate = args[0];\n const result = [];\n for (let i = 0; i < source.length; i++) {\n if (predicate(source[i], i, source)) {\n result.push(state.draft_[i]);\n }\n }\n return result;\n }\n if (FIND_METHODS.has(method)) {\n const predicate = args[0];\n const isForward = method === \"find\";\n const step = isForward ? 1 : -1;\n const start = isForward ? 0 : source.length - 1;\n for (let i = start; i >= 0 && i < source.length; i += step) {\n if (predicate(source[i], i, source)) {\n return state.draft_[i];\n }\n }\n return void 0;\n }\n if (method === \"slice\") {\n const rawStart = args[0] ?? 0;\n const rawEnd = args[1] ?? source.length;\n const start = normalizeSliceIndex(rawStart, source.length);\n const end = normalizeSliceIndex(rawEnd, source.length);\n const result = [];\n for (let i = start; i < end; i++) {\n result.push(state.draft_[i]);\n }\n return result;\n }\n return source[method](...args);\n }\n loadPlugin(PluginArrayMethods, {\n createMethodInterceptor,\n isArrayOperationMethod,\n isMutatingArrayMethod\n });\n}\n\n// src/immer.ts\nvar immer = new Immer2();\nvar produce = immer.produce;\nvar produceWithPatches = /* @__PURE__ */ immer.produceWithPatches.bind(\n immer\n);\nvar setAutoFreeze = /* @__PURE__ */ immer.setAutoFreeze.bind(immer);\nvar setUseStrictShallowCopy = /* @__PURE__ */ immer.setUseStrictShallowCopy.bind(\n immer\n);\nvar setUseStrictIteration = /* @__PURE__ */ immer.setUseStrictIteration.bind(\n immer\n);\nvar applyPatches = /* @__PURE__ */ immer.applyPatches.bind(immer);\nvar createDraft = /* @__PURE__ */ immer.createDraft.bind(immer);\nvar finishDraft = /* @__PURE__ */ immer.finishDraft.bind(immer);\nvar castDraft = (value) => value;\nvar castImmutable = (value) => value;\nexport {\n Immer2 as Immer,\n applyPatches,\n castDraft,\n castImmutable,\n createDraft,\n current,\n enableArrayMethods,\n enableMapSet,\n enablePatches,\n finishDraft,\n freeze,\n DRAFTABLE as immerable,\n isDraft,\n isDraftable,\n NOTHING as nothing,\n original,\n produce,\n produceWithPatches,\n setAutoFreeze,\n setUseStrictIteration,\n setUseStrictShallowCopy\n};\n//# sourceMappingURL=immer.mjs.map","import { produce } from 'immer';\n\nconst immerImpl = (initializer) => (set, get, store) => {\n store.setState = (updater, replace, ...args) => {\n const nextState = typeof updater === \"function\" ? produce(updater) : updater;\n return set(nextState, replace, ...args);\n };\n return initializer(store.setState, get, store);\n};\nconst immer = immerImpl;\n\nexport { immer };\n","import { create } from 'zustand';\nimport { immer } from 'zustand/middleware/immer';\nimport { nanoid } from 'nanoid';\nimport type {\n DataTableState,\n FilterState,\n SearchRequest,\n QuickFilter,\n UrlState,\n} from '../types';\nimport { DEFAULTS } from '../constants';\nimport { convertFiltersToSearchCriteria } from '../utils/filter-utils';\n\n// ============================================================================\n// STORE ACTIONS INTERFACE\n// ============================================================================\n\ninterface DataTableActions {\n // Search Actions\n setGeneralSearch: (value: string) => void;\n\n // Filter Actions\n addFilter: (filter: Omit<FilterState, 'id' | 'enabled'>) => void;\n updateFilter: (id: string, updates: Partial<FilterState>) => void;\n removeFilter: (id: string) => void;\n toggleFilter: (id: string) => void;\n clearFilters: () => void;\n applyQuickFilter: (quickFilter: QuickFilter) => void;\n setFilters: (filters: FilterState[]) => void;\n\n // Pagination Actions\n setPage: (page: number) => void;\n setSize: (size: number) => void;\n\n // Sorting Actions\n setSort: (sortBy: string, sortDirection: 'ASC' | 'DESC') => void;\n toggleSort: (field: string) => void;\n\n // Selection Actions\n setRowSelection: (selection: Record<string, boolean>) => void;\n toggleRowSelection: (rowId: string) => void;\n selectAll: (rowIds: string[]) => void;\n clearSelection: () => void;\n\n // Utility Actions\n reset: () => void;\n hydrateFromUrl: (urlState: UrlState) => void;\n\n // Computed Getters\n getSearchRequest: () => SearchRequest;\n getActiveFilterCount: () => number;\n getSelectedRowIds: () => string[];\n}\n\n// ============================================================================\n// COMBINED STORE TYPE\n// ============================================================================\n\nexport type DataTableStore = DataTableState & DataTableActions;\n\n// ============================================================================\n// STORE OPTIONS\n// ============================================================================\n\nexport interface CreateDataTableStoreOptions {\n defaultSize?: number;\n defaultSortBy?: string;\n defaultSortDirection?: 'ASC' | 'DESC';\n}\n\n// ============================================================================\n// STORE FACTORY\n// ============================================================================\n\nexport function createDataTableStore(options: CreateDataTableStoreOptions = {}) {\n const initialState: DataTableState = {\n generalSearch: '',\n filters: [],\n page: DEFAULTS.PAGE,\n size: options.defaultSize ?? DEFAULTS.PAGE_SIZE,\n sortBy: options.defaultSortBy ?? DEFAULTS.SORT_BY,\n sortDirection: options.defaultSortDirection ?? DEFAULTS.SORT_DIRECTION,\n rowSelection: {},\n };\n\n return create<DataTableStore>()(\n immer((set, get) => ({\n ...initialState,\n\n // ========== Search Actions ==========\n setGeneralSearch: (value) =>\n set((state) => {\n state.generalSearch = value;\n state.page = 0; // Reset to first page on search\n }),\n\n // ========== Filter Actions ==========\n addFilter: (filter) =>\n set((state) => {\n state.filters.push({\n ...filter,\n id: nanoid(),\n enabled: true,\n });\n state.page = 0;\n }),\n\n updateFilter: (id, updates) =>\n set((state) => {\n const filter = state.filters.find((f) => f.id === id);\n if (filter) {\n if (updates.field !== undefined) filter.field = updates.field;\n if (updates.operator !== undefined) filter.operator = updates.operator;\n if (updates.value !== undefined) filter.value = updates.value;\n if (updates.values !== undefined) filter.values = updates.values;\n if (updates.enabled !== undefined) filter.enabled = updates.enabled;\n state.page = 0;\n }\n }),\n\n removeFilter: (id) =>\n set((state) => {\n state.filters = state.filters.filter((f) => f.id !== id);\n state.page = 0;\n }),\n\n toggleFilter: (id) =>\n set((state) => {\n const filter = state.filters.find((f) => f.id === id);\n if (filter) {\n filter.enabled = !filter.enabled;\n state.page = 0;\n }\n }),\n\n clearFilters: () =>\n set((state) => {\n state.filters = [];\n state.page = 0;\n }),\n\n applyQuickFilter: (quickFilter) =>\n set((state) => {\n state.filters = quickFilter.filters.map((f) => ({\n ...f,\n id: nanoid(),\n enabled: true,\n }));\n state.page = 0;\n }),\n\n setFilters: (filters) =>\n set((state) => {\n state.filters = filters;\n state.page = 0;\n }),\n\n // ========== Pagination Actions ==========\n setPage: (page) =>\n set((state) => {\n state.page = page;\n }),\n\n setSize: (size) =>\n set((state) => {\n state.size = size;\n state.page = 0; // Reset to first page on size change\n }),\n\n // ========== Sorting Actions ==========\n setSort: (sortBy, sortDirection) =>\n set((state) => {\n state.sortBy = sortBy;\n state.sortDirection = sortDirection;\n state.page = 0;\n }),\n\n toggleSort: (field) =>\n set((state) => {\n if (state.sortBy === field) {\n state.sortDirection = state.sortDirection === 'ASC' ? 'DESC' : 'ASC';\n } else {\n state.sortBy = field;\n state.sortDirection = 'ASC';\n }\n state.page = 0;\n }),\n\n // ========== Selection Actions ==========\n setRowSelection: (selection) =>\n set((state) => {\n state.rowSelection = selection;\n }),\n\n toggleRowSelection: (rowId) =>\n set((state) => {\n if (state.rowSelection[rowId]) {\n delete state.rowSelection[rowId];\n } else {\n state.rowSelection[rowId] = true;\n }\n }),\n\n selectAll: (rowIds) =>\n set((state) => {\n state.rowSelection = Object.fromEntries(rowIds.map((id) => [id, true]));\n }),\n\n clearSelection: () =>\n set((state) => {\n state.rowSelection = {};\n }),\n\n // ========== Utility Actions ==========\n reset: () => set(() => initialState),\n\n hydrateFromUrl: (urlState) =>\n set((state) => {\n if (urlState.q !== undefined) state.generalSearch = urlState.q;\n if (urlState.p !== undefined) state.page = urlState.p;\n if (urlState.ps !== undefined) state.size = urlState.ps;\n if (urlState.s !== undefined) state.sortBy = urlState.s;\n if (urlState.sd !== undefined) state.sortDirection = urlState.sd;\n if (urlState.f !== undefined) state.filters = urlState.f;\n }),\n\n // ========== Computed Getters ==========\n getSearchRequest: (): SearchRequest => {\n const state = get();\n return {\n page: state.page,\n size: state.size,\n generalSearch: state.generalSearch || undefined,\n filters: convertFiltersToSearchCriteria(state.filters),\n sortBy: state.sortBy,\n sortDirection: state.sortDirection,\n };\n },\n\n getActiveFilterCount: () => {\n return get().filters.filter((f) => f.enabled).length;\n },\n\n getSelectedRowIds: () => {\n return Object.keys(get().rowSelection);\n },\n }))\n );\n}\n\n// Type for the store returned by createDataTableStore\nexport type DataTableStoreApi = ReturnType<typeof createDataTableStore>;\n","/**\n * DataTable Store Selectors\n * Optimized partial subscriptions for Zustand store\n */\n\nimport type { DataTableStore } from './createDataTableStore';\n\n// ============================================================================\n// PRIMITIVE SELECTORS - Direct state access\n// ============================================================================\n\n/** Select general search value */\nexport const selectGeneralSearch = (state: DataTableStore) => state.generalSearch;\n\n/** Select filters array */\nexport const selectFilters = (state: DataTableStore) => state.filters;\n\n/** Select page number */\nexport const selectPage = (state: DataTableStore) => state.page;\n\n/** Select page size */\nexport const selectSize = (state: DataTableStore) => state.size;\n\n/** Select sort field */\nexport const selectSortBy = (state: DataTableStore) => state.sortBy;\n\n/** Select sort direction */\nexport const selectSortDirection = (state: DataTableStore) => state.sortDirection;\n\n/** Select row selection */\nexport const selectRowSelection = (state: DataTableStore) => state.rowSelection;\n\n// ============================================================================\n// COMPUTED SELECTORS - Derived state\n// ============================================================================\n\n/** Select active filter count */\nexport const selectActiveFilterCount = (state: DataTableStore) =>\n state.filters.filter((f) => f.enabled).length;\n\n/** Select if there are any active filters */\nexport const selectHasActiveFilters = (state: DataTableStore) =>\n state.filters.some((f) => f.enabled);\n\n/** Select search request - use with useShallow for object comparison */\nexport const selectSearchRequest = (state: DataTableStore) => state.getSearchRequest();\n\n/** Select selected row IDs */\nexport const selectSelectedRowIds = (state: DataTableStore) =>\n Object.keys(state.rowSelection);\n\n/** Select selected row count */\nexport const selectSelectedRowCount = (state: DataTableStore) =>\n Object.keys(state.rowSelection).length;\n\n/** Select pagination info */\nexport const selectPaginationState = (state: DataTableStore) => ({\n page: state.page,\n size: state.size,\n});\n\n/** Select sorting info */\nexport const selectSortingState = (state: DataTableStore) => ({\n sortBy: state.sortBy,\n sortDirection: state.sortDirection,\n});\n","import type { DataTableState, UrlState, FilterState } from '../types';\nimport { DEFAULTS } from '../constants';\n\n/**\n * URL Search params (serialized string format)\n */\ninterface UrlSearchParams {\n q?: string;\n p?: string;\n ps?: string;\n s?: string;\n sd?: string;\n f?: string;\n}\n\n/**\n * Parse URL search params into UrlState\n */\nexport function parseUrlState(params: Record<string, string | undefined>): UrlState {\n const state: UrlState = {};\n\n if (params.q) {\n state.q = params.q;\n }\n\n if (params.p) {\n const page = parseInt(params.p, 10);\n if (!isNaN(page) && page >= 0) {\n state.p = page;\n }\n }\n\n if (params.ps) {\n const size = parseInt(params.ps, 10);\n if (!isNaN(size) && size > 0) {\n state.ps = size;\n }\n }\n\n if (params.s) {\n state.s = params.s;\n }\n\n if (params.sd && ['ASC', 'DESC'].includes(params.sd)) {\n state.sd = params.sd as 'ASC' | 'DESC';\n }\n\n if (params.f) {\n try {\n const decoded = atob(params.f);\n const filters = JSON.parse(decoded) as FilterState[];\n if (Array.isArray(filters)) {\n state.f = filters;\n }\n } catch (error) {\n // Invalid filter state in URL - log in development\n if (import.meta.env.DEV) {\n console.warn('Failed to parse filter state from URL:', error);\n }\n }\n }\n\n return state;\n}\n\n/**\n * Serialize DataTableState to URL search params\n * Only includes non-default values to keep URLs clean\n */\nexport function serializeToUrl(state: DataTableState): UrlSearchParams {\n const params: UrlSearchParams = {};\n\n // Only add to URL if non-empty\n if (state.generalSearch) {\n params.q = state.generalSearch;\n }\n\n // Only add page if not on first page\n if (state.page > 0) {\n params.p = String(state.page);\n }\n\n // Only add size if different from default\n if (state.size !== DEFAULTS.PAGE_SIZE) {\n params.ps = String(state.size);\n }\n\n // Only add sort if different from default\n if (state.sortBy !== DEFAULTS.SORT_BY) {\n params.s = state.sortBy;\n }\n\n // Only add direction if DESC (ASC is default)\n if (state.sortDirection !== DEFAULTS.SORT_DIRECTION) {\n params.sd = state.sortDirection;\n }\n\n // Only add filters if there are enabled filters\n const enabledFilters = state.filters.filter((f) => f.enabled);\n if (enabledFilters.length > 0) {\n try {\n params.f = btoa(JSON.stringify(enabledFilters));\n } catch (error) {\n // Encoding failed - log in development\n if (import.meta.env.DEV) {\n console.warn('Failed to encode filter state to URL:', error);\n }\n }\n }\n\n return params;\n}\n\n/**\n * Convert UrlSearchParams to URLSearchParams for navigation\n */\nexport function toURLSearchParams(params: UrlSearchParams): URLSearchParams {\n const searchParams = new URLSearchParams();\n\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined) {\n searchParams.set(key, value);\n }\n });\n\n return searchParams;\n}\n\n/**\n * Parse URLSearchParams to UrlSearchParams object\n */\nexport function fromURLSearchParams(searchParams: URLSearchParams): Record<string, string | undefined> {\n const params: Record<string, string | undefined> = {};\n\n searchParams.forEach((value, key) => {\n params[key] = value;\n });\n\n return params;\n}\n","import { useEffect, useRef, useCallback } from 'react';\nimport { useNavigate, useSearch } from '@tanstack/react-router';\nimport type { DataTableStoreApi } from '../store/createDataTableStore';\nimport { parseUrlState, serializeToUrl } from '../utils/url-utils';\n\ninterface UseDataTableUrlOptions {\n enabled?: boolean;\n debounceMs?: number;\n}\n\n/**\n * Hook to synchronize DataTable state with URL search params\n * - Hydrates store from URL on mount\n * - Updates URL when store state changes (debounced)\n */\nexport function useDataTableUrl(\n store: DataTableStoreApi,\n options: UseDataTableUrlOptions = {}\n) {\n const { enabled = true, debounceMs = 300 } = options;\n const navigate = useNavigate();\n const search = useSearch({ strict: false }) as Record<string, string | undefined>;\n const isHydrated = useRef(false);\n const isUpdatingUrl = useRef(false);\n const debounceTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n // Track if user has interacted before hydration completes\n const userHasInteracted = useRef(false);\n // Capture initial search params at mount time to avoid race conditions\n const initialSearchRef = useRef(search);\n\n // Hydrate store from URL on mount (one-time, synchronous)\n // Uses captured initial search to prevent race conditions with URL updates\n useEffect(() => {\n if (!enabled || isHydrated.current) return;\n\n // Mark as hydrated FIRST to prevent re-runs\n isHydrated.current = true;\n\n // Use initial search params captured at mount time\n // This prevents URL updates from triggering re-hydration\n const urlState = parseUrlState(initialSearchRef.current);\n if (Object.keys(urlState).length > 0 && !userHasInteracted.current) {\n store.getState().hydrateFromUrl(urlState);\n }\n }, [enabled, store]); // Intentionally exclude search to run only once\n\n // Track user interactions to prevent hydration overwrites\n useEffect(() => {\n if (!enabled) return;\n\n // Subscribe to store changes to detect user interactions\n const unsubscribe = store.subscribe(() => {\n // If not hydrated yet, mark that user has interacted\n // This prevents hydration from overwriting user changes\n if (!isHydrated.current) {\n userHasInteracted.current = true;\n }\n });\n\n return unsubscribe;\n }, [enabled, store]);\n\n // Update URL when store state changes (debounced)\n const updateUrl = useCallback(() => {\n if (!enabled || isUpdatingUrl.current) return;\n\n // Clear any pending debounce\n if (debounceTimer.current) {\n clearTimeout(debounceTimer.current);\n }\n\n // Debounce URL updates to prevent history flooding\n debounceTimer.current = setTimeout(() => {\n const state = store.getState();\n const urlParams = serializeToUrl(state);\n\n isUpdatingUrl.current = true;\n\n // Filter out undefined values\n const cleanParams = Object.fromEntries(\n Object.entries(urlParams).filter(([, v]) => v !== undefined)\n ) as Record<string, string>;\n\n // Use functional pattern to merge with existing search params.\n // Type assertion required: TanStack Router's generic search type is\n // too narrow for dynamic key merging across all route definitions.\n const searchFn = (prev: Record<string, unknown>) => ({\n ...prev,\n ...cleanParams,\n });\n\n navigate({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n search: searchFn as any,\n replace: true,\n }).finally(() => {\n isUpdatingUrl.current = false;\n });\n }, debounceMs);\n }, [enabled, store, navigate, debounceMs]);\n\n // Subscribe to store changes\n useEffect(() => {\n if (!enabled) return;\n\n // Store unsubscribe reference outside setTimeout\n let unsubscribe: (() => void) | undefined;\n\n // Wait for hydration before subscribing\n const timeout = setTimeout(() => {\n unsubscribe = store.subscribe(updateUrl);\n }, 0);\n\n // Cleanup: clear timeout, unsubscribe, and clear debounce\n return () => {\n clearTimeout(timeout);\n unsubscribe?.();\n if (debounceTimer.current) {\n clearTimeout(debounceTimer.current);\n }\n };\n }, [enabled, store, updateUrl]);\n}\n","import { useMemo, useRef, useCallback, useEffect } from 'react';\nimport { useStore } from 'zustand';\nimport { useShallow } from 'zustand/react/shallow';\nimport {\n createDataTableStore,\n type CreateDataTableStoreOptions,\n type DataTableStoreApi,\n // Selectors for optimized subscriptions\n selectGeneralSearch,\n selectFilters,\n selectPage,\n selectSize,\n selectSortBy,\n selectSortDirection,\n selectRowSelection,\n selectActiveFilterCount,\n selectHasActiveFilters,\n} from '../store';\nimport { useDataTableUrl } from './useDataTableUrl';\nimport { convertFiltersToSearchCriteria } from '../utils/filter-utils';\nimport type {\n FieldConfig,\n SearchRequest,\n FilterState,\n DataTableSortingProps,\n} from '../types';\n\n// ============================================================================\n// STORE REGISTRY (for multi-table support)\n// ============================================================================\n\ninterface StoreEntry {\n store: DataTableStoreApi;\n refCount: number;\n}\n\n/**\n * Global store registry for named DataTable instances.\n * Stores are keyed by storeId and reference counted for proper cleanup.\n */\nconst storeRegistry = new Map<string, StoreEntry>();\n\n/**\n * Get or create a store for a given storeId.\n * Increments reference count when returning existing store.\n */\nfunction getOrCreateStore(\n storeId: string,\n options: CreateDataTableStoreOptions\n): DataTableStoreApi {\n const existing = storeRegistry.get(storeId);\n if (existing) {\n existing.refCount++;\n return existing.store;\n }\n\n const store = createDataTableStore(options);\n storeRegistry.set(storeId, { store, refCount: 1 });\n return store;\n}\n\n/**\n * Release a store reference.\n * Removes store from registry when refCount reaches 0.\n */\nfunction releaseStore(storeId: string): void {\n const entry = storeRegistry.get(storeId);\n if (!entry) return;\n\n entry.refCount--;\n if (entry.refCount <= 0) {\n storeRegistry.delete(storeId);\n }\n}\n\n// ============================================================================\n// HOOK OPTIONS\n// ============================================================================\n\ninterface UseDataTableOptions<TData> extends CreateDataTableStoreOptions {\n /** Unique ID for multiple tables on same page */\n storeId?: string;\n /** Enable URL state synchronization */\n syncWithUrl?: boolean;\n /** Filter field configuration */\n fieldConfig: FieldConfig[];\n /** Function to get unique row ID */\n getRowId: (row: TData) => string;\n /** Current data (for computing selectedRows) */\n data?: TData[];\n}\n\n// ============================================================================\n// HOOK RETURN TYPE\n// ============================================================================\n\ninterface UseDataTableReturn<TData> {\n /** Search request ready for API call (100% backend compatible) */\n searchRequest: SearchRequest;\n\n /** Pagination props to spread to DataTable */\n paginationProps: {\n page: number;\n size: number;\n onPageChange: (page: number) => void;\n onPageSizeChange: (size: number) => void;\n };\n\n /** Sorting props to spread to DataTable */\n sortingProps: DataTableSortingProps;\n\n /** Search props to spread to DataTable */\n searchProps: {\n searchValue: string;\n onSearchChange: (value: string) => void;\n };\n\n /** Filter props to spread to DataTable */\n filterProps: {\n filters: FilterState[];\n onFiltersChange: (filters: FilterState[]) => void;\n };\n\n /** Selection props to spread to DataTable */\n selectionProps: {\n rowSelection: Record<string, boolean>;\n onRowSelectionChange: (selection: Record<string, boolean>) => void;\n };\n\n /** Currently selected rows */\n selectedRows: TData[];\n /** Number of selected rows */\n selectedCount: number;\n /** Whether there are any active filters */\n hasActiveFilters: boolean;\n /** Number of active filters */\n activeFilterCount: number;\n\n /** Direct store access for advanced use cases */\n store: DataTableStoreApi;\n}\n\n// ============================================================================\n// MAIN HOOK\n// ============================================================================\n\nexport function useDataTable<TData>(\n options: UseDataTableOptions<TData>\n): UseDataTableReturn<TData> {\n const {\n storeId,\n defaultSize,\n defaultSortBy,\n defaultSortDirection,\n syncWithUrl = false,\n fieldConfig,\n getRowId,\n data = [],\n } = options;\n\n const storeOptions: CreateDataTableStoreOptions = {\n defaultSize,\n defaultSortBy,\n defaultSortDirection,\n };\n\n // Create store instance (stable reference)\n // If storeId is provided, use registry for shared stores\n // Otherwise, create a local store per component instance\n const localStoreRef = useRef<DataTableStoreApi | null>(null);\n const registeredStoreIdRef = useRef<string | undefined>(undefined);\n\n // Get or create the appropriate store\n const store = useMemo(() => {\n if (storeId) {\n // Use registry for named stores (multiple tables can share by ID)\n return getOrCreateStore(storeId, storeOptions);\n } else {\n // Create local store if not already created\n if (!localStoreRef.current) {\n localStoreRef.current = createDataTableStore(storeOptions);\n }\n return localStoreRef.current;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [storeId]); // Only re-create if storeId changes\n\n // Track storeId for cleanup\n useEffect(() => {\n registeredStoreIdRef.current = storeId;\n }, [storeId]);\n\n // Cleanup: release store reference when component unmounts or storeId changes\n useEffect(() => {\n return () => {\n if (registeredStoreIdRef.current) {\n releaseStore(registeredStoreIdRef.current);\n }\n };\n }, [storeId]);\n\n // URL synchronization (conditional via enabled flag)\n useDataTableUrl(store, { enabled: syncWithUrl });\n\n // ========== Selective Store Subscriptions ==========\n // Each selector only triggers re-render when its specific slice changes\n const generalSearch = useStore(store, selectGeneralSearch);\n const page = useStore(store, selectPage);\n const size = useStore(store, selectSize);\n const sortBy = useStore(store, selectSortBy);\n const sortDirection = useStore(store, selectSortDirection);\n const activeFilterCount = useStore(store, selectActiveFilterCount);\n const hasActiveFilters = useStore(store, selectHasActiveFilters);\n\n // Use shallow comparison for arrays/objects to prevent unnecessary re-renders\n const filters = useStore(store, useShallow(selectFilters));\n const rowSelection = useStore(store, useShallow(selectRowSelection));\n\n // ========== Stable Action Callbacks ==========\n const setPage = useCallback((p: number) => store.getState().setPage(p), [store]);\n const setSize = useCallback((s: number) => store.getState().setSize(s), [store]);\n const setSort = useCallback(\n (by: string, dir: 'ASC' | 'DESC') => store.getState().setSort(by, dir),\n [store]\n );\n const setGeneralSearch = useCallback(\n (v: string) => store.getState().setGeneralSearch(v),\n [store]\n );\n const setFilters = useCallback(\n (f: FilterState[]) => store.getState().setFilters(f),\n [store]\n );\n const setRowSelection = useCallback(\n (s: Record<string, boolean>) => store.getState().setRowSelection(s),\n [store]\n );\n\n // ========== Computed: Search Request ==========\n const searchRequest = useMemo((): SearchRequest => {\n return {\n page,\n size,\n generalSearch: generalSearch || undefined,\n filters: convertFiltersToSearchCriteria(filters, fieldConfig),\n sortBy,\n sortDirection,\n };\n }, [generalSearch, filters, fieldConfig, page, size, sortBy, sortDirection]);\n\n // ========== Computed: Selected Rows ==========\n const selectedRows = useMemo(() => {\n return data.filter((row) => rowSelection[getRowId(row)]);\n }, [data, rowSelection, getRowId]);\n\n // ========== Build Separated Props Objects ==========\n const paginationProps = useMemo(\n () => ({\n page,\n size,\n onPageChange: setPage,\n onPageSizeChange: setSize,\n }),\n [page, size, setPage, setSize]\n );\n\n const sortingProps = useMemo(\n () => ({\n sortBy,\n sortDirection,\n onSortChange: setSort,\n }),\n [sortBy, sortDirection, setSort]\n );\n\n const searchProps = useMemo(\n () => ({\n searchValue: generalSearch,\n onSearchChange: setGeneralSearch,\n }),\n [generalSearch, setGeneralSearch]\n );\n\n const filterProps = useMemo(\n () => ({\n filters,\n onFiltersChange: setFilters,\n }),\n [filters, setFilters]\n );\n\n const selectionProps = useMemo(\n () => ({\n rowSelection,\n onRowSelectionChange: setRowSelection,\n }),\n [rowSelection, setRowSelection]\n );\n\n return {\n // Search Request\n searchRequest,\n\n // Separated Props\n paginationProps,\n sortingProps,\n searchProps,\n filterProps,\n selectionProps,\n\n // Computed\n selectedRows,\n selectedCount: Object.keys(rowSelection).length,\n hasActiveFilters,\n activeFilterCount,\n\n // Store\n store,\n };\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\nimport { X, MoreHorizontal } from 'lucide-react';\nimport { Button } from '../ui/button';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../ui/dropdown-menu';\n\nexport interface BulkActionItem {\n id: string;\n label: string;\n icon?: ReactNode;\n onClick: () => void;\n variant?: 'default' | 'primary' | 'destructive';\n separator?: boolean;\n}\n\nexport interface BulkActionBarProps {\n selectedCount: number;\n onClearSelection: () => void;\n actions?: BulkActionItem[];\n moreActions?: BulkActionItem[];\n itemLabel?: (count: number) => string;\n cancelLabel?: string;\n cancelHint?: string;\n className?: string;\n}\n\nexport function BulkActionBar({\n selectedCount,\n onClearSelection,\n actions = [],\n moreActions = [],\n itemLabel = (count) => count === 1 ? '1 item selected' : `${count} items selected`,\n cancelLabel = 'Clear selection',\n cancelHint = 'Esc',\n className,\n}: BulkActionBarProps) {\n if (selectedCount === 0) return null;\n\n return (\n <div\n className={cn(\n 'fixed bottom-6 left-1/2 -translate-x-1/2 z-50',\n 'flex items-center gap-3 rounded-xl border border-border bg-card/95 backdrop-blur-md',\n 'px-4 py-3 shadow-2xl shadow-black/20 dark:shadow-black/50',\n 'animate-in fade-in slide-in-from-bottom-4 duration-300',\n className\n )}\n >\n {/* Selection count */}\n <div className=\"flex items-center gap-2 pr-3 border-r border-border\">\n <div className=\"flex h-7 w-7 items-center justify-center rounded-md bg-accent-cyan/20 border border-accent-cyan/30\">\n <span className=\"text-sm font-bold text-accent-cyan\">\n {selectedCount}\n </span>\n </div>\n <span className=\"text-sm text-muted-foreground\">\n {itemLabel(selectedCount)}\n </span>\n </div>\n\n {/* Actions */}\n <div className=\"flex items-center gap-2\">\n {actions.map((action) => (\n <Button\n key={action.id}\n size=\"sm\"\n variant={action.variant === 'primary' ? 'default' : action.variant === 'destructive' ? 'outline' : 'outline'}\n onClick={action.onClick}\n className={cn(\n 'text-xs',\n action.variant === 'primary' && 'bg-accent-cyan hover:bg-accent-cyan/90 text-white',\n action.variant === 'destructive' && 'text-status-error border-status-error/30 hover:bg-status-error/10'\n )}\n >\n {action.icon}\n {action.label}\n </Button>\n ))}\n\n {moreActions.length > 0 && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" size=\"sm\" className=\"px-2\">\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-48\">\n {moreActions.map((action) =>\n action.separator ? (\n <DropdownMenuSeparator key={action.id} />\n ) : (\n <DropdownMenuItem key={action.id} onClick={action.onClick}>\n {action.icon}\n {action.label}\n </DropdownMenuItem>\n )\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n\n {/* Clear selection button */}\n <button\n onClick={onClearSelection}\n className=\"ml-2 p-1.5 rounded-md text-muted-foreground hover:text-foreground hover:bg-muted transition-colors\"\n aria-label={cancelLabel}\n >\n <X className=\"h-4 w-4\" />\n </button>\n\n {/* Keyboard hint */}\n {cancelHint && (\n <div className=\"hidden lg:flex items-center gap-1 pl-3 border-l border-border\">\n <kbd className=\"px-1.5 py-0.5 rounded border border-border bg-muted/50 text-xs text-muted-foreground\">\n {cancelHint}\n </kbd>\n <span className=\"text-xs text-muted-foreground/60\">to cancel</span>\n </div>\n )}\n </div>\n );\n}\n","import { useOptimistic, useCallback } from 'react';\n\n/**\n * Action types for optimistic list operations\n */\nexport type OptimisticAction<T> =\n | { type: 'add'; item: T }\n | { type: 'update'; item: T }\n | { type: 'delete'; id: number | string };\n\n/**\n * Generic optimistic list hook using React 19's useOptimistic\n *\n * Provides immediate UI feedback for list operations (add/update/delete)\n * before the actual API call completes.\n *\n * @example\n * ```tsx\n * function SimCardList() {\n * const { data: simCards } = useSimCards();\n * const {\n * optimisticItems,\n * addItem,\n * updateItem,\n * deleteItem\n * } = useOptimisticList(simCards ?? []);\n *\n * const handleDelete = async (id: number) => {\n * deleteItem(id); // Immediate UI update\n * await deleteMutation.mutateAsync(id); // API call\n * };\n *\n * return <DataTable data={optimisticItems} />;\n * }\n * ```\n */\nexport function useOptimisticList<T extends { id: number | string }>(\n items: T[],\n idKey: keyof T = 'id'\n) {\n const [optimisticItems, updateOptimistic] = useOptimistic(\n items,\n (state: T[], action: OptimisticAction<T>) => {\n switch (action.type) {\n case 'add':\n return [...state, action.item];\n case 'update':\n return state.map((item) =>\n item[idKey] === action.item[idKey] ? { ...item, ...action.item } : item\n );\n case 'delete':\n return state.filter((item) => item[idKey] !== action.id);\n default:\n return state;\n }\n }\n );\n\n const addItem = useCallback(\n (item: T) => {\n updateOptimistic({ type: 'add', item });\n },\n [updateOptimistic]\n );\n\n const updateItem = useCallback(\n (item: T) => {\n updateOptimistic({ type: 'update', item });\n },\n [updateOptimistic]\n );\n\n const deleteItem = useCallback(\n (id: number | string) => {\n updateOptimistic({ type: 'delete', id });\n },\n [updateOptimistic]\n );\n\n return {\n /** Items with optimistic updates applied */\n optimisticItems,\n /** Raw update function for custom operations */\n updateOptimistic,\n /** Add a new item optimistically */\n addItem,\n /** Update an existing item optimistically */\n updateItem,\n /** Delete an item optimistically */\n deleteItem,\n };\n}\n\n/**\n * Hook for optimistic page response updates (paginated data)\n * Works with LENA HES API's PagedResponse structure\n *\n * @example\n * ```tsx\n * function SimCardList() {\n * const { data } = useSimCardsSearch(searchRequest);\n * const {\n * optimisticData,\n * deleteItem\n * } = useOptimisticPageResponse(data);\n *\n * return <DataTable data={optimisticData?.data ?? []} />;\n * }\n * ```\n */\nexport function useOptimisticPageResponse<T extends { id: number | string }>(\n pageResponse:\n | {\n data: T[];\n pagination: { totalElements: number; [key: string]: unknown };\n [key: string]: unknown;\n }\n | undefined,\n idKey: keyof T = 'id'\n) {\n type PageResponse = typeof pageResponse;\n\n const [optimisticData, updateOptimistic] = useOptimistic(\n pageResponse,\n (state: PageResponse, action: OptimisticAction<T>) => {\n if (!state) return state;\n\n switch (action.type) {\n case 'add':\n return {\n ...state,\n data: [...state.data, action.item],\n pagination: {\n ...state.pagination,\n totalElements: state.pagination.totalElements + 1,\n },\n };\n case 'update':\n return {\n ...state,\n data: state.data.map((item) =>\n item[idKey] === action.item[idKey] ? { ...item, ...action.item } : item\n ),\n };\n case 'delete':\n return {\n ...state,\n data: state.data.filter((item) => item[idKey] !== action.id),\n pagination: {\n ...state.pagination,\n totalElements: state.pagination.totalElements - 1,\n },\n };\n default:\n return state;\n }\n }\n );\n\n const addItem = useCallback(\n (item: T) => {\n updateOptimistic({ type: 'add', item });\n },\n [updateOptimistic]\n );\n\n const updateItem = useCallback(\n (item: T) => {\n updateOptimistic({ type: 'update', item });\n },\n [updateOptimistic]\n );\n\n const deleteItem = useCallback(\n (id: number | string) => {\n updateOptimistic({ type: 'delete', id });\n },\n [updateOptimistic]\n );\n\n return {\n /** Page response with optimistic updates applied */\n optimisticData,\n /** Raw update function for custom operations */\n updateOptimistic,\n /** Add a new item optimistically */\n addItem,\n /** Update an existing item optimistically */\n updateItem,\n /** Delete an item optimistically */\n deleteItem,\n };\n}\n","import { useParams, useNavigate } from '@tanstack/react-router';\nimport { z } from 'zod';\nimport { useEffect } from 'react';\n\n/**\n * Common route param schemas\n */\nexport const routeParamSchemas = {\n /** Numeric ID parameter (e.g., /entity/$id) */\n numericId: z.object({\n id: z.coerce.number().int().positive(),\n }),\n\n /** String ID parameter */\n stringId: z.object({\n id: z.string().min(1),\n }),\n\n /** UUID parameter */\n uuid: z.object({\n id: z.string().uuid(),\n }),\n};\n\n/**\n * Hook to get validated route params with Zod\n * Redirects to fallback path if validation fails\n *\n * @example\n * ```tsx\n * function EntityDetailPage() {\n * const params = useValidatedParams({\n * from: '/entity/$id',\n * schema: z.object({ id: z.coerce.number().positive() }),\n * fallbackPath: '/entity',\n * });\n *\n * if (!params) return <Loading />; // Redirecting due to invalid params\n *\n * const { id } = params; // id is typed as number\n * // ...\n * }\n * ```\n */\nexport function useValidatedParams<\n TFrom extends string,\n TSchema extends z.ZodType,\n>(options: {\n /** Route path to get params from */\n from: TFrom;\n /** Zod schema to validate params */\n schema: TSchema;\n /** Path to redirect if validation fails */\n fallbackPath?: string;\n /** Custom error handler */\n onError?: (error: z.ZodError) => void;\n}): z.infer<TSchema> | null {\n const { from, schema, fallbackPath = '/', onError } = options;\n const rawParams = useParams({ from: from as never });\n const navigate = useNavigate();\n\n const result = schema.safeParse(rawParams);\n\n useEffect(() => {\n if (!result.success) {\n if (import.meta.env.DEV) console.error('[useValidatedParams] Invalid route params:', result.error);\n onError?.(result.error);\n navigate({ to: fallbackPath });\n }\n }, [result.success, fallbackPath, navigate, onError, result.error]);\n\n if (!result.success) {\n return null;\n }\n\n return result.data;\n}\n\n/**\n * Hook specifically for numeric ID params (most common case)\n * Returns validated numeric ID or redirects\n *\n * @example\n * ```tsx\n * function GatewayDetailPage() {\n * const id = useNumericIdParam({\n * from: '/device-management/gateway/$id',\n * fallbackPath: '/device-management/gateways',\n * });\n *\n * if (id === null) return <Loading />;\n *\n * const { data } = useGateway(id);\n * // ...\n * }\n * ```\n */\nexport function useNumericIdParam(options: {\n from: string;\n fallbackPath?: string;\n}): number | null {\n const params = useValidatedParams({\n from: options.from,\n schema: routeParamSchemas.numericId,\n fallbackPath: options.fallbackPath,\n });\n\n return params?.id ?? null;\n}\n\n/**\n * Simple param validation without redirect\n * Throws error if validation fails (for use in loaders/guards)\n */\nexport function validateParams<TSchema extends z.ZodType>(\n params: unknown,\n schema: TSchema\n): z.infer<TSchema> {\n return schema.parse(params);\n}\n\n/**\n * Safe param validation without throwing\n * Returns null if validation fails\n */\nexport function safeValidateParams<TSchema extends z.ZodType>(\n params: unknown,\n schema: TSchema\n): z.infer<TSchema> | null {\n const result = schema.safeParse(params);\n return result.success ? result.data : null;\n}\n","import { useCallback, useRef } from 'react';\nimport { useQueryClient, type QueryKey } from '@tanstack/react-query';\nimport type { SearchRequest } from '@/types/common';\n\ninterface UsePrefetchOptions<TData> {\n /** Query key factory for detail queries */\n detailKey: (id: number) => QueryKey;\n /** Query key factory for list queries */\n listKey: (params: SearchRequest) => QueryKey;\n /** Function to fetch detail data */\n fetchDetail?: (id: number) => Promise<TData>;\n /** Function to fetch list data */\n fetchList?: (params: SearchRequest) => Promise<unknown>;\n /** Current search params (for pagination prefetch) */\n searchParams?: SearchRequest;\n /** Stale time for prefetched data (default: 30s) */\n staleTime?: number;\n}\n\n/**\n * Hook for prefetching list and detail data on hover.\n * Improves perceived performance by loading data before user navigates.\n *\n * @example\n * ```tsx\n * const { prefetchDetail, prefetchPage } = usePrefetch({\n * detailKey: simCardKeys.detail,\n * listKey: simCardKeys.list,\n * fetchDetail: getSimCard,\n * fetchList: searchSimCards,\n * searchParams: table.searchRequest,\n * });\n *\n * <DataTable\n * onRowHover={(row) => prefetchDetail(row.id)}\n * onPrefetchPage={prefetchPage}\n * />\n * ```\n */\nexport function usePrefetch<TData>({\n detailKey,\n listKey,\n fetchDetail,\n fetchList,\n searchParams,\n staleTime = 30000,\n}: UsePrefetchOptions<TData>) {\n const queryClient = useQueryClient();\n const prefetchedIds = useRef(new Set<number>());\n const prefetchedPages = useRef(new Set<number>());\n\n /**\n * Prefetch detail data for a specific item.\n * Only prefetches once per session to avoid redundant requests.\n */\n const prefetchDetail = useCallback(\n (id: number) => {\n if (!fetchDetail || prefetchedIds.current.has(id)) return;\n\n prefetchedIds.current.add(id);\n\n queryClient.prefetchQuery({\n queryKey: detailKey(id),\n queryFn: () => fetchDetail(id),\n staleTime,\n });\n },\n [queryClient, detailKey, fetchDetail, staleTime]\n );\n\n /**\n * Prefetch list data for a specific page.\n * Only prefetches once per session to avoid redundant requests.\n */\n const prefetchPage = useCallback(\n (page: number) => {\n if (!fetchList || !searchParams || prefetchedPages.current.has(page)) return;\n\n prefetchedPages.current.add(page);\n\n const params: SearchRequest = {\n ...searchParams,\n page,\n };\n\n queryClient.prefetchQuery({\n queryKey: listKey(params),\n queryFn: () => fetchList(params),\n staleTime,\n });\n },\n [queryClient, listKey, fetchList, searchParams, staleTime]\n );\n\n /**\n * Clear prefetch cache (call when search params change significantly)\n */\n const clearPrefetchCache = useCallback(() => {\n prefetchedIds.current.clear();\n prefetchedPages.current.clear();\n }, []);\n\n return {\n prefetchDetail,\n prefetchPage,\n clearPrefetchCache,\n };\n}\n","import type { LenaUILabels } from './types';\n\nexport const trLabels: LenaUILabels = {\n dataTable: {\n // Pagination\n show: 'Göster',\n entries: 'kayıt',\n showing: 'Gösterilen',\n to: '-',\n of: '/',\n results: 'sonuç',\n noResults: 'Sonuç yok',\n page: 'Sayfa',\n\n // Empty state\n emptyTitle: 'Sonuç bulunamadı',\n emptyDescription: 'Arama kriterlerinizi değiştirmeyi deneyin',\n\n // Search\n searchPlaceholder: 'Ara...',\n\n // Filters\n filter: 'Filtre',\n clear: 'Temizle',\n apply: 'Uygula',\n\n // Operators\n operators: {\n EQUALS: 'Eşittir',\n NOT_EQUALS: 'Eşit değildir',\n CONTAINS: 'İçerir',\n STARTS_WITH: 'İle başlar',\n ENDS_WITH: 'İle biter',\n GREATER_THAN: 'Büyüktür',\n GREATER_THAN_OR_EQUALS: 'Büyük eşittir',\n LESS_THAN: 'Küçüktür',\n LESS_THAN_OR_EQUALS: 'Küçük eşittir',\n IN: 'Birisi',\n NOT_IN: 'Birisi değil',\n BETWEEN: 'Arasında',\n IS_NULL: 'Boş',\n IS_NOT_NULL: 'Boş değil',\n },\n },\n\n form: {\n save: 'Kaydet',\n cancel: 'İptal',\n processing: 'İşleniyor...',\n saving: 'Kaydediliyor...',\n selectPlaceholder: 'Seçiniz...',\n searchPlaceholder: 'Ara...',\n noResults: 'Sonuç bulunamadı.',\n },\n\n errorBoundary: {\n title: 'Bir Hata Oluştu',\n description: 'Üzgünüz, beklenmeyen bir hata meydana geldi. Lütfen sayfayı yenileyin veya daha sonra tekrar deneyin.',\n retry: 'Tekrar Dene',\n reload: 'Yenile',\n goHome: 'Ana Sayfa',\n appError: 'Uygulama Hatası',\n appErrorDescription: 'Uygulamada kritik bir hata oluştu. Lütfen sayfayı yenileyerek tekrar deneyin.',\n reloadPage: 'Sayfayı Yenile',\n sectionError: 'Bu bölüm yüklenemedi',\n },\n\n jsonEditor: {\n clickToEdit: 'Düzenlemek için tıkla',\n addValue: 'Değer Ekle',\n delete: 'Sil',\n lines: 'satır',\n copySuccess: 'Kopyalandı',\n formatSuccess: 'Biçimlendirildi',\n validJson: 'Geçerli JSON',\n invalidJson: 'Geçersiz JSON',\n },\n\n common: {\n actions: 'İşlemler',\n edit: 'Düzenle',\n delete: 'Sil',\n create: 'Oluştur',\n save: 'Kaydet',\n cancel: 'İptal',\n close: 'Kapat',\n confirm: 'Onayla',\n back: 'Geri',\n next: 'İleri',\n loading: 'Yükleniyor...',\n noData: 'Veri bulunamadı',\n refresh: 'Yenile',\n search: 'Ara',\n yes: 'Evet',\n no: 'Hayır',\n active: 'Aktif',\n inactive: 'Pasif',\n enabled: 'Etkin',\n disabled: 'Devre dışı',\n },\n\n deleteDialog: {\n title: 'Silmek istediğinize emin misiniz?',\n description: 'Bu işlem geri alınamaz. Bu kayıt kalıcı olarak silinecektir.',\n cancel: 'İptal',\n confirm: 'Sil',\n deleting: 'Siliniyor...',\n },\n};\n","import type { LenaUILabels } from './types';\r\n\r\nexport const enLabels: LenaUILabels = {\r\n dataTable: {\r\n // Pagination\r\n show: 'Show',\r\n entries: 'entries',\r\n showing: 'Showing',\r\n to: 'to',\r\n of: 'of',\r\n results: 'results',\r\n noResults: 'No results',\r\n page: 'Page',\r\n\r\n // Empty state\r\n emptyTitle: 'No results found',\r\n emptyDescription: 'Try changing your search criteria',\r\n\r\n // Search\r\n searchPlaceholder: 'Search...',\r\n\r\n // Filters\r\n filter: 'Filter',\r\n clear: 'Clear',\r\n apply: 'Apply',\r\n\r\n // Operators\r\n operators: {\r\n EQUALS: 'Equals',\r\n NOT_EQUALS: 'Not equals',\r\n CONTAINS: 'Contains',\r\n STARTS_WITH: 'Starts with',\r\n ENDS_WITH: 'Ends with',\r\n GREATER_THAN: 'Greater than',\r\n GREATER_THAN_OR_EQUALS: 'Greater than or equals',\r\n LESS_THAN: 'Less than',\r\n LESS_THAN_OR_EQUALS: 'Less than or equals',\r\n IN: 'In',\r\n NOT_IN: 'Not in',\r\n BETWEEN: 'Between',\r\n IS_NULL: 'Is empty',\r\n IS_NOT_NULL: 'Is not empty',\r\n },\r\n },\r\n\r\n form: {\r\n save: 'Save',\r\n cancel: 'Cancel',\r\n processing: 'Processing...',\r\n saving: 'Saving...',\r\n selectPlaceholder: 'Select...',\r\n searchPlaceholder: 'Search...',\r\n noResults: 'No results found.',\r\n },\r\n\r\n errorBoundary: {\r\n title: 'An Error Occurred',\r\n description: 'Sorry, an unexpected error occurred. Please refresh the page or try again later.',\r\n retry: 'Retry',\r\n reload: 'Reload',\r\n goHome: 'Go Home',\r\n appError: 'Application Error',\r\n appErrorDescription: 'A critical error occurred in the application. Please reload the page.',\r\n reloadPage: 'Reload Page',\r\n sectionError: 'This section could not be loaded',\r\n },\r\n\r\n jsonEditor: {\r\n clickToEdit: 'Click to edit',\r\n addValue: 'Add Value',\r\n delete: 'Delete',\r\n lines: 'lines',\r\n copySuccess: 'Copied',\r\n formatSuccess: 'Formatted',\r\n validJson: 'Valid JSON',\r\n invalidJson: 'Invalid JSON',\r\n },\r\n\r\n common: {\r\n actions: 'Actions',\r\n edit: 'Edit',\r\n delete: 'Delete',\r\n create: 'Create',\r\n save: 'Save',\r\n cancel: 'Cancel',\r\n close: 'Close',\r\n confirm: 'Confirm',\r\n back: 'Back',\r\n next: 'Next',\r\n loading: 'Loading...',\r\n noData: 'No data found',\r\n refresh: 'Refresh',\r\n search: 'Search',\r\n yes: 'Yes',\r\n no: 'No',\r\n active: 'Active',\r\n inactive: 'Inactive',\r\n enabled: 'Enabled',\r\n disabled: 'Disabled',\r\n },\r\n\r\n deleteDialog: {\r\n title: 'Are you sure you want to delete?',\r\n description: 'This action cannot be undone. This record will be permanently deleted.',\r\n cancel: 'Cancel',\r\n confirm: 'Delete',\r\n deleting: 'Deleting...',\r\n },\r\n};\r\n","import { createContext, useContext, useMemo, type ReactNode } from 'react';\nimport type { LenaUILabels } from './types';\nimport { trLabels } from './tr';\nimport { enLabels } from './en';\n\nconst locales: Record<string, LenaUILabels> = { tr: trLabels, en: enLabels };\n\ninterface LenaUIContextValue {\n locale: string;\n overrides: Partial<LenaUILabels>;\n}\n\nconst LenaUIContext = createContext<LenaUIContextValue>({ locale: 'tr', overrides: {} });\n\nexport interface LenaUIProviderProps {\n /** Active locale — passed from app (reads from @nar-bus/lena-ui-core) */\n locale?: string;\n /** Override specific labels */\n labels?: Partial<LenaUILabels>;\n children: ReactNode;\n}\n\n/**\n * Provider for overriding default labels across all @nar-bus/lena-ui-shared components.\n *\n * @example\n * ```tsx\n * // Use Turkish defaults (zero config — backward compatible)\n * <LenaUIProvider>\n * <App />\n * </LenaUIProvider>\n *\n * // With locale switching\n * import { useLocale } from '@nar-bus/lena-ui-core';\n * const locale = useLocale();\n * <LenaUIProvider locale={locale}>\n * <App />\n * </LenaUIProvider>\n * ```\n */\nexport function LenaUIProvider({ locale = 'tr', labels, children }: LenaUIProviderProps) {\n const value = useMemo(() => ({ locale, overrides: labels ?? {} }), [locale, labels]);\n return <LenaUIContext.Provider value={value}>{children}</LenaUIContext.Provider>;\n}\n\n/**\n * Hook to get merged labels for a specific namespace.\n * Merge order: base locale < context overrides < component overrides\n *\n * @example\n * ```tsx\n * const t = useLenaLabels('dataTable');\n * return <span>{t.searchPlaceholder}</span>;\n *\n * // With component-level overrides\n * const t = useLenaLabels('dataTable', { searchPlaceholder: 'Find...' });\n * ```\n */\nexport function useLenaLabels<K extends keyof LenaUILabels>(\n namespace: K,\n overrides?: Partial<LenaUILabels[K]>\n): LenaUILabels[K] {\n const ctx = useContext(LenaUIContext);\n const base = locales[ctx.locale] ?? trLabels;\n return useMemo(\n () => ({ ...base[namespace], ...ctx.overrides[namespace], ...overrides }) as LenaUILabels[K],\n [ctx, namespace, overrides, base]\n );\n}\n","/**\n * Generic Entity Delete Confirmation Dialog\n * Reusable component for delete confirmations across detail pages\n */\n\nimport { Loader2 } from 'lucide-react';\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from '@/components/ui/alert-dialog';\nimport { useLenaLabels } from '@/i18n';\n\ninterface EntityDeleteDialogProps {\n /** Whether the dialog is open */\n open: boolean;\n /** Callback when open state changes */\n onOpenChange: (open: boolean) => void;\n /** Callback when delete is confirmed */\n onDelete: () => void;\n /** Whether delete is in progress */\n isDeleting: boolean;\n /** Entity type name (e.g., \"SIM Card\", \"Protocol\") */\n entityType: string;\n /** Display name/identifier of the entity being deleted */\n entityName: string;\n /** Optional custom description. If not provided, uses default template */\n description?: string;\n}\n\nexport function EntityDeleteDialog({\n open,\n onOpenChange,\n onDelete,\n isDeleting,\n entityType,\n entityName,\n description,\n}: EntityDeleteDialogProps) {\n const t = useLenaLabels('deleteDialog');\n\n return (\n <AlertDialog open={open} onOpenChange={onOpenChange}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>{t.title}</AlertDialogTitle>\n <AlertDialogDescription>\n {description ?? (\n <>\n <strong>{entityName}</strong> ({entityType}) {t.description.toLowerCase()}\n </>\n )}\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel disabled={isDeleting}>{t.cancel}</AlertDialogCancel>\n <AlertDialogAction\n variant=\"destructive\"\n onClick={onDelete}\n disabled={isDeleting}\n >\n {isDeleting ? (\n <>\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n {t.deleting}\n </>\n ) : (\n t.confirm\n )}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n );\n}\n","import { useState, useMemo, useCallback } from 'react';\nimport { useNavigate } from '@tanstack/react-router';\nimport { RefreshCw, Plus, Eye, Trash2 } from 'lucide-react';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { Button } from '../ui/button';\nimport { DataTable } from './components/core';\nimport { useDataTable } from './hooks/useDataTable';\nimport type { RowAction } from './types';\nimport type { FieldConfig } from './types';\nimport type { ColumnDef } from '@tanstack/react-table';\nimport { usePrefetch } from '@/hooks';\nimport { EntityDeleteDialog } from '../dialogs';\nimport type { SearchRequest, PagedResponse } from '@/types/common';\n\nexport interface CRUDTabContentProps<T extends { id: number }> {\n /** Whether this tab is currently active */\n isActive: boolean;\n\n /** Table column definitions */\n columns: ColumnDef<T, unknown>[];\n /** Field configuration for filtering */\n fieldConfig: FieldConfig[];\n /** Default sort field */\n defaultSortBy: string;\n /** Row ID accessor */\n getRowId?: (row: T) => string;\n\n /** Query key for invalidation */\n allQueryKey: readonly string[];\n /** Detail query key factory */\n detailKey: (id: number) => readonly unknown[];\n /** List query key factory */\n listKey: (params: SearchRequest) => readonly unknown[];\n\n /** Fetch detail function for prefetch */\n fetchDetail: (id: number) => Promise<T>;\n /** Fetch list function for prefetch */\n fetchList: (params: SearchRequest) => Promise<PagedResponse<T>>;\n\n /** Search hook factory */\n useSearchHook: (params: SearchRequest, enabled: boolean) => {\n data: PagedResponse<T> | undefined;\n isLoading: boolean;\n error: Error | null;\n refetch: () => void;\n };\n\n /** Delete mutation handler */\n deleteItem: (id: number, options: { onSuccess: () => void }) => void;\n /** Whether delete is in progress */\n isDeleting: boolean;\n\n /** Route path for detail page */\n detailPath: string;\n\n /** Search placeholder text */\n searchPlaceholder: string;\n /** Empty state title */\n emptyTitle: string;\n /** Empty state description */\n emptyDescription: string;\n /** Entity type name (for delete dialog) */\n entityType: string;\n /** Get display name from entity (for delete dialog) */\n getEntityName: (item: T) => string;\n\n /** View action label */\n viewLabel?: string;\n /** Delete action label */\n deleteLabel?: string;\n /** Refresh button label */\n refreshLabel?: string;\n /** Create button label */\n createLabel?: string;\n\n /** Create sheet component */\n CreateSheetComponent: React.ComponentType<{\n open: boolean;\n onOpenChange: (open: boolean) => void;\n }>;\n\n /** Hide internal toolbar (for external toolbar control) */\n hideToolbar?: boolean;\n /** External create sheet open state */\n externalCreateSheetOpen?: boolean;\n /** External create sheet open change handler */\n onExternalCreateSheetOpenChange?: (open: boolean) => void;\n}\n\nexport function CRUDTabContent<T extends { id: number }>({\n isActive,\n columns,\n fieldConfig,\n defaultSortBy,\n getRowId = (row) => String(row.id),\n allQueryKey,\n detailKey,\n listKey,\n fetchDetail,\n fetchList,\n useSearchHook,\n deleteItem,\n isDeleting,\n detailPath,\n searchPlaceholder,\n emptyTitle,\n emptyDescription,\n entityType,\n getEntityName,\n viewLabel = 'Detay',\n deleteLabel = 'Sil',\n refreshLabel = 'Yenile',\n createLabel = 'Yeni Ekle',\n CreateSheetComponent,\n hideToolbar = false,\n externalCreateSheetOpen,\n onExternalCreateSheetOpenChange,\n}: CRUDTabContentProps<T>) {\n const queryClient = useQueryClient();\n const navigate = useNavigate();\n const [internalCreateSheetOpen, setInternalCreateSheetOpen] = useState(false);\n const [deleteTarget, setDeleteTarget] = useState<T | null>(null);\n\n const createSheetOpen = externalCreateSheetOpen ?? internalCreateSheetOpen;\n const setCreateSheetOpen = onExternalCreateSheetOpenChange ?? setInternalCreateSheetOpen;\n\n const table = useDataTable<T>({\n fieldConfig,\n getRowId,\n defaultSize: 20,\n defaultSortBy,\n defaultSortDirection: 'ASC',\n syncWithUrl: isActive,\n });\n\n const { data, isLoading, error, refetch } = useSearchHook(table.searchRequest, isActive);\n\n const { prefetchDetail } = usePrefetch<T>({\n detailKey,\n listKey,\n fetchDetail,\n fetchList,\n searchParams: table.searchRequest,\n });\n\n const rowActions: RowAction<T>[] = useMemo(\n () => [\n {\n id: 'view',\n label: viewLabel,\n icon: <Eye className=\"h-4 w-4\" />,\n onClick: (row) => navigate({ to: detailPath, params: { id: String(row.id) } }),\n },\n { id: 'sep1', label: '', separator: true, onClick: () => {} },\n {\n id: 'delete',\n label: deleteLabel,\n icon: <Trash2 className=\"h-4 w-4\" />,\n variant: 'destructive',\n onClick: (row) => setDeleteTarget(row),\n },\n ],\n [navigate, detailPath, viewLabel, deleteLabel]\n );\n\n const handleRefresh = useCallback(() => {\n queryClient.invalidateQueries({ queryKey: allQueryKey });\n refetch();\n }, [queryClient, allQueryKey, refetch]);\n\n const handleDelete = useCallback(() => {\n if (!deleteTarget) return;\n deleteItem(deleteTarget.id, {\n onSuccess: () => setDeleteTarget(null),\n });\n }, [deleteTarget, deleteItem]);\n\n return (\n <>\n {!hideToolbar && (\n <div className=\"flex items-center justify-end gap-2 mb-4\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"text-xs h-8\"\n onClick={handleRefresh}\n disabled={isLoading}\n >\n <RefreshCw className={`h-3.5 w-3.5 mr-1.5 ${isLoading ? 'animate-spin' : ''}`} />\n {refreshLabel}\n </Button>\n <Button\n size=\"sm\"\n className=\"bg-accent-cyan hover:bg-accent-cyan/90 text-white text-xs h-8\"\n onClick={() => setCreateSheetOpen(true)}\n >\n <Plus className=\"h-3.5 w-3.5 mr-1.5\" />\n {createLabel}\n </Button>\n </div>\n )}\n\n <DataTable\n columns={columns}\n getRowId={getRowId}\n data={data?.data ?? []}\n isLoading={isLoading}\n error={error ?? undefined}\n pagination={data?.pagination ?? {\n page: 0,\n size: 20,\n totalElements: 0,\n totalPages: 0,\n hasNext: false,\n hasPrevious: false,\n }}\n {...table.paginationProps}\n pageSizeOptions={[10, 20, 50, 100]}\n {...table.sortingProps}\n {...table.searchProps}\n searchPlaceholder={searchPlaceholder}\n searchDebounceMs={300}\n {...table.filterProps}\n fieldConfig={fieldConfig}\n rowActions={rowActions}\n onRowClick={(row: T) => navigate({\n to: detailPath,\n params: { id: String(row.id) }\n })}\n onRowHover={(row: T) => prefetchDetail(row.id)}\n emptyTitle={emptyTitle}\n emptyDescription={emptyDescription}\n />\n\n <CreateSheetComponent\n open={createSheetOpen}\n onOpenChange={setCreateSheetOpen}\n />\n\n <EntityDeleteDialog\n open={!!deleteTarget}\n onOpenChange={(open) => !open && setDeleteTarget(null)}\n onDelete={handleDelete}\n isDeleting={isDeleting}\n entityType={entityType}\n entityName={deleteTarget ? getEntityName(deleteTarget) : ''}\n />\n </>\n );\n}\n","import type { ReactNode } from 'react';\nimport type { Control, FieldPath, FieldValues } from 'react-hook-form';\nimport { useController } from 'react-hook-form';\nimport { Label } from '@/components/ui/label';\nimport { cn } from '@/lib/utils';\nimport { AlertCircle } from 'lucide-react';\n\ninterface FormFieldProps<TFieldValues extends FieldValues> {\n name: FieldPath<TFieldValues>;\n control: Control<TFieldValues>;\n label?: string;\n description?: string;\n required?: boolean;\n className?: string;\n cols?: 1 | 2 | 3 | 4 | 6 | 12;\n errorHint?: string;\n floatingLabel?: boolean;\n labelClassName?: string;\n /** When true, floating label stays in active/focused position (e.g. popover open) */\n isActive?: boolean;\n children: (field: {\n value: unknown;\n onChange: (value: unknown) => void;\n onBlur: () => void;\n name: string;\n ref: React.Ref<unknown>;\n disabled?: boolean;\n error?: string;\n }) => ReactNode;\n}\n\nconst colSpanClasses = {\n 1: 'col-span-1',\n 2: 'col-span-2',\n 3: 'col-span-3',\n 4: 'col-span-4',\n 6: 'col-span-6',\n 12: 'col-span-12',\n};\n\nexport function FormField<TFieldValues extends FieldValues>({\n name,\n control,\n label,\n description,\n required,\n className,\n cols = 12,\n errorHint,\n floatingLabel,\n labelClassName,\n isActive,\n children,\n}: FormFieldProps<TFieldValues>) {\n const {\n field,\n fieldState: { error },\n } = useController({ name, control });\n\n const hasValue = (() => {\n const v = field.value;\n if (v === null || v === undefined || v === '') return false;\n if (Array.isArray(v)) return v.length > 0;\n return true;\n })();\n\n if (floatingLabel && label) {\n return (\n <div className={cn(colSpanClasses[cols], className)}>\n <div className=\"group/field relative\" data-active={isActive || undefined}>\n {children({ ...field, error: error?.message })}\n <label\n className={cn(\n 'absolute pointer-events-none transition-all duration-200 ease-out',\n 'bg-background px-1.5 -ml-0.5',\n (hasValue || isActive)\n ? '-top-2 left-2.5 text-2xs font-medium'\n : 'top-1/2 left-3 -translate-y-1/2 text-xs text-muted-foreground/70',\n // Filled but not active → muted color\n hasValue && !isActive && 'text-muted-foreground',\n // Active (popover open or isActive prop) → accent color\n isActive && 'text-accent-cyan',\n // Native focus-within (for text inputs)\n 'group-focus-within/field:-top-2 group-focus-within/field:left-2.5',\n 'group-focus-within/field:-translate-y-0 group-focus-within/field:text-2xs',\n 'group-focus-within/field:font-medium group-focus-within/field:text-accent-cyan',\n // Error state overrides\n error && !isActive && 'text-destructive',\n error && isActive && 'text-destructive',\n error && 'group-focus-within/field:text-destructive',\n labelClassName\n )}\n >\n {label}\n {required && <span className=\"text-destructive ml-0.5\">*</span>}\n </label>\n </div>\n {description && !error && (\n <p className=\"text-xs text-muted-foreground/70 mt-1 pl-0.5\">{description}</p>\n )}\n {error && (\n <div id={`${name}-error`} role=\"alert\" className=\"flex items-start gap-1.5 mt-1\">\n <AlertCircle className=\"h-3 w-3 text-destructive flex-shrink-0 mt-0.5\" />\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-xs font-medium text-destructive\">{error.message}</p>\n {errorHint && (\n <p className=\"text-2xs text-destructive/70 mt-0.5\">{errorHint}</p>\n )}\n </div>\n </div>\n )}\n </div>\n );\n }\n\n return (\n <div className={cn('space-y-1.5', colSpanClasses[cols], className)}>\n {label && (\n <Label\n htmlFor={name}\n className={cn(\n 'text-xs font-medium',\n error && 'text-destructive'\n )}\n >\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </Label>\n )}\n\n {children({\n ...field,\n error: error?.message,\n })}\n\n {description && !error && (\n <p className=\"text-xs text-muted-foreground/70\">\n {description}\n </p>\n )}\n\n {error && (\n <div id={`${name}-error`} role=\"alert\" className=\"flex items-start gap-1.5 mt-1\">\n <AlertCircle className=\"h-3 w-3 text-destructive flex-shrink-0 mt-0.5\" />\n <p className=\"text-xs font-medium text-destructive\">\n {error.message}\n </p>\n </div>\n )}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '@/components/ui/collapsible';\nimport { ChevronRight } from 'lucide-react';\nimport { useState } from 'react';\n\ninterface FormSectionProps {\n title: string;\n description?: string;\n children: ReactNode;\n className?: string;\n collapsible?: boolean;\n defaultOpen?: boolean;\n icon?: ReactNode;\n}\n\nexport function FormSection({\n title,\n children,\n className,\n collapsible = false,\n defaultOpen = true,\n icon,\n}: FormSectionProps) {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n\n if (collapsible) {\n return (\n <Collapsible open={isOpen} onOpenChange={setIsOpen} className={className}>\n <CollapsibleTrigger asChild>\n <div\n className={cn(\n 'flex items-center gap-2 cursor-pointer',\n 'hover:bg-muted/40 -mx-2 px-2 py-1 rounded-md transition-colors duration-150'\n )}\n >\n <ChevronRight\n className={cn(\n 'h-3 w-3 text-muted-foreground/50 transition-transform duration-200',\n isOpen && 'rotate-90'\n )}\n />\n {icon && (\n <div className=\"text-accent-cyan/70 flex-shrink-0\">\n {icon}\n </div>\n )}\n <h3 className=\"text-xs font-semibold uppercase tracking-wider text-accent-cyan\">\n {title}\n </h3>\n </div>\n </CollapsibleTrigger>\n <CollapsibleContent className=\"overflow-hidden data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\">\n <div className=\"border-b border-border/15 mt-0.5 mb-1.5\" />\n <div className=\"grid grid-cols-12 gap-x-3 gap-y-2.5\">\n {children}\n </div>\n </CollapsibleContent>\n </Collapsible>\n );\n }\n\n return (\n <div className={className}>\n <div className=\"flex items-center gap-2\">\n {icon && (\n <div className=\"text-accent-cyan/70 flex-shrink-0\">\n {icon}\n </div>\n )}\n <h3 className=\"text-xs font-semibold uppercase tracking-wider text-accent-cyan\">\n {title}\n </h3>\n </div>\n <div className=\"border-b border-border/15 mt-1 mb-1.5\" />\n <div className=\"grid grid-cols-12 gap-x-3 gap-y-2.5\">\n {children}\n </div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetTitle,\n} from '@/components/ui/sheet';\nimport { Button } from '@/components/ui/button';\nimport { ScrollArea } from '@/components/ui/scroll-area';\nimport { Loader2, X } from 'lucide-react';\nimport { cn } from '@/lib/utils';\n\ninterface FormSheetProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title: string;\n description?: string;\n children: ReactNode;\n onSubmit: () => void;\n onCancel?: () => void;\n isSubmitting?: boolean;\n submitLabel?: string;\n cancelLabel?: string;\n side?: 'top' | 'bottom' | 'left' | 'right';\n className?: string;\n icon?: ReactNode;\n}\n\nexport function FormSheet({\n open,\n onOpenChange,\n title,\n description,\n children,\n onSubmit,\n onCancel,\n isSubmitting = false,\n submitLabel = 'Kaydet',\n cancelLabel = 'İptal',\n side = 'right',\n className,\n icon,\n}: FormSheetProps) {\n const handleCancel = () => {\n onCancel?.();\n onOpenChange(false);\n };\n\n return (\n <Sheet open={open} onOpenChange={onOpenChange}>\n <SheetContent\n side={side}\n showCloseButton={false}\n className={cn(\n 'flex flex-col h-full p-0 gap-0 overflow-hidden bg-background backdrop-blur-xl',\n className\n )}\n >\n {/* Header - gradient */}\n <SheetHeader className=\"flex-shrink-0 px-4 py-2 border-b border-border/30 bg-gradient-to-r from-accent-cyan/3 via-transparent to-accent-violet/3\">\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"flex items-start gap-2.5\">\n {icon && (\n <div className=\"relative\">\n <div className=\"absolute inset-0 rounded-md bg-accent-cyan/15 blur-sm\" />\n <div className=\"relative flex h-8 w-8 items-center justify-center rounded-md bg-accent-cyan/10 border border-accent-cyan/30 text-accent-cyan\">\n {icon}\n </div>\n </div>\n )}\n <div className=\"space-y-0.5\">\n <SheetTitle className=\"text-sm font-medium text-muted-foreground\">\n {title}\n </SheetTitle>\n {description && (\n <SheetDescription className=\"text-xs text-muted-foreground/60\">\n {description}\n </SheetDescription>\n )}\n </div>\n </div>\n\n <button\n onClick={() => onOpenChange(false)}\n className=\"flex-shrink-0 p-2 -m-2 rounded-lg text-muted-foreground hover:text-foreground hover:bg-muted transition-colors duration-150\"\n >\n <X className=\"h-5 w-5\" />\n </button>\n </div>\n </SheetHeader>\n\n {/* Scrollable Content */}\n <ScrollArea className=\"flex-1 min-h-0\">\n <div className=\"px-4 py-2 space-y-3 divide-y divide-border/30 [&>*]:pt-3 [&>*:first-child]:pt-0\">\n {children}\n </div>\n </ScrollArea>\n\n {/* Footer - gradient */}\n <SheetFooter className=\"flex-shrink-0 px-4 py-2 border-t border-border/30 bg-gradient-to-r from-accent-violet/3 via-transparent to-accent-cyan/3 gap-2.5\">\n <div className=\"flex items-center justify-end gap-2.5 w-full\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={handleCancel}\n className=\"h-8 px-3\"\n >\n {cancelLabel}\n </Button>\n <Button\n type=\"submit\"\n onClick={onSubmit}\n disabled={isSubmitting}\n className=\"h-8 px-4\"\n >\n {isSubmitting ? (\n <>\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n İşleniyor...\n </>\n ) : (\n submitLabel\n )}\n </Button>\n </div>\n </SheetFooter>\n </SheetContent>\n </Sheet>\n );\n}\n","'use client';\n\nimport { useFormStatus } from 'react-dom';\nimport { Loader2 } from 'lucide-react';\nimport { Button } from '@/components/ui/button';\nimport { type buttonVariants } from '@/components/ui/button.variants';\nimport type { VariantProps } from 'class-variance-authority';\n\ntype ButtonProps = React.ComponentProps<typeof Button> & VariantProps<typeof buttonVariants>;\n\ninterface SubmitButtonProps extends Omit<ButtonProps, 'type'> {\n /** Loading text shown when form is submitting */\n loadingText?: string;\n /** Override pending state (useful with react-hook-form) */\n isPending?: boolean;\n}\n\n/**\n * Submit button that automatically shows loading state during form submission.\n *\n * Works with:\n * 1. React 19 form actions (automatic via useFormStatus)\n * 2. react-hook-form (pass isPending prop)\n *\n * @example\n * ```tsx\n * // With React 19 form actions\n * <form action={formAction}>\n * <SubmitButton>Save</SubmitButton>\n * </form>\n *\n * // With react-hook-form\n * <form onSubmit={handleSubmit(onSubmit)}>\n * <SubmitButton isPending={isSubmitting}>Save</SubmitButton>\n * </form>\n * ```\n */\nexport function SubmitButton({\n children,\n loadingText = 'Saving...',\n isPending: isPendingProp,\n disabled,\n ...props\n}: SubmitButtonProps) {\n const { pending: formPending } = useFormStatus();\n\n // Use prop if provided, otherwise fall back to useFormStatus\n const isPending = isPendingProp ?? formPending;\n\n return (\n <Button type=\"submit\" disabled={disabled || isPending} {...props}>\n {isPending ? (\n <>\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n {loadingText}\n </>\n ) : (\n children\n )}\n </Button>\n );\n}\n\n/**\n * Form submit button with custom loading indicator\n * Provides more control over the loading state UI\n */\nexport function SubmitButtonWithStatus({\n children,\n loadingContent,\n isPending: isPendingProp,\n disabled,\n ...props\n}: Omit<SubmitButtonProps, 'loadingText'> & {\n loadingContent: React.ReactNode;\n}) {\n const { pending: formPending } = useFormStatus();\n const isPending = isPendingProp ?? formPending;\n\n return (\n <Button type=\"submit\" disabled={disabled || isPending} {...props}>\n {isPending ? loadingContent : children}\n </Button>\n );\n}\n","import type { Control, FieldPath, FieldValues } from 'react-hook-form';\nimport { Input } from '@/components/ui/input';\nimport { FormField } from '../FormField';\nimport { cn } from '@/lib/utils';\n\ninterface TextFieldProps<TFieldValues extends FieldValues> {\n name: FieldPath<TFieldValues>;\n control: Control<TFieldValues>;\n label?: string;\n description?: string;\n required?: boolean;\n placeholder?: string;\n type?: 'text' | 'email' | 'password' | 'tel' | 'url' | 'number';\n disabled?: boolean;\n className?: string;\n cols?: 1 | 2 | 3 | 4 | 6 | 12;\n icon?: React.ReactNode;\n errorHint?: string;\n /** Datalist ID for suggestions (use with datalist element) */\n list?: string;\n /** Suggestions for datalist (alternative to providing list ID separately) */\n suggestions?: string[];\n}\n\nexport function TextField<TFieldValues extends FieldValues>({\n name,\n control,\n label,\n description,\n required,\n placeholder,\n type = 'text',\n disabled,\n className,\n cols,\n icon,\n errorHint,\n list,\n suggestions,\n}: TextFieldProps<TFieldValues>) {\n // Generate a unique datalist ID if suggestions are provided\n const datalistId = suggestions?.length ? `${String(name)}-suggestions` : list;\n\n return (\n <FormField\n floatingLabel\n name={name}\n control={control}\n label={label}\n description={description}\n required={required}\n className={className}\n cols={cols}\n errorHint={errorHint}\n labelClassName={icon ? 'left-10' : undefined}\n >\n {({ value, onChange, onBlur, ref, error }) => (\n <div className=\"relative\">\n {icon && (\n <div className=\"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground/50\">\n {icon}\n </div>\n )}\n <Input\n ref={ref as React.Ref<HTMLInputElement>}\n type={type}\n value={(value as string) ?? ''}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n placeholder={label ? ' ' : placeholder}\n disabled={disabled}\n list={datalistId}\n className={cn(\n 'h-8',\n icon && 'pl-10',\n error && 'border-destructive bg-destructive/5 focus-visible:ring-destructive/30',\n disabled && 'opacity-50 cursor-not-allowed'\n )}\n />\n {suggestions?.length ? (\n <datalist id={datalistId}>\n {suggestions.map((suggestion) => (\n <option key={suggestion} value={suggestion} />\n ))}\n </datalist>\n ) : null}\n </div>\n )}\n </FormField>\n );\n}\n","import type { Control, FieldPath, FieldValues } from 'react-hook-form';\nimport { Input } from '@/components/ui/input';\nimport { FormField } from '../FormField';\nimport { cn } from '@/lib/utils';\nimport { Minus, Plus } from 'lucide-react';\n\ninterface NumberFieldProps<TFieldValues extends FieldValues> {\n name: FieldPath<TFieldValues>;\n control: Control<TFieldValues>;\n label?: string;\n description?: string;\n required?: boolean;\n placeholder?: string;\n min?: number;\n max?: number;\n step?: number;\n disabled?: boolean;\n className?: string;\n cols?: 1 | 2 | 3 | 4 | 6 | 12;\n showControls?: boolean;\n errorHint?: string;\n}\n\nexport function NumberField<TFieldValues extends FieldValues>({\n name,\n control,\n label,\n description,\n required,\n placeholder,\n min,\n max,\n step = 1,\n disabled,\n className,\n cols,\n showControls = false,\n errorHint,\n}: NumberFieldProps<TFieldValues>) {\n return (\n <FormField\n floatingLabel\n name={name}\n control={control}\n label={label}\n description={description}\n required={required}\n className={className}\n cols={cols}\n errorHint={errorHint}\n >\n {({ value, onChange, onBlur, ref, error }) => {\n const numValue = value !== undefined && value !== null ? Number(value) : undefined;\n\n const increment = () => {\n const current = numValue ?? min ?? 0;\n const next = current + step;\n if (max === undefined || next <= max) {\n onChange(next);\n }\n };\n\n const decrement = () => {\n const current = numValue ?? min ?? 0;\n const next = current - step;\n if (min === undefined || next >= min) {\n onChange(next);\n }\n };\n\n return (\n <div className=\"relative flex\">\n {showControls && (\n <button\n type=\"button\"\n onClick={decrement}\n disabled={disabled || (min !== undefined && (numValue ?? 0) <= min)}\n className={cn(\n 'flex items-center justify-center w-8 h-8',\n 'border border-r-0 rounded-l-md',\n 'bg-muted/50 hover:bg-muted',\n 'text-muted-foreground hover:text-foreground',\n 'transition-colors duration-150',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n error && 'border-destructive'\n )}\n >\n <Minus className=\"h-4 w-4\" />\n </button>\n )}\n <Input\n ref={ref as React.Ref<HTMLInputElement>}\n type=\"number\"\n value={numValue !== undefined ? String(numValue) : ''}\n onChange={(e) => {\n const val = e.target.value;\n onChange(val === '' ? undefined : Number(val));\n }}\n onBlur={onBlur}\n placeholder={label ? ' ' : placeholder}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n className={cn(\n 'h-8 text-center',\n '[appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none',\n showControls && 'rounded-none',\n error && 'border-destructive bg-destructive/5 focus-visible:ring-destructive/30',\n disabled && 'opacity-50 cursor-not-allowed'\n )}\n />\n {showControls && (\n <button\n type=\"button\"\n onClick={increment}\n disabled={disabled || (max !== undefined && (numValue ?? 0) >= max)}\n className={cn(\n 'flex items-center justify-center w-8 h-8',\n 'border border-l-0 rounded-r-md',\n 'bg-muted/50 hover:bg-muted',\n 'text-muted-foreground hover:text-foreground',\n 'transition-colors duration-150',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n error && 'border-destructive'\n )}\n >\n <Plus className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n );\n }}\n </FormField>\n );\n}\n","import { useState } from 'react';\nimport type { Control, FieldPath, FieldValues } from 'react-hook-form';\nimport { Check, ChevronsUpDown } from 'lucide-react';\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from '@/components/ui/command';\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '@/components/ui/popover';\nimport { FormField } from '../FormField';\nimport { cn } from '@/lib/utils';\nimport type { SelectOption } from '@/types/common';\n\ninterface SelectFieldProps<TFieldValues extends FieldValues> {\n name: FieldPath<TFieldValues>;\n control: Control<TFieldValues>;\n label?: string;\n description?: string;\n required?: boolean;\n placeholder?: string;\n searchPlaceholder?: string;\n emptyText?: string;\n options: SelectOption[];\n disabled?: boolean;\n className?: string;\n cols?: 1 | 2 | 3 | 4 | 6 | 12;\n errorHint?: string;\n}\n\nexport function SelectField<TFieldValues extends FieldValues>({\n name,\n control,\n label,\n description,\n required,\n placeholder = 'Seçiniz...',\n searchPlaceholder = 'Ara...',\n emptyText = 'Sonuç bulunamadı.',\n options,\n disabled,\n className,\n cols,\n errorHint,\n}: SelectFieldProps<TFieldValues>) {\n const [open, setOpen] = useState(false);\n\n return (\n <FormField\n floatingLabel\n isActive={open}\n name={name}\n control={control}\n label={label}\n description={description}\n required={required}\n className={className}\n cols={cols}\n errorHint={errorHint}\n >\n {({ value, onChange, error }) => {\n const selectedOption = options.find(\n (opt) => String(opt.value) === String(value)\n );\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n role=\"combobox\"\n aria-expanded={open}\n disabled={disabled}\n className={cn(\n 'flex items-center h-8 w-full rounded-md border border-border bg-transparent',\n 'text-xs px-3 justify-between',\n 'hover:border-accent-cyan/40 hover:bg-card',\n 'focus:border-accent-cyan focus:ring-accent-cyan/20 focus:ring-[3px] focus:outline-none',\n 'transition duration-150',\n !value && 'text-muted-foreground',\n open && 'border-accent-cyan ring-accent-cyan/20 ring-[3px] bg-card',\n error &&\n 'border-destructive bg-destructive/5 focus:ring-destructive/30',\n error && open && 'border-destructive ring-destructive/20 ring-[3px]',\n disabled && 'opacity-50 cursor-not-allowed'\n )}\n >\n <span className=\"truncate\">\n {selectedOption?.label ?? (label ? ' ' : placeholder)}\n </span>\n <ChevronsUpDown className=\"ml-2 h-4 w-4 shrink-0 opacity-50\" />\n </button>\n </PopoverTrigger>\n <PopoverContent className=\"w-[--radix-popover-trigger-width] p-0\">\n <Command>\n <CommandInput placeholder={searchPlaceholder} />\n <CommandList>\n <CommandEmpty>{emptyText}</CommandEmpty>\n <CommandGroup>\n {options.map((option) => (\n <CommandItem\n key={String(option.value)}\n value={option.label}\n onSelect={() => {\n onChange(option.value);\n setOpen(false);\n }}\n >\n <Check\n className={cn(\n 'mr-2 h-4 w-4',\n String(value) === String(option.value)\n ? 'opacity-100'\n : 'opacity-0'\n )}\n />\n <div>\n <span>{option.label}</span>\n {option.description && (\n <span className=\"block text-xs text-muted-foreground mt-0.5\">\n {option.description}\n </span>\n )}\n </div>\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n );\n }}\n </FormField>\n );\n}\n","import type { Control, FieldPath, FieldValues } from 'react-hook-form';\nimport { Switch } from '@/components/ui/switch';\nimport { FormField } from '../FormField';\nimport { cn } from '@/lib/utils';\n\ninterface SwitchFieldProps<TFieldValues extends FieldValues> {\n name: FieldPath<TFieldValues>;\n control: Control<TFieldValues>;\n label?: string;\n description?: string;\n disabled?: boolean;\n className?: string;\n cols?: 1 | 2 | 3 | 4 | 6 | 12;\n}\n\nexport function SwitchField<TFieldValues extends FieldValues>({\n name,\n control,\n label,\n description,\n disabled,\n className,\n cols,\n}: SwitchFieldProps<TFieldValues>) {\n return (\n <FormField\n name={name}\n control={control}\n className={className}\n cols={cols}\n >\n {({ value, onChange }) => {\n const isChecked = (value as boolean) ?? false;\n\n return (\n <div className=\"flex items-center justify-between gap-4\">\n <div className=\"space-y-0.5 flex-1\">\n {label && (\n <label\n htmlFor={name}\n className={cn(\n 'text-xs font-medium cursor-pointer',\n disabled && 'cursor-not-allowed opacity-50'\n )}\n >\n {label}\n </label>\n )}\n {description && (\n <p className=\"text-xs text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n\n <Switch\n id={name}\n checked={isChecked}\n onCheckedChange={onChange}\n disabled={disabled}\n size=\"sm\"\n />\n </div>\n );\n }}\n </FormField>\n );\n}\n","import type { Control, FieldPath, FieldValues } from 'react-hook-form';\nimport { Textarea } from '@/components/ui/textarea';\nimport { FormField } from '../FormField';\nimport { cn } from '@/lib/utils';\n\ninterface TextareaFieldProps<TFieldValues extends FieldValues> {\n name: FieldPath<TFieldValues>;\n control: Control<TFieldValues>;\n label?: string;\n description?: string;\n required?: boolean;\n placeholder?: string;\n rows?: number;\n maxLength?: number;\n showCount?: boolean;\n disabled?: boolean;\n className?: string;\n cols?: 1 | 2 | 3 | 4 | 6 | 12;\n errorHint?: string;\n}\n\nexport function TextareaField<TFieldValues extends FieldValues>({\n name,\n control,\n label,\n description,\n required,\n placeholder,\n rows = 3,\n maxLength,\n showCount = false,\n disabled,\n className,\n cols,\n errorHint,\n}: TextareaFieldProps<TFieldValues>) {\n return (\n <FormField\n floatingLabel\n name={name}\n control={control}\n label={label}\n description={description}\n required={required}\n className={className}\n cols={cols}\n errorHint={errorHint}\n >\n {({ value, onChange, onBlur, ref, error }) => {\n const charCount = ((value as string) ?? '').length;\n const isNearLimit = maxLength && charCount > maxLength * 0.8;\n const isAtLimit = maxLength && charCount >= maxLength;\n\n return (\n <div className=\"relative\">\n <Textarea\n ref={ref as React.Ref<HTMLTextAreaElement>}\n value={(value as string) ?? ''}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n placeholder={label ? ' ' : placeholder}\n rows={rows}\n maxLength={maxLength}\n disabled={disabled}\n className={cn(\n 'resize-none',\n showCount && 'pb-6',\n error && 'border-destructive bg-destructive/5 focus-visible:ring-destructive/30',\n disabled && 'opacity-50 cursor-not-allowed'\n )}\n />\n\n {showCount && maxLength && (\n <div className={cn(\n 'absolute bottom-2 right-2 text-xs tabular-nums',\n isAtLimit\n ? 'text-destructive'\n : isNearLimit\n ? 'text-status-warning'\n : 'text-muted-foreground'\n )}>\n {charCount}/{maxLength}\n </div>\n )}\n </div>\n );\n }}\n </FormField>\n );\n}\n","import type { Control, FieldPath, FieldValues } from 'react-hook-form';\nimport { Checkbox } from '@/components/ui/checkbox';\nimport { FormField } from '../FormField';\nimport { cn } from '@/lib/utils';\n\ninterface CheckboxFieldProps<TFieldValues extends FieldValues> {\n name: FieldPath<TFieldValues>;\n control: Control<TFieldValues>;\n label?: string;\n description?: string;\n disabled?: boolean;\n className?: string;\n cols?: 1 | 2 | 3 | 4 | 6 | 12;\n}\n\nexport function CheckboxField<TFieldValues extends FieldValues>({\n name,\n control,\n label,\n description,\n disabled,\n className,\n cols,\n}: CheckboxFieldProps<TFieldValues>) {\n return (\n <FormField\n name={name}\n control={control}\n className={className}\n cols={cols}\n >\n {({ value, onChange }) => {\n const isChecked = (value as boolean) ?? false;\n\n return (\n <label\n htmlFor={name}\n className={cn(\n 'flex items-start gap-2 cursor-pointer',\n disabled && 'cursor-not-allowed opacity-50'\n )}\n >\n <Checkbox\n id={name}\n checked={isChecked}\n onCheckedChange={onChange}\n disabled={disabled}\n className=\"mt-0.5\"\n />\n\n <div className=\"space-y-0.5\">\n {label && (\n <span className=\"text-sm\">\n {label}\n </span>\n )}\n {description && (\n <span className=\"block text-xs text-muted-foreground\">\n {description}\n </span>\n )}\n </div>\n </label>\n );\n }}\n </FormField>\n );\n}\n","import type { Control, FieldPath, FieldValues } from 'react-hook-form';\nimport { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group';\nimport { FormField } from '../FormField';\nimport { cn } from '@/lib/utils';\n\ninterface RadioOption {\n value: string;\n label: string;\n description?: string;\n icon?: React.ReactNode;\n}\n\ninterface RadioGroupFieldProps<TFieldValues extends FieldValues> {\n name: FieldPath<TFieldValues>;\n control: Control<TFieldValues>;\n label?: string;\n description?: string;\n required?: boolean;\n options: RadioOption[];\n orientation?: 'horizontal' | 'vertical';\n disabled?: boolean;\n className?: string;\n cols?: 1 | 2 | 3 | 4 | 6 | 12;\n}\n\nexport function RadioGroupField<TFieldValues extends FieldValues>({\n name,\n control,\n label,\n description,\n required,\n options,\n orientation = 'vertical',\n disabled,\n className,\n cols,\n}: RadioGroupFieldProps<TFieldValues>) {\n return (\n <FormField\n name={name}\n control={control}\n label={label}\n description={description}\n required={required}\n className={className}\n cols={cols}\n >\n {({ value, onChange }) => (\n <RadioGroup\n value={(value as string) ?? ''}\n onValueChange={onChange}\n disabled={disabled}\n className={cn(\n orientation === 'horizontal' ? 'flex flex-row flex-wrap gap-4' : 'flex flex-col gap-2'\n )}\n >\n {options.map((option) => (\n <label\n key={option.value}\n htmlFor={`${name}-${option.value}`}\n className={cn(\n 'flex items-start gap-2 cursor-pointer',\n disabled && 'cursor-not-allowed opacity-50'\n )}\n >\n <RadioGroupItem\n value={option.value}\n id={`${name}-${option.value}`}\n className=\"mt-0.5\"\n />\n\n <div className=\"space-y-0.5\">\n <div className=\"flex items-center gap-2\">\n {option.icon && (\n <span className=\"text-muted-foreground\">\n {option.icon}\n </span>\n )}\n <span className=\"text-sm\">\n {option.label}\n </span>\n </div>\n {option.description && (\n <p className=\"text-xs text-muted-foreground\">\n {option.description}\n </p>\n )}\n </div>\n </label>\n ))}\n </RadioGroup>\n )}\n </FormField>\n );\n}\n","import { useState } from 'react';\nimport type { Control, FieldPath, FieldValues } from 'react-hook-form';\nimport { Check, ChevronsUpDown } from 'lucide-react';\nimport { Button } from '@/components/ui/button';\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from '@/components/ui/command';\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '@/components/ui/popover';\nimport { FormField } from '../FormField';\nimport { cn } from '@/lib/utils';\nimport type { SelectOption } from '@/types/common';\n\ninterface ComboboxFieldProps<TFieldValues extends FieldValues> {\n name: FieldPath<TFieldValues>;\n control: Control<TFieldValues>;\n label?: string;\n description?: string;\n required?: boolean;\n placeholder?: string;\n searchPlaceholder?: string;\n emptyText?: string;\n options: SelectOption[];\n disabled?: boolean;\n className?: string;\n cols?: 1 | 2 | 3 | 4 | 6 | 12;\n errorHint?: string;\n}\n\nexport function ComboboxField<TFieldValues extends FieldValues>({\n name,\n control,\n label,\n description,\n required,\n placeholder = 'Seçiniz...',\n searchPlaceholder = 'Ara...',\n emptyText = 'Sonuç bulunamadı.',\n options,\n disabled,\n className,\n cols,\n errorHint,\n}: ComboboxFieldProps<TFieldValues>) {\n const [open, setOpen] = useState(false);\n\n return (\n <FormField\n name={name}\n control={control}\n label={label}\n description={description}\n required={required}\n className={className}\n cols={cols}\n errorHint={errorHint}\n >\n {({ value, onChange, error }) => {\n const selectedOption = options.find((opt) => opt.value === value);\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n role=\"combobox\"\n aria-expanded={open}\n disabled={disabled}\n className={cn(\n 'w-full justify-between h-8',\n !value && 'text-muted-foreground',\n error && 'border-destructive bg-destructive/5',\n disabled && 'opacity-50 cursor-not-allowed'\n )}\n >\n {selectedOption?.label ?? placeholder}\n <ChevronsUpDown className=\"ml-2 h-4 w-4 shrink-0 opacity-50\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-[--radix-popover-trigger-width] p-0\">\n <Command>\n <CommandInput placeholder={searchPlaceholder} />\n <CommandList>\n <CommandEmpty>{emptyText}</CommandEmpty>\n <CommandGroup>\n {options.map((option) => (\n <CommandItem\n key={option.value}\n value={option.label}\n onSelect={() => {\n onChange(option.value);\n setOpen(false);\n }}\n >\n <Check\n className={cn(\n 'mr-2 h-4 w-4',\n value === option.value ? 'opacity-100' : 'opacity-0'\n )}\n />\n {option.label}\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n );\n }}\n </FormField>\n );\n}\n","import { useState } from 'react';\nimport type { Control, FieldPath, FieldValues } from 'react-hook-form';\nimport { Check, ChevronsUpDown, X } from 'lucide-react';\nimport { Button } from '@/components/ui/button';\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from '@/components/ui/command';\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '@/components/ui/popover';\nimport { Badge } from '@/components/ui/badge';\nimport { FormField } from '../FormField';\nimport { cn } from '@/lib/utils';\nimport type { SelectOption } from '@/types/common';\n\ninterface MultiSelectFieldProps<TFieldValues extends FieldValues> {\n name: FieldPath<TFieldValues>;\n control: Control<TFieldValues>;\n label?: string;\n description?: string;\n required?: boolean;\n placeholder?: string;\n searchPlaceholder?: string;\n emptyText?: string;\n options: SelectOption[];\n maxItems?: number;\n disabled?: boolean;\n className?: string;\n cols?: 1 | 2 | 3 | 4 | 6 | 12;\n errorHint?: string;\n}\n\nexport function MultiSelectField<TFieldValues extends FieldValues>({\n name,\n control,\n label,\n description,\n required,\n placeholder = 'Seçiniz...',\n searchPlaceholder = 'Ara...',\n emptyText = 'Sonuç bulunamadı.',\n options,\n maxItems,\n disabled,\n className,\n cols,\n errorHint,\n}: MultiSelectFieldProps<TFieldValues>) {\n const [open, setOpen] = useState(false);\n\n return (\n <FormField\n name={name}\n control={control}\n label={label}\n description={description}\n required={required}\n className={className}\n cols={cols}\n errorHint={errorHint}\n >\n {({ value, onChange, error }) => {\n const selectedValues = (value as string[]) ?? [];\n const selectedOptions = options.filter((opt) =>\n selectedValues.includes(String(opt.value))\n );\n const isMaxReached = maxItems ? selectedValues.length >= maxItems : false;\n\n const handleSelect = (optionValue: string | number) => {\n const stringValue = String(optionValue);\n const isSelected = selectedValues.includes(stringValue);\n if (isSelected) {\n onChange(selectedValues.filter((v) => v !== stringValue));\n } else if (!isMaxReached) {\n onChange([...selectedValues, stringValue]);\n }\n };\n\n const handleRemove = (optionValue: string | number, e: React.MouseEvent) => {\n e.stopPropagation();\n onChange(selectedValues.filter((v) => v !== String(optionValue)));\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n role=\"combobox\"\n aria-expanded={open}\n disabled={disabled}\n className={cn(\n 'w-full min-h-8 h-auto justify-between',\n error && 'border-destructive bg-destructive/5',\n disabled && 'opacity-50 cursor-not-allowed'\n )}\n >\n <div className=\"flex flex-wrap gap-1 flex-1\">\n {selectedOptions.length > 0 ? (\n selectedOptions.map((option) => (\n <Badge\n key={String(option.value)}\n variant=\"secondary\"\n className=\"mr-1\"\n >\n {option.label}\n <button\n type=\"button\"\n className=\"ml-1 rounded-full outline-none ring-offset-background focus:ring-2 focus:ring-ring focus:ring-offset-2\"\n onClick={(e) => handleRemove(option.value, e)}\n >\n <X className=\"h-3 w-3\" />\n </button>\n </Badge>\n ))\n ) : (\n <span className=\"text-muted-foreground\">{placeholder}</span>\n )}\n </div>\n <div className=\"flex items-center\">\n {maxItems && (\n <span className=\"text-xs text-muted-foreground mr-2\">\n {selectedValues.length}/{maxItems}\n </span>\n )}\n <ChevronsUpDown className=\"h-4 w-4 shrink-0 opacity-50\" />\n </div>\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-[--radix-popover-trigger-width] p-0\">\n <Command>\n <CommandInput placeholder={searchPlaceholder} />\n <CommandList>\n <CommandEmpty>{emptyText}</CommandEmpty>\n <CommandGroup>\n {options.map((option) => {\n const isSelected = selectedValues.includes(String(option.value));\n const isDisabled = !isSelected && isMaxReached;\n\n return (\n <CommandItem\n key={String(option.value)}\n value={option.label}\n onSelect={() => handleSelect(option.value)}\n disabled={isDisabled}\n className={cn(isDisabled && 'opacity-50')}\n >\n <Check\n className={cn(\n 'mr-2 h-4 w-4',\n isSelected ? 'opacity-100' : 'opacity-0'\n )}\n />\n {option.label}\n </CommandItem>\n );\n })}\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n );\n }}\n </FormField>\n );\n}\n","import { useState, useEffect, useCallback } from 'react';\nimport type { Control, FieldPath, FieldValues } from 'react-hook-form';\nimport { Check, ChevronsUpDown, Loader2 } from 'lucide-react';\nimport { Button } from '@/components/ui/button';\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from '@/components/ui/command';\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '@/components/ui/popover';\nimport { FormField } from '../FormField';\nimport { cn } from '@/lib/utils';\nimport type { SelectOption } from '@/types/common';\n\ninterface AsyncSelectFieldProps<TFieldValues extends FieldValues> {\n name: FieldPath<TFieldValues>;\n control: Control<TFieldValues>;\n label?: string;\n description?: string;\n required?: boolean;\n placeholder?: string;\n searchPlaceholder?: string;\n emptyText?: string;\n loadingText?: string;\n loadOptions: (search: string) => Promise<SelectOption[]>;\n debounceMs?: number;\n disabled?: boolean;\n className?: string;\n cols?: 1 | 2 | 3 | 4 | 6 | 12;\n}\n\nfunction useDebounce<T>(value: T, delay: number): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay);\n return () => clearTimeout(timer);\n }, [value, delay]);\n\n return debouncedValue;\n}\n\nexport function AsyncSelectField<TFieldValues extends FieldValues>({\n name,\n control,\n label,\n description,\n required,\n placeholder = 'Select...',\n searchPlaceholder = 'Search...',\n emptyText = 'No results found.',\n loadingText = 'Loading...',\n loadOptions,\n debounceMs = 300,\n disabled,\n className,\n cols,\n}: AsyncSelectFieldProps<TFieldValues>) {\n const [open, setOpen] = useState(false);\n const [search, setSearch] = useState('');\n const [options, setOptions] = useState<SelectOption[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [selectedLabel, setSelectedLabel] = useState<string | null>(null);\n\n const debouncedSearch = useDebounce(search, debounceMs);\n\n const fetchOptions = useCallback(async (searchTerm: string) => {\n setIsLoading(true);\n try {\n const results = await loadOptions(searchTerm);\n setOptions(results);\n } catch (error) {\n if (import.meta.env.DEV) console.error('Failed to load options:', error);\n setOptions([]);\n } finally {\n setIsLoading(false);\n }\n }, [loadOptions]);\n\n useEffect(() => {\n if (open) {\n fetchOptions(debouncedSearch);\n }\n }, [debouncedSearch, open, fetchOptions]);\n\n return (\n <FormField\n floatingLabel\n isActive={open}\n name={name}\n control={control}\n label={label}\n description={description}\n required={required}\n className={className}\n cols={cols}\n >\n {({ value, onChange, error }) => {\n const displayLabel = selectedLabel ?? options.find((opt) => opt.value === value)?.label;\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n role=\"combobox\"\n aria-expanded={open}\n disabled={disabled}\n size=\"sm\"\n className={cn(\n 'w-full justify-between font-normal',\n !value && 'text-muted-foreground',\n error && 'border-destructive'\n )}\n >\n {displayLabel ?? placeholder}\n <ChevronsUpDown className=\"ml-2 h-4 w-4 shrink-0 opacity-50\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-[--radix-popover-trigger-width] p-0\">\n <Command shouldFilter={false}>\n <CommandInput\n placeholder={searchPlaceholder}\n value={search}\n onValueChange={setSearch}\n />\n <CommandList>\n {isLoading ? (\n <div className=\"flex items-center justify-center py-6\">\n <Loader2 className=\"h-4 w-4 animate-spin mr-2\" />\n <span className=\"text-sm text-muted-foreground\">{loadingText}</span>\n </div>\n ) : options.length === 0 ? (\n <CommandEmpty>{emptyText}</CommandEmpty>\n ) : (\n <CommandGroup>\n {options.map((option) => (\n <CommandItem\n key={String(option.value)}\n value={String(option.value)}\n onSelect={() => {\n onChange(option.value);\n setSelectedLabel(option.label);\n setOpen(false);\n }}\n >\n <Check\n className={cn(\n 'mr-2 h-4 w-4',\n value === option.value ? 'opacity-100' : 'opacity-0'\n )}\n />\n {option.label}\n </CommandItem>\n ))}\n </CommandGroup>\n )}\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n );\n }}\n </FormField>\n );\n}\n","import { useState } from 'react';\nimport type { Control, FieldPath, FieldValues } from 'react-hook-form';\nimport { format } from 'date-fns';\nimport { CalendarIcon, X } from 'lucide-react';\nimport { Button } from '@/components/ui/button';\nimport { Calendar } from '@/components/ui/calendar';\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '@/components/ui/popover';\nimport { FormField } from '../FormField';\nimport { cn } from '@/lib/utils';\n\ninterface DateFieldProps<TFieldValues extends FieldValues> {\n name: FieldPath<TFieldValues>;\n control: Control<TFieldValues>;\n label?: string;\n description?: string;\n required?: boolean;\n placeholder?: string;\n minDate?: Date;\n maxDate?: Date;\n disabledDates?: Date[];\n dateFormat?: string;\n disabled?: boolean;\n className?: string;\n cols?: 1 | 2 | 3 | 4 | 6 | 12;\n clearable?: boolean;\n errorHint?: string;\n}\n\nexport function DateField<TFieldValues extends FieldValues>({\n name,\n control,\n label,\n description,\n required,\n placeholder = 'Tarih seçiniz',\n minDate,\n maxDate,\n disabledDates,\n dateFormat = 'PPP',\n disabled,\n className,\n cols,\n clearable = true,\n errorHint,\n}: DateFieldProps<TFieldValues>) {\n const [open, setOpen] = useState(false);\n\n return (\n <FormField\n name={name}\n control={control}\n label={label}\n description={description}\n required={required}\n className={className}\n cols={cols}\n errorHint={errorHint}\n >\n {({ value, onChange, error }) => {\n const dateValue = value ? new Date(value as string | Date) : undefined;\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n disabled={disabled}\n className={cn(\n 'w-full justify-start text-left h-8 font-normal',\n !dateValue && 'text-muted-foreground',\n error && 'border-destructive bg-destructive/5',\n disabled && 'opacity-50 cursor-not-allowed'\n )}\n >\n <CalendarIcon className=\"mr-2 h-4 w-4\" />\n {dateValue ? format(dateValue, dateFormat) : placeholder}\n {clearable && dateValue && (\n <span\n role=\"button\"\n tabIndex={0}\n onClick={(e) => {\n e.stopPropagation();\n onChange(undefined);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n onChange(undefined);\n }\n }}\n className=\"ml-auto p-1 rounded hover:bg-muted cursor-pointer\"\n aria-label=\"Clear date\"\n >\n <X className=\"h-3 w-3\" />\n </span>\n )}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\n <Calendar\n mode=\"single\"\n selected={dateValue}\n onSelect={(date) => {\n onChange(date);\n setOpen(false);\n }}\n disabled={(date) => {\n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n if (disabledDates?.some((d) => d.toDateString() === date.toDateString())) return true;\n return false;\n }}\n initialFocus\n />\n </PopoverContent>\n </Popover>\n );\n }}\n </FormField>\n );\n}\n","import { useState } from 'react';\nimport type { Control, FieldPath, FieldValues } from 'react-hook-form';\nimport { format } from 'date-fns';\nimport { CalendarIcon, ArrowRight, X } from 'lucide-react';\nimport type { DateRange } from 'react-day-picker';\nimport { Button } from '@/components/ui/button';\nimport { Calendar } from '@/components/ui/calendar';\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '@/components/ui/popover';\nimport { FormField } from '../FormField';\nimport { cn } from '@/lib/utils';\n\ninterface DateRangeValue {\n from?: Date;\n to?: Date;\n}\n\ninterface DateRangeFieldProps<TFieldValues extends FieldValues> {\n name: FieldPath<TFieldValues>;\n control: Control<TFieldValues>;\n label?: string;\n description?: string;\n required?: boolean;\n placeholder?: string;\n minDate?: Date;\n maxDate?: Date;\n dateFormat?: string;\n disabled?: boolean;\n className?: string;\n cols?: 1 | 2 | 3 | 4 | 6 | 12;\n clearable?: boolean;\n errorHint?: string;\n}\n\nexport function DateRangeField<TFieldValues extends FieldValues>({\n name,\n control,\n label,\n description,\n required,\n placeholder = 'Tarih aralığı seçiniz',\n minDate,\n maxDate,\n dateFormat = 'LLL dd, y',\n disabled,\n className,\n cols,\n clearable = true,\n errorHint,\n}: DateRangeFieldProps<TFieldValues>) {\n const [open, setOpen] = useState(false);\n\n return (\n <FormField\n name={name}\n control={control}\n label={label}\n description={description}\n required={required}\n className={className}\n cols={cols}\n errorHint={errorHint}\n >\n {({ value, onChange, error }) => {\n const rangeValue = value as DateRangeValue | undefined;\n const dateRange: DateRange | undefined = rangeValue\n ? {\n from: rangeValue.from ? new Date(rangeValue.from) : undefined,\n to: rangeValue.to ? new Date(rangeValue.to) : undefined,\n }\n : undefined;\n\n const hasValue = dateRange?.from || dateRange?.to;\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n disabled={disabled}\n className={cn(\n 'w-full justify-start text-left h-8 font-normal',\n !hasValue && 'text-muted-foreground',\n error && 'border-destructive bg-destructive/5 focus:ring-destructive/30',\n disabled && 'opacity-50 cursor-not-allowed'\n )}\n >\n <CalendarIcon className={cn(\n 'mr-2 h-4 w-4',\n hasValue ? 'text-foreground' : 'text-muted-foreground'\n )} />\n\n {hasValue ? (\n <div className=\"flex items-center gap-2 flex-1\">\n <span>\n {dateRange?.from ? format(dateRange.from, dateFormat) : '...'}\n </span>\n <ArrowRight className=\"h-3 w-3 text-muted-foreground\" />\n <span className={cn(!dateRange?.to && 'text-muted-foreground')}>\n {dateRange?.to ? format(dateRange.to, dateFormat) : '...'}\n </span>\n </div>\n ) : (\n <span className=\"flex-1\">{placeholder}</span>\n )}\n\n {clearable && hasValue && (\n <span\n role=\"button\"\n tabIndex={0}\n onClick={(e) => {\n e.stopPropagation();\n onChange(undefined);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n onChange(undefined);\n }\n }}\n className=\"p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground transition-colors duration-150 cursor-pointer\"\n aria-label=\"Clear date range\"\n >\n <X className=\"h-3.5 w-3.5\" />\n </span>\n )}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\n <Calendar\n mode=\"range\"\n selected={dateRange}\n onSelect={(range) => {\n onChange({\n from: range?.from,\n to: range?.to,\n });\n }}\n disabled={(date) => {\n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n return false;\n }}\n numberOfMonths={2}\n initialFocus\n />\n </PopoverContent>\n </Popover>\n );\n }}\n </FormField>\n );\n}\n","import { useRef, useState, useCallback } from 'react';\nimport type { Control, FieldPath, FieldValues } from 'react-hook-form';\nimport { Upload, X, File, Image } from 'lucide-react';\nimport { FormField } from '../FormField';\nimport { cn } from '@/lib/utils';\n\n// Magic number signatures for common file types\nconst FILE_SIGNATURES: Record<string, number[][]> = {\n 'image/png': [[0x89, 0x50, 0x4e, 0x47]],\n 'image/jpeg': [[0xff, 0xd8, 0xff]],\n 'image/gif': [[0x47, 0x49, 0x46, 0x38]],\n 'image/webp': [[0x52, 0x49, 0x46, 0x46]], // RIFF header\n 'application/pdf': [[0x25, 0x50, 0x44, 0x46]],\n 'application/zip': [[0x50, 0x4b, 0x03, 0x04], [0x50, 0x4b, 0x05, 0x06]],\n};\n\nasync function validateMagicNumber(file: File, allowedTypes: string[]): Promise<boolean> {\n const typesToCheck = allowedTypes.filter((t) => t in FILE_SIGNATURES);\n if (typesToCheck.length === 0) return true; // No signatures to check\n\n const buffer = await file.slice(0, 8).arrayBuffer();\n const bytes = new Uint8Array(buffer);\n\n return typesToCheck.some((type) =>\n FILE_SIGNATURES[type]?.some((sig) =>\n sig.every((byte, i) => bytes[i] === byte)\n )\n );\n}\n\ninterface FileFieldProps<TFieldValues extends FieldValues> {\n name: FieldPath<TFieldValues>;\n control: Control<TFieldValues>;\n label?: string;\n description?: string;\n required?: boolean;\n accept?: string;\n allowedTypes?: string[]; // MIME types e.g. ['image/png', 'image/jpeg']\n maxSize?: number; // bytes\n multiple?: boolean;\n disabled?: boolean;\n className?: string;\n cols?: 1 | 2 | 3 | 4 | 6 | 12;\n errorHint?: string;\n}\n\nfunction formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 Bytes';\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n}\n\nfunction isImageFile(file: File): boolean {\n return file.type.startsWith('image/');\n}\n\nexport function FileField<TFieldValues extends FieldValues>({\n name,\n control,\n label,\n description,\n required,\n accept,\n allowedTypes,\n maxSize,\n multiple = false,\n disabled,\n className,\n cols,\n errorHint,\n}: FileFieldProps<TFieldValues>) {\n const inputRef = useRef<HTMLInputElement>(null);\n const [dragActive, setDragActive] = useState(false);\n const [previews, setPreviews] = useState<Map<string, string>>(new Map());\n const [typeError, setTypeError] = useState<string | null>(null);\n\n const handleFiles = useCallback(async (files: FileList | null, onChange: (value: unknown) => void) => {\n if (!files || files.length === 0) return;\n setTypeError(null);\n\n const fileArray = Array.from(files);\n\n // Validate MIME types\n if (allowedTypes && allowedTypes.length > 0) {\n const invalidFiles = fileArray.filter((f) => !allowedTypes.includes(f.type));\n if (invalidFiles.length > 0) {\n setTypeError(`Geçersiz dosya türü. İzin verilen: ${allowedTypes.join(', ')}`);\n return;\n }\n\n // Validate magic numbers for files that have known signatures\n for (const file of fileArray) {\n const validMagic = await validateMagicNumber(file, allowedTypes);\n if (!validMagic) {\n setTypeError(`Dosya içeriği beklenen türle eşleşmiyor: ${file.name}`);\n return;\n }\n }\n }\n\n // Validate file size\n if (maxSize) {\n const oversized = fileArray.filter((f) => f.size > maxSize);\n if (oversized.length > 0) {\n if (import.meta.env.DEV) console.warn(`Files exceed max size of ${formatFileSize(maxSize)}`);\n return;\n }\n }\n\n // Generate previews for images\n const newPreviews = new Map(previews);\n fileArray.forEach((file) => {\n if (isImageFile(file)) {\n const url = URL.createObjectURL(file);\n newPreviews.set(file.name, url);\n }\n });\n setPreviews(newPreviews);\n\n onChange(multiple ? fileArray : fileArray[0]);\n }, [allowedTypes, maxSize, multiple, previews]);\n\n const handleDrag = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (e.type === 'dragenter' || e.type === 'dragover') {\n setDragActive(true);\n } else if (e.type === 'dragleave') {\n setDragActive(false);\n }\n }, []);\n\n const handleDrop = useCallback((e: React.DragEvent, onChange: (value: unknown) => void) => {\n e.preventDefault();\n e.stopPropagation();\n setDragActive(false);\n handleFiles(e.dataTransfer.files, onChange);\n }, [handleFiles]);\n\n const removeFile = useCallback((fileToRemove: File, currentFiles: File | File[], onChange: (value: unknown) => void) => {\n // Clean up preview\n if (previews.has(fileToRemove.name)) {\n URL.revokeObjectURL(previews.get(fileToRemove.name)!);\n const newPreviews = new Map(previews);\n newPreviews.delete(fileToRemove.name);\n setPreviews(newPreviews);\n }\n\n if (Array.isArray(currentFiles)) {\n onChange(currentFiles.filter((f) => f !== fileToRemove));\n } else {\n onChange(undefined);\n }\n }, [previews]);\n\n return (\n <FormField\n name={name}\n control={control}\n label={label}\n description={description}\n required={required}\n className={className}\n cols={cols}\n errorHint={errorHint}\n >\n {({ value, onChange, error }) => {\n const files = value as File | File[] | undefined;\n const fileArray = files ? (Array.isArray(files) ? files : [files]) : [];\n\n return (\n <div className=\"space-y-2\">\n {/* Drop zone */}\n <div\n onDragEnter={handleDrag}\n onDragLeave={handleDrag}\n onDragOver={handleDrag}\n onDrop={(e) => handleDrop(e, onChange)}\n onClick={() => inputRef.current?.click()}\n className={cn(\n 'flex flex-col items-center justify-center rounded-lg p-4 cursor-pointer',\n 'border-2 border-dashed transition-colors duration-150',\n 'border-border hover:border-primary/50',\n dragActive && 'border-primary bg-primary/5',\n error && 'border-destructive bg-destructive/5',\n disabled && 'opacity-50 cursor-not-allowed'\n )}\n >\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={(e) => handleFiles(e.target.files, onChange)}\n className=\"hidden\"\n />\n\n <Upload className={cn(\n 'h-8 w-8 mb-2',\n dragActive ? 'text-primary' : error ? 'text-destructive' : 'text-muted-foreground'\n )} />\n\n <p className=\"text-sm text-center\">\n <span className=\"font-medium\">\n {dragActive ? 'Dosyaları buraya bırakın' : 'Dosya yüklemek için tıklayın'}\n </span>\n {!dragActive && (\n <span className=\"text-muted-foreground\"> veya sürükleyip bırakın</span>\n )}\n </p>\n\n <div className=\"flex items-center gap-2 text-xs text-muted-foreground mt-1\">\n {accept && <span>{accept}</span>}\n {accept && maxSize && <span>|</span>}\n {maxSize && <span>Maks. {formatFileSize(maxSize)}</span>}\n </div>\n </div>\n\n {/* Type validation error */}\n {typeError && (\n <p className=\"text-sm text-destructive\">{typeError}</p>\n )}\n\n {/* File list */}\n {fileArray.length > 0 && (\n <ul className=\"space-y-2\">\n {fileArray.map((file, index) => (\n <li\n key={`${file.name}-${index}`}\n className=\"flex items-center gap-3 rounded-lg p-2 border\"\n >\n {/* Preview or icon */}\n <div className=\"flex-shrink-0\">\n {previews.has(file.name) ? (\n <img\n src={previews.get(file.name)}\n alt={file.name}\n className=\"h-10 w-10 rounded object-cover\"\n />\n ) : (\n <div className=\"flex items-center justify-center h-10 w-10 rounded bg-muted\">\n {isImageFile(file) ? (\n <Image className=\"h-5 w-5 text-muted-foreground\" />\n ) : (\n <File className=\"h-5 w-5 text-muted-foreground\" />\n )}\n </div>\n )}\n </div>\n\n {/* File info */}\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium truncate\">\n {file.name}\n </p>\n <p className=\"text-xs text-muted-foreground\">\n {formatFileSize(file.size)}\n </p>\n </div>\n\n {/* Remove button */}\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n removeFile(file, files!, onChange);\n }}\n aria-label={`Dosyayı kaldır: ${file.name}`}\n className=\"p-1.5 rounded hover:bg-muted text-muted-foreground hover:text-destructive transition-colors duration-150\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n }}\n </FormField>\n );\n}\n","import { useState } from 'react';\nimport type { Control, FieldPath, FieldValues } from 'react-hook-form';\nimport { Input } from '@/components/ui/input';\nimport { FormField } from '../FormField';\nimport { cn } from '@/lib/utils';\nimport { Eye, EyeOff, Lock } from 'lucide-react';\n\ninterface PasswordFieldProps<TFieldValues extends FieldValues> {\n name: FieldPath<TFieldValues>;\n control: Control<TFieldValues>;\n label?: string;\n description?: string;\n required?: boolean;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n cols?: 1 | 2 | 3 | 4 | 6 | 12;\n showIcon?: boolean;\n errorHint?: string;\n}\n\nexport function PasswordField<TFieldValues extends FieldValues>({\n name,\n control,\n label,\n description,\n required,\n placeholder,\n disabled,\n className,\n cols,\n showIcon = true,\n errorHint,\n}: PasswordFieldProps<TFieldValues>) {\n const [showPassword, setShowPassword] = useState(false);\n\n return (\n <FormField\n floatingLabel\n name={name}\n control={control}\n label={label}\n description={description}\n required={required}\n className={className}\n cols={cols}\n errorHint={errorHint}\n labelClassName={showIcon ? 'left-10' : undefined}\n >\n {({ value, onChange, onBlur, ref, error }) => (\n <div className=\"relative\">\n {showIcon && (\n <div className=\"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground/50\">\n <Lock className=\"h-4 w-4\" />\n </div>\n )}\n\n <Input\n ref={ref as React.Ref<HTMLInputElement>}\n type={showPassword ? 'text' : 'password'}\n value={(value as string) ?? ''}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n placeholder={label ? ' ' : placeholder}\n disabled={disabled}\n className={cn(\n 'h-8 pr-10',\n showIcon && 'pl-10',\n error && 'border-destructive bg-destructive/5 focus-visible:ring-destructive/30',\n disabled && 'opacity-50 cursor-not-allowed'\n )}\n />\n\n <button\n type=\"button\"\n onClick={() => setShowPassword(!showPassword)}\n tabIndex={-1}\n className=\"absolute right-1 top-1/2 -translate-y-1/2 p-2 rounded-md text-muted-foreground hover:text-foreground hover:bg-muted transition-colors duration-150\"\n >\n {showPassword ? (\n <EyeOff className=\"h-4 w-4\" />\n ) : (\n <Eye className=\"h-4 w-4\" />\n )}\n </button>\n </div>\n )}\n </FormField>\n );\n}\n","import { useState, useRef, useEffect } from 'react';\nimport { cn } from '@/lib/utils';\nimport { Search, X, Clock, Filter, ChevronDown } from 'lucide-react';\n\nexport interface SearchBarProps {\n value: string;\n onChange: (value: string) => void;\n onFilterToggle?: () => void;\n filterActive?: boolean;\n placeholder?: string;\n recentSearches?: string[];\n onRecentSearchSelect?: (search: string) => void;\n recentSearchesLabel?: string;\n filterLabel?: string;\n clearLabel?: string;\n keyboardShortcut?: string;\n className?: string;\n}\n\nexport function SearchBar({\n value,\n onChange,\n onFilterToggle,\n filterActive = false,\n placeholder = 'Search...',\n recentSearches = [],\n onRecentSearchSelect,\n recentSearchesLabel = 'Recent Searches',\n filterLabel = 'Filters',\n clearLabel = 'Clear search',\n keyboardShortcut = '⌘K',\n className,\n}: SearchBarProps) {\n const [isFocused, setIsFocused] = useState(false);\n const [showRecent, setShowRecent] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setShowRecent(false);\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const handleFocus = () => {\n setIsFocused(true);\n if (recentSearches.length > 0 && !value) {\n setShowRecent(true);\n }\n };\n\n const handleBlur = () => {\n setIsFocused(false);\n setTimeout(() => setShowRecent(false), 150);\n };\n\n const handleClear = () => {\n onChange('');\n inputRef.current?.focus();\n };\n\n const handleRecentSelect = (search: string) => {\n onChange(search);\n onRecentSearchSelect?.(search);\n setShowRecent(false);\n };\n\n const shortcutParts = keyboardShortcut.split('');\n\n return (\n <div ref={containerRef} className={cn('relative flex-1', className)}>\n <div\n className={cn(\n 'flex items-center gap-2 rounded-lg border bg-card px-3 py-2 transition-all duration-200',\n isFocused\n ? 'border-primary ring-2 ring-primary/20'\n : 'border-border hover:border-border/80'\n )}\n >\n <Search className={cn(\n 'h-4 w-4 flex-shrink-0 transition-colors',\n isFocused ? 'text-primary' : 'text-muted-foreground'\n )} />\n\n <input\n ref={inputRef}\n type=\"text\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onFocus={handleFocus}\n onBlur={handleBlur}\n placeholder={placeholder}\n className={cn(\n 'flex-1 bg-transparent text-sm text-foreground placeholder:text-muted-foreground/60',\n 'focus:outline-none'\n )}\n />\n\n {value && (\n <button\n onClick={handleClear}\n aria-label={clearLabel}\n className=\"p-0.5 rounded hover:bg-muted text-muted-foreground hover:text-foreground transition-colors\"\n >\n <X className=\"h-3.5 w-3.5\" />\n </button>\n )}\n\n {!value && !isFocused && keyboardShortcut && (\n <kbd className=\"hidden sm:flex items-center gap-0.5 px-1.5 py-0.5 rounded border border-border bg-muted/50 text-xs text-muted-foreground\">\n {shortcutParts.map((char, i) => (\n <span key={i}>{char}</span>\n ))}\n </kbd>\n )}\n\n {onFilterToggle && (\n <>\n <div className=\"h-5 w-px bg-border\" />\n\n <button\n onClick={onFilterToggle}\n className={cn(\n 'flex items-center gap-1.5 px-2 py-1 rounded transition-all duration-200',\n filterActive\n ? 'bg-primary/10 text-primary border border-primary/30'\n : 'text-muted-foreground hover:text-foreground hover:bg-muted/50'\n )}\n >\n <Filter className=\"h-3.5 w-3.5\" />\n <span className=\"text-xs\">{filterLabel}</span>\n <ChevronDown className={cn(\n 'h-3 w-3 transition-transform duration-200',\n filterActive && 'rotate-180'\n )} />\n </button>\n </>\n )}\n </div>\n\n {showRecent && recentSearches.length > 0 && (\n <div className=\"absolute top-full left-0 right-0 mt-2 rounded-lg border border-border bg-popover shadow-lg z-50 animate-in fade-in slide-in-from-top-2 duration-200\">\n <div className=\"px-3 py-2 border-b border-border\">\n <span className=\"text-xs font-medium text-muted-foreground\">\n {recentSearchesLabel}\n </span>\n </div>\n <div className=\"p-1\">\n {recentSearches.slice(0, 5).map((search, index) => (\n <button\n key={index}\n onClick={() => handleRecentSelect(search)}\n className=\"flex items-center gap-2 w-full px-3 py-2 rounded text-left transition-colors hover:bg-muted/50 group\"\n >\n <Clock className=\"h-3.5 w-3.5 text-muted-foreground/60 group-hover:text-muted-foreground\" />\n <span className=\"text-sm text-muted-foreground group-hover:text-foreground\">\n {search}\n </span>\n </button>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n}\n","/**\n * Collapsible Section - Expandable group container with edit support\n * Reusable component for detail pages\n */\n\n'use client';\n\nimport { useState } from 'react';\nimport { ChevronRight, Pencil, Check, X, Loader2, type LucideIcon } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\n\ninterface CollapsibleSectionProps {\n title: string;\n icon: LucideIcon;\n children: React.ReactNode;\n defaultOpen?: boolean;\n itemCount?: number;\n status?: 'online' | 'offline';\n // Edit mode props\n editable?: boolean;\n isEditing?: boolean;\n isSaving?: boolean;\n onEdit?: () => void;\n onSave?: () => void;\n onCancel?: () => void;\n}\n\nexport function CollapsibleSection({\n title,\n icon: Icon,\n children,\n status,\n defaultOpen = false,\n itemCount,\n editable = false,\n isEditing = false,\n isSaving = false,\n onEdit,\n onSave,\n onCancel,\n}: CollapsibleSectionProps) {\n const [open, setOpen] = useState(defaultOpen);\n\n const handleEdit = () => {\n if (!open) setOpen(true);\n onEdit?.();\n };\n\n return (\n <div className={cn(\n 'group border-b last:border-b-0',\n isEditing ? 'border-primary/50' : 'border-border'\n )}>\n {/* Header row with shared background */}\n <div className={cn(\n 'flex items-center rounded transition-colors',\n open ? 'bg-muted/60' : 'hover:bg-muted/40'\n )}>\n <button\n onClick={() => setOpen(!open)}\n className=\"flex-1 flex items-center gap-2.5 py-3 px-2 text-left\"\n >\n <ChevronRight\n className={cn(\n 'h-4 w-4 text-accent-cyan transition-transform duration-200',\n open && 'rotate-90'\n )}\n />\n <Icon className=\"h-4 w-4 text-accent-cyan\" />\n <span className=\"text-xs font-medium text-accent-cyan flex-1\">{title}</span>\n {itemCount !== undefined && itemCount > 0 && (\n <span className=\"text-xs text-accent-cyan/70 tabular-nums\">{itemCount}</span>\n )}\n {status && (\n <span\n className={cn(\n 'h-2 w-2 rounded-full',\n status === 'online' ? 'bg-status-success' : 'bg-muted-foreground/40'\n )}\n />\n )}\n </button>\n\n {/* Edit Actions */}\n {editable && (\n <div className=\"flex items-center gap-1 pr-2\">\n {isEditing ? (\n <>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onCancel}\n disabled={isSaving}\n className=\"h-6 w-6 p-0\"\n >\n <X className=\"h-3.5 w-3.5\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onSave}\n disabled={isSaving}\n className=\"h-6 w-6 p-0 text-primary hover:text-primary\"\n >\n {isSaving ? (\n <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : (\n <Check className=\"h-3.5 w-3.5\" />\n )}\n </Button>\n </>\n ) : (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleEdit}\n className=\"h-6 px-2 text-xs gap-1 text-muted-foreground hover:text-foreground\"\n >\n <Pencil className=\"h-3 w-3\" />\n Edit\n </Button>\n )}\n </div>\n )}\n </div>\n\n <div\n className={cn(\n 'grid transition-all duration-200',\n open ? 'grid-rows-[1fr] opacity-100' : 'grid-rows-[0fr] opacity-0'\n )}\n >\n <div className=\"overflow-hidden\">\n <div className=\"pb-2 pl-9\">{children}</div>\n </div>\n </div>\n </div>\n );\n}\n","/**\n * Syntax Highlighter for JSON\n * Regex-based lightweight syntax highlighting\n */\n\nimport * as React from 'react';\n\n// Token colors using theme variables\nexport const tokenColors = {\n key: 'text-syntax-key',\n string: 'text-syntax-string',\n number: 'text-syntax-number',\n boolean: 'text-syntax-boolean',\n null: 'text-syntax-null',\n bracket: 'text-muted-foreground',\n punctuation: 'text-muted-foreground',\n};\n\n/**\n * Syntax highlight JSON string and return React elements\n */\nexport function syntaxHighlight(json: string): React.ReactNode[] {\n const tokens: React.ReactNode[] = [];\n let i = 0;\n\n const regex = /(\"(?:\\\\.|[^\"\\\\])*\")\\s*:|(\"(?:\\\\.|[^\"\\\\])*\")|(-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)|(\\btrue\\b|\\bfalse\\b)|(\\bnull\\b)|([[\\]{}:,])/g;\n let match;\n let lastIndex = 0;\n\n while ((match = regex.exec(json)) !== null) {\n // Add whitespace/text before match\n if (match.index > lastIndex) {\n tokens.push(\n React.createElement('span', { key: `ws-${i++}` }, json.slice(lastIndex, match.index))\n );\n }\n\n if (match[1]) {\n // Key\n const key = match[1].slice(1, -1);\n tokens.push(\n React.createElement('span', { key: `key-${i++}`, className: tokenColors.key }, `\"${key}\"`)\n );\n } else if (match[2]) {\n // String value\n tokens.push(\n React.createElement('span', { key: `str-${i++}`, className: tokenColors.string }, match[2])\n );\n } else if (match[3]) {\n // Number\n tokens.push(\n React.createElement('span', { key: `num-${i++}`, className: tokenColors.number }, match[3])\n );\n } else if (match[4]) {\n // Boolean\n tokens.push(\n React.createElement('span', { key: `bool-${i++}`, className: tokenColors.boolean }, match[4])\n );\n } else if (match[5]) {\n // Null\n tokens.push(\n React.createElement('span', { key: `null-${i++}`, className: tokenColors.null }, match[5])\n );\n } else if (match[6]) {\n // Brackets and punctuation\n const char = match[6];\n const isBracket = ['[', ']', '{', '}'].includes(char);\n tokens.push(\n React.createElement(\n 'span',\n { key: `punc-${i++}`, className: isBracket ? tokenColors.bracket : tokenColors.punctuation },\n char\n )\n );\n }\n\n lastIndex = regex.lastIndex;\n }\n\n // Add remaining text\n if (lastIndex < json.length) {\n tokens.push(React.createElement('span', { key: `end-${i}` }, json.slice(lastIndex)));\n }\n\n return tokens;\n}\n\n/**\n * Get line numbers array for a given text\n */\nexport function getLineNumbers(text: string): number[] {\n const lineCount = text.split('\\n').length;\n return Array.from({ length: lineCount }, (_, i) => i + 1);\n}\n\n/**\n * Calculate the width needed for line numbers gutter\n */\nexport function getLineNumberWidth(lineCount: number): number {\n const digits = String(lineCount).length;\n // Minimum 2 digits, max reasonable is 5\n return Math.max(2, Math.min(5, digits)) * 0.6 + 0.5; // em units\n}\n","'use client';\n\nimport { useState, useMemo } from 'react';\nimport { Check, Copy, ChevronDown, ChevronRight } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\nimport { syntaxHighlight } from '@/components/json-editor/utils/syntax-highlighter';\n\ninterface JsonViewerProps {\n data: Record<string, unknown> | unknown[] | string | null | undefined;\n collapsible?: boolean;\n copyable?: boolean;\n maxHeight?: number;\n className?: string;\n}\n\nexport function JsonViewer({\n data,\n collapsible = false,\n copyable = true,\n maxHeight = 400,\n className,\n}: JsonViewerProps) {\n const [copied, setCopied] = useState(false);\n const [collapsed, setCollapsed] = useState(false);\n\n // Parse data if it's a string\n const parsedData = useMemo(() => {\n if (typeof data === 'string') {\n try {\n return JSON.parse(data);\n } catch {\n return data;\n }\n }\n return data;\n }, [data]);\n\n // Format JSON with 2-space indentation\n const formattedJson = useMemo(() => {\n if (parsedData === null || parsedData === undefined) {\n return 'null';\n }\n if (typeof parsedData === 'string') {\n return parsedData;\n }\n return JSON.stringify(parsedData, null, 2);\n }, [parsedData]);\n\n // Syntax highlighted content\n const highlightedContent = useMemo(() => {\n return syntaxHighlight(formattedJson);\n }, [formattedJson]);\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(formattedJson);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n if (import.meta.env.DEV) console.error('Failed to copy:', err);\n }\n };\n\n const lineCount = formattedJson.split('\\n').length;\n\n return (\n <div\n className={cn(\n 'relative rounded-lg border bg-muted/30 overflow-hidden',\n className\n )}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between border-b bg-muted/50 px-3 py-1.5\">\n <div className=\"flex items-center gap-2\">\n {collapsible && (\n <button\n onClick={() => setCollapsed(!collapsed)}\n className=\"flex items-center gap-1 text-muted-foreground hover:text-foreground transition-colors\"\n >\n {collapsed ? (\n <ChevronRight className=\"h-3.5 w-3.5\" />\n ) : (\n <ChevronDown className=\"h-3.5 w-3.5\" />\n )}\n </button>\n )}\n <span className=\"text-xs text-muted-foreground\">\n JSON • {lineCount} lines\n </span>\n </div>\n {copyable && (\n <Button\n variant=\"ghost\"\n size=\"xs\"\n onClick={handleCopy}\n className=\"h-6 gap-1 text-xs\"\n >\n {copied ? (\n <>\n <Check className=\"h-3 w-3 text-feedback-success\" />\n Copied\n </>\n ) : (\n <>\n <Copy className=\"h-3 w-3\" />\n Copy\n </>\n )}\n </Button>\n )}\n </div>\n\n {/* Content */}\n {!collapsed && (\n <div\n className=\"overflow-auto p-3\"\n style={{ maxHeight: maxHeight }}\n >\n <pre className=\"text-xs leading-relaxed\">\n <code>{highlightedContent}</code>\n </pre>\n </div>\n )}\n\n {collapsed && (\n <div className=\"px-3 py-2\">\n <span className=\"text-xs text-muted-foreground\">\n {Array.isArray(parsedData)\n ? `Array (${parsedData.length} items)`\n : typeof parsedData === 'object' && parsedData !== null\n ? `Object (${Object.keys(parsedData).length} keys)`\n : typeof parsedData}\n </span>\n </div>\n )}\n </div>\n );\n}\n\n// Compact inline JSON display\ninterface JsonBadgeProps {\n data: Record<string, unknown> | unknown[] | string | null | undefined;\n maxLength?: number;\n className?: string;\n}\n\nexport function JsonBadge({ data, maxLength = 50, className }: JsonBadgeProps) {\n const preview = useMemo(() => {\n if (data === null || data === undefined) return 'null';\n if (typeof data === 'string') {\n try {\n const parsed = JSON.parse(data);\n const str = JSON.stringify(parsed);\n return str.length > maxLength ? str.slice(0, maxLength) + '...' : str;\n } catch {\n return data.length > maxLength ? data.slice(0, maxLength) + '...' : data;\n }\n }\n const str = JSON.stringify(data);\n return str.length > maxLength ? str.slice(0, maxLength) + '...' : str;\n }, [data, maxLength]);\n\n return (\n <code\n className={cn(\n 'inline-block rounded bg-muted/50 px-1.5 py-0.5 text-xs text-muted-foreground',\n className\n )}\n >\n {preview}\n </code>\n );\n}\n","/**\n * useJsonValidation - JSON syntax and Zod schema validation hook\n */\n\nimport { useMemo } from 'react';\nimport type { z } from 'zod';\nimport type { ValidationResult } from '../types';\n\ninterface UseJsonValidationOptions {\n value: string;\n schema?: z.ZodType<unknown>;\n}\n\nexport function useJsonValidation({ value, schema }: UseJsonValidationOptions): ValidationResult {\n return useMemo(() => {\n // Empty value is considered valid (no content)\n if (!value || value.trim() === '') {\n return {\n isValid: true,\n parseError: null,\n schemaErrors: [],\n parsed: null,\n };\n }\n\n // Step 1: JSON parse validation\n let parsed: unknown;\n try {\n parsed = JSON.parse(value);\n } catch (e) {\n const error = e instanceof Error ? e.message : 'Invalid JSON syntax';\n // Try to extract useful error info\n const match = error.match(/at position (\\d+)/);\n const position = match ? ` (position ${match[1]})` : '';\n\n return {\n isValid: false,\n parseError: `JSON syntax error${position}: ${error.replace(/^JSON\\.parse: /, '').replace(/at position \\d+/, '').trim()}`,\n schemaErrors: [],\n parsed: null,\n };\n }\n\n // Step 2: Zod schema validation (if provided)\n if (schema) {\n const result = schema.safeParse(parsed);\n if (!result.success) {\n return {\n isValid: false,\n parseError: null,\n schemaErrors: result.error.issues,\n parsed,\n };\n }\n }\n\n return {\n isValid: true,\n parseError: null,\n schemaErrors: [],\n parsed,\n };\n }, [value, schema]);\n}\n\n/**\n * Format Zod errors for display\n */\nexport function formatZodErrors(errors: z.ZodIssue[]): string[] {\n return errors.map((error) => {\n const path = error.path.length > 0 ? `${error.path.join('.')}: ` : '';\n return `${path}${error.message}`;\n });\n}\n\n/**\n * Get error path for highlighting in tree view\n */\nexport function getErrorPaths(errors: z.ZodIssue[]): string[][] {\n return errors.map((error) => error.path.map(String));\n}\n","/**\n * JsonTextEditor - Simple text editor with line numbers\n * Stable, lightweight implementation without syntax highlighting\n */\n\n'use client';\n\nimport { useRef, useCallback, useState } from 'react';\nimport { cn } from '@/lib/utils';\nimport { getLineNumbers, getLineNumberWidth } from '../utils/syntax-highlighter';\nimport type { JsonTextEditorProps } from '../types';\n\nexport function JsonTextEditor({\n value,\n onChange,\n rows = 12,\n placeholder = '{}',\n showLineNumbers = true,\n isValid = true,\n disabled = false,\n}: JsonTextEditorProps) {\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const lineNumbersRef = useRef<HTMLDivElement>(null);\n const [isFocused, setIsFocused] = useState(false);\n\n const lines = getLineNumbers(value || placeholder);\n const lineNumberWidth = getLineNumberWidth(lines.length);\n\n // Sync scroll between textarea and line numbers\n const handleScroll = useCallback(() => {\n const textarea = textareaRef.current;\n const lineNumbers = lineNumbersRef.current;\n\n if (textarea && lineNumbers) {\n lineNumbers.scrollTop = textarea.scrollTop;\n }\n }, []);\n\n // Handle textarea input\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n onChange(e.target.value);\n },\n [onChange]\n );\n\n // Handle tab key for indentation\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Tab') {\n e.preventDefault();\n const textarea = e.currentTarget;\n const start = textarea.selectionStart;\n const end = textarea.selectionEnd;\n\n const newValue = value.substring(0, start) + ' ' + value.substring(end);\n onChange(newValue);\n\n requestAnimationFrame(() => {\n textarea.selectionStart = textarea.selectionEnd = start + 2;\n });\n }\n },\n [value, onChange]\n );\n\n const lineHeight = 20;\n const padding = 12;\n const minHeight = rows * lineHeight + padding;\n\n return (\n <div\n className={cn(\n 'relative rounded-lg border overflow-hidden font-mono text-xs transition-all duration-200',\n 'bg-muted/20 dark:bg-muted/10',\n isFocused && 'ring-2 ring-accent-cyan/20 border-accent-cyan/50',\n !isValid && 'border-destructive/60 bg-destructive/5 ring-2 ring-destructive/20',\n disabled && 'opacity-50 cursor-not-allowed'\n )}\n >\n <div className=\"flex\" style={{ minHeight }}>\n {showLineNumbers && (\n <div\n ref={lineNumbersRef}\n className={cn(\n 'flex-shrink-0 border-r select-none',\n 'overflow-hidden',\n 'bg-muted/40 dark:bg-muted/20 border-border/40',\n 'text-muted-foreground/60 text-right'\n )}\n style={{ width: `${lineNumberWidth + 0.5}rem` }}\n >\n <div className=\"py-1.5 px-2\">\n {lines.map((num) => (\n <div key={num} className=\"leading-5 h-5 tabular-nums\">\n {num}\n </div>\n ))}\n </div>\n </div>\n )}\n\n <textarea\n ref={textareaRef}\n value={value}\n onChange={handleChange}\n onScroll={handleScroll}\n onKeyDown={handleKeyDown}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n placeholder={placeholder}\n disabled={disabled}\n className={cn(\n 'flex-1 py-1.5 px-3 bg-transparent resize-none outline-none',\n 'leading-5 text-foreground',\n 'placeholder:text-muted-foreground/50'\n )}\n style={{ minHeight }}\n spellCheck={false}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n />\n </div>\n </div>\n );\n}\n","/**\n * JSON Tree Utilities\n * Functions for converting between JSON and tree structure\n */\n\nimport type { TreeNode, JsonValueType, TreeNodeOperation } from '../types';\n\n/**\n * Get the JSON value type\n */\nexport function getValueType(value: unknown): JsonValueType {\n if (value === null) return 'null';\n if (Array.isArray(value)) return 'array';\n const type = typeof value;\n if (type === 'object') return 'object';\n if (type === 'string') return 'string';\n if (type === 'number') return 'number';\n if (type === 'boolean') return 'boolean';\n return 'string'; // fallback\n}\n\n/**\n * Generate a unique ID for tree nodes\n */\nlet nodeIdCounter = 0;\nexport function generateNodeId(): string {\n return `node-${++nodeIdCounter}`;\n}\n\n/**\n * Reset the node ID counter (useful for testing)\n */\nexport function resetNodeIdCounter(): void {\n nodeIdCounter = 0;\n}\n\n/**\n * Convert a JSON value to a tree structure\n */\nexport function jsonToTree(\n value: unknown,\n key: string = 'root',\n path: string[] = [],\n expanded: boolean = true\n): TreeNode {\n const type = getValueType(value);\n const id = generateNodeId();\n\n const node: TreeNode = {\n id,\n key,\n value,\n type,\n path,\n expanded,\n };\n\n if (type === 'object' && value !== null) {\n const obj = value as Record<string, unknown>;\n node.children = Object.entries(obj).map(([k, v]) =>\n jsonToTree(v, k, [...path, k], false)\n );\n } else if (type === 'array') {\n const arr = value as unknown[];\n node.children = arr.map((v, i) =>\n jsonToTree(v, String(i), [...path, String(i)], false)\n );\n }\n\n return node;\n}\n\n/**\n * Convert a tree structure back to JSON value\n */\nexport function treeToJson(node: TreeNode): unknown {\n if (node.type === 'object' && node.children) {\n const obj: Record<string, unknown> = {};\n for (const child of node.children) {\n obj[child.key] = treeToJson(child);\n }\n return obj;\n }\n\n if (node.type === 'array' && node.children) {\n return node.children.map(treeToJson);\n }\n\n return node.value;\n}\n\n/**\n * Update a node in the tree by path\n */\nexport function updateTreeNode(\n root: TreeNode,\n path: string[],\n updater: (node: TreeNode) => TreeNode\n): TreeNode {\n if (path.length === 0) {\n return updater(root);\n }\n\n const [head, ...tail] = path;\n\n if (!root.children) {\n return root;\n }\n\n return {\n ...root,\n children: root.children.map((child) =>\n child.key === head ? updateTreeNode(child, tail, updater) : child\n ),\n };\n}\n\n/**\n * Toggle expansion state of a node\n */\nexport function toggleNodeExpansion(root: TreeNode, path: string[]): TreeNode {\n return updateTreeNode(root, path, (node) => ({\n ...node,\n expanded: !node.expanded,\n }));\n}\n\n/**\n * Update the value of a node\n */\nexport function updateNodeValue(\n root: TreeNode,\n path: string[],\n newValue: unknown\n): TreeNode {\n return updateTreeNode(root, path, (node) => ({\n ...node,\n value: newValue,\n type: getValueType(newValue),\n }));\n}\n\n/**\n * Add a new child to an object or array node\n */\nexport function addNodeChild(\n root: TreeNode,\n parentPath: string[],\n key: string,\n value: unknown\n): TreeNode {\n return updateTreeNode(root, parentPath, (node) => {\n if (node.type !== 'object' && node.type !== 'array') {\n return node;\n }\n\n const newChild = jsonToTree(value, key, [...node.path, key], false);\n const children = node.children ? [...node.children, newChild] : [newChild];\n\n // Update the value to include the new child\n let newValue: unknown;\n if (node.type === 'object') {\n const obj = { ...(node.value as Record<string, unknown>) };\n obj[key] = value;\n newValue = obj;\n } else {\n const arr = [...(node.value as unknown[])];\n arr.push(value);\n newValue = arr;\n }\n\n return {\n ...node,\n value: newValue,\n children,\n expanded: true,\n };\n });\n}\n\n/**\n * Delete a child from an object or array node\n */\nexport function deleteNodeChild(\n root: TreeNode,\n parentPath: string[],\n key: string\n): TreeNode {\n return updateTreeNode(root, parentPath, (node) => {\n if (!node.children) {\n return node;\n }\n\n const children = node.children.filter((child) => child.key !== key);\n\n // Update the value to remove the child\n let newValue: unknown;\n if (node.type === 'object') {\n const obj = { ...(node.value as Record<string, unknown>) };\n delete obj[key];\n newValue = obj;\n } else if (node.type === 'array') {\n const arr = (node.value as unknown[]).filter((_, i) => String(i) !== key);\n newValue = arr;\n // Re-index array children\n return {\n ...node,\n value: newValue,\n children: children.map((child, i) => ({\n ...child,\n key: String(i),\n path: [...node.path, String(i)],\n })),\n };\n }\n\n return {\n ...node,\n value: newValue,\n children,\n };\n });\n}\n\n/**\n * Rename a key in an object node\n */\nexport function renameNodeKey(\n root: TreeNode,\n parentPath: string[],\n oldKey: string,\n newKey: string\n): TreeNode {\n return updateTreeNode(root, parentPath, (node) => {\n if (node.type !== 'object' || !node.children) {\n return node;\n }\n\n const children = node.children.map((child) =>\n child.key === oldKey\n ? { ...child, key: newKey, path: [...node.path, newKey] }\n : child\n );\n\n // Update the value\n const obj = { ...(node.value as Record<string, unknown>) };\n const val = obj[oldKey];\n delete obj[oldKey];\n obj[newKey] = val;\n\n return {\n ...node,\n value: obj,\n children,\n };\n });\n}\n\n/**\n * Apply a tree operation\n */\nexport function applyOperation(root: TreeNode, operation: TreeNodeOperation): TreeNode {\n switch (operation.type) {\n case 'update':\n return updateNodeValue(root, operation.path, operation.value);\n case 'add':\n if (operation.key !== undefined && operation.value !== undefined) {\n return addNodeChild(root, operation.path, operation.key, operation.value);\n }\n return root;\n case 'delete':\n if (operation.key !== undefined) {\n return deleteNodeChild(root, operation.path, operation.key);\n }\n return root;\n case 'rename':\n if (operation.key !== undefined && operation.newKey !== undefined) {\n return renameNodeKey(root, operation.path, operation.key, operation.newKey);\n }\n return root;\n default:\n return root;\n }\n}\n\n/**\n * Get a default value for a given type\n */\nexport function getDefaultValueForType(type: JsonValueType): unknown {\n switch (type) {\n case 'object':\n return {};\n case 'array':\n return [];\n case 'string':\n return '';\n case 'number':\n return 0;\n case 'boolean':\n return false;\n case 'null':\n return null;\n default:\n return null;\n }\n}\n\n/**\n * Parse a string value to the appropriate type\n */\nexport function parseInputValue(input: string, targetType: JsonValueType): unknown {\n const trimmed = input.trim();\n\n switch (targetType) {\n case 'number': {\n const num = Number(trimmed);\n return isNaN(num) ? 0 : num;\n }\n case 'boolean':\n return trimmed.toLowerCase() === 'true';\n case 'null':\n return null;\n case 'object':\n try {\n const parsed = JSON.parse(trimmed);\n return typeof parsed === 'object' && !Array.isArray(parsed) ? parsed : {};\n } catch {\n return {};\n }\n case 'array':\n try {\n const parsed = JSON.parse(trimmed);\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n case 'string':\n default:\n return input;\n }\n}\n","/**\n * useJsonTree - Tree data structure management hook\n */\n\nimport { useState, useCallback, useMemo } from 'react';\nimport type { TreeNode, TreeNodeOperation } from '../types';\nimport {\n jsonToTree,\n treeToJson,\n updateNodeValue,\n addNodeChild,\n deleteNodeChild,\n renameNodeKey,\n applyOperation,\n resetNodeIdCounter,\n} from '../utils/json-tree-utils';\n\ninterface UseJsonTreeOptions {\n value: unknown;\n onChange: (value: unknown) => void;\n}\n\ninterface UseJsonTreeReturn {\n tree: TreeNode | null;\n toggleExpand: (path: string[]) => void;\n updateValue: (path: string[], value: unknown) => void;\n addChild: (parentPath: string[], key: string, value: unknown) => void;\n deleteChild: (parentPath: string[], key: string) => void;\n renameKey: (parentPath: string[], oldKey: string, newKey: string) => void;\n applyOp: (operation: TreeNodeOperation) => void;\n expandAll: () => void;\n collapseAll: () => void;\n}\n\nexport function useJsonTree({ value, onChange }: UseJsonTreeOptions): UseJsonTreeReturn {\n // Build tree from value\n const [expandedPaths, setExpandedPaths] = useState<Set<string>>(new Set([''])); // Root expanded by default\n\n const tree = useMemo(() => {\n if (value === null || value === undefined) {\n return null;\n }\n resetNodeIdCounter();\n const root = jsonToTree(value, 'root', [], true);\n\n // Apply expansion state\n const applyExpansion = (node: TreeNode): TreeNode => {\n const pathKey = node.path.join('.');\n const isExpanded = expandedPaths.has(pathKey) || pathKey === '';\n\n return {\n ...node,\n expanded: isExpanded,\n children: node.children?.map(applyExpansion),\n };\n };\n\n return applyExpansion(root);\n }, [value, expandedPaths]);\n\n // Toggle node expansion\n const toggleExpand = useCallback((path: string[]) => {\n const pathKey = path.join('.');\n setExpandedPaths(prev => {\n const next = new Set(prev);\n if (next.has(pathKey)) {\n next.delete(pathKey);\n } else {\n next.add(pathKey);\n }\n return next;\n });\n }, []);\n\n // Update a node value\n const updateValue = useCallback(\n (path: string[], newValue: unknown) => {\n if (!tree) return;\n const updated = updateNodeValue(tree, path, newValue);\n onChange(treeToJson(updated));\n },\n [tree, onChange]\n );\n\n // Add a child to object or array\n const addChild = useCallback(\n (parentPath: string[], key: string, childValue: unknown) => {\n if (!tree) return;\n const updated = addNodeChild(tree, parentPath, key, childValue);\n onChange(treeToJson(updated));\n\n // Auto-expand parent\n const pathKey = parentPath.join('.');\n setExpandedPaths(prev => new Set(prev).add(pathKey));\n },\n [tree, onChange]\n );\n\n // Delete a child\n const deleteChild = useCallback(\n (parentPath: string[], key: string) => {\n if (!tree) return;\n const updated = deleteNodeChild(tree, parentPath, key);\n onChange(treeToJson(updated));\n },\n [tree, onChange]\n );\n\n // Rename a key\n const renameKey = useCallback(\n (parentPath: string[], oldKey: string, newKey: string) => {\n if (!tree || oldKey === newKey) return;\n const updated = renameNodeKey(tree, parentPath, oldKey, newKey);\n onChange(treeToJson(updated));\n },\n [tree, onChange]\n );\n\n // Apply an operation\n const applyOp = useCallback(\n (operation: TreeNodeOperation) => {\n if (!tree) return;\n const updated = applyOperation(tree, operation);\n onChange(treeToJson(updated));\n },\n [tree, onChange]\n );\n\n // Expand all nodes\n const expandAll = useCallback(() => {\n if (!tree) return;\n\n const collectPaths = (node: TreeNode, paths: string[] = []): string[] => {\n const pathKey = node.path.join('.');\n paths.push(pathKey);\n node.children?.forEach(child => collectPaths(child, paths));\n return paths;\n };\n\n const allPaths = collectPaths(tree);\n setExpandedPaths(new Set(allPaths));\n }, [tree]);\n\n // Collapse all nodes (except root)\n const collapseAll = useCallback(() => {\n setExpandedPaths(new Set(['']));\n }, []);\n\n return {\n tree,\n toggleExpand,\n updateValue,\n addChild,\n deleteChild,\n renameKey,\n applyOp,\n expandAll,\n collapseAll,\n };\n}\n","/**\n * JsonTreeNode - Single node in the tree view\n * Supports inline editing for keys and values\n * Uses project styling patterns with accent colors and tooltips\n */\n\n'use client';\n\nimport { useState, useCallback, useRef, useEffect } from 'react';\nimport {\n ChevronRight,\n ChevronDown,\n Plus,\n Trash2,\n Type,\n Hash,\n ToggleLeft,\n Braces,\n Brackets,\n Ban,\n} from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n DropdownMenuSeparator,\n DropdownMenuLabel,\n} from '@/components/ui/dropdown-menu';\nimport type { TreeNode, JsonValueType } from '../types';\nimport { getDefaultValueForType, parseInputValue } from '../utils/json-tree-utils';\n\ninterface JsonTreeNodeProps {\n node: TreeNode;\n depth: number;\n isArrayItem?: boolean;\n parentType?: 'object' | 'array';\n onToggleExpand: (path: string[]) => void;\n onUpdateValue: (path: string[], value: unknown) => void;\n onAddChild: (parentPath: string[], key: string, value: unknown) => void;\n onDeleteChild: (parentPath: string[], key: string) => void;\n onRenameKey: (parentPath: string[], oldKey: string, newKey: string) => void;\n disabled?: boolean;\n isError?: boolean;\n}\n\nconst typeIcons: Record<JsonValueType, typeof Type> = {\n string: Type,\n number: Hash,\n boolean: ToggleLeft,\n object: Braces,\n array: Brackets,\n null: Ban,\n};\n\nconst typeColors: Record<JsonValueType, string> = {\n string: 'text-syntax-string',\n number: 'text-syntax-number',\n boolean: 'text-syntax-boolean',\n object: 'text-syntax-key',\n array: 'text-syntax-key',\n null: 'text-syntax-null',\n};\n\nconst typeLabels: Record<JsonValueType, string> = {\n string: 'Metin',\n number: 'Sayı',\n boolean: 'Boolean',\n object: 'Nesne',\n array: 'Dizi',\n null: 'Null',\n};\n\nexport function JsonTreeNode({\n node,\n depth,\n isArrayItem = false,\n parentType: _parentType,\n onToggleExpand,\n onUpdateValue,\n onAddChild,\n onDeleteChild,\n onRenameKey,\n disabled = false,\n isError = false,\n}: JsonTreeNodeProps) {\n void _parentType;\n const [isEditingKey, setIsEditingKey] = useState(false);\n const [isEditingValue, setIsEditingValue] = useState(false);\n const [editKeyValue, setEditKeyValue] = useState(node.key);\n const [editValueString, setEditValueString] = useState('');\n const [newKeyName, setNewKeyName] = useState('');\n const [showAddDialog, setShowAddDialog] = useState(false);\n\n const keyInputRef = useRef<HTMLInputElement>(null);\n const valueInputRef = useRef<HTMLInputElement>(null);\n\n const hasChildren = node.type === 'object' || node.type === 'array';\n const canExpand = hasChildren && (node.children?.length ?? 0) > 0;\n const isRoot = node.path.length === 0;\n const TypeIcon = typeIcons[node.type];\n\n // Focus input when editing starts\n useEffect(() => {\n if (isEditingKey && keyInputRef.current) {\n keyInputRef.current.focus();\n keyInputRef.current.select();\n }\n }, [isEditingKey]);\n\n useEffect(() => {\n if (isEditingValue && valueInputRef.current) {\n valueInputRef.current.focus();\n valueInputRef.current.select();\n }\n }, [isEditingValue]);\n\n // Start editing key\n const handleStartEditKey = useCallback(() => {\n if (disabled || isArrayItem || isRoot) return;\n setEditKeyValue(node.key);\n setIsEditingKey(true);\n }, [disabled, isArrayItem, isRoot, node.key]);\n\n // Save key edit\n const handleSaveKey = useCallback(() => {\n const trimmed = editKeyValue.trim();\n if (trimmed && trimmed !== node.key) {\n const parentPath = node.path.slice(0, -1);\n onRenameKey(parentPath, node.key, trimmed);\n }\n setIsEditingKey(false);\n }, [editKeyValue, node.key, node.path, onRenameKey]);\n\n // Start editing value\n const handleStartEditValue = useCallback(() => {\n if (disabled || hasChildren) return;\n\n let stringValue = '';\n if (node.type === 'string') {\n stringValue = node.value as string;\n } else if (node.type === 'null') {\n stringValue = 'null';\n } else {\n stringValue = String(node.value);\n }\n\n setEditValueString(stringValue);\n setIsEditingValue(true);\n }, [disabled, hasChildren, node.type, node.value]);\n\n // Save value edit\n const handleSaveValue = useCallback(() => {\n const parsed = parseInputValue(editValueString, node.type);\n onUpdateValue(node.path, parsed);\n setIsEditingValue(false);\n }, [editValueString, node.type, node.path, onUpdateValue]);\n\n // Handle key press for inputs\n const handleKeyPress = useCallback(\n (e: React.KeyboardEvent, save: () => void, cancel: () => void) => {\n if (e.key === 'Enter') {\n save();\n } else if (e.key === 'Escape') {\n cancel();\n }\n },\n []\n );\n\n // Add new child\n const handleAddChild = useCallback(\n (type: JsonValueType) => {\n const defaultValue = getDefaultValueForType(type);\n let key = newKeyName.trim();\n\n if (node.type === 'array') {\n key = String(node.children?.length ?? 0);\n } else if (!key) {\n key = `newKey${(node.children?.length ?? 0) + 1}`;\n }\n\n onAddChild(node.path, key, defaultValue);\n setNewKeyName('');\n setShowAddDialog(false);\n },\n [newKeyName, node.type, node.path, node.children?.length, onAddChild]\n );\n\n // Delete this node\n const handleDelete = useCallback(() => {\n if (isRoot) return;\n const parentPath = node.path.slice(0, -1);\n onDeleteChild(parentPath, node.key);\n }, [isRoot, node.path, node.key, onDeleteChild]);\n\n // Change value type\n const handleChangeType = useCallback(\n (newType: JsonValueType) => {\n const newValue = getDefaultValueForType(newType);\n onUpdateValue(node.path, newValue);\n },\n [node.path, onUpdateValue]\n );\n\n // Render value display\n const renderValue = () => {\n if (isEditingValue) {\n return (\n <Input\n ref={valueInputRef}\n value={editValueString}\n onChange={(e) => setEditValueString(e.target.value)}\n onBlur={handleSaveValue}\n onKeyDown={(e) => handleKeyPress(e, handleSaveValue, () => setIsEditingValue(false))}\n className=\"h-5 py-0 px-1.5 text-xs w-32 font-mono\"\n />\n );\n }\n\n if (hasChildren) {\n const count = node.children?.length ?? 0;\n const label = node.type === 'array' ? `Dizi (${count})` : `Nesne (${count} anahtar)`;\n return (\n <span className=\"text-muted-foreground/70 text-xs italic\">\n {label}\n </span>\n );\n }\n\n let displayValue: string;\n if (node.type === 'string') {\n displayValue = `\"${node.value}\"`;\n } else if (node.type === 'null') {\n displayValue = 'null';\n } else {\n displayValue = String(node.value);\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n className={cn(\n 'text-xs font-mono cursor-pointer rounded px-1 py-0.5 transition-colors',\n 'hover:bg-muted/60',\n typeColors[node.type]\n )}\n onClick={handleStartEditValue}\n >\n {displayValue}\n </span>\n </TooltipTrigger>\n <TooltipContent side=\"top\">\n <p>Düzenlemek için tıkla</p>\n </TooltipContent>\n </Tooltip>\n );\n };\n\n return (\n <div className={cn(isError && 'bg-destructive/10 rounded-md')}>\n {/* Node row */}\n <div\n className={cn(\n 'flex items-center gap-1.5 py-0.5 pr-2 rounded-md group transition-colors',\n 'hover:bg-muted/40',\n 'min-h-[26px]'\n )}\n style={{ paddingLeft: `calc(var(--tree-indent-step) * ${depth} + 0.25rem)` }}\n >\n {/* Expand/collapse button */}\n <button\n onClick={() => canExpand && onToggleExpand(node.path)}\n className={cn(\n 'flex-shrink-0 w-4 h-4 flex items-center justify-center rounded transition-colors',\n canExpand ? 'cursor-pointer hover:bg-muted' : 'cursor-default'\n )}\n disabled={!canExpand}\n >\n {canExpand && (\n node.expanded ? (\n <ChevronDown className=\"h-3 w-3 text-muted-foreground\" />\n ) : (\n <ChevronRight className=\"h-3 w-3 text-muted-foreground\" />\n )\n )}\n </button>\n\n {/* Type icon */}\n <TypeIcon className={cn('h-3.5 w-3.5 flex-shrink-0', typeColors[node.type])} />\n\n {/* Key */}\n {!isRoot && (\n <>\n {isEditingKey ? (\n <Input\n ref={keyInputRef}\n value={editKeyValue}\n onChange={(e) => setEditKeyValue(e.target.value)}\n onBlur={handleSaveKey}\n onKeyDown={(e) => handleKeyPress(e, handleSaveKey, () => setIsEditingKey(false))}\n className=\"h-5 py-0 px-1.5 text-xs w-24 font-mono\"\n />\n ) : (\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n className={cn(\n 'text-xs font-medium text-accent-violet font-mono',\n !isArrayItem && !disabled && 'cursor-pointer hover:underline'\n )}\n onClick={handleStartEditKey}\n >\n {isArrayItem ? `[${node.key}]` : node.key}\n </span>\n </TooltipTrigger>\n {!isArrayItem && !disabled && (\n <TooltipContent side=\"top\">\n <p>Yeniden adlandırmak için tıkla</p>\n </TooltipContent>\n )}\n </Tooltip>\n )}\n <span className=\"text-muted-foreground/50 text-xs\">:</span>\n </>\n )}\n\n {/* Value */}\n {renderValue()}\n\n {/* Actions (visible on hover) */}\n {!disabled && (\n <div className=\"ml-auto flex items-center gap-0.5 opacity-0 group-hover:opacity-100 transition-opacity\">\n {/* Change type dropdown */}\n {!hasChildren && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n className=\"h-5 w-5 text-muted-foreground hover:text-accent-cyan\"\n >\n <TypeIcon className=\"h-3 w-3\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"min-w-dropdown-sm\">\n <DropdownMenuLabel className=\"text-xs\">Tip Değiştir</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {(Object.keys(typeIcons) as JsonValueType[]).map((type) => {\n const Icon = typeIcons[type];\n return (\n <DropdownMenuItem\n key={type}\n onClick={() => handleChangeType(type)}\n className=\"text-xs gap-2\"\n >\n <Icon className={cn('h-3.5 w-3.5', typeColors[type])} />\n {typeLabels[type]}\n </DropdownMenuItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n\n {/* Add child (for objects and arrays) */}\n {hasChildren && (\n <DropdownMenu open={showAddDialog} onOpenChange={setShowAddDialog}>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n className=\"h-5 w-5 text-muted-foreground hover:text-accent-cyan\"\n >\n <Plus className=\"h-3 w-3\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"min-w-dropdown-md p-2\">\n {node.type === 'object' && (\n <div className=\"mb-2\">\n <Input\n placeholder=\"Anahtar adı\"\n value={newKeyName}\n onChange={(e) => setNewKeyName(e.target.value)}\n className=\"h-7 text-xs\"\n />\n </div>\n )}\n <DropdownMenuLabel className=\"text-xs px-0\">Değer Ekle</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {(Object.keys(typeIcons) as JsonValueType[]).map((type) => {\n const Icon = typeIcons[type];\n return (\n <DropdownMenuItem\n key={type}\n onClick={() => handleAddChild(type)}\n className=\"text-xs gap-2\"\n >\n <Icon className={cn('h-3.5 w-3.5', typeColors[type])} />\n {typeLabels[type]}\n </DropdownMenuItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n\n {/* Delete node */}\n {!isRoot && (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n className=\"h-5 w-5 text-muted-foreground hover:text-destructive\"\n onClick={handleDelete}\n >\n <Trash2 className=\"h-3 w-3\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent side=\"top\">\n <p>Sil</p>\n </TooltipContent>\n </Tooltip>\n )}\n </div>\n )}\n </div>\n\n {/* Children (if expanded) */}\n {node.expanded && node.children && (\n <div className=\"border-l border-border/30 ml-2\">\n {node.children.map((child) => (\n <JsonTreeNode\n key={child.id}\n node={child}\n depth={depth + 1}\n isArrayItem={node.type === 'array'}\n parentType={node.type as 'object' | 'array'}\n onToggleExpand={onToggleExpand}\n onUpdateValue={onUpdateValue}\n onAddChild={onAddChild}\n onDeleteChild={onDeleteChild}\n onRenameKey={onRenameKey}\n disabled={disabled}\n />\n ))}\n </div>\n )}\n </div>\n );\n}\n","/**\n * JsonTreeEditor - Tree view editor with inline editing\n * Follows project styling patterns with glassmorphism and accent colors\n */\n\n'use client';\n\nimport { useCallback, useMemo } from 'react';\nimport { Expand, Minimize2, Braces, Brackets } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\nimport type { JsonTreeEditorProps } from '../types';\nimport { useJsonTree } from '../hooks/useJsonTree';\nimport { JsonTreeNode } from './JsonTreeNode';\nimport { getValueType } from '../utils/json-tree-utils';\n\nexport function JsonTreeEditor({\n value,\n onChange,\n maxHeight = 400,\n disabled = false,\n}: JsonTreeEditorProps) {\n const {\n tree,\n toggleExpand,\n updateValue,\n addChild,\n deleteChild,\n renameKey,\n expandAll,\n collapseAll,\n } = useJsonTree({ value, onChange });\n\n // Handle creating initial value if null\n const handleCreateRoot = useCallback(\n (type: 'object' | 'array') => {\n onChange(type === 'object' ? {} : []);\n },\n [onChange]\n );\n\n // Get stats about the data\n const stats = useMemo(() => {\n if (!value) return null;\n\n const type = getValueType(value);\n if (type === 'object') {\n const obj = value as Record<string, unknown>;\n return { type: 'object', count: Object.keys(obj).length };\n }\n if (type === 'array') {\n const arr = value as unknown[];\n return { type: 'array', count: arr.length };\n }\n return { type, count: 0 };\n }, [value]);\n\n // Empty state\n if (!tree) {\n return (\n <div className=\"flex flex-col items-center justify-center py-10 text-muted-foreground rounded-lg border border-dashed border-border/60 bg-muted/10\">\n <Braces className=\"h-10 w-10 mb-3 text-muted-foreground/40\" />\n <p className=\"text-sm mb-4 text-muted-foreground/70\">Veri yok</p>\n {!disabled && (\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleCreateRoot('object')}\n className=\"text-xs gap-1.5 border-accent-cyan/30 hover:border-accent-cyan hover:bg-accent-cyan/10\"\n >\n <Braces className=\"h-3.5 w-3.5\" />\n Nesne Oluştur\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleCreateRoot('array')}\n className=\"text-xs gap-1.5 border-accent-violet/30 hover:border-accent-violet hover:bg-accent-violet/10\"\n >\n <Brackets className=\"h-3.5 w-3.5\" />\n Dizi Oluştur\n </Button>\n </div>\n )}\n </div>\n );\n }\n\n return (\n <div className=\"rounded-lg border border-border/60 bg-muted/20 dark:bg-muted/10 overflow-hidden\">\n {/* Tree toolbar */}\n <div className=\"flex items-center justify-between border-b border-border/40 bg-muted/40 dark:bg-muted/20 px-3 py-1.5\">\n <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n {stats && (\n <>\n {stats.type === 'object' ? (\n <Braces className=\"h-3.5 w-3.5 text-accent-cyan\" />\n ) : (\n <Brackets className=\"h-3.5 w-3.5 text-accent-violet\" />\n )}\n <span className=\"font-medium\">\n {stats.type === 'object' ? `${stats.count} anahtar` : `${stats.count} öğe`}\n </span>\n </>\n )}\n </div>\n <div className=\"flex items-center gap-0.5\">\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n onClick={expandAll}\n className=\"text-muted-foreground hover:text-accent-cyan\"\n >\n <Expand className=\"h-3.5 w-3.5\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">\n <p>Tümünü genişlet</p>\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n onClick={collapseAll}\n className=\"text-muted-foreground hover:text-accent-cyan\"\n >\n <Minimize2 className=\"h-3.5 w-3.5\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">\n <p>Tümünü daralt</p>\n </TooltipContent>\n </Tooltip>\n </div>\n </div>\n\n {/* Tree content */}\n <div\n className={cn(\n 'overflow-auto p-2',\n 'scrollbar-thin scrollbar-thumb-border scrollbar-track-transparent'\n )}\n style={{ maxHeight }}\n >\n <JsonTreeNode\n node={tree}\n depth={0}\n onToggleExpand={toggleExpand}\n onUpdateValue={updateValue}\n onAddChild={addChild}\n onDeleteChild={deleteChild}\n onRenameKey={renameKey}\n disabled={disabled}\n />\n </div>\n </div>\n );\n}\n","/**\n * JsonToolbar - Toolbar with mode toggle, format, and copy buttons\n * Follows project's button patterns and Turkish labels\n */\n\n'use client';\n\nimport { Code, TreePine, Wand2, Copy, Check } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\nimport type { JsonToolbarProps } from '../types';\n\nexport function JsonToolbar({\n mode,\n onModeChange,\n onFormat,\n onCopy,\n isValid,\n allowModeSwitch = true,\n copied = false,\n}: JsonToolbarProps) {\n return (\n <div className=\"flex items-center justify-between gap-2\">\n {/* Mode toggle - segmented control style */}\n {allowModeSwitch && (\n <div className=\"flex items-center rounded-lg border border-border/60 bg-muted/40 p-0.5\">\n <Button\n variant=\"ghost\"\n size=\"xs\"\n onClick={() => onModeChange('text')}\n className={cn(\n 'h-7 px-3 text-xs gap-1.5 rounded-md transition-all',\n mode === 'text'\n ? 'bg-background shadow-sm text-accent-cyan font-medium'\n : 'text-muted-foreground hover:text-foreground'\n )}\n >\n <Code className=\"h-3.5 w-3.5\" />\n Metin\n </Button>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"xs\"\n onClick={() => onModeChange('tree')}\n disabled={!isValid}\n className={cn(\n 'h-7 px-3 text-xs gap-1.5 rounded-md transition-all',\n mode === 'tree'\n ? 'bg-background shadow-sm text-accent-cyan font-medium'\n : 'text-muted-foreground hover:text-foreground',\n !isValid && 'opacity-40 cursor-not-allowed'\n )}\n >\n <TreePine className=\"h-3.5 w-3.5\" />\n Ağaç\n </Button>\n </TooltipTrigger>\n {!isValid && (\n <TooltipContent side=\"bottom\">\n <p>Ağaç görünümü için JSON hatalarını düzeltin</p>\n </TooltipContent>\n )}\n </Tooltip>\n </div>\n )}\n\n {/* Action buttons */}\n <div className=\"flex items-center gap-1\">\n {mode === 'text' && (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"xs\"\n onClick={onFormat}\n disabled={!isValid}\n className=\"h-7 px-2.5 text-xs gap-1.5 text-muted-foreground hover:text-accent-cyan\"\n >\n <Wand2 className=\"h-3.5 w-3.5\" />\n Biçimlendir\n </Button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">\n <p>JSON'u güzelleştir</p>\n </TooltipContent>\n </Tooltip>\n )}\n <Button\n variant=\"ghost\"\n size=\"xs\"\n onClick={onCopy}\n className={cn(\n 'h-7 px-2.5 text-xs gap-1.5 transition-colors',\n copied\n ? 'text-feedback-success hover:text-feedback-success'\n : 'text-muted-foreground hover:text-accent-cyan'\n )}\n >\n {copied ? (\n <>\n <Check className=\"h-3.5 w-3.5\" />\n Kopyalandı\n </>\n ) : (\n <>\n <Copy className=\"h-3.5 w-3.5\" />\n Kopyala\n </>\n )}\n </Button>\n </div>\n </div>\n );\n}\n","/**\n * ValidationStatus - Displays validation status and errors\n * Uses project's statusColors for consistent styling\n */\n\n'use client';\n\nimport { CheckCircle2, XCircle, AlertTriangle } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { statusColors } from '@/lib/status-colors';\nimport type { ValidationStatusProps } from '../types';\nimport { formatZodErrors } from '../hooks/useJsonValidation';\n\nexport function ValidationStatus({\n validation,\n showDetails = true,\n}: ValidationStatusProps) {\n const { isValid, parseError, schemaErrors } = validation;\n const hasSchemaErrors = schemaErrors.length > 0;\n\n // Valid state\n if (isValid) {\n return (\n <div className={cn('flex items-center gap-1.5 text-xs rounded-md px-2 py-1', statusColors.success)}>\n <CheckCircle2 className=\"h-3.5 w-3.5\" />\n <span>Geçerli JSON</span>\n </div>\n );\n }\n\n // Parse error\n if (parseError) {\n return (\n <div className=\"space-y-1.5\">\n <div className={cn('flex items-center gap-1.5 text-xs rounded-md px-2 py-1', statusColors.error)}>\n <XCircle className=\"h-3.5 w-3.5\" />\n <span>Geçersiz JSON</span>\n </div>\n {showDetails && (\n <p className=\"text-xs text-destructive pl-2 break-words font-mono bg-destructive/5 rounded p-2\">\n {parseError}\n </p>\n )}\n </div>\n );\n }\n\n // Schema validation errors\n if (hasSchemaErrors) {\n const formattedErrors = formatZodErrors(schemaErrors);\n\n return (\n <div className=\"space-y-1.5\">\n <div className={cn('flex items-center gap-1.5 text-xs rounded-md px-2 py-1', statusColors.warning)}>\n <AlertTriangle className=\"h-3.5 w-3.5\" />\n <span>\n Şema doğrulaması başarısız ({schemaErrors.length} {schemaErrors.length === 1 ? 'hata' : 'hata'})\n </span>\n </div>\n {showDetails && formattedErrors.length > 0 && (\n <ul className=\"text-xs pl-2 space-y-1 bg-status-warning/5 rounded p-2\">\n {formattedErrors.slice(0, 5).map((error, i) => (\n <li key={i} className=\"break-words text-status-warning font-mono\">\n • {error}\n </li>\n ))}\n {formattedErrors.length > 5 && (\n <li className=\"text-muted-foreground\">\n ...ve {formattedErrors.length - 5} hata daha\n </li>\n )}\n </ul>\n )}\n </div>\n );\n }\n\n return null;\n}\n\n/**\n * Compact validation badge for toolbar\n */\nexport function ValidationBadge({\n isValid,\n className,\n}: {\n isValid: boolean;\n className?: string;\n}) {\n return (\n <div\n className={cn(\n 'flex items-center gap-1 px-2 py-1 rounded-md text-xs font-medium border',\n isValid ? statusColors.success : statusColors.error,\n className\n )}\n >\n {isValid ? (\n <>\n <CheckCircle2 className=\"h-3 w-3\" />\n Geçerli\n </>\n ) : (\n <>\n <XCircle className=\"h-3 w-3\" />\n Geçersiz\n </>\n )}\n </div>\n );\n}\n","/**\n * AdvancedJsonEditor - Main container component\n * Combines text editor, tree editor, validation, and toolbar\n * Follows project patterns with Turkish labels and toast notifications\n */\n\n'use client';\n\nimport { useState, useCallback, useMemo } from 'react';\nimport { FileCode, AlertCircle } from 'lucide-react';\nimport { toast } from 'sonner';\nimport { CollapsibleSection } from '@/components/property-panel/CollapsibleSection';\nimport { JsonViewer } from '@/components/display/JsonViewer';\nimport type { AdvancedJsonEditorProps, EditorMode } from './types';\nimport { useJsonValidation } from './hooks/useJsonValidation';\nimport { JsonTextEditor } from './components/JsonTextEditor';\nimport { JsonTreeEditor } from './components/JsonTreeEditor';\nimport { JsonToolbar } from './components/JsonToolbar';\nimport { ValidationStatus, ValidationBadge } from './components/ValidationStatus';\n\nexport function AdvancedJsonEditor({\n // Core\n value,\n onChange,\n onSave,\n\n // Display\n title = 'JSON İçeriği',\n icon: Icon = FileCode,\n defaultOpen = true,\n maxViewHeight = 400,\n rows = 12,\n placeholder = '{}',\n\n // Mode\n defaultMode = 'text',\n allowModeSwitch = true,\n\n // Validation\n schema,\n\n // State\n editable = true,\n disabled = false,\n disabledReason,\n isSaving = false,\n\n // Features\n showLineNumbers = true,\n showValidation = true,\n showStats = true,\n}: AdvancedJsonEditorProps) {\n const [isEditing, setIsEditing] = useState(false);\n const [editValue, setEditValue] = useState(value);\n const [mode, setMode] = useState<EditorMode>(defaultMode);\n const [copied, setCopied] = useState(false);\n\n // Validation for current value (edit or view)\n const currentValue = isEditing ? editValue : value;\n const validation = useJsonValidation({ value: currentValue, schema });\n\n // Handle edit start\n const handleEdit = useCallback(() => {\n setEditValue(value);\n setIsEditing(true);\n }, [value]);\n\n // Handle cancel\n const handleCancel = useCallback(() => {\n setEditValue(value);\n setIsEditing(false);\n setMode(defaultMode);\n }, [value, defaultMode]);\n\n // Handle save\n const handleSave = useCallback(() => {\n if (!validation.isValid) {\n toast.error('JSON geçersiz', {\n description: 'Lütfen hataları düzeltin ve tekrar deneyin.',\n });\n return;\n }\n\n if (onSave) {\n onSave(editValue);\n } else if (onChange) {\n onChange(editValue);\n }\n setIsEditing(false);\n }, [editValue, validation.isValid, onSave, onChange]);\n\n // Handle mode change\n const handleModeChange = useCallback((newMode: EditorMode) => {\n // Can only switch to tree if JSON is valid\n if (newMode === 'tree' && !validation.isValid) {\n toast.warning('Ağaç görünümüne geçilemiyor', {\n description: 'Önce JSON hatalarını düzeltin.',\n });\n return;\n }\n setMode(newMode);\n }, [validation.isValid]);\n\n // Handle tree editor value change\n const handleTreeChange = useCallback((newValue: unknown) => {\n const jsonString = JSON.stringify(newValue, null, 2);\n setEditValue(jsonString);\n }, []);\n\n // Format JSON\n const handleFormat = useCallback(() => {\n if (validation.isValid && validation.parsed !== null) {\n const formatted = JSON.stringify(validation.parsed, null, 2);\n setEditValue(formatted);\n toast.success('JSON biçimlendirildi');\n }\n }, [validation]);\n\n // Copy to clipboard\n const handleCopy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(currentValue);\n setCopied(true);\n toast.success('Panoya kopyalandı');\n setTimeout(() => setCopied(false), 2000);\n } catch {\n toast.error('Kopyalama başarısız', {\n description: 'Panoya kopyalanırken bir hata oluştu.',\n });\n }\n }, [currentValue]);\n\n // Stats for display\n const stats = useMemo(() => {\n if (!currentValue) return null;\n const lines = currentValue.split('\\n').length;\n const chars = currentValue.length;\n return { lines, chars };\n }, [currentValue]);\n\n return (\n <CollapsibleSection\n title={title}\n icon={Icon}\n defaultOpen={defaultOpen}\n editable={editable && !disabled}\n isEditing={isEditing}\n isSaving={isSaving}\n onEdit={handleEdit}\n onSave={validation.isValid ? handleSave : undefined}\n onCancel={handleCancel}\n >\n {/* Disabled reason */}\n {disabled && disabledReason && (\n <div className=\"text-xs text-muted-foreground mb-3 flex items-center gap-1.5 bg-muted/40 rounded-md px-2.5 py-1.5\">\n <AlertCircle className=\"h-3.5 w-3.5 text-status-warning\" />\n {disabledReason}\n </div>\n )}\n\n {isEditing ? (\n <div className=\"space-y-3\">\n {/* Toolbar */}\n <div className=\"flex items-center justify-between gap-3\">\n <JsonToolbar\n mode={mode}\n onModeChange={handleModeChange}\n onFormat={handleFormat}\n onCopy={handleCopy}\n isValid={validation.isValid}\n allowModeSwitch={allowModeSwitch}\n copied={copied}\n />\n {showValidation && (\n <ValidationBadge isValid={validation.isValid} />\n )}\n </div>\n\n {/* Editor */}\n {mode === 'text' ? (\n <JsonTextEditor\n value={editValue}\n onChange={setEditValue}\n rows={rows}\n placeholder={placeholder}\n showLineNumbers={showLineNumbers}\n isValid={validation.isValid}\n disabled={disabled}\n />\n ) : (\n <JsonTreeEditor\n value={validation.parsed}\n onChange={handleTreeChange}\n maxHeight={maxViewHeight}\n disabled={disabled}\n />\n )}\n\n {/* Validation errors */}\n {showValidation && !validation.isValid && (\n <ValidationStatus validation={validation} showDetails />\n )}\n\n {/* Stats */}\n {showStats && stats && (\n <div className=\"flex items-center justify-between text-xs text-muted-foreground/70 px-1\">\n <span>{stats.lines} satır</span>\n <span>{stats.chars} karakter</span>\n </div>\n )}\n </div>\n ) : (\n <JsonViewer\n data={validation.parsed as Record<string, unknown> | unknown[] | string | null | undefined}\n collapsible\n copyable\n maxHeight={maxViewHeight}\n />\n )}\n </CollapsibleSection>\n );\n}\n","import { useEffect } from 'react';\nimport { cn } from '@/lib/utils';\nimport type { BreadcrumbItem } from '@/types/common';\n\nexport type { BreadcrumbItem };\n\nexport interface PageHeaderProps {\n title: string;\n description?: string;\n icon: React.ComponentType<{ className?: string }>;\n breadcrumbs: BreadcrumbItem[];\n actions?: React.ReactNode;\n className?: string;\n /** Callback to sync breadcrumbs with external store (e.g. uiStore) */\n onBreadcrumbsChange?: (breadcrumbs: BreadcrumbItem[]) => void;\n}\n\nexport function PageHeader({\n title,\n description,\n icon: Icon,\n breadcrumbs,\n actions,\n className,\n onBreadcrumbsChange,\n}: PageHeaderProps) {\n // Sync breadcrumbs with external store when provided\n useEffect(() => {\n onBreadcrumbsChange?.(breadcrumbs);\n return () => {\n onBreadcrumbsChange?.([]);\n };\n }, [breadcrumbs, onBreadcrumbsChange]);\n\n return (\n <div className={cn('space-y-4', className)}>\n {/* Header content */}\n <div className=\"flex items-center justify-between animate-in fade-in slide-in-from-top-2 duration-500\">\n <div className=\"flex items-center gap-4\">\n {/* Icon - Standard dark blue */}\n <div className=\"relative flex h-12 w-12 items-center justify-center rounded-xl border border-accent-cyan/40 bg-accent-cyan/15 shadow-sm\">\n <Icon className=\"h-6 w-6 text-accent-cyan\" />\n <div className=\"absolute inset-0 rounded-xl bg-accent-cyan/10 blur-sm\" />\n </div>\n <div>\n <h1 className=\"text-xl font-bold tracking-tight text-accent-cyan\">\n {title}\n </h1>\n {description && (\n <p className=\"text-xs text-muted-foreground mt-0.5\">\n {description}\n </p>\n )}\n </div>\n </div>\n\n {/* Action buttons */}\n {actions && (\n <div className=\"flex items-center gap-2\">{actions}</div>\n )}\n </div>\n\n {/* Divider - Full visibility */}\n <div className=\"h-px bg-border\" />\n </div>\n );\n}\n","import { useRef, useCallback, useMemo } from 'react';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport type MountStrategy = 'eager' | 'lazy-persist' | 'lazy-remount';\n\nexport interface UseLazyTabsOptions {\n /** All tab IDs in order */\n tabIds: string[];\n /** Currently active tab ID */\n activeTab: string;\n /** Default strategy for all tabs (default: 'lazy-persist') */\n defaultStrategy?: MountStrategy;\n /** Per-tab strategy overrides */\n strategyOverrides?: Record<string, MountStrategy>;\n}\n\nexport interface UseLazyTabsReturn {\n /** Whether a tab should be mounted in the DOM */\n shouldMount: (tabId: string) => boolean;\n /** Whether a tab is currently active */\n isActive: (tabId: string) => boolean;\n /** Set of tab IDs that have been visited at least once */\n visitedTabs: ReadonlySet<string>;\n}\n\n// ============================================================================\n// HOOK\n// ============================================================================\n\n/**\n * useLazyTabs — Controls tab mount/unmount behavior with three strategies:\n *\n * - `eager`: Always mounted (current default behavior)\n * - `lazy-persist`: Mount on first visit, keep mounted (display: none when inactive)\n * - `lazy-remount`: Mount only when active, unmount on leave\n */\nexport function useLazyTabs({\n // tabIds reserved for future per-tab validation\n activeTab,\n defaultStrategy = 'lazy-persist',\n strategyOverrides,\n}: UseLazyTabsOptions): UseLazyTabsReturn {\n // Track visited tabs across renders without causing re-renders\n const visitedRef = useRef<Set<string>>(new Set([activeTab]));\n\n // Always mark the active tab as visited\n visitedRef.current.add(activeTab);\n\n const getStrategy = useCallback(\n (tabId: string): MountStrategy => {\n return strategyOverrides?.[tabId] ?? defaultStrategy;\n },\n [defaultStrategy, strategyOverrides],\n );\n\n const shouldMount = useCallback(\n (tabId: string): boolean => {\n const strategy = getStrategy(tabId);\n\n switch (strategy) {\n case 'eager':\n return true;\n\n case 'lazy-persist':\n // Mount if visited at least once\n return visitedRef.current.has(tabId);\n\n case 'lazy-remount':\n // Mount only when active\n return tabId === activeTab;\n\n default:\n return true;\n }\n },\n [activeTab, getStrategy],\n );\n\n const isActive = useCallback(\n (tabId: string): boolean => tabId === activeTab,\n [activeTab],\n );\n\n const visitedTabs = useMemo(\n () => new Set(visitedRef.current) as ReadonlySet<string>,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [activeTab],\n );\n\n return { shouldMount, isActive, visitedTabs };\n}\n","import { useEffect, useRef } from 'react';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface UseTabUrlSyncOptions {\n /** Valid tab IDs for URL validation */\n validTabIds: string[];\n /** Default tab (URL param removed when this is active) */\n defaultTab: string;\n /** Currently active tab */\n activeTab: string;\n /** Callback to change the active tab */\n onTabChange: (tabId: string) => void;\n /** URL search param key (default: 'tab') */\n paramKey?: string;\n /** Use replaceState instead of pushState (default: true) */\n replace?: boolean;\n}\n\n// ============================================================================\n// HOOK\n// ============================================================================\n\n/**\n * useTabUrlSync — Synchronizes active tab state with URL search params.\n *\n * - On mount: reads tab from URL and calls onTabChange if valid\n * - On tab change: updates URL param (replaceState by default)\n * - Default tab cleans the param from URL for cleaner URLs\n * - Uses window.history directly — no router dependency\n */\nexport function useTabUrlSync({\n validTabIds,\n defaultTab,\n activeTab,\n onTabChange,\n paramKey = 'tab',\n replace = true,\n}: UseTabUrlSyncOptions): void {\n const isHydrated = useRef(false);\n const isUpdatingUrl = useRef(false);\n\n // Hydrate from URL on mount\n useEffect(() => {\n if (isHydrated.current) return;\n isHydrated.current = true;\n\n const params = new URLSearchParams(window.location.search);\n const urlTab = params.get(paramKey);\n\n if (urlTab && validTabIds.includes(urlTab) && urlTab !== activeTab) {\n isUpdatingUrl.current = true;\n onTabChange(urlTab);\n // Reset flag after microtask to prevent the sync-back effect\n queueMicrotask(() => {\n isUpdatingUrl.current = false;\n });\n }\n // Only run on mount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Sync active tab → URL\n useEffect(() => {\n // Skip the first sync-back after hydration\n if (isUpdatingUrl.current) return;\n\n const url = new URL(window.location.href);\n\n if (activeTab === defaultTab) {\n // Remove param for default tab → clean URL\n url.searchParams.delete(paramKey);\n } else {\n url.searchParams.set(paramKey, activeTab);\n }\n\n // Only update if URL actually changed\n if (url.href !== window.location.href) {\n const method = replace ? 'replaceState' : 'pushState';\n window.history[method](window.history.state, '', url.href);\n }\n }, [activeTab, defaultTab, paramKey, replace]);\n}\n","/**\n * getTabDirection — Calculates slide direction based on tab index positions.\n *\n * @returns -1 (slide from left), 0 (no direction / same tab), 1 (slide from right)\n */\nexport function getTabDirection(\n tabIds: string[],\n fromTab: string | null,\n toTab: string,\n): -1 | 0 | 1 {\n if (!fromTab || fromTab === toTab) return 0;\n\n const fromIndex = tabIds.indexOf(fromTab);\n const toIndex = tabIds.indexOf(toTab);\n\n // If either tab is not found, default to fade-only\n if (fromIndex === -1 || toIndex === -1) return 0;\n\n return toIndex > fromIndex ? 1 : -1;\n}\n","/**\n * UnifiedTabs - Unified tab component for list and detail pages\n *\n * Provides consistent tab styling across the application with two variants:\n * - 'simple': For list pages (no overflow) - tabs control external content\n * - 'overflow': For detail pages - uses Radix Tabs with dropdown for overflow items\n *\n * Features:\n * - Consistent cyan color theme with underline indicator\n * - Support for count badges, NEW/BETA badges\n * - Overflow dropdown for detail pages with many tabs\n * - Accessible keyboard navigation (via Radix in overflow variant)\n * - Optional lazy tab loading (lazy-persist / lazy-remount / eager)\n * - Optional tab transition animations (fade / slide)\n * - Optional URL sync for tab state persistence\n *\n * @example Simple variant (list pages)\n * ```tsx\n * <UnifiedTabs\n * tabs={[{ id: 'gateways', label: 'Gateways', icon: Router, count: 1234 }]}\n * activeTab={activeTab}\n * onTabChange={handleTabChange}\n * variant=\"simple\"\n * >\n * {activeTab === 'gateways' && <GatewayTable />}\n * </UnifiedTabs>\n * ```\n *\n * @example Overflow variant with lazy loading and URL sync\n * ```tsx\n * <UnifiedTabs\n * tabs={tabs}\n * activeTab={activeTab}\n * onTabChange={setActiveTab}\n * variant=\"overflow\"\n * transition=\"slide\"\n * urlSync\n * lazyMount=\"lazy-persist\"\n * >\n * <TabsContent value=\"meters\">...</TabsContent>\n * </UnifiedTabs>\n * ```\n */\n\nimport { memo, useMemo, useRef } from 'react';\nimport { MoreHorizontal } from 'lucide-react';\nimport { Tabs, TabsList, TabsTrigger } from '@/components/ui/tabs';\nimport { Button } from '@/components/ui/button';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n DropdownMenuSeparator,\n DropdownMenuLabel,\n} from '@/components/ui/dropdown-menu';\nimport { cn } from '@/lib/utils';\nimport { useLazyTabs, type MountStrategy } from './useLazyTabs';\nimport { useTabUrlSync } from './useTabUrlSync';\nimport { getTabDirection } from './tab-animations';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface TabConfig {\n /** Unique identifier for the tab */\n id: string;\n /** Display label */\n label: string;\n /** Optional icon component */\n icon?: React.ComponentType<{ className?: string }>;\n /** Static count to display as badge */\n count?: number;\n /** Special badge indicator */\n badge?: 'new' | 'beta';\n /** Tab grouping for overflow variant: 'primary' = visible, 'overflow' = in dropdown */\n group?: 'primary' | 'overflow';\n /** Description shown in dropdown tooltip */\n description?: string;\n /** Per-tab mount strategy override (only used when lazyMount is enabled) */\n mountStrategy?: MountStrategy;\n}\n\nexport interface UnifiedTabsProps {\n /** Array of tab configurations */\n tabs: TabConfig[];\n /** Currently active tab ID */\n activeTab: string;\n /** Callback fired when active tab changes */\n onTabChange: (tabId: string) => void;\n /** Tab content - use TabsContent for overflow variant, conditional render for simple */\n children: React.ReactNode;\n /** Tab variant: 'simple' for list pages, 'overflow' for detail pages */\n variant?: 'simple' | 'overflow';\n /** Dynamic count getter - overrides static count in TabConfig */\n getTabCount?: (tabId: string) => number | undefined;\n /** Additional CSS classes for the container */\n className?: string;\n\n // --- New optional props (all default off) ---\n\n /** Tab transition animation: true/'fade' = fade, 'slide' = directional slide */\n transition?: boolean | 'fade' | 'slide';\n /** URL sync: true = ?tab=, string = custom param key */\n urlSync?: boolean | string;\n /** Lazy mount strategy: true = 'lazy-persist', or specify strategy */\n lazyMount?: boolean | MountStrategy;\n /** Wrap tab content in a card container (border + background + rounded) */\n contentCard?: boolean;\n}\n\n// ============================================================================\n// STYLES\n// ============================================================================\n\nconst styles = {\n // Tab trigger base\n trigger: {\n base: 'relative flex items-center gap-2 pb-3 pt-1 text-sm font-medium transition-all duration-200 rounded-none border-none bg-transparent shadow-none',\n active: 'text-accent-cyan',\n inactive: 'text-muted-foreground hover:text-accent-cyan/80',\n },\n\n // Icon\n icon: {\n base: 'h-4 w-4 transition-transform duration-200',\n active: 'scale-110',\n },\n\n // Badges\n badge: {\n base: 'px-1.5 py-0.5 rounded text-xs font-semibold',\n count: {\n active: 'bg-accent-cyan/15 text-accent-cyan',\n inactive: 'bg-muted text-muted-foreground',\n },\n new: 'bg-status-success/10 text-status-success-foreground',\n beta: 'bg-status-warning/10 text-status-warning',\n },\n\n // Active indicator\n indicator: 'absolute bottom-0 left-0 right-0 h-0.5 rounded-full bg-accent-cyan',\n\n // Overflow button\n overflow: {\n base: 'h-8 px-2 gap-1.5 rounded-md',\n active: 'text-accent-cyan bg-accent-cyan/10',\n inactive: 'text-muted-foreground hover:text-accent-cyan/80',\n },\n\n // Dropdown item\n dropdownItem: {\n base: 'gap-2 cursor-pointer text-sm',\n active: 'bg-accent-cyan/10 text-accent-cyan',\n },\n} as const;\n\n// ============================================================================\n// SUB-COMPONENTS\n// ============================================================================\n\ninterface TabContentProps {\n tab: TabConfig;\n isActive: boolean;\n count?: number;\n}\n\n/**\n * Renders the inner content of a tab (icon, label, badges)\n * Memoized to prevent unnecessary re-renders\n */\nconst TabContent = memo(function TabContent({ tab, isActive, count }: TabContentProps) {\n const Icon = tab.icon;\n const displayCount = count ?? tab.count;\n\n return (\n <>\n {Icon && (\n <Icon\n className={cn(\n styles.icon.base,\n isActive && styles.icon.active\n )}\n />\n )}\n\n <span>{tab.label}</span>\n\n {/* Count badge */}\n {displayCount !== undefined && (\n <span\n className={cn(\n styles.badge.base,\n isActive ? styles.badge.count.active : styles.badge.count.inactive\n )}\n >\n {displayCount.toLocaleString()}\n </span>\n )}\n\n {/* NEW badge */}\n {tab.badge === 'new' && (\n <span className={cn(styles.badge.base, styles.badge.new)}>\n NEW\n </span>\n )}\n\n {/* BETA badge */}\n {tab.badge === 'beta' && (\n <span className={cn(styles.badge.base, styles.badge.beta)}>\n BETA\n </span>\n )}\n\n {/* Active indicator bar */}\n {isActive && <div className={styles.indicator} />}\n </>\n );\n});\n\ninterface OverflowDropdownProps {\n tabs: TabConfig[];\n activeTab: string;\n onTabChange: (tabId: string) => void;\n}\n\n/**\n * Dropdown menu for overflow tabs in detail pages\n * Memoized to prevent unnecessary re-renders\n */\nconst OverflowDropdown = memo(function OverflowDropdown({\n tabs,\n activeTab,\n onTabChange,\n}: OverflowDropdownProps) {\n const isActiveInOverflow = tabs.some((t) => t.id === activeTab);\n const activeOverflowTab = tabs.find((t) => t.id === activeTab);\n\n if (tabs.length === 0) return null;\n\n return (\n <div className=\"shrink-0 border-l pl-2 pr-1\">\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n styles.overflow.base,\n isActiveInOverflow ? styles.overflow.active : styles.overflow.inactive\n )}\n >\n {isActiveInOverflow && activeOverflowTab ? (\n <>\n {activeOverflowTab.icon && (\n <activeOverflowTab.icon className=\"h-4 w-4\" />\n )}\n <span className=\"text-sm font-medium\">{activeOverflowTab.label}</span>\n </>\n ) : (\n <>\n <MoreHorizontal className=\"h-4 w-4\" />\n <span className=\"text-sm font-medium\">More</span>\n </>\n )}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-48\">\n <DropdownMenuLabel className=\"text-2xs uppercase tracking-wider text-muted-foreground\">\n More Options\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n {tabs.map((tab) => {\n const Icon = tab.icon;\n return (\n <DropdownMenuItem\n key={tab.id}\n onClick={() => onTabChange(tab.id)}\n className={cn(\n styles.dropdownItem.base,\n activeTab === tab.id && styles.dropdownItem.active\n )}\n >\n {Icon && <Icon className=\"h-4 w-4 text-muted-foreground\" />}\n <span>{tab.label}</span>\n </DropdownMenuItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n});\n\n// ============================================================================\n// INTERNAL HOOKS\n// ============================================================================\n\n/**\n * Resolves the normalized mount strategy from the lazyMount prop\n */\nfunction resolveMountStrategy(lazyMount: UnifiedTabsProps['lazyMount']): MountStrategy | null {\n if (!lazyMount) return null;\n if (lazyMount === true) return 'lazy-persist';\n return lazyMount;\n}\n\n/**\n * Resolves transition type from the transition prop\n */\nfunction resolveTransition(transition: UnifiedTabsProps['transition']): 'fade' | 'slide' | null {\n if (!transition) return null;\n if (transition === true || transition === 'fade') return 'fade';\n return 'slide';\n}\n\n// ============================================================================\n// MAIN COMPONENT\n// ============================================================================\n\n/**\n * UnifiedTabs - Single tab component for both list and detail pages\n */\nexport function UnifiedTabs({\n tabs,\n activeTab,\n onTabChange,\n children,\n variant = 'simple',\n getTabCount,\n className,\n transition,\n urlSync,\n lazyMount,\n contentCard,\n}: UnifiedTabsProps) {\n const tabIds = useMemo(() => tabs.map((t) => t.id), [tabs]);\n const prevTabRef = useRef<string | null>(null);\n\n // --- Resolve optional features ---\n const mountStrategy = resolveMountStrategy(lazyMount);\n const transitionType = resolveTransition(transition);\n\n // --- URL Sync (opt-in) ---\n const urlSyncEnabled = !!urlSync;\n const paramKey = typeof urlSync === 'string' ? urlSync : 'tab';\n\n useTabUrlSync(\n urlSyncEnabled\n ? {\n validTabIds: tabIds,\n defaultTab: tabIds[0] ?? '',\n activeTab,\n onTabChange,\n paramKey,\n }\n : {\n validTabIds: [],\n defaultTab: '',\n activeTab,\n onTabChange: () => {},\n paramKey: 'tab',\n },\n );\n\n // --- Lazy Tabs (opt-in) ---\n const strategyOverrides = useMemo(() => {\n if (!mountStrategy) return undefined;\n const overrides: Record<string, MountStrategy> = {};\n for (const tab of tabs) {\n if (tab.mountStrategy) {\n overrides[tab.id] = tab.mountStrategy;\n }\n }\n return Object.keys(overrides).length > 0 ? overrides : undefined;\n }, [tabs, mountStrategy]);\n\n // Call the hook so it tracks visited tabs internally (side effect).\n // Consumers who need shouldMount/isActive use the standalone hook + TabPanel.\n useLazyTabs({\n tabIds,\n activeTab,\n defaultStrategy: mountStrategy ?? 'eager',\n strategyOverrides,\n });\n\n // --- Direction tracking for animations ---\n const direction = useMemo(() => {\n if (!transitionType) return 0 as const;\n const dir = transitionType === 'slide'\n ? getTabDirection(tabIds, prevTabRef.current, activeTab)\n : (0 as const);\n return dir;\n }, [transitionType, tabIds, activeTab]);\n\n // Update prev tab ref after direction calculation\n // Using useMemo to ensure it happens synchronously after direction is computed\n useMemo(() => {\n prevTabRef.current = activeTab;\n }, [activeTab]);\n\n // --- Content wrapper props for animation + optional card ---\n const contentWrapperProps = {\n ...(transitionType && {\n key: activeTab, // Force remount to re-trigger animation\n 'data-tab-direction': direction,\n }),\n className: cn(\n transitionType && 'tab-panel-enter',\n contentCard && 'mt-3 bg-card border border-border rounded-lg overflow-hidden',\n ) || undefined,\n };\n\n // Split tabs into visible and overflow groups for overflow variant\n const { visibleTabs, overflowTabs } = useMemo(() => {\n if (variant === 'simple') {\n return { visibleTabs: tabs, overflowTabs: [] };\n }\n return {\n visibleTabs: tabs.filter((tab) => tab.group === 'primary' || !tab.group),\n overflowTabs: tabs.filter((tab) => tab.group === 'overflow'),\n };\n }, [tabs, variant]);\n\n // Simple variant - button-based tabs without Radix\n if (variant === 'simple') {\n return (\n <div className={cn('animate-in fade-in slide-in-from-bottom-2 duration-500', className)}>\n {/* Tab bar */}\n <div className=\"flex items-center gap-6 px-1 pb-0 mb-[-1px] relative z-10\">\n {tabs.map((tab) => {\n const isActive = activeTab === tab.id;\n return (\n <button\n key={tab.id}\n onClick={() => onTabChange(tab.id)}\n className={cn(\n styles.trigger.base,\n isActive ? styles.trigger.active : styles.trigger.inactive\n )}\n >\n <TabContent\n tab={tab}\n isActive={isActive}\n count={getTabCount?.(tab.id)}\n />\n </button>\n );\n })}\n </div>\n\n {/* Content */}\n <div {...contentWrapperProps}>{children}</div>\n </div>\n );\n }\n\n // Overflow variant - Radix Tabs with dropdown\n return (\n <div className={cn('animate-in fade-in slide-in-from-bottom-2 duration-300', className)}>\n <Tabs\n value={activeTab}\n onValueChange={onTabChange}\n className=\"w-full\"\n >\n {/* Tab Navigation */}\n <div className=\"border-b\">\n <div className=\"flex items-center\">\n {/* Scrollable Tab Area */}\n <div className=\"flex-1 overflow-x-auto scrollbar-none\">\n <TabsList variant=\"line\" className=\"inline-flex h-auto bg-transparent p-0 px-1 gap-6\">\n {visibleTabs.map((tab) => {\n const isActive = activeTab === tab.id;\n return (\n <TabsTrigger\n key={tab.id}\n value={tab.id}\n className={cn(\n styles.trigger.base,\n 'data-[state=active]:bg-transparent data-[state=active]:shadow-none data-[state=active]:text-accent-cyan',\n 'focus-visible:ring-0 focus-visible:ring-offset-0',\n 'after:!opacity-0',\n isActive ? styles.trigger.active : styles.trigger.inactive\n )}\n >\n <TabContent\n tab={tab}\n isActive={isActive}\n count={getTabCount?.(tab.id) ?? tab.count}\n />\n </TabsTrigger>\n );\n })}\n </TabsList>\n </div>\n\n {/* Overflow Dropdown */}\n <OverflowDropdown\n tabs={overflowTabs}\n activeTab={activeTab}\n onTabChange={onTabChange}\n />\n </div>\n </div>\n\n {/* Tab Content - rendered as children */}\n <div {...contentWrapperProps}>{children}</div>\n </Tabs>\n </div>\n );\n}\n\n// Re-export types and utilities for convenience\nexport type { MountStrategy } from './useLazyTabs';\n","/**\n * Detail Page Metadata Footer\n * Displays entity ID and audit information (created/updated by or timestamps)\n */\n\nimport { cn } from '@/lib/utils';\n\ninterface DetailPageMetadataFooterProps {\n /** Entity ID to display */\n id: number | string;\n /** User who created the entity */\n createdBy?: string | null;\n /** User who last updated the entity */\n updatedBy?: string | null;\n /** Custom right-side content (overrides createdBy/updatedBy) */\n rightContent?: React.ReactNode;\n /** Additional class names */\n className?: string;\n}\n\nexport function DetailPageMetadataFooter({\n id,\n createdBy,\n updatedBy,\n rightContent,\n className,\n}: DetailPageMetadataFooterProps) {\n return (\n <div\n className={cn(\n 'flex items-center justify-between text-xs text-muted-foreground/60 pt-3',\n className\n )}\n >\n <span>ID: {id}</span>\n {rightContent ? (\n <span>{rightContent}</span>\n ) : (\n <span>\n {createdBy && `Created by ${createdBy}`}\n {updatedBy && ` - Updated by ${updatedBy}`}\n </span>\n )}\n </div>\n );\n}\n","import { memo } from 'react';\nimport { cn } from '@/lib/utils';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface TabPanelProps {\n /** Unique tab identifier */\n tabId: string;\n /** Whether this tab is currently active */\n isActive: boolean;\n /** Whether this tab should be mounted in the DOM */\n shouldMount: boolean;\n /** Enable enter transition animation */\n transition?: boolean;\n /** Slide direction: -1 = from left, 0 = fade only, 1 = from right */\n direction?: -1 | 0 | 1;\n /** Tab content */\n children: React.ReactNode;\n /** Additional CSS classes */\n className?: string;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\n/**\n * TabPanel — Lazy mount wrapper for tab content.\n *\n * - `shouldMount=false` → renders nothing (tab not yet visited)\n * - `shouldMount=true` + `isActive=false` → hidden with `display: none`\n * - `shouldMount=true` + `isActive=true` → visible, with optional animation\n */\nexport const TabPanel = memo(function TabPanel({\n tabId,\n isActive,\n shouldMount,\n transition = false,\n direction = 0,\n children,\n className,\n}: TabPanelProps) {\n if (!shouldMount) return null;\n\n return (\n <div\n role=\"tabpanel\"\n id={`tabpanel-${tabId}`}\n aria-labelledby={`tab-${tabId}`}\n aria-hidden={!isActive}\n data-tab-state={isActive ? 'active' : 'inactive'}\n data-tab-direction={direction}\n className={cn(\n !isActive && 'hidden',\n isActive && transition && 'tab-panel-enter',\n className,\n )}\n >\n {children}\n </div>\n );\n});\n","/**\n * Copy Button - Click to copy value to clipboard\n */\n\n'use client';\n\nimport { useState } from 'react';\nimport { Copy, Check } from 'lucide-react';\n\ninterface CopyButtonProps {\n value: string;\n}\n\nexport function CopyButton({ value }: CopyButtonProps) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = async () => {\n await navigator.clipboard.writeText(value);\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n };\n\n return (\n <button\n onClick={handleCopy}\n className=\"opacity-0 group-hover:opacity-100 ml-1 p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground transition-all\"\n >\n {copied ? (\n <Check className=\"h-3 w-3 text-feedback-success\" />\n ) : (\n <Copy className=\"h-3 w-3\" />\n )}\n </button>\n );\n}\n","/**\n * Property Row - Simple key-value row for property panels\n * Supports inline editing mode\n */\n\n'use client';\n\nimport { cn } from '@/lib/utils';\nimport { Badge } from '@/components/ui/badge';\nimport { Input } from '@/components/ui/input';\nimport { Switch } from '@/components/ui/switch';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select';\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '@/components/ui/tooltip';\nimport { CopyButton } from './CopyButton';\n\ninterface SelectOption {\n value: string;\n label: string;\n}\n\ninterface PropertyRowProps {\n label: string;\n value: string | number | boolean | null | undefined;\n copyable?: boolean;\n badge?: boolean;\n badgeVariant?: 'default' | 'secondary' | 'destructive' | 'outline';\n // Edit mode props\n isEditing?: boolean;\n fieldType?: 'text' | 'number' | 'select' | 'switch' | 'password';\n options?: SelectOption[];\n onChange?: (value: string | number | boolean) => void;\n placeholder?: string;\n disabled?: boolean;\n}\n\nexport function PropertyRow({\n label,\n value,\n copyable = false,\n badge,\n badgeVariant = 'secondary',\n isEditing = false,\n fieldType = 'text',\n options = [],\n onChange,\n placeholder,\n disabled = false,\n}: PropertyRowProps) {\n const displayValue = value ?? '—';\n const stringValue = String(displayValue);\n const isEmpty = value === null || value === undefined || value === '';\n\n // Render edit field based on type\n const renderEditField = () => {\n if (!isEditing || !onChange) return null;\n\n switch (fieldType) {\n case 'switch':\n return (\n <Switch\n checked={Boolean(value)}\n onCheckedChange={onChange}\n disabled={disabled}\n className=\"h-4 w-7\"\n />\n );\n\n case 'select':\n return (\n <Select\n value={String(value ?? '')}\n onValueChange={onChange}\n disabled={disabled}\n >\n <SelectTrigger className=\"h-7 text-xs w-full max-w-property-label\">\n <SelectValue placeholder={placeholder || 'Select...'} />\n </SelectTrigger>\n <SelectContent>\n {options.map((opt) => (\n <SelectItem key={opt.value} value={opt.value} className=\"text-xs\">\n {opt.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n\n case 'number':\n return (\n <Input\n type=\"number\"\n value={typeof value === 'boolean' ? '' : (value ?? '')}\n onChange={(e) => onChange(e.target.valueAsNumber || 0)}\n placeholder={placeholder}\n disabled={disabled}\n className=\"h-7 text-xs w-full max-w-property-label\"\n />\n );\n\n case 'password':\n return (\n <Input\n type=\"password\"\n value={String(value ?? '')}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n disabled={disabled}\n className=\"h-7 text-xs w-full max-w-property-label\"\n autoComplete=\"new-password\"\n />\n );\n\n default:\n return (\n <Input\n type=\"text\"\n value={String(value ?? '')}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n disabled={disabled}\n className=\"h-7 text-xs w-full max-w-property-label\"\n />\n );\n }\n };\n\n // Render display value\n const renderDisplayValue = () => {\n if (fieldType === 'switch') {\n return (\n <span className={cn('text-xs', value ? 'text-status-success-foreground' : 'text-muted-foreground')}>\n {value ? 'Enabled' : 'Disabled'}\n </span>\n );\n }\n\n if (badge && !isEmpty) {\n return (\n <Badge variant={badgeVariant} className=\"text-xs\">\n {displayValue}\n </Badge>\n );\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n className={cn(\n 'text-xs truncate cursor-default',\n isEmpty ? 'text-muted-foreground/50' : 'text-foreground'\n )}\n >\n {displayValue}\n </span>\n </TooltipTrigger>\n {!isEmpty && (\n <TooltipContent side=\"top\" className=\"text-xs max-w-xs\">\n {stringValue}\n </TooltipContent>\n )}\n </Tooltip>\n );\n };\n\n return (\n <div className=\"group flex items-center py-2 px-2 -mx-2 rounded hover:bg-muted/50 transition-colors\">\n <span className=\"w-28 shrink-0 text-xs text-muted-foreground\">{label}</span>\n <span className=\"flex-1 flex items-center min-w-0\">\n {isEditing && onChange ? renderEditField() : renderDisplayValue()}\n {copyable && !isEmpty && !isEditing && <CopyButton value={stringValue} />}\n </span>\n </div>\n );\n}\n","/**\n * JsonEditorSection - CollapsibleSection wrapper for JSON editing\n * Standalone component without React Hook Form dependency\n */\n\n'use client';\n\nimport { useState, useMemo, useCallback } from 'react';\nimport { FileCode, AlertCircle, Check, Copy, Wand2 } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\nimport { Textarea } from '@/components/ui/textarea';\nimport { JsonViewer } from '@/components/display/JsonViewer';\nimport { CollapsibleSection } from './CollapsibleSection';\n\ninterface JsonEditorSectionProps {\n title?: string;\n value: string;\n onChange?: (value: string) => void;\n onSave?: (value: string) => void;\n isSaving?: boolean;\n editable?: boolean;\n disabled?: boolean;\n disabledReason?: string;\n rows?: number;\n maxViewHeight?: number;\n placeholder?: string;\n defaultOpen?: boolean;\n}\n\nexport function JsonEditorSection({\n title = 'JSON Content',\n value,\n onChange,\n onSave,\n isSaving = false,\n editable = true,\n disabled = false,\n disabledReason,\n rows = 12,\n maxViewHeight = 400,\n placeholder = '{}',\n defaultOpen = true,\n}: JsonEditorSectionProps) {\n const [isEditing, setIsEditing] = useState(false);\n const [editValue, setEditValue] = useState(value);\n const [copied, setCopied] = useState(false);\n\n // Parse JSON for validation\n const parseResult = useMemo(() => {\n const val = isEditing ? editValue : value;\n if (!val) return { valid: true, parsed: null, error: null };\n\n try {\n const parsed = JSON.parse(val);\n return { valid: true, parsed, error: null };\n } catch (e) {\n return {\n valid: false,\n parsed: null,\n error: e instanceof Error ? e.message : 'Invalid JSON',\n };\n }\n }, [value, editValue, isEditing]);\n\n // Handle edit start\n const handleEdit = useCallback(() => {\n setEditValue(value);\n setIsEditing(true);\n }, [value]);\n\n // Handle cancel\n const handleCancel = useCallback(() => {\n setEditValue(value);\n setIsEditing(false);\n }, [value]);\n\n // Handle save\n const handleSave = useCallback(() => {\n if (!parseResult.valid) return;\n\n if (onSave) {\n onSave(editValue);\n } else if (onChange) {\n onChange(editValue);\n }\n setIsEditing(false);\n }, [editValue, parseResult.valid, onSave, onChange]);\n\n // Format JSON\n const handleFormat = useCallback(() => {\n if (parseResult.valid && parseResult.parsed !== null) {\n const formatted = JSON.stringify(parseResult.parsed, null, 2);\n setEditValue(formatted);\n }\n }, [parseResult]);\n\n // Copy to clipboard\n const handleCopy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(isEditing ? editValue : value);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n if (import.meta.env.DEV) console.error('Failed to copy:', err);\n }\n }, [value, editValue, isEditing]);\n\n return (\n <CollapsibleSection\n title={title}\n icon={FileCode}\n defaultOpen={defaultOpen}\n editable={editable && !disabled}\n isEditing={isEditing}\n isSaving={isSaving}\n onEdit={handleEdit}\n onSave={parseResult.valid ? handleSave : undefined}\n onCancel={handleCancel}\n >\n {disabled && disabledReason && (\n <div className=\"text-xs text-muted-foreground mb-2 flex items-center gap-1\">\n <AlertCircle className=\"h-3 w-3\" />\n {disabledReason}\n </div>\n )}\n\n {isEditing ? (\n <div className=\"space-y-1.5\">\n {/* Toolbar */}\n <div className=\"flex items-center justify-end gap-1\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"xs\"\n onClick={handleFormat}\n disabled={!parseResult.valid}\n className=\"h-6 px-2 text-xs\"\n title=\"Format JSON\"\n >\n <Wand2 className=\"h-3 w-3 mr-1\" />\n Format\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"xs\"\n onClick={handleCopy}\n className=\"h-6 px-2 text-xs\"\n >\n {copied ? (\n <>\n <Check className=\"h-3 w-3 mr-1 text-feedback-success\" />\n Copied\n </>\n ) : (\n <>\n <Copy className=\"h-3 w-3 mr-1\" />\n Copy\n </>\n )}\n </Button>\n </div>\n\n {/* Editor */}\n <div className=\"relative\">\n <Textarea\n value={editValue}\n onChange={(e) => setEditValue(e.target.value)}\n placeholder={placeholder}\n rows={rows}\n className={cn(\n 'font-mono text-xs resize-none',\n !parseResult.valid && 'border-destructive bg-destructive/5 focus-visible:ring-destructive/30'\n )}\n />\n\n {/* Validation status */}\n <div className={cn(\n 'absolute top-1.5 right-1.5 px-1.5 py-0.5 rounded text-xs',\n parseResult.valid\n ? 'bg-feedback-success/10 text-status-success-foreground'\n : 'bg-destructive/10 text-destructive'\n )}>\n {parseResult.valid ? 'Valid JSON' : 'Invalid JSON'}\n </div>\n </div>\n\n {/* Error message */}\n {!parseResult.valid && (\n <div className=\"flex items-start gap-1.5\">\n <AlertCircle className=\"h-3.5 w-3.5 text-destructive flex-shrink-0 mt-0.5\" />\n <p className=\"text-xs text-destructive\">{parseResult.error}</p>\n </div>\n )}\n\n {/* Stats */}\n <div className=\"flex items-center justify-between text-xs text-muted-foreground\">\n <span>{editValue?.split('\\n').length ?? 0} lines</span>\n <span>{editValue?.length ?? 0} characters</span>\n </div>\n </div>\n ) : (\n <JsonViewer\n data={parseResult.parsed ?? value}\n collapsible\n copyable\n maxHeight={maxViewHeight}\n />\n )}\n </CollapsibleSection>\n );\n}\n","import { cn } from '@/lib/utils';\n\ninterface InfoCardProps {\n icon?: React.ReactNode;\n label: string;\n value: React.ReactNode;\n variant?: 'default' | 'highlighted' | 'muted';\n iconColor?: 'primary' | 'blue' | 'green' | 'orange' | 'purple' | 'slate';\n className?: string;\n}\n\nconst variantStyles = {\n default: 'bg-card/80 backdrop-blur-sm border-white/10 dark:border-white/5',\n highlighted:\n 'bg-gradient-to-br from-primary/10 to-primary/5 border-primary/20',\n muted: 'bg-muted/30 backdrop-blur-sm border-muted/50',\n};\n\nconst iconColorStyles = {\n primary: 'from-primary/15 to-primary/5 text-primary ring-primary/20',\n blue: 'from-status-info/15 to-status-info/5 text-status-info-foreground ring-status-info/20',\n green: 'from-status-success/15 to-status-success/5 text-status-success-foreground ring-status-success/20',\n orange: 'from-status-warning/15 to-status-warning/5 text-status-warning ring-status-warning/20',\n purple: 'from-status-purple/15 to-status-purple/5 text-status-purple-foreground ring-status-purple/20',\n slate: 'from-status-neutral/15 to-status-neutral/5 text-status-neutral-foreground ring-status-neutral/20',\n};\n\nexport function InfoCard({\n icon,\n label,\n value,\n variant = 'default',\n iconColor = 'primary',\n className,\n}: InfoCardProps) {\n return (\n <div\n className={cn(\n // Glassmorphism container\n 'rounded-xl p-3',\n 'border',\n 'shadow-sm hover:shadow-md',\n 'hover:scale-[1.02]',\n 'transition-all duration-200',\n variantStyles[variant],\n className\n )}\n >\n <div className=\"flex items-start gap-2.5\">\n {icon && (\n <div\n className={cn(\n 'flex h-8 w-8 shrink-0 items-center justify-center',\n 'rounded-lg',\n 'bg-gradient-to-br',\n 'ring-1',\n iconColorStyles[iconColor]\n )}\n >\n {icon}\n </div>\n )}\n <div className=\"min-w-0 flex-1 pt-0.5\">\n <p className=\"text-xs font-medium text-muted-foreground/80 mb-1\">\n {label}\n </p>\n <p className=\"text-base font-semibold text-foreground tracking-tight truncate\">\n {value}\n </p>\n </div>\n </div>\n </div>\n );\n}\n\n// Grid wrapper for multiple InfoCards\ninterface InfoCardGridProps {\n children: React.ReactNode;\n columns?: 2 | 3 | 4;\n className?: string;\n}\n\nexport function InfoCardGrid({\n children,\n columns = 4,\n className,\n}: InfoCardGridProps) {\n const gridCols = {\n 2: 'grid-cols-1 sm:grid-cols-2',\n 3: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',\n 4: 'grid-cols-2 sm:grid-cols-4',\n };\n\n return (\n <div className={cn('grid gap-3', gridCols[columns], className)}>\n {children}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\nimport { format } from 'date-fns';\n\nexport interface TimelineItem {\n id: string | number;\n date: string | Date | number;\n title: string;\n description?: string;\n type?: 'default' | 'success' | 'warning' | 'error' | 'info' | 'action';\n isCurrent?: boolean;\n icon?: ReactNode;\n meta?: Record<string, string | number | undefined>;\n}\n\ninterface TimelineProps {\n items: TimelineItem[];\n className?: string;\n /** Show relative time (e.g. \"5m ago\") instead of absolute dates */\n relativeTime?: boolean;\n /** Max number of items to display */\n maxItems?: number;\n /** Empty state message */\n emptyMessage?: string;\n /** Enable staggered animation */\n animated?: boolean;\n /** Animation delay offset in ms */\n animationDelay?: number;\n}\n\nconst typeStyles: Record<string, { dot: string; line: string; text: string; bg?: string; border?: string }> = {\n default: {\n dot: 'bg-muted-foreground/50',\n line: 'bg-muted-foreground/20',\n text: 'text-muted-foreground',\n },\n success: {\n dot: 'bg-status-success',\n line: 'bg-status-success/30',\n text: 'text-status-success-foreground',\n bg: 'bg-status-success/10',\n border: 'border-status-success/30',\n },\n warning: {\n dot: 'bg-status-warning',\n line: 'bg-status-warning/30',\n text: 'text-status-warning',\n bg: 'bg-status-warning/10',\n border: 'border-status-warning/30',\n },\n error: {\n dot: 'bg-status-error',\n line: 'bg-status-error/30',\n text: 'text-status-error',\n bg: 'bg-status-error/10',\n border: 'border-status-error/30',\n },\n info: {\n dot: 'bg-accent-cyan',\n line: 'bg-accent-cyan/30',\n text: 'text-accent-cyan',\n bg: 'bg-accent-cyan/10',\n border: 'border-accent-cyan/30',\n },\n action: {\n dot: 'bg-primary',\n line: 'bg-primary/30',\n text: 'text-primary',\n bg: 'bg-primary/10',\n border: 'border-primary/30',\n },\n};\n\nfunction formatTimelineDate(date: string | Date | number): string {\n if (!date) return '—';\n const d = typeof date === 'number' ? new Date(date) : new Date(date);\n return format(d, 'MMM d, yyyy');\n}\n\nfunction formatRelativeTimelineTime(date: string | Date | number): string {\n if (!date) return '—';\n const d = typeof date === 'number' ? new Date(date) : new Date(date);\n const now = new Date();\n const diff = now.getTime() - d.getTime();\n const minutes = Math.floor(diff / (1000 * 60));\n const hours = Math.floor(diff / (1000 * 60 * 60));\n\n if (minutes < 1) return 'Just now';\n if (minutes < 60) return `${minutes}m ago`;\n if (hours < 24) return `${hours}h ago`;\n return d.toLocaleDateString();\n}\n\nexport function Timeline({\n items,\n className,\n relativeTime = false,\n maxItems,\n emptyMessage = 'No history available',\n animated = false,\n animationDelay = 0,\n}: TimelineProps) {\n const displayItems = maxItems ? items.slice(0, maxItems) : items;\n\n if (!displayItems.length) {\n return (\n <div className=\"py-8 text-center\">\n <p className=\"text-xs text-muted-foreground\">{emptyMessage}</p>\n </div>\n );\n }\n\n const formatDate = relativeTime ? formatRelativeTimelineTime : formatTimelineDate;\n\n return (\n <div className={cn('relative', className)}>\n {displayItems.map((item, index) => {\n const isLast = index === displayItems.length - 1;\n const styles = (typeStyles[item.type ?? 'default'] ?? typeStyles.default)!;\n\n return (\n <div\n key={item.id}\n className={cn(\n 'relative flex gap-4 pb-6 last:pb-0',\n animated && 'animate-in fade-in slide-in-from-left-2'\n )}\n style={animated ? {\n animationDelay: `${animationDelay + (index * 60)}ms`,\n animationFillMode: 'backwards',\n } : undefined}\n >\n {/* Timeline line */}\n {!isLast && (\n <div\n className={cn(\n 'absolute left-[7px] top-4 h-full w-0.5',\n styles.line\n )}\n />\n )}\n\n {/* Dot */}\n <div className=\"relative z-10 flex flex-col items-center\">\n {item.icon && styles.bg ? (\n <div className={cn(\n 'flex h-5 w-5 items-center justify-center rounded-full border',\n styles.bg,\n styles.border\n )}>\n <div className={cn('h-1.5 w-1.5 rounded-full', styles.dot)} />\n </div>\n ) : (\n <div\n className={cn(\n 'h-4 w-4 rounded-full border-2 border-background',\n styles.dot,\n item.isCurrent && 'ring-2 ring-offset-2 ring-offset-background',\n item.isCurrent && item.type === 'success' && 'ring-status-success/50',\n item.isCurrent && item.type === 'warning' && 'ring-status-warning/50',\n item.isCurrent && item.type === 'error' && 'ring-status-error/50',\n item.isCurrent && (!item.type || item.type === 'default') && 'ring-primary/50'\n )}\n />\n )}\n </div>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0 pt-0.5\">\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"flex items-center gap-2 min-w-0 flex-wrap\">\n {item.icon && (\n <span className={cn('flex-shrink-0', styles.text)}>\n {item.icon}\n </span>\n )}\n {!relativeTime && (\n <span className=\"text-xs text-muted-foreground\">\n {formatDate(item.date)}\n </span>\n )}\n {item.isCurrent && (\n <span className=\"inline-flex items-center px-1.5 py-0.5 rounded text-xs bg-primary/10 text-primary\">\n Current\n </span>\n )}\n </div>\n {relativeTime && (\n <span className=\"flex-shrink-0 text-xs text-muted-foreground/60\">\n {formatDate(item.date)}\n </span>\n )}\n </div>\n <p className={cn('mt-0.5 text-sm font-medium', item.icon ? 'text-foreground' : styles.text)}>\n {item.title}\n </p>\n {item.description && (\n <p className=\"mt-0.5 text-xs text-muted-foreground/70 truncate\">\n {item.description}\n </p>\n )}\n\n {/* Meta tags */}\n {item.meta && Object.keys(item.meta).length > 0 && (\n <div className=\"mt-2 flex items-center gap-2 flex-wrap\">\n {Object.entries(item.meta).map(([key, val]) =>\n val !== undefined ? (\n <span\n key={key}\n className=\"inline-flex items-center rounded border border-border bg-muted/50 px-1.5 py-0.5 text-xs text-muted-foreground\"\n >\n {typeof val === 'number' ? val.toLocaleString() : val}\n </span>\n ) : null\n )}\n </div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\n// Simple list variant for IP history etc.\ninterface HistoryListItem {\n id: string | number;\n date: string | Date | number;\n value: string;\n isCurrent?: boolean;\n}\n\ninterface HistoryListProps {\n items: HistoryListItem[];\n className?: string;\n}\n\nexport function HistoryList({ items, className }: HistoryListProps) {\n if (!items.length) {\n return (\n <div className=\"py-8 text-center\">\n <p className=\"text-xs text-muted-foreground\">No history available</p>\n </div>\n );\n }\n\n return (\n <div className={cn('space-y-2', className)}>\n {items.map((item) => (\n <div\n key={item.id}\n className={cn(\n 'flex items-center justify-between rounded-lg px-3 py-2',\n item.isCurrent ? 'bg-primary/5 border border-primary/20' : 'bg-muted/30'\n )}\n >\n <div className=\"flex items-center gap-3\">\n <span className=\"text-sm font-medium text-foreground\">\n {item.value}\n </span>\n {item.isCurrent && (\n <span className=\"inline-flex items-center px-1.5 py-0.5 rounded text-xs bg-primary/10 text-primary\">\n Current\n </span>\n )}\n </div>\n <span className=\"text-xs text-muted-foreground\">\n {formatTimelineDate(item.date)}\n </span>\n </div>\n ))}\n </div>\n );\n}\n","/**\n * Support Badge\n * Displays a boolean support status with check/x icon and label\n */\n\nimport { Check, X } from 'lucide-react';\nimport { cn } from '@/lib/utils';\n\ninterface SupportBadgeProps {\n /** Whether the feature is supported */\n value: boolean;\n /** Label to display (e.g., \"IEC\", \"DLMS\", \"Supported\") */\n label: string;\n /** Additional class names */\n className?: string;\n}\n\nexport function SupportBadge({ value, label, className }: SupportBadgeProps) {\n return (\n <span className={cn(\n 'inline-flex items-center gap-1 px-2 py-0.5 rounded text-xs border',\n value\n ? 'bg-status-success/10 text-status-success-foreground border-status-success/30'\n : 'bg-status-neutral/10 text-status-neutral-foreground border-status-neutral/20',\n className\n )}>\n {value ? <Check className=\"h-3 w-3\" /> : <X className=\"h-3 w-3\" />}\n {label}\n </span>\n );\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\nimport { TrendingUp, TrendingDown, Minus, Loader2 } from 'lucide-react';\n\nexport interface StatCardProps {\n title: string;\n value: string | number;\n unit?: string;\n trend?: {\n value: number;\n direction: 'up' | 'down' | 'neutral';\n };\n trendLabel?: string;\n status?: 'online' | 'warning' | 'error' | 'neutral';\n icon?: ReactNode;\n sparklineData?: number[];\n className?: string;\n animationDelay?: number;\n isLoading?: boolean;\n}\n\nexport function StatCard({\n title,\n value,\n unit,\n trend,\n trendLabel = 'vs last hour',\n status = 'neutral',\n icon,\n sparklineData,\n className,\n animationDelay = 0,\n isLoading = false,\n}: StatCardProps) {\n const statusColors = {\n online: 'bg-status-online',\n warning: 'bg-status-warning',\n error: 'bg-status-error',\n neutral: 'bg-muted-foreground',\n };\n\n const statusGlow = {\n online: 'shadow-[0_0_12px_oklch(var(--status-online)/0.6)]',\n warning: 'shadow-[0_0_12px_oklch(var(--status-warning)/0.6)]',\n error: 'shadow-[0_0_12px_oklch(var(--status-error)/0.6)]',\n neutral: 'shadow-none',\n };\n\n const trendColors = {\n up: 'text-status-online',\n down: 'text-status-error',\n neutral: 'text-muted-foreground',\n };\n\n const TrendIcon = {\n up: TrendingUp,\n down: TrendingDown,\n neutral: Minus,\n };\n\n return (\n <div\n className={cn(\n 'group relative overflow-hidden rounded-lg border border-border bg-card',\n 'backdrop-blur-sm transition-all duration-300',\n 'hover:border-border/70 hover:bg-card/90',\n 'animate-in fade-in slide-in-from-bottom-2',\n className\n )}\n style={{ animationDelay: `${animationDelay}ms`, animationFillMode: 'backwards' }}\n >\n {/* Grid overlay */}\n <div className=\"pointer-events-none absolute inset-0 opacity-[0.02]\"\n style={{\n backgroundImage: `\n linear-gradient(rgba(255,255,255,0.1) 1px, transparent 1px),\n linear-gradient(90deg, rgba(255,255,255,0.1) 1px, transparent 1px)\n `,\n backgroundSize: '20px 20px'\n }}\n />\n\n {/* Status indicator light */}\n <div className=\"absolute right-3 top-3 flex items-center gap-2\">\n {isLoading ? (\n <Loader2 className=\"h-3 w-3 animate-spin text-accent-cyan\" />\n ) : (\n <div\n className={cn(\n 'h-2 w-2 rounded-full transition-all duration-500',\n statusColors[status],\n statusGlow[status],\n status !== 'neutral' && 'animate-pulse'\n )}\n />\n )}\n </div>\n\n {/* Header */}\n <div className=\"mb-2 flex items-center gap-2 px-4 pt-3\">\n {icon && (\n <div className=\"flex h-7 w-7 items-center justify-center rounded border border-border bg-muted/50 text-muted-foreground\">\n {icon}\n </div>\n )}\n <span className=\"text-xs font-medium uppercase tracking-wider text-muted-foreground\">\n {title}\n </span>\n </div>\n\n {/* Value display */}\n <div className=\"mb-2 flex items-baseline gap-2 px-4\">\n {isLoading ? (\n <div className=\"h-9 w-24 animate-pulse rounded bg-muted\" />\n ) : (\n <>\n <span className=\"text-2xl font-bold tracking-tight text-foreground\">\n {typeof value === 'number' ? value.toLocaleString() : value}\n </span>\n {unit && (\n <span className=\"text-xs text-muted-foreground\">{unit}</span>\n )}\n </>\n )}\n </div>\n\n {/* Trend indicator */}\n {trend && !isLoading && (\n <div className={cn('flex items-center gap-1 text-xs px-4', trendColors[trend.direction])}>\n {(() => {\n const Icon = TrendIcon[trend.direction];\n return <Icon className=\"h-3 w-3\" />;\n })()}\n <span>{trend.direction === 'neutral' ? '—' : `${trend.value > 0 ? '+' : ''}${trend.value}%`}</span>\n <span className=\"text-muted-foreground/60\">{trendLabel}</span>\n </div>\n )}\n\n {/* Sparkline */}\n {sparklineData && sparklineData.length > 0 && !isLoading && (\n <div className=\"mt-2 h-8 px-4 pb-3\">\n <Sparkline data={sparklineData} status={status} />\n </div>\n )}\n\n {/* Scan line effect on hover */}\n <div className=\"pointer-events-none absolute inset-0 opacity-0 transition-opacity duration-300 group-hover:opacity-100\">\n <div\n className=\"absolute inset-0 bg-gradient-to-b from-transparent via-accent-cyan/5 to-transparent\"\n style={{\n animation: 'scan 2s linear infinite',\n backgroundSize: '100% 20px',\n }}\n />\n </div>\n </div>\n );\n}\n\nfunction Sparkline({ data, status }: { data: number[]; status: string }) {\n const max = Math.max(...data);\n const min = Math.min(...data);\n const range = max - min || 1;\n const height = 32;\n const width = 100;\n\n const points = data.map((value, index) => {\n const x = (index / (data.length - 1)) * width;\n const y = height - ((value - min) / range) * height;\n return `${x},${y}`;\n }).join(' ');\n\n const strokeColor = {\n online: 'oklch(var(--status-online))',\n warning: 'oklch(var(--status-warning))',\n error: 'oklch(var(--status-error))',\n neutral: 'oklch(var(--muted-foreground))',\n }[status] || 'oklch(var(--muted-foreground))';\n\n const areaPoints = `0,${height} ${points} ${width},${height}`;\n\n return (\n <svg\n viewBox={`0 0 ${width} ${height}`}\n className=\"h-full w-full\"\n preserveAspectRatio=\"none\"\n >\n <defs>\n <linearGradient id={`sparkline-gradient-${status}`} x1=\"0%\" y1=\"0%\" x2=\"0%\" y2=\"100%\">\n <stop offset=\"0%\" stopColor={strokeColor} stopOpacity=\"0.3\" />\n <stop offset=\"100%\" stopColor={strokeColor} stopOpacity=\"0\" />\n </linearGradient>\n </defs>\n <polygon\n points={areaPoints}\n fill={`url(#sparkline-gradient-${status})`}\n />\n <polyline\n points={points}\n fill=\"none\"\n stroke={strokeColor}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\nimport { ChevronRight } from 'lucide-react';\n\nexport interface QuickActionTileProps {\n title: string;\n description: string;\n icon: ReactNode;\n href?: string;\n onClick?: () => void;\n variant?: 'default' | 'primary' | 'warning' | 'danger';\n badge?: string | number;\n className?: string;\n animationDelay?: number;\n}\n\nexport function QuickActionTile({\n title,\n description,\n icon,\n href,\n onClick,\n variant = 'default',\n badge,\n className,\n animationDelay = 0,\n}: QuickActionTileProps) {\n const variants = {\n default: {\n border: 'border-border hover:border-border/70',\n iconBg: 'bg-muted/50 border-border',\n iconColor: 'text-muted-foreground',\n hoverBg: 'hover:bg-muted/50',\n },\n primary: {\n border: 'border-accent-cyan/30 hover:border-accent-cyan/50',\n iconBg: 'bg-accent-cyan/10 border-accent-cyan/30',\n iconColor: 'text-accent-cyan',\n hoverBg: 'hover:bg-accent-cyan/10',\n },\n warning: {\n border: 'border-status-warning/30 hover:border-status-warning/50',\n iconBg: 'bg-status-warning/10 border-status-warning/30',\n iconColor: 'text-status-warning',\n hoverBg: 'hover:bg-status-warning/10',\n },\n danger: {\n border: 'border-status-error/30 hover:border-status-error/50',\n iconBg: 'bg-status-error/10 border-status-error/30',\n iconColor: 'text-status-error',\n hoverBg: 'hover:bg-status-error/10',\n },\n };\n\n const config = variants[variant];\n const Component = href ? 'a' : 'button';\n\n return (\n <Component\n href={href}\n onClick={onClick}\n className={cn(\n 'group relative flex items-center gap-4 rounded-lg border bg-card p-4',\n 'backdrop-blur-sm transition-all duration-300',\n 'animate-in fade-in slide-in-from-bottom-2',\n config.border,\n config.hoverBg,\n className\n )}\n style={{ animationDelay: `${animationDelay}ms`, animationFillMode: 'backwards' }}\n >\n {/* Icon container */}\n <div className={cn(\n 'flex h-12 w-12 shrink-0 items-center justify-center rounded-lg border transition-transform duration-300',\n 'group-hover:scale-105',\n config.iconBg\n )}>\n <div className={config.iconColor}>{icon}</div>\n </div>\n\n {/* Content */}\n <div className=\"flex-1 text-left\">\n <div className=\"flex items-center gap-2\">\n <h4 className=\"text-sm font-medium text-foreground group-hover:text-foreground transition-colors\">\n {title}\n </h4>\n {badge !== undefined && (\n <span className={cn(\n 'rounded-full px-2 py-0.5 text-xs font-medium',\n variant === 'danger' ? 'bg-status-error/20 text-status-error' :\n variant === 'warning' ? 'bg-status-warning/20 text-status-warning' :\n 'bg-muted text-muted-foreground'\n )}>\n {badge}\n </span>\n )}\n </div>\n <p className=\"mt-0.5 text-xs text-muted-foreground\">\n {description}\n </p>\n </div>\n\n {/* Arrow indicator */}\n <ChevronRight className=\"h-5 w-5 text-muted-foreground/60 transition-transform duration-300 group-hover:translate-x-1 group-hover:text-muted-foreground\" />\n\n {/* Subtle gradient border effect on hover */}\n <div className=\"pointer-events-none absolute inset-0 rounded-lg opacity-0 transition-opacity duration-300 group-hover:opacity-100\">\n <div className=\"absolute inset-0 rounded-lg\"\n style={{\n background: `linear-gradient(135deg, ${\n variant === 'primary' ? 'oklch(var(--accent-cyan) / 0.1)' :\n variant === 'warning' ? 'oklch(var(--status-warning) / 0.1)' :\n variant === 'danger' ? 'oklch(var(--status-error) / 0.1)' :\n 'oklch(var(--muted-foreground) / 0.05)'\n } 0%, transparent 50%)`\n }}\n />\n </div>\n </Component>\n );\n}\n","import { MapPin } from 'lucide-react';\nimport { cn } from '@/lib/utils';\n\nexport interface LocationMapProps {\n lat: number;\n lon: number;\n height?: number;\n zoom?: number;\n title?: string;\n linkLabel?: string;\n className?: string;\n}\n\nexport function LocationMap({\n lat,\n lon,\n height = 180,\n zoom = 0.01,\n title = 'Location',\n linkLabel = 'Open in OpenStreetMap',\n className,\n}: LocationMapProps) {\n const bbox = {\n minLon: lon - zoom,\n minLat: lat - zoom,\n maxLon: lon + zoom,\n maxLat: lat + zoom,\n };\n\n const embedUrl = `https://www.openstreetmap.org/export/embed.html?bbox=${bbox.minLon},${bbox.minLat},${bbox.maxLon},${bbox.maxLat}&layer=mapnik&marker=${lat},${lon}`;\n const fullMapUrl = `https://www.openstreetmap.org/?mlat=${lat}&mlon=${lon}#map=15/${lat}/${lon}`;\n\n return (\n <div className={cn('mt-3 rounded-lg overflow-hidden border border-border', className)}>\n <iframe\n title={title}\n width=\"100%\"\n height={height}\n style={{ border: 0 }}\n loading=\"lazy\"\n src={embedUrl}\n />\n <a\n href={fullMapUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex items-center justify-center gap-2 py-2 text-xs text-muted-foreground hover:text-foreground hover:bg-muted/50 transition-colors\"\n >\n <MapPin className=\"h-3 w-3\" />\n {linkLabel}\n </a>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface GaugeFooterStat {\n label: string;\n value: string | number;\n colorClass?: string;\n}\n\nexport interface CircularGaugeProps {\n value: number;\n max?: number;\n target?: number;\n title?: string;\n icon?: ReactNode;\n size?: number;\n strokeWidth?: number;\n footerStats?: GaugeFooterStat[];\n formatValue?: (value: number) => string;\n getStatus?: (value: number, target?: number) => 'excellent' | 'good' | 'warning' | 'critical';\n targetLabel?: string;\n onTargetLabel?: string;\n belowTargetLabel?: (diff: number) => string;\n className?: string;\n animationDelay?: number;\n}\n\nconst defaultGetStatus = (value: number): 'excellent' | 'good' | 'warning' | 'critical' => {\n if (value >= 95) return 'excellent';\n if (value >= 85) return 'good';\n if (value >= 70) return 'warning';\n return 'critical';\n};\n\nconst statusColorMap = {\n excellent: { color: 'text-status-online', stroke: 'stroke-status-online' },\n good: { color: 'text-accent-cyan', stroke: 'stroke-accent-cyan' },\n warning: { color: 'text-status-warning', stroke: 'stroke-status-warning' },\n critical: { color: 'text-status-error', stroke: 'stroke-status-error' },\n};\n\nexport function CircularGauge({\n value,\n max = 100,\n target,\n title,\n icon,\n size = 96,\n strokeWidth = 6,\n footerStats,\n formatValue,\n getStatus = defaultGetStatus,\n targetLabel = 'Target',\n onTargetLabel = 'ON TARGET',\n belowTargetLabel = (diff) => `${diff.toFixed(1)}% BELOW`,\n className,\n animationDelay = 0,\n}: CircularGaugeProps) {\n const percentage = Math.min((value / max) * 100, 100);\n const rateStatus = getStatus(percentage, target);\n const config = statusColorMap[rateStatus];\n const isOnTarget = target !== undefined ? percentage >= target : true;\n\n const radius = (size - strokeWidth) / 2;\n const circumference = radius * 2 * Math.PI;\n const offset = circumference - (percentage / 100) * circumference;\n\n const displayValue = formatValue ? formatValue(value) : `${Math.round(percentage)}`;\n\n return (\n <div\n className={cn(\n 'relative overflow-hidden rounded-lg border border-border bg-card',\n 'backdrop-blur-sm animate-in fade-in slide-in-from-bottom-2',\n className\n )}\n style={{ animationDelay: `${animationDelay}ms`, animationFillMode: 'backwards' }}\n >\n {/* Header */}\n {(title || target !== undefined) && (\n <div className=\"flex items-center justify-between border-b border-border px-3 py-1.5\">\n <div className=\"flex items-center gap-1.5\">\n {icon}\n {title && (\n <span className=\"text-xs font-medium uppercase tracking-wide text-muted-foreground\">\n {title}\n </span>\n )}\n </div>\n {target !== undefined && (\n <span className=\"text-xs text-muted-foreground/70\">\n {targetLabel}: {target}%\n </span>\n )}\n </div>\n )}\n\n {/* Gauge */}\n <div className=\"flex flex-col items-center py-2\">\n <div className=\"relative\">\n <svg\n width={size}\n height={size}\n className=\"-rotate-90 transform\"\n >\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n className=\"text-muted\"\n />\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n fill=\"none\"\n strokeWidth={strokeWidth}\n strokeDasharray={circumference}\n strokeDashoffset={offset}\n strokeLinecap=\"round\"\n className={cn(config.stroke, 'transition-all duration-700 ease-out')}\n />\n </svg>\n\n <div className=\"absolute inset-0 flex items-center justify-center\">\n <span className={cn('text-2xl font-bold tracking-tight', config.color)}>\n {displayValue}\n <span className=\"text-sm font-medium\">%</span>\n </span>\n </div>\n </div>\n\n {/* Target status indicator */}\n {target !== undefined && (\n <div className={cn(\n 'mt-2 flex items-center gap-1 rounded-full px-2 py-0.5',\n isOnTarget\n ? 'bg-status-online/10 text-status-online'\n : 'bg-status-warning/10 text-status-warning'\n )}>\n <span className=\"text-xs font-medium tracking-wide\">\n {isOnTarget ? onTargetLabel : belowTargetLabel(target - percentage)}\n </span>\n </div>\n )}\n </div>\n\n {/* Stats footer */}\n {footerStats && footerStats.length > 0 && (\n <div className={cn(\n 'grid divide-x divide-border border-t border-border',\n `grid-cols-${footerStats.length}`\n )}>\n {footerStats.map((stat, index) => (\n <div key={index} className=\"px-3 py-1.5\">\n <div className=\"text-xs uppercase tracking-wide text-muted-foreground/70\">\n {stat.label}\n </div>\n <div className={cn('text-sm font-semibold text-foreground', stat.colorClass)}>\n {typeof stat.value === 'number' ? stat.value.toLocaleString() : stat.value}\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n","import type { LucideIcon } from 'lucide-react';\nimport {\n LayoutDashboard,\n Router,\n Cpu,\n Smartphone,\n HardDrive,\n FileCode,\n Settings,\n Package,\n Server,\n Blocks,\n CircleDot,\n Gauge,\n Activity,\n FileSearch,\n Users,\n Shield,\n ListTodo,\n Timer,\n Zap,\n} from 'lucide-react';\n\nconst ICON_MAP: Record<string, LucideIcon> = {\n LayoutDashboard,\n Router,\n Cpu,\n Smartphone,\n HardDrive,\n FileCode,\n Settings,\n Package,\n Server,\n Blocks,\n CircleDot,\n Gauge,\n Activity,\n FileSearch,\n Users,\n Shield,\n ListTodo,\n Timer,\n Zap,\n};\n\nexport type IconProp = string | React.ComponentType<{ className?: string }>;\n\nexport function resolveIcon(icon: IconProp): React.ComponentType<{ className?: string }> {\n if (typeof icon !== 'string') return icon;\n return ICON_MAP[icon] ?? CircleDot;\n}\n","import { useState } from 'react';\nimport { Link, useRouterState } from '@tanstack/react-router';\nimport { cn } from '../../lib/utils';\nimport { Button } from '../ui/button';\nimport { ScrollArea } from '../ui/scroll-area';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../ui/tooltip';\nimport { Collapsible, CollapsibleTrigger, CollapsibleContent } from '../ui/collapsible';\nimport { ChevronLeft, ChevronRight, ChevronDown } from 'lucide-react';\nimport { resolveIcon, type IconProp } from './icon-registry';\n\n// ── Types ────────────────────────────────────────────────\n\nexport interface SidebarNavItem {\n title: string;\n href: string;\n icon: IconProp;\n children?: SidebarNavItem[];\n}\n\nexport interface AppSidebarProps {\n items: SidebarNavItem[];\n collapsed: boolean;\n onToggleCollapse: () => void;\n logo?: {\n title: string;\n subtitle?: string;\n letter?: string;\n };\n version?: string;\n}\n\n// ── Active indicator bar ────────────────────────────────\n\nfunction ActiveIndicator() {\n return (\n <div\n className=\"absolute left-0 top-1/2 -translate-y-1/2 w-0.5 h-5 rounded-full\"\n style={{\n background: 'var(--sidebar-indicator-gradient)',\n boxShadow: 'var(--sidebar-indicator-glow)',\n }}\n />\n );\n}\n\n// ── Flat nav item (no children) ─────────────────────────\n\nfunction FlatNavItem({\n item,\n isActive,\n collapsed,\n}: {\n item: SidebarNavItem;\n isActive: boolean;\n collapsed: boolean;\n}) {\n const Icon = resolveIcon(item.icon);\n\n const linkContent = (\n <Link\n to={item.href}\n data-active={isActive}\n className={cn(\n 'group relative flex items-center gap-2.5 rounded-md px-2.5 py-2 text-sm font-medium transition-all duration-200',\n isActive\n ? 'text-sidebar-primary'\n : 'text-sidebar-foreground/60 hover:text-sidebar-foreground hover:bg-sidebar-accent/30',\n collapsed && 'justify-center px-2'\n )}\n style={\n isActive\n ? { background: 'var(--sidebar-active-gradient)' }\n : undefined\n }\n >\n {isActive && <ActiveIndicator />}\n <Icon\n className={cn(\n 'size-sidebar-icon shrink-0 transition-all duration-200',\n isActive\n ? 'text-sidebar-primary'\n : 'text-sidebar-foreground/50 group-hover:text-sidebar-foreground/80'\n )}\n />\n {!collapsed && <span className=\"truncate\">{item.title}</span>}\n </Link>\n );\n\n if (collapsed) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>{linkContent}</TooltipTrigger>\n <TooltipContent\n side=\"right\"\n sideOffset={12}\n className=\"bg-sidebar text-sidebar-foreground border-sidebar-border\"\n >\n {item.title}\n </TooltipContent>\n </Tooltip>\n );\n }\n\n return linkContent;\n}\n\n// ── Flat child link (leaf node inside a collapsible) ────\n\nfunction ChildNavLink({\n item,\n currentPath,\n}: {\n item: SidebarNavItem;\n currentPath: string;\n}) {\n const ChildIcon = resolveIcon(item.icon);\n const isChildActive = currentPath.startsWith(item.href);\n return (\n <Link\n key={item.href}\n to={item.href}\n className={cn(\n 'flex items-center gap-2 rounded-md py-1.5 px-2 text-sm transition-all duration-200',\n isChildActive\n ? 'text-sidebar-primary font-medium'\n : 'text-sidebar-foreground/50 hover:text-sidebar-foreground hover:bg-sidebar-accent/20'\n )}\n >\n <ChildIcon className=\"h-3.5 w-3.5 shrink-0\" />\n <span className=\"truncate\">{item.title}</span>\n </Link>\n );\n}\n\n// ── Recursive tooltip children (for collapsed sidebar) ──\n\nfunction TooltipChildren({\n items,\n currentPath,\n depth = 0,\n}: {\n items: SidebarNavItem[];\n currentPath: string;\n depth?: number;\n}) {\n return (\n <>\n {items.map((child) => {\n const ChildIcon = resolveIcon(child.icon);\n const isChildActive = currentPath.startsWith(child.href);\n const hasChildren = !!child.children?.length;\n\n return (\n <div key={child.href}>\n {hasChildren ? (\n <>\n <p\n className=\"px-3 pb-1 pt-1.5 text-xs font-semibold text-sidebar-foreground/60\"\n style={{ paddingLeft: `calc(var(--sidebar-indent-step) * ${depth + 1})` }}\n >\n {child.title}\n </p>\n <TooltipChildren\n items={child.children!}\n currentPath={currentPath}\n depth={depth + 1}\n />\n </>\n ) : (\n <Link\n to={child.href}\n className={cn(\n 'flex items-center gap-2 py-1.5 text-sm transition-colors',\n isChildActive\n ? 'text-sidebar-primary bg-sidebar-accent/30'\n : 'hover:bg-sidebar-accent/20'\n )}\n style={{ paddingLeft: `calc(var(--sidebar-indent-step) * ${depth + 1})`, paddingRight: '12px' }}\n >\n <ChildIcon className=\"h-3.5 w-3.5\" />\n <span>{child.title}</span>\n </Link>\n )}\n </div>\n );\n })}\n </>\n );\n}\n\n// ── Parent nav item (with children, recursive) ──────────\n\nfunction ParentNavItem({\n item,\n currentPath,\n collapsed,\n depth = 0,\n}: {\n item: SidebarNavItem;\n currentPath: string;\n collapsed: boolean;\n depth?: number;\n}) {\n const isParentActive = currentPath.startsWith(item.href);\n const [open, setOpen] = useState(isParentActive);\n const Icon = resolveIcon(item.icon);\n\n // Collapsed: show tooltip with recursive children list\n if (collapsed && depth === 0) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Link\n to={item.href}\n data-active={isParentActive}\n className={cn(\n 'group relative flex items-center justify-center rounded-md px-2 py-2 text-sm font-medium transition-all duration-200',\n isParentActive\n ? 'text-sidebar-primary'\n : 'text-sidebar-foreground/60 hover:text-sidebar-foreground hover:bg-sidebar-accent/30'\n )}\n style={\n isParentActive\n ? { background: 'var(--sidebar-active-gradient)' }\n : undefined\n }\n >\n {isParentActive && <ActiveIndicator />}\n <Icon\n className={cn(\n 'size-sidebar-icon shrink-0 transition-all duration-200',\n isParentActive\n ? 'text-sidebar-primary'\n : 'text-sidebar-foreground/50 group-hover:text-sidebar-foreground/80'\n )}\n />\n </Link>\n </TooltipTrigger>\n <TooltipContent\n side=\"right\"\n sideOffset={12}\n className=\"bg-sidebar text-sidebar-foreground border-sidebar-border p-0\"\n >\n <div className=\"py-1.5\">\n <p className=\"px-3 pb-1.5 text-xs font-semibold text-sidebar-foreground/60\">\n {item.title}\n </p>\n <TooltipChildren items={item.children!} currentPath={currentPath} />\n </div>\n </TooltipContent>\n </Tooltip>\n );\n }\n\n // Expanded: collapsible group (recursive)\n return (\n <Collapsible open={open} onOpenChange={setOpen}>\n <CollapsibleTrigger\n className={cn(\n 'group relative flex w-full items-center gap-2.5 rounded-md py-2 text-sm font-medium transition-all duration-200',\n depth === 0 ? 'px-2.5' : 'px-2',\n isParentActive\n ? 'text-sidebar-primary'\n : 'text-sidebar-foreground/60 hover:text-sidebar-foreground hover:bg-sidebar-accent/30'\n )}\n style={\n isParentActive\n ? { background: 'var(--sidebar-active-gradient)' }\n : undefined\n }\n >\n {isParentActive && depth === 0 && <ActiveIndicator />}\n <Icon\n className={cn(\n 'shrink-0 transition-all duration-200',\n depth === 0 ? 'size-sidebar-icon' : 'h-3.5 w-3.5',\n isParentActive\n ? 'text-sidebar-primary'\n : 'text-sidebar-foreground/50 group-hover:text-sidebar-foreground/80'\n )}\n />\n <span className=\"truncate\">{item.title}</span>\n <ChevronDown\n className={cn(\n 'ml-auto h-4 w-4 shrink-0 text-sidebar-foreground/40 transition-transform duration-200',\n open && 'rotate-180'\n )}\n />\n </CollapsibleTrigger>\n <CollapsibleContent>\n <div className=\"ml-4 space-y-0.5 border-l border-sidebar-border/30 pl-2 pt-0.5\">\n {item.children!.map((child) =>\n child.children?.length ? (\n <ParentNavItem\n key={child.href}\n item={child}\n currentPath={currentPath}\n collapsed={collapsed}\n depth={depth + 1}\n />\n ) : (\n <ChildNavLink\n key={child.href}\n item={child}\n currentPath={currentPath}\n />\n )\n )}\n </div>\n </CollapsibleContent>\n </Collapsible>\n );\n}\n\n// ── Main AppSidebar ─────────────────────────────────────\n\nconst DEFAULT_LOGO = { title: 'LENA', subtitle: 'PLATFORM', letter: 'L' };\n\nexport function AppSidebar({\n items,\n collapsed,\n onToggleCollapse,\n logo = DEFAULT_LOGO,\n version,\n}: AppSidebarProps) {\n const routerState = useRouterState();\n const currentPath = routerState.location.pathname;\n\n const { title, subtitle, letter = 'L' } = logo;\n\n return (\n <aside\n className={cn(\n 'relative flex h-screen flex-col bg-sidebar transition-all duration-300',\n 'border-r border-sidebar-border/50',\n collapsed ? 'w-16' : 'w-60'\n )}\n style={{\n boxShadow: 'var(--sidebar-inset-shadow)',\n }}\n >\n {/* Subtle gradient overlay for depth */}\n <div\n className=\"pointer-events-none absolute inset-0 opacity-40\"\n style={{\n background: 'var(--sidebar-overlay-gradient)',\n }}\n />\n\n {/* Logo */}\n <div className=\"relative flex h-14 items-center justify-between border-b border-sidebar-border/40 px-3\">\n {!collapsed && (\n <div className=\"flex items-center gap-2.5\">\n <div\n className=\"flex h-8 w-8 items-center justify-center rounded-md\"\n style={{\n background: 'var(--sidebar-logo-gradient)',\n boxShadow: 'var(--sidebar-logo-shadow)',\n }}\n >\n <span className=\"text-sm font-bold text-white\">{letter}</span>\n </div>\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-semibold tracking-tight text-sidebar-foreground\">\n {title}\n </span>\n {subtitle && (\n <span className=\"text-xs text-sidebar-foreground/40 tracking-wider\">\n {subtitle}\n </span>\n )}\n </div>\n </div>\n )}\n {collapsed && (\n <div\n className=\"mx-auto flex h-8 w-8 items-center justify-center rounded-md\"\n style={{\n background: 'var(--sidebar-logo-gradient)',\n boxShadow: 'var(--sidebar-logo-shadow)',\n }}\n >\n <span className=\"text-sm font-bold text-white\">{letter}</span>\n </div>\n )}\n </div>\n\n {/* Collapse toggle */}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\n 'absolute -right-3 z-10 h-6 w-6 rounded-full',\n 'bg-sidebar-border text-sidebar-foreground/70',\n 'hover:text-sidebar-foreground hover:bg-sidebar-accent',\n 'border border-sidebar-border/50 shadow-md'\n )}\n style={{ top: 'var(--sidebar-toggle-offset)' }}\n onClick={onToggleCollapse}\n aria-label={collapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n >\n {collapsed ? (\n <ChevronRight className=\"h-3 w-3\" />\n ) : (\n <ChevronLeft className=\"h-3 w-3\" />\n )}\n </Button>\n\n {/* Navigation */}\n <ScrollArea className=\"relative flex-1 py-3\">\n <nav className=\"space-y-0.5 px-2\">\n <TooltipProvider delayDuration={0}>\n {items.map((item) => {\n if (item.children?.length) {\n return (\n <ParentNavItem\n key={item.href}\n item={item}\n currentPath={currentPath}\n collapsed={collapsed}\n />\n );\n }\n\n const isActive =\n item.href === '/'\n ? currentPath === '/'\n : currentPath.startsWith(item.href);\n\n return (\n <FlatNavItem\n key={item.href}\n item={item}\n isActive={isActive}\n collapsed={collapsed}\n />\n );\n })}\n </TooltipProvider>\n </nav>\n </ScrollArea>\n\n {/* Footer */}\n <div\n className={cn(\n 'relative border-t border-sidebar-border/40 px-3 py-3',\n collapsed && 'px-2'\n )}\n >\n {!collapsed ? (\n <div className=\"flex items-center justify-between\">\n {version && (\n <p className=\"text-xs text-sidebar-foreground/40 tracking-wider\">\n {version}\n </p>\n )}\n <div className=\"flex items-center gap-1\">\n <div className=\"h-1.5 w-1.5 rounded-full bg-status-online animate-pulse\" />\n <span className=\"text-xs text-sidebar-foreground/40\">ONLINE</span>\n </div>\n </div>\n ) : (\n <div className=\"flex justify-center\">\n <div className=\"h-1.5 w-1.5 rounded-full bg-status-online animate-pulse\" />\n </div>\n )}\n </div>\n </aside>\n );\n}\n","import { cn } from '../../lib/utils';\r\nimport { Button } from '../ui/button';\r\nimport { Avatar, AvatarFallback } from '../ui/avatar';\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuLabel,\r\n DropdownMenuSeparator,\r\n DropdownMenuTrigger,\r\n} from '../ui/dropdown-menu';\r\nimport { Moon, Sun, Monitor, LogOut, Home, ChevronRight } from 'lucide-react';\r\nimport type { BreadcrumbItem } from '../../types/common';\r\n\r\n// ── Types ────────────────────────────────────────────────\r\n\r\nexport interface AppHeaderUser {\r\n firstName?: string;\r\n lastName?: string;\r\n email?: string;\r\n}\r\n\r\nexport interface AppHeaderProps {\r\n breadcrumbs: BreadcrumbItem[];\r\n theme: 'light' | 'dark' | 'system';\r\n onThemeChange: (theme: 'light' | 'dark' | 'system') => void;\r\n user?: AppHeaderUser | null;\r\n isAuthenticated?: boolean;\r\n onLogout: () => void;\r\n onLogin?: () => void;\r\n homeHref?: string;\r\n className?: string;\r\n}\r\n\r\n// ── Helpers ──────────────────────────────────────────────\r\n\r\nfunction getInitials(firstName?: string, lastName?: string) {\r\n const first = firstName?.[0] || '';\r\n const last = lastName?.[0] || '';\r\n return (first + last).toUpperCase() || 'U';\r\n}\r\n\r\nconst THEME_ICON = {\r\n light: Sun,\r\n dark: Moon,\r\n system: Monitor,\r\n} as const;\r\n\r\n// ── Component ────────────────────────────────────────────\r\n\r\nexport function AppHeader({\r\n breadcrumbs,\r\n theme,\r\n onThemeChange,\r\n user,\r\n isAuthenticated,\r\n onLogout,\r\n onLogin,\r\n homeHref = '/',\r\n className,\r\n}: AppHeaderProps) {\r\n const ThemeIcon = THEME_ICON[theme];\r\n\r\n return (\r\n <header\r\n className={cn(\r\n 'flex h-14 items-center justify-between border-b border-border/60 bg-card/50 backdrop-blur-sm px-6',\r\n className,\r\n )}\r\n >\r\n {/* Left side - Home + Breadcrumbs */}\r\n <nav className=\"flex items-center\">\r\n <a\r\n href={homeHref}\r\n className=\"flex items-center justify-center h-7 w-7 rounded-md text-muted-foreground hover:text-foreground hover:bg-muted/60 transition-all\"\r\n >\r\n <Home className=\"h-4 w-4\" />\r\n </a>\r\n {breadcrumbs.length > 0 && (\r\n <ChevronRight className=\"h-3.5 w-3.5 text-muted-foreground/40 mx-1\" />\r\n )}\r\n {breadcrumbs.map((crumb, index) => {\r\n const isLast = index === breadcrumbs.length - 1;\r\n return (\r\n <span key={index} className=\"flex items-center\">\r\n {crumb.href ? (\r\n <a\r\n href={crumb.href}\r\n className=\"px-2 py-1 rounded-md text-xs text-muted-foreground hover:text-foreground hover:bg-muted/60 transition-all\"\r\n >\r\n {crumb.label}\r\n </a>\r\n ) : (\r\n <span className=\"px-2.5 py-1 rounded-md text-xs font-semibold bg-primary/10 text-primary border border-primary/20\">\r\n {crumb.label}\r\n </span>\r\n )}\r\n {!isLast && (\r\n <ChevronRight className=\"h-3.5 w-3.5 text-muted-foreground/40 mx-0.5\" />\r\n )}\r\n </span>\r\n );\r\n })}\r\n </nav>\r\n\r\n {/* Right side - Theme toggle + User menu */}\r\n <div className=\"flex items-center gap-2\">\r\n {/* Theme Toggle Dropdown */}\r\n <DropdownMenu>\r\n <DropdownMenuTrigger asChild>\r\n <Button variant=\"ghost\" size=\"icon-sm\">\r\n <ThemeIcon className=\"h-4 w-4\" />\r\n <span className=\"sr-only\">Toggle theme</span>\r\n </Button>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent align=\"end\">\r\n <DropdownMenuItem onClick={() => onThemeChange('light')}>\r\n <Sun className=\"mr-2 h-4 w-4\" />\r\n Light\r\n </DropdownMenuItem>\r\n <DropdownMenuItem onClick={() => onThemeChange('dark')}>\r\n <Moon className=\"mr-2 h-4 w-4\" />\r\n Dark\r\n </DropdownMenuItem>\r\n <DropdownMenuItem onClick={() => onThemeChange('system')}>\r\n <Monitor className=\"mr-2 h-4 w-4\" />\r\n System\r\n </DropdownMenuItem>\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n\r\n {/* User Menu */}\r\n {isAuthenticated && user ? (\r\n <DropdownMenu>\r\n <DropdownMenuTrigger asChild>\r\n <Button variant=\"ghost\" className=\"relative h-8 w-8 rounded-full\">\r\n <Avatar className=\"h-8 w-8\">\r\n <AvatarFallback className=\"bg-primary text-primary-foreground text-xs\">\r\n {getInitials(user.firstName, user.lastName)}\r\n </AvatarFallback>\r\n </Avatar>\r\n </Button>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent className=\"w-56\" align=\"end\" forceMount>\r\n <DropdownMenuLabel className=\"font-normal\">\r\n <div className=\"flex flex-col space-y-1\">\r\n <p className=\"text-sm font-medium leading-none\">\r\n {user.firstName} {user.lastName}\r\n </p>\r\n {user.email && (\r\n <p className=\"text-xs leading-none text-muted-foreground\">\r\n {user.email}\r\n </p>\r\n )}\r\n </div>\r\n </DropdownMenuLabel>\r\n <DropdownMenuSeparator />\r\n <DropdownMenuItem onClick={onLogout}>\r\n <LogOut className=\"mr-2 h-4 w-4\" />\r\n Log out\r\n </DropdownMenuItem>\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n ) : onLogin ? (\r\n <Button variant=\"outline\" size=\"sm\" onClick={onLogin}>\r\n Login\r\n </Button>\r\n ) : null}\r\n </div>\r\n </header>\r\n );\r\n}\r\n","import { Button } from '../ui/button';\r\n\r\ninterface LocaleToggleProps {\r\n locale: string;\r\n onLocaleChange: (locale: string) => void;\r\n}\r\n\r\nconst labels: Record<string, string> = { tr: 'TR', en: 'EN' };\r\n\r\nexport function LocaleToggle({ locale, onLocaleChange }: LocaleToggleProps) {\r\n const next = locale === 'tr' ? 'en' : 'tr';\r\n return (\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon-sm\"\r\n onClick={() => onLocaleChange(next)}\r\n aria-label={`Switch to ${labels[next]}`}\r\n >\r\n <span className=\"text-xs font-medium\">{labels[locale]}</span>\r\n </Button>\r\n );\r\n}\r\n","'use client';\n\nimport { Component, type ReactNode } from 'react';\nimport { AlertTriangle, RefreshCw, Home } from 'lucide-react';\nimport { Button } from '@/components/ui/button';\n\ninterface ErrorBoundaryProps {\n children: ReactNode;\n /** Custom fallback component */\n fallback?: ReactNode;\n /** Called when error is caught */\n onError?: (error: Error, errorInfo: React.ErrorInfo) => void;\n /** Whether to show technical details */\n showDetails?: boolean;\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n error: Error | null;\n errorInfo: React.ErrorInfo | null;\n}\n\n/**\n * Error Boundary Component\n * Catches JavaScript errors in child component tree and displays fallback UI\n *\n * @example\n * ```tsx\n * <ErrorBoundary>\n * <MyComponent />\n * </ErrorBoundary>\n *\n * // With custom fallback\n * <ErrorBoundary fallback={<CustomErrorUI />}>\n * <MyComponent />\n * </ErrorBoundary>\n * ```\n */\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = {\n hasError: false,\n error: null,\n errorInfo: null,\n };\n }\n\n static getDerivedStateFromError(error: Error): Partial<ErrorBoundaryState> {\n return { hasError: true, error };\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void {\n this.setState({ errorInfo });\n\n // Log error\n console.error('[ErrorBoundary] Caught error:', error, errorInfo);\n\n // Call optional error handler\n this.props.onError?.(error, errorInfo);\n }\n\n handleReset = (): void => {\n this.setState({ hasError: false, error: null, errorInfo: null });\n };\n\n handleReload = (): void => {\n window.location.reload();\n };\n\n handleGoHome = (): void => {\n window.location.href = '/';\n };\n\n render(): ReactNode {\n if (this.state.hasError) {\n // Custom fallback\n if (this.props.fallback) {\n return this.props.fallback;\n }\n\n // Default error UI\n return (\n <ErrorFallback\n error={this.state.error}\n errorInfo={this.state.errorInfo}\n onReset={this.handleReset}\n onReload={this.handleReload}\n onGoHome={this.handleGoHome}\n showDetails={this.props.showDetails}\n />\n );\n }\n\n return this.props.children;\n }\n}\n\n/**\n * Default Error Fallback UI\n */\ninterface ErrorFallbackProps {\n error: Error | null;\n errorInfo: React.ErrorInfo | null;\n onReset: () => void;\n onReload: () => void;\n onGoHome: () => void;\n showDetails?: boolean;\n}\n\nfunction ErrorFallback({\n error,\n errorInfo,\n onReset,\n onReload,\n onGoHome,\n showDetails = import.meta.env.DEV,\n}: ErrorFallbackProps) {\n return (\n <div className=\"min-h-[400px] flex items-center justify-center p-6\">\n <div className=\"text-center space-y-6 max-w-lg\">\n {/* Icon */}\n <div className=\"mx-auto w-16 h-16 rounded-xl bg-destructive/10 flex items-center justify-center\">\n <AlertTriangle className=\"w-8 h-8 text-destructive\" />\n </div>\n\n {/* Title */}\n <div className=\"space-y-2\">\n <h2 className=\"text-xl font-semibold text-foreground\">\n Bir Hata Oluştu\n </h2>\n <p className=\"text-muted-foreground\">\n Üzgünüz, beklenmeyen bir hata meydana geldi.\n Lütfen sayfayı yenileyin veya daha sonra tekrar deneyin.\n </p>\n </div>\n\n {/* Error Details (Development only by default) */}\n {showDetails && error && (\n <div className=\"text-left rounded-lg border bg-muted/30 p-4 space-y-2\">\n <p className=\"text-sm font-semibold text-destructive\">\n {error.name}: {error.message}\n </p>\n {errorInfo?.componentStack && (\n <pre className=\"text-xs text-muted-foreground overflow-auto max-h-32\">\n {errorInfo.componentStack}\n </pre>\n )}\n </div>\n )}\n\n {/* Actions */}\n <div className=\"flex items-center justify-center gap-3\">\n <Button variant=\"outline\" onClick={onReset}>\n Tekrar Dene\n </Button>\n <Button variant=\"outline\" onClick={onReload}>\n <RefreshCw className=\"w-4 h-4 mr-2\" />\n Yenile\n </Button>\n <Button onClick={onGoHome}>\n <Home className=\"w-4 h-4 mr-2\" />\n Ana Sayfa\n </Button>\n </div>\n </div>\n </div>\n );\n}\n\n/**\n * Page-level Error Boundary with full-page fallback\n */\nexport function PageErrorBoundary({ children }: { children: ReactNode }) {\n return (\n <ErrorBoundary\n fallback={\n <div className=\"min-h-screen flex items-center justify-center bg-background\">\n <div className=\"text-center space-y-6 p-6\">\n <div className=\"mx-auto w-20 h-20 rounded-2xl bg-destructive/10 flex items-center justify-center\">\n <AlertTriangle className=\"w-10 h-10 text-destructive\" />\n </div>\n <div className=\"space-y-2\">\n <h1 className=\"text-2xl font-bold text-foreground\">\n Uygulama Hatası\n </h1>\n <p className=\"text-muted-foreground max-w-md\">\n Uygulamada kritik bir hata oluştu.\n Lütfen sayfayı yenileyerek tekrar deneyin.\n </p>\n </div>\n <Button\n onClick={() => window.location.reload()}\n size=\"lg\"\n >\n <RefreshCw className=\"w-4 h-4 mr-2\" />\n Sayfayı Yenile\n </Button>\n </div>\n </div>\n }\n >\n {children}\n </ErrorBoundary>\n );\n}\n\n/**\n * Section-level Error Boundary with compact fallback\n */\nexport function SectionErrorBoundary({\n children,\n title = 'Bu bölüm yüklenemedi',\n}: {\n children: ReactNode;\n title?: string;\n}) {\n return (\n <ErrorBoundary\n fallback={\n <div className=\"rounded-lg border border-destructive/20 bg-destructive/5 p-6 text-center\">\n <AlertTriangle className=\"w-6 h-6 text-destructive mx-auto mb-2\" />\n <p className=\"text-sm text-destructive font-medium\">{title}</p>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => window.location.reload()}\n className=\"mt-2 text-xs\"\n >\n Yenile\n </Button>\n </div>\n }\n >\n {children}\n </ErrorBoundary>\n );\n}\n","import { Suspense, type ReactNode } from 'react';\nimport { Loader2 } from 'lucide-react';\nimport { Skeleton } from '@/components/ui/skeleton';\nimport { cn } from '@/lib/utils';\n\ninterface SuspenseWrapperProps {\n children: ReactNode;\n /** Custom fallback component */\n fallback?: ReactNode;\n /** Height of the skeleton fallback */\n skeletonHeight?: string;\n /** Additional className for the fallback container */\n className?: string;\n}\n\n/**\n * Reusable Suspense boundary with configurable fallback\n *\n * @example\n * ```tsx\n * // With default skeleton\n * <SuspenseWrapper>\n * <AsyncComponent />\n * </SuspenseWrapper>\n *\n * // With custom height\n * <SuspenseWrapper skeletonHeight=\"h-[600px]\">\n * <LargeDataTable />\n * </SuspenseWrapper>\n *\n * // With custom fallback\n * <SuspenseWrapper fallback={<CustomLoader />}>\n * <AsyncComponent />\n * </SuspenseWrapper>\n * ```\n */\nexport function SuspenseWrapper({\n children,\n fallback,\n skeletonHeight = 'h-[400px]',\n className,\n}: SuspenseWrapperProps) {\n const defaultFallback = (\n <Skeleton className={cn('w-full rounded-lg', skeletonHeight, className)} />\n );\n\n return <Suspense fallback={fallback ?? defaultFallback}>{children}</Suspense>;\n}\n\n/**\n * Loading spinner fallback for Suspense\n */\nexport function LoadingSpinner({ className }: { className?: string }) {\n return (\n <div className={cn('flex items-center justify-center min-h-[200px]', className)}>\n <Loader2 className=\"h-8 w-8 animate-spin text-muted-foreground\" />\n </div>\n );\n}\n\n/**\n * Page loading fallback with centered spinner\n */\nexport function PageLoadingFallback() {\n return (\n <div className=\"flex items-center justify-center min-h-[400px]\">\n <div className=\"flex flex-col items-center gap-4\">\n <Loader2 className=\"h-8 w-8 animate-spin text-primary\" />\n <p className=\"text-sm text-muted-foreground\">Loading...</p>\n </div>\n </div>\n );\n}\n\n/**\n * Card skeleton fallback\n */\nexport function CardSkeleton({ className }: { className?: string }) {\n return (\n <div className={cn('rounded-lg border bg-card p-6 space-y-4', className)}>\n <Skeleton className=\"h-6 w-1/3\" />\n <div className=\"space-y-2\">\n <Skeleton className=\"h-4 w-full\" />\n <Skeleton className=\"h-4 w-4/5\" />\n <Skeleton className=\"h-4 w-2/3\" />\n </div>\n </div>\n );\n}\n\n/**\n * Table skeleton fallback\n */\nexport function TableSkeleton({\n rows = 5,\n columns = 4,\n className,\n}: {\n rows?: number;\n columns?: number;\n className?: string;\n}) {\n return (\n <div className={cn('rounded-lg border bg-card', className)}>\n {/* Header */}\n <div className=\"flex gap-4 p-4 border-b bg-muted/30\">\n {Array.from({ length: columns }).map((_, i) => (\n <Skeleton key={i} className=\"h-4 flex-1\" />\n ))}\n </div>\n {/* Rows */}\n {Array.from({ length: rows }).map((_, rowIndex) => (\n <div key={rowIndex} className=\"flex gap-4 p-4 border-b last:border-0\">\n {Array.from({ length: columns }).map((_, colIndex) => (\n <Skeleton key={colIndex} className=\"h-4 flex-1\" />\n ))}\n </div>\n ))}\n </div>\n );\n}\n\n/**\n * Detail page skeleton fallback\n */\nexport function DetailPageSkeleton() {\n return (\n <div className=\"space-y-4\">\n {/* Header skeleton */}\n <div className=\"flex items-center gap-4\">\n <Skeleton className=\"h-12 w-12 rounded-xl\" />\n <div className=\"space-y-2\">\n <Skeleton className=\"h-6 w-48\" />\n <Skeleton className=\"h-4 w-32\" />\n </div>\n </div>\n {/* Content skeletons */}\n <CardSkeleton />\n <CardSkeleton />\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\n// ============================================================================\n// API Response Types\n// ============================================================================\n\nexport interface ApiResponse<T> {\n status: number;\n success: boolean;\n message: string;\n data: T;\n meta: MetaInfo;\n}\n\nexport interface PagedResponse<T> {\n status: number;\n success: boolean;\n message: string;\n data: T[];\n pagination: PaginationInfo;\n meta: MetaInfo;\n}\n\nexport interface MetaInfo {\n timestamp: string;\n version: string;\n requestId: string;\n}\n\nexport interface PaginationInfo {\n page: number;\n size: number;\n totalElements: number;\n totalPages: number;\n hasNext: boolean;\n hasPrevious: boolean;\n}\n\n// ============================================================================\n// Search/Filter Types\n// ============================================================================\n\nexport interface SearchRequest {\n page: number;\n size: number;\n generalSearch?: string;\n filters: SearchCriteria[];\n sortBy: string;\n sortDirection: 'ASC' | 'DESC';\n}\n\nexport interface SearchCriteria {\n field: string;\n operator: FilterOperator;\n value?: string | number | boolean | null;\n values?: (string | number | boolean)[];\n}\n\nexport type FilterOperator =\n | 'EQUALS'\n | 'NOT_EQUALS'\n | 'CONTAINS'\n | 'STARTS_WITH'\n | 'ENDS_WITH'\n | 'GREATER_THAN'\n | 'GREATER_THAN_OR_EQUALS'\n | 'LESS_THAN'\n | 'LESS_THAN_OR_EQUALS'\n | 'IN'\n | 'NOT_IN'\n | 'BETWEEN'\n | 'IS_NULL'\n | 'IS_NOT_NULL';\n\nexport const defaultSearchRequest: SearchRequest = {\n page: 0,\n size: 20,\n filters: [],\n sortBy: 'id',\n sortDirection: 'DESC',\n};\n\nexport function serializeSearchParams(params: SearchRequest): string {\n const sortedFilters = [...params.filters].sort((a, b) =>\n a.field.localeCompare(b.field)\n );\n\n return JSON.stringify({\n p: params.page,\n s: params.size,\n q: params.generalSearch || '',\n f: sortedFilters.map(f => ({\n field: f.field,\n op: f.operator,\n v: f.value,\n vs: f.values,\n })),\n sb: params.sortBy,\n sd: params.sortDirection,\n });\n}\n\n// ============================================================================\n// UI Types\n// ============================================================================\n\nexport interface SelectOption {\n value: string | number;\n label: string;\n color?: string;\n icon?: ReactNode;\n description?: string;\n}\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n}\n"],"names":["r","f","clsx","concatArrays","array1","array2","combinedArray","i","createClassValidatorObject","classGroupId","validator","createClassPartObject","nextPart","validators","CLASS_PART_SEPARATOR","EMPTY_CONFLICTS","ARBITRARY_PROPERTY_PREFIX","createClassGroupUtils","config","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","className","getGroupIdForArbitraryProperty","classParts","startIndex","getGroupRecursive","hasPostfixModifier","modifierConflicts","baseConflicts","classPartObject","currentClassPart","nextClassPartObject","result","classRest","validatorsLength","validatorObj","content","colonIndex","property","theme","classGroups","processClassGroups","group","processClassesRecursively","classGroup","len","classDefinition","processClassDefinition","processStringDefinition","processFunctionDefinition","processObjectDefinition","classPartObjectToEdit","getPart","isThemeGetter","entries","key","value","path","current","parts","part","next","func","createLruCache","maxCacheSize","cacheSize","cache","previousCache","update","IMPORTANT_MODIFIER","MODIFIER_SEPARATOR","EMPTY_MODIFIERS","createResultObject","modifiers","hasImportantModifier","baseClassName","maybePostfixModifierPosition","isExternal","createParseClassName","prefix","experimentalParseClassName","parseClassName","bracketDepth","parenDepth","modifierStart","postfixModifierPosition","index","currentCharacter","baseClassNameWithImportantModifier","fullPrefix","parseClassNameOriginal","createSortModifiers","modifierWeights","mod","currentSegment","modifier","isArbitrary","isOrderSensitive","createConfigUtils","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","getClassGroupId","getConflictingClassGroupIds","sortModifiers","classGroupsInConflict","classNames","originalClassName","variantModifier","modifierId","classId","conflictGroups","twJoin","classLists","argument","resolvedValue","string","toValue","mix","k","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","args","fallbackThemeArr","fromTheme","themeGetter","arbitraryValueRegex","arbitraryVariableRegex","fractionRegex","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isFraction","isNumber","isInteger","isPercent","isTshirtSize","isAny","isLengthOnly","isNever","isShadow","isImage","isAnyNonArbitrary","isArbitraryValue","isArbitraryVariable","isArbitrarySize","getIsArbitraryValue","isLabelSize","isArbitraryLength","isLabelLength","isArbitraryNumber","isLabelNumber","isArbitraryPosition","isLabelPosition","isArbitraryImage","isLabelImage","isArbitraryShadow","isLabelShadow","isArbitraryVariableLength","getIsArbitraryVariable","isArbitraryVariableFamilyName","isLabelFamilyName","isArbitraryVariablePosition","isArbitraryVariableSize","isArbitraryVariableImage","isArbitraryVariableShadow","testLabel","testValue","shouldMatchNoLabel","label","getDefaultConfig","themeColor","themeFont","themeText","themeFontWeight","themeTracking","themeLeading","themeBreakpoint","themeContainer","themeSpacing","themeRadius","themeShadow","themeInsetShadow","themeTextShadow","themeDropShadow","themeBlur","themePerspective","themeAspect","themeEase","themeAnimate","scaleBreak","scalePosition","scalePositionWithArbitrary","scaleOverflow","scaleOverscroll","scaleUnambiguousSpacing","scaleInset","scaleGridTemplateColsRows","scaleGridColRowStartAndEnd","scaleGridColRowStartOrEnd","scaleGridAutoColsRows","scaleAlignPrimaryAxis","scaleAlignSecondaryAxis","scaleMargin","scaleSizing","scaleColor","scaleBgPosition","scaleBgRepeat","scaleBgSize","scaleGradientStopPosition","scaleRadius","scaleBorderWidth","scaleLineStyle","scaleBlendMode","scaleMaskImagePosition","scaleBlur","scaleRotate","scaleScale","scaleSkew","scaleTranslate","twMerge","cn","inputs","Accordion","props","AccordionPrimitive","AccordionItem","jsx","AccordionTrigger","children","jsxs","ChevronDownIcon","AccordionContent","falsyToString","cx","cva","base","_config_compoundVariants","variants","defaultVariants","getVariantClassNames","variant","variantProp","defaultVariantProp","variantKey","propsWithoutUndefined","acc","param","getCompoundVariantClassNames","cvClass","cvClassName","compoundVariantOptions","buttonVariants","Button","size","asChild","Slot","AlertDialog","AlertDialogPrimitive","AlertDialogTrigger","AlertDialogPortal","AlertDialogOverlay","AlertDialogContent","AlertDialogHeader","AlertDialogFooter","AlertDialogTitle","AlertDialogDescription","AlertDialogAction","AlertDialogCancel","Avatar","AvatarPrimitive","AvatarImage","AvatarFallback","badgeVariants","Badge","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","BreadcrumbPage","BreadcrumbSeparator","ChevronRight","BreadcrumbEllipsis","MoreHorizontal","tzName","timeZone","date","format","offsetFormatCache","offsetCache","tzOffset","offsetStr","calcOffset","captures","offsetRe","cacheStr","values","hours","minutes","seconds","TZDateMini","adjustToSystemTZ","syncToInternal","tz","offset","time","re","method","utcMethod","syncFromInternal","baseOffset","prevHour","systemOffset","prevHourSystemOffset","systemDSTChange","dstShift","offsetDiff","systemDate","systemSecondsOffset","secondsOffset","postBaseOffset","postOffset","postOffsetDiff","offsetChanged","postDiff","newBaseOffset","newOffset","offsetChange","TZDate","sign","day","month","year","locales","options","FIVE_WEEKS","FOUR_WEEKS","getBroadcastWeeksInMonth","dateLib","firstDayOfMonth","firstDayOfWeek","broadcastStartDate","lastDateOfLastWeek","startOfBroadcastWeek","firstOfMonth","dayOfWeek","endOfBroadcastWeek","startDate","numberOfWeeks","enUS","dateFnsEnUS","formatDate","d","pattern","weekNumber","DateLib","overrides","monthIndex","amount","addDays","addMonths","addWeeks","addYears","dateLeft","dateRight","differenceInCalendarDays","differenceInCalendarMonths","interval","eachMonthOfInterval","years","eachYearOfInterval","uniqueYears","yearsArray","y","endOfISOWeek","endOfMonth","endOfWeek","endOfYear","formatStr","_options","formatted","getISOWeek","getMonth","getYear","getWeek","dateToCompare","isAfter","isBefore","isDate","isSameDay","isSameMonth","isSameYear","dates","max","min","setMonth","setYear","_dateLib","startOfDay","startOfISOWeek","startOfMonth","startOfWeek","startOfYear","numerals","formatter","digitMap","input","digit","code","locale","localeCode","defaultDateLib","CalendarDay","displayMonth","CalendarMonth","weeks","CalendarWeek","days","React","CaptionLabel","Chevron","orientation","Day","tdProps","DayButton","buttonProps","ref","UI","DayFlag","SelectionState","Animation","Dropdown","components","selectProps","cssClassSelect","selectedOption","disabled","DropdownNav","Footer","Month","calendarMonth","displayIndex","divProps","MonthCaption","MonthGrid","Months","dayPickerContext","createContext","useDayPicker","context","useContext","MonthsDropdown","Nav","onPreviousClick","onNextClick","previousMonth","nextMonth","navProps","labelPrevious","labelNext","handleNextClick","useCallback","e","handlePreviousClick","NextMonthButton","Option","PreviousMonthButton","Root","rootRef","rest","Select","Week","week","trProps","Weekday","Weekdays","WeekNumber","thProps","WeekNumberHeader","Weeks","YearsDropdown","rangeIncludesDate","range","excludeEnds","from","to","isDateInterval","matcher","isDateRange","isDateAfterType","isDateBeforeType","isDayOfWeekType","isDatesArray","dateMatchModifiers","matchers","matchersArr","matcherDate","diffBefore","diffAfter","isDayBefore","isDayAfter","createGetModifiers","navStart","navEnd","hidden","showOutsideDays","broadcastCalendar","today","computedNavStart","computedNavEnd","internalModifiersMap","customModifiersMap","isOutside","isBeforeNavStart","isAfterNavEnd","isDisabled","isHidden","isToday","name","modifierValue","dayFlags","customModifiers","getClassNamesForModifiers","modifiersClassNames","active","previousValue","getComponents","customComponents","getDataAttributes","dataAttributes","val","getDefaultClassNames","formatCaption","formatMonthCaption","formatDay","formatMonthDropdown","formatWeekdayName","weekday","formatWeekNumber","formatWeekNumberHeader","formatYearDropdown","formatYearCaption","getFormatters","customFormatters","defaultFormatters","labelDayButton","labelDay","labelGrid","labelCaption","labelGridcell","labelMonthDropdown","labelNav","defaultLabel","_month","labelWeekday","labelWeekNumber","labelWeekNumberHeader","labelYearDropdown","resolveLabel","customLabel","localeLabel","_args","getLabels","customLabels","localeLabels","defaultLabels","defaultLabels.labelDayButton","defaultLabels.labelMonthDropdown","defaultLabels.labelNext","defaultLabels.labelPrevious","defaultLabels.labelWeekNumber","defaultLabels.labelYearDropdown","defaultLabels.labelGrid","defaultLabels.labelGridcell","defaultLabels.labelNav","defaultLabels.labelWeekNumberHeader","defaultLabels.labelWeekday","getMonthOptions","formatters","getStyleForModifiers","dayModifiers","styles","modifiersStyles","style","getWeekdays","ISOWeek","referenceToday","start","getYearOptions","reverse","firstNavYear","lastNavYear","createNoonOverrides","weekStartsOn","fallbackWeekStartsOn","toNoonTZDate","normalizedDate","toCalendarDate","zoned","weekStartsOnValue","diff","end","cursor","endKey","getWeekFn","getISOWeekFn","left","right","differenceInCalendarDaysFn","differenceInCalendarMonthsFn","asHtmlElement","element","queryMonthEls","queryMonthEl","queryCaptionEl","queryWeeksEl","queryNavEl","queryWeekdaysEl","useAnimation","rootElRef","enabled","months","focused","previousRootElSnapshotRef","useRef","previousMonthsRef","animatingRef","useLayoutEffect","previousMonths","isAfterPreviousMonth","captionAnimationClass","weeksAnimationClass","previousRootElSnapshot","rootElSnapshot","currentMonthElSnapshot","previousMonthElSnapshot","captionEl","weeksEl","previousMonthEls","currentMonthEls","el","navEl","currentMonthEl","previousMonthEl","cleanUp","previousWeekdaysEl","previousCaptionEl","previousWeeksEl","getDates","displayMonths","maxDate","firstMonth","lastMonth","fixedWeeks","startWeekFirstDate","displayMonthsWeekEnd","constraintWeekEnd","gridEndDate","nOfDays","nOfMonths","extraDates","daysToAdd","getDays","calendarMonths","initialDays","weekDays","getDisplayMonths","firstDisplayedMonth","calendarEndMonth","numberOfMonths","getInitialMonth","defaultMonth","initialMonth","getMonths","dayPickerMonths","firstDateOfFirstWeek","monthDates","nrOfDaysWithFixedWeeks","dayPickerMonth","getNavMonths","startMonth","endMonth","newDate","fromYear","toYear","fromMonth","toMonth","hasYearDropdown","getNextMonth","pagedNavigation","getPreviousMonth","calendarStartMonth","getWeeks","initialWeeks","useControlledValue","defaultValue","controlledValue","uncontrolledValue","setValue","useState","useCalendar","setFirstMonth","useEffect","newInitialMonth","useMemo","disableNavigation","onMonthChange","isDayInCalendar","goToMonth","newMonth","FocusTargetPriority","isFocusableDay","calculateFocusTarget","getModifiers","isSelected","lastFocused","focusTarget","foundFocusTargetPriority","getFocusableDate","moveBy","moveDir","refDate","focusableDate","getNextFocus","refDay","attempt","targetMonth","focusDay","useFocus","calendar","autoFocus","setLastFocused","focusedDay","setFocused","nextFocus","useMulti","initiallySelected","required","onSelect","internallySelected","setSelected","selected","triggerDate","newDates","addToRange","initialRange","rangeContainsDayOfWeek","dayOfWeekArr","totalDays","totalDaysLimit","rangeOverlaps","rangeLeft","rangeRight","rangeContainsModifiers","functionMatchers","useRange","excludeDisabled","newRange","useSingle","compareDate","useSelection","single","multi","toTimeZone","toZoneNoon","noonSafe","convertMatcher","convertMatchersToTimeZone","DayPicker","initialProps","nextModifiers","labels","defaultLocale","noonOverrides","captionLayout","mode","navLayout","onDayBlur","onDayClick","onDayFocus","onDayKeyDown","onDayMouseEnter","onDayMouseLeave","onPrevClick","showWeekNumber","select","selectedValue","blur","isFocusTarget","moveFocus","weekdays","isInteractive","handleDayClick","m","handleDayFocus","handleDayBlur","handleDayKeyDown","keyMap","handleDayMouseEnter","handleDayMouseLeave","handleMonthChange","selectedMonth","handleYearChange","selectedYear","contextValue","monthControl","yearControl","ariaLabel","Calendar","buttonVariant","defaultClassNames","ChevronLeftIcon","ChevronRightIcon","CalendarDayButton","Card","CardHeader","CardTitle","CardDescription","CardAction","CardContent","CardFooter","Checkbox","CheckboxPrimitive","CheckIcon","Collapsible","CollapsiblePrimitive","CollapsibleTrigger","CollapsibleContent","Dialog","DialogPrimitive","DialogTrigger","DialogPortal","DialogClose","DialogOverlay","DialogContent","showCloseButton","XIcon","DialogHeader","DialogFooter","DialogTitle","DialogDescription","Command","CommandPrimitive","CommandDialog","title","description","CommandInput","SearchIcon","CommandList","CommandEmpty","CommandGroup","CommandSeparator","CommandItem","CommandShortcut","DropdownMenu","DropdownMenuPrimitive","DropdownMenuPortal","DropdownMenuTrigger","DropdownMenuContent","sideOffset","DropdownMenuGroup","DropdownMenuItem","inset","DropdownMenuCheckboxItem","checked","DropdownMenuRadioGroup","DropdownMenuRadioItem","CircleIcon","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuShortcut","DropdownMenuSub","DropdownMenuSubTrigger","DropdownMenuSubContent","Input","type","Label","LabelPrimitive","Pagination","PaginationContent","PaginationItem","PaginationLink","isActive","PaginationPrevious","PaginationNext","PaginationEllipsis","MoreHorizontalIcon","Popover","PopoverPrimitive","PopoverTrigger","PopoverContent","align","Progress","ProgressPrimitive","RadioGroup","RadioGroupPrimitive","RadioGroupItem","ScrollArea","ScrollAreaPrimitive","ScrollBar","SelectPrimitive","SelectGroup","SelectValue","SelectTrigger","SelectContent","position","SelectScrollUpButton","SelectScrollDownButton","SelectLabel","SelectItem","SelectSeparator","ChevronUpIcon","Separator","decorative","SeparatorPrimitive","Sheet","SheetPrimitive","SheetTrigger","SheetClose","SheetPortal","SheetOverlay","SheetContent","side","SheetHeader","SheetFooter","SheetTitle","SheetDescription","Skeleton","Toaster","useTheme","Sonner","CircleCheckIcon","InfoIcon","TriangleAlertIcon","OctagonXIcon","Loader2Icon","Switch","SwitchPrimitive","Table","TableHeader","TableBody","TableFooter","TableRow","TableHead","TableCell","TableCaption","tabsListVariants","Tabs","TabsPrimitive","TabsList","TabsTrigger","TabsContent","Textarea","TooltipProvider","delayDuration","TooltipPrimitive","Tooltip","TooltipTrigger","TooltipContent","alertVariants","Alert","AlertTitle","AlertDescription","toggleVariants","Toggle","TogglePrimitive","ToggleGroupContext","ToggleGroup","ToggleGroupPrimitive","ToggleGroupItem","ContextMenu","ContextMenuPrimitive","ContextMenuTrigger","ContextMenuGroup","ContextMenuPortal","ContextMenuSub","ContextMenuRadioGroup","ContextMenuSubTrigger","ContextMenuSubContent","ContextMenuContent","ContextMenuItem","ContextMenuCheckboxItem","ContextMenuRadioItem","ContextMenuLabel","ContextMenuSeparator","ContextMenuShortcut","st","n","o","at","lt","ut","ct","_","J","de","u","a","c","P","pe","ft","dt","$e","He","pt","se","mt","Ve","h","g","b","S","v","x","p","w","C","R","ht","A","$","G","I","gt","yt","St","we","be","ze","vt","xt","je","zt","bt","wt","me","Lt","F","Y","oe","U","B","We","Le","s","l","le","Ue","Be","W","Pe","Ce","Pt","ce","Ke","Xe","qe","Ye","Re","Me","ae","Ee","Ct","ke","he","Je","Ge","Ie","De","Oe","Te","Rt","Mt","Et","q","kt","Gt","ne","Q","ge","ot","K","Ae","ue","ee","O","ye","Se","Ze","it","It","Ne","Dt","z","L","M","E","D","T","N","Z","X","_e","V","H","j","ie","Qe","et","xe","tt","nt","te","ve","rt","Tt","At","Fe","Nt","_t","Ft","ResizablePanelGroup","PanelGroup","ResizablePanel","Panel","ResizableHandle","withHandle","PanelResizeHandle","GripVerticalIcon","Slider","_values","SliderPrimitive","SelectableCard","memo","icon","Check","SegmentedControl","items","activeKey","onActiveChange","showLabels","item","OPERATORS_BY_TYPE","OPERATOR_LABELS","ARRAY_OPERATORS","NO_VALUE_OPERATORS","DEFAULT_PAGE_SIZE_OPTIONS","DEFAULTS","DataTableSearch","onChange","placeholder","debounceMs","localValue","setLocalValue","onChangeRef","timer","handleClear","Search","urlAlphabet","nanoid","id","bytes","scopedUrlAlphabet","FilterFieldSelect","field","FilterOperatorSelect","operators","operator","FilterValueInput","asyncOptions","setAsyncOptions","loadedField","setLoadedField","fieldKey","inputClass","selectClass","betweenValues","Fragment","selectedValues","option","sv","newValues","FilterRow","filter","fieldConfigMap","onRemove","currentField","fieldOptions","handleFieldChange","newField","handleOperatorChange","FilterContext","useFilterContext","hasFiltersChanged","pending","applied","FilterBuilder","fieldConfig","filters","onFiltersChange","pendingFilters","setPendingFilters","hasPendingChanges","handleAdd","firstField","newFilter","prev","handleUpdate","updates","handleRemove","handleApply","FilterActions","appliedFilterCount","onAdd","onClear","onApply","filterCount","Filter","Plus","Trash2","FilterList","onUpdate","getUpdateHandler","getRemoveHandler","FilterRowWrapper","handleChange","dateStringToTimestamp","dateStr","endOfDay","timestampToDateString","timestamp","convertTimestampValue","isEndValue","convertFiltersToSearchCriteria","fieldConfigs","fc","criteria","isTimestamp","firstValue","secondValue","isFilterComplete","createEmptyFilter","getFilterDisplayValue","DataTableToolbar","searchValue","onSearchChange","searchPlaceholder","searchDebounceMs","toolbarStart","toolbarEnd","hasSearch","DataTablePagination","pagination","onPageChange","onPageSizeChange","onPrefetchPage","pageSizeOptions","page","totalElements","totalPages","hasNext","hasPrevious","startItem","endItem","ChevronsLeft","ChevronLeft","ChevronsRight","DataTableBulkActions","selectedCount","selectedRows","actions","onClearSelection","confirmAction","setConfirmAction","isLoading","setIsLoading","handleAction","action","executeAction","primaryActions","overflowActions","DataTableRowActions","row","visibleActions","DataTableEmpty","Database","DataTableLoading","columns","rows","rowIndex","colIndex","DataTable","getRowId","data","error","sortBy","sortDirection","onSortChange","enableRowSelection","rowSelection","onRowSelectionChange","bulkActions","rowActions","emptyIcon","emptyTitle","emptyDescription","onRowClick","onRowHover","rowClassName","meta","tableColumns","cols","table","col","sorting","handleSortingChange","updaterOrValue","firstSort","sortField","rowSelectionState","handleRowSelectionChange","newSelection","useReactTable","getCoreRowModel","handleKeyDown","showToolbar","headerGroup","header","flexRender","cell","SimpleDataTable","enableSearch","searchColumn","loadingRows","globalFilter","setGlobalFilter","columnFilters","tableState","getFilteredRowModel","filteredCount","hasFilter","DataTableColumnHeader","column","sortable","isSorted","ArrowDown","ArrowUp","ArrowUpDown","EyeOff","variantStyles","TextCell","truncate","maxWidth","parseDate","isValid","tr","formatDateTime","formatRelativeTime","formatDistanceToNow","formatISODate","formatTime","formatDateTimeFull","parseBackendTimestamp","str","hour","minute","second","formatBackendTimestamp","DateCell","showTooltip","displayValue","tooltipValue","statusColors","surfaceColors","deviceStatusColors","protocolTypeColors","priorityColors","booleanColors","getStatusColor","colorMap","fallback","StatusBadge","labelMap","showDot","dotColorMap","pulse","showLabel","colorClasses","shouldPulse","BooleanCell","trueIcon","falseIcon","trueLabel","falseLabel","CopyableCell","successMessage","copied","setCopied","handleCopy","toast","Copy","ONE_HOUR","ONE_DAY","RelativeTimeCell","warningThresholdMs","errorThresholdMs","age","colorClass","BadgeCell","IconTextCell","StackedTextCell","primary","secondary","primaryClassName","hoverColors","LinkCell","params","showExternalIcon","hoverColor","Link","ExternalLink","isIterable","obj","hasIterableEntries","compareEntries","valueA","valueB","mapA","mapB","compareIterables","iteratorA","iteratorB","nextA","nextB","shallow","useShallow","selector","state","NOTHING","DRAFTABLE","DRAFT_STATE","errors","plugin","thing","die","msg","isFunction","getPrototypeOf","CONSTRUCTOR","PROTOTYPE","CONFIGURABLE","ENUMERABLE","WRITABLE","VALUE","isDraft","isDraftable","isPlainObject","isArray","isMap","isSet","objectCtorString","cachedCtorStrings","isObjectish","proto","Ctor","ctorString","each","iter","strict","getArchtype","entry","has","prop","get","set","propOrOldValue","is","target","isBoolean","isArrayIndex","latest","getFinalValue","shallowCopy","isPlain","descriptors","keys","desc","freeze","deep","isFrozen","dontMutateMethodOverride","_key","dontMutateFrozenCollections","PluginMapSet","PluginPatches","PluginArrayMethods","plugins","getPlugin","pluginKey","isPluginLoaded","currentScope","getCurrentScope","createScope","parent_","immer_","usePatchesInScope","scope","patchListener","revokeScope","leaveScope","revokeDraft","enterScope","immer2","draft","processResult","baseDraft","finalize","patchPlugin_","maybeFreeze","rootScope","handleValue","isSameScope","callbacks_","generatePatchesAndFinalize","markStateFinalized","EMPTY_LOCATIONS_RESULT","updateDraftInParent","parent","draftValue","finalizedValue","originalKey","parentCopy","parentType","draftLocations","locations","location","registerChildFinalizationCallback","child","basePath","handleCrossReference","scope_","prepareCopy","targetCopy","handledSet","updatedValue","createProxyProxy","baseIsArray","traps","objectTraps","arrayTraps","revoke","proxy","arrayPlugin","isArrayWithStringProp","source","readPropFromProto","peek","childKey","childDraft","createProxy","getDescriptorFromProto","current2","currentState","markChanged","owner","fn","Immer2","recipe","defaultBase","self","base2","hasError","ip","patches","inversePatches","patch","applyPatchesImpl","rootScope2","currentImpl","copy","childValue","immer","produce","immerImpl","initializer","store","updater","replace","nextState","createDataTableStore","initialState","create","quickFilter","selection","rowId","rowIds","urlState","selectGeneralSearch","selectFilters","selectPage","selectSize","selectSortBy","selectSortDirection","selectRowSelection","selectActiveFilterCount","selectHasActiveFilters","selectSearchRequest","selectSelectedRowIds","selectSelectedRowCount","selectPaginationState","selectSortingState","parseUrlState","decoded","serializeToUrl","enabledFilters","toURLSearchParams","searchParams","fromURLSearchParams","useDataTableUrl","navigate","useNavigate","search","useSearch","isHydrated","isUpdatingUrl","debounceTimer","userHasInteracted","initialSearchRef","updateUrl","urlParams","cleanParams","unsubscribe","timeout","storeRegistry","getOrCreateStore","storeId","existing","releaseStore","useDataTable","defaultSize","defaultSortBy","defaultSortDirection","syncWithUrl","storeOptions","localStoreRef","registeredStoreIdRef","generalSearch","useStore","activeFilterCount","hasActiveFilters","setPage","setSize","setSort","by","dir","setGeneralSearch","setFilters","setRowSelection","searchRequest","paginationProps","sortingProps","searchProps","filterProps","selectionProps","BulkActionBar","moreActions","itemLabel","count","cancelLabel","cancelHint","useOptimisticList","idKey","optimisticItems","updateOptimistic","useOptimistic","addItem","updateItem","deleteItem","useOptimisticPageResponse","pageResponse","optimisticData","routeParamSchemas","useValidatedParams","schema","fallbackPath","onError","rawParams","useParams","useNumericIdParam","validateParams","safeValidateParams","usePrefetch","detailKey","listKey","fetchDetail","fetchList","staleTime","queryClient","useQueryClient","prefetchedIds","prefetchedPages","prefetchDetail","prefetchPage","clearPrefetchCache","trLabels","enLabels","LenaUIContext","LenaUIProvider","useLenaLabels","namespace","ctx","EntityDeleteDialog","open","onOpenChange","onDelete","isDeleting","entityType","entityName","t","Loader2","CRUDTabContent","allQueryKey","useSearchHook","detailPath","getEntityName","viewLabel","deleteLabel","refreshLabel","createLabel","CreateSheetComponent","hideToolbar","externalCreateSheetOpen","onExternalCreateSheetOpenChange","internalCreateSheetOpen","setInternalCreateSheetOpen","deleteTarget","setDeleteTarget","createSheetOpen","setCreateSheetOpen","refetch","Eye","handleRefresh","handleDelete","RefreshCw","colSpanClasses","FormField","control","errorHint","floatingLabel","labelClassName","useController","hasValue","AlertCircle","FormSection","collapsible","defaultOpen","isOpen","setIsOpen","FormSheet","onSubmit","onCancel","isSubmitting","submitLabel","handleCancel","SubmitButton","loadingText","isPendingProp","formPending","useFormStatus","isPending","SubmitButtonWithStatus","loadingContent","TextField","list","suggestions","datalistId","onBlur","suggestion","NumberField","step","showControls","numValue","increment","Minus","SelectField","emptyText","setOpen","opt","ChevronsUpDown","SwitchField","isChecked","TextareaField","maxLength","showCount","charCount","isNearLimit","isAtLimit","CheckboxField","RadioGroupField","ComboboxField","MultiSelectField","maxItems","selectedOptions","isMaxReached","handleSelect","optionValue","stringValue","useDebounce","delay","debouncedValue","setDebouncedValue","AsyncSelectField","loadOptions","setSearch","setOptions","selectedLabel","setSelectedLabel","debouncedSearch","fetchOptions","searchTerm","results","displayLabel","DateField","minDate","disabledDates","dateFormat","clearable","dateValue","CalendarIcon","DateRangeField","rangeValue","dateRange","ArrowRight","FILE_SIGNATURES","validateMagicNumber","file","allowedTypes","typesToCheck","buffer","sig","byte","formatFileSize","sizes","isImageFile","FileField","accept","maxSize","multiple","inputRef","dragActive","setDragActive","previews","setPreviews","typeError","setTypeError","handleFiles","files","fileArray","newPreviews","url","handleDrag","handleDrop","removeFile","fileToRemove","currentFiles","Upload","Image","File","PasswordField","showIcon","showPassword","setShowPassword","Lock","SearchBar","onFilterToggle","filterActive","recentSearches","onRecentSearchSelect","recentSearchesLabel","filterLabel","clearLabel","keyboardShortcut","isFocused","setIsFocused","showRecent","setShowRecent","containerRef","handleClickOutside","handleFocus","handleBlur","handleRecentSelect","shortcutParts","char","ChevronDown","Clock","CollapsibleSection","Icon","status","itemCount","editable","isEditing","isSaving","onEdit","onSave","handleEdit","Pencil","tokenColors","syntaxHighlight","json","tokens","regex","match","lastIndex","isBracket","getLineNumbers","text","lineCount","getLineNumberWidth","digits","JsonViewer","copyable","maxHeight","collapsed","setCollapsed","parsedData","formattedJson","highlightedContent","JsonBadge","preview","parsed","useJsonValidation","formatZodErrors","getErrorPaths","JsonTextEditor","showLineNumbers","textareaRef","lineNumbersRef","lines","lineNumberWidth","handleScroll","textarea","lineNumbers","newValue","minHeight","num","getValueType","nodeIdCounter","generateNodeId","resetNodeIdCounter","jsonToTree","expanded","node","arr","treeToJson","updateTreeNode","root","head","tail","updateNodeValue","addNodeChild","parentPath","newChild","deleteNodeChild","renameNodeKey","oldKey","newKey","applyOperation","operation","getDefaultValueForType","parseInputValue","targetType","trimmed","useJsonTree","expandedPaths","setExpandedPaths","tree","applyExpansion","pathKey","isExpanded","toggleExpand","updateValue","updated","addChild","deleteChild","renameKey","applyOp","expandAll","collectPaths","paths","allPaths","collapseAll","typeIcons","Type","Hash","ToggleLeft","Braces","Brackets","Ban","typeColors","typeLabels","JsonTreeNode","depth","isArrayItem","_parentType","onToggleExpand","onUpdateValue","onAddChild","onDeleteChild","onRenameKey","isError","isEditingKey","setIsEditingKey","isEditingValue","setIsEditingValue","editKeyValue","setEditKeyValue","editValueString","setEditValueString","newKeyName","setNewKeyName","showAddDialog","setShowAddDialog","keyInputRef","valueInputRef","hasChildren","canExpand","isRoot","TypeIcon","handleStartEditKey","handleSaveKey","handleStartEditValue","handleSaveValue","handleKeyPress","save","cancel","handleAddChild","handleChangeType","newType","renderValue","JsonTreeEditor","handleCreateRoot","stats","Expand","Minimize2","JsonToolbar","onModeChange","onFormat","onCopy","allowModeSwitch","Code","TreePine","Wand2","ValidationStatus","validation","showDetails","parseError","schemaErrors","hasSchemaErrors","CheckCircle2","XCircle","formattedErrors","AlertTriangle","ValidationBadge","AdvancedJsonEditor","FileCode","maxViewHeight","defaultMode","disabledReason","showValidation","showStats","setIsEditing","editValue","setEditValue","setMode","currentValue","handleSave","handleModeChange","newMode","handleTreeChange","jsonString","handleFormat","chars","PageHeader","breadcrumbs","onBreadcrumbsChange","useLazyTabs","activeTab","defaultStrategy","strategyOverrides","visitedRef","getStrategy","tabId","shouldMount","visitedTabs","useTabUrlSync","validTabIds","defaultTab","onTabChange","paramKey","urlTab","getTabDirection","tabIds","fromTab","toTab","fromIndex","toIndex","TabContent","tab","displayCount","OverflowDropdown","tabs","isActiveInOverflow","activeOverflowTab","resolveMountStrategy","lazyMount","resolveTransition","transition","UnifiedTabs","getTabCount","urlSync","contentCard","prevTabRef","mountStrategy","transitionType","urlSyncEnabled","direction","contentWrapperProps","visibleTabs","overflowTabs","DetailPageMetadataFooter","createdBy","updatedBy","rightContent","TabPanel","CopyButton","PropertyRow","badge","badgeVariant","fieldType","isEmpty","JsonEditorSection","parseResult","iconColorStyles","InfoCard","iconColor","InfoCardGrid","typeStyles","formatTimelineDate","formatRelativeTimelineTime","Timeline","relativeTime","emptyMessage","animated","animationDelay","displayItems","isLast","HistoryList","SupportBadge","StatCard","unit","trend","trendLabel","sparklineData","statusGlow","trendColors","TrendIcon","TrendingUp","TrendingDown","Sparkline","height","width","points","strokeColor","areaPoints","QuickActionTile","href","onClick","LocationMap","lat","lon","zoom","linkLabel","bbox","embedUrl","fullMapUrl","MapPin","defaultGetStatus","statusColorMap","CircularGauge","strokeWidth","footerStats","formatValue","getStatus","targetLabel","onTargetLabel","belowTargetLabel","percentage","rateStatus","isOnTarget","radius","circumference","stat","ICON_MAP","LayoutDashboard","Router","Cpu","Smartphone","HardDrive","Settings","Package","Server","Blocks","CircleDot","Gauge","Activity","FileSearch","Users","Shield","ListTodo","Timer","Zap","resolveIcon","ActiveIndicator","FlatNavItem","linkContent","ChildNavLink","currentPath","ChildIcon","isChildActive","TooltipChildren","ParentNavItem","isParentActive","DEFAULT_LOGO","AppSidebar","onToggleCollapse","logo","version","useRouterState","subtitle","letter","getInitials","firstName","lastName","first","last","THEME_ICON","Sun","Moon","Monitor","AppHeader","onThemeChange","user","isAuthenticated","onLogout","onLogin","homeHref","ThemeIcon","Home","crumb","LogOut","LocaleToggle","onLocaleChange","ErrorBoundary","Component","errorInfo","ErrorFallback","onReset","onReload","onGoHome","PageErrorBoundary","SectionErrorBoundary","SuspenseWrapper","skeletonHeight","defaultFallback","Suspense","defaultSearchRequest","serializeSearchParams","sortedFilters"],"mappings":"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","x_google_ignoreList":[0,1,4,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,141,148,149,177,178,179,180]}
|