caplink-saas-ui-shared-component-library 0.2.4 → 0.2.5

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/spreadsheet/lib/indexed-alphabet.ts","../../src/components/spreadsheet/lib/matrix-output.ts","../../src/components/spreadsheet/lib/date-formatter.ts","../../src/components/spreadsheet/model/spreadsheet.ts","../../src/components/spreadsheet/lib/normalize-value.ts","../../src/components/spreadsheet/model/matrix.ts","../../src/components/spreadsheet/ui/context.tsx","../../src/components/spreadsheet/lib/use-spreadsheet.ts","../../src/shared/lib/cn.ts","../../src/components/spreadsheet/ui/containers/matrix.tsx","../../src/components/spreadsheet/ui/containers/root.tsx","../../node_modules/react-use/esm/misc/util.js","../../node_modules/react-use/esm/useClickAway.js","../../src/components/spreadsheet/ui/containers/index.ts","../../src/components/spreadsheet/ui/indicators/drag-indicator.tsx","../../src/components/spreadsheet/ui/indicators/column-indicator.tsx","../../src/components/spreadsheet/ui/icons/integer-icon.tsx","../../node_modules/@radix-ui/react-slot/dist/packages/react/slot/src/Slot.tsx","../../node_modules/@radix-ui/react-tooltip/dist/packages/react/tooltip/src/Tooltip.tsx","../../src/shared/ui/tooltip.tsx","../../src/components/spreadsheet/ui/indicators/column-title-indicator.tsx","../../src/components/spreadsheet/ui/indicators/corner-indicator.tsx","../../src/components/spreadsheet/ui/header.tsx","../../src/shared/ui/select.tsx","../../node_modules/@radix-ui/react-select/dist/packages/react/select/src/Select.tsx","../../src/components/spreadsheet/ui/data-editor/boolean.tsx","../../src/components/spreadsheet/ui/data-editor/date.tsx","../../src/components/tmp/numeric.tsx","../../src/components/spreadsheet/ui/data-editor/numeric.tsx","../../src/components/spreadsheet/ui/data-editor/select.tsx","../../src/shared/lib/move-input-cursor-to-end.ts","../../src/shared/lib/read-text-from-clipboard.ts","../../src/components/spreadsheet/ui/data-editor/text.tsx","../../src/components/spreadsheet/ui/data-editor/index.tsx","../../src/components/spreadsheet/ui/cell.tsx","../../src/components/spreadsheet/ui/indicators/row-indicator.tsx","../../src/components/spreadsheet/ui/rows.tsx","../../src/components/spreadsheet/ui/start.tsx","../../src/components/spreadsheet/ui/icons/add-row-icon.tsx","../../src/components/spreadsheet/ui/icons/remove-row-icon.tsx","../../src/shared/ui/button.tsx","../../node_modules/@radix-ui/react-dropdown-menu/dist/packages/react/dropdown-menu/src/DropdownMenu.tsx","../../src/shared/ui/dropdown-menu.tsx","../../src/components/spreadsheet/ui/toolbar.tsx","../../src/components/spreadsheet/ui/index.tsx","../../src/index.ts"],"names":["useMemo","matrix","value","useEffect","jsx","height","useRef","_i","eventName","useCallback","useState","jsxs","difference","hasEntireColumns","Slot","React","props","forwardedRef","slotProps","childrenArray","toArray","children","slottable","find","isSlottable","newElement","newChildren","map","child","count","only","undefined","displayName","SlotClone","mergeProps","ref","composeRefs","Slottable","type","childProps","overrideProps","propName","slotPropValue","childPropValue","isHandler","test","args","filter","Boolean","join","createTooltipContext","createTooltipScope","createContextScope","createPopperScope","usePopperScope","PROVIDER_NAME","DEFAULT_DELAY_DURATION","TOOLTIP_OPEN","TooltipProviderContextProvider","useTooltipProviderContext","TooltipProvider","isOpenDelayed","setIsOpenDelayed","isPointerInTransitRef","skipDelayTimerRef","skipDelayTimer","current","window","clearTimeout","__scopeTooltip","setTimeout","skipDelayDuration","inTransit","TOOLTIP_NAME","TooltipContextProvider","useTooltipContext","Tooltip","open","openProp","disableHoverableContent","disableHoverableContentProp","delayDuration","delayDurationProp","providerContext","popperScope","trigger","setTrigger","contentId","useId","openTimerRef","wasOpenDelayedRef","setOpen","useControllableState","prop","defaultProp","defaultOpen","onChange","onOpen","document","dispatchEvent","CustomEvent","onClose","onOpenChange","stateAttribute","handleOpen","handleClose","handleDelayedOpen","TRIGGER_NAME","TooltipTrigger","triggerProps","context","composedRefs","useComposedRefs","onTriggerChange","isPointerDownRef","hasPointerMoveOpenedRef","handlePointerUp","removeEventListener","composeEventHandlers","onPointerMove","event","pointerType","onTriggerEnter","onPointerLeave","onTriggerLeave","onPointerDown","addEventListener","once","onFocus","onBlur","onClick","PORTAL_NAME","PortalProvider","usePortalContext","forceMount","CONTENT_NAME","TooltipContent","portalContext","contentProps","TooltipContentHoverable","pointerGraceArea","setPointerGraceArea","content","onPointerInTransitChange","handleRemoveGraceArea","handleCreateGraceArea","hoverTarget","currentTarget","exitPoint","x","clientX","y","clientY","exitSide","getExitSideFromRect","getBoundingClientRect","paddedExitPoints","getPaddedExitPoints","hoverTargetPoints","getPointsFromRect","graceArea","getHull","handleTriggerLeave","handleContentLeave","handleTrackPointerGrace","target","pointerPosition","hasEnteredTarget","contains","isPointerOutsideGraceArea","isPointInPolygon","VisuallyHiddenContentContextProvider","useVisuallyHiddenContentContext","isInside","TooltipContentImpl","ariaLabel","handleScroll","capture","preventDefault","style","point","rect","top","Math","abs","bottom","right","left","min","Error","padding","push","polygon","inside","i","j","length","xi","yi","xj","yj","intersect","points","newPoints","slice","sort","a","b","getHullPresorted","upperHull","p","q","r","pop","lowerHull","concat","Provider","Root","Trigger","Content","OPEN_KEYS","SELECTION_KEYS","SELECT_NAME","Collection","useCollection","createCollectionScope","createCollection","createSelectContext","createSelectScope","SelectProvider","useSelectContext","SelectNativeOptionsProvider","useSelectNativeOptionsContext","Select","valueProp","required","__scopeSelect","valueNode","setValueNode","valueNodeHasChildren","setValueNodeHasChildren","direction","useDirection","dir","setValue","defaultValue","onValueChange","triggerPointerDownPosRef","isFormControl","closest","nativeOptionsSet","setNativeOptionsSet","Set","nativeSelectKey","Array","from","option","prev","add","optionsSet","delete","SelectTrigger","isDisabled","disabled","getItems","searchRef","handleTypeaheadSearch","resetTypeahead","useTypeaheadSearch","search","enabledItems","item","currentItem","nextItem","findNextItem","shouldShowPlaceholder","focus","hasPointerCapture","pointerId","releasePointerCapture","button","ctrlKey","round","pageX","pageY","onKeyDown","isTypingAhead","isModifierKey","altKey","metaKey","key","includes","VALUE_NAME","SelectValue","valueProps","onValueNodeHasChildrenChange","hasChildren","onValueNodeChange","useLayoutEffect","pointerEvents","placeholder","SelectIcon","iconProps","SelectPortal","SelectContent","fragment","setFragment","DocumentFragment","frag","ReactDOM","CONTENT_MARGIN","SelectContentProvider","useSelectContentContext","SelectContentImpl","setContent","viewport","setViewport","node","selectedItem","setSelectedItem","selectedItemText","setSelectedItemText","isPositioned","setIsPositioned","firstValidItemFoundRef","hideOthers","useFocusGuards","focusFirst","candidates","firstItem","restItems","lastItem","PREVIOUSLY_FOCUSED_ELEMENT","activeElement","candidate","scrollIntoView","block","scrollTop","scrollHeight","focusSelectedItem","pointerMoveDelta","handlePointerMove","close","itemRefCallback","isFirstValidItem","isSelectedItem","handleItemLeave","itemTextRefCallback","SelectPosition","position","SelectPopperPosition","SelectItemAlignedPosition","popperContentProps","onCloseAutoFocus","preventScroll","display","flexDirection","outline","items","candidateNodes","reverse","currentElement","currentIndex","indexOf","popperProps","contentContext","contentWrapper","setContentWrapper","shouldExpandOnScrollRef","shouldRepositionRef","triggerRect","contentRect","valueNodeRect","itemTextRect","itemTextOffset","leftDelta","minContentWidth","width","contentWidth","max","rightEdge","innerWidth","clampedLeft","clamp","minWidth","rightDelta","leftEdge","clampedRight","availableHeight","innerHeight","itemsHeight","contentStyles","getComputedStyle","contentBorderTopWidth","parseInt","borderTopWidth","contentPaddingTop","paddingTop","contentBorderBottomWidth","borderBottomWidth","contentPaddingBottom","paddingBottom","fullContentHeight","minContentHeight","offsetHeight","viewportStyles","viewportPaddingTop","viewportPaddingBottom","topEdgeToTriggerMiddle","triggerMiddleToBottomEdge","selectedItemHalfHeight","itemOffsetMiddle","offsetTop","contentTopToItemMiddle","itemMiddleToContentBottom","willAlignWithoutTopOverflow","isLastItem","viewportOffsetBottom","clientHeight","clampedTriggerMiddleToBottomEdge","isFirstItem","clampedTopEdgeToTriggerMiddle","margin","minHeight","maxHeight","onPlaced","requestAnimationFrame","contentZIndex","setContentZIndex","zIndex","handleScrollButtonChange","boxSizing","SelectViewportProvider","useSelectViewportContext","VIEWPORT_NAME","SelectViewport","viewportProps","viewportContext","onViewportChange","prevScrollTopRef","__html","flex","overflow","onScroll","scrolledBy","cssMinHeight","parseFloat","cssHeight","prevHeight","nextHeight","clampedNextHeight","heightDiff","justifyContent","GROUP_NAME","SelectGroupContextProvider","useSelectGroupContext","LABEL_NAME","SelectLabel","labelProps","groupContext","id","ITEM_NAME","SelectItemContextProvider","useSelectItemContext","SelectItem","textValue","textValueProp","itemProps","isSelected","setTextValue","isFocused","setIsFocused","textId","handleSelect","prevTextValue","textContent","trim","onPointerUp","onItemLeave","ITEM_TEXT_NAME","SelectItemText","itemTextProps","itemContext","nativeOptionsContext","itemTextNode","setItemTextNode","onItemTextChange","nativeOption","onNativeOptionRemove","onNativeOptionAdd","ITEM_INDICATOR_NAME","SelectItemIndicator","itemIndicatorProps","SCROLL_UP_BUTTON_NAME","SelectScrollUpButton","canScrollUp","setCanScrollUp","onScrollButtonChange","SCROLL_DOWN_BUTTON_NAME","SelectScrollDownButton","canScrollDown","setCanScrollDown","maxScroll","ceil","SelectScrollButtonImpl","scrollIndicatorProps","autoScrollTimerRef","clearAutoScrollTimer","clearInterval","activeItem","flexShrink","setInterval","onAutoScroll","SelectSeparator","separatorProps","BubbleSelect","selectProps","prevValue","usePrevious","select","selectProto","HTMLSelectElement","prototype","descriptor","Object","getOwnPropertyDescriptor","set","Event","bubbles","call","onSearchChange","handleSearchChange","useCallbackRef","timerRef","updateSearch","isRepeated","every","char","normalizedSearch","currentItemIndex","wrappedItems","wrapArray","excludeCurrentItem","v","toLowerCase","startsWith","array","startIndex","_","index","Value","Icon","Portal","Viewport","Label","Item","ItemText","ItemIndicator","ScrollUpButton","ScrollDownButton","Separator","CaretSortIcon","waitCapToOnBlur","DROPDOWN_MENU_NAME","createDropdownMenuContext","createDropdownMenuScope","createMenuScope","useMenuScope","DropdownMenuProvider","useDropdownMenuContext","DropdownMenu","modal","menuScope","__scopeDropdownMenu","triggerRef","prevOpen","DropdownMenuTrigger","triggerId","onOpenToggle","DropdownMenuPortal","portalProps","DropdownMenuContent","hasInteractedOutsideRef","onInteractOutside","originalEvent","detail","ctrlLeftClick","isRightClick","DropdownMenuLabel","DropdownMenuItem","DropdownMenuCheckboxItem","checkboxItemProps","DropdownMenuRadioItem","radioItemProps","DropdownMenuItemIndicator","DropdownMenuSeparator","DropdownMenuSubTrigger","subTriggerProps","DropdownMenuSubContent","subContentProps","CheckboxItem","RadioItem","SubTrigger","SubContent","CheckIcon","nanoid"],"mappings":"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","sourcesContent":["export function indexedAlphabet(columns: number): string {\n if (columns <= 0) {\n return '';\n }\n\n const asciiA = 'A'.charCodeAt(0);\n const remainder = (columns - 1) % 26;\n const quotient = Math.floor((columns - 1) / 26);\n\n return indexedAlphabet(quotient) + String.fromCharCode(asciiA + remainder);\n}\n","import type { Matrix } from '@/src/components/spreadsheet/model/matrix';\nimport type { Column, DataEditorType } from '@/src/components/spreadsheet/model/spreadsheet';\n\nexport namespace MatrixConverter {\n export type Input = {\n columns: Column[];\n matrix: Matrix<unknown>;\n };\n\n export type Output = {\n value: unknown;\n dataEditorType: DataEditorType;\n convertedValue?: {\n Boolean?: boolean;\n Integer?: number;\n Currency?: number;\n Decimal?: number;\n Float?: number;\n Percentage?: number;\n Date?: number;\n Select?: string;\n };\n };\n}\n\nexport function matrixConverter(params: MatrixConverter.Input): MatrixConverter.Output[][] {\n const { columns, matrix } = params;\n\n return matrix.map((rowValue) =>\n rowValue.map((columnValue, column) => {\n const dataEditorType = columns[column].dataEditorType;\n const selectItems = columns[column].settings?.select?.items || [];\n\n const newColumn: MatrixConverter.Output = { value: columnValue, dataEditorType };\n\n if (dataEditorType === 'Boolean') {\n newColumn.convertedValue = { Boolean: JSON.parse(columnValue as string) };\n }\n\n if (dataEditorType === 'Integer') {\n newColumn.convertedValue = { Integer: Number(columnValue as string) };\n }\n\n if (dataEditorType === 'Currency') {\n newColumn.convertedValue = { Currency: Number(columnValue as string) };\n }\n\n if (dataEditorType === 'Decimal') {\n newColumn.convertedValue = { Decimal: Number(columnValue as string) };\n }\n\n if (dataEditorType === 'Float') {\n newColumn.convertedValue = { Float: Number(columnValue as string) };\n }\n\n if (dataEditorType === 'Percentage') {\n newColumn.convertedValue = { Percentage: Number(columnValue as string) };\n }\n\n if (dataEditorType === 'Date') {\n newColumn.convertedValue = { Date: Number(columnValue as string) };\n }\n\n if (dataEditorType === 'Select') {\n newColumn.convertedValue = { Select: columnValue as string };\n }\n\n return newColumn;\n }),\n );\n}\n","export function dateFormatter(value: string) {\n try {\n if (value.includes('/'))\n return new Date(value.split('/').reverse().join('-'))\n .toISOString()\n .split('T')[0]\n .replace('+', '');\n\n return new Date(value).toISOString().split('T')[0].replace('+', '');\n } catch (error) {\n return null;\n }\n}\n","import type { MatrixConverter } from '@/src/components/spreadsheet/lib/matrix-output';\nimport type * as Matrix from '@/src/components/spreadsheet/model/matrix';\nimport type { MouseEvent, PropsWithChildren } from 'react';\n\n/** Spreadsheet column initial width */\nexport const COLUMN_INITIAL_WIDTH = 160;\n/** Spreadsheet column max width */\nexport const COLUMN_MAX_WIDTH = 320;\n/** Spreadsheet column min width */\nexport const COLUMN_MIN_WIDTH = 160;\n\n/** Spreadsheet column title initial height */\nexport const COLUMN_TITLE_INITIAL_HEIGHT = 36;\n/** Spreadsheet cell initial height */\nexport const CELL_INITIAL_HEIGHT = 26;\n\nexport const NUMERIC_DATA_EDITOR_TYPES: DataEditorType[] = [\n 'Decimal',\n 'Float',\n 'Integer',\n 'Percentage',\n 'Currency',\n];\n\n/** Dimensions of an element */\nexport type Dimensions = {\n /** The element's width in pixels */\n width: number;\n /** The element's height in pixels */\n height: number;\n};\n\n/** Select component item props */\nexport type SelectItem = { text: string; value: string };\n\n/** The mode of the cell */\nexport type Mode = 'edit' | 'readonly' | 'view';\n\n/** Cell data editor type */\nexport type DataEditorType =\n | 'Boolean'\n | 'String'\n | 'Select'\n | 'Date'\n | 'Integer'\n | 'Currency'\n | 'Float'\n | 'Decimal'\n | 'Percentage';\n\nexport type DataEditor = {\n /** Data editor current value */\n value?: unknown;\n /** Whether data editor data changes */\n onChange?: ({ data, point }: { data: unknown; point?: Matrix.Point }) => void;\n /** Whether user paste any value on data editor */\n onPaste?: (point?: Matrix.Point) => void;\n /** Whether user blur current data editor */\n onBlur?: () => void;\n /** Whether user clicks current data editor */\n onClick?: <T>(e: MouseEvent<T>) => void;\n /** Cell mode setter */\n setMode?: (mode: Mode) => void;\n\n selected?: boolean;\n\n column: Column;\n};\n\nexport type DataViewer = {\n /** Data viewer current value */\n value?: unknown;\n column: Column;\n\n selected?: boolean;\n};\n\n/** Spreadsheet column meta data and settings */\nexport type Column = {\n /** Column identifier */\n id: string;\n /** Column name to be displayed */\n name: string;\n /** Column tooltip description */\n description?: string;\n /** Column width */\n width: number;\n /** Whether column is visible to user */\n visible?: boolean;\n /** Column position */\n position: number;\n /** Column data editor type */\n dataEditorType: DataEditorType;\n /** Alphabet letter by position */\n alphabetLetter?: string;\n /** Whether column is readonly to user */\n readonly?: boolean;\n\n /** Column settings */\n settings?: {\n select?: {\n items: Array<SelectItem>;\n };\n\n numeric?: {\n min?: number;\n max?: number;\n allowNegative?: boolean;\n roundingRule?: string;\n decimalPlaces?: number;\n currency?: string;\n };\n\n string?: {\n maskData?: string;\n maskVisible?: boolean;\n charLimit?: string;\n };\n };\n};\n\n/** Initial column params before spreadsheet internal setup */\nexport type InitialColumn = Pick<\n Column,\n Exclude<keyof Column, 'id' | 'alphabetLetter' | 'position' | 'width'>\n> & {\n width?: number;\n};\n\n/** Spreadsheet Cell component */\nexport type Cell = {\n /** The cell value */\n value?: unknown;\n /** Point coordinates of the cell */\n coordinates: Matrix.Point;\n};\n\nexport type Props = {\n matrix: Matrix.Matrix<unknown>;\n onMatrixChange?: (matrix: MatrixConverter.Output[][]) => void;\n startingColumns: InitialColumn[];\n /** Defines if user can add or delete rows */\n staticRows?: boolean;\n className?: string;\n};\n\nexport type Context = {\n size: Matrix.Size;\n matrix: Matrix.Matrix<unknown>;\n columns: Column[];\n emptySize: boolean;\n /** Defines if user can add or delete rows */\n staticRows?: boolean;\n hasSomeEntireRow?: boolean;\n /** Whether last row is highlighted */\n highlightLastRow?: boolean;\n\n pointRange: Matrix.PointRange | null;\n setPointRange: (pointRange: Matrix.PointRange | null) => void;\n\n containerDimensions: Dimensions;\n setContainerDimensions: (dimensions: Dimensions) => void;\n\n onPaste: (point: Matrix.Point) => void;\n onChange: (params: { data: unknown; point: Matrix.Point }) => void;\n onRemoveRow: () => void;\n onSelectRow: (row: number, event?: MouseEvent) => void;\n onSelectCell: (point: Matrix.Point) => void;\n isCellSelected: (point: Matrix.Point) => boolean;\n onInsertNewRow: () => void;\n onColumnResize: (params: { width: number; columnId: string }) => void;\n onSelectSpreadsheet: () => void;\n onColumnVisibilityChange: (columnId: string) => void;\n};\n\nexport type ContextProvider = Omit<PropsWithChildren<Props>, 'className'>;\n","import { dateFormatter } from '@/src/components/spreadsheet/lib/date-formatter';\nimport * as Spreadsheet from '@/src/components/spreadsheet/model/spreadsheet';\n\nexport function normalizeValue(params: {\n value: unknown;\n dataEditorType: Spreadsheet.DataEditorType;\n}) {\n const { value, dataEditorType } = params;\n\n if (dataEditorType === 'Date') {\n return dateFormatter(value as string) || '';\n }\n\n if (dataEditorType === 'Boolean') {\n return value === true ? 'true' : 'false';\n }\n\n const isNumeric = Spreadsheet.NUMERIC_DATA_EDITOR_TYPES.includes(dataEditorType);\n\n if (isNumeric) {\n return Number.isNaN(Number(value)) ? '' : value;\n }\n\n return value;\n}\n","/** A cell cordinates in matrix */\nexport type Point = {\n row: number;\n column: number;\n};\n\n/** Range between two points. */\nexport type PointRange = {\n /** The top-left point */\n start: Point;\n /** The bottom-right point */\n end: Point;\n};\n\n/** Counts of the rows and column in a matrix */\nexport type Size = {\n /** Count of the rows in the matrix */\n rows: number;\n /** Count of the columns in the matrix */\n columns: number;\n};\n\nexport type Matrix<T> = Array<Array<T | undefined>>;\n\n/** Creates an empty matrix with given rows and columns */\nexport function createEmpty<T>(size: Size, fill?: T): Matrix<T> {\n return new Array(size.rows).fill(undefined).map(() => new Array(size.columns).fill(fill));\n}\n\n/** Gets the count of rows of given matrix */\nexport function getRowsCount(matrix: Matrix<unknown>) {\n return matrix?.length;\n}\n\n/** Gets the count of columns of given matrix */\nexport function getColumnsCount(matrix: Matrix<unknown>) {\n const firstRow = matrix?.[0];\n return firstRow ? firstRow.length : 0;\n}\n\n/** Gets the count of rows and columns of given matrix */\nexport function getSize(matrix: Matrix<unknown>): Size {\n return {\n columns: getColumnsCount(matrix),\n rows: getRowsCount(matrix),\n };\n}\n\n/** Gets the value at row and column of matrix. */\nexport function getPoint<T>(params: { point: Point; matrix: Matrix<T> }) {\n const { point, matrix } = params;\n\n const columns = matrix[point.row];\n\n if (columns === undefined) {\n return undefined;\n }\n\n return columns[point.column];\n}\n\n/** Checks if the source and target point are equal */\nexport function isSamePoint(source: Point, target: Point) {\n return source.column === target.column && source.row === target.row;\n}\n\n/** Returns whether given point exists in given range */\nexport function hasPointInRange(pointRange: PointRange, point: Point): boolean {\n return (\n point.row >= pointRange.start.row &&\n point.column >= pointRange.start.column &&\n point.row <= pointRange.end.row &&\n point.column <= pointRange.end.column\n );\n}\n\n/** Determines whether all columns are selected */\nexport function hasEntireColumns(params: { matrix: Matrix<unknown>; pointRange: PointRange }) {\n const { matrix, pointRange } = params;\n return pointRange.start.column === 0 && pointRange.end.column === getColumnsCount(matrix);\n}\n\n/** Determines which row is entirely selected in given selection */\nexport function hasEntireRows(params: {\n matrix: Matrix<unknown>;\n pointRange: PointRange;\n row: number;\n}) {\n const { matrix, pointRange, row } = params;\n return (\n row >= pointRange.start.row &&\n row <= pointRange.end.row &&\n hasEntireColumns({ matrix, pointRange })\n );\n}\n\n/** Converts string value into an matrix */\nexport function parseString(value: string): Matrix<unknown> {\n return value.split('\\n').map((row) => row.split('\\t'));\n}\n\n/**\n * Overlaps a given Matrix B (mB) starting in a specific point into a given Matrix A (mA)\n * Matrix B (mB) always has priority when replacing cell values\n */\nexport function overlap(params: {\n mA: Matrix<unknown>;\n mB: Matrix<unknown>;\n point: Point;\n}): Matrix<unknown> {\n const { mA, mB, point = { column: 0, row: 0 } } = params;\n\n const mASize = getSize(mA);\n const mBSize = getSize(mB);\n\n const fillRows = point.row + mBSize.rows > mASize.rows;\n const fillColumns = point.column + mBSize.columns > mBSize.columns;\n\n const rows = fillRows ? point.row + mBSize.rows : mASize.rows;\n const columns = fillColumns ? point.column + mBSize.columns : mASize.columns;\n\n const mC = createEmpty({ rows, columns });\n\n for (let y = 0; y < mASize.rows; y += 1) {\n for (let x = 0; x < mASize.columns; x += 1) {\n mC[y][x] = mA[y][x];\n }\n }\n\n for (let y = 0; y < mBSize.rows; y += 1) {\n for (let x = 0; x < mBSize.columns; x += 1) {\n mC[y + point.row][x + point.column] = mB[y][x];\n }\n }\n\n return mC;\n}\n","import { indexedAlphabet } from '@/src/components/spreadsheet/lib/indexed-alphabet';\nimport { matrixConverter } from '@/src/components/spreadsheet/lib/matrix-output';\nimport { normalizeValue } from '@/src/components/spreadsheet/lib/normalize-value';\nimport * as Matrix from '@/src/components/spreadsheet/model/matrix';\nimport type * as Spreadsheet from '@/src/components/spreadsheet/model/spreadsheet';\nimport {\n COLUMN_INITIAL_WIDTH,\n COLUMN_MAX_WIDTH,\n COLUMN_MIN_WIDTH,\n type Column,\n type Dimensions,\n type InitialColumn,\n} from '@/src/components/spreadsheet/model/spreadsheet';\nimport { nanoid } from 'nanoid';\nimport { type MouseEvent, createContext, useCallback, useEffect, useMemo, useState } from 'react';\n\nlet timeoutId: ReturnType<typeof setTimeout>;\n\nexport const SpreadsheetContext = createContext<Spreadsheet.Context | null>(null);\n\nexport function SpreadsheetContextProvider(props: Spreadsheet.ContextProvider) {\n const {\n children,\n startingColumns,\n matrix: startingMatrix = [],\n staticRows,\n onMatrixChange,\n } = props;\n\n const [matrix, setMatrix] = useState(startingMatrix);\n const [columns, setColumns] = useState<Column[]>(() => setupColumns(startingColumns));\n const [pointRange, setPointRange] = useState<Matrix.PointRange | null>(null);\n const [containerDimensions, setContainerDimensions] = useState<Dimensions>({\n height: 0,\n width: 0,\n });\n\n const [highlightLastRow, setHighlightLastRow] = useState(false);\n\n /** Function called to highlight when user add a new row */\n const highlight = useCallback((ms = 2000) => {\n setHighlightLastRow(true);\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n timeoutId = setTimeout(() => setHighlightLastRow(false), ms);\n }, []);\n\n const columnsCount = useMemo(\n () => Matrix.getColumnsCount(matrix) || columns.length,\n [matrix, columns.length],\n );\n const size = useMemo(() => Matrix.getSize(matrix), [matrix]);\n const emptySize = useMemo(() => size.rows === 0, [size.rows]);\n\n const hasSomeEntireRow = useMemo(\n () => !!(pointRange && Matrix.hasEntireColumns({ matrix, pointRange })),\n [pointRange, matrix],\n );\n\n const onConvertedMatrixChange = useCallback(\n (matrix: Matrix.Matrix<unknown>) => {\n if (onMatrixChange) {\n const newMatrix = matrixConverter({ columns, matrix });\n onMatrixChange(newMatrix);\n }\n },\n [onMatrixChange, columns],\n );\n\n const onPaste = useCallback(\n async (point: Matrix.Point) => {\n const { state } = await navigator.permissions.query({\n name: 'clipboard-read' as PermissionName,\n });\n\n if (state === 'denied') {\n console.log('denied');\n return;\n }\n\n const value = await navigator.clipboard.readText();\n\n const mB = Matrix.parseString(value);\n\n /** Overlaps mA and mB, also prevent putting values in readonly columns */\n const overlapped = Matrix.overlap({ mA: matrix, mB, point }).map((row) =>\n row.map((columnValue, column) => (columns[column]?.readonly ? '' : columnValue)),\n );\n\n const normalized = overlapped.map((row) =>\n row.map((columnValue, column) =>\n normalizeValue({ value: columnValue, dataEditorType: columns[column]?.dataEditorType }),\n ),\n );\n\n const nextColumns = normalized.map((row) => row.slice(0, startingColumns.length));\n const nextMatrix = staticRows ? nextColumns.slice(0, matrix.length) : nextColumns;\n\n setMatrix(nextMatrix);\n onConvertedMatrixChange(nextMatrix);\n },\n [columns, matrix, startingColumns.length, onConvertedMatrixChange, staticRows],\n );\n\n const onChange = useCallback(\n (params: { data: unknown; point: Matrix.Point }) => {\n const { data, point } = params;\n const { column, row } = point;\n\n const nextMatrix = structuredClone(matrix);\n nextMatrix[row][column] = data;\n\n setMatrix(nextMatrix);\n onConvertedMatrixChange(nextMatrix);\n },\n [matrix, onConvertedMatrixChange],\n );\n\n const onRemoveRow = useCallback(() => {\n if (pointRange && !staticRows) {\n const rowStart = pointRange.start.row;\n const rowEnd = pointRange.end.row;\n const delta = rowEnd - rowStart + 1;\n\n if (!hasSomeEntireRow) return;\n\n const confirmedMessage =\n delta > 1\n ? `Você irá excluir ${delta} linhas, deseja continuar?\\nLinha N° ${rowStart + 1} até N° ${\n rowEnd + 1\n }`\n : `Você irá excluir a linha N° ${rowStart + 1}, deseja continuar?`;\n\n const confirmed = confirm(confirmedMessage);\n\n if (!confirmed) return;\n\n const nextMatrix = matrix.filter((row, index) => index < rowStart || index > rowEnd);\n\n setPointRange(null);\n setMatrix(nextMatrix);\n onConvertedMatrixChange(nextMatrix);\n }\n }, [matrix, pointRange, staticRows, hasSomeEntireRow, onConvertedMatrixChange]);\n\n const onSelectRow = useCallback(\n (row: number, event?: MouseEvent) => {\n if (pointRange && event && event.shiftKey) {\n const normalizedStart = row < pointRange.start.row ? row : pointRange.start.row;\n const normalizedEnd = row < pointRange.start.row ? pointRange.start.row : row;\n\n const newPointRange: Matrix.PointRange = {\n start: { row: normalizedStart, column: 0 },\n end: { row: normalizedEnd, column: columnsCount },\n };\n\n return setPointRange(newPointRange);\n }\n\n setPointRange({ start: { row, column: 0 }, end: { row, column: columnsCount } });\n },\n [columnsCount, pointRange],\n );\n\n const onSelectCell = useCallback(\n (point: Matrix.Point) => {\n if (point.row === pointRange?.start.row && point.column === pointRange.start.column) return;\n setPointRange({ start: point, end: point });\n },\n [pointRange?.start.row, pointRange?.start.column],\n );\n\n const isCellSelected = useCallback(\n (point: Matrix.Point) => {\n return !!(pointRange && Matrix.hasPointInRange(pointRange, point));\n },\n [pointRange],\n );\n\n const onColumnResize = useCallback((params: { width: number; columnId: string }) => {\n const { columnId, width } = params;\n\n let newWidth = width;\n\n if (width > COLUMN_MAX_WIDTH) {\n newWidth = COLUMN_MAX_WIDTH;\n }\n\n if (width < COLUMN_MIN_WIDTH) {\n newWidth = COLUMN_MIN_WIDTH;\n }\n\n /** When X matches the column to be resized, it returns new width,\n * otherwise returns previous column value */\n setColumns((previous) =>\n previous.map((column) => (column.id === columnId ? { ...column, width: newWidth } : column)),\n );\n }, []);\n\n const onInsertNewRow = useCallback(() => {\n if (staticRows) return;\n\n const nextMatrix = [...structuredClone(matrix), new Array(columnsCount).fill('')];\n\n setMatrix(nextMatrix);\n onConvertedMatrixChange(nextMatrix);\n\n highlight();\n }, [staticRows, matrix, columnsCount, highlight, onConvertedMatrixChange]);\n\n const onSelectSpreadsheet = useCallback(() => {\n const start: Matrix.Point = { column: 0, row: 0 };\n const end: Matrix.Point = { column: size.columns, row: size.rows - 1 };\n setPointRange({ start, end });\n }, [size]);\n\n const onColumnVisibilityChange = useCallback((columnId: string) => {\n setColumns((previous) =>\n previous.map((column) =>\n column.id === columnId ? { ...column, visible: !column.visible } : column,\n ),\n );\n }, []);\n\n useEffect(() => {\n setMatrix(startingMatrix);\n }, [startingMatrix]);\n\n useEffect(() => {\n setColumns(() => setupColumns(startingColumns));\n }, [startingColumns]);\n\n const value: Spreadsheet.Context = useMemo(\n () => ({\n size,\n matrix,\n columns,\n emptySize,\n staticRows,\n hasSomeEntireRow,\n highlightLastRow,\n\n pointRange,\n setPointRange,\n\n containerDimensions,\n setContainerDimensions,\n\n onPaste,\n onChange,\n onRemoveRow,\n onSelectRow,\n onSelectCell,\n isCellSelected,\n onInsertNewRow,\n onColumnResize,\n onSelectSpreadsheet,\n onColumnVisibilityChange,\n }),\n [\n size,\n matrix,\n columns,\n emptySize,\n staticRows,\n hasSomeEntireRow,\n highlightLastRow,\n\n pointRange,\n containerDimensions,\n\n onPaste,\n onChange,\n onRemoveRow,\n onSelectRow,\n onSelectCell,\n isCellSelected,\n onInsertNewRow,\n onColumnResize,\n onSelectSpreadsheet,\n onColumnVisibilityChange,\n ],\n );\n\n return <SpreadsheetContext.Provider value={value}>{children}</SpreadsheetContext.Provider>;\n}\n\n/** Spreadsheet columns internal states and values setup function */\nfunction setupColumns(columns: InitialColumn[]): Column[] {\n return columns.map((column, index) => ({\n ...column,\n id: `spreadsheet__column__id__${nanoid()}`,\n alphabetLetter: indexedAlphabet(index + 1),\n position: index,\n width: column.width || COLUMN_INITIAL_WIDTH,\n visible: true,\n }));\n}\n","import { SpreadsheetContext } from '@/src/components/spreadsheet/ui/context';\nimport { useContext } from 'react';\n\nexport function useSpreadsheet() {\n const context = useContext(SpreadsheetContext);\n\n if (!context) {\n throw new Error('useSpreadsheet has to be used within <SpreadsheetContext.Provider>');\n }\n\n return context;\n}\n","import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { useSpreadsheet } from '@/src/components/spreadsheet/lib/use-spreadsheet';\nimport * as Spreadsheet from '@/src/components/spreadsheet/model/spreadsheet';\nimport { cn } from '@/src/shared/lib/cn';\nimport { type PropsWithChildren, useEffect, useMemo, useRef } from 'react';\n\ntype MatrixProps = PropsWithChildren<{\n className?: string;\n}>;\n\nexport function Matrix(props: MatrixProps) {\n const { children, className } = props;\n const { size, staticRows, setContainerDimensions } = useSpreadsheet();\n\n const containerRef = useRef<null | HTMLDivElement>(null);\n\n const height = useMemo(\n () => size.rows * Spreadsheet.CELL_INITIAL_HEIGHT + Spreadsheet.COLUMN_TITLE_INITIAL_HEIGHT,\n [size.rows],\n );\n\n useEffect(() => {\n const containerElement = containerRef.current;\n\n if (!containerElement) return;\n\n const resizeObserver = new ResizeObserver((entries) => {\n const entry = entries[0];\n\n if (entry) {\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n setContainerDimensions({ height, width });\n }\n });\n\n resizeObserver.observe(containerElement);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [setContainerDimensions]);\n\n return (\n <div\n ref={containerRef}\n className={cn(\n 'relative w-full border border-t-0 border-r-0',\n size.rows >= 7 ? 'border-b-0' : 'border-b',\n staticRows ? `${height}px border-b-0` : 'min-h-[260px]',\n className,\n )}\n >\n {children}\n </div>\n );\n}\n","import { type PropsWithChildren, useRef } from 'react';\nimport { useClickAway } from 'react-use';\n\nimport { useSpreadsheet } from '@/src/components/spreadsheet/lib/use-spreadsheet';\nimport { cn } from '@/src/shared/lib/cn';\n\ntype RootProps = PropsWithChildren<{\n className?: string;\n}>;\n\nexport function Root(props: RootProps) {\n const { children, className } = props;\n const { setPointRange } = useSpreadsheet();\n\n const rootRef = useRef<HTMLDivElement | null>(null);\n\n useClickAway(rootRef, () => setPointRange(null));\n\n return (\n <div ref={rootRef} className={cn('min-w-[640px]', className)}>\n {children}\n </div>\n );\n}\n","export var noop = function () { };\nexport function on(obj) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (obj && obj.addEventListener) {\n obj.addEventListener.apply(obj, args);\n }\n}\nexport function off(obj) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (obj && obj.removeEventListener) {\n obj.removeEventListener.apply(obj, args);\n }\n}\nexport var isBrowser = typeof window !== 'undefined';\nexport var isNavigator = typeof navigator !== 'undefined';\n","import { useEffect, useRef } from 'react';\nimport { off, on } from './misc/util';\nvar defaultEvents = ['mousedown', 'touchstart'];\nvar useClickAway = function (ref, onClickAway, events) {\n if (events === void 0) { events = defaultEvents; }\n var savedCallback = useRef(onClickAway);\n useEffect(function () {\n savedCallback.current = onClickAway;\n }, [onClickAway]);\n useEffect(function () {\n var handler = function (event) {\n var el = ref.current;\n el && !el.contains(event.target) && savedCallback.current(event);\n };\n for (var _i = 0, events_1 = events; _i < events_1.length; _i++) {\n var eventName = events_1[_i];\n on(document, eventName, handler);\n }\n return function () {\n for (var _i = 0, events_2 = events; _i < events_2.length; _i++) {\n var eventName = events_2[_i];\n off(document, eventName, handler);\n }\n };\n }, [events, ref]);\n};\nexport default useClickAway;\n","import { Matrix } from '@/src/components/spreadsheet/ui/containers/matrix';\nimport { Root } from '@/src/components/spreadsheet/ui/containers/root';\n\nexport const Container = {\n Matrix,\n Root,\n};\n","import { cn } from '@/src/shared/lib/cn';\nimport type { DragEvent } from 'react';\n\ntype DragIndicatorProps = {\n\tonDragStart?: (e: DragEvent<HTMLButtonElement>) => void;\n\tonDrag?: (e: DragEvent<HTMLButtonElement>) => void;\n\tonDragEnd?: (e: DragEvent<HTMLButtonElement>) => void;\n\n\tclassName?: string;\n};\n\nexport function DragIndicator(props: DragIndicatorProps) {\n\tconst { className, ...rest } = props;\n\n\treturn (\n\t\t<button\n\t\t\tdraggable\n\t\t\tclassName={cn(\n\t\t\t\t'h-9 w-1.5 cursor-col-resize rounded-sm bg-neutral-400 drop-shadow-md',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...rest}\n\t\t>\n\t\t\t<div className=\"relative\">\n\t\t\t\t<span className=\"-translate-y-1/2 absolute top-1/2 right-2.5 h-3 w-1 rounded-full bg-neutral-300\" />\n\t\t\t\t<span className=\"-translate-y-1/2 absolute top-1/2 left-2.5 h-3 w-1 rounded-full bg-neutral-300\" />\n\t\t\t</div>\n\t\t</button>\n\t);\n}\n","import { useSpreadsheet } from '@/src/components/spreadsheet/lib/use-spreadsheet';\nimport * as Matrix from '@/src/components/spreadsheet/model/matrix';\nimport * as Spreadsheet from '@/src/components/spreadsheet/model/spreadsheet';\nimport { DragIndicator } from '@/src/components/spreadsheet/ui/indicators/drag-indicator';\nimport { cn } from '@/src/shared/lib/cn';\nimport {\n type DragEvent,\n type PropsWithChildren,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\ntype ColumnIndicatorProps = PropsWithChildren<{\n className?: string;\n column: Spreadsheet.Column;\n}>;\n\nexport function ColumnIndicator(props: ColumnIndicatorProps) {\n const { className, column, children } = props;\n const { id, width, position, visible, alphabetLetter } = column;\n\n const { matrix, pointRange, containerDimensions, onColumnResize } = useSpreadsheet();\n\n const rulerIndicatorRef = useRef<HTMLDivElement | null>(null);\n const rulerIndicatorHeight = useMemo(\n () => (containerDimensions?.height || 0) + 32,\n [containerDimensions?.height],\n );\n\n const [dragging, setDragging] = useState(false);\n const [startClientX, setStartClientX] = useState(0);\n const [clientX, setClientX] = useState(0);\n\n const difference = useMemo(\n () => (dragging ? clientX - startClientX : 0),\n [dragging, clientX, startClientX],\n );\n\n const onDragStart = useCallback((e: DragEvent<HTMLButtonElement>) => {\n setStartClientX(e.clientX);\n setDragging(true);\n }, []);\n\n const onDrag = useCallback(\n (e: DragEvent<HTMLButtonElement>) => {\n const rulerIndicatorElement = rulerIndicatorRef.current;\n\n if (!rulerIndicatorElement) return;\n\n const difference = e.clientX - startClientX;\n\n let newWidth = width + difference;\n\n if (newWidth > Spreadsheet.COLUMN_MAX_WIDTH) newWidth = Spreadsheet.COLUMN_MAX_WIDTH;\n if (newWidth < Spreadsheet.COLUMN_MIN_WIDTH) newWidth = Spreadsheet.COLUMN_MIN_WIDTH;\n\n rulerIndicatorElement.style.left = `${newWidth}px`;\n\n setClientX(e.clientX);\n },\n [startClientX, width],\n );\n\n const onDragEnd = useCallback(\n (e: DragEvent<HTMLButtonElement>) => {\n const difference = e.clientX - startClientX;\n const nextWidth = width + difference;\n onColumnResize({ width: nextWidth, columnId: id });\n setDragging(false);\n },\n [startClientX, width, id, onColumnResize],\n );\n\n const createClassName = useCallback(() => {\n if (dragging) return `bg-neutral-100 font-bold text-neutral-700 ${className}`;\n\n if (pointRange && !dragging) {\n const { start, end } = pointRange;\n\n const hasEntireColumns = Matrix.hasEntireColumns({ matrix, pointRange });\n const columnInRange = position >= start.column && position <= end.column;\n\n if (hasEntireColumns) return `bg-[#0085FF] font-bold text-white ${className}`;\n\n if (columnInRange) return `bg-blue-100 font-bold text-blue-700 ${className}`;\n }\n\n return className;\n }, [dragging, className, matrix, pointRange, position]);\n\n const rulerIndicatorToPx = useCallback(() => {\n let newWidth = width + difference;\n\n if (newWidth > Spreadsheet.COLUMN_MAX_WIDTH) newWidth = Spreadsheet.COLUMN_MAX_WIDTH;\n if (newWidth < Spreadsheet.COLUMN_MIN_WIDTH) newWidth = Spreadsheet.COLUMN_MIN_WIDTH;\n\n return `${newWidth}px`;\n }, [width, difference]);\n\n const dragEventListeners = useMemo(\n () => ({ onDragStart, onDrag, onDragEnd }),\n [onDragStart, onDrag, onDragEnd],\n );\n\n useEffect(() => {\n const rulerIndicatorElement = rulerIndicatorRef.current;\n\n if (!rulerIndicatorElement) return;\n\n rulerIndicatorElement.style.left = `${width}px`;\n }, [width]);\n\n if (!visible) return null;\n\n return (\n <div\n style={{ width }}\n className={cn(\n 'relative flex h-7 w-32 shrink-0 items-center justify-center border border-t-0 border-l-0 text-[#8E8EA9] text-xs',\n createClassName(),\n )}\n >\n <DragIndicator\n {...dragEventListeners}\n className={cn(\n '-right-[3px] -top-1 absolute z-50 opacity-0 hover:opacity-100',\n dragging && 'opacity-0',\n )}\n />\n\n <div\n ref={rulerIndicatorRef}\n style={{ height: rulerIndicatorHeight }}\n className={cn(\n '-top-4 pointer-events-none absolute z-50 h-full w-1.5 rounded-full bg-blue-400 shadow-lg outline outline-sky-100',\n dragging ? 'opacity-100' : 'opacity-0',\n )}\n >\n <span className=\"-translate-y-1/2 relative top-8 left-4 z-50 select-none rounded-md border bg-white p-1 font-semibold drop-shadow-md\">\n {rulerIndicatorToPx()}\n </span>\n </div>\n\n <span>{children || alphabetLetter}</span>\n </div>\n );\n}\n","import type { SVGProps } from 'react';\n\nexport function IntegerIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n stroke=\"currentColor\"\n fill=\"currentColor\"\n strokeWidth=\"0\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <title>Integer</title>\n <path d=\"M13.003 7.754a.75.75 0 0 1 .75-.75h5.232a.75.75 0 0 1 .53 1.28l-2.776 2.777c.55.097 1.057.253 1.492.483.905.477 1.504 1.284 1.504 2.418 0 .966-.471 1.75-1.172 2.27-.687.511-1.587.77-2.521.77-1.367 0-2.274-.528-2.667-.756a.75.75 0 0 1 .755-1.297c.331.193.953.553 1.912.553.673 0 1.243-.188 1.627-.473.37-.275.566-.635.566-1.067 0-.5-.219-.836-.703-1.091-.538-.284-1.375-.443-2.471-.443a.75.75 0 0 1-.53-1.28l2.643-2.644h-3.421a.75.75 0 0 1-.75-.75ZM7.88 15.215a1.4 1.4 0 0 0-1.446.83.75.75 0 0 1-1.37-.61 2.899 2.899 0 0 1 2.986-1.71c.589.06 1.139.323 1.557.743.434.446.685 1.058.685 1.778 0 1.641-1.254 2.437-2.12 2.986-.538.341-1.18.694-1.495 1.273H9.75a.75.75 0 0 1 0 1.5h-4a.75.75 0 0 1-.75-.75c0-1.799 1.337-2.63 2.243-3.21 1.032-.659 1.55-1.031 1.55-1.8 0-.355-.116-.584-.26-.732a1.071 1.071 0 0 0-.652-.298Zm.234-13.121a.75.75 0 0 1 .386.656V9h1.252a.75.75 0 0 1 0 1.5H5.75a.75.75 0 0 1 0-1.5H7V4.103l-.853.533a.749.749 0 1 1-.795-1.272l2-1.25a.749.749 0 0 1 .762-.02Z\" />\n </svg>\n );\n}\n","import * as React from 'react';\nimport { composeRefs } from '@radix-ui/react-compose-refs';\n\n/* -------------------------------------------------------------------------------------------------\n * Slot\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SlotProps extends React.HTMLAttributes<HTMLElement> {\n children?: React.ReactNode;\n}\n\nconst Slot = React.forwardRef<HTMLElement, SlotProps>((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n\n if (slottable) {\n // the new element to render is the one passed as a child of `Slottable`\n const newElement = slottable.props.children as React.ReactNode;\n\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n // because the new element will be the one rendered, we are only interested\n // in grabbing its children (`newElement.props.children`)\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement)\n ? (newElement.props.children as React.ReactNode)\n : null;\n } else {\n return child;\n }\n });\n\n return (\n <SlotClone {...slotProps} ref={forwardedRef}>\n {React.isValidElement(newElement)\n ? React.cloneElement(newElement, undefined, newChildren)\n : null}\n </SlotClone>\n );\n }\n\n return (\n <SlotClone {...slotProps} ref={forwardedRef}>\n {children}\n </SlotClone>\n );\n});\n\nSlot.displayName = 'Slot';\n\n/* -------------------------------------------------------------------------------------------------\n * SlotClone\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SlotCloneProps {\n children: React.ReactNode;\n}\n\nconst SlotClone = React.forwardRef<any, SlotCloneProps>((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n\n if (React.isValidElement(children)) {\n return React.cloneElement(children, {\n ...mergeProps(slotProps, children.props),\n ref: forwardedRef ? composeRefs(forwardedRef, (children as any).ref) : (children as any).ref,\n });\n }\n\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n});\n\nSlotClone.displayName = 'SlotClone';\n\n/* -------------------------------------------------------------------------------------------------\n * Slottable\n * -----------------------------------------------------------------------------------------------*/\n\nconst Slottable = ({ children }: { children: React.ReactNode }) => {\n return <>{children}</>;\n};\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype AnyProps = Record<string, any>;\n\nfunction isSlottable(child: React.ReactNode): child is React.ReactElement {\n return React.isValidElement(child) && child.type === Slottable;\n}\n\nfunction mergeProps(slotProps: AnyProps, childProps: AnyProps) {\n // all child props should override\n const overrideProps = { ...childProps };\n\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n // if the handler exists on both, we compose them\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args: unknown[]) => {\n childPropValue(...args);\n slotPropValue(...args);\n };\n }\n // but if it exists only on the slot, we use only this one\n else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n }\n // if it's `style`, we merge them\n else if (propName === 'style') {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === 'className') {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(' ');\n }\n }\n\n return { ...slotProps, ...overrideProps };\n}\n\nconst Root = Slot;\n\nexport {\n Slot,\n Slottable,\n //\n Root,\n};\nexport type { SlotProps };\n","import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { DismissableLayer } from '@radix-ui/react-dismissable-layer';\nimport { useId } from '@radix-ui/react-id';\nimport * as PopperPrimitive from '@radix-ui/react-popper';\nimport { createPopperScope } from '@radix-ui/react-popper';\nimport { Portal as PortalPrimitive } from '@radix-ui/react-portal';\nimport { Presence } from '@radix-ui/react-presence';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { Slottable } from '@radix-ui/react-slot';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport * as VisuallyHiddenPrimitive from '@radix-ui/react-visually-hidden';\n\nimport type * as Radix from '@radix-ui/react-primitive';\nimport type { Scope } from '@radix-ui/react-context';\n\ntype ScopedProps<P = {}> = P & { __scopeTooltip?: Scope };\nconst [createTooltipContext, createTooltipScope] = createContextScope('Tooltip', [\n createPopperScope,\n]);\nconst usePopperScope = createPopperScope();\n\n/* -------------------------------------------------------------------------------------------------\n * TooltipProvider\n * -----------------------------------------------------------------------------------------------*/\n\nconst PROVIDER_NAME = 'TooltipProvider';\nconst DEFAULT_DELAY_DURATION = 700;\nconst TOOLTIP_OPEN = 'tooltip.open';\n\ntype TooltipProviderContextValue = {\n isOpenDelayed: boolean;\n delayDuration: number;\n onOpen(): void;\n onClose(): void;\n onPointerInTransitChange(inTransit: boolean): void;\n isPointerInTransitRef: React.MutableRefObject<boolean>;\n disableHoverableContent: boolean;\n};\n\nconst [TooltipProviderContextProvider, useTooltipProviderContext] =\n createTooltipContext<TooltipProviderContextValue>(PROVIDER_NAME);\n\ninterface TooltipProviderProps {\n children: React.ReactNode;\n /**\n * The duration from when the pointer enters the trigger until the tooltip gets opened.\n * @defaultValue 700\n */\n delayDuration?: number;\n /**\n * How much time a user has to enter another trigger without incurring a delay again.\n * @defaultValue 300\n */\n skipDelayDuration?: number;\n /**\n * When `true`, trying to hover the content will result in the tooltip closing as the pointer leaves the trigger.\n * @defaultValue false\n */\n disableHoverableContent?: boolean;\n}\n\nconst TooltipProvider: React.FC<TooltipProviderProps> = (\n props: ScopedProps<TooltipProviderProps>\n) => {\n const {\n __scopeTooltip,\n delayDuration = DEFAULT_DELAY_DURATION,\n skipDelayDuration = 300,\n disableHoverableContent = false,\n children,\n } = props;\n const [isOpenDelayed, setIsOpenDelayed] = React.useState(true);\n const isPointerInTransitRef = React.useRef(false);\n const skipDelayTimerRef = React.useRef(0);\n\n React.useEffect(() => {\n const skipDelayTimer = skipDelayTimerRef.current;\n return () => window.clearTimeout(skipDelayTimer);\n }, []);\n\n return (\n <TooltipProviderContextProvider\n scope={__scopeTooltip}\n isOpenDelayed={isOpenDelayed}\n delayDuration={delayDuration}\n onOpen={React.useCallback(() => {\n window.clearTimeout(skipDelayTimerRef.current);\n setIsOpenDelayed(false);\n }, [])}\n onClose={React.useCallback(() => {\n window.clearTimeout(skipDelayTimerRef.current);\n skipDelayTimerRef.current = window.setTimeout(\n () => setIsOpenDelayed(true),\n skipDelayDuration\n );\n }, [skipDelayDuration])}\n isPointerInTransitRef={isPointerInTransitRef}\n onPointerInTransitChange={React.useCallback((inTransit: boolean) => {\n isPointerInTransitRef.current = inTransit;\n }, [])}\n disableHoverableContent={disableHoverableContent}\n >\n {children}\n </TooltipProviderContextProvider>\n );\n};\n\nTooltipProvider.displayName = PROVIDER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * Tooltip\n * -----------------------------------------------------------------------------------------------*/\n\nconst TOOLTIP_NAME = 'Tooltip';\n\ntype TooltipContextValue = {\n contentId: string;\n open: boolean;\n stateAttribute: 'closed' | 'delayed-open' | 'instant-open';\n trigger: TooltipTriggerElement | null;\n onTriggerChange(trigger: TooltipTriggerElement | null): void;\n onTriggerEnter(): void;\n onTriggerLeave(): void;\n onOpen(): void;\n onClose(): void;\n disableHoverableContent: boolean;\n};\n\nconst [TooltipContextProvider, useTooltipContext] =\n createTooltipContext<TooltipContextValue>(TOOLTIP_NAME);\n\ninterface TooltipProps {\n children?: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n /**\n * The duration from when the pointer enters the trigger until the tooltip gets opened. This will\n * override the prop with the same name passed to Provider.\n * @defaultValue 700\n */\n delayDuration?: number;\n /**\n * When `true`, trying to hover the content will result in the tooltip closing as the pointer leaves the trigger.\n * @defaultValue false\n */\n disableHoverableContent?: boolean;\n}\n\nconst Tooltip: React.FC<TooltipProps> = (props: ScopedProps<TooltipProps>) => {\n const {\n __scopeTooltip,\n children,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n disableHoverableContent: disableHoverableContentProp,\n delayDuration: delayDurationProp,\n } = props;\n const providerContext = useTooltipProviderContext(TOOLTIP_NAME, props.__scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const [trigger, setTrigger] = React.useState<HTMLButtonElement | null>(null);\n const contentId = useId();\n const openTimerRef = React.useRef(0);\n const disableHoverableContent =\n disableHoverableContentProp ?? providerContext.disableHoverableContent;\n const delayDuration = delayDurationProp ?? providerContext.delayDuration;\n const wasOpenDelayedRef = React.useRef(false);\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: (open) => {\n if (open) {\n providerContext.onOpen();\n\n // as `onChange` is called within a lifecycle method we\n // avoid dispatching via `dispatchDiscreteCustomEvent`.\n document.dispatchEvent(new CustomEvent(TOOLTIP_OPEN));\n } else {\n providerContext.onClose();\n }\n onOpenChange?.(open);\n },\n });\n const stateAttribute = React.useMemo(() => {\n return open ? (wasOpenDelayedRef.current ? 'delayed-open' : 'instant-open') : 'closed';\n }, [open]);\n\n const handleOpen = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n wasOpenDelayedRef.current = false;\n setOpen(true);\n }, [setOpen]);\n\n const handleClose = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n setOpen(false);\n }, [setOpen]);\n\n const handleDelayedOpen = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = window.setTimeout(() => {\n wasOpenDelayedRef.current = true;\n setOpen(true);\n }, delayDuration);\n }, [delayDuration, setOpen]);\n\n React.useEffect(() => {\n return () => window.clearTimeout(openTimerRef.current);\n }, []);\n\n return (\n <PopperPrimitive.Root {...popperScope}>\n <TooltipContextProvider\n scope={__scopeTooltip}\n contentId={contentId}\n open={open}\n stateAttribute={stateAttribute}\n trigger={trigger}\n onTriggerChange={setTrigger}\n onTriggerEnter={React.useCallback(() => {\n if (providerContext.isOpenDelayed) handleDelayedOpen();\n else handleOpen();\n }, [providerContext.isOpenDelayed, handleDelayedOpen, handleOpen])}\n onTriggerLeave={React.useCallback(() => {\n if (disableHoverableContent) {\n handleClose();\n } else {\n // Clear the timer in case the pointer leaves the trigger before the tooltip is opened.\n window.clearTimeout(openTimerRef.current);\n }\n }, [handleClose, disableHoverableContent])}\n onOpen={handleOpen}\n onClose={handleClose}\n disableHoverableContent={disableHoverableContent}\n >\n {children}\n </TooltipContextProvider>\n </PopperPrimitive.Root>\n );\n};\n\nTooltip.displayName = TOOLTIP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * TooltipTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'TooltipTrigger';\n\ntype TooltipTriggerElement = React.ElementRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = Radix.ComponentPropsWithoutRef<typeof Primitive.button>;\ninterface TooltipTriggerProps extends PrimitiveButtonProps {}\n\nconst TooltipTrigger = React.forwardRef<TooltipTriggerElement, TooltipTriggerProps>(\n (props: ScopedProps<TooltipTriggerProps>, forwardedRef) => {\n const { __scopeTooltip, ...triggerProps } = props;\n const context = useTooltipContext(TRIGGER_NAME, __scopeTooltip);\n const providerContext = useTooltipProviderContext(TRIGGER_NAME, __scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const ref = React.useRef<TooltipTriggerElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref, context.onTriggerChange);\n const isPointerDownRef = React.useRef(false);\n const hasPointerMoveOpenedRef = React.useRef(false);\n const handlePointerUp = React.useCallback(() => (isPointerDownRef.current = false), []);\n\n React.useEffect(() => {\n return () => document.removeEventListener('pointerup', handlePointerUp);\n }, [handlePointerUp]);\n\n return (\n <PopperPrimitive.Anchor asChild {...popperScope}>\n <Primitive.button\n // We purposefully avoid adding `type=button` here because tooltip triggers are also\n // commonly anchors and the anchor `type` attribute signifies MIME type.\n aria-describedby={context.open ? context.contentId : undefined}\n data-state={context.stateAttribute}\n {...triggerProps}\n ref={composedRefs}\n onPointerMove={composeEventHandlers(props.onPointerMove, (event) => {\n if (event.pointerType === 'touch') return;\n if (\n !hasPointerMoveOpenedRef.current &&\n !providerContext.isPointerInTransitRef.current\n ) {\n context.onTriggerEnter();\n hasPointerMoveOpenedRef.current = true;\n }\n })}\n onPointerLeave={composeEventHandlers(props.onPointerLeave, () => {\n context.onTriggerLeave();\n hasPointerMoveOpenedRef.current = false;\n })}\n onPointerDown={composeEventHandlers(props.onPointerDown, () => {\n isPointerDownRef.current = true;\n document.addEventListener('pointerup', handlePointerUp, { once: true });\n })}\n onFocus={composeEventHandlers(props.onFocus, () => {\n if (!isPointerDownRef.current) context.onOpen();\n })}\n onBlur={composeEventHandlers(props.onBlur, context.onClose)}\n onClick={composeEventHandlers(props.onClick, context.onClose)}\n />\n </PopperPrimitive.Anchor>\n );\n }\n);\n\nTooltipTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * TooltipPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'TooltipPortal';\n\ntype PortalContextValue = { forceMount?: true };\nconst [PortalProvider, usePortalContext] = createTooltipContext<PortalContextValue>(PORTAL_NAME, {\n forceMount: undefined,\n});\n\ntype PortalProps = React.ComponentPropsWithoutRef<typeof PortalPrimitive>;\ninterface TooltipPortalProps {\n children?: React.ReactNode;\n /**\n * Specify a container element to portal the content into.\n */\n container?: PortalProps['container'];\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst TooltipPortal: React.FC<TooltipPortalProps> = (props: ScopedProps<TooltipPortalProps>) => {\n const { __scopeTooltip, forceMount, children, container } = props;\n const context = useTooltipContext(PORTAL_NAME, __scopeTooltip);\n return (\n <PortalProvider scope={__scopeTooltip} forceMount={forceMount}>\n <Presence present={forceMount || context.open}>\n <PortalPrimitive asChild container={container}>\n {children}\n </PortalPrimitive>\n </Presence>\n </PortalProvider>\n );\n};\n\nTooltipPortal.displayName = PORTAL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * TooltipContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'TooltipContent';\n\ntype TooltipContentElement = TooltipContentImplElement;\ninterface TooltipContentProps extends TooltipContentImplProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst TooltipContent = React.forwardRef<TooltipContentElement, TooltipContentProps>(\n (props: ScopedProps<TooltipContentProps>, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeTooltip);\n const { forceMount = portalContext.forceMount, side = 'top', ...contentProps } = props;\n const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n\n return (\n <Presence present={forceMount || context.open}>\n {context.disableHoverableContent ? (\n <TooltipContentImpl side={side} {...contentProps} ref={forwardedRef} />\n ) : (\n <TooltipContentHoverable side={side} {...contentProps} ref={forwardedRef} />\n )}\n </Presence>\n );\n }\n);\n\ntype Point = { x: number; y: number };\ntype Polygon = Point[];\n\ntype TooltipContentHoverableElement = TooltipContentImplElement;\ninterface TooltipContentHoverableProps extends TooltipContentImplProps {}\n\nconst TooltipContentHoverable = React.forwardRef<\n TooltipContentHoverableElement,\n TooltipContentHoverableProps\n>((props: ScopedProps<TooltipContentHoverableProps>, forwardedRef) => {\n const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n const providerContext = useTooltipProviderContext(CONTENT_NAME, props.__scopeTooltip);\n const ref = React.useRef<TooltipContentHoverableElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const [pointerGraceArea, setPointerGraceArea] = React.useState<Polygon | null>(null);\n\n const { trigger, onClose } = context;\n const content = ref.current;\n\n const { onPointerInTransitChange } = providerContext;\n\n const handleRemoveGraceArea = React.useCallback(() => {\n setPointerGraceArea(null);\n onPointerInTransitChange(false);\n }, [onPointerInTransitChange]);\n\n const handleCreateGraceArea = React.useCallback(\n (event: PointerEvent, hoverTarget: HTMLElement) => {\n const currentTarget = event.currentTarget as HTMLElement;\n const exitPoint = { x: event.clientX, y: event.clientY };\n const exitSide = getExitSideFromRect(exitPoint, currentTarget.getBoundingClientRect());\n const paddedExitPoints = getPaddedExitPoints(exitPoint, exitSide);\n const hoverTargetPoints = getPointsFromRect(hoverTarget.getBoundingClientRect());\n const graceArea = getHull([...paddedExitPoints, ...hoverTargetPoints]);\n setPointerGraceArea(graceArea);\n onPointerInTransitChange(true);\n },\n [onPointerInTransitChange]\n );\n\n React.useEffect(() => {\n return () => handleRemoveGraceArea();\n }, [handleRemoveGraceArea]);\n\n React.useEffect(() => {\n if (trigger && content) {\n const handleTriggerLeave = (event: PointerEvent) => handleCreateGraceArea(event, content);\n const handleContentLeave = (event: PointerEvent) => handleCreateGraceArea(event, trigger);\n\n trigger.addEventListener('pointerleave', handleTriggerLeave);\n content.addEventListener('pointerleave', handleContentLeave);\n return () => {\n trigger.removeEventListener('pointerleave', handleTriggerLeave);\n content.removeEventListener('pointerleave', handleContentLeave);\n };\n }\n }, [trigger, content, handleCreateGraceArea, handleRemoveGraceArea]);\n\n React.useEffect(() => {\n if (pointerGraceArea) {\n const handleTrackPointerGrace = (event: PointerEvent) => {\n const target = event.target as HTMLElement;\n const pointerPosition = { x: event.clientX, y: event.clientY };\n const hasEnteredTarget = trigger?.contains(target) || content?.contains(target);\n const isPointerOutsideGraceArea = !isPointInPolygon(pointerPosition, pointerGraceArea);\n\n if (hasEnteredTarget) {\n handleRemoveGraceArea();\n } else if (isPointerOutsideGraceArea) {\n handleRemoveGraceArea();\n onClose();\n }\n };\n document.addEventListener('pointermove', handleTrackPointerGrace);\n return () => document.removeEventListener('pointermove', handleTrackPointerGrace);\n }\n }, [trigger, content, pointerGraceArea, onClose, handleRemoveGraceArea]);\n\n return <TooltipContentImpl {...props} ref={composedRefs} />;\n});\n\nconst [VisuallyHiddenContentContextProvider, useVisuallyHiddenContentContext] =\n createTooltipContext(TOOLTIP_NAME, { isInside: false });\n\ntype TooltipContentImplElement = React.ElementRef<typeof PopperPrimitive.Content>;\ntype DismissableLayerProps = Radix.ComponentPropsWithoutRef<typeof DismissableLayer>;\ntype PopperContentProps = Radix.ComponentPropsWithoutRef<typeof PopperPrimitive.Content>;\ninterface TooltipContentImplProps extends Omit<PopperContentProps, 'onPlaced'> {\n /**\n * A more descriptive label for accessibility purpose\n */\n 'aria-label'?: string;\n\n /**\n * Event handler called when the escape key is down.\n * Can be prevented.\n */\n onEscapeKeyDown?: DismissableLayerProps['onEscapeKeyDown'];\n /**\n * Event handler called when the a `pointerdown` event happens outside of the `Tooltip`.\n * Can be prevented.\n */\n onPointerDownOutside?: DismissableLayerProps['onPointerDownOutside'];\n}\n\nconst TooltipContentImpl = React.forwardRef<TooltipContentImplElement, TooltipContentImplProps>(\n (props: ScopedProps<TooltipContentImplProps>, forwardedRef) => {\n const {\n __scopeTooltip,\n children,\n 'aria-label': ariaLabel,\n onEscapeKeyDown,\n onPointerDownOutside,\n ...contentProps\n } = props;\n const context = useTooltipContext(CONTENT_NAME, __scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const { onClose } = context;\n\n // Close this tooltip if another one opens\n React.useEffect(() => {\n document.addEventListener(TOOLTIP_OPEN, onClose);\n return () => document.removeEventListener(TOOLTIP_OPEN, onClose);\n }, [onClose]);\n\n // Close the tooltip if the trigger is scrolled\n React.useEffect(() => {\n if (context.trigger) {\n const handleScroll = (event: Event) => {\n const target = event.target as HTMLElement;\n if (target?.contains(context.trigger)) onClose();\n };\n window.addEventListener('scroll', handleScroll, { capture: true });\n return () => window.removeEventListener('scroll', handleScroll, { capture: true });\n }\n }, [context.trigger, onClose]);\n\n return (\n <DismissableLayer\n asChild\n disableOutsidePointerEvents={false}\n onEscapeKeyDown={onEscapeKeyDown}\n onPointerDownOutside={onPointerDownOutside}\n onFocusOutside={(event) => event.preventDefault()}\n onDismiss={onClose}\n >\n <PopperPrimitive.Content\n data-state={context.stateAttribute}\n {...popperScope}\n {...contentProps}\n ref={forwardedRef}\n style={{\n ...contentProps.style,\n // re-namespace exposed content custom properties\n ...{\n '--radix-tooltip-content-transform-origin': 'var(--radix-popper-transform-origin)',\n '--radix-tooltip-content-available-width': 'var(--radix-popper-available-width)',\n '--radix-tooltip-content-available-height': 'var(--radix-popper-available-height)',\n '--radix-tooltip-trigger-width': 'var(--radix-popper-anchor-width)',\n '--radix-tooltip-trigger-height': 'var(--radix-popper-anchor-height)',\n },\n }}\n >\n <Slottable>{children}</Slottable>\n <VisuallyHiddenContentContextProvider scope={__scopeTooltip} isInside={true}>\n <VisuallyHiddenPrimitive.Root id={context.contentId} role=\"tooltip\">\n {ariaLabel || children}\n </VisuallyHiddenPrimitive.Root>\n </VisuallyHiddenContentContextProvider>\n </PopperPrimitive.Content>\n </DismissableLayer>\n );\n }\n);\n\nTooltipContent.displayName = CONTENT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * TooltipArrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst ARROW_NAME = 'TooltipArrow';\n\ntype TooltipArrowElement = React.ElementRef<typeof PopperPrimitive.Arrow>;\ntype PopperArrowProps = Radix.ComponentPropsWithoutRef<typeof PopperPrimitive.Arrow>;\ninterface TooltipArrowProps extends PopperArrowProps {}\n\nconst TooltipArrow = React.forwardRef<TooltipArrowElement, TooltipArrowProps>(\n (props: ScopedProps<TooltipArrowProps>, forwardedRef) => {\n const { __scopeTooltip, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeTooltip);\n const visuallyHiddenContentContext = useVisuallyHiddenContentContext(\n ARROW_NAME,\n __scopeTooltip\n );\n // if the arrow is inside the `VisuallyHidden`, we don't want to render it all to\n // prevent issues in positioning the arrow due to the duplicate\n return visuallyHiddenContentContext.isInside ? null : (\n <PopperPrimitive.Arrow {...popperScope} {...arrowProps} ref={forwardedRef} />\n );\n }\n);\n\nTooltipArrow.displayName = ARROW_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype Side = NonNullable<TooltipContentProps['side']>;\n\nfunction getExitSideFromRect(point: Point, rect: DOMRect): Side {\n const top = Math.abs(rect.top - point.y);\n const bottom = Math.abs(rect.bottom - point.y);\n const right = Math.abs(rect.right - point.x);\n const left = Math.abs(rect.left - point.x);\n\n switch (Math.min(top, bottom, right, left)) {\n case left:\n return 'left';\n case right:\n return 'right';\n case top:\n return 'top';\n case bottom:\n return 'bottom';\n default:\n throw new Error('unreachable');\n }\n}\n\nfunction getPaddedExitPoints(exitPoint: Point, exitSide: Side, padding = 5) {\n const paddedExitPoints: Point[] = [];\n switch (exitSide) {\n case 'top':\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y + padding },\n { x: exitPoint.x + padding, y: exitPoint.y + padding }\n );\n break;\n case 'bottom':\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y - padding },\n { x: exitPoint.x + padding, y: exitPoint.y - padding }\n );\n break;\n case 'left':\n paddedExitPoints.push(\n { x: exitPoint.x + padding, y: exitPoint.y - padding },\n { x: exitPoint.x + padding, y: exitPoint.y + padding }\n );\n break;\n case 'right':\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y - padding },\n { x: exitPoint.x - padding, y: exitPoint.y + padding }\n );\n break;\n }\n return paddedExitPoints;\n}\n\nfunction getPointsFromRect(rect: DOMRect) {\n const { top, right, bottom, left } = rect;\n return [\n { x: left, y: top },\n { x: right, y: top },\n { x: right, y: bottom },\n { x: left, y: bottom },\n ];\n}\n\n// Determine if a point is inside of a polygon.\n// Based on https://github.com/substack/point-in-polygon\nfunction isPointInPolygon(point: Point, polygon: Polygon) {\n const { x, y } = point;\n let inside = false;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const xi = polygon[i].x;\n const yi = polygon[i].y;\n const xj = polygon[j].x;\n const yj = polygon[j].y;\n\n // prettier-ignore\n const intersect = ((yi > y) !== (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);\n if (intersect) inside = !inside;\n }\n\n return inside;\n}\n\n// Returns a new array of points representing the convex hull of the given set of points.\n// https://www.nayuki.io/page/convex-hull-algorithm\nfunction getHull<P extends Point>(points: Readonly<Array<P>>): Array<P> {\n const newPoints: Array<P> = points.slice();\n newPoints.sort((a: Point, b: Point) => {\n if (a.x < b.x) return -1;\n else if (a.x > b.x) return +1;\n else if (a.y < b.y) return -1;\n else if (a.y > b.y) return +1;\n else return 0;\n });\n return getHullPresorted(newPoints);\n}\n\n// Returns the convex hull, assuming that each points[i] <= points[i + 1]. Runs in O(n) time.\nfunction getHullPresorted<P extends Point>(points: Readonly<Array<P>>): Array<P> {\n if (points.length <= 1) return points.slice();\n\n const upperHull: Array<P> = [];\n for (let i = 0; i < points.length; i++) {\n const p = points[i];\n while (upperHull.length >= 2) {\n const q = upperHull[upperHull.length - 1];\n const r = upperHull[upperHull.length - 2];\n if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) upperHull.pop();\n else break;\n }\n upperHull.push(p);\n }\n upperHull.pop();\n\n const lowerHull: Array<P> = [];\n for (let i = points.length - 1; i >= 0; i--) {\n const p = points[i];\n while (lowerHull.length >= 2) {\n const q = lowerHull[lowerHull.length - 1];\n const r = lowerHull[lowerHull.length - 2];\n if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) lowerHull.pop();\n else break;\n }\n lowerHull.push(p);\n }\n lowerHull.pop();\n\n if (\n upperHull.length === 1 &&\n lowerHull.length === 1 &&\n upperHull[0].x === lowerHull[0].x &&\n upperHull[0].y === lowerHull[0].y\n ) {\n return upperHull;\n } else {\n return upperHull.concat(lowerHull);\n }\n}\n\nconst Provider = TooltipProvider;\nconst Root = Tooltip;\nconst Trigger = TooltipTrigger;\nconst Portal = TooltipPortal;\nconst Content = TooltipContent;\nconst Arrow = TooltipArrow;\n\nexport {\n createTooltipScope,\n //\n TooltipProvider,\n Tooltip,\n TooltipTrigger,\n TooltipPortal,\n TooltipContent,\n TooltipArrow,\n //\n Provider,\n Root,\n Trigger,\n Portal,\n Content,\n Arrow,\n};\nexport type {\n TooltipProps,\n TooltipTriggerProps,\n TooltipPortalProps,\n TooltipContentProps,\n TooltipArrowProps,\n};\n","'use client';\n\nimport { cn } from '@/src/shared/lib/cn';\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\nimport * as React from 'react';\n\nconst TooltipProvider = TooltipPrimitive.Provider;\n\nconst Tooltip = TooltipPrimitive.Root;\n\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'fade-in-0 zoom-in-95 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 animate-in overflow-hidden rounded-md bg-primary px-3 py-1.5 text-primary-foreground text-xs data-[state=closed]:animate-out',\n className,\n )}\n {...props}\n />\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };\n","import * as Spreadsheet from '@/src/components/spreadsheet/model/spreadsheet';\nimport { IntegerIcon } from '@/src/components/spreadsheet/ui/icons/integer-icon';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/src/shared/ui/tooltip';\nimport { QuestionMarkCircledIcon, TextIcon } from '@radix-ui/react-icons';\nimport {\n CalendarIcon,\n CopyCheckIcon,\n DivideIcon,\n DollarSignIcon,\n ListTodoIcon,\n PercentIcon,\n} from 'lucide-react';\n\nexport function ColumnTitleIndicator({ column }: { column: Spreadsheet.Column }) {\n const { width, name, visible, dataEditorType, description } = column;\n\n if (!visible) return null;\n\n return (\n <div\n className=\"flex h-9 w-32 shrink-0 items-center border border-t-0 border-l-0 bg-[#F6F6F9] px-2\"\n style={{\n width,\n height: Spreadsheet.COLUMN_TITLE_INITIAL_HEIGHT,\n }}\n >\n <div className=\"mr-2 w-4 shrink-0 text-[#8E8EA9]\">\n {dataEditorType === 'String' && <TextIcon className=\"h-4 w-4\" />}\n {dataEditorType === 'Date' && <CalendarIcon className=\"h-4 w-4\" />}\n {dataEditorType === 'Boolean' && <CopyCheckIcon className=\"h-4 w-4\" />}\n {dataEditorType === 'Select' && <ListTodoIcon className=\"h-4 w-4\" />}\n\n {dataEditorType === 'Float' && <DivideIcon className=\"h-4 w-4\" />}\n {dataEditorType === 'Decimal' && <DivideIcon className=\"h-4 w-4\" />}\n {dataEditorType === 'Integer' && <IntegerIcon className=\"h-4 w-4\" />}\n {dataEditorType === 'Currency' && <DollarSignIcon className=\"h-4 w-4\" />}\n {dataEditorType === 'Percentage' && <PercentIcon className=\"h-4 w-4\" />}\n </div>\n\n <p\n title={name}\n className=\"mr-2 line-clamp-2 w-full break-words font-semibold text-[#4A4A6A] text-xs\"\n >\n {name}\n </p>\n\n {description ? (\n <TooltipProvider>\n <Tooltip delayDuration={100}>\n <TooltipTrigger>\n <QuestionMarkCircledIcon className=\"h-4 w-4 text-[#4A4A6A]\" />\n </TooltipTrigger>\n\n <TooltipContent className=\"max-w-[240px]\">\n <p>{description}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n ) : (\n <div className=\"w-4 shrink-0\" />\n )}\n </div>\n );\n}\n","import { useSpreadsheet } from '@/src/components/spreadsheet/lib/use-spreadsheet';\nimport { cn } from '@/src/shared/lib/cn';\n\nexport function CornerIndicator({ className }: { className?: string }) {\n const { emptySize, onSelectSpreadsheet } = useSpreadsheet();\n\n return (\n <button\n type=\"button\"\n disabled={emptySize}\n className={cn(\n 'relative flex h-7 w-12 shrink-0 items-center justify-center border border-t border-l bg-white text-xs',\n className,\n )}\n onClick={onSelectSpreadsheet}\n >\n <span className=\"absolute top-0 right-0 h-full w-0.5 bg-gray-300\" />\n <span className=\"absolute bottom-0 left-0 h-0.5 w-full bg-gray-300\" />\n </button>\n );\n}\n","import { useSpreadsheet } from '@/src/components/spreadsheet/lib/use-spreadsheet';\nimport { ColumnIndicator } from '@/src/components/spreadsheet/ui/indicators/column-indicator';\nimport { ColumnTitleIndicator } from '@/src/components/spreadsheet/ui/indicators/column-title-indicator';\nimport { CornerIndicator } from '@/src/components/spreadsheet/ui/indicators/corner-indicator';\n\nexport function Header() {\n const { columns } = useSpreadsheet();\n\n return (\n <div className=\"sticky top-[58px] z-50\">\n <div className=\"relative flex items-center bg-white\">\n <CornerIndicator className=\"border-t-0 border-l-0\" />\n\n {columns.map((column) => (\n <ColumnIndicator\n key={`spreadsheet__column__indicator__key__${column.name}__${column.position}`}\n column={column}\n />\n ))}\n </div>\n\n <div className=\"flex items-center\">\n <div className=\"h-9 w-12 shrink-0 cursor-default border border-t-0 border-l-0 bg-[#F6F6F9]\" />\n\n {columns.map((column) => (\n <ColumnTitleIndicator\n key={`spreadsheet__column__header__key__${column.name}__${column.position}`}\n column={column}\n />\n ))}\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { cn } from '@/src/shared/lib/cn';\nimport { CaretSortIcon, CheckIcon, ChevronDownIcon, ChevronUpIcon } from '@radix-ui/react-icons';\nimport * as SelectPrimitive from '@radix-ui/react-select';\nimport * as React from 'react';\n\nconst Select = SelectPrimitive.Root;\n\nconst SelectGroup = SelectPrimitive.Group;\n\nconst SelectValue = SelectPrimitive.Value;\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n 'flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-transparent py-2 pr-px pl-3 text-sm shadow-sm ring-offset-background [&>span]:line-clamp-1 disabled:cursor-not-allowed placeholder:text-muted-foreground disabled:opacity-50 focus:outline-none focus:ring-1 focus:ring-ring',\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <CaretSortIcon className=\"h-4 w-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n {...props}\n >\n <ChevronUpIcon />\n </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n {...props}\n >\n <ChevronDownIcon />\n </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = 'popper', ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n '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-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=closed]:animate-out data-[state=open]:animate-in',\n position === 'popper' &&\n 'data-[side=left]:-translate-x-1 data-[side=top]:-translate-y-1 data-[side=right]:translate-x-1 data-[side=bottom]:translate-y-1',\n className,\n )}\n position={position}\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)]',\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn('px-2 py-1.5 font-semibold text-sm', className)}\n {...props}\n />\n));\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pr-8 pl-2 text-sm outline-none data-[disabled]:pointer-events-none focus:bg-accent focus:text-accent-foreground data-[disabled]:opacity-50',\n className,\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"h-4 w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn('-mx-1 my-1 h-px bg-muted', className)}\n {...props}\n />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { clamp } from '@radix-ui/number';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { createCollection } from '@radix-ui/react-collection';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useDirection } from '@radix-ui/react-direction';\nimport { DismissableLayer } from '@radix-ui/react-dismissable-layer';\nimport { useFocusGuards } from '@radix-ui/react-focus-guards';\nimport { FocusScope } from '@radix-ui/react-focus-scope';\nimport { useId } from '@radix-ui/react-id';\nimport * as PopperPrimitive from '@radix-ui/react-popper';\nimport { createPopperScope } from '@radix-ui/react-popper';\nimport { Portal as PortalPrimitive } from '@radix-ui/react-portal';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { Slot } from '@radix-ui/react-slot';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { usePrevious } from '@radix-ui/react-use-previous';\nimport { VisuallyHidden } from '@radix-ui/react-visually-hidden';\nimport { hideOthers } from 'aria-hidden';\nimport { RemoveScroll } from 'react-remove-scroll';\n\nimport type * as Radix from '@radix-ui/react-primitive';\nimport type { Scope } from '@radix-ui/react-context';\n\ntype Direction = 'ltr' | 'rtl';\n\nconst OPEN_KEYS = [' ', 'Enter', 'ArrowUp', 'ArrowDown'];\nconst SELECTION_KEYS = [' ', 'Enter'];\n\n/* -------------------------------------------------------------------------------------------------\n * Select\n * -----------------------------------------------------------------------------------------------*/\n\nconst SELECT_NAME = 'Select';\n\ntype ItemData = { value: string; disabled: boolean; textValue: string };\nconst [Collection, useCollection, createCollectionScope] = createCollection<\n SelectItemElement,\n ItemData\n>(SELECT_NAME);\n\ntype ScopedProps<P> = P & { __scopeSelect?: Scope };\nconst [createSelectContext, createSelectScope] = createContextScope(SELECT_NAME, [\n createCollectionScope,\n createPopperScope,\n]);\nconst usePopperScope = createPopperScope();\n\ntype SelectContextValue = {\n trigger: SelectTriggerElement | null;\n onTriggerChange(node: SelectTriggerElement | null): void;\n valueNode: SelectValueElement | null;\n onValueNodeChange(node: SelectValueElement): void;\n valueNodeHasChildren: boolean;\n onValueNodeHasChildrenChange(hasChildren: boolean): void;\n contentId: string;\n value?: string;\n onValueChange(value: string): void;\n open: boolean;\n required?: boolean;\n onOpenChange(open: boolean): void;\n dir: SelectProps['dir'];\n triggerPointerDownPosRef: React.MutableRefObject<{ x: number; y: number } | null>;\n disabled?: boolean;\n};\n\nconst [SelectProvider, useSelectContext] = createSelectContext<SelectContextValue>(SELECT_NAME);\n\ntype NativeOption = React.ReactElement<React.ComponentProps<'option'>>;\n\ntype SelectNativeOptionsContextValue = {\n onNativeOptionAdd(option: NativeOption): void;\n onNativeOptionRemove(option: NativeOption): void;\n};\nconst [SelectNativeOptionsProvider, useSelectNativeOptionsContext] =\n createSelectContext<SelectNativeOptionsContextValue>(SELECT_NAME);\n\ninterface SelectProps {\n children?: React.ReactNode;\n value?: string;\n defaultValue?: string;\n onValueChange?(value: string): void;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?(open: boolean): void;\n dir?: Direction;\n name?: string;\n autoComplete?: string;\n disabled?: boolean;\n required?: boolean;\n}\n\nconst Select: React.FC<SelectProps> = (props: ScopedProps<SelectProps>) => {\n const {\n __scopeSelect,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n value: valueProp,\n defaultValue,\n onValueChange,\n dir,\n name,\n autoComplete,\n disabled,\n required,\n } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const [trigger, setTrigger] = React.useState<SelectTriggerElement | null>(null);\n const [valueNode, setValueNode] = React.useState<SelectValueElement | null>(null);\n const [valueNodeHasChildren, setValueNodeHasChildren] = React.useState(false);\n const direction = useDirection(dir);\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n });\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue,\n onChange: onValueChange,\n });\n const triggerPointerDownPosRef = React.useRef<{ x: number; y: number } | null>(null);\n\n // We set this to true by default so that events bubble to forms without JS (SSR)\n const isFormControl = trigger ? Boolean(trigger.closest('form')) : true;\n const [nativeOptionsSet, setNativeOptionsSet] = React.useState(new Set<NativeOption>());\n\n // The native `select` only associates the correct default value if the corresponding\n // `option` is rendered as a child **at the same time** as itself.\n // Because it might take a few renders for our items to gather the information to build\n // the native `option`(s), we generate a key on the `select` to make sure React re-builds it\n // each time the options change.\n const nativeSelectKey = Array.from(nativeOptionsSet)\n .map((option) => option.props.value)\n .join(';');\n\n return (\n <PopperPrimitive.Root {...popperScope}>\n <SelectProvider\n required={required}\n scope={__scopeSelect}\n trigger={trigger}\n onTriggerChange={setTrigger}\n valueNode={valueNode}\n onValueNodeChange={setValueNode}\n valueNodeHasChildren={valueNodeHasChildren}\n onValueNodeHasChildrenChange={setValueNodeHasChildren}\n contentId={useId()}\n value={value}\n onValueChange={setValue}\n open={open}\n onOpenChange={setOpen}\n dir={direction}\n triggerPointerDownPosRef={triggerPointerDownPosRef}\n disabled={disabled}\n >\n <Collection.Provider scope={__scopeSelect}>\n <SelectNativeOptionsProvider\n scope={props.__scopeSelect}\n onNativeOptionAdd={React.useCallback((option) => {\n setNativeOptionsSet((prev) => new Set(prev).add(option));\n }, [])}\n onNativeOptionRemove={React.useCallback((option) => {\n setNativeOptionsSet((prev) => {\n const optionsSet = new Set(prev);\n optionsSet.delete(option);\n return optionsSet;\n });\n }, [])}\n >\n {children}\n </SelectNativeOptionsProvider>\n </Collection.Provider>\n\n {isFormControl ? (\n <BubbleSelect\n key={nativeSelectKey}\n aria-hidden\n required={required}\n tabIndex={-1}\n name={name}\n autoComplete={autoComplete}\n value={value}\n // enable form autofill\n onChange={(event) => setValue(event.target.value)}\n disabled={disabled}\n >\n {value === undefined ? <option value=\"\" /> : null}\n {Array.from(nativeOptionsSet)}\n </BubbleSelect>\n ) : null}\n </SelectProvider>\n </PopperPrimitive.Root>\n );\n};\n\nSelect.displayName = SELECT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'SelectTrigger';\n\ntype SelectTriggerElement = React.ElementRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = Radix.ComponentPropsWithoutRef<typeof Primitive.button>;\ninterface SelectTriggerProps extends PrimitiveButtonProps {}\n\nconst SelectTrigger = React.forwardRef<SelectTriggerElement, SelectTriggerProps>(\n (props: ScopedProps<SelectTriggerProps>, forwardedRef) => {\n const { __scopeSelect, disabled = false, ...triggerProps } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const context = useSelectContext(TRIGGER_NAME, __scopeSelect);\n const isDisabled = context.disabled || disabled;\n const composedRefs = useComposedRefs(forwardedRef, context.onTriggerChange);\n const getItems = useCollection(__scopeSelect);\n\n const [searchRef, handleTypeaheadSearch, resetTypeahead] = useTypeaheadSearch((search) => {\n const enabledItems = getItems().filter((item) => !item.disabled);\n const currentItem = enabledItems.find((item) => item.value === context.value);\n const nextItem = findNextItem(enabledItems, search, currentItem);\n if (nextItem !== undefined) {\n context.onValueChange(nextItem.value);\n }\n });\n\n const handleOpen = () => {\n if (!isDisabled) {\n context.onOpenChange(true);\n // reset typeahead when we open\n resetTypeahead();\n }\n };\n\n return (\n <PopperPrimitive.Anchor asChild {...popperScope}>\n <Primitive.button\n type=\"button\"\n role=\"combobox\"\n aria-controls={context.contentId}\n aria-expanded={context.open}\n aria-required={context.required}\n aria-autocomplete=\"none\"\n dir={context.dir}\n data-state={context.open ? 'open' : 'closed'}\n disabled={isDisabled}\n data-disabled={isDisabled ? '' : undefined}\n data-placeholder={shouldShowPlaceholder(context.value) ? '' : undefined}\n {...triggerProps}\n ref={composedRefs}\n // Enable compatibility with native label or custom `Label` \"click\" for Safari:\n onClick={composeEventHandlers(triggerProps.onClick, (event) => {\n // Whilst browsers generally have no issue focusing the trigger when clicking\n // on a label, Safari seems to struggle with the fact that there's no `onClick`.\n // We force `focus` in this case. Note: this doesn't create any other side-effect\n // because we are preventing default in `onPointerDown` so effectively\n // this only runs for a label \"click\"\n event.currentTarget.focus();\n })}\n onPointerDown={composeEventHandlers(triggerProps.onPointerDown, (event) => {\n // prevent implicit pointer capture\n // https://www.w3.org/TR/pointerevents3/#implicit-pointer-capture\n const target = event.target as HTMLElement;\n if (target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n }\n\n // only call handler if it's the left button (mousedown gets triggered by all mouse buttons)\n // but not when the control key is pressed (avoiding MacOS right click)\n if (event.button === 0 && event.ctrlKey === false) {\n handleOpen();\n context.triggerPointerDownPosRef.current = {\n x: Math.round(event.pageX),\n y: Math.round(event.pageY),\n };\n // prevent trigger from stealing focus from the active item after opening.\n event.preventDefault();\n }\n })}\n onKeyDown={composeEventHandlers(triggerProps.onKeyDown, (event) => {\n const isTypingAhead = searchRef.current !== '';\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);\n if (isTypingAhead && event.key === ' ') return;\n if (OPEN_KEYS.includes(event.key)) {\n handleOpen();\n event.preventDefault();\n }\n })}\n />\n </PopperPrimitive.Anchor>\n );\n }\n);\n\nSelectTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectValue\n * -----------------------------------------------------------------------------------------------*/\n\nconst VALUE_NAME = 'SelectValue';\n\ntype SelectValueElement = React.ElementRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = Radix.ComponentPropsWithoutRef<typeof Primitive.span>;\ninterface SelectValueProps extends Omit<PrimitiveSpanProps, 'placeholder'> {\n placeholder?: React.ReactNode;\n}\n\nconst SelectValue = React.forwardRef<SelectValueElement, SelectValueProps>(\n (props: ScopedProps<SelectValueProps>, forwardedRef) => {\n // We ignore `className` and `style` as this part shouldn't be styled.\n const { __scopeSelect, className, style, children, placeholder = '', ...valueProps } = props;\n const context = useSelectContext(VALUE_NAME, __scopeSelect);\n const { onValueNodeHasChildrenChange } = context;\n const hasChildren = children !== undefined;\n const composedRefs = useComposedRefs(forwardedRef, context.onValueNodeChange);\n\n useLayoutEffect(() => {\n onValueNodeHasChildrenChange(hasChildren);\n }, [onValueNodeHasChildrenChange, hasChildren]);\n\n return (\n <Primitive.span\n {...valueProps}\n ref={composedRefs}\n // we don't want events from the portalled `SelectValue` children to bubble\n // through the item they came from\n style={{ pointerEvents: 'none' }}\n >\n {shouldShowPlaceholder(context.value) ? <>{placeholder}</> : children}\n </Primitive.span>\n );\n }\n);\n\nSelectValue.displayName = VALUE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectIcon\n * -----------------------------------------------------------------------------------------------*/\n\nconst ICON_NAME = 'SelectIcon';\n\ntype SelectIconElement = React.ElementRef<typeof Primitive.span>;\ninterface SelectIconProps extends PrimitiveSpanProps {}\n\nconst SelectIcon = React.forwardRef<SelectIconElement, SelectIconProps>(\n (props: ScopedProps<SelectIconProps>, forwardedRef) => {\n const { __scopeSelect, children, ...iconProps } = props;\n return (\n <Primitive.span aria-hidden {...iconProps} ref={forwardedRef}>\n {children || '▼'}\n </Primitive.span>\n );\n }\n);\n\nSelectIcon.displayName = ICON_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'SelectPortal';\n\ntype PortalProps = React.ComponentPropsWithoutRef<typeof PortalPrimitive>;\ninterface SelectPortalProps {\n children?: React.ReactNode;\n /**\n * Specify a container element to portal the content into.\n */\n container?: PortalProps['container'];\n}\n\nconst SelectPortal: React.FC<SelectPortalProps> = (props: ScopedProps<SelectPortalProps>) => {\n return <PortalPrimitive asChild {...props} />;\n};\n\nSelectPortal.displayName = PORTAL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'SelectContent';\n\ntype SelectContentElement = SelectContentImplElement;\ninterface SelectContentProps extends SelectContentImplProps {}\n\nconst SelectContent = React.forwardRef<SelectContentElement, SelectContentProps>(\n (props: ScopedProps<SelectContentProps>, forwardedRef) => {\n const context = useSelectContext(CONTENT_NAME, props.__scopeSelect);\n const [fragment, setFragment] = React.useState<DocumentFragment>();\n\n // setting the fragment in `useLayoutEffect` as `DocumentFragment` doesn't exist on the server\n useLayoutEffect(() => {\n setFragment(new DocumentFragment());\n }, []);\n\n if (!context.open) {\n const frag = fragment as Element | undefined;\n return frag\n ? ReactDOM.createPortal(\n <SelectContentProvider scope={props.__scopeSelect}>\n <Collection.Slot scope={props.__scopeSelect}>\n <div>{props.children}</div>\n </Collection.Slot>\n </SelectContentProvider>,\n frag\n )\n : null;\n }\n\n return <SelectContentImpl {...props} ref={forwardedRef} />;\n }\n);\n\nSelectContent.displayName = CONTENT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectContentImpl\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_MARGIN = 10;\n\ntype SelectContentContextValue = {\n content?: SelectContentElement | null;\n viewport?: SelectViewportElement | null;\n onViewportChange?: (node: SelectViewportElement | null) => void;\n itemRefCallback?: (node: SelectItemElement | null, value: string, disabled: boolean) => void;\n selectedItem?: SelectItemElement | null;\n onItemLeave?: () => void;\n itemTextRefCallback?: (\n node: SelectItemTextElement | null,\n value: string,\n disabled: boolean\n ) => void;\n focusSelectedItem?: () => void;\n selectedItemText?: SelectItemTextElement | null;\n position?: SelectContentProps['position'];\n isPositioned?: boolean;\n searchRef?: React.RefObject<string>;\n};\n\nconst [SelectContentProvider, useSelectContentContext] =\n createSelectContext<SelectContentContextValue>(CONTENT_NAME);\n\nconst CONTENT_IMPL_NAME = 'SelectContentImpl';\n\ntype SelectContentImplElement = SelectPopperPositionElement | SelectItemAlignedPositionElement;\ntype DismissableLayerProps = React.ComponentPropsWithoutRef<typeof DismissableLayer>;\ntype FocusScopeProps = Radix.ComponentPropsWithoutRef<typeof FocusScope>;\n\ntype SelectPopperPrivateProps = { onPlaced?: PopperContentProps['onPlaced'] };\n\ninterface SelectContentImplProps\n extends Omit<SelectPopperPositionProps, keyof SelectPopperPrivateProps>,\n Omit<SelectItemAlignedPositionProps, keyof SelectPopperPrivateProps> {\n /**\n * Event handler called when auto-focusing on close.\n * Can be prevented.\n */\n onCloseAutoFocus?: FocusScopeProps['onUnmountAutoFocus'];\n /**\n * Event handler called when the escape key is down.\n * Can be prevented.\n */\n onEscapeKeyDown?: DismissableLayerProps['onEscapeKeyDown'];\n /**\n * Event handler called when the a `pointerdown` event happens outside of the `DismissableLayer`.\n * Can be prevented.\n */\n onPointerDownOutside?: DismissableLayerProps['onPointerDownOutside'];\n\n position?: 'item-aligned' | 'popper';\n}\n\nconst SelectContentImpl = React.forwardRef<SelectContentImplElement, SelectContentImplProps>(\n (props: ScopedProps<SelectContentImplProps>, forwardedRef) => {\n const {\n __scopeSelect,\n position = 'item-aligned',\n onCloseAutoFocus,\n onEscapeKeyDown,\n onPointerDownOutside,\n //\n // PopperContent props\n side,\n sideOffset,\n align,\n alignOffset,\n arrowPadding,\n collisionBoundary,\n collisionPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions,\n //\n ...contentProps\n } = props;\n const context = useSelectContext(CONTENT_NAME, __scopeSelect);\n const [content, setContent] = React.useState<SelectContentImplElement | null>(null);\n const [viewport, setViewport] = React.useState<SelectViewportElement | null>(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n const [selectedItem, setSelectedItem] = React.useState<SelectItemElement | null>(null);\n const [selectedItemText, setSelectedItemText] = React.useState<SelectItemTextElement | null>(\n null\n );\n const getItems = useCollection(__scopeSelect);\n const [isPositioned, setIsPositioned] = React.useState(false);\n const firstValidItemFoundRef = React.useRef(false);\n\n // aria-hide everything except the content (better supported equivalent to setting aria-modal)\n React.useEffect(() => {\n if (content) return hideOthers(content);\n }, [content]);\n\n // Make sure the whole tree has focus guards as our `Select` may be\n // the last element in the DOM (because of the `Portal`)\n useFocusGuards();\n\n const focusFirst = React.useCallback(\n (candidates: Array<HTMLElement | null>) => {\n const [firstItem, ...restItems] = getItems().map((item) => item.ref.current);\n const [lastItem] = restItems.slice(-1);\n\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n // if focus is already where we want to go, we don't want to keep going through the candidates\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate?.scrollIntoView({ block: 'nearest' });\n // viewport might have padding so scroll to its edges when focusing first/last items.\n if (candidate === firstItem && viewport) viewport.scrollTop = 0;\n if (candidate === lastItem && viewport) viewport.scrollTop = viewport.scrollHeight;\n candidate?.focus();\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n },\n [getItems, viewport]\n );\n\n const focusSelectedItem = React.useCallback(\n () => focusFirst([selectedItem, content]),\n [focusFirst, selectedItem, content]\n );\n\n // Since this is not dependent on layout, we want to ensure this runs at the same time as\n // other effects across components. Hence why we don't call `focusSelectedItem` inside `position`.\n React.useEffect(() => {\n if (isPositioned) {\n focusSelectedItem();\n }\n }, [isPositioned, focusSelectedItem]);\n\n // prevent selecting items on `pointerup` in some cases after opening from `pointerdown`\n // and close on `pointerup` outside.\n const { onOpenChange, triggerPointerDownPosRef } = context;\n React.useEffect(() => {\n if (content) {\n let pointerMoveDelta = { x: 0, y: 0 };\n\n const handlePointerMove = (event: PointerEvent) => {\n pointerMoveDelta = {\n x: Math.abs(Math.round(event.pageX) - (triggerPointerDownPosRef.current?.x ?? 0)),\n y: Math.abs(Math.round(event.pageY) - (triggerPointerDownPosRef.current?.y ?? 0)),\n };\n };\n const handlePointerUp = (event: PointerEvent) => {\n // If the pointer hasn't moved by a certain threshold then we prevent selecting item on `pointerup`.\n if (pointerMoveDelta.x <= 10 && pointerMoveDelta.y <= 10) {\n event.preventDefault();\n } else {\n // otherwise, if the event was outside the content, close.\n if (!content.contains(event.target as HTMLElement)) {\n onOpenChange(false);\n }\n }\n document.removeEventListener('pointermove', handlePointerMove);\n triggerPointerDownPosRef.current = null;\n };\n\n if (triggerPointerDownPosRef.current !== null) {\n document.addEventListener('pointermove', handlePointerMove);\n document.addEventListener('pointerup', handlePointerUp, { capture: true, once: true });\n }\n\n return () => {\n document.removeEventListener('pointermove', handlePointerMove);\n document.removeEventListener('pointerup', handlePointerUp, { capture: true });\n };\n }\n }, [content, onOpenChange, triggerPointerDownPosRef]);\n\n React.useEffect(() => {\n const close = () => onOpenChange(false);\n window.addEventListener('blur', close);\n window.addEventListener('resize', close);\n return () => {\n window.removeEventListener('blur', close);\n window.removeEventListener('resize', close);\n };\n }, [onOpenChange]);\n\n const [searchRef, handleTypeaheadSearch] = useTypeaheadSearch((search) => {\n const enabledItems = getItems().filter((item) => !item.disabled);\n const currentItem = enabledItems.find((item) => item.ref.current === document.activeElement);\n const nextItem = findNextItem(enabledItems, search, currentItem);\n if (nextItem) {\n /**\n * Imperative focus during keydown is risky so we prevent React's batching updates\n * to avoid potential bugs. See: https://github.com/facebook/react/issues/20332\n */\n setTimeout(() => (nextItem.ref.current as HTMLElement).focus());\n }\n });\n\n const itemRefCallback = React.useCallback(\n (node: SelectItemElement | null, value: string, disabled: boolean) => {\n const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;\n const isSelectedItem = context.value !== undefined && context.value === value;\n if (isSelectedItem || isFirstValidItem) {\n setSelectedItem(node);\n if (isFirstValidItem) firstValidItemFoundRef.current = true;\n }\n },\n [context.value]\n );\n const handleItemLeave = React.useCallback(() => content?.focus(), [content]);\n const itemTextRefCallback = React.useCallback(\n (node: SelectItemTextElement | null, value: string, disabled: boolean) => {\n const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;\n const isSelectedItem = context.value !== undefined && context.value === value;\n if (isSelectedItem || isFirstValidItem) {\n setSelectedItemText(node);\n }\n },\n [context.value]\n );\n\n const SelectPosition = position === 'popper' ? SelectPopperPosition : SelectItemAlignedPosition;\n\n // Silently ignore props that are not supported by `SelectItemAlignedPosition`\n const popperContentProps =\n SelectPosition === SelectPopperPosition\n ? {\n side,\n sideOffset,\n align,\n alignOffset,\n arrowPadding,\n collisionBoundary,\n collisionPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions,\n }\n : {};\n\n return (\n <SelectContentProvider\n scope={__scopeSelect}\n content={content}\n viewport={viewport}\n onViewportChange={setViewport}\n itemRefCallback={itemRefCallback}\n selectedItem={selectedItem}\n onItemLeave={handleItemLeave}\n itemTextRefCallback={itemTextRefCallback}\n focusSelectedItem={focusSelectedItem}\n selectedItemText={selectedItemText}\n position={position}\n isPositioned={isPositioned}\n searchRef={searchRef}\n >\n <RemoveScroll as={Slot} allowPinchZoom>\n <FocusScope\n asChild\n // we make sure we're not trapping once it's been closed\n // (closed !== unmounted when animating out)\n trapped={context.open}\n onMountAutoFocus={(event) => {\n // we prevent open autofocus because we manually focus the selected item\n event.preventDefault();\n }}\n onUnmountAutoFocus={composeEventHandlers(onCloseAutoFocus, (event) => {\n context.trigger?.focus({ preventScroll: true });\n event.preventDefault();\n })}\n >\n <DismissableLayer\n asChild\n disableOutsidePointerEvents\n onEscapeKeyDown={onEscapeKeyDown}\n onPointerDownOutside={onPointerDownOutside}\n // When focus is trapped, a focusout event may still happen.\n // We make sure we don't trigger our `onDismiss` in such case.\n onFocusOutside={(event) => event.preventDefault()}\n onDismiss={() => context.onOpenChange(false)}\n >\n <SelectPosition\n role=\"listbox\"\n id={context.contentId}\n data-state={context.open ? 'open' : 'closed'}\n dir={context.dir}\n onContextMenu={(event) => event.preventDefault()}\n {...contentProps}\n {...popperContentProps}\n onPlaced={() => setIsPositioned(true)}\n ref={composedRefs}\n style={{\n // flex layout so we can place the scroll buttons properly\n display: 'flex',\n flexDirection: 'column',\n // reset the outline by default as the content MAY get focused\n outline: 'none',\n ...contentProps.style,\n }}\n onKeyDown={composeEventHandlers(contentProps.onKeyDown, (event) => {\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n\n // select should not be navigated using tab key so we prevent it\n if (event.key === 'Tab') event.preventDefault();\n\n if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);\n\n if (['ArrowUp', 'ArrowDown', 'Home', 'End'].includes(event.key)) {\n const items = getItems().filter((item) => !item.disabled);\n let candidateNodes = items.map((item) => item.ref.current!);\n\n if (['ArrowUp', 'End'].includes(event.key)) {\n candidateNodes = candidateNodes.slice().reverse();\n }\n if (['ArrowUp', 'ArrowDown'].includes(event.key)) {\n const currentElement = event.target as SelectItemElement;\n const currentIndex = candidateNodes.indexOf(currentElement);\n candidateNodes = candidateNodes.slice(currentIndex + 1);\n }\n\n /**\n * Imperative focus during keydown is risky so we prevent React's batching updates\n * to avoid potential bugs. See: https://github.com/facebook/react/issues/20332\n */\n setTimeout(() => focusFirst(candidateNodes));\n\n event.preventDefault();\n }\n })}\n />\n </DismissableLayer>\n </FocusScope>\n </RemoveScroll>\n </SelectContentProvider>\n );\n }\n);\n\nSelectContentImpl.displayName = CONTENT_IMPL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectItemAlignedPosition\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_ALIGNED_POSITION_NAME = 'SelectItemAlignedPosition';\n\ntype SelectItemAlignedPositionElement = React.ElementRef<typeof Primitive.div>;\ninterface SelectItemAlignedPositionProps extends PrimitiveDivProps, SelectPopperPrivateProps {}\n\nconst SelectItemAlignedPosition = React.forwardRef<\n SelectItemAlignedPositionElement,\n SelectItemAlignedPositionProps\n>((props: ScopedProps<SelectItemAlignedPositionProps>, forwardedRef) => {\n const { __scopeSelect, onPlaced, ...popperProps } = props;\n const context = useSelectContext(CONTENT_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(CONTENT_NAME, __scopeSelect);\n const [contentWrapper, setContentWrapper] = React.useState<HTMLDivElement | null>(null);\n const [content, setContent] = React.useState<SelectItemAlignedPositionElement | null>(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n const getItems = useCollection(__scopeSelect);\n const shouldExpandOnScrollRef = React.useRef(false);\n const shouldRepositionRef = React.useRef(true);\n\n const { viewport, selectedItem, selectedItemText, focusSelectedItem } = contentContext;\n const position = React.useCallback(() => {\n if (\n context.trigger &&\n context.valueNode &&\n contentWrapper &&\n content &&\n viewport &&\n selectedItem &&\n selectedItemText\n ) {\n const triggerRect = context.trigger.getBoundingClientRect();\n\n // -----------------------------------------------------------------------------------------\n // Horizontal positioning\n // -----------------------------------------------------------------------------------------\n const contentRect = content.getBoundingClientRect();\n const valueNodeRect = context.valueNode.getBoundingClientRect();\n const itemTextRect = selectedItemText.getBoundingClientRect();\n\n if (context.dir !== 'rtl') {\n const itemTextOffset = itemTextRect.left - contentRect.left;\n const left = valueNodeRect.left - itemTextOffset;\n const leftDelta = triggerRect.left - left;\n const minContentWidth = triggerRect.width + leftDelta;\n const contentWidth = Math.max(minContentWidth, contentRect.width);\n const rightEdge = window.innerWidth - CONTENT_MARGIN;\n const clampedLeft = clamp(left, [CONTENT_MARGIN, rightEdge - contentWidth]);\n\n contentWrapper.style.minWidth = minContentWidth + 'px';\n contentWrapper.style.left = clampedLeft + 'px';\n } else {\n const itemTextOffset = contentRect.right - itemTextRect.right;\n const right = window.innerWidth - valueNodeRect.right - itemTextOffset;\n const rightDelta = window.innerWidth - triggerRect.right - right;\n const minContentWidth = triggerRect.width + rightDelta;\n const contentWidth = Math.max(minContentWidth, contentRect.width);\n const leftEdge = window.innerWidth - CONTENT_MARGIN;\n const clampedRight = clamp(right, [CONTENT_MARGIN, leftEdge - contentWidth]);\n\n contentWrapper.style.minWidth = minContentWidth + 'px';\n contentWrapper.style.right = clampedRight + 'px';\n }\n\n // -----------------------------------------------------------------------------------------\n // Vertical positioning\n // -----------------------------------------------------------------------------------------\n const items = getItems();\n const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;\n const itemsHeight = viewport.scrollHeight;\n\n const contentStyles = window.getComputedStyle(content);\n const contentBorderTopWidth = parseInt(contentStyles.borderTopWidth, 10);\n const contentPaddingTop = parseInt(contentStyles.paddingTop, 10);\n const contentBorderBottomWidth = parseInt(contentStyles.borderBottomWidth, 10);\n const contentPaddingBottom = parseInt(contentStyles.paddingBottom, 10);\n const fullContentHeight = contentBorderTopWidth + contentPaddingTop + itemsHeight + contentPaddingBottom + contentBorderBottomWidth; // prettier-ignore\n const minContentHeight = Math.min(selectedItem.offsetHeight * 5, fullContentHeight);\n\n const viewportStyles = window.getComputedStyle(viewport);\n const viewportPaddingTop = parseInt(viewportStyles.paddingTop, 10);\n const viewportPaddingBottom = parseInt(viewportStyles.paddingBottom, 10);\n\n const topEdgeToTriggerMiddle = triggerRect.top + triggerRect.height / 2 - CONTENT_MARGIN;\n const triggerMiddleToBottomEdge = availableHeight - topEdgeToTriggerMiddle;\n\n const selectedItemHalfHeight = selectedItem.offsetHeight / 2;\n const itemOffsetMiddle = selectedItem.offsetTop + selectedItemHalfHeight;\n const contentTopToItemMiddle = contentBorderTopWidth + contentPaddingTop + itemOffsetMiddle;\n const itemMiddleToContentBottom = fullContentHeight - contentTopToItemMiddle;\n\n const willAlignWithoutTopOverflow = contentTopToItemMiddle <= topEdgeToTriggerMiddle;\n\n if (willAlignWithoutTopOverflow) {\n const isLastItem = selectedItem === items[items.length - 1].ref.current;\n contentWrapper.style.bottom = 0 + 'px';\n const viewportOffsetBottom =\n content.clientHeight - viewport.offsetTop - viewport.offsetHeight;\n const clampedTriggerMiddleToBottomEdge = Math.max(\n triggerMiddleToBottomEdge,\n selectedItemHalfHeight +\n // viewport might have padding bottom, include it to avoid a scrollable viewport\n (isLastItem ? viewportPaddingBottom : 0) +\n viewportOffsetBottom +\n contentBorderBottomWidth\n );\n const height = contentTopToItemMiddle + clampedTriggerMiddleToBottomEdge;\n contentWrapper.style.height = height + 'px';\n } else {\n const isFirstItem = selectedItem === items[0].ref.current;\n contentWrapper.style.top = 0 + 'px';\n const clampedTopEdgeToTriggerMiddle = Math.max(\n topEdgeToTriggerMiddle,\n contentBorderTopWidth +\n viewport.offsetTop +\n // viewport might have padding top, include it to avoid a scrollable viewport\n (isFirstItem ? viewportPaddingTop : 0) +\n selectedItemHalfHeight\n );\n const height = clampedTopEdgeToTriggerMiddle + itemMiddleToContentBottom;\n contentWrapper.style.height = height + 'px';\n viewport.scrollTop = contentTopToItemMiddle - topEdgeToTriggerMiddle + viewport.offsetTop;\n }\n\n contentWrapper.style.margin = `${CONTENT_MARGIN}px 0`;\n contentWrapper.style.minHeight = minContentHeight + 'px';\n contentWrapper.style.maxHeight = availableHeight + 'px';\n // -----------------------------------------------------------------------------------------\n\n onPlaced?.();\n\n // we don't want the initial scroll position adjustment to trigger \"expand on scroll\"\n // so we explicitly turn it on only after they've registered.\n requestAnimationFrame(() => (shouldExpandOnScrollRef.current = true));\n }\n }, [\n getItems,\n context.trigger,\n context.valueNode,\n contentWrapper,\n content,\n viewport,\n selectedItem,\n selectedItemText,\n context.dir,\n onPlaced,\n ]);\n\n useLayoutEffect(() => position(), [position]);\n\n // copy z-index from content to wrapper\n const [contentZIndex, setContentZIndex] = React.useState<string>();\n useLayoutEffect(() => {\n if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n }, [content]);\n\n // When the viewport becomes scrollable at the top, the scroll up button will mount.\n // Because it is part of the normal flow, it will push down the viewport, thus throwing our\n // trigger => selectedItem alignment off by the amount the viewport was pushed down.\n // We wait for this to happen and then re-run the positining logic one more time to account for it.\n const handleScrollButtonChange = React.useCallback(\n (node: SelectScrollButtonImplElement | null) => {\n if (node && shouldRepositionRef.current === true) {\n position();\n focusSelectedItem?.();\n shouldRepositionRef.current = false;\n }\n },\n [position, focusSelectedItem]\n );\n\n return (\n <SelectViewportProvider\n scope={__scopeSelect}\n contentWrapper={contentWrapper}\n shouldExpandOnScrollRef={shouldExpandOnScrollRef}\n onScrollButtonChange={handleScrollButtonChange}\n >\n <div\n ref={setContentWrapper}\n style={{\n display: 'flex',\n flexDirection: 'column',\n position: 'fixed',\n zIndex: contentZIndex,\n }}\n >\n <Primitive.div\n {...popperProps}\n ref={composedRefs}\n style={{\n // When we get the height of the content, it includes borders. If we were to set\n // the height without having `boxSizing: 'border-box'` it would be too big.\n boxSizing: 'border-box',\n // We need to ensure the content doesn't get taller than the wrapper\n maxHeight: '100%',\n ...popperProps.style,\n }}\n />\n </div>\n </SelectViewportProvider>\n );\n});\n\nSelectItemAlignedPosition.displayName = ITEM_ALIGNED_POSITION_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectPopperPosition\n * -----------------------------------------------------------------------------------------------*/\n\nconst POPPER_POSITION_NAME = 'SelectPopperPosition';\n\ntype SelectPopperPositionElement = React.ElementRef<typeof PopperPrimitive.Content>;\ntype PopperContentProps = React.ComponentPropsWithoutRef<typeof PopperPrimitive.Content>;\ninterface SelectPopperPositionProps extends PopperContentProps, SelectPopperPrivateProps {}\n\nconst SelectPopperPosition = React.forwardRef<\n SelectPopperPositionElement,\n SelectPopperPositionProps\n>((props: ScopedProps<SelectPopperPositionProps>, forwardedRef) => {\n const {\n __scopeSelect,\n align = 'start',\n collisionPadding = CONTENT_MARGIN,\n ...popperProps\n } = props;\n const popperScope = usePopperScope(__scopeSelect);\n\n return (\n <PopperPrimitive.Content\n {...popperScope}\n {...popperProps}\n ref={forwardedRef}\n align={align}\n collisionPadding={collisionPadding}\n style={{\n // Ensure border-box for floating-ui calculations\n boxSizing: 'border-box',\n ...popperProps.style,\n // re-namespace exposed content custom properties\n ...{\n '--radix-select-content-transform-origin': 'var(--radix-popper-transform-origin)',\n '--radix-select-content-available-width': 'var(--radix-popper-available-width)',\n '--radix-select-content-available-height': 'var(--radix-popper-available-height)',\n '--radix-select-trigger-width': 'var(--radix-popper-anchor-width)',\n '--radix-select-trigger-height': 'var(--radix-popper-anchor-height)',\n },\n }}\n />\n );\n});\n\nSelectPopperPosition.displayName = POPPER_POSITION_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectViewport\n * -----------------------------------------------------------------------------------------------*/\n\ntype SelectViewportContextValue = {\n contentWrapper?: HTMLDivElement | null;\n shouldExpandOnScrollRef?: React.RefObject<boolean>;\n onScrollButtonChange?: (node: SelectScrollButtonImplElement | null) => void;\n};\n\nconst [SelectViewportProvider, useSelectViewportContext] =\n createSelectContext<SelectViewportContextValue>(CONTENT_NAME, {});\n\nconst VIEWPORT_NAME = 'SelectViewport';\n\ntype SelectViewportElement = React.ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = Radix.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface SelectViewportProps extends PrimitiveDivProps {}\n\nconst SelectViewport = React.forwardRef<SelectViewportElement, SelectViewportProps>(\n (props: ScopedProps<SelectViewportProps>, forwardedRef) => {\n const { __scopeSelect, ...viewportProps } = props;\n const contentContext = useSelectContentContext(VIEWPORT_NAME, __scopeSelect);\n const viewportContext = useSelectViewportContext(VIEWPORT_NAME, __scopeSelect);\n const composedRefs = useComposedRefs(forwardedRef, contentContext.onViewportChange);\n const prevScrollTopRef = React.useRef(0);\n return (\n <>\n {/* Hide scrollbars cross-browser and enable momentum scroll for touch devices */}\n <style\n dangerouslySetInnerHTML={{\n __html: `[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}`,\n }}\n />\n <Collection.Slot scope={__scopeSelect}>\n <Primitive.div\n data-radix-select-viewport=\"\"\n role=\"presentation\"\n {...viewportProps}\n ref={composedRefs}\n style={{\n // we use position: 'relative' here on the `viewport` so that when we call\n // `selectedItem.offsetTop` in calculations, the offset is relative to the viewport\n // (independent of the scrollUpButton).\n position: 'relative',\n flex: 1,\n overflow: 'auto',\n ...viewportProps.style,\n }}\n onScroll={composeEventHandlers(viewportProps.onScroll, (event) => {\n const viewport = event.currentTarget;\n const { contentWrapper, shouldExpandOnScrollRef } = viewportContext;\n if (shouldExpandOnScrollRef?.current && contentWrapper) {\n const scrolledBy = Math.abs(prevScrollTopRef.current - viewport.scrollTop);\n if (scrolledBy > 0) {\n const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;\n const cssMinHeight = parseFloat(contentWrapper.style.minHeight);\n const cssHeight = parseFloat(contentWrapper.style.height);\n const prevHeight = Math.max(cssMinHeight, cssHeight);\n\n if (prevHeight < availableHeight) {\n const nextHeight = prevHeight + scrolledBy;\n const clampedNextHeight = Math.min(availableHeight, nextHeight);\n const heightDiff = nextHeight - clampedNextHeight;\n\n contentWrapper.style.height = clampedNextHeight + 'px';\n if (contentWrapper.style.bottom === '0px') {\n viewport.scrollTop = heightDiff > 0 ? heightDiff : 0;\n // ensure the content stays pinned to the bottom\n contentWrapper.style.justifyContent = 'flex-end';\n }\n }\n }\n }\n prevScrollTopRef.current = viewport.scrollTop;\n })}\n />\n </Collection.Slot>\n </>\n );\n }\n);\n\nSelectViewport.displayName = VIEWPORT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectGroup\n * -----------------------------------------------------------------------------------------------*/\n\nconst GROUP_NAME = 'SelectGroup';\n\ntype SelectGroupContextValue = { id: string };\n\nconst [SelectGroupContextProvider, useSelectGroupContext] =\n createSelectContext<SelectGroupContextValue>(GROUP_NAME);\n\ntype SelectGroupElement = React.ElementRef<typeof Primitive.div>;\ninterface SelectGroupProps extends PrimitiveDivProps {}\n\nconst SelectGroup = React.forwardRef<SelectGroupElement, SelectGroupProps>(\n (props: ScopedProps<SelectGroupProps>, forwardedRef) => {\n const { __scopeSelect, ...groupProps } = props;\n const groupId = useId();\n return (\n <SelectGroupContextProvider scope={__scopeSelect} id={groupId}>\n <Primitive.div role=\"group\" aria-labelledby={groupId} {...groupProps} ref={forwardedRef} />\n </SelectGroupContextProvider>\n );\n }\n);\n\nSelectGroup.displayName = GROUP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectLabel\n * -----------------------------------------------------------------------------------------------*/\n\nconst LABEL_NAME = 'SelectLabel';\n\ntype SelectLabelElement = React.ElementRef<typeof Primitive.div>;\ninterface SelectLabelProps extends PrimitiveDivProps {}\n\nconst SelectLabel = React.forwardRef<SelectLabelElement, SelectLabelProps>(\n (props: ScopedProps<SelectLabelProps>, forwardedRef) => {\n const { __scopeSelect, ...labelProps } = props;\n const groupContext = useSelectGroupContext(LABEL_NAME, __scopeSelect);\n return <Primitive.div id={groupContext.id} {...labelProps} ref={forwardedRef} />;\n }\n);\n\nSelectLabel.displayName = LABEL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_NAME = 'SelectItem';\n\ntype SelectItemContextValue = {\n value: string;\n disabled: boolean;\n textId: string;\n isSelected: boolean;\n onItemTextChange(node: SelectItemTextElement | null): void;\n};\n\nconst [SelectItemContextProvider, useSelectItemContext] =\n createSelectContext<SelectItemContextValue>(ITEM_NAME);\n\ntype SelectItemElement = React.ElementRef<typeof Primitive.div>;\ninterface SelectItemProps extends PrimitiveDivProps {\n value: string;\n disabled?: boolean;\n textValue?: string;\n}\n\nconst SelectItem = React.forwardRef<SelectItemElement, SelectItemProps>(\n (props: ScopedProps<SelectItemProps>, forwardedRef) => {\n const {\n __scopeSelect,\n value,\n disabled = false,\n textValue: textValueProp,\n ...itemProps\n } = props;\n const context = useSelectContext(ITEM_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ITEM_NAME, __scopeSelect);\n const isSelected = context.value === value;\n const [textValue, setTextValue] = React.useState(textValueProp ?? '');\n const [isFocused, setIsFocused] = React.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, (node) =>\n contentContext.itemRefCallback?.(node, value, disabled)\n );\n const textId = useId();\n\n const handleSelect = () => {\n if (!disabled) {\n context.onValueChange(value);\n context.onOpenChange(false);\n }\n };\n\n if (value === '') {\n throw new Error(\n 'A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.'\n );\n }\n\n return (\n <SelectItemContextProvider\n scope={__scopeSelect}\n value={value}\n disabled={disabled}\n textId={textId}\n isSelected={isSelected}\n onItemTextChange={React.useCallback((node) => {\n setTextValue((prevTextValue) => prevTextValue || (node?.textContent ?? '').trim());\n }, [])}\n >\n <Collection.ItemSlot\n scope={__scopeSelect}\n value={value}\n disabled={disabled}\n textValue={textValue}\n >\n <Primitive.div\n role=\"option\"\n aria-labelledby={textId}\n data-highlighted={isFocused ? '' : undefined}\n // `isFocused` caveat fixes stuttering in VoiceOver\n aria-selected={isSelected && isFocused}\n data-state={isSelected ? 'checked' : 'unchecked'}\n aria-disabled={disabled || undefined}\n data-disabled={disabled ? '' : undefined}\n tabIndex={disabled ? undefined : -1}\n {...itemProps}\n ref={composedRefs}\n onFocus={composeEventHandlers(itemProps.onFocus, () => setIsFocused(true))}\n onBlur={composeEventHandlers(itemProps.onBlur, () => setIsFocused(false))}\n onPointerUp={composeEventHandlers(itemProps.onPointerUp, handleSelect)}\n onPointerMove={composeEventHandlers(itemProps.onPointerMove, (event) => {\n if (disabled) {\n contentContext.onItemLeave?.();\n } else {\n // even though safari doesn't support this option, it's acceptable\n // as it only means it might scroll a few pixels when using the pointer.\n event.currentTarget.focus({ preventScroll: true });\n }\n })}\n onPointerLeave={composeEventHandlers(itemProps.onPointerLeave, (event) => {\n if (event.currentTarget === document.activeElement) {\n contentContext.onItemLeave?.();\n }\n })}\n onKeyDown={composeEventHandlers(itemProps.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef?.current !== '';\n if (isTypingAhead && event.key === ' ') return;\n if (SELECTION_KEYS.includes(event.key)) handleSelect();\n // prevent page scroll if using the space key to select an item\n if (event.key === ' ') event.preventDefault();\n })}\n />\n </Collection.ItemSlot>\n </SelectItemContextProvider>\n );\n }\n);\n\nSelectItem.displayName = ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectItemText\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_TEXT_NAME = 'SelectItemText';\n\ntype SelectItemTextElement = React.ElementRef<typeof Primitive.span>;\ninterface SelectItemTextProps extends PrimitiveSpanProps {}\n\nconst SelectItemText = React.forwardRef<SelectItemTextElement, SelectItemTextProps>(\n (props: ScopedProps<SelectItemTextProps>, forwardedRef) => {\n // We ignore `className` and `style` as this part shouldn't be styled.\n const { __scopeSelect, className, style, ...itemTextProps } = props;\n const context = useSelectContext(ITEM_TEXT_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ITEM_TEXT_NAME, __scopeSelect);\n const itemContext = useSelectItemContext(ITEM_TEXT_NAME, __scopeSelect);\n const nativeOptionsContext = useSelectNativeOptionsContext(ITEM_TEXT_NAME, __scopeSelect);\n const [itemTextNode, setItemTextNode] = React.useState<SelectItemTextElement | null>(null);\n const composedRefs = useComposedRefs(\n forwardedRef,\n (node) => setItemTextNode(node),\n itemContext.onItemTextChange,\n (node) => contentContext.itemTextRefCallback?.(node, itemContext.value, itemContext.disabled)\n );\n\n const textContent = itemTextNode?.textContent;\n const nativeOption = React.useMemo(\n () => (\n <option key={itemContext.value} value={itemContext.value} disabled={itemContext.disabled}>\n {textContent}\n </option>\n ),\n [itemContext.disabled, itemContext.value, textContent]\n );\n\n const { onNativeOptionAdd, onNativeOptionRemove } = nativeOptionsContext;\n useLayoutEffect(() => {\n onNativeOptionAdd(nativeOption);\n return () => onNativeOptionRemove(nativeOption);\n }, [onNativeOptionAdd, onNativeOptionRemove, nativeOption]);\n\n return (\n <>\n <Primitive.span id={itemContext.textId} {...itemTextProps} ref={composedRefs} />\n\n {/* Portal the select item text into the trigger value node */}\n {itemContext.isSelected && context.valueNode && !context.valueNodeHasChildren\n ? ReactDOM.createPortal(itemTextProps.children, context.valueNode)\n : null}\n </>\n );\n }\n);\n\nSelectItemText.displayName = ITEM_TEXT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectItemIndicator\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_INDICATOR_NAME = 'SelectItemIndicator';\n\ntype SelectItemIndicatorElement = React.ElementRef<typeof Primitive.span>;\ninterface SelectItemIndicatorProps extends PrimitiveSpanProps {}\n\nconst SelectItemIndicator = React.forwardRef<SelectItemIndicatorElement, SelectItemIndicatorProps>(\n (props: ScopedProps<SelectItemIndicatorProps>, forwardedRef) => {\n const { __scopeSelect, ...itemIndicatorProps } = props;\n const itemContext = useSelectItemContext(ITEM_INDICATOR_NAME, __scopeSelect);\n return itemContext.isSelected ? (\n <Primitive.span aria-hidden {...itemIndicatorProps} ref={forwardedRef} />\n ) : null;\n }\n);\n\nSelectItemIndicator.displayName = ITEM_INDICATOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectScrollUpButton\n * -----------------------------------------------------------------------------------------------*/\n\nconst SCROLL_UP_BUTTON_NAME = 'SelectScrollUpButton';\n\ntype SelectScrollUpButtonElement = SelectScrollButtonImplElement;\ninterface SelectScrollUpButtonProps extends Omit<SelectScrollButtonImplProps, 'onAutoScroll'> {}\n\nconst SelectScrollUpButton = React.forwardRef<\n SelectScrollUpButtonElement,\n SelectScrollUpButtonProps\n>((props: ScopedProps<SelectScrollUpButtonProps>, forwardedRef) => {\n const contentContext = useSelectContentContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);\n const viewportContext = useSelectViewportContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);\n const [canScrollUp, setCanScrollUp] = React.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);\n\n useLayoutEffect(() => {\n if (contentContext.viewport && contentContext.isPositioned) {\n const viewport = contentContext.viewport;\n function handleScroll() {\n const canScrollUp = viewport.scrollTop > 0;\n setCanScrollUp(canScrollUp);\n }\n handleScroll();\n viewport.addEventListener('scroll', handleScroll);\n return () => viewport.removeEventListener('scroll', handleScroll);\n }\n }, [contentContext.viewport, contentContext.isPositioned]);\n\n return canScrollUp ? (\n <SelectScrollButtonImpl\n {...props}\n ref={composedRefs}\n onAutoScroll={() => {\n const { viewport, selectedItem } = contentContext;\n if (viewport && selectedItem) {\n viewport.scrollTop = viewport.scrollTop - selectedItem.offsetHeight;\n }\n }}\n />\n ) : null;\n});\n\nSelectScrollUpButton.displayName = SCROLL_UP_BUTTON_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectScrollDownButton\n * -----------------------------------------------------------------------------------------------*/\n\nconst SCROLL_DOWN_BUTTON_NAME = 'SelectScrollDownButton';\n\ntype SelectScrollDownButtonElement = SelectScrollButtonImplElement;\ninterface SelectScrollDownButtonProps extends Omit<SelectScrollButtonImplProps, 'onAutoScroll'> {}\n\nconst SelectScrollDownButton = React.forwardRef<\n SelectScrollDownButtonElement,\n SelectScrollDownButtonProps\n>((props: ScopedProps<SelectScrollDownButtonProps>, forwardedRef) => {\n const contentContext = useSelectContentContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);\n const viewportContext = useSelectViewportContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);\n const [canScrollDown, setCanScrollDown] = React.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);\n\n useLayoutEffect(() => {\n if (contentContext.viewport && contentContext.isPositioned) {\n const viewport = contentContext.viewport;\n function handleScroll() {\n const maxScroll = viewport.scrollHeight - viewport.clientHeight;\n // we use Math.ceil here because if the UI is zoomed-in\n // `scrollTop` is not always reported as an integer\n const canScrollDown = Math.ceil(viewport.scrollTop) < maxScroll;\n setCanScrollDown(canScrollDown);\n }\n handleScroll();\n viewport.addEventListener('scroll', handleScroll);\n return () => viewport.removeEventListener('scroll', handleScroll);\n }\n }, [contentContext.viewport, contentContext.isPositioned]);\n\n return canScrollDown ? (\n <SelectScrollButtonImpl\n {...props}\n ref={composedRefs}\n onAutoScroll={() => {\n const { viewport, selectedItem } = contentContext;\n if (viewport && selectedItem) {\n viewport.scrollTop = viewport.scrollTop + selectedItem.offsetHeight;\n }\n }}\n />\n ) : null;\n});\n\nSelectScrollDownButton.displayName = SCROLL_DOWN_BUTTON_NAME;\n\ntype SelectScrollButtonImplElement = React.ElementRef<typeof Primitive.div>;\ninterface SelectScrollButtonImplProps extends PrimitiveDivProps {\n onAutoScroll(): void;\n}\n\nconst SelectScrollButtonImpl = React.forwardRef<\n SelectScrollButtonImplElement,\n SelectScrollButtonImplProps\n>((props: ScopedProps<SelectScrollButtonImplProps>, forwardedRef) => {\n const { __scopeSelect, onAutoScroll, ...scrollIndicatorProps } = props;\n const contentContext = useSelectContentContext('SelectScrollButton', __scopeSelect);\n const autoScrollTimerRef = React.useRef<number | null>(null);\n const getItems = useCollection(__scopeSelect);\n\n const clearAutoScrollTimer = React.useCallback(() => {\n if (autoScrollTimerRef.current !== null) {\n window.clearInterval(autoScrollTimerRef.current);\n autoScrollTimerRef.current = null;\n }\n }, []);\n\n React.useEffect(() => {\n return () => clearAutoScrollTimer();\n }, [clearAutoScrollTimer]);\n\n // When the viewport becomes scrollable on either side, the relevant scroll button will mount.\n // Because it is part of the normal flow, it will push down (top button) or shrink (bottom button)\n // the viewport, potentially causing the active item to now be partially out of view.\n // We re-run the `scrollIntoView` logic to make sure it stays within the viewport.\n useLayoutEffect(() => {\n const activeItem = getItems().find((item) => item.ref.current === document.activeElement);\n activeItem?.ref.current?.scrollIntoView({ block: 'nearest' });\n }, [getItems]);\n\n return (\n <Primitive.div\n aria-hidden\n {...scrollIndicatorProps}\n ref={forwardedRef}\n style={{ flexShrink: 0, ...scrollIndicatorProps.style }}\n onPointerDown={composeEventHandlers(scrollIndicatorProps.onPointerDown, () => {\n if (autoScrollTimerRef.current === null) {\n autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);\n }\n })}\n onPointerMove={composeEventHandlers(scrollIndicatorProps.onPointerMove, () => {\n contentContext.onItemLeave?.();\n if (autoScrollTimerRef.current === null) {\n autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);\n }\n })}\n onPointerLeave={composeEventHandlers(scrollIndicatorProps.onPointerLeave, () => {\n clearAutoScrollTimer();\n })}\n />\n );\n});\n\n/* -------------------------------------------------------------------------------------------------\n * SelectSeparator\n * -----------------------------------------------------------------------------------------------*/\n\nconst SEPARATOR_NAME = 'SelectSeparator';\n\ntype SelectSeparatorElement = React.ElementRef<typeof Primitive.div>;\ninterface SelectSeparatorProps extends PrimitiveDivProps {}\n\nconst SelectSeparator = React.forwardRef<SelectSeparatorElement, SelectSeparatorProps>(\n (props: ScopedProps<SelectSeparatorProps>, forwardedRef) => {\n const { __scopeSelect, ...separatorProps } = props;\n return <Primitive.div aria-hidden {...separatorProps} ref={forwardedRef} />;\n }\n);\n\nSelectSeparator.displayName = SEPARATOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectArrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst ARROW_NAME = 'SelectArrow';\n\ntype SelectArrowElement = React.ElementRef<typeof PopperPrimitive.Arrow>;\ntype PopperArrowProps = Radix.ComponentPropsWithoutRef<typeof PopperPrimitive.Arrow>;\ninterface SelectArrowProps extends PopperArrowProps {}\n\nconst SelectArrow = React.forwardRef<SelectArrowElement, SelectArrowProps>(\n (props: ScopedProps<SelectArrowProps>, forwardedRef) => {\n const { __scopeSelect, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const context = useSelectContext(ARROW_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ARROW_NAME, __scopeSelect);\n return context.open && contentContext.position === 'popper' ? (\n <PopperPrimitive.Arrow {...popperScope} {...arrowProps} ref={forwardedRef} />\n ) : null;\n }\n);\n\nSelectArrow.displayName = ARROW_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction shouldShowPlaceholder(value?: string) {\n return value === '' || value === undefined;\n}\n\nconst BubbleSelect = React.forwardRef<HTMLSelectElement, React.ComponentPropsWithoutRef<'select'>>(\n (props, forwardedRef) => {\n const { value, ...selectProps } = props;\n const ref = React.useRef<HTMLSelectElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const prevValue = usePrevious(value);\n\n // Bubble value change to parents (e.g form change event)\n React.useEffect(() => {\n const select = ref.current!;\n const selectProto = window.HTMLSelectElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n selectProto,\n 'value'\n ) as PropertyDescriptor;\n const setValue = descriptor.set;\n if (prevValue !== value && setValue) {\n const event = new Event('change', { bubbles: true });\n setValue.call(select, value);\n select.dispatchEvent(event);\n }\n }, [prevValue, value]);\n\n /**\n * We purposefully use a `select` here to support form autofill as much\n * as possible.\n *\n * We purposefully do not add the `value` attribute here to allow the value\n * to be set programatically and bubble to any parent form `onChange` event.\n * Adding the `value` will cause React to consider the programatic\n * dispatch a duplicate and it will get swallowed.\n *\n * We use `VisuallyHidden` rather than `display: \"none\"` because Safari autofill\n * won't work otherwise.\n */\n return (\n <VisuallyHidden asChild>\n <select {...selectProps} ref={composedRefs} defaultValue={value} />\n </VisuallyHidden>\n );\n }\n);\n\nBubbleSelect.displayName = 'BubbleSelect';\n\nfunction useTypeaheadSearch(onSearchChange: (search: string) => void) {\n const handleSearchChange = useCallbackRef(onSearchChange);\n const searchRef = React.useRef('');\n const timerRef = React.useRef(0);\n\n const handleTypeaheadSearch = React.useCallback(\n (key: string) => {\n const search = searchRef.current + key;\n handleSearchChange(search);\n\n (function updateSearch(value: string) {\n searchRef.current = value;\n window.clearTimeout(timerRef.current);\n // Reset `searchRef` 1 second after it was last updated\n if (value !== '') timerRef.current = window.setTimeout(() => updateSearch(''), 1000);\n })(search);\n },\n [handleSearchChange]\n );\n\n const resetTypeahead = React.useCallback(() => {\n searchRef.current = '';\n window.clearTimeout(timerRef.current);\n }, []);\n\n React.useEffect(() => {\n return () => window.clearTimeout(timerRef.current);\n }, []);\n\n return [searchRef, handleTypeaheadSearch, resetTypeahead] as const;\n}\n\n/**\n * This is the \"meat\" of the typeahead matching logic. It takes in a list of items,\n * the search and the current item, and returns the next item (or `undefined`).\n *\n * We normalize the search because if a user has repeatedly pressed a character,\n * we want the exact same behavior as if we only had that one character\n * (ie. cycle through items starting with that character)\n *\n * We also reorder the items by wrapping the array around the current item.\n * This is so we always look forward from the current item, and picking the first\n * item will always be the correct one.\n *\n * Finally, if the normalized search is exactly one character, we exclude the\n * current item from the values because otherwise it would be the first to match always\n * and focus would never move. This is as opposed to the regular case, where we\n * don't want focus to move if the current item still matches.\n */\nfunction findNextItem<T extends { textValue: string }>(\n items: T[],\n search: string,\n currentItem?: T\n) {\n const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);\n const normalizedSearch = isRepeated ? search[0] : search;\n const currentItemIndex = currentItem ? items.indexOf(currentItem) : -1;\n let wrappedItems = wrapArray(items, Math.max(currentItemIndex, 0));\n const excludeCurrentItem = normalizedSearch.length === 1;\n if (excludeCurrentItem) wrappedItems = wrappedItems.filter((v) => v !== currentItem);\n const nextItem = wrappedItems.find((item) =>\n item.textValue.toLowerCase().startsWith(normalizedSearch.toLowerCase())\n );\n return nextItem !== currentItem ? nextItem : undefined;\n}\n\n/**\n * Wraps an array around itself at a given start index\n * Example: `wrapArray(['a', 'b', 'c', 'd'], 2) === ['c', 'd', 'a', 'b']`\n */\nfunction wrapArray<T>(array: T[], startIndex: number) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\n\nconst Root = Select;\nconst Trigger = SelectTrigger;\nconst Value = SelectValue;\nconst Icon = SelectIcon;\nconst Portal = SelectPortal;\nconst Content = SelectContent;\nconst Viewport = SelectViewport;\nconst Group = SelectGroup;\nconst Label = SelectLabel;\nconst Item = SelectItem;\nconst ItemText = SelectItemText;\nconst ItemIndicator = SelectItemIndicator;\nconst ScrollUpButton = SelectScrollUpButton;\nconst ScrollDownButton = SelectScrollDownButton;\nconst Separator = SelectSeparator;\nconst Arrow = SelectArrow;\n\nexport {\n createSelectScope,\n //\n Select,\n SelectTrigger,\n SelectValue,\n SelectIcon,\n SelectPortal,\n SelectContent,\n SelectViewport,\n SelectGroup,\n SelectLabel,\n SelectItem,\n SelectItemText,\n SelectItemIndicator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n SelectSeparator,\n SelectArrow,\n //\n Root,\n Trigger,\n Value,\n Icon,\n Portal,\n Content,\n Viewport,\n Group,\n Label,\n Item,\n ItemText,\n ItemIndicator,\n ScrollUpButton,\n ScrollDownButton,\n Separator,\n Arrow,\n};\nexport type {\n SelectProps,\n SelectTriggerProps,\n SelectValueProps,\n SelectIconProps,\n SelectPortalProps,\n SelectContentProps,\n SelectViewportProps,\n SelectGroupProps,\n SelectLabelProps,\n SelectItemProps,\n SelectItemTextProps,\n SelectItemIndicatorProps,\n SelectScrollUpButtonProps,\n SelectScrollDownButtonProps,\n SelectSeparatorProps,\n SelectArrowProps,\n};\n","import type * as Spreadsheet from '@/src/components/spreadsheet/model/spreadsheet';\nimport { cn } from '@/src/shared/lib/cn';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/src/shared/ui/select';\nimport { CaretSortIcon } from '@radix-ui/react-icons';\nimport { type ClipboardEvent, useCallback } from 'react';\n\nexport function BooleanDataEditor(props: Spreadsheet.DataEditor) {\n const { value, onBlur, onChange, onPaste } = props;\n\n const _onPaste = useCallback(\n (e: ClipboardEvent<HTMLButtonElement>) => {\n e.preventDefault();\n onPaste?.();\n },\n [onPaste],\n );\n\n return (\n <Select value={value as string} onValueChange={(data) => onChange?.({ data })} defaultOpen>\n <SelectTrigger\n onBlur={onBlur}\n onPaste={_onPaste}\n className={cn(\n 'h-full w-full rounded-none border-none pl-1 text-xs outline-none focus:ring-0',\n )}\n autoFocus\n >\n <SelectValue placeholder=\"Selecionar\" />\n </SelectTrigger>\n\n <SelectContent>\n <SelectItem className=\"text-xs\" value=\"true\">\n Sim\n </SelectItem>\n\n <SelectItem className=\"text-xs\" value=\"false\">\n Não\n </SelectItem>\n </SelectContent>\n </Select>\n );\n}\n\nexport function BooleanDataViewer({ value }: Spreadsheet.DataViewer) {\n const empty = value === '';\n const displayValue = empty ? 'Selecionar' : value === 'true' ? 'Sim' : 'Não';\n\n return (\n <div className=\"flex h-full w-full items-center justify-between pr-px pl-1\">\n <p className=\"line-clamp-1 text-xs\">{displayValue}</p>\n <CaretSortIcon className=\"h-4 w-4 opacity-50\" />\n </div>\n );\n}\n","import type * as Spreadsheet from '@/src/components/spreadsheet/model/spreadsheet';\nimport { cn } from '@/src/shared/lib/cn';\nimport { type ClipboardEvent, useCallback } from 'react';\n\nexport function DateDataEditor(props: Spreadsheet.DataEditor) {\n const { value, onBlur, onChange, onPaste } = props;\n\n const _onPaste = useCallback(\n (e: ClipboardEvent<HTMLInputElement>) => {\n e.preventDefault();\n onPaste?.();\n },\n [onPaste],\n );\n\n return (\n <input\n type=\"date\"\n onBlur={onBlur}\n onPaste={_onPaste}\n value={value as string}\n onChange={(e) => onChange?.({ data: e.target.value })}\n className={cn('h-full w-full bg-transparent pl-1 text-xs outline-none')}\n autoFocus\n />\n );\n}\n\nexport function DateDataViewer(props: Spreadsheet.DataViewer) {\n const { value } = props;\n const formatter = Intl.DateTimeFormat('pt-BR', { dateStyle: 'short' });\n const formatted = value ? formatter.format(new Date(value as string)) : 'dd/mm/yyyy';\n\n return (\n <div className=\"flex h-full w-full items-center\">\n <p className=\"line-clamp-1 pl-1 text-xs\">{formatted as string}</p>\n </div>\n );\n}\n","import type { Column, DataEditorType } from '@/src/components/spreadsheet/model/spreadsheet';\nimport { cn } from '@/src/shared/lib/cn';\nimport { type ClipboardEvent, type FocusEvent, type MouseEvent, useEffect, useState } from 'react';\nimport { type NumberFormatValues, NumericFormat } from 'react-number-format';\n\nexport type NumericFieldProps = {\n value?: string;\n onChange?: (value?: string) => void;\n onBlur?: () => void;\n onFocus?: (e: FocusEvent<HTMLInputElement>) => void;\n onClick?: (e: MouseEvent<HTMLInputElement>) => void;\n onPaste?: (e: ClipboardEvent<HTMLInputElement>) => void;\n tabIndex?: number;\n\n dataEditorType: DataEditorType;\n settings?: Partial<Column['settings']>;\n disabled?: boolean;\n\n testid?: string;\n className?: string;\n\n dataCypress?: string;\n};\n\nexport function NumericField(props: NumericFieldProps) {\n const {\n className,\n dataEditorType,\n onFocus,\n onBlur,\n onChange,\n onClick,\n onPaste,\n settings,\n testid,\n value,\n disabled,\n dataCypress,\n tabIndex,\n } = props;\n\n const thousandSeparator = '.';\n const decimalSeparator = ',';\n const decimalScale = getDecimalScale({\n dataEditorType,\n decimalScale: settings?.numeric?.decimalPlaces,\n });\n const allowNegative = settings?.numeric?.allowNegative;\n const min = settings?.numeric?.min;\n const max = settings?.numeric?.max;\n\n const prefix = dataEditorType.toLocaleLowerCase() === 'currency' ? 'R$ ' : '';\n const suffix = dataEditorType.toLocaleLowerCase() === 'percentage' ? '%' : '';\n\n const [strValue, setStrValue] = useState<string | undefined>(value);\n\n const [waitCapToOnBlur, setWaitCapToOnBlur] = useState(false);\n\n const onValueChange = ({ value }: NumberFormatValues) => {\n setStrValue(value);\n onChange?.(value);\n };\n\n const _onBlur = () => {\n let waitCapToOnBlur = false;\n\n const numValue = Number(value);\n\n let newStrValue = value;\n\n if (typeof min === 'number') {\n if (numValue < min) newStrValue = min.toString();\n }\n\n if (typeof max === 'number') {\n if (numValue > max) newStrValue = max.toString();\n }\n\n if (newStrValue !== value) {\n waitCapToOnBlur = true;\n\n onChange?.(newStrValue);\n setStrValue(newStrValue);\n setWaitCapToOnBlur(waitCapToOnBlur);\n }\n\n if (!waitCapToOnBlur) onBlur?.();\n };\n\n useEffect(() => {\n if (waitCapToOnBlur) {\n onBlur?.();\n setWaitCapToOnBlur(false);\n }\n }, [onBlur, waitCapToOnBlur]);\n\n useEffect(() => {\n setStrValue(value);\n }, [value]);\n\n return (\n <NumericFormat\n tabIndex={tabIndex}\n value={strValue}\n onPaste={onPaste}\n prefix={prefix}\n suffix={suffix}\n fixedDecimalScale\n onBlur={_onBlur}\n data-testid={testid}\n valueIsNumericString\n onFocus={onFocus}\n onClick={onClick}\n decimalScale={decimalScale}\n onValueChange={onValueChange}\n allowNegative={allowNegative}\n decimalSeparator={decimalSeparator}\n thousandSeparator={thousandSeparator}\n className={cn(\n 'h-full w-full rounded-none bg-transparent pl-1 text-xs outline-none',\n className,\n )}\n disabled={disabled}\n data-cypress={dataCypress}\n autoFocus\n />\n );\n}\n\nexport const percentageRatio = 100;\nexport const percentageScaleToBeDisregarded = 2;\n\nexport function getDecimalScale(params: { dataEditorType: DataEditorType; decimalScale?: number }) {\n const { dataEditorType, decimalScale } = params;\n\n let newDecimalScale = decimalScale;\n\n if (dataEditorType.toLowerCase() === 'percentage') {\n if (decimalScale) {\n newDecimalScale = decimalScale > 2 ? decimalScale - percentageScaleToBeDisregarded : 0;\n } else {\n newDecimalScale = 0;\n }\n }\n\n if (!decimalScale) {\n if (dataEditorType.toLowerCase() === 'decimal') newDecimalScale = 2;\n if (dataEditorType.toLowerCase() === 'float') newDecimalScale = 2;\n if (dataEditorType.toLowerCase() === 'integer') newDecimalScale = 0;\n if (dataEditorType.toLowerCase() === 'currency') newDecimalScale = 2;\n }\n\n return newDecimalScale;\n}\n","import type * as Spreadsheet from '@/src/components/spreadsheet/model/spreadsheet';\nimport { NumericField } from '@/src/components/tmp/numeric';\nimport { type ClipboardEvent, useCallback } from 'react';\n\nexport function NumericEditor(props: Spreadsheet.DataEditor) {\n const { value, onBlur, onChange, onPaste, setMode, column } = props;\n\n const _onPaste = useCallback(\n (e: ClipboardEvent<HTMLInputElement>) => {\n e.preventDefault();\n onPaste?.();\n },\n [onPaste],\n );\n\n const _onBlur = useCallback(() => {\n onBlur?.();\n setMode?.('view');\n }, [onBlur, setMode]);\n\n return (\n <NumericField\n dataEditorType={column.dataEditorType}\n value={value as string}\n onPaste={_onPaste}\n onBlur={_onBlur}\n onChange={(value) => onChange?.({ data: value })}\n settings={column.settings}\n />\n );\n\n // return (\n // <input\n // type=\"number\"\n // onBlur={_onBlur}\n // onPaste={_onPaste}\n // value={value as string}\n // onChange={(e) => onChange?.({ data: e.target.value })}\n // className={cn('h-full w-full bg-transparent pl-1 text-xs outline-none')}\n // autoFocus\n // />\n // );\n}\n\nexport function NumericDataViewer(props: Spreadsheet.DataViewer) {\n const { value, column } = props;\n\n return (\n <NumericField\n dataEditorType={column.dataEditorType}\n value={value as string}\n settings={column.settings}\n disabled\n className=\"pointer-events-none\"\n />\n // <div className=\"flex h-full w-full items-center\">\n // <p className=\"line-clamp-1 pl-1 text-xs\">{value as string}</p>\n // </div>\n );\n}\n","import type * as Spreadsheet from '@/src/components/spreadsheet/model/spreadsheet';\nimport { cn } from '@/src/shared/lib/cn';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/src/shared/ui/select';\nimport { CaretSortIcon } from '@radix-ui/react-icons';\nimport { type ClipboardEvent, useCallback } from 'react';\n\nexport function SelectDataEditor(\n props: { items: Array<Spreadsheet.SelectItem> } & Spreadsheet.DataEditor,\n) {\n const { value, onBlur, onChange, onPaste, items } = props;\n\n const _onPaste = useCallback(\n (e: ClipboardEvent<HTMLButtonElement>) => {\n e.preventDefault();\n onPaste?.();\n },\n [onPaste],\n );\n\n return (\n <Select value={value as string} onValueChange={(data) => onChange?.({ data })} defaultOpen>\n <SelectTrigger\n onBlur={onBlur}\n onPaste={_onPaste}\n className={cn(\n 'h-full w-full rounded-none border-none pl-1 text-xs outline-none focus:ring-0',\n )}\n >\n <SelectValue placeholder=\"Selecionar\" />\n </SelectTrigger>\n\n <SelectContent>\n {items.map(({ value, text }) => (\n <SelectItem key={value} className=\"text-xs\" value={value}>\n {text}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n}\n\nexport function SelectDataViewer(\n props: { items: Array<Spreadsheet.SelectItem> } & Spreadsheet.DataViewer,\n) {\n const { value, items } = props;\n\n const selected = useMemo(() => items.find((item) => item.value === value), [items, value]);\n const displayValue = useMemo(() => (selected ? selected.text : 'Selecionar'), [selected]);\n\n return (\n <div className=\"flex h-full w-full items-center justify-between pr-px pl-1\">\n <p className=\"line-clamp-1 text-xs\">{displayValue}</p>\n <CaretSortIcon className=\"h-4 w-4 opacity-50\" />\n </div>\n );\n}\n","/** Move the cursor of given input (or textarea) element to it's end */\nexport function moveInputCursorToEnd(element: HTMLInputElement | HTMLTextAreaElement) {\n element.selectionStart = element.selectionEnd = element.value.length;\n}\n","import type { ClipboardEvent } from 'react';\n\nexport const PLAIN_TEXT_MIME = 'text/plain';\n\n/** Read text from given clipboard event */\nexport function readTextFromClipboard<T>(event: ClipboardEvent<T>): string {\n // @ts-ignore\n if (window.clipboardData?.getData) {\n // @ts-ignore\n return window.clipboardData.getData('Text');\n }\n\n if (event.clipboardData?.getData) {\n return event.clipboardData.getData(PLAIN_TEXT_MIME);\n }\n\n return '';\n}\n","import * as Spreadsheet from '@/src/components/spreadsheet/model/spreadsheet';\nimport { cn } from '@/src/shared/lib/cn';\nimport { moveInputCursorToEnd } from '@/src/shared/lib/move-input-cursor-to-end';\nimport { readTextFromClipboard } from '@/src/shared/lib/read-text-from-clipboard';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/src/shared/ui/tooltip';\nimport {\n type ChangeEvent,\n type ClipboardEvent,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nconst CHAR_WIDTH = 6;\nconst INPUT_MAX_LENGTH = 200;\n\nexport function TextDataEditor(props: Spreadsheet.DataEditor) {\n const { value, onBlur, onChange, onPaste, setMode, column, selected } = props;\n const valueAsString = value as string;\n\n const textareaRef = useRef<null | HTMLTextAreaElement>(null);\n const [textareaHeight, setTextareaHeight] = useState(0);\n\n const overflow = useMemo(\n () => charOverflow(valueAsString, column.width),\n [valueAsString, column.width],\n );\n\n const _onPaste = useCallback(\n <T extends HTMLInputElement | HTMLTextAreaElement>(e: ClipboardEvent<T>) => {\n const clipboard = readTextFromClipboard(e);\n const singleLine = oneLineString(clipboard);\n\n if (!singleLine) {\n e.preventDefault();\n onPaste?.();\n }\n },\n [onPaste],\n );\n\n const _onBlur = useCallback(() => {\n onBlur?.();\n setMode?.('view');\n }, [onBlur, setMode]);\n\n const updateTextareaHeight = useCallback(() => {\n const element = textareaRef.current;\n\n if (!element) return;\n\n const scrollHeight = element.scrollHeight;\n element.style.height = `${scrollHeight}px`;\n setTextareaHeight(scrollHeight);\n }, []);\n\n const _onChange = useCallback(\n <T extends HTMLInputElement | HTMLTextAreaElement>(e: ChangeEvent<T>) => {\n onChange?.({ data: e.target.value });\n updateTextareaHeight();\n },\n [updateTextareaHeight, onChange],\n );\n\n if (overflow) {\n return (\n <div\n style={{ height: textareaHeight }}\n className={cn(\n '-left-0.5 -top-0.5 absolute z-40 h-fit w-fit border bg-white shadow-lg outline outline-2 outline-blue-500',\n selected ? 'bg-blue-50' : 'bg-white',\n )}\n >\n <div\n style={{ height: textareaHeight - 1 }}\n className=\"h-full w-full outline outline-[3px] outline-sky-200 outline-offset-2\"\n >\n <textarea\n ref={textareaRef}\n onBlur={_onBlur}\n onPaste={_onPaste}\n value={valueAsString}\n onChange={_onChange}\n className={cn(\n 'resize-none break-all rounded-none bg-transparent py-1.5 pr-3 pl-1 text-xs outline-none',\n )}\n onFocus={(e) => moveInputCursorToEnd(e.target)}\n maxLength={INPUT_MAX_LENGTH}\n style={{ width: column.width }}\n autoFocus\n />\n </div>\n </div>\n );\n }\n\n return (\n <input\n onBlur={onBlur}\n onPaste={_onPaste}\n value={valueAsString}\n maxLength={INPUT_MAX_LENGTH}\n onChange={_onChange}\n className={cn('h-full w-full bg-transparent pl-1 text-xs outline-none')}\n autoFocus\n />\n );\n}\n\nexport function TextDataViewer(props: Spreadsheet.DataViewer) {\n const { value, column, selected } = props;\n const valueAsString = value as string;\n\n const overflow = useMemo(\n () => charOverflow(valueAsString, column.width),\n [valueAsString, column.width],\n );\n\n if (overflow) {\n return (\n <TooltipProvider delayDuration={0}>\n <Tooltip>\n <TooltipTrigger className=\"w-full\">\n <div className=\"flex h-full w-full items-center overflow-hidden\">\n <p className=\"line-clamp-1 break-all pl-1 text-left text-xs\">{valueAsString}</p>\n </div>\n </TooltipTrigger>\n\n <TooltipContent\n align=\"start\"\n side=\"bottom\"\n alignOffset={-2}\n sideOffset={-Spreadsheet.CELL_INITIAL_HEIGHT}\n className={cn(\n 'h-fit w-full break-all rounded-none border bg-white pl-1 text-black shadow-lg',\n 'data-[state=closed]:transform-none data-[side=bottom]:animate-none data-[state=closed]:animate-none data-[state=closed]:transition-none',\n selected ? 'bg-blue-50' : 'bg-white',\n )}\n style={{ width: column.width }}\n >\n <p>{valueAsString}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n }\n\n return (\n <div className=\"flex h-full w-full items-center overflow-hidden\">\n <p className=\"line-clamp-1 break-all pl-1 text-left text-xs\" title={valueAsString}>\n {valueAsString}\n </p>\n </div>\n );\n}\n\nfunction charOverflow(string: string, width: number) {\n return CHAR_WIDTH * string?.length > width;\n}\n\nfunction oneLineString(value: string) {\n return ['\\t', '\\n', '\\r'].every((regex) => !value.includes(regex));\n}\n","import {\n BooleanDataEditor,\n BooleanDataViewer,\n} from '@/src/components/spreadsheet/ui/data-editor/boolean';\n\nimport { DateDataEditor, DateDataViewer } from '@/src/components/spreadsheet/ui/data-editor/date';\n\nimport {\n NumericDataViewer,\n NumericEditor,\n} from '@/src/components/spreadsheet/ui/data-editor/numeric';\n\nimport {\n SelectDataEditor,\n SelectDataViewer,\n} from '@/src/components/spreadsheet/ui/data-editor/select';\n\nimport { TextDataEditor, TextDataViewer } from '@/src/components/spreadsheet/ui/data-editor/text';\n\nexport const DataEditor = {\n Date: DateDataEditor,\n Text: TextDataEditor,\n Boolean: BooleanDataEditor,\n Numeric: NumericEditor,\n Select: SelectDataEditor,\n};\n\nexport const DataViewer = {\n Date: DateDataViewer,\n Text: TextDataViewer,\n Boolean: BooleanDataViewer,\n Numeric: NumericDataViewer,\n Select: SelectDataViewer,\n};\n","import { useSpreadsheet } from '@/src/components/spreadsheet/lib/use-spreadsheet';\nimport * as Spreadsheet from '@/src/components/spreadsheet/model/spreadsheet';\nimport { DataEditor, DataViewer } from '@/src/components/spreadsheet/ui/data-editor';\nimport { cn } from '@/src/shared/lib/cn';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { useClickAway } from 'react-use';\n\nexport function Cell(props: Spreadsheet.Cell) {\n const { value, coordinates } = props;\n\n const { columns, isCellSelected, onChange, onPaste, onSelectCell } = useSpreadsheet();\n const { dataEditorType, readonly, width, visible, settings } = columns[coordinates.column];\n\n const [mode, setMode] = useState<Spreadsheet.Mode>(readonly ? 'readonly' : 'view');\n const dataEditorContainerRef = useRef<HTMLDivElement | null>(null);\n\n /** Cell correspondent column */\n const column = useMemo(() => columns[coordinates.column], [columns, coordinates.column]);\n /** Whether the cell is selected */\n const selected = useMemo(() => isCellSelected(coordinates), [coordinates, isCellSelected]);\n /** Select component custom items by prop */\n const selectItems = useMemo(() => settings?.select?.items || [], [settings?.select?.items]);\n\n const common: Record<'dataEditor' | 'dataViewer', Spreadsheet.DataEditor> = useMemo(\n () => ({\n dataEditor: {\n value,\n column,\n setMode,\n selected,\n onPaste: () => onPaste(coordinates),\n onChange: ({ data }) => onChange({ data, point: coordinates }),\n },\n dataViewer: {\n value,\n column,\n selected,\n },\n }),\n [coordinates, value, column, selected, onPaste, onChange],\n );\n\n const dataEditorElementMap: Partial<Record<Spreadsheet.DataEditorType, JSX.Element>> = useMemo(\n () => ({\n Date: <DataEditor.Date {...common.dataEditor} />,\n String: <DataEditor.Text {...common.dataEditor} />,\n Currency: <DataEditor.Numeric {...common.dataEditor} />,\n Decimal: <DataEditor.Numeric {...common.dataEditor} />,\n Float: <DataEditor.Numeric {...common.dataEditor} />,\n Integer: <DataEditor.Numeric {...common.dataEditor} />,\n Percentage: <DataEditor.Numeric {...common.dataEditor} />,\n Boolean: <DataEditor.Boolean {...common.dataEditor} />,\n Select: <DataEditor.Select {...common.dataEditor} items={selectItems} />,\n }),\n [common.dataEditor, selectItems],\n );\n\n const dataViewerElementMap: Partial<Record<Spreadsheet.DataEditorType, JSX.Element>> = useMemo(\n () => ({\n Date: <DataViewer.Date {...common.dataViewer} />,\n String: <DataViewer.Text {...common.dataViewer} />,\n Currency: <DataViewer.Numeric {...common.dataViewer} />,\n Decimal: <DataViewer.Numeric {...common.dataViewer} />,\n Float: <DataViewer.Numeric {...common.dataViewer} />,\n Integer: <DataViewer.Numeric {...common.dataViewer} />,\n Percentage: <DataViewer.Numeric {...common.dataViewer} />,\n Boolean: <DataViewer.Boolean {...common.dataViewer} />,\n Select: <DataViewer.Select {...common.dataViewer} items={selectItems} />,\n }),\n [common.dataViewer, selectItems],\n );\n\n const dataEditorElement = useMemo(\n () => (dataEditorType ? dataEditorElementMap[dataEditorType] : null),\n [dataEditorType, dataEditorElementMap],\n );\n\n const dataViewerElement = useMemo(\n () => (dataEditorType ? dataViewerElementMap[dataEditorType] : null),\n [dataEditorType, dataViewerElementMap],\n );\n\n useEffect(() => {\n const enterEditMode = (e: KeyboardEvent) => {\n const enterKey = e.code === 'Enter';\n\n if (enterKey && selected && mode === 'view') {\n setMode('edit');\n }\n\n if (enterKey && selected && mode === 'edit') {\n setMode('view');\n }\n };\n\n window.addEventListener('keydown', enterEditMode);\n\n return () => window.removeEventListener('keydown', enterEditMode);\n }, [selected, mode]);\n\n useClickAway(dataEditorContainerRef, () => setMode('view'));\n\n if (!visible) return null;\n\n if (mode === 'readonly') {\n return (\n <div\n onClick={() => onSelectCell(coordinates)}\n className={cn(\n 'flex h-7 shrink-0 cursor-default select-none border border-t-transparent border-l-transparent bg-[#F6F6F9]',\n selected && 'bg-[#EAF5FF]',\n )}\n style={{ width, height: Spreadsheet.CELL_INITIAL_HEIGHT }}\n >\n {dataViewerElement}\n </div>\n );\n }\n\n if (mode === 'view') {\n return (\n <div\n onClick={() => onSelectCell(coordinates)}\n onDoubleClick={() => setMode('edit')}\n className={cn(\n 'relative flex h-7 shrink-0 cursor-default select-none border border-t-transparent border-l-transparent',\n selected && 'bg-[#EAF5FF]',\n )}\n style={{ width, height: Spreadsheet.CELL_INITIAL_HEIGHT }}\n >\n {dataViewerElement}\n </div>\n );\n }\n\n return (\n <div\n ref={dataEditorContainerRef}\n data-testid=\"cell__testid\"\n className=\"relative h-7 w-32 shrink-0 border border-l-transparent border-t-transparent bg-[#EAF5FF] shadow-lg outline outline-2 outline-blue-500\"\n style={{\n width,\n height: Spreadsheet.CELL_INITIAL_HEIGHT,\n top: coordinates.row === 0 ? '4px' : '0px',\n }}\n >\n <div className=\"h-full w-full outline outline-[3px] outline-offset-2 outline-sky-200\">\n {dataEditorElement}\n </div>\n </div>\n );\n}\n","import { useSpreadsheet } from '@/src/components/spreadsheet/lib/use-spreadsheet';\nimport * as Matrix from '@/src/components/spreadsheet/model/matrix';\nimport * as Spreadsheet from '@/src/components/spreadsheet/model/spreadsheet';\nimport { cn } from '@/src/shared/lib/cn';\nimport { useMemo } from 'react';\n\nexport function RowIndicator({ row }: { row: number }) {\n const { onSelectRow, pointRange, matrix } = useSpreadsheet();\n\n const isRowInRange = useMemo(\n () => pointRange && row >= pointRange.start.row && row <= pointRange.end.row,\n [pointRange, row],\n );\n const isEntireRowSelected = useMemo(\n () => !!(pointRange && Matrix.hasEntireRows({ matrix, pointRange, row })),\n [matrix, pointRange, row],\n );\n\n return (\n <div\n className={cn(\n 'flex h-7 w-12 shrink-0 cursor-default select-none items-center justify-center border-r border-b text-[#8E8EA9] text-xs',\n isRowInRange && 'bg-blue-100 font-bold text-blue-700',\n isEntireRowSelected && 'bg-[#0085FF] font-bold text-white',\n )}\n onClick={(e) => onSelectRow(row, e)}\n style={{\n height: Spreadsheet.CELL_INITIAL_HEIGHT,\n }}\n >\n {row + 1}\n </div>\n );\n}\n","import { useSpreadsheet } from '@/src/components/spreadsheet/lib/use-spreadsheet';\nimport { Cell } from '@/src/components/spreadsheet/ui/cell';\nimport { RowIndicator } from '@/src/components/spreadsheet/ui/indicators/row-indicator';\nimport { cn } from '@/src/shared/lib/cn';\nimport { useId } from 'react';\n\nexport function Rows() {\n const id = useId();\n\n const { highlightLastRow, matrix } = useSpreadsheet();\n\n return (\n <div className=\"relative\">\n {matrix.map((rowValue, row) => (\n <div\n // biome-ignore lint/suspicious/noArrayIndexKey: Using ID as key.\n key={`spreadsheet__row__key__${id}__${row}}`}\n className={cn(\n 'flex items-center transition-all ease-linear',\n row === matrix.length - 1 && highlightLastRow && 'bg-blue-50',\n )}\n >\n <RowIndicator row={row} />\n\n {rowValue.map((columnValue, column) => (\n <Cell\n // biome-ignore lint/suspicious/noArrayIndexKey: Using ID as key.\n key={`spreadsheet__cell__key__${id}__${row}__${column}`}\n value={columnValue}\n coordinates={{ column, row }}\n />\n ))}\n </div>\n ))}\n </div>\n );\n}\n","import { useSpreadsheet } from '@/src/components/spreadsheet/lib/use-spreadsheet';\nimport { cn } from '@/src/shared/lib/cn';\n\nexport function Start({ className }: { className?: string }) {\n const { staticRows, emptySize, onInsertNewRow } = useSpreadsheet();\n\n if (staticRows) return null;\n\n return (\n <div\n className={cn(\n 'pointer-events-none mt-[calc(28px+36px)] flex h-[calc(100%-28px-28px)] w-full items-center justify-center',\n emptySize && 'pointer-events-auto bg-white/25 backdrop-blur-sm',\n className,\n )}\n >\n {emptySize && (\n <p className=\"text-neutral-500\">\n <span>Clique </span>\n <button type=\"button\" onClick={onInsertNewRow} className=\"font-bold\">\n AQUI\n </button>\n <span> para começar a preencher a tabela.</span>\n </p>\n )}\n </div>\n );\n}\n","import type { SVGProps } from 'react';\n\nexport function AddRowIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n fill=\"none\"\n viewBox=\"0 0 20 20\"\n {...props}\n >\n <title>Add Row</title>\n <path\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.5\"\n d=\"M10 6.667v6.666M6.667 10h6.666M6.5 17.5h7c1.4 0 2.1 0 2.635-.273a2.5 2.5 0 001.092-1.092c.273-.535.273-1.235.273-2.635v-7c0-1.4 0-2.1-.273-2.635a2.5 2.5 0 00-1.092-1.093C15.6 2.5 14.9 2.5 13.5 2.5h-7c-1.4 0-2.1 0-2.635.272a2.5 2.5 0 00-1.093 1.093C2.5 4.4 2.5 5.1 2.5 6.5v7c0 1.4 0 2.1.272 2.635a2.5 2.5 0 001.093 1.092C4.4 17.5 5.1 17.5 6.5 17.5z\"\n />\n </svg>\n );\n}\n","import type { SVGProps } from 'react';\n\nexport function RemoveRowIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n fill=\"none\"\n viewBox=\"0 0 20 20\"\n {...props}\n >\n <title>Remove Row</title>\n <path\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.5\"\n d=\"M13.333 5v-.667c0-.933 0-1.4-.181-1.756a1.667 1.667 0 00-.729-.729c-.356-.181-.823-.181-1.756-.181H9.333c-.933 0-1.4 0-1.756.181-.314.16-.569.415-.729.729-.181.356-.181.823-.181 1.756V5m1.666 4.583v4.167m3.334-4.167v4.167M2.5 5h15m-1.667 0v9.333c0 1.4 0 2.1-.272 2.635a2.5 2.5 0 01-1.093 1.093c-.534.272-1.235.272-2.635.272H8.167c-1.4 0-2.1 0-2.635-.272a2.5 2.5 0 01-1.093-1.093c-.272-.535-.272-1.235-.272-2.635V5\"\n />\n </svg>\n );\n}\n","import { cn } from '@/src/shared/lib/cn';\nimport { Slot } from '@radix-ui/react-slot';\nimport { type VariantProps, cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nconst buttonVariants = cva(\n 'inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground shadow hover:bg-primary/90',\n destructive: 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90',\n outline:\n 'border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground',\n secondary: 'bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n default: 'h-9 px-4 py-2',\n sm: 'h-8 rounded-md px-3 text-xs',\n lg: 'h-10 rounded-md px-8',\n icon: 'h-9 w-9',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button';\n return (\n <Comp className={cn(buttonVariants({ variant, size, className }))} ref={ref} {...props} />\n );\n },\n);\n\nButton.displayName = 'Button';\n\nexport { Button, buttonVariants };\n","import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { composeRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport * as MenuPrimitive from '@radix-ui/react-menu';\nimport { createMenuScope } from '@radix-ui/react-menu';\nimport { useId } from '@radix-ui/react-id';\n\nimport type * as Radix from '@radix-ui/react-primitive';\nimport type { Scope } from '@radix-ui/react-context';\n\ntype Direction = 'ltr' | 'rtl';\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenu\n * -----------------------------------------------------------------------------------------------*/\n\nconst DROPDOWN_MENU_NAME = 'DropdownMenu';\n\ntype ScopedProps<P> = P & { __scopeDropdownMenu?: Scope };\nconst [createDropdownMenuContext, createDropdownMenuScope] = createContextScope(\n DROPDOWN_MENU_NAME,\n [createMenuScope]\n);\nconst useMenuScope = createMenuScope();\n\ntype DropdownMenuContextValue = {\n triggerId: string;\n triggerRef: React.RefObject<HTMLButtonElement>;\n contentId: string;\n open: boolean;\n onOpenChange(open: boolean): void;\n onOpenToggle(): void;\n modal: boolean;\n};\n\nconst [DropdownMenuProvider, useDropdownMenuContext] =\n createDropdownMenuContext<DropdownMenuContextValue>(DROPDOWN_MENU_NAME);\n\ninterface DropdownMenuProps {\n children?: React.ReactNode;\n dir?: Direction;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?(open: boolean): void;\n modal?: boolean;\n}\n\nconst DropdownMenu: React.FC<DropdownMenuProps> = (props: ScopedProps<DropdownMenuProps>) => {\n const {\n __scopeDropdownMenu,\n children,\n dir,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true,\n } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n });\n\n return (\n <DropdownMenuProvider\n scope={__scopeDropdownMenu}\n triggerId={useId()}\n triggerRef={triggerRef}\n contentId={useId()}\n open={open}\n onOpenChange={setOpen}\n onOpenToggle={React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen])}\n modal={modal}\n >\n <MenuPrimitive.Root {...menuScope} open={open} onOpenChange={setOpen} dir={dir} modal={modal}>\n {children}\n </MenuPrimitive.Root>\n </DropdownMenuProvider>\n );\n};\n\nDropdownMenu.displayName = DROPDOWN_MENU_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'DropdownMenuTrigger';\n\ntype DropdownMenuTriggerElement = React.ElementRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = Radix.ComponentPropsWithoutRef<typeof Primitive.button>;\ninterface DropdownMenuTriggerProps extends PrimitiveButtonProps {}\n\nconst DropdownMenuTrigger = React.forwardRef<DropdownMenuTriggerElement, DropdownMenuTriggerProps>(\n (props: ScopedProps<DropdownMenuTriggerProps>, forwardedRef) => {\n const { __scopeDropdownMenu, disabled = false, ...triggerProps } = props;\n const context = useDropdownMenuContext(TRIGGER_NAME, __scopeDropdownMenu);\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return (\n <MenuPrimitive.Anchor asChild {...menuScope}>\n <Primitive.button\n type=\"button\"\n id={context.triggerId}\n aria-haspopup=\"menu\"\n aria-expanded={context.open}\n aria-controls={context.open ? context.contentId : undefined}\n data-state={context.open ? 'open' : 'closed'}\n data-disabled={disabled ? '' : undefined}\n disabled={disabled}\n {...triggerProps}\n ref={composeRefs(forwardedRef, context.triggerRef)}\n onPointerDown={composeEventHandlers(props.onPointerDown, (event) => {\n // only call handler if it's the left button (mousedown gets triggered by all mouse buttons)\n // but not when the control key is pressed (avoiding MacOS right click)\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onOpenToggle();\n // prevent trigger focusing when opening\n // this allows the content to be given focus without competition\n if (!context.open) event.preventDefault();\n }\n })}\n onKeyDown={composeEventHandlers(props.onKeyDown, (event) => {\n if (disabled) return;\n if (['Enter', ' '].includes(event.key)) context.onOpenToggle();\n if (event.key === 'ArrowDown') context.onOpenChange(true);\n // prevent keydown from scrolling window / first focused item to execute\n // that keydown (inadvertently closing the menu)\n if (['Enter', ' ', 'ArrowDown'].includes(event.key)) event.preventDefault();\n })}\n />\n </MenuPrimitive.Anchor>\n );\n }\n);\n\nDropdownMenuTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'DropdownMenuPortal';\n\ntype MenuPortalProps = React.ComponentPropsWithoutRef<typeof MenuPrimitive.Portal>;\ninterface DropdownMenuPortalProps extends MenuPortalProps {}\n\nconst DropdownMenuPortal: React.FC<DropdownMenuPortalProps> = (\n props: ScopedProps<DropdownMenuPortalProps>\n) => {\n const { __scopeDropdownMenu, ...portalProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.Portal {...menuScope} {...portalProps} />;\n};\n\nDropdownMenuPortal.displayName = PORTAL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'DropdownMenuContent';\n\ntype DropdownMenuContentElement = React.ElementRef<typeof MenuPrimitive.Content>;\ntype MenuContentProps = Radix.ComponentPropsWithoutRef<typeof MenuPrimitive.Content>;\ninterface DropdownMenuContentProps extends Omit<MenuContentProps, 'onEntryFocus'> {}\n\nconst DropdownMenuContent = React.forwardRef<DropdownMenuContentElement, DropdownMenuContentProps>(\n (props: ScopedProps<DropdownMenuContentProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...contentProps } = props;\n const context = useDropdownMenuContext(CONTENT_NAME, __scopeDropdownMenu);\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const hasInteractedOutsideRef = React.useRef(false);\n\n return (\n <MenuPrimitive.Content\n id={context.contentId}\n aria-labelledby={context.triggerId}\n {...menuScope}\n {...contentProps}\n ref={forwardedRef}\n onCloseAutoFocus={composeEventHandlers(props.onCloseAutoFocus, (event) => {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n hasInteractedOutsideRef.current = false;\n // Always prevent auto focus because we either focus manually or want user agent focus\n event.preventDefault();\n })}\n onInteractOutside={composeEventHandlers(props.onInteractOutside, (event) => {\n const originalEvent = event.detail.originalEvent as PointerEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n if (!context.modal || isRightClick) hasInteractedOutsideRef.current = true;\n })}\n style={{\n ...props.style,\n // re-namespace exposed content custom properties\n ...{\n '--radix-dropdown-menu-content-transform-origin':\n 'var(--radix-popper-transform-origin)',\n '--radix-dropdown-menu-content-available-width': 'var(--radix-popper-available-width)',\n '--radix-dropdown-menu-content-available-height':\n 'var(--radix-popper-available-height)',\n '--radix-dropdown-menu-trigger-width': 'var(--radix-popper-anchor-width)',\n '--radix-dropdown-menu-trigger-height': 'var(--radix-popper-anchor-height)',\n },\n }}\n />\n );\n }\n);\n\nDropdownMenuContent.displayName = CONTENT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuGroup\n * -----------------------------------------------------------------------------------------------*/\n\nconst GROUP_NAME = 'DropdownMenuGroup';\n\ntype DropdownMenuGroupElement = React.ElementRef<typeof MenuPrimitive.Group>;\ntype MenuGroupProps = Radix.ComponentPropsWithoutRef<typeof MenuPrimitive.Group>;\ninterface DropdownMenuGroupProps extends MenuGroupProps {}\n\nconst DropdownMenuGroup = React.forwardRef<DropdownMenuGroupElement, DropdownMenuGroupProps>(\n (props: ScopedProps<DropdownMenuGroupProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...groupProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.Group {...menuScope} {...groupProps} ref={forwardedRef} />;\n }\n);\n\nDropdownMenuGroup.displayName = GROUP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuLabel\n * -----------------------------------------------------------------------------------------------*/\n\nconst LABEL_NAME = 'DropdownMenuLabel';\n\ntype DropdownMenuLabelElement = React.ElementRef<typeof MenuPrimitive.Label>;\ntype MenuLabelProps = Radix.ComponentPropsWithoutRef<typeof MenuPrimitive.Label>;\ninterface DropdownMenuLabelProps extends MenuLabelProps {}\n\nconst DropdownMenuLabel = React.forwardRef<DropdownMenuLabelElement, DropdownMenuLabelProps>(\n (props: ScopedProps<DropdownMenuLabelProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...labelProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.Label {...menuScope} {...labelProps} ref={forwardedRef} />;\n }\n);\n\nDropdownMenuLabel.displayName = LABEL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_NAME = 'DropdownMenuItem';\n\ntype DropdownMenuItemElement = React.ElementRef<typeof MenuPrimitive.Item>;\ntype MenuItemProps = Radix.ComponentPropsWithoutRef<typeof MenuPrimitive.Item>;\ninterface DropdownMenuItemProps extends MenuItemProps {}\n\nconst DropdownMenuItem = React.forwardRef<DropdownMenuItemElement, DropdownMenuItemProps>(\n (props: ScopedProps<DropdownMenuItemProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...itemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.Item {...menuScope} {...itemProps} ref={forwardedRef} />;\n }\n);\n\nDropdownMenuItem.displayName = ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuCheckboxItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst CHECKBOX_ITEM_NAME = 'DropdownMenuCheckboxItem';\n\ntype DropdownMenuCheckboxItemElement = React.ElementRef<typeof MenuPrimitive.CheckboxItem>;\ntype MenuCheckboxItemProps = Radix.ComponentPropsWithoutRef<typeof MenuPrimitive.CheckboxItem>;\ninterface DropdownMenuCheckboxItemProps extends MenuCheckboxItemProps {}\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n DropdownMenuCheckboxItemElement,\n DropdownMenuCheckboxItemProps\n>((props: ScopedProps<DropdownMenuCheckboxItemProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...checkboxItemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.CheckboxItem {...menuScope} {...checkboxItemProps} ref={forwardedRef} />;\n});\n\nDropdownMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuRadioGroup\n * -----------------------------------------------------------------------------------------------*/\n\nconst RADIO_GROUP_NAME = 'DropdownMenuRadioGroup';\n\ntype DropdownMenuRadioGroupElement = React.ElementRef<typeof MenuPrimitive.RadioGroup>;\ntype MenuRadioGroupProps = Radix.ComponentPropsWithoutRef<typeof MenuPrimitive.RadioGroup>;\ninterface DropdownMenuRadioGroupProps extends MenuRadioGroupProps {}\n\nconst DropdownMenuRadioGroup = React.forwardRef<\n DropdownMenuRadioGroupElement,\n DropdownMenuRadioGroupProps\n>((props: ScopedProps<DropdownMenuRadioGroupProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...radioGroupProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.RadioGroup {...menuScope} {...radioGroupProps} ref={forwardedRef} />;\n});\n\nDropdownMenuRadioGroup.displayName = RADIO_GROUP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuRadioItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst RADIO_ITEM_NAME = 'DropdownMenuRadioItem';\n\ntype DropdownMenuRadioItemElement = React.ElementRef<typeof MenuPrimitive.RadioItem>;\ntype MenuRadioItemProps = Radix.ComponentPropsWithoutRef<typeof MenuPrimitive.RadioItem>;\ninterface DropdownMenuRadioItemProps extends MenuRadioItemProps {}\n\nconst DropdownMenuRadioItem = React.forwardRef<\n DropdownMenuRadioItemElement,\n DropdownMenuRadioItemProps\n>((props: ScopedProps<DropdownMenuRadioItemProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...radioItemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.RadioItem {...menuScope} {...radioItemProps} ref={forwardedRef} />;\n});\n\nDropdownMenuRadioItem.displayName = RADIO_ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuItemIndicator\n * -----------------------------------------------------------------------------------------------*/\n\nconst INDICATOR_NAME = 'DropdownMenuItemIndicator';\n\ntype DropdownMenuItemIndicatorElement = React.ElementRef<typeof MenuPrimitive.ItemIndicator>;\ntype MenuItemIndicatorProps = Radix.ComponentPropsWithoutRef<typeof MenuPrimitive.ItemIndicator>;\ninterface DropdownMenuItemIndicatorProps extends MenuItemIndicatorProps {}\n\nconst DropdownMenuItemIndicator = React.forwardRef<\n DropdownMenuItemIndicatorElement,\n DropdownMenuItemIndicatorProps\n>((props: ScopedProps<DropdownMenuItemIndicatorProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...itemIndicatorProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.ItemIndicator {...menuScope} {...itemIndicatorProps} ref={forwardedRef} />;\n});\n\nDropdownMenuItemIndicator.displayName = INDICATOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuSeparator\n * -----------------------------------------------------------------------------------------------*/\n\nconst SEPARATOR_NAME = 'DropdownMenuSeparator';\n\ntype DropdownMenuSeparatorElement = React.ElementRef<typeof MenuPrimitive.Separator>;\ntype MenuSeparatorProps = Radix.ComponentPropsWithoutRef<typeof MenuPrimitive.Separator>;\ninterface DropdownMenuSeparatorProps extends MenuSeparatorProps {}\n\nconst DropdownMenuSeparator = React.forwardRef<\n DropdownMenuSeparatorElement,\n DropdownMenuSeparatorProps\n>((props: ScopedProps<DropdownMenuSeparatorProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...separatorProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.Separator {...menuScope} {...separatorProps} ref={forwardedRef} />;\n});\n\nDropdownMenuSeparator.displayName = SEPARATOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuArrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst ARROW_NAME = 'DropdownMenuArrow';\n\ntype DropdownMenuArrowElement = React.ElementRef<typeof MenuPrimitive.Arrow>;\ntype MenuArrowProps = Radix.ComponentPropsWithoutRef<typeof MenuPrimitive.Arrow>;\ninterface DropdownMenuArrowProps extends MenuArrowProps {}\n\nconst DropdownMenuArrow = React.forwardRef<DropdownMenuArrowElement, DropdownMenuArrowProps>(\n (props: ScopedProps<DropdownMenuArrowProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...arrowProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.Arrow {...menuScope} {...arrowProps} ref={forwardedRef} />;\n }\n);\n\nDropdownMenuArrow.displayName = ARROW_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuSub\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DropdownMenuSubProps {\n children?: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?(open: boolean): void;\n}\n\nconst DropdownMenuSub: React.FC<DropdownMenuSubProps> = (\n props: ScopedProps<DropdownMenuSubProps>\n) => {\n const { __scopeDropdownMenu, children, open: openProp, onOpenChange, defaultOpen } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n });\n\n return (\n <MenuPrimitive.Sub {...menuScope} open={open} onOpenChange={setOpen}>\n {children}\n </MenuPrimitive.Sub>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuSubTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst SUB_TRIGGER_NAME = 'DropdownMenuSubTrigger';\n\ntype DropdownMenuSubTriggerElement = React.ElementRef<typeof MenuPrimitive.SubTrigger>;\ntype MenuSubTriggerProps = Radix.ComponentPropsWithoutRef<typeof MenuPrimitive.SubTrigger>;\ninterface DropdownMenuSubTriggerProps extends MenuSubTriggerProps {}\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n DropdownMenuSubTriggerElement,\n DropdownMenuSubTriggerProps\n>((props: ScopedProps<DropdownMenuSubTriggerProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...subTriggerProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.SubTrigger {...menuScope} {...subTriggerProps} ref={forwardedRef} />;\n});\n\nDropdownMenuSubTrigger.displayName = SUB_TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuSubContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst SUB_CONTENT_NAME = 'DropdownMenuSubContent';\n\ntype DropdownMenuSubContentElement = React.ElementRef<typeof MenuPrimitive.Content>;\ntype MenuSubContentProps = Radix.ComponentPropsWithoutRef<typeof MenuPrimitive.SubContent>;\ninterface DropdownMenuSubContentProps extends MenuSubContentProps {}\n\nconst DropdownMenuSubContent = React.forwardRef<\n DropdownMenuSubContentElement,\n DropdownMenuSubContentProps\n>((props: ScopedProps<DropdownMenuSubContentProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...subContentProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n\n return (\n <MenuPrimitive.SubContent\n {...menuScope}\n {...subContentProps}\n ref={forwardedRef}\n style={{\n ...props.style,\n // re-namespace exposed content custom properties\n ...{\n '--radix-dropdown-menu-content-transform-origin': 'var(--radix-popper-transform-origin)',\n '--radix-dropdown-menu-content-available-width': 'var(--radix-popper-available-width)',\n '--radix-dropdown-menu-content-available-height': 'var(--radix-popper-available-height)',\n '--radix-dropdown-menu-trigger-width': 'var(--radix-popper-anchor-width)',\n '--radix-dropdown-menu-trigger-height': 'var(--radix-popper-anchor-height)',\n },\n }}\n />\n );\n});\n\nDropdownMenuSubContent.displayName = SUB_CONTENT_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = DropdownMenu;\nconst Trigger = DropdownMenuTrigger;\nconst Portal = DropdownMenuPortal;\nconst Content = DropdownMenuContent;\nconst Group = DropdownMenuGroup;\nconst Label = DropdownMenuLabel;\nconst Item = DropdownMenuItem;\nconst CheckboxItem = DropdownMenuCheckboxItem;\nconst RadioGroup = DropdownMenuRadioGroup;\nconst RadioItem = DropdownMenuRadioItem;\nconst ItemIndicator = DropdownMenuItemIndicator;\nconst Separator = DropdownMenuSeparator;\nconst Arrow = DropdownMenuArrow;\nconst Sub = DropdownMenuSub;\nconst SubTrigger = DropdownMenuSubTrigger;\nconst SubContent = DropdownMenuSubContent;\n\nexport {\n createDropdownMenuScope,\n //\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuPortal,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuItemIndicator,\n DropdownMenuSeparator,\n DropdownMenuArrow,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n //\n Root,\n Trigger,\n Portal,\n Content,\n Group,\n Label,\n Item,\n CheckboxItem,\n RadioGroup,\n RadioItem,\n ItemIndicator,\n Separator,\n Arrow,\n Sub,\n SubTrigger,\n SubContent,\n};\nexport type {\n DropdownMenuProps,\n DropdownMenuTriggerProps,\n DropdownMenuPortalProps,\n DropdownMenuContentProps,\n DropdownMenuGroupProps,\n DropdownMenuLabelProps,\n DropdownMenuItemProps,\n DropdownMenuCheckboxItemProps,\n DropdownMenuRadioGroupProps,\n DropdownMenuRadioItemProps,\n DropdownMenuItemIndicatorProps,\n DropdownMenuSeparatorProps,\n DropdownMenuArrowProps,\n DropdownMenuSubProps,\n DropdownMenuSubTriggerProps,\n DropdownMenuSubContentProps,\n};\n","'use client';\nimport { cn } from '@/src/shared/lib/cn';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport { CheckIcon, ChevronRightIcon, DotFilledIcon } from '@radix-ui/react-icons';\nimport * as React from 'react';\n\nconst DropdownMenu = DropdownMenuPrimitive.Root;\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group;\n\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal;\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub;\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n 'flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[state=open]:bg-accent focus:bg-accent',\n inset && 'pl-8',\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto h-4 w-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n));\nDropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n '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 bg-popover p-1 text-popover-foreground shadow-lg data-[state=closed]:animate-out data-[state=open]:animate-in',\n className,\n )}\n {...props}\n />\n));\nDropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md',\n '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 data-[state=closed]:animate-out data-[state=open]:animate-in',\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n));\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors data-[disabled]:pointer-events-none focus:bg-accent focus:text-accent-foreground data-[disabled]:opacity-50',\n inset && 'pl-8',\n className,\n )}\n {...props}\n />\n));\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pr-2 pl-8 text-sm outline-none transition-colors data-[disabled]:pointer-events-none focus:bg-accent focus:text-accent-foreground data-[disabled]:opacity-50',\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n));\nDropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pr-2 pl-8 text-sm outline-none transition-colors data-[disabled]:pointer-events-none focus:bg-accent focus:text-accent-foreground data-[disabled]:opacity-50',\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <DotFilledIcon className=\"h-4 w-4 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n));\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn('px-2 py-1.5 font-semibold text-sm', inset && 'pl-8', className)}\n {...props}\n />\n));\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn('-mx-1 my-1 h-px bg-muted', className)}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;\n\nconst DropdownMenuShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span className={cn('ml-auto text-xs tracking-widest opacity-60', className)} {...props} />\n );\n};\nDropdownMenuShortcut.displayName = 'DropdownMenuShortcut';\n\nexport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n};\n","import { useSpreadsheet } from '@/src/components/spreadsheet/lib/use-spreadsheet';\nimport { AddRowIcon } from '@/src/components/spreadsheet/ui/icons/add-row-icon';\nimport { RemoveRowIcon } from '@/src/components/spreadsheet/ui/icons/remove-row-icon';\nimport { Button } from '@/src/shared/ui/button';\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuTrigger,\n} from '@/src/shared/ui/dropdown-menu';\nimport { ChevronDown } from 'lucide-react';\nimport { nanoid } from 'nanoid';\nimport { useMemo } from 'react';\n\nexport function Toolbar() {\n const {\n hasSomeEntireRow,\n emptySize,\n staticRows,\n columns,\n onInsertNewRow,\n onRemoveRow,\n onColumnVisibilityChange,\n } = useSpreadsheet();\n\n const visibleColumns = useMemo(() => columns.filter(({ visible }) => visible), [columns]);\n const allVisible = useMemo(\n () => columns.length === visibleColumns.length,\n [columns.length, visibleColumns.length],\n );\n\n const allVisibleLabel = 'Exibindo todas as colunas';\n const visibleColumnsLabel = `Exibindo ${visibleColumns.length} de ${columns.length} colunas`;\n const columnVisibilityLabel = allVisible ? allVisibleLabel : visibleColumnsLabel;\n\n return (\n <div className=\"sticky top-0 z-50 flex w-full items-center justify-between rounded-t-md border bg-[#EAF5FF] px-4 py-2.5\">\n <div className=\"flex items-center gap-6\">\n <Button\n disabled={staticRows}\n size=\"icon\"\n variant=\"ghost\"\n onClick={onInsertNewRow}\n className=\"text-[#4A4A6A] transition-none active:bg-[#0085FF] hover:bg-[#8FD6FF] active:text-white\"\n >\n <AddRowIcon />\n </Button>\n\n <Button\n disabled={staticRows || emptySize || !hasSomeEntireRow}\n size=\"icon\"\n variant=\"ghost\"\n onClick={onRemoveRow}\n className=\"text-[#4A4A6A] transition-none active:bg-[#0085FF] hover:bg-[#8FD6FF] active:text-white\"\n >\n <RemoveRowIcon />\n </Button>\n </div>\n\n <DropdownMenu>\n <DropdownMenuTrigger asChild className=\"w-56\">\n <Button variant=\"outline\" className=\"justify-between px-2\">\n <span className=\"text-xs\">{columnVisibilityLabel}</span>\n <ChevronDown className=\"h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n\n <DropdownMenuContent className=\"w-56\">\n {columns.map(({ name, id, alphabetLetter, visible }) => (\n <DropdownMenuCheckboxItem\n key={`spreadsheet__column__dropdown_checkbox__key__${nanoid()}`}\n checked={visible}\n onCheckedChange={() => onColumnVisibilityChange(id)}\n className=\"justify-between text-xs\"\n >\n <span>{name}</span>\n <span className=\"text-[10px] text-neutral-500\">{alphabetLetter}</span>\n </DropdownMenuCheckboxItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n}\n","import type { Props } from '@/src/components/spreadsheet/model/spreadsheet';\nimport { Container } from '@/src/components/spreadsheet/ui/containers/index';\nimport { SpreadsheetContextProvider } from '@/src/components/spreadsheet/ui/context';\nimport { Header } from '@/src/components/spreadsheet/ui/header';\nimport { Rows } from '@/src/components/spreadsheet/ui/rows';\nimport { Start } from '@/src/components/spreadsheet/ui/start';\nimport { Toolbar } from '@/src/components/spreadsheet/ui/toolbar';\n\nexport function Spreadsheet(props: Props) {\n const { className, ...rest } = props;\n\n return (\n <SpreadsheetContextProvider {...rest}>\n <Container.Root className={className}>\n <Toolbar />\n\n <Container.Matrix>\n <Start className=\"absolute z-50\" />\n <Header />\n <Rows />\n </Container.Matrix>\n </Container.Root>\n </SpreadsheetContextProvider>\n );\n}\n","import { Spreadsheet } from '@/src/components/spreadsheet/ui';\nimport '@/src/shared/styles/globals.css';\n\nexport const CapLink = {\n Spreadsheet,\n};\n"]}
1
+ {"version":3,"sources":["../../node_modules/tsup/assets/esm_shims.js","../../node_modules/tslib/tslib.es6.mjs","../../src/index.ts","../../src/components/spreadsheet/ui/index.tsx","../../src/components/spreadsheet/ui/containers/index.ts","../../src/components/spreadsheet/ui/containers/matrix.tsx","../../src/components/spreadsheet/lib/use-spreadsheet.ts","../../src/components/spreadsheet/ui/context.tsx","../../src/components/spreadsheet/lib/indexed-alphabet.ts","../../src/components/spreadsheet/lib/matrix-output.ts","../../src/components/spreadsheet/lib/normalize-value.ts","../../src/components/spreadsheet/lib/date-formatter.ts","../../src/components/spreadsheet/model/spreadsheet.ts","../../src/components/spreadsheet/model/matrix.ts","../../node_modules/nanoid/index.js","../../node_modules/nanoid/url-alphabet/index.js","../../src/shared/lib/cn.ts","../../node_modules/clsx/dist/clsx.mjs","../../node_modules/tailwind-merge/src/lib/class-utils.ts","../../node_modules/tailwind-merge/src/lib/lru-cache.ts","../../node_modules/tailwind-merge/src/lib/modifier-utils.ts","../../node_modules/tailwind-merge/src/lib/config-utils.ts","../../node_modules/tailwind-merge/src/lib/merge-classlist.ts","../../node_modules/tailwind-merge/src/lib/tw-join.ts","../../node_modules/tailwind-merge/src/lib/create-tailwind-merge.ts","../../node_modules/tailwind-merge/src/lib/from-theme.ts","../../node_modules/tailwind-merge/src/lib/validators.ts","../../node_modules/tailwind-merge/src/lib/default-config.ts","../../node_modules/tailwind-merge/src/lib/tw-merge.ts","../../src/components/spreadsheet/ui/containers/root.tsx","../../node_modules/react-use/esm/index.js","../../node_modules/react-use/esm/misc/util.js","../../node_modules/react-use/esm/useClickAway.js","../../src/components/spreadsheet/ui/header.tsx","../../src/components/spreadsheet/ui/indicators/column-indicator.tsx","../../src/components/spreadsheet/ui/indicators/drag-indicator.tsx","../../src/components/spreadsheet/ui/indicators/column-title-indicator.tsx","../../src/components/spreadsheet/ui/icons/integer-icon.tsx","../../src/shared/ui/tooltip.tsx","../../node_modules/@babel/runtime/helpers/esm/extends.js","../../node_modules/@radix-ui/primitive/dist/packages/core/primitive/src/primitive.tsx","../../node_modules/@radix-ui/react-compose-refs/dist/packages/react/compose-refs/src/composeRefs.tsx","../../node_modules/@radix-ui/react-context/dist/packages/react/context/src/createContext.tsx","../../node_modules/@radix-ui/react-slot/dist/packages/react/slot/src/Slot.tsx","../../node_modules/@radix-ui/react-primitive/dist/packages/react/primitive/src/Primitive.tsx","../../node_modules/@radix-ui/react-use-callback-ref/dist/packages/react/use-callback-ref/src/useCallbackRef.tsx","../../node_modules/@radix-ui/react-use-escape-keydown/dist/packages/react/use-escape-keydown/src/useEscapeKeydown.tsx","../../node_modules/@radix-ui/react-dismissable-layer/dist/packages/react/dismissable-layer/src/DismissableLayer.tsx","../../node_modules/@radix-ui/react-use-layout-effect/dist/packages/react/use-layout-effect/src/useLayoutEffect.tsx","../../node_modules/@radix-ui/react-id/dist/packages/react/id/src/id.tsx","../../node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs","../../node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../../node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../../node_modules/@radix-ui/react-use-size/dist/packages/react/use-size/src/useSize.tsx","../../node_modules/@radix-ui/react-popper/dist/packages/react/popper/src/Popper.tsx","../../node_modules/@radix-ui/react-portal/dist/packages/react/portal/src/Portal.tsx","../../node_modules/@radix-ui/react-presence/dist/packages/react/presence/src/useStateMachine.tsx","../../node_modules/@radix-ui/react-presence/dist/packages/react/presence/src/Presence.tsx","../../node_modules/@radix-ui/react-use-controllable-state/dist/packages/react/use-controllable-state/src/useControllableState.tsx","../../node_modules/@radix-ui/react-visually-hidden/dist/packages/react/visually-hidden/src/VisuallyHidden.tsx","../../node_modules/@radix-ui/react-tooltip/dist/packages/react/tooltip/src/Tooltip.tsx","../../node_modules/@radix-ui/react-icons/src/CaretSortIcon.tsx","../../node_modules/@radix-ui/react-icons/src/CheckIcon.tsx","../../node_modules/@radix-ui/react-icons/src/ChevronDownIcon.tsx","../../node_modules/@radix-ui/react-icons/src/ChevronRightIcon.tsx","../../node_modules/@radix-ui/react-icons/src/ChevronUpIcon.tsx","../../node_modules/@radix-ui/react-icons/src/DotFilledIcon.tsx","../../node_modules/@radix-ui/react-icons/src/QuestionMarkCircledIcon.tsx","../../node_modules/@radix-ui/react-icons/src/TextIcon.tsx","../../node_modules/lucide-react/dist/esm/lucide-react.js","../../node_modules/lucide-react/src/defaultAttributes.ts","../../node_modules/shared/src/utils.ts","../../node_modules/lucide-react/src/createLucideIcon.ts","../../node_modules/lucide-react/src/icons/calendar.ts","../../node_modules/lucide-react/src/icons/chevron-down.ts","../../node_modules/lucide-react/src/icons/copy-check.ts","../../node_modules/lucide-react/src/icons/divide.ts","../../node_modules/lucide-react/src/icons/dollar-sign.ts","../../node_modules/lucide-react/src/icons/list-todo.ts","../../node_modules/lucide-react/src/icons/percent.ts","../../src/components/spreadsheet/ui/indicators/corner-indicator.tsx","../../src/components/spreadsheet/ui/rows.tsx","../../src/components/spreadsheet/ui/cell.tsx","../../src/components/spreadsheet/ui/data-editor/index.tsx","../../src/components/spreadsheet/ui/data-editor/boolean.tsx","../../src/shared/ui/select.tsx","../../node_modules/@radix-ui/number/dist/packages/core/number/src/number.ts","../../node_modules/@radix-ui/react-collection/dist/packages/react/collection/src/Collection.tsx","../../node_modules/@radix-ui/react-direction/dist/packages/react/direction/src/Direction.tsx","../../node_modules/@radix-ui/react-focus-guards/dist/packages/react/focus-guards/src/FocusGuards.tsx","../../node_modules/@radix-ui/react-focus-scope/dist/packages/react/focus-scope/src/FocusScope.tsx","../../node_modules/@radix-ui/react-use-previous/dist/packages/react/use-previous/src/usePrevious.tsx","../../node_modules/aria-hidden/dist/es2015/index.js","../../node_modules/react-remove-scroll/dist/es2015/index.js","../../node_modules/react-remove-scroll/dist/es2015/Combination.js","../../node_modules/react-remove-scroll/dist/es2015/UI.js","../../node_modules/react-remove-scroll-bar/dist/es2015/constants.js","../../node_modules/use-callback-ref/dist/es2015/index.js","../../node_modules/use-callback-ref/dist/es2015/assignRef.js","../../node_modules/use-callback-ref/dist/es2015/useRef.js","../../node_modules/use-callback-ref/dist/es2015/useMergeRef.js","../../node_modules/react-remove-scroll/dist/es2015/medium.js","../../node_modules/use-sidecar/dist/es2015/index.js","../../node_modules/use-sidecar/dist/es2015/medium.js","../../node_modules/use-sidecar/dist/es2015/exports.js","../../node_modules/react-remove-scroll/dist/es2015/sidecar.js","../../node_modules/react-remove-scroll/dist/es2015/SideEffect.js","../../node_modules/react-remove-scroll-bar/dist/es2015/index.js","../../node_modules/react-remove-scroll-bar/dist/es2015/component.js","../../node_modules/react-style-singleton/dist/es2015/index.js","../../node_modules/react-style-singleton/dist/es2015/component.js","../../node_modules/react-style-singleton/dist/es2015/hook.js","../../node_modules/react-style-singleton/dist/es2015/singleton.js","../../node_modules/get-nonce/dist/es2015/index.js","../../node_modules/react-remove-scroll-bar/dist/es2015/utils.js","../../node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js","../../node_modules/react-remove-scroll/dist/es2015/handleScroll.js","../../node_modules/@radix-ui/react-select/dist/packages/react/select/src/Select.tsx","../../src/components/spreadsheet/ui/data-editor/date.tsx","../../src/components/spreadsheet/ui/data-editor/numeric.tsx","../../src/components/tmp/numeric.tsx","../../node_modules/react-number-format/dist/react-number-format.es.js","../../src/components/spreadsheet/ui/data-editor/select.tsx","../../src/components/spreadsheet/ui/data-editor/text.tsx","../../src/shared/lib/move-input-cursor-to-end.ts","../../src/shared/lib/read-text-from-clipboard.ts","../../src/components/spreadsheet/ui/indicators/row-indicator.tsx","../../src/components/spreadsheet/ui/start.tsx","../../src/components/spreadsheet/ui/toolbar.tsx","../../src/components/spreadsheet/ui/icons/add-row-icon.tsx","../../src/components/spreadsheet/ui/icons/remove-row-icon.tsx","../../src/shared/ui/button.tsx","../../node_modules/class-variance-authority/dist/index.mjs","../../node_modules/class-variance-authority/node_modules/clsx/dist/clsx.mjs","../../src/shared/ui/dropdown-menu.tsx","../../node_modules/@radix-ui/react-roving-focus/dist/packages/react/roving-focus/src/RovingFocusGroup.tsx","../../node_modules/@radix-ui/react-menu/dist/packages/react/menu/src/Menu.tsx","../../node_modules/@radix-ui/react-dropdown-menu/dist/packages/react/dropdown-menu/src/DropdownMenu.tsx"],"names":["__assign","size","useMemo","matrix","value","index","CLASS_PART_SEPARATOR","createClassUtils","config","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","getClassGroupId","className","classParts","split","length","shift","getGroupRecursive","getGroupIdForArbitraryProperty","getConflictingClassGroupIds","classGroupId","hasPostfixModifier","conflicts","classPartObject","currentClassPart","nextClassPartObject","nextPart","get","classGroupFromNextClassPart","slice","undefined","validators","classRest","join","find","validator","arbitraryPropertyRegex","test","arbitraryPropertyClassName","exec","property","substring","indexOf","theme","prefix","Map","prefixedClassGroupEntries","getPrefixedClassGroupEntries","Object","entries","classGroups","forEach","classGroup","processClassesRecursively","classDefinition","classPartObjectToEdit","getPart","isThemeGetter","push","key","path","currentClassPartObject","pathPart","has","set","func","classGroupEntries","map","prefixedClassGroup","fromEntries","createLruCache","maxCacheSize","cacheSize","cache","previousCache","update","IMPORTANT_MODIFIER","createSplitModifiers","separator","isSeparatorSingleCharacter","firstSeparatorCharacter","separatorLength","splitModifiers","modifiers","bracketDepth","modifierStart","postfixModifierPosition","currentCharacter","baseClassNameWithImportantModifier","hasImportantModifier","startsWith","baseClassName","maybePostfixModifierPosition","sortModifiers","sortedModifiers","unsortedModifiers","modifier","isArbitraryVariant","sort","createConfigUtils","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","classGroupsInConflict","Set","trim","originalClassName","Boolean","isTailwindClass","variantModifier","modifierId","reverse","filter","parsed","classId","add","group","twJoin","argument","resolvedValue","string","arguments","toValue","mix","k","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","reduce","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","result","callTailwindMerge","apply","fromTheme","themeGetter","arbitraryValueRegex","fractionRegex","stringLengths","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isLength","isNumber","isArbitraryLength","getIsArbitraryValue","isLengthOnly","Number","isNaN","isArbitraryNumber","isInteger","isPercent","endsWith","isArbitraryValue","isTshirtSize","sizeLabels","isArbitrarySize","isNever","isArbitraryPosition","imageLabels","isArbitraryImage","isImage","isArbitraryShadow","isShadow","isAny","label","testValue","getDefaultConfig","colors","spacing","blur","brightness","borderColor","borderRadius","borderSpacing","borderWidth","contrast","grayscale","hueRotate","invert","gap","gradientColorStops","gradientColorStopPositions","inset","margin","opacity","padding","saturate","scale","sepia","skew","space","translate","getOverscroll","getOverflow","getSpacingWithAutoAndArbitrary","getSpacingWithArbitrary","getLengthWithEmptyAndArbitrary","getNumberWithAutoAndArbitrary","getPositions","getLineStyles","getBlendModes","getAlign","getZeroAndEmpty","getBreaks","getNumber","getNumberAndArbitrary","aspect","container","columns","box","display","float","clear","isolation","object","overflow","overscroll","position","start","end","top","right","bottom","left","visibility","z","basis","flex","grow","shrink","order","col","span","row","justify","content","items","self","p","px","py","ps","pe","pt","pr","pb","pl","m","mx","my","ms","me","mt","mr","mb","ml","w","screen","h","text","font","tracking","leading","list","placeholder","decoration","indent","align","whitespace","break","hyphens","bg","repeat","from","via","to","rounded","border","divide","outline","ring","shadow","table","caption","transition","duration","ease","delay","animate","transform","rotate","origin","accent","appearance","cursor","caret","resize","scroll","snap","touch","select","fill","stroke","sr","twMerge","useEffect","jsx","height","useRef","_i","eventName","useCallback","useState","jsxs","difference","hasEntireColumns","composeEventHandlers","originalEventHandler","ourEventHandler","checkForDefaultPrevented","handleEvent","event","defaultPrevented","setRef","ref","current","composeRefs","refs","node","useComposedRefs","React","createContextScope","scopeName","createContextScopeDeps","defaultContexts","createContext","rootComponentName","defaultContext","BaseContext","Provider","props","context","Context","scope","values","children","useContext","consumerName","Error","displayName","createScope","scopeContexts","useScope","contexts","composeContextScopes","scopes","baseScope","scopeHooks","useComposedScopes","overrideScopes","nextScopes","scopeProps","currentScope","Slot","forwardedRef","slotProps","childrenArray","toArray","slottable","isSlottable","newElement","newChildren","child","count","only","SlotClone","mergeProps","Slottable","type","childProps","overrideProps","propName","slotPropValue","childPropValue","isHandler","args","NODES","Primitive","primitive","Node","primitiveProps","Comp","asChild","window","Symbol","for","dispatchDiscreteCustomEvent","target","ReactDOM","dispatchEvent","useCallbackRef","callback","callbackRef","useEscapeKeydown","onEscapeKeyDownProp","ownerDocument","globalThis","document","onEscapeKeyDown","handleKeyDown","addEventListener","removeEventListener","CONTEXT_UPDATE","POINTER_DOWN_OUTSIDE","FOCUS_OUTSIDE","originalBodyPointerEvents","DismissableLayerContext","layers","layersWithOutsidePointerEventsDisabled","branches","DismissableLayer","layerProps","setNode","force","composedRefs","Array","highestLayerWithOutsidePointerEventsDisabled","highestLayerWithOutsidePointerEventsDisabledIndex","isBodyPointerEventsDisabled","isPointerEventsEnabled","pointerDownOutside","usePointerDownOutside","isPointerDownOnBranch","some","branch","contains","onPointerDownOutside","onInteractOutside","onDismiss","focusOutside","useFocusOutside","isFocusInBranch","onFocusOutside","isHighestLayer","preventDefault","disableOutsidePointerEvents","body","style","pointerEvents","dispatchUpdate","delete","handleUpdate","onFocusCapture","onBlurCapture","onPointerDownCapture","handlePointerDownOutside","isPointerInsideReactTreeRef","handleClickRef","handlePointerDown","handleAndDispatchPointerDownOutsideEvent","handleAndDispatchCustomEvent","eventDetail","discrete","originalEvent","pointerType","once","timerId","setTimeout","clearTimeout","handleFocusOutside","isFocusInsideReactTreeRef","handleFocus","CustomEvent","name","handler","detail","bubbles","cancelable","useLayoutEffect","useReactId","toString","useId","deterministicId","id","setId","reactId","String","platform","max","offset","placements","sides","side","placement","x","y","min","getComputedStyle","timeoutId","flip","hide","arrow","limitShift","computePosition","data","useSize","element","setSize","width","offsetWidth","offsetHeight","resizeObserver","ResizeObserver","isArray","entry","borderSizeEntry","borderSize","observe","unobserve","POPPER_NAME","createPopperContext","createPopperScope","PopperProvider","usePopperContext","Popper","anchor","setAnchor","__scopePopper","ANCHOR_NAME","PopperAnchor","anchorProps","onAnchorChange","virtualRef","CONTENT_NAME","PopperContentProvider","useContentContext","PopperContent","collisionPadding","collisionPaddingProp","contentProps","setContent","setArrow","arrowSize","arrowWidth","arrowHeight","desiredPlacement","boundary","collisionBoundary","hasExplicitBoundaries","detectOverflowOptions","isNotNull","altBoundary","middlewareData","useFloating","strategy","whileElementsMounted","cleanup","autoUpdate","animationFrame","updatePositionStrategy","elements","reference","middleware","mainAxis","sideOffset","alignmentAxis","alignOffset","avoidCollisions","crossAxis","limiter","sticky","availableHeight","anchorWidth","anchorHeight","rects","contentStyle","floating","setProperty","availableWidth","floatingUIarrow","arrowPadding","transformOrigin","hideWhenDetached","placedSide","placedAlign","getSideAndAlignFromPlacement","handlePlaced","onPlaced","isPositioned","arrowX","arrowY","cannotCenterArrow","centerOffset","contentZIndex","setContentZIndex","zIndex","setFloating","floatingStyles","minWidth","dir","animation","referenceHidden","options","fn","isArrowHidden","noArrowAlign","center","arrowXCenter","arrowYCenter","Root","Anchor","Content","Portal","portalProps","createPortal","useStateMachine","initialState","machine","state","nextState","Presence","presence","usePresence","present","isPresent","forceMount","stylesRef","prevPresentRef","prevAnimationNameRef","send","mounted","UNMOUNT","ANIMATION_OUT","unmountSuspended","MOUNT","ANIMATION_END","unmounted","currentAnimationName","getAnimationName","styles","wasPresent","hasPresentChanged","prevAnimationName","isAnimating","handleAnimationEnd","isCurrentAnimation","includes","animationName","handleAnimationStart","useControllableState","onChange","uncontrolledProp","setUncontrolledProp","useUncontrolledState","isControlled","prop","handleChange","setValue","nextValue","setter","uncontrolledState","defaultProp","prevValueRef","VisuallyHidden","clip","whiteSpace","wordWrap","createTooltipContext","createTooltipScope","usePopperScope","PROVIDER_NAME","DEFAULT_DELAY_DURATION","TOOLTIP_OPEN","TooltipProviderContextProvider","useTooltipProviderContext","TooltipProvider","isOpenDelayed","setIsOpenDelayed","isPointerInTransitRef","skipDelayTimerRef","skipDelayTimer","__scopeTooltip","skipDelayDuration","inTransit","TOOLTIP_NAME","TooltipContextProvider","useTooltipContext","Tooltip","open","openProp","disableHoverableContent","disableHoverableContentProp","delayDuration","delayDurationProp","providerContext","popperScope","trigger","setTrigger","contentId","openTimerRef","wasOpenDelayedRef","setOpen","defaultOpen","onOpen","onClose","onOpenChange","stateAttribute","handleOpen","handleClose","handleDelayedOpen","TRIGGER_NAME","TooltipTrigger","triggerProps","onTriggerChange","isPointerDownRef","hasPointerMoveOpenedRef","handlePointerUp","onPointerMove","onTriggerEnter","onPointerLeave","onTriggerLeave","onPointerDown","onFocus","onBlur","onClick","PORTAL_NAME","PortalProvider","usePortalContext","TooltipContent","portalContext","TooltipContentHoverable","pointerGraceArea","setPointerGraceArea","onPointerInTransitChange","handleRemoveGraceArea","handleCreateGraceArea","hoverTarget","currentTarget","exitPoint","clientX","clientY","exitSide","getExitSideFromRect","getBoundingClientRect","paddedExitPoints","getPaddedExitPoints","hoverTargetPoints","getPointsFromRect","graceArea","getHull","handleTriggerLeave","handleContentLeave","handleTrackPointerGrace","pointerPosition","hasEnteredTarget","isPointerOutsideGraceArea","isPointInPolygon","VisuallyHiddenContentContextProvider","useVisuallyHiddenContentContext","isInside","TooltipContentImpl","ariaLabel","handleScroll","capture","point","rect","Math","abs","polygon","inside","i","j","xi","yi","xj","yj","intersect","points","newPoints","a","b","getHullPresorted","upperHull","q","r","pop","lowerHull","concat","Trigger","CaretSortIcon","color","viewBox","xmlns","d","fillRule","clipRule","CheckIcon","ChevronDownIcon","ChevronRightIcon","ChevronUpIcon","DotFilledIcon","QuestionMarkCircledIcon","TextIcon","forwardRef","createElement","clamp","createCollection","createCollectionContext","createCollectionScope","CollectionProviderImpl","useCollectionContext","collectionRef","itemMap","CollectionProvider","COLLECTION_SLOT_NAME","CollectionSlot","ITEM_SLOT_NAME","ITEM_DATA_ATTR","CollectionItemSlot","itemData","useCollection","getItems","collectionNode","orderedNodes","querySelectorAll","orderedItems","ItemSlot","DirectionContext","useDirection","localDir","globalDir","useFocusGuards","edgeGuards","insertAdjacentElement","createFocusGuard","remove","setAttribute","tabIndex","cssText","AUTOFOCUS_ON_MOUNT","AUTOFOCUS_ON_UNMOUNT","EVENT_OPTIONS","FocusScope","onMountAutoFocus","onMountAutoFocusProp","onUnmountAutoFocus","onUnmountAutoFocusProp","setContainer","lastFocusedElementRef","focusScope","paused","pause","resume","trapped","handleFocusIn","focus","handleFocusOut","relatedTarget","handleMutations","mutations","focusedElement","activeElement","mutation","removedNodes","mutationObserver","MutationObserver","childList","subtree","disconnect","focusScopesStack","previouslyFocusedElement","hasFocusedCandidate","mountEvent","focusFirst","removeLinks","getTabbableCandidates","unmountEvent","loop","isTabKey","altKey","ctrlKey","metaKey","first","last","getTabbableEdges","hasTabbableElementsInside","shiftKey","candidates","candidate","findVisible","nodes","walker","createTreeWalker","NodeFilter","SHOW_ELEMENT","acceptNode","isHiddenInput","tagName","disabled","hidden","FILTER_SKIP","FILTER_ACCEPT","nextNode","currentNode","isHidden","upTo","parentElement","isSelectableInput","HTMLInputElement","preventScroll","createFocusScopesStack","stack","activeFocusScope","arrayRemove","unshift","array","item","updatedArray","splice","usePrevious","previous","cbs","Container","SideCar","Style","OPEN_KEYS","SELECTION_KEYS","SELECT_NAME","Collection","createSelectContext","createSelectScope","SelectProvider","useSelectContext","SelectNativeOptionsProvider","useSelectNativeOptionsContext","Select","valueProp","required","__scopeSelect","valueNode","setValueNode","valueNodeHasChildren","setValueNodeHasChildren","direction","defaultValue","onValueChange","triggerPointerDownPosRef","isFormControl","closest","nativeOptionsSet","setNativeOptionsSet","nativeSelectKey","option","prev","optionsSet","SelectTrigger","isDisabled","searchRef","handleTypeaheadSearch","resetTypeahead","useTypeaheadSearch","search","enabledItems","currentItem","nextItem","findNextItem","shouldShowPlaceholder","hasPointerCapture","pointerId","releasePointerCapture","button","round","pageX","pageY","onKeyDown","isTypingAhead","isModifierKey","VALUE_NAME","SelectValue","valueProps","onValueNodeHasChildrenChange","hasChildren","onValueNodeChange","SelectIcon","iconProps","SelectPortal","SelectContent","fragment","setFragment","DocumentFragment","frag","CONTENT_MARGIN","SelectContentProvider","useSelectContentContext","SelectContentImpl","viewport","setViewport","selectedItem","setSelectedItem","selectedItemText","setSelectedItemText","setIsPositioned","firstValidItemFoundRef","hideOthers","firstItem","restItems","lastItem","PREVIOUSLY_FOCUSED_ELEMENT","scrollIntoView","block","scrollTop","scrollHeight","focusSelectedItem","pointerMoveDelta","handlePointerMove","close","itemRefCallback","isFirstValidItem","isSelectedItem","handleItemLeave","itemTextRefCallback","SelectPosition","SelectPopperPosition","SelectItemAlignedPosition","popperContentProps","onCloseAutoFocus","flexDirection","candidateNodes","currentElement","currentIndex","popperProps","contentContext","contentWrapper","setContentWrapper","shouldExpandOnScrollRef","shouldRepositionRef","triggerRect","contentRect","valueNodeRect","itemTextRect","itemTextOffset","leftDelta","minContentWidth","contentWidth","rightEdge","innerWidth","clampedLeft","rightDelta","leftEdge","clampedRight","innerHeight","itemsHeight","contentStyles","contentBorderTopWidth","parseInt","borderTopWidth","contentPaddingTop","paddingTop","contentBorderBottomWidth","borderBottomWidth","contentPaddingBottom","paddingBottom","fullContentHeight","minContentHeight","viewportStyles","viewportPaddingTop","viewportPaddingBottom","topEdgeToTriggerMiddle","triggerMiddleToBottomEdge","selectedItemHalfHeight","itemOffsetMiddle","offsetTop","contentTopToItemMiddle","itemMiddleToContentBottom","willAlignWithoutTopOverflow","isLastItem","viewportOffsetBottom","clientHeight","clampedTriggerMiddleToBottomEdge","isFirstItem","clampedTopEdgeToTriggerMiddle","minHeight","maxHeight","requestAnimationFrame","handleScrollButtonChange","boxSizing","SelectViewportProvider","useSelectViewportContext","VIEWPORT_NAME","SelectViewport","viewportProps","viewportContext","onViewportChange","prevScrollTopRef","__html","onScroll","scrolledBy","cssMinHeight","parseFloat","cssHeight","prevHeight","nextHeight","clampedNextHeight","heightDiff","justifyContent","GROUP_NAME","SelectGroupContextProvider","useSelectGroupContext","LABEL_NAME","SelectLabel","labelProps","groupContext","ITEM_NAME","SelectItemContextProvider","useSelectItemContext","SelectItem","textValue","textValueProp","itemProps","isSelected","setTextValue","isFocused","setIsFocused","textId","handleSelect","prevTextValue","textContent","onPointerUp","onItemLeave","ITEM_TEXT_NAME","SelectItemText","itemTextProps","itemContext","nativeOptionsContext","itemTextNode","setItemTextNode","onItemTextChange","nativeOption","onNativeOptionRemove","onNativeOptionAdd","ITEM_INDICATOR_NAME","SelectItemIndicator","itemIndicatorProps","SCROLL_UP_BUTTON_NAME","SelectScrollUpButton","canScrollUp","setCanScrollUp","onScrollButtonChange","SCROLL_DOWN_BUTTON_NAME","SelectScrollDownButton","canScrollDown","setCanScrollDown","maxScroll","ceil","SelectScrollButtonImpl","scrollIndicatorProps","autoScrollTimerRef","clearAutoScrollTimer","clearInterval","activeItem","flexShrink","setInterval","onAutoScroll","SelectSeparator","separatorProps","BubbleSelect","selectProps","prevValue","selectProto","HTMLSelectElement","prototype","descriptor","getOwnPropertyDescriptor","Event","call","onSearchChange","handleSearchChange","timerRef","updateSearch","isRepeated","every","char","normalizedSearch","currentItemIndex","wrappedItems","wrapArray","excludeCurrentItem","v","toLowerCase","startIndex","_","Value","Icon","Viewport","Label","Item","ItemText","ItemIndicator","ScrollUpButton","ScrollDownButton","Separator","__rest","SourceType","format","removeFormatting","valueIsNumericString","newValues","getCaretBoundary","formattedValue","numAsString","currentCaretPosition","useIsomorphicLayoutEffect","hasNegation","_value","waitCapToOnBlur","clsx","ENTRY_FOCUS","createRovingFocusGroupContext","createRovingFocusGroupScope","RovingFocusProvider","useRovingFocusContext","RovingFocusGroup","__scopeRovingFocusGroup","RovingFocusGroupImpl","currentTabStopId","currentTabStopIdProp","groupProps","setCurrentTabStopId","defaultCurrentTabStopId","onCurrentTabStopIdChange","isTabbingBackOut","setIsTabbingBackOut","handleEntryFocus","onEntryFocus","isClickFocusRef","focusableItemsCount","setFocusableItemsCount","tabStopId","prevCount","orientation","onMouseDown","isKeyboardFocus","entryFocusEvent","focusable","active","candidateItems","RovingFocusGroupItem","autoId","isCurrentTabStop","onFocusableItemRemove","onFocusableItemAdd","onItemFocus","onItemShiftTab","focusIntent","getFocusIntent","MAP_KEY_TO_FOCUS_INTENT","ArrowLeft","ArrowUp","ArrowRight","ArrowDown","PageUp","Home","PageDown","End","getDirectionAwareKey","FIRST_KEYS","LAST_KEYS","FIRST_LAST_KEYS","SUB_OPEN_KEYS","ltr","rtl","SUB_CLOSE_KEYS","MENU_NAME","createMenuContext","createMenuScope","useRovingFocusGroupScope","MenuProvider","useMenuContext","MenuRootProvider","useMenuRootContext","Menu","modal","__scopeMenu","isUsingKeyboardRef","handleOpenChange","handlePointer","MenuAnchor","MenuPortal","MenuContentProvider","useMenuContentContext","MenuContent","rootContext","MenuRootContentModal","MenuRootContentNonModal","MenuContentImpl","rovingFocusGroupScope","currentItemId","setCurrentItemId","contentRef","onContentChange","pointerGraceTimerRef","pointerGraceIntentRef","pointerDirRef","lastPointerXRef","ScrollLockWrapper","disableOutsideScroll","RemoveScroll","scrollLockWrapperProps","as","allowPinchZoom","currentMatch","nextMatch","getNextMatch","newItem","isPointerMovingToSubmenu","isMovingTowards","isPointerInGraceArea","area","intent","trapFocus","onOpenAutoFocus","getOpenState","isKeyDownInside","isCharacterKey","whenMouse","pointerXHasChanged","newDir","MenuLabel","ITEM_SELECT","MenuItem","menuItem","itemSelectEvent","onSelect","click","MenuItemImpl","setTextContent","onItemEnter","MenuCheckboxItem","checkboxItemProps","isIndeterminate","checked","getCheckedState","onCheckedChange","RADIO_GROUP_NAME","RadioGroupProvider","useRadioGroupContext","RADIO_ITEM_NAME","MenuRadioItem","radioItemProps","ItemIndicatorProvider","useItemIndicatorContext","MenuItemIndicator","indicatorContext","MenuSeparator","SUB_NAME","MenuSubProvider","useMenuSubContext","SUB_TRIGGER_NAME","MenuSubTrigger","subContext","onPointerGraceIntentChange","clearOpenTimer","pointerGraceTimer","triggerId","dataset","rightSide","bleed","contentNearEdge","contentFarEdge","SUB_CONTENT_NAME","MenuSubContent","subContentProps","isCloseKey","currentMatchIndex","wrappedValues","excludeCurrentMatch","cursorPos","CheckboxItem","RadioItem","SubTrigger","SubContent","DROPDOWN_MENU_NAME","createDropdownMenuContext","createDropdownMenuScope","useMenuScope","DropdownMenuProvider","useDropdownMenuContext","DropdownMenu","menuScope","__scopeDropdownMenu","triggerRef","prevOpen","DropdownMenuTrigger","onOpenToggle","DropdownMenuPortal","DropdownMenuContent","hasInteractedOutsideRef","ctrlLeftClick","isRightClick","DropdownMenuLabel","DropdownMenuItem","DropdownMenuCheckboxItem","DropdownMenuRadioItem","DropdownMenuItemIndicator","DropdownMenuSeparator","DropdownMenuSubTrigger","subTriggerProps","DropdownMenuSubContent"],"mappings":"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","sourcesContent":["// Shim globals in esm bundle\nimport { fileURLToPath } from 'url'\nimport path from 'path'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n function next() {\n while (env.stack.length) {\n var rec = env.stack.pop();\n try {\n var result = rec.dispose && rec.dispose.call(rec.value);\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n catch (e) {\n fail(e);\n }\n }\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n};\n","import { Spreadsheet } from '@/src/components/spreadsheet/ui';\nimport '@/src/shared/styles/globals.css';\n\nexport const CapLink = {\n Spreadsheet,\n};\n","import type { Props } from '@/src/components/spreadsheet/model/spreadsheet';\nimport { Container } from '@/src/components/spreadsheet/ui/containers/index';\nimport { SpreadsheetContextProvider } from '@/src/components/spreadsheet/ui/context';\nimport { Header } from '@/src/components/spreadsheet/ui/header';\nimport { Rows } from '@/src/components/spreadsheet/ui/rows';\nimport { Start } from '@/src/components/spreadsheet/ui/start';\nimport { Toolbar } from '@/src/components/spreadsheet/ui/toolbar';\n\nexport function Spreadsheet(props: Props) {\n const { className, ...rest } = props;\n\n return (\n <SpreadsheetContextProvider {...rest}>\n <Container.Root className={className}>\n <Toolbar />\n\n <Container.Matrix>\n <Start className=\"absolute z-50\" />\n <Header />\n <Rows />\n </Container.Matrix>\n </Container.Root>\n </SpreadsheetContextProvider>\n );\n}\n","import { Matrix } from '@/src/components/spreadsheet/ui/containers/matrix';\nimport { Root } from '@/src/components/spreadsheet/ui/containers/root';\n\nexport const Container = {\n Matrix,\n Root,\n};\n","import { useSpreadsheet } from '@/src/components/spreadsheet/lib/use-spreadsheet';\nimport * as Spreadsheet from '@/src/components/spreadsheet/model/spreadsheet';\nimport { cn } from '@/src/shared/lib/cn';\nimport { type PropsWithChildren, useEffect, useMemo, useRef } from 'react';\n\ntype MatrixProps = PropsWithChildren<{\n className?: string;\n}>;\n\nexport function Matrix(props: MatrixProps) {\n const { children, className } = props;\n const { size, staticRows, setContainerDimensions } = useSpreadsheet();\n\n const containerRef = useRef<null | HTMLDivElement>(null);\n\n const height = useMemo(\n () => size.rows * Spreadsheet.CELL_INITIAL_HEIGHT + Spreadsheet.COLUMN_TITLE_INITIAL_HEIGHT,\n [size.rows],\n );\n\n useEffect(() => {\n const containerElement = containerRef.current;\n\n if (!containerElement) return;\n\n const resizeObserver = new ResizeObserver((entries) => {\n const entry = entries[0];\n\n if (entry) {\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n setContainerDimensions({ height, width });\n }\n });\n\n resizeObserver.observe(containerElement);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [setContainerDimensions]);\n\n return (\n <div\n ref={containerRef}\n className={cn(\n 'relative w-full border border-t-0 border-r-0',\n size.rows >= 7 ? 'border-b-0' : 'border-b',\n staticRows ? `${height}px border-b-0` : 'min-h-[260px]',\n className,\n )}\n >\n {children}\n </div>\n );\n}\n","import { SpreadsheetContext } from '@/src/components/spreadsheet/ui/context';\nimport { useContext } from 'react';\n\nexport function useSpreadsheet() {\n const context = useContext(SpreadsheetContext);\n\n if (!context) {\n throw new Error('useSpreadsheet has to be used within <SpreadsheetContext.Provider>');\n }\n\n return context;\n}\n","import { indexedAlphabet } from '@/src/components/spreadsheet/lib/indexed-alphabet';\nimport { matrixConverter } from '@/src/components/spreadsheet/lib/matrix-output';\nimport { normalizeValue } from '@/src/components/spreadsheet/lib/normalize-value';\nimport * as Matrix from '@/src/components/spreadsheet/model/matrix';\nimport type * as Spreadsheet from '@/src/components/spreadsheet/model/spreadsheet';\nimport {\n COLUMN_INITIAL_WIDTH,\n COLUMN_MAX_WIDTH,\n COLUMN_MIN_WIDTH,\n type Column,\n type Dimensions,\n type InitialColumn,\n} from '@/src/components/spreadsheet/model/spreadsheet';\nimport { nanoid } from 'nanoid';\nimport { type MouseEvent, createContext, useCallback, useEffect, useMemo, useState } from 'react';\n\nlet timeoutId: ReturnType<typeof setTimeout>;\n\nexport const SpreadsheetContext = createContext<Spreadsheet.Context | null>(null);\n\nexport function SpreadsheetContextProvider(props: Spreadsheet.ContextProvider) {\n const {\n children,\n startingColumns,\n matrix: startingMatrix = [],\n staticRows,\n onMatrixChange,\n } = props;\n\n const [matrix, setMatrix] = useState(startingMatrix);\n const [columns, setColumns] = useState<Column[]>(() => setupColumns(startingColumns));\n const [pointRange, setPointRange] = useState<Matrix.PointRange | null>(null);\n const [containerDimensions, setContainerDimensions] = useState<Dimensions>({\n height: 0,\n width: 0,\n });\n\n const [highlightLastRow, setHighlightLastRow] = useState(false);\n\n /** Function called to highlight when user add a new row */\n const highlight = useCallback((ms = 2000) => {\n setHighlightLastRow(true);\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n timeoutId = setTimeout(() => setHighlightLastRow(false), ms);\n }, []);\n\n const columnsCount = useMemo(\n () => Matrix.getColumnsCount(matrix) || columns.length,\n [matrix, columns.length],\n );\n const size = useMemo(() => Matrix.getSize(matrix), [matrix]);\n const emptySize = useMemo(() => size.rows === 0, [size.rows]);\n\n const hasSomeEntireRow = useMemo(\n () => !!(pointRange && Matrix.hasEntireColumns({ matrix, pointRange })),\n [pointRange, matrix],\n );\n\n const onConvertedMatrixChange = useCallback(\n (matrix: Matrix.Matrix<unknown>) => {\n if (onMatrixChange) {\n const newMatrix = matrixConverter({ columns, matrix });\n onMatrixChange(newMatrix);\n }\n },\n [onMatrixChange, columns],\n );\n\n const onPaste = useCallback(\n async (point: Matrix.Point) => {\n const { state } = await navigator.permissions.query({\n name: 'clipboard-read' as PermissionName,\n });\n\n if (state === 'denied') {\n console.log('denied');\n return;\n }\n\n const value = await navigator.clipboard.readText();\n\n const mB = Matrix.parseString(value);\n\n /** Overlaps mA and mB, also prevent putting values in readonly columns */\n const overlapped = Matrix.overlap({ mA: matrix, mB, point }).map((row) =>\n row.map((columnValue, column) => (columns[column]?.readonly ? '' : columnValue)),\n );\n\n const normalized = overlapped.map((row) =>\n row.map((columnValue, column) =>\n normalizeValue({ value: columnValue, dataEditorType: columns[column]?.dataEditorType }),\n ),\n );\n\n const nextColumns = normalized.map((row) => row.slice(0, startingColumns.length));\n const nextMatrix = staticRows ? nextColumns.slice(0, matrix.length) : nextColumns;\n\n setMatrix(nextMatrix);\n onConvertedMatrixChange(nextMatrix);\n },\n [columns, matrix, startingColumns.length, onConvertedMatrixChange, staticRows],\n );\n\n const onChange = useCallback(\n (params: { data: unknown; point: Matrix.Point }) => {\n const { data, point } = params;\n const { column, row } = point;\n\n const nextMatrix = structuredClone(matrix);\n nextMatrix[row][column] = data;\n\n setMatrix(nextMatrix);\n onConvertedMatrixChange(nextMatrix);\n },\n [matrix, onConvertedMatrixChange],\n );\n\n const onRemoveRow = useCallback(() => {\n if (pointRange && !staticRows) {\n const rowStart = pointRange.start.row;\n const rowEnd = pointRange.end.row;\n const delta = rowEnd - rowStart + 1;\n\n if (!hasSomeEntireRow) return;\n\n const confirmedMessage =\n delta > 1\n ? `Você irá excluir ${delta} linhas, deseja continuar?\\nLinha N° ${rowStart + 1} até N° ${\n rowEnd + 1\n }`\n : `Você irá excluir a linha N° ${rowStart + 1}, deseja continuar?`;\n\n const confirmed = confirm(confirmedMessage);\n\n if (!confirmed) return;\n\n const nextMatrix = matrix.filter((row, index) => index < rowStart || index > rowEnd);\n\n setPointRange(null);\n setMatrix(nextMatrix);\n onConvertedMatrixChange(nextMatrix);\n }\n }, [matrix, pointRange, staticRows, hasSomeEntireRow, onConvertedMatrixChange]);\n\n const onSelectRow = useCallback(\n (row: number, event?: MouseEvent) => {\n if (pointRange && event && event.shiftKey) {\n const normalizedStart = row < pointRange.start.row ? row : pointRange.start.row;\n const normalizedEnd = row < pointRange.start.row ? pointRange.start.row : row;\n\n const newPointRange: Matrix.PointRange = {\n start: { row: normalizedStart, column: 0 },\n end: { row: normalizedEnd, column: columnsCount },\n };\n\n return setPointRange(newPointRange);\n }\n\n setPointRange({ start: { row, column: 0 }, end: { row, column: columnsCount } });\n },\n [columnsCount, pointRange],\n );\n\n const onSelectCell = useCallback(\n (point: Matrix.Point) => {\n if (point.row === pointRange?.start.row && point.column === pointRange.start.column) return;\n setPointRange({ start: point, end: point });\n },\n [pointRange?.start.row, pointRange?.start.column],\n );\n\n const isCellSelected = useCallback(\n (point: Matrix.Point) => {\n return !!(pointRange && Matrix.hasPointInRange(pointRange, point));\n },\n [pointRange],\n );\n\n const onColumnResize = useCallback((params: { width: number; columnId: string }) => {\n const { columnId, width } = params;\n\n let newWidth = width;\n\n if (width > COLUMN_MAX_WIDTH) {\n newWidth = COLUMN_MAX_WIDTH;\n }\n\n if (width < COLUMN_MIN_WIDTH) {\n newWidth = COLUMN_MIN_WIDTH;\n }\n\n /** When X matches the column to be resized, it returns new width,\n * otherwise returns previous column value */\n setColumns((previous) =>\n previous.map((column) => (column.id === columnId ? { ...column, width: newWidth } : column)),\n );\n }, []);\n\n const onInsertNewRow = useCallback(() => {\n if (staticRows) return;\n\n const nextMatrix = [...structuredClone(matrix), new Array(columnsCount).fill('')];\n\n setMatrix(nextMatrix);\n onConvertedMatrixChange(nextMatrix);\n\n highlight();\n }, [staticRows, matrix, columnsCount, highlight, onConvertedMatrixChange]);\n\n const onSelectSpreadsheet = useCallback(() => {\n const start: Matrix.Point = { column: 0, row: 0 };\n const end: Matrix.Point = { column: size.columns, row: size.rows - 1 };\n setPointRange({ start, end });\n }, [size]);\n\n const onColumnVisibilityChange = useCallback((columnId: string) => {\n setColumns((previous) =>\n previous.map((column) =>\n column.id === columnId ? { ...column, visible: !column.visible } : column,\n ),\n );\n }, []);\n\n useEffect(() => {\n setMatrix(startingMatrix);\n }, [startingMatrix]);\n\n useEffect(() => {\n setColumns(() => setupColumns(startingColumns));\n }, [startingColumns]);\n\n const value: Spreadsheet.Context = useMemo(\n () => ({\n size,\n matrix,\n columns,\n emptySize,\n staticRows,\n hasSomeEntireRow,\n highlightLastRow,\n\n pointRange,\n setPointRange,\n\n containerDimensions,\n setContainerDimensions,\n\n onPaste,\n onChange,\n onRemoveRow,\n onSelectRow,\n onSelectCell,\n isCellSelected,\n onInsertNewRow,\n onColumnResize,\n onSelectSpreadsheet,\n onColumnVisibilityChange,\n }),\n [\n size,\n matrix,\n columns,\n emptySize,\n staticRows,\n hasSomeEntireRow,\n highlightLastRow,\n\n pointRange,\n containerDimensions,\n\n onPaste,\n onChange,\n onRemoveRow,\n onSelectRow,\n onSelectCell,\n isCellSelected,\n onInsertNewRow,\n onColumnResize,\n onSelectSpreadsheet,\n onColumnVisibilityChange,\n ],\n );\n\n return <SpreadsheetContext.Provider value={value}>{children}</SpreadsheetContext.Provider>;\n}\n\n/** Spreadsheet columns internal states and values setup function */\nfunction setupColumns(columns: InitialColumn[]): Column[] {\n return columns.map((column, index) => ({\n ...column,\n id: `spreadsheet__column__id__${nanoid()}`,\n alphabetLetter: indexedAlphabet(index + 1),\n position: index,\n width: column.width || COLUMN_INITIAL_WIDTH,\n visible: true,\n }));\n}\n","export function indexedAlphabet(columns: number): string {\n if (columns <= 0) {\n return '';\n }\n\n const asciiA = 'A'.charCodeAt(0);\n const remainder = (columns - 1) % 26;\n const quotient = Math.floor((columns - 1) / 26);\n\n return indexedAlphabet(quotient) + String.fromCharCode(asciiA + remainder);\n}\n","import type { Matrix } from '@/src/components/spreadsheet/model/matrix';\nimport type { Column, DataEditorType } from '@/src/components/spreadsheet/model/spreadsheet';\n\nexport namespace MatrixConverter {\n export type Input = {\n columns: Column[];\n matrix: Matrix<unknown>;\n };\n\n export type Output = {\n value: unknown;\n dataEditorType: DataEditorType;\n convertedValue?: {\n Boolean?: boolean;\n Integer?: number;\n Currency?: number;\n Decimal?: number;\n Float?: number;\n Percentage?: number;\n Date?: number;\n Select?: string;\n };\n };\n}\n\nexport function matrixConverter(params: MatrixConverter.Input): MatrixConverter.Output[][] {\n const { columns, matrix } = params;\n\n return matrix.map((rowValue) =>\n rowValue.map((columnValue, column) => {\n const dataEditorType = columns[column].dataEditorType;\n const selectItems = columns[column].settings?.select?.items || [];\n\n const newColumn: MatrixConverter.Output = { value: columnValue, dataEditorType };\n\n if (dataEditorType === 'Boolean') {\n newColumn.convertedValue = { Boolean: JSON.parse(columnValue as string) };\n }\n\n if (dataEditorType === 'Integer') {\n newColumn.convertedValue = { Integer: Number(columnValue as string) };\n }\n\n if (dataEditorType === 'Currency') {\n newColumn.convertedValue = { Currency: Number(columnValue as string) };\n }\n\n if (dataEditorType === 'Decimal') {\n newColumn.convertedValue = { Decimal: Number(columnValue as string) };\n }\n\n if (dataEditorType === 'Float') {\n newColumn.convertedValue = { Float: Number(columnValue as string) };\n }\n\n if (dataEditorType === 'Percentage') {\n newColumn.convertedValue = { Percentage: Number(columnValue as string) };\n }\n\n if (dataEditorType === 'Date') {\n newColumn.convertedValue = { Date: Number(columnValue as string) };\n }\n\n if (dataEditorType === 'Select') {\n newColumn.convertedValue = { Select: columnValue as string };\n }\n\n return newColumn;\n }),\n );\n}\n","import { dateFormatter } from '@/src/components/spreadsheet/lib/date-formatter';\nimport * as Spreadsheet from '@/src/components/spreadsheet/model/spreadsheet';\n\nexport function normalizeValue(params: {\n value: unknown;\n dataEditorType: Spreadsheet.DataEditorType;\n}) {\n const { value, dataEditorType } = params;\n\n if (dataEditorType === 'Date') {\n return dateFormatter(value as string) || '';\n }\n\n if (dataEditorType === 'Boolean') {\n return value === true ? 'true' : 'false';\n }\n\n const isNumeric = Spreadsheet.NUMERIC_DATA_EDITOR_TYPES.includes(dataEditorType);\n\n if (isNumeric) {\n return Number.isNaN(Number(value)) ? '' : value;\n }\n\n return value;\n}\n","export function dateFormatter(value: string) {\n try {\n if (value.includes('/'))\n return new Date(value.split('/').reverse().join('-'))\n .toISOString()\n .split('T')[0]\n .replace('+', '');\n\n return new Date(value).toISOString().split('T')[0].replace('+', '');\n } catch (error) {\n return null;\n }\n}\n","import type { MatrixConverter } from '@/src/components/spreadsheet/lib/matrix-output';\nimport type * as Matrix from '@/src/components/spreadsheet/model/matrix';\nimport type { MouseEvent, PropsWithChildren } from 'react';\n\n/** Spreadsheet column initial width */\nexport const COLUMN_INITIAL_WIDTH = 160;\n/** Spreadsheet column max width */\nexport const COLUMN_MAX_WIDTH = 320;\n/** Spreadsheet column min width */\nexport const COLUMN_MIN_WIDTH = 160;\n\n/** Spreadsheet column title initial height */\nexport const COLUMN_TITLE_INITIAL_HEIGHT = 36;\n/** Spreadsheet cell initial height */\nexport const CELL_INITIAL_HEIGHT = 26;\n\nexport const NUMERIC_DATA_EDITOR_TYPES: DataEditorType[] = [\n 'Decimal',\n 'Float',\n 'Integer',\n 'Percentage',\n 'Currency',\n];\n\n/** Dimensions of an element */\nexport type Dimensions = {\n /** The element's width in pixels */\n width: number;\n /** The element's height in pixels */\n height: number;\n};\n\n/** Select component item props */\nexport type SelectItem = { text: string; value: string };\n\n/** The mode of the cell */\nexport type Mode = 'edit' | 'readonly' | 'view';\n\n/** Cell data editor type */\nexport type DataEditorType =\n | 'Boolean'\n | 'String'\n | 'Select'\n | 'Date'\n | 'Integer'\n | 'Currency'\n | 'Float'\n | 'Decimal'\n | 'Percentage';\n\nexport type DataEditor = {\n /** Data editor current value */\n value?: unknown;\n /** Whether data editor data changes */\n onChange?: ({ data, point }: { data: unknown; point?: Matrix.Point }) => void;\n /** Whether user paste any value on data editor */\n onPaste?: (point?: Matrix.Point) => void;\n /** Whether user blur current data editor */\n onBlur?: () => void;\n /** Whether user clicks current data editor */\n onClick?: <T>(e: MouseEvent<T>) => void;\n /** Cell mode setter */\n setMode?: (mode: Mode) => void;\n\n selected?: boolean;\n\n column: Column;\n};\n\nexport type DataViewer = {\n /** Data viewer current value */\n value?: unknown;\n column: Column;\n\n selected?: boolean;\n};\n\n/** Spreadsheet column meta data and settings */\nexport type Column = {\n /** Column identifier */\n id: string;\n /** Column name to be displayed */\n name: string;\n /** Column tooltip description */\n description?: string;\n /** Column width */\n width: number;\n /** Whether column is visible to user */\n visible?: boolean;\n /** Column position */\n position: number;\n /** Column data editor type */\n dataEditorType: DataEditorType;\n /** Alphabet letter by position */\n alphabetLetter?: string;\n /** Whether column is readonly to user */\n readonly?: boolean;\n\n /** Column settings */\n settings?: {\n select?: {\n items: Array<SelectItem>;\n };\n\n numeric?: {\n min?: number;\n max?: number;\n allowNegative?: boolean;\n roundingRule?: string;\n decimalPlaces?: number;\n currency?: string;\n };\n\n string?: {\n maskData?: string;\n maskVisible?: boolean;\n charLimit?: string;\n };\n };\n};\n\n/** Initial column params before spreadsheet internal setup */\nexport type InitialColumn = Pick<\n Column,\n Exclude<keyof Column, 'id' | 'alphabetLetter' | 'position' | 'width'>\n> & {\n width?: number;\n};\n\n/** Spreadsheet Cell component */\nexport type Cell = {\n /** The cell value */\n value?: unknown;\n /** Point coordinates of the cell */\n coordinates: Matrix.Point;\n};\n\nexport type Props = {\n matrix: Matrix.Matrix<unknown>;\n onMatrixChange?: (matrix: MatrixConverter.Output[][]) => void;\n startingColumns: InitialColumn[];\n /** Defines if user can add or delete rows */\n staticRows?: boolean;\n className?: string;\n};\n\nexport type Context = {\n size: Matrix.Size;\n matrix: Matrix.Matrix<unknown>;\n columns: Column[];\n emptySize: boolean;\n /** Defines if user can add or delete rows */\n staticRows?: boolean;\n hasSomeEntireRow?: boolean;\n /** Whether last row is highlighted */\n highlightLastRow?: boolean;\n\n pointRange: Matrix.PointRange | null;\n setPointRange: (pointRange: Matrix.PointRange | null) => void;\n\n containerDimensions: Dimensions;\n setContainerDimensions: (dimensions: Dimensions) => void;\n\n onPaste: (point: Matrix.Point) => void;\n onChange: (params: { data: unknown; point: Matrix.Point }) => void;\n onRemoveRow: () => void;\n onSelectRow: (row: number, event?: MouseEvent) => void;\n onSelectCell: (point: Matrix.Point) => void;\n isCellSelected: (point: Matrix.Point) => boolean;\n onInsertNewRow: () => void;\n onColumnResize: (params: { width: number; columnId: string }) => void;\n onSelectSpreadsheet: () => void;\n onColumnVisibilityChange: (columnId: string) => void;\n};\n\nexport type ContextProvider = Omit<PropsWithChildren<Props>, 'className'>;\n","/** A cell cordinates in matrix */\nexport type Point = {\n row: number;\n column: number;\n};\n\n/** Range between two points. */\nexport type PointRange = {\n /** The top-left point */\n start: Point;\n /** The bottom-right point */\n end: Point;\n};\n\n/** Counts of the rows and column in a matrix */\nexport type Size = {\n /** Count of the rows in the matrix */\n rows: number;\n /** Count of the columns in the matrix */\n columns: number;\n};\n\nexport type Matrix<T> = Array<Array<T | undefined>>;\n\n/** Creates an empty matrix with given rows and columns */\nexport function createEmpty<T>(size: Size, fill?: T): Matrix<T> {\n return new Array(size.rows).fill(undefined).map(() => new Array(size.columns).fill(fill));\n}\n\n/** Gets the count of rows of given matrix */\nexport function getRowsCount(matrix: Matrix<unknown>) {\n return matrix?.length;\n}\n\n/** Gets the count of columns of given matrix */\nexport function getColumnsCount(matrix: Matrix<unknown>) {\n const firstRow = matrix?.[0];\n return firstRow ? firstRow.length : 0;\n}\n\n/** Gets the count of rows and columns of given matrix */\nexport function getSize(matrix: Matrix<unknown>): Size {\n return {\n columns: getColumnsCount(matrix),\n rows: getRowsCount(matrix),\n };\n}\n\n/** Gets the value at row and column of matrix. */\nexport function getPoint<T>(params: { point: Point; matrix: Matrix<T> }) {\n const { point, matrix } = params;\n\n const columns = matrix[point.row];\n\n if (columns === undefined) {\n return undefined;\n }\n\n return columns[point.column];\n}\n\n/** Checks if the source and target point are equal */\nexport function isSamePoint(source: Point, target: Point) {\n return source.column === target.column && source.row === target.row;\n}\n\n/** Returns whether given point exists in given range */\nexport function hasPointInRange(pointRange: PointRange, point: Point): boolean {\n return (\n point.row >= pointRange.start.row &&\n point.column >= pointRange.start.column &&\n point.row <= pointRange.end.row &&\n point.column <= pointRange.end.column\n );\n}\n\n/** Determines whether all columns are selected */\nexport function hasEntireColumns(params: { matrix: Matrix<unknown>; pointRange: PointRange }) {\n const { matrix, pointRange } = params;\n return pointRange.start.column === 0 && pointRange.end.column === getColumnsCount(matrix);\n}\n\n/** Determines which row is entirely selected in given selection */\nexport function hasEntireRows(params: {\n matrix: Matrix<unknown>;\n pointRange: PointRange;\n row: number;\n}) {\n const { matrix, pointRange, row } = params;\n return (\n row >= pointRange.start.row &&\n row <= pointRange.end.row &&\n hasEntireColumns({ matrix, pointRange })\n );\n}\n\n/** Converts string value into an matrix */\nexport function parseString(value: string): Matrix<unknown> {\n return value.split('\\n').map((row) => row.split('\\t'));\n}\n\n/**\n * Overlaps a given Matrix B (mB) starting in a specific point into a given Matrix A (mA)\n * Matrix B (mB) always has priority when replacing cell values\n */\nexport function overlap(params: {\n mA: Matrix<unknown>;\n mB: Matrix<unknown>;\n point: Point;\n}): Matrix<unknown> {\n const { mA, mB, point = { column: 0, row: 0 } } = params;\n\n const mASize = getSize(mA);\n const mBSize = getSize(mB);\n\n const fillRows = point.row + mBSize.rows > mASize.rows;\n const fillColumns = point.column + mBSize.columns > mBSize.columns;\n\n const rows = fillRows ? point.row + mBSize.rows : mASize.rows;\n const columns = fillColumns ? point.column + mBSize.columns : mASize.columns;\n\n const mC = createEmpty({ rows, columns });\n\n for (let y = 0; y < mASize.rows; y += 1) {\n for (let x = 0; x < mASize.columns; x += 1) {\n mC[y][x] = mA[y][x];\n }\n }\n\n for (let y = 0; y < mBSize.rows; y += 1) {\n for (let x = 0; x < mBSize.columns; x += 1) {\n mC[y + point.row][x + point.column] = mB[y][x];\n }\n }\n\n return mC;\n}\n","import { webcrypto as crypto } from 'node:crypto'\nimport { urlAlphabet as scopedUrlAlphabet } from './url-alphabet/index.js'\nexport { urlAlphabet } from './url-alphabet/index.js'\nconst POOL_SIZE_MULTIPLIER = 128\nlet pool, poolOffset\nfunction fillPool(bytes) {\n if (!pool || pool.length < bytes) {\n pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER)\n crypto.getRandomValues(pool)\n poolOffset = 0\n } else if (poolOffset + bytes > pool.length) {\n crypto.getRandomValues(pool)\n poolOffset = 0\n }\n poolOffset += bytes\n}\nexport function random(bytes) {\n fillPool((bytes -= 0))\n return pool.subarray(poolOffset - bytes, poolOffset)\n}\nexport function customRandom(alphabet, defaultSize, getRandom) {\n let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 1\n let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let i = step\n while (i--) {\n id += alphabet[bytes[i] & mask] || ''\n if (id.length === size) return id\n }\n }\n }\n}\nexport function customAlphabet(alphabet, size = 21) {\n return customRandom(alphabet, size, random)\n}\nexport function nanoid(size = 21) {\n fillPool((size -= 0))\n let id = ''\n for (let i = poolOffset - size; i < poolOffset; i++) {\n id += scopedUrlAlphabet[pool[i] & 63]\n }\n return id\n}\n","export const urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n","import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","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;","import {\n ClassGroup,\n ClassValidator,\n Config,\n GenericClassGroupIds,\n GenericConfig,\n GenericThemeGroupIds,\n ThemeGetter,\n ThemeObject,\n} from './types'\n\nexport interface ClassPartObject {\n nextPart: Map<string, ClassPartObject>\n validators: ClassValidatorObject[]\n classGroupId?: GenericClassGroupIds\n}\n\ninterface ClassValidatorObject {\n classGroupId: GenericClassGroupIds\n validator: ClassValidator\n}\n\nconst CLASS_PART_SEPARATOR = '-'\n\nexport function createClassUtils(config: GenericConfig) {\n const classMap = createClassMap(config)\n const { conflictingClassGroups, conflictingClassGroupModifiers } = config\n\n function getClassGroupId(className: string) {\n const classParts = className.split(CLASS_PART_SEPARATOR)\n\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.\n if (classParts[0] === '' && classParts.length !== 1) {\n classParts.shift()\n }\n\n return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className)\n }\n\n function getConflictingClassGroupIds(\n classGroupId: GenericClassGroupIds,\n hasPostfixModifier: boolean,\n ) {\n const conflicts = conflictingClassGroups[classGroupId] || []\n\n if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {\n return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]!]\n }\n\n return conflicts\n }\n\n return {\n getClassGroupId,\n getConflictingClassGroupIds,\n }\n}\n\nfunction getGroupRecursive(\n classParts: string[],\n classPartObject: ClassPartObject,\n): GenericClassGroupIds | undefined {\n if (classParts.length === 0) {\n return classPartObject.classGroupId\n }\n\n const currentClassPart = classParts[0]!\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart)\n const classGroupFromNextClassPart = nextClassPartObject\n ? getGroupRecursive(classParts.slice(1), nextClassPartObject)\n : undefined\n\n if (classGroupFromNextClassPart) {\n return classGroupFromNextClassPart\n }\n\n if (classPartObject.validators.length === 0) {\n return undefined\n }\n\n const classRest = classParts.join(CLASS_PART_SEPARATOR)\n\n return classPartObject.validators.find(({ validator }) => validator(classRest))?.classGroupId\n}\n\nconst arbitraryPropertyRegex = /^\\[(.+)\\]$/\n\nfunction getGroupIdForArbitraryProperty(className: string) {\n if (arbitraryPropertyRegex.test(className)) {\n const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)![1]\n const property = arbitraryPropertyClassName?.substring(\n 0,\n arbitraryPropertyClassName.indexOf(':'),\n )\n\n if (property) {\n // I use two dots here because one dot is used as prefix for class groups in plugins\n return 'arbitrary..' + property\n }\n }\n}\n\n/**\n * Exported for testing only\n */\nexport function createClassMap(config: Config<GenericClassGroupIds, GenericThemeGroupIds>) {\n const { theme, prefix } = config\n const classMap: ClassPartObject = {\n nextPart: new Map<string, ClassPartObject>(),\n validators: [],\n }\n\n const prefixedClassGroupEntries = getPrefixedClassGroupEntries(\n Object.entries(config.classGroups),\n prefix,\n )\n\n prefixedClassGroupEntries.forEach(([classGroupId, classGroup]) => {\n processClassesRecursively(classGroup, classMap, classGroupId, theme)\n })\n\n return classMap\n}\n\nfunction processClassesRecursively(\n classGroup: ClassGroup<GenericThemeGroupIds>,\n classPartObject: ClassPartObject,\n classGroupId: GenericClassGroupIds,\n theme: ThemeObject<GenericThemeGroupIds>,\n) {\n classGroup.forEach((classDefinition) => {\n if (typeof classDefinition === 'string') {\n const classPartObjectToEdit =\n classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition)\n classPartObjectToEdit.classGroupId = classGroupId\n return\n }\n\n if (typeof classDefinition === 'function') {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(\n classDefinition(theme),\n classPartObject,\n classGroupId,\n theme,\n )\n return\n }\n\n classPartObject.validators.push({\n validator: classDefinition,\n classGroupId,\n })\n\n return\n }\n\n Object.entries(classDefinition).forEach(([key, classGroup]) => {\n processClassesRecursively(\n classGroup,\n getPart(classPartObject, key),\n classGroupId,\n theme,\n )\n })\n })\n}\n\nfunction getPart(classPartObject: ClassPartObject, path: string) {\n let currentClassPartObject = classPartObject\n\n path.split(CLASS_PART_SEPARATOR).forEach((pathPart) => {\n if (!currentClassPartObject.nextPart.has(pathPart)) {\n currentClassPartObject.nextPart.set(pathPart, {\n nextPart: new Map(),\n validators: [],\n })\n }\n\n currentClassPartObject = currentClassPartObject.nextPart.get(pathPart)!\n })\n\n return currentClassPartObject\n}\n\nfunction isThemeGetter(func: ClassValidator | ThemeGetter): func is ThemeGetter {\n return (func as ThemeGetter).isThemeGetter\n}\n\nfunction getPrefixedClassGroupEntries(\n classGroupEntries: Array<[classGroupId: string, classGroup: ClassGroup<GenericThemeGroupIds>]>,\n prefix: string | undefined,\n): Array<[classGroupId: string, classGroup: ClassGroup<GenericThemeGroupIds>]> {\n if (!prefix) {\n return classGroupEntries\n }\n\n return classGroupEntries.map(([classGroupId, classGroup]) => {\n const prefixedClassGroup = classGroup.map((classDefinition) => {\n if (typeof classDefinition === 'string') {\n return prefix + classDefinition\n }\n\n if (typeof classDefinition === 'object') {\n return Object.fromEntries(\n Object.entries(classDefinition).map(([key, value]) => [prefix + key, value]),\n )\n }\n\n return classDefinition\n })\n\n return [classGroupId, prefixedClassGroup]\n })\n}\n","// Export is needed because TypeScript complains about an error otherwise:\n// Error: …/tailwind-merge/src/config-utils.ts(8,17): semantic error TS4058: Return type of exported function has or is using name 'LruCache' from external module \"…/tailwind-merge/src/lru-cache\" but cannot be named.\nexport interface LruCache<Key, Value> {\n get(key: Key): Value | undefined\n set(key: Key, value: Value): void\n}\n\n// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance\nexport function createLruCache<Key, Value>(maxCacheSize: number): LruCache<Key, Value> {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {},\n }\n }\n\n let cacheSize = 0\n let cache = new Map<Key, Value>()\n let previousCache = new Map<Key, Value>()\n\n function update(key: Key, value: Value) {\n cache.set(key, value)\n cacheSize++\n\n if (cacheSize > maxCacheSize) {\n cacheSize = 0\n previousCache = cache\n cache = new Map()\n }\n }\n\n return {\n get(key) {\n let value = cache.get(key)\n\n if (value !== undefined) {\n return value\n }\n if ((value = previousCache.get(key)) !== undefined) {\n update(key, value)\n return value\n }\n },\n set(key, value) {\n if (cache.has(key)) {\n cache.set(key, value)\n } else {\n update(key, value)\n }\n },\n }\n}\n","import { GenericConfig } from './types'\n\nexport const IMPORTANT_MODIFIER = '!'\n\nexport function createSplitModifiers(config: GenericConfig) {\n const separator = config.separator\n const isSeparatorSingleCharacter = separator.length === 1\n const firstSeparatorCharacter = separator[0]\n const separatorLength = separator.length\n\n // splitModifiers inspired by https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n return function splitModifiers(className: string) {\n const modifiers = []\n\n let bracketDepth = 0\n let modifierStart = 0\n let postfixModifierPosition: number | undefined\n\n for (let index = 0; index < className.length; index++) {\n let currentCharacter = className[index]\n\n if (bracketDepth === 0) {\n if (\n currentCharacter === firstSeparatorCharacter &&\n (isSeparatorSingleCharacter ||\n className.slice(index, index + separatorLength) === separator)\n ) {\n modifiers.push(className.slice(modifierStart, index))\n modifierStart = index + separatorLength\n continue\n }\n\n if (currentCharacter === '/') {\n postfixModifierPosition = index\n continue\n }\n }\n\n if (currentCharacter === '[') {\n bracketDepth++\n } else if (currentCharacter === ']') {\n bracketDepth--\n }\n }\n\n const baseClassNameWithImportantModifier =\n modifiers.length === 0 ? className : className.substring(modifierStart)\n const hasImportantModifier =\n baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)\n const baseClassName = hasImportantModifier\n ? baseClassNameWithImportantModifier.substring(1)\n : baseClassNameWithImportantModifier\n\n const maybePostfixModifierPosition =\n postfixModifierPosition && postfixModifierPosition > modifierStart\n ? postfixModifierPosition - modifierStart\n : undefined\n\n return {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n }\n }\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 */\nexport function sortModifiers(modifiers: string[]) {\n if (modifiers.length <= 1) {\n return modifiers\n }\n\n const sortedModifiers: string[] = []\n let unsortedModifiers: string[] = []\n\n modifiers.forEach((modifier) => {\n const isArbitraryVariant = modifier[0] === '['\n\n if (isArbitraryVariant) {\n sortedModifiers.push(...unsortedModifiers.sort(), modifier)\n unsortedModifiers = []\n } else {\n unsortedModifiers.push(modifier)\n }\n })\n\n sortedModifiers.push(...unsortedModifiers.sort())\n\n return sortedModifiers\n}\n","import { createClassUtils } from './class-utils'\nimport { createLruCache } from './lru-cache'\nimport { createSplitModifiers } from './modifier-utils'\nimport { GenericConfig } from './types'\n\nexport type ConfigUtils = ReturnType<typeof createConfigUtils>\n\nexport function createConfigUtils(config: GenericConfig) {\n return {\n cache: createLruCache<string, string>(config.cacheSize),\n splitModifiers: createSplitModifiers(config),\n ...createClassUtils(config),\n }\n}\n","import { ConfigUtils } from './config-utils'\nimport { IMPORTANT_MODIFIER, sortModifiers } from './modifier-utils'\n\nconst SPLIT_CLASSES_REGEX = /\\s+/\n\nexport function mergeClassList(classList: string, configUtils: ConfigUtils) {\n const { splitModifiers, getClassGroupId, getConflictingClassGroupIds } = configUtils\n\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 = new Set<string>()\n\n return (\n classList\n .trim()\n .split(SPLIT_CLASSES_REGEX)\n .map((originalClassName) => {\n const {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n } = splitModifiers(originalClassName)\n\n let classGroupId = getClassGroupId(\n maybePostfixModifierPosition\n ? baseClassName.substring(0, maybePostfixModifierPosition)\n : baseClassName,\n )\n\n let hasPostfixModifier = Boolean(maybePostfixModifierPosition)\n\n if (!classGroupId) {\n if (!maybePostfixModifierPosition) {\n return {\n isTailwindClass: false as const,\n originalClassName,\n }\n }\n\n classGroupId = getClassGroupId(baseClassName)\n\n if (!classGroupId) {\n return {\n isTailwindClass: false as const,\n originalClassName,\n }\n }\n\n hasPostfixModifier = false\n }\n\n const variantModifier = sortModifiers(modifiers).join(':')\n\n const modifierId = hasImportantModifier\n ? variantModifier + IMPORTANT_MODIFIER\n : variantModifier\n\n return {\n isTailwindClass: true as const,\n modifierId,\n classGroupId,\n originalClassName,\n hasPostfixModifier,\n }\n })\n .reverse()\n // Last class in conflict wins, so we need to filter conflicting classes in reverse order.\n .filter((parsed) => {\n if (!parsed.isTailwindClass) {\n return true\n }\n\n const { modifierId, classGroupId, hasPostfixModifier } = parsed\n\n const classId = modifierId + classGroupId\n\n if (classGroupsInConflict.has(classId)) {\n return false\n }\n\n classGroupsInConflict.add(classId)\n\n getConflictingClassGroupIds(classGroupId, hasPostfixModifier).forEach((group) =>\n classGroupsInConflict.add(modifierId + group),\n )\n\n return true\n })\n .reverse()\n .map((parsed) => parsed.originalClassName)\n .join(' ')\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 */\n\nexport type ClassNameValue = ClassNameArray | string | null | undefined | 0 | false\ntype ClassNameArray = ClassNameValue[]\n\nexport function twJoin(...classLists: ClassNameValue[]): string\nexport function twJoin() {\n let index = 0\n let argument: ClassNameValue\n let resolvedValue: string\n let string = ''\n\n while (index < arguments.length) {\n if ((argument = arguments[index++])) {\n if ((resolvedValue = toValue(argument))) {\n string && (string += ' ')\n string += resolvedValue\n }\n }\n }\n return string\n}\n\nfunction toValue(mix: ClassNameArray | string) {\n if (typeof mix === 'string') {\n return mix\n }\n\n let resolvedValue: string\n let string = ''\n\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if ((resolvedValue = toValue(mix[k] as ClassNameArray | string))) {\n string && (string += ' ')\n string += resolvedValue\n }\n }\n }\n\n return string\n}\n","import { createConfigUtils } from './config-utils'\nimport { mergeClassList } from './merge-classlist'\nimport { ClassNameValue, twJoin } from './tw-join'\nimport { GenericConfig } from './types'\n\ntype CreateConfigFirst = () => GenericConfig\ntype CreateConfigSubsequent = (config: GenericConfig) => GenericConfig\ntype TailwindMerge = (...classLists: ClassNameValue[]) => string\ntype ConfigUtils = ReturnType<typeof createConfigUtils>\n\nexport function createTailwindMerge(\n createConfigFirst: CreateConfigFirst,\n ...createConfigRest: CreateConfigSubsequent[]\n): TailwindMerge {\n let configUtils: ConfigUtils\n let cacheGet: ConfigUtils['cache']['get']\n let cacheSet: ConfigUtils['cache']['set']\n let functionToCall = initTailwindMerge\n\n function initTailwindMerge(classList: string) {\n const config = createConfigRest.reduce(\n (previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig),\n createConfigFirst() as GenericConfig,\n )\n\n configUtils = createConfigUtils(config)\n cacheGet = configUtils.cache.get\n cacheSet = configUtils.cache.set\n functionToCall = tailwindMerge\n\n return tailwindMerge(classList)\n }\n\n function tailwindMerge(classList: string) {\n const cachedResult = cacheGet(classList)\n\n if (cachedResult) {\n return cachedResult\n }\n\n const result = mergeClassList(classList, configUtils)\n cacheSet(classList, result)\n\n return result\n }\n\n return function callTailwindMerge() {\n return functionToCall(twJoin.apply(null, arguments as any))\n }\n}\n","import { DefaultThemeGroupIds, NoInfer, ThemeGetter, ThemeObject } from './types'\n\nexport function fromTheme<\n AdditionalThemeGroupIds extends string = never,\n DefaultThemeGroupIdsInner extends string = DefaultThemeGroupIds,\n>(key: NoInfer<DefaultThemeGroupIdsInner | AdditionalThemeGroupIds>): ThemeGetter {\n const themeGetter = (theme: ThemeObject<DefaultThemeGroupIdsInner | AdditionalThemeGroupIds>) =>\n theme[key] || []\n\n themeGetter.isThemeGetter = true as const\n\n return themeGetter\n}\n","const arbitraryValueRegex = /^\\[(?:([a-z-]+):)?(.+)\\]$/i\nconst fractionRegex = /^\\d+\\/\\d+$/\nconst stringLengths = new Set(['px', 'full', 'screen'])\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/\nconst lengthUnitRegex =\n /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch))\\(.+\\)$/\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/\nconst imageRegex =\n /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/\n\nexport function isLength(value: string) {\n return isNumber(value) || stringLengths.has(value) || fractionRegex.test(value)\n}\n\nexport function isArbitraryLength(value: string) {\n return getIsArbitraryValue(value, 'length', isLengthOnly)\n}\n\nexport function isNumber(value: string) {\n return Boolean(value) && !Number.isNaN(Number(value))\n}\n\nexport function isArbitraryNumber(value: string) {\n return getIsArbitraryValue(value, 'number', isNumber)\n}\n\nexport function isInteger(value: string) {\n return Boolean(value) && Number.isInteger(Number(value))\n}\n\nexport function isPercent(value: string) {\n return value.endsWith('%') && isNumber(value.slice(0, -1))\n}\n\nexport function isArbitraryValue(value: string) {\n return arbitraryValueRegex.test(value)\n}\n\nexport function isTshirtSize(value: string) {\n return tshirtUnitRegex.test(value)\n}\n\nconst sizeLabels = new Set(['length', 'size', 'percentage'])\n\nexport function isArbitrarySize(value: string) {\n return getIsArbitraryValue(value, sizeLabels, isNever)\n}\n\nexport function isArbitraryPosition(value: string) {\n return getIsArbitraryValue(value, 'position', isNever)\n}\n\nconst imageLabels = new Set(['image', 'url'])\n\nexport function isArbitraryImage(value: string) {\n return getIsArbitraryValue(value, imageLabels, isImage)\n}\n\nexport function isArbitraryShadow(value: string) {\n return getIsArbitraryValue(value, '', isShadow)\n}\n\nexport function isAny() {\n return true\n}\n\nfunction getIsArbitraryValue(\n value: string,\n label: string | Set<string>,\n testValue: (value: string) => boolean,\n) {\n const result = arbitraryValueRegex.exec(value)\n\n if (result) {\n if (result[1]) {\n return typeof label === 'string' ? result[1] === label : label.has(result[1])\n }\n\n return testValue(result[2]!)\n }\n\n return false\n}\n\nfunction isLengthOnly(value: string) {\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.\n return lengthUnitRegex.test(value) && !colorFunctionRegex.test(value)\n}\n\nfunction isNever() {\n return false\n}\n\nfunction isShadow(value: string) {\n return shadowRegex.test(value)\n}\n\nfunction isImage(value: string) {\n return imageRegex.test(value)\n}\n","import { fromTheme } from './from-theme'\nimport { Config, DefaultClassGroupIds, DefaultThemeGroupIds } from './types'\nimport {\n isAny,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isInteger,\n isLength,\n isNumber,\n isPercent,\n isTshirtSize,\n} from './validators'\n\nexport function getDefaultConfig() {\n const colors = fromTheme('colors')\n const spacing = fromTheme('spacing')\n const blur = fromTheme('blur')\n const brightness = fromTheme('brightness')\n const borderColor = fromTheme('borderColor')\n const borderRadius = fromTheme('borderRadius')\n const borderSpacing = fromTheme('borderSpacing')\n const borderWidth = fromTheme('borderWidth')\n const contrast = fromTheme('contrast')\n const grayscale = fromTheme('grayscale')\n const hueRotate = fromTheme('hueRotate')\n const invert = fromTheme('invert')\n const gap = fromTheme('gap')\n const gradientColorStops = fromTheme('gradientColorStops')\n const gradientColorStopPositions = fromTheme('gradientColorStopPositions')\n const inset = fromTheme('inset')\n const margin = fromTheme('margin')\n const opacity = fromTheme('opacity')\n const padding = fromTheme('padding')\n const saturate = fromTheme('saturate')\n const scale = fromTheme('scale')\n const sepia = fromTheme('sepia')\n const skew = fromTheme('skew')\n const space = fromTheme('space')\n const translate = fromTheme('translate')\n\n const getOverscroll = () => ['auto', 'contain', 'none'] as const\n const getOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'] as const\n const getSpacingWithAutoAndArbitrary = () => ['auto', isArbitraryValue, spacing] as const\n const getSpacingWithArbitrary = () => [isArbitraryValue, spacing] as const\n const getLengthWithEmptyAndArbitrary = () => ['', isLength, isArbitraryLength] as const\n const getNumberWithAutoAndArbitrary = () => ['auto', isNumber, isArbitraryValue] as const\n const getPositions = () =>\n [\n 'bottom',\n 'center',\n 'left',\n 'left-bottom',\n 'left-top',\n 'right',\n 'right-bottom',\n 'right-top',\n 'top',\n ] as const\n const getLineStyles = () => ['solid', 'dashed', 'dotted', 'double', 'none'] as const\n const getBlendModes = () =>\n [\n 'normal',\n 'multiply',\n 'screen',\n 'overlay',\n 'darken',\n 'lighten',\n 'color-dodge',\n 'color-burn',\n 'hard-light',\n 'soft-light',\n 'difference',\n 'exclusion',\n 'hue',\n 'saturation',\n 'color',\n 'luminosity',\n 'plus-lighter',\n ] as const\n const getAlign = () =>\n ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch'] as const\n const getZeroAndEmpty = () => ['', '0', isArbitraryValue] as const\n const getBreaks = () =>\n ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'] as const\n const getNumber = () => [isNumber, isArbitraryNumber]\n const getNumberAndArbitrary = () => [isNumber, isArbitraryValue]\n\n return {\n cacheSize: 500,\n separator: ':',\n theme: {\n colors: [isAny],\n spacing: [isLength, isArbitraryLength],\n blur: ['none', '', isTshirtSize, isArbitraryValue],\n brightness: getNumber(),\n borderColor: [colors],\n borderRadius: ['none', '', 'full', isTshirtSize, isArbitraryValue],\n borderSpacing: getSpacingWithArbitrary(),\n borderWidth: getLengthWithEmptyAndArbitrary(),\n contrast: getNumber(),\n grayscale: getZeroAndEmpty(),\n hueRotate: getNumberAndArbitrary(),\n invert: getZeroAndEmpty(),\n gap: getSpacingWithArbitrary(),\n gradientColorStops: [colors],\n gradientColorStopPositions: [isPercent, isArbitraryLength],\n inset: getSpacingWithAutoAndArbitrary(),\n margin: getSpacingWithAutoAndArbitrary(),\n opacity: getNumber(),\n padding: getSpacingWithArbitrary(),\n saturate: getNumber(),\n scale: getNumber(),\n sepia: getZeroAndEmpty(),\n skew: getNumberAndArbitrary(),\n space: getSpacingWithArbitrary(),\n translate: getSpacingWithArbitrary(),\n },\n classGroups: {\n // Layout\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{ aspect: ['auto', 'square', 'video', isArbitraryValue] }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{ columns: [isTshirtSize] }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{ 'break-after': getBreaks() }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{ 'break-before': getBreaks() }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{ 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column'] }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{ 'box-decoration': ['slice', 'clone'] }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{ box: ['border', 'content'] }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: [\n 'block',\n 'inline-block',\n 'inline',\n 'flex',\n 'inline-flex',\n 'table',\n 'inline-table',\n 'table-caption',\n 'table-cell',\n 'table-column',\n 'table-column-group',\n 'table-footer-group',\n 'table-header-group',\n 'table-row-group',\n 'table-row',\n 'flow-root',\n 'grid',\n 'inline-grid',\n 'contents',\n 'list-item',\n 'hidden',\n ],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{ float: ['right', 'left', 'none', 'start', 'end'] }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{ clear: ['left', 'right', 'both', 'none', 'start', 'end'] }],\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': [{ object: ['contain', 'cover', 'fill', 'none', 'scale-down'] }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{ object: [...getPositions(), isArbitraryValue] }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{ overflow: getOverflow() }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{ 'overflow-x': getOverflow() }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{ 'overflow-y': getOverflow() }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{ overscroll: getOverscroll() }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{ 'overscroll-x': getOverscroll() }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{ 'overscroll-y': getOverscroll() }],\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: [{ inset: [inset] }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{ 'inset-x': [inset] }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{ 'inset-y': [inset] }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{ start: [inset] }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{ end: [inset] }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{ top: [inset] }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{ right: [inset] }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{ bottom: [inset] }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{ left: [inset] }],\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: [{ z: ['auto', isInteger, isArbitraryValue] }],\n // Flexbox and Grid\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{ basis: getSpacingWithAutoAndArbitrary() }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{ flex: ['row', 'row-reverse', 'col', 'col-reverse'] }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{ flex: ['wrap', 'wrap-reverse', 'nowrap'] }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{ flex: ['1', 'auto', 'initial', 'none', isArbitraryValue] }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{ grow: getZeroAndEmpty() }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{ shrink: getZeroAndEmpty() }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{ order: ['first', 'last', 'none', isInteger, isArbitraryValue] }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{ 'grid-cols': [isAny] }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [\n {\n col: [\n 'auto',\n { span: ['full', isInteger, isArbitraryValue] },\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{ 'col-start': getNumberWithAutoAndArbitrary() }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{ 'col-end': getNumberWithAutoAndArbitrary() }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{ 'grid-rows': [isAny] }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [\n { row: ['auto', { span: [isInteger, isArbitraryValue] }, isArbitraryValue] },\n ],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{ 'row-start': getNumberWithAutoAndArbitrary() }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{ 'row-end': getNumberWithAutoAndArbitrary() }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{ 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense'] }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{ 'auto-cols': ['auto', 'min', 'max', 'fr', isArbitraryValue] }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{ 'auto-rows': ['auto', 'min', 'max', 'fr', isArbitraryValue] }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{ gap: [gap] }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{ 'gap-x': [gap] }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{ 'gap-y': [gap] }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{ justify: ['normal', ...getAlign()] }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{ 'justify-items': ['start', 'end', 'center', 'stretch'] }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{ 'justify-self': ['auto', 'start', 'end', 'center', 'stretch'] }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{ content: ['normal', ...getAlign(), 'baseline'] }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{ items: ['start', 'end', 'center', 'baseline', 'stretch'] }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{ self: ['auto', 'start', 'end', 'center', 'stretch', 'baseline'] }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{ 'place-content': [...getAlign(), 'baseline'] }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{ 'place-items': ['start', 'end', 'center', 'baseline', 'stretch'] }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{ 'place-self': ['auto', 'start', 'end', 'center', 'stretch'] }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{ p: [padding] }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{ px: [padding] }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{ py: [padding] }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{ ps: [padding] }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{ pe: [padding] }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{ pt: [padding] }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{ pr: [padding] }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{ pb: [padding] }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{ pl: [padding] }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{ m: [margin] }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{ mx: [margin] }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{ my: [margin] }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{ ms: [margin] }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{ me: [margin] }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{ mt: [margin] }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{ mr: [margin] }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{ mb: [margin] }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{ ml: [margin] }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x': [{ 'space-x': [space] }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y': [{ 'space-y': [space] }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y-reverse': ['space-y-reverse'],\n // Sizing\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [\n {\n w: [\n 'auto',\n 'min',\n 'max',\n 'fit',\n 'svw',\n 'lvw',\n 'dvw',\n isArbitraryValue,\n spacing,\n ],\n },\n ],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{ 'min-w': [isArbitraryValue, spacing, 'min', 'max', 'fit'] }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [\n {\n 'max-w': [\n isArbitraryValue,\n spacing,\n 'none',\n 'full',\n 'min',\n 'max',\n 'fit',\n 'prose',\n { screen: [isTshirtSize] },\n isTshirtSize,\n ],\n },\n ],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [\n {\n h: [\n isArbitraryValue,\n spacing,\n 'auto',\n 'min',\n 'max',\n 'fit',\n 'svh',\n 'lvh',\n 'dvh',\n ],\n },\n ],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [\n { 'min-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh'] },\n ],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [\n { 'max-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh'] },\n ],\n /**\n * Size\n * @see https://tailwindcss.com/docs/size\n */\n size: [{ size: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit'] }],\n // Typography\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{ text: ['base', isTshirtSize, isArbitraryLength] }],\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 {\n font: [\n 'thin',\n 'extralight',\n 'light',\n 'normal',\n 'medium',\n 'semibold',\n 'bold',\n 'extrabold',\n 'black',\n isArbitraryNumber,\n ],\n },\n ],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{ font: [isAny] }],\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-fractons'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [\n {\n tracking: [\n 'tighter',\n 'tight',\n 'normal',\n 'wide',\n 'wider',\n 'widest',\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{ 'line-clamp': ['none', isNumber, isArbitraryNumber] }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [\n {\n leading: [\n 'none',\n 'tight',\n 'snug',\n 'normal',\n 'relaxed',\n 'loose',\n isLength,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{ 'list-image': ['none', isArbitraryValue] }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{ list: ['none', 'disc', 'decimal', isArbitraryValue] }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{ list: ['inside', 'outside'] }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{ placeholder: [colors] }],\n /**\n * Placeholder Opacity\n * @see https://tailwindcss.com/docs/placeholder-opacity\n */\n 'placeholder-opacity': [{ 'placeholder-opacity': [opacity] }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{ text: ['left', 'center', 'right', 'justify', 'start', 'end'] }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{ text: [colors] }],\n /**\n * Text Opacity\n * @see https://tailwindcss.com/docs/text-opacity\n */\n 'text-opacity': [{ 'text-opacity': [opacity] }],\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': [{ decoration: [...getLineStyles(), 'wavy'] }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [\n { decoration: ['auto', 'from-font', isLength, isArbitraryLength] },\n ],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{ 'underline-offset': ['auto', isLength, isArbitraryValue] }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{ decoration: [colors] }],\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': [{ text: ['wrap', 'nowrap', 'balance', 'pretty'] }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{ indent: getSpacingWithArbitrary() }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [\n {\n align: [\n 'baseline',\n 'top',\n 'middle',\n 'bottom',\n 'text-top',\n 'text-bottom',\n 'sub',\n 'super',\n isArbitraryValue,\n ],\n },\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: [{ break: ['normal', 'words', 'all', 'keep'] }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{ hyphens: ['none', 'manual', 'auto'] }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{ content: ['none', isArbitraryValue] }],\n // Backgrounds\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{ bg: ['fixed', 'local', 'scroll'] }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{ 'bg-clip': ['border', 'padding', 'content', 'text'] }],\n /**\n * Background Opacity\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/background-opacity\n */\n 'bg-opacity': [{ 'bg-opacity': [opacity] }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{ 'bg-origin': ['border', 'padding', 'content'] }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{ bg: [...getPositions(), isArbitraryPosition] }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{ bg: ['no-repeat', { repeat: ['', 'x', 'y', 'round', 'space'] }] }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{ bg: ['auto', 'cover', 'contain', isArbitrarySize] }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [\n {\n bg: [\n 'none',\n { 'gradient-to': ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl'] },\n isArbitraryImage,\n ],\n },\n ],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{ bg: [colors] }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{ from: [gradientColorStopPositions] }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{ via: [gradientColorStopPositions] }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{ to: [gradientColorStopPositions] }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{ from: [gradientColorStops] }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{ via: [gradientColorStops] }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{ to: [gradientColorStops] }],\n // Borders\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{ rounded: [borderRadius] }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{ 'rounded-s': [borderRadius] }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{ 'rounded-e': [borderRadius] }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{ 'rounded-t': [borderRadius] }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{ 'rounded-r': [borderRadius] }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{ 'rounded-b': [borderRadius] }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{ 'rounded-l': [borderRadius] }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{ 'rounded-ss': [borderRadius] }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{ 'rounded-se': [borderRadius] }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{ 'rounded-ee': [borderRadius] }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{ 'rounded-es': [borderRadius] }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{ 'rounded-tl': [borderRadius] }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{ 'rounded-tr': [borderRadius] }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{ 'rounded-br': [borderRadius] }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{ 'rounded-bl': [borderRadius] }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{ border: [borderWidth] }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{ 'border-x': [borderWidth] }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{ 'border-y': [borderWidth] }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{ 'border-s': [borderWidth] }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{ 'border-e': [borderWidth] }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{ 'border-t': [borderWidth] }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{ 'border-r': [borderWidth] }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{ 'border-b': [borderWidth] }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{ 'border-l': [borderWidth] }],\n /**\n * Border Opacity\n * @see https://tailwindcss.com/docs/border-opacity\n */\n 'border-opacity': [{ 'border-opacity': [opacity] }],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{ border: [...getLineStyles(), 'hidden'] }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x': [{ 'divide-x': [borderWidth] }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y': [{ 'divide-y': [borderWidth] }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Divide Opacity\n * @see https://tailwindcss.com/docs/divide-opacity\n */\n 'divide-opacity': [{ 'divide-opacity': [opacity] }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/divide-style\n */\n 'divide-style': [{ divide: getLineStyles() }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{ border: [borderColor] }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{ 'border-x': [borderColor] }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{ 'border-y': [borderColor] }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{ 'border-t': [borderColor] }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{ 'border-r': [borderColor] }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{ 'border-b': [borderColor] }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{ 'border-l': [borderColor] }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{ divide: [borderColor] }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{ outline: ['', ...getLineStyles()] }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{ 'outline-offset': [isLength, isArbitraryValue] }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{ outline: [isLength, isArbitraryLength] }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{ outline: [colors] }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w': [{ ring: getLengthWithEmptyAndArbitrary() }],\n /**\n * Ring Width Inset\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/ring-color\n */\n 'ring-color': [{ ring: [colors] }],\n /**\n * Ring Opacity\n * @see https://tailwindcss.com/docs/ring-opacity\n */\n 'ring-opacity': [{ 'ring-opacity': [opacity] }],\n /**\n * Ring Offset Width\n * @see https://tailwindcss.com/docs/ring-offset-width\n */\n 'ring-offset-w': [{ 'ring-offset': [isLength, isArbitraryLength] }],\n /**\n * Ring Offset Color\n * @see https://tailwindcss.com/docs/ring-offset-color\n */\n 'ring-offset-color': [{ 'ring-offset': [colors] }],\n // Effects\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{ shadow: ['', 'inner', 'none', isTshirtSize, isArbitraryShadow] }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow-color\n */\n 'shadow-color': [{ shadow: [isAny] }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{ opacity: [opacity] }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{ 'mix-blend': getBlendModes() }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{ 'bg-blend': getBlendModes() }],\n // Filters\n /**\n * Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{ filter: ['', 'none'] }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{ blur: [blur] }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{ brightness: [brightness] }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{ contrast: [contrast] }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{ 'drop-shadow': ['', 'none', isTshirtSize, isArbitraryValue] }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{ grayscale: [grayscale] }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{ 'hue-rotate': [hueRotate] }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{ invert: [invert] }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{ saturate: [saturate] }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{ sepia: [sepia] }],\n /**\n * Backdrop Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{ 'backdrop-filter': ['', 'none'] }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{ 'backdrop-blur': [blur] }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{ 'backdrop-brightness': [brightness] }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{ 'backdrop-contrast': [contrast] }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{ 'backdrop-grayscale': [grayscale] }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{ 'backdrop-hue-rotate': [hueRotate] }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{ 'backdrop-invert': [invert] }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{ 'backdrop-opacity': [opacity] }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{ 'backdrop-saturate': [saturate] }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{ 'backdrop-sepia': [sepia] }],\n // Tables\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{ border: ['collapse', 'separate'] }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{ 'border-spacing': [borderSpacing] }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{ 'border-spacing-x': [borderSpacing] }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{ 'border-spacing-y': [borderSpacing] }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{ table: ['auto', 'fixed'] }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{ caption: ['top', 'bottom'] }],\n // Transitions and Animation\n /**\n * Tranisition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [\n {\n transition: [\n 'none',\n 'all',\n '',\n 'colors',\n 'opacity',\n 'shadow',\n 'transform',\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{ duration: getNumberAndArbitrary() }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{ ease: ['linear', 'in', 'out', 'in-out', isArbitraryValue] }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{ delay: getNumberAndArbitrary() }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{ animate: ['none', 'spin', 'ping', 'pulse', 'bounce', isArbitraryValue] }],\n // Transforms\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{ transform: ['', 'gpu', 'none'] }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{ scale: [scale] }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{ 'scale-x': [scale] }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{ 'scale-y': [scale] }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{ rotate: [isInteger, isArbitraryValue] }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{ 'translate-x': [translate] }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{ 'translate-y': [translate] }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{ 'skew-x': [skew] }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{ 'skew-y': [skew] }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [\n {\n origin: [\n 'center',\n 'top',\n 'top-right',\n 'right',\n 'bottom-right',\n 'bottom',\n 'bottom-left',\n 'left',\n 'top-left',\n isArbitraryValue,\n ],\n },\n ],\n // Interactivity\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{ accent: ['auto', colors] }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{ appearance: ['none', 'auto'] }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [\n {\n cursor: [\n 'auto',\n 'default',\n 'pointer',\n 'wait',\n 'text',\n 'move',\n 'help',\n 'not-allowed',\n 'none',\n 'context-menu',\n 'progress',\n 'cell',\n 'crosshair',\n 'vertical-text',\n 'alias',\n 'copy',\n 'no-drop',\n 'grab',\n 'grabbing',\n 'all-scroll',\n 'col-resize',\n 'row-resize',\n 'n-resize',\n 'e-resize',\n 's-resize',\n 'w-resize',\n 'ne-resize',\n 'nw-resize',\n 'se-resize',\n 'sw-resize',\n 'ew-resize',\n 'ns-resize',\n 'nesw-resize',\n 'nwse-resize',\n 'zoom-in',\n 'zoom-out',\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{ caret: [colors] }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{ 'pointer-events': ['none', 'auto'] }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{ resize: ['none', 'y', 'x', ''] }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{ scroll: ['auto', 'smooth'] }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{ 'scroll-m': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{ 'scroll-mx': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{ 'scroll-my': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{ 'scroll-ms': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{ 'scroll-me': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{ 'scroll-mt': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{ 'scroll-mr': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{ 'scroll-mb': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{ 'scroll-ml': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{ 'scroll-p': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{ 'scroll-px': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{ 'scroll-py': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{ 'scroll-ps': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{ 'scroll-pe': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{ 'scroll-pt': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{ 'scroll-pr': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{ 'scroll-pb': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{ 'scroll-pl': getSpacingWithArbitrary() }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{ snap: ['start', 'end', 'center', 'align-none'] }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{ snap: ['normal', 'always'] }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{ snap: ['none', 'x', 'y', 'both'] }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{ snap: ['mandatory', 'proximity'] }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [\n {\n touch: ['auto', 'none', 'manipulation'],\n },\n ],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [\n {\n 'touch-pan': ['x', 'left', 'right'],\n },\n ],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [\n {\n 'touch-pan': ['y', 'up', 'down'],\n },\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: [{ select: ['none', 'text', 'all', 'auto'] }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [\n { 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryValue] },\n ],\n // SVG\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{ fill: [colors, 'none'] }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{ stroke: [isLength, isArbitraryLength, isArbitraryNumber] }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{ stroke: [colors, 'none'] }],\n // Accessibility\n /**\n * Screen Readers\n * @see https://tailwindcss.com/docs/screen-readers\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{ 'forced-color-adjust': ['auto', 'none'] }],\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': [\n 'fvn-ordinal',\n 'fvn-slashed-zero',\n 'fvn-figure',\n 'fvn-spacing',\n 'fvn-fraction',\n ],\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: [\n 'rounded-s',\n 'rounded-e',\n 'rounded-t',\n 'rounded-r',\n 'rounded-b',\n 'rounded-l',\n 'rounded-ss',\n 'rounded-se',\n 'rounded-ee',\n 'rounded-es',\n 'rounded-tl',\n 'rounded-tr',\n 'rounded-br',\n 'rounded-bl',\n ],\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': [\n 'border-w-s',\n 'border-w-e',\n 'border-w-t',\n 'border-w-r',\n 'border-w-b',\n 'border-w-l',\n ],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': [\n 'border-color-t',\n 'border-color-r',\n 'border-color-b',\n 'border-color-l',\n ],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n 'scroll-m': [\n 'scroll-mx',\n 'scroll-my',\n 'scroll-ms',\n 'scroll-me',\n 'scroll-mt',\n 'scroll-mr',\n 'scroll-mb',\n 'scroll-ml',\n ],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': [\n 'scroll-px',\n 'scroll-py',\n 'scroll-ps',\n 'scroll-pe',\n 'scroll-pt',\n 'scroll-pr',\n 'scroll-pb',\n 'scroll-pl',\n ],\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 } as const satisfies Config<DefaultClassGroupIds, DefaultThemeGroupIds>\n}\n","import { createTailwindMerge } from './create-tailwind-merge'\nimport { getDefaultConfig } from './default-config'\n\nexport const twMerge = createTailwindMerge(getDefaultConfig)\n","import { type PropsWithChildren, useRef } from 'react';\nimport { useClickAway } from 'react-use';\n\nimport { useSpreadsheet } from '@/src/components/spreadsheet/lib/use-spreadsheet';\nimport { cn } from '@/src/shared/lib/cn';\n\ntype RootProps = PropsWithChildren<{\n className?: string;\n}>;\n\nexport function Root(props: RootProps) {\n const { children, className } = props;\n const { setPointRange } = useSpreadsheet();\n\n const rootRef = useRef<HTMLDivElement | null>(null);\n\n useClickAway(rootRef, () => setPointRange(null));\n\n return (\n <div ref={rootRef} className={cn('min-w-[640px]', className)}>\n {children}\n </div>\n );\n}\n","export { default as createMemo } from './factory/createMemo';\nexport { default as createReducerContext } from './factory/createReducerContext';\nexport { default as createReducer } from './factory/createReducer';\nexport { default as createStateContext } from './factory/createStateContext';\nexport { default as useAsync } from './useAsync';\nexport { default as useAsyncFn } from './useAsyncFn';\nexport { default as useAsyncRetry } from './useAsyncRetry';\nexport { default as useAudio } from './useAudio';\nexport { default as useBattery } from './useBattery';\nexport { default as useBeforeUnload } from './useBeforeUnload';\nexport { default as useBoolean } from './useBoolean';\nexport { default as useClickAway } from './useClickAway';\nexport { default as useCookie } from './useCookie';\nexport { default as useCopyToClipboard } from './useCopyToClipboard';\nexport { default as useCounter } from './useCounter';\nexport { default as useCss } from './useCss';\nexport { default as useCustomCompareEffect } from './useCustomCompareEffect';\nexport { default as useDebounce } from './useDebounce';\nexport { default as useDeepCompareEffect } from './useDeepCompareEffect';\nexport { default as useDefault } from './useDefault';\nexport { default as useDrop } from './useDrop';\nexport { default as useDropArea } from './useDropArea';\nexport { default as useEffectOnce } from './useEffectOnce';\nexport { default as useEnsuredForwardedRef, ensuredForwardRef } from './useEnsuredForwardedRef';\nexport { default as useEvent } from './useEvent';\nexport { default as useError } from './useError';\nexport { default as useFavicon } from './useFavicon';\nexport { default as useFullscreen } from './useFullscreen';\nexport { default as useGeolocation } from './useGeolocation';\nexport { default as useGetSet } from './useGetSet';\nexport { default as useGetSetState } from './useGetSetState';\nexport { default as useHarmonicIntervalFn } from './useHarmonicIntervalFn';\nexport { default as useHover } from './useHover';\nexport { default as useHoverDirty } from './useHoverDirty';\nexport { default as useIdle } from './useIdle';\nexport { default as useIntersection } from './useIntersection';\nexport { default as useInterval } from './useInterval';\nexport { default as useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect';\nexport { default as useKey } from './useKey';\nexport { default as createBreakpoint } from './factory/createBreakpoint';\n// not exported because of peer dependency\n// export { default as useKeyboardJs } from './useKeyboardJs';\nexport { default as useKeyPress } from './useKeyPress';\nexport { default as useKeyPressEvent } from './useKeyPressEvent';\nexport { default as useLatest } from './useLatest';\nexport { default as useLifecycles } from './useLifecycles';\nexport { default as useList } from './useList';\nexport { default as useLocalStorage } from './useLocalStorage';\nexport { default as useLocation } from './useLocation';\nexport { default as useLockBodyScroll } from './useLockBodyScroll';\nexport { default as useLogger } from './useLogger';\nexport { default as useLongPress } from './useLongPress';\nexport { default as useMap } from './useMap';\nexport { default as useMedia } from './useMedia';\nexport { default as useMediaDevices } from './useMediaDevices';\nexport { useMediatedState } from './useMediatedState';\nexport { default as useMethods } from './useMethods';\nexport { default as useMotion } from './useMotion';\nexport { default as useMount } from './useMount';\nexport { default as useMountedState } from './useMountedState';\nexport { default as useMouse } from './useMouse';\nexport { default as useMouseHovered } from './useMouseHovered';\nexport { default as useMouseWheel } from './useMouseWheel';\nexport { default as useNetworkState } from './useNetworkState';\nexport { default as useNumber } from './useNumber';\nexport { default as useObservable } from './useObservable';\nexport { default as useOrientation } from './useOrientation';\nexport { default as usePageLeave } from './usePageLeave';\nexport { default as usePermission } from './usePermission';\nexport { default as usePrevious } from './usePrevious';\nexport { default as usePreviousDistinct } from './usePreviousDistinct';\nexport { default as usePromise } from './usePromise';\nexport { default as useQueue } from './useQueue';\nexport { default as useRaf } from './useRaf';\nexport { default as useRafLoop } from './useRafLoop';\nexport { default as useRafState } from './useRafState';\nexport { default as useSearchParam } from './useSearchParam';\nexport { default as useScratch } from './useScratch';\nexport { default as useScroll } from './useScroll';\nexport { default as useScrolling } from './useScrolling';\nexport { default as useSessionStorage } from './useSessionStorage';\nexport { default as useSetState } from './useSetState';\nexport { default as useShallowCompareEffect } from './useShallowCompareEffect';\nexport { default as useSize } from './useSize';\nexport { default as useSlider } from './useSlider';\nexport { default as useSpeech } from './useSpeech';\n// not exported because of peer dependency\n// export { default as useSpring } from './useSpring';\nexport { default as useStartTyping } from './useStartTyping';\nexport { useStateWithHistory } from './useStateWithHistory';\nexport { default as useStateList } from './useStateList';\nexport { default as useThrottle } from './useThrottle';\nexport { default as useThrottleFn } from './useThrottleFn';\nexport { default as useTimeout } from './useTimeout';\nexport { default as useTimeoutFn } from './useTimeoutFn';\nexport { default as useTitle } from './useTitle';\nexport { default as useToggle } from './useToggle';\nexport { default as useTween } from './useTween';\nexport { default as useUnmount } from './useUnmount';\nexport { default as useUnmountPromise } from './useUnmountPromise';\nexport { default as useUpdate } from './useUpdate';\nexport { default as useUpdateEffect } from './useUpdateEffect';\nexport { default as useUpsert } from './useUpsert';\nexport { default as useVibrate } from './useVibrate';\nexport { default as useVideo } from './useVideo';\nexport { default as useStateValidator } from './useStateValidator';\nexport { useScrollbarWidth } from './useScrollbarWidth';\nexport { useMultiStateValidator } from './useMultiStateValidator';\nexport { default as useWindowScroll } from './useWindowScroll';\nexport { default as useWindowSize } from './useWindowSize';\nexport { default as useMeasure } from './useMeasure';\nexport { default as usePinchZoom } from './usePinchZoom';\nexport { useRendersCount } from './useRendersCount';\nexport { useFirstMountState } from './useFirstMountState';\nexport { default as useSet } from './useSet';\nexport { createGlobalState } from './factory/createGlobalState';\nexport { useHash } from './useHash';\n","export var noop = function () { };\nexport function on(obj) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (obj && obj.addEventListener) {\n obj.addEventListener.apply(obj, args);\n }\n}\nexport function off(obj) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (obj && obj.removeEventListener) {\n obj.removeEventListener.apply(obj, args);\n }\n}\nexport var isBrowser = typeof window !== 'undefined';\nexport var isNavigator = typeof navigator !== 'undefined';\n","import { useEffect, useRef } from 'react';\nimport { off, on } from './misc/util';\nvar defaultEvents = ['mousedown', 'touchstart'];\nvar useClickAway = function (ref, onClickAway, events) {\n if (events === void 0) { events = defaultEvents; }\n var savedCallback = useRef(onClickAway);\n useEffect(function () {\n savedCallback.current = onClickAway;\n }, [onClickAway]);\n useEffect(function () {\n var handler = function (event) {\n var el = ref.current;\n el && !el.contains(event.target) && savedCallback.current(event);\n };\n for (var _i = 0, events_1 = events; _i < events_1.length; _i++) {\n var eventName = events_1[_i];\n on(document, eventName, handler);\n }\n return function () {\n for (var _i = 0, events_2 = events; _i < events_2.length; _i++) {\n var eventName = events_2[_i];\n off(document, eventName, handler);\n }\n };\n }, [events, ref]);\n};\nexport default useClickAway;\n","import { useSpreadsheet } from '@/src/components/spreadsheet/lib/use-spreadsheet';\nimport { ColumnIndicator } from '@/src/components/spreadsheet/ui/indicators/column-indicator';\nimport { ColumnTitleIndicator } from '@/src/components/spreadsheet/ui/indicators/column-title-indicator';\nimport { CornerIndicator } from '@/src/components/spreadsheet/ui/indicators/corner-indicator';\n\nexport function Header() {\n const { columns } = useSpreadsheet();\n\n return (\n <div className=\"sticky top-[58px] z-50\">\n <div className=\"relative flex items-center bg-white\">\n <CornerIndicator className=\"border-t-0 border-l-0\" />\n\n {columns.map((column) => (\n <ColumnIndicator\n key={`spreadsheet__column__indicator__key__${column.name}__${column.position}`}\n column={column}\n />\n ))}\n </div>\n\n <div className=\"flex items-center\">\n <div className=\"h-9 w-12 shrink-0 cursor-default border border-t-0 border-l-0 bg-[#F6F6F9]\" />\n\n {columns.map((column) => (\n <ColumnTitleIndicator\n key={`spreadsheet__column__header__key__${column.name}__${column.position}`}\n column={column}\n />\n ))}\n </div>\n </div>\n );\n}\n","import { useSpreadsheet } from '@/src/components/spreadsheet/lib/use-spreadsheet';\nimport * as Matrix from '@/src/components/spreadsheet/model/matrix';\nimport * as Spreadsheet from '@/src/components/spreadsheet/model/spreadsheet';\nimport { DragIndicator } from '@/src/components/spreadsheet/ui/indicators/drag-indicator';\nimport { cn } from '@/src/shared/lib/cn';\nimport {\n type DragEvent,\n type PropsWithChildren,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\ntype ColumnIndicatorProps = PropsWithChildren<{\n className?: string;\n column: Spreadsheet.Column;\n}>;\n\nexport function ColumnIndicator(props: ColumnIndicatorProps) {\n const { className, column, children } = props;\n const { id, width, position, visible, alphabetLetter } = column;\n\n const { matrix, pointRange, containerDimensions, onColumnResize } = useSpreadsheet();\n\n const rulerIndicatorRef = useRef<HTMLDivElement | null>(null);\n const rulerIndicatorHeight = useMemo(\n () => (containerDimensions?.height || 0) + 32,\n [containerDimensions?.height],\n );\n\n const [dragging, setDragging] = useState(false);\n const [startClientX, setStartClientX] = useState(0);\n const [clientX, setClientX] = useState(0);\n\n const difference = useMemo(\n () => (dragging ? clientX - startClientX : 0),\n [dragging, clientX, startClientX],\n );\n\n const onDragStart = useCallback((e: DragEvent<HTMLButtonElement>) => {\n setStartClientX(e.clientX);\n setDragging(true);\n }, []);\n\n const onDrag = useCallback(\n (e: DragEvent<HTMLButtonElement>) => {\n const rulerIndicatorElement = rulerIndicatorRef.current;\n\n if (!rulerIndicatorElement) return;\n\n const difference = e.clientX - startClientX;\n\n let newWidth = width + difference;\n\n if (newWidth > Spreadsheet.COLUMN_MAX_WIDTH) newWidth = Spreadsheet.COLUMN_MAX_WIDTH;\n if (newWidth < Spreadsheet.COLUMN_MIN_WIDTH) newWidth = Spreadsheet.COLUMN_MIN_WIDTH;\n\n rulerIndicatorElement.style.left = `${newWidth}px`;\n\n setClientX(e.clientX);\n },\n [startClientX, width],\n );\n\n const onDragEnd = useCallback(\n (e: DragEvent<HTMLButtonElement>) => {\n const difference = e.clientX - startClientX;\n const nextWidth = width + difference;\n onColumnResize({ width: nextWidth, columnId: id });\n setDragging(false);\n },\n [startClientX, width, id, onColumnResize],\n );\n\n const createClassName = useCallback(() => {\n if (dragging) return `bg-neutral-100 font-bold text-neutral-700 ${className}`;\n\n if (pointRange && !dragging) {\n const { start, end } = pointRange;\n\n const hasEntireColumns = Matrix.hasEntireColumns({ matrix, pointRange });\n const columnInRange = position >= start.column && position <= end.column;\n\n if (hasEntireColumns) return `bg-[#0085FF] font-bold text-white ${className}`;\n\n if (columnInRange) return `bg-blue-100 font-bold text-blue-700 ${className}`;\n }\n\n return className;\n }, [dragging, className, matrix, pointRange, position]);\n\n const rulerIndicatorToPx = useCallback(() => {\n let newWidth = width + difference;\n\n if (newWidth > Spreadsheet.COLUMN_MAX_WIDTH) newWidth = Spreadsheet.COLUMN_MAX_WIDTH;\n if (newWidth < Spreadsheet.COLUMN_MIN_WIDTH) newWidth = Spreadsheet.COLUMN_MIN_WIDTH;\n\n return `${newWidth}px`;\n }, [width, difference]);\n\n const dragEventListeners = useMemo(\n () => ({ onDragStart, onDrag, onDragEnd }),\n [onDragStart, onDrag, onDragEnd],\n );\n\n useEffect(() => {\n const rulerIndicatorElement = rulerIndicatorRef.current;\n\n if (!rulerIndicatorElement) return;\n\n rulerIndicatorElement.style.left = `${width}px`;\n }, [width]);\n\n if (!visible) return null;\n\n return (\n <div\n style={{ width }}\n className={cn(\n 'relative flex h-7 w-32 shrink-0 items-center justify-center border border-t-0 border-l-0 text-[#8E8EA9] text-xs',\n createClassName(),\n )}\n >\n <DragIndicator\n {...dragEventListeners}\n className={cn(\n '-right-[3px] -top-1 absolute z-50 opacity-0 hover:opacity-100',\n dragging && 'opacity-0',\n )}\n />\n\n <div\n ref={rulerIndicatorRef}\n style={{ height: rulerIndicatorHeight }}\n className={cn(\n '-top-4 pointer-events-none absolute z-50 h-full w-1.5 rounded-full bg-blue-400 shadow-lg outline outline-sky-100',\n dragging ? 'opacity-100' : 'opacity-0',\n )}\n >\n <span className=\"-translate-y-1/2 relative top-8 left-4 z-50 select-none rounded-md border bg-white p-1 font-semibold drop-shadow-md\">\n {rulerIndicatorToPx()}\n </span>\n </div>\n\n <span>{children || alphabetLetter}</span>\n </div>\n );\n}\n","import { cn } from '@/src/shared/lib/cn';\nimport type { DragEvent } from 'react';\n\ntype DragIndicatorProps = {\n\tonDragStart?: (e: DragEvent<HTMLButtonElement>) => void;\n\tonDrag?: (e: DragEvent<HTMLButtonElement>) => void;\n\tonDragEnd?: (e: DragEvent<HTMLButtonElement>) => void;\n\n\tclassName?: string;\n};\n\nexport function DragIndicator(props: DragIndicatorProps) {\n\tconst { className, ...rest } = props;\n\n\treturn (\n\t\t<button\n\t\t\tdraggable\n\t\t\tclassName={cn(\n\t\t\t\t'h-9 w-1.5 cursor-col-resize rounded-sm bg-neutral-400 drop-shadow-md',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...rest}\n\t\t>\n\t\t\t<div className=\"relative\">\n\t\t\t\t<span className=\"-translate-y-1/2 absolute top-1/2 right-2.5 h-3 w-1 rounded-full bg-neutral-300\" />\n\t\t\t\t<span className=\"-translate-y-1/2 absolute top-1/2 left-2.5 h-3 w-1 rounded-full bg-neutral-300\" />\n\t\t\t</div>\n\t\t</button>\n\t);\n}\n","import * as Spreadsheet from '@/src/components/spreadsheet/model/spreadsheet';\nimport { IntegerIcon } from '@/src/components/spreadsheet/ui/icons/integer-icon';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/src/shared/ui/tooltip';\nimport { QuestionMarkCircledIcon, TextIcon } from '@radix-ui/react-icons';\nimport {\n CalendarIcon,\n CopyCheckIcon,\n DivideIcon,\n DollarSignIcon,\n ListTodoIcon,\n PercentIcon,\n} from 'lucide-react';\n\nexport function ColumnTitleIndicator({ column }: { column: Spreadsheet.Column }) {\n const { width, name, visible, dataEditorType, description } = column;\n\n if (!visible) return null;\n\n return (\n <div\n className=\"flex h-9 w-32 shrink-0 items-center border border-t-0 border-l-0 bg-[#F6F6F9] px-2\"\n style={{\n width,\n height: Spreadsheet.COLUMN_TITLE_INITIAL_HEIGHT,\n }}\n >\n <div className=\"mr-2 w-4 shrink-0 text-[#8E8EA9]\">\n {dataEditorType === 'String' && <TextIcon className=\"h-4 w-4\" />}\n {dataEditorType === 'Date' && <CalendarIcon className=\"h-4 w-4\" />}\n {dataEditorType === 'Boolean' && <CopyCheckIcon className=\"h-4 w-4\" />}\n {dataEditorType === 'Select' && <ListTodoIcon className=\"h-4 w-4\" />}\n\n {dataEditorType === 'Float' && <DivideIcon className=\"h-4 w-4\" />}\n {dataEditorType === 'Decimal' && <DivideIcon className=\"h-4 w-4\" />}\n {dataEditorType === 'Integer' && <IntegerIcon className=\"h-4 w-4\" />}\n {dataEditorType === 'Currency' && <DollarSignIcon className=\"h-4 w-4\" />}\n {dataEditorType === 'Percentage' && <PercentIcon className=\"h-4 w-4\" />}\n </div>\n\n <p\n title={name}\n className=\"mr-2 line-clamp-2 w-full break-words font-semibold text-[#4A4A6A] text-xs\"\n >\n {name}\n </p>\n\n {description ? (\n <TooltipProvider>\n <Tooltip delayDuration={100}>\n <TooltipTrigger>\n <QuestionMarkCircledIcon className=\"h-4 w-4 text-[#4A4A6A]\" />\n </TooltipTrigger>\n\n <TooltipContent className=\"max-w-[240px]\">\n <p>{description}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n ) : (\n <div className=\"w-4 shrink-0\" />\n )}\n </div>\n );\n}\n","import type { SVGProps } from 'react';\n\nexport function IntegerIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n stroke=\"currentColor\"\n fill=\"currentColor\"\n strokeWidth=\"0\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <title>Integer</title>\n <path d=\"M13.003 7.754a.75.75 0 0 1 .75-.75h5.232a.75.75 0 0 1 .53 1.28l-2.776 2.777c.55.097 1.057.253 1.492.483.905.477 1.504 1.284 1.504 2.418 0 .966-.471 1.75-1.172 2.27-.687.511-1.587.77-2.521.77-1.367 0-2.274-.528-2.667-.756a.75.75 0 0 1 .755-1.297c.331.193.953.553 1.912.553.673 0 1.243-.188 1.627-.473.37-.275.566-.635.566-1.067 0-.5-.219-.836-.703-1.091-.538-.284-1.375-.443-2.471-.443a.75.75 0 0 1-.53-1.28l2.643-2.644h-3.421a.75.75 0 0 1-.75-.75ZM7.88 15.215a1.4 1.4 0 0 0-1.446.83.75.75 0 0 1-1.37-.61 2.899 2.899 0 0 1 2.986-1.71c.589.06 1.139.323 1.557.743.434.446.685 1.058.685 1.778 0 1.641-1.254 2.437-2.12 2.986-.538.341-1.18.694-1.495 1.273H9.75a.75.75 0 0 1 0 1.5h-4a.75.75 0 0 1-.75-.75c0-1.799 1.337-2.63 2.243-3.21 1.032-.659 1.55-1.031 1.55-1.8 0-.355-.116-.584-.26-.732a1.071 1.071 0 0 0-.652-.298Zm.234-13.121a.75.75 0 0 1 .386.656V9h1.252a.75.75 0 0 1 0 1.5H5.75a.75.75 0 0 1 0-1.5H7V4.103l-.853.533a.749.749 0 1 1-.795-1.272l2-1.25a.749.749 0 0 1 .762-.02Z\" />\n </svg>\n );\n}\n","'use client';\n\nimport { cn } from '@/src/shared/lib/cn';\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\nimport * as React from 'react';\n\nconst TooltipProvider = TooltipPrimitive.Provider;\n\nconst Tooltip = TooltipPrimitive.Root;\n\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'fade-in-0 zoom-in-95 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 animate-in overflow-hidden rounded-md bg-primary px-3 py-1.5 text-primary-foreground text-xs data-[state=closed]:animate-out',\n className,\n )}\n {...props}\n />\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };\n","export default function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}","function composeEventHandlers<E>(\n originalEventHandler?: (event: E) => void,\n ourEventHandler?: (event: E) => void,\n { checkForDefaultPrevented = true } = {}\n) {\n return function handleEvent(event: E) {\n originalEventHandler?.(event);\n\n if (checkForDefaultPrevented === false || !((event as unknown) as Event).defaultPrevented) {\n return ourEventHandler?.(event);\n }\n };\n}\n\nexport { composeEventHandlers };\n","import * as React from 'react';\n\ntype PossibleRef<T> = React.Ref<T> | undefined;\n\n/**\n * Set a given ref to a given value\n * This utility takes care of different types of refs: callback refs and RefObject(s)\n */\nfunction setRef<T>(ref: PossibleRef<T>, value: T) {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref !== null && ref !== undefined) {\n (ref as React.MutableRefObject<T>).current = value;\n }\n}\n\n/**\n * A utility to compose multiple refs together\n * Accepts callback refs and RefObject(s)\n */\nfunction composeRefs<T>(...refs: PossibleRef<T>[]) {\n return (node: T) => refs.forEach((ref) => setRef(ref, node));\n}\n\n/**\n * A custom hook that composes multiple refs\n * Accepts callback refs and RefObject(s)\n */\nfunction useComposedRefs<T>(...refs: PossibleRef<T>[]) {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return React.useCallback(composeRefs(...refs), refs);\n}\n\nexport { composeRefs, useComposedRefs };\n","import * as React from 'react';\n\nfunction createContext<ContextValueType extends object | null>(\n rootComponentName: string,\n defaultContext?: ContextValueType\n) {\n const Context = React.createContext<ContextValueType | undefined>(defaultContext);\n\n function Provider(props: ContextValueType & { children: React.ReactNode }) {\n const { children, ...context } = props;\n // Only re-memoize when prop values change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n return <Context.Provider value={value}>{children}</Context.Provider>;\n }\n\n function useContext(consumerName: string) {\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== undefined) return defaultContext;\n // if a defaultContext wasn't specified, it's a required context.\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n\n Provider.displayName = rootComponentName + 'Provider';\n return [Provider, useContext] as const;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * createContextScope\n * -----------------------------------------------------------------------------------------------*/\n\ntype Scope<C = any> = { [scopeName: string]: React.Context<C>[] } | undefined;\ntype ScopeHook = (scope: Scope) => { [__scopeProp: string]: Scope };\ninterface CreateScope {\n scopeName: string;\n (): ScopeHook;\n}\n\nfunction createContextScope(scopeName: string, createContextScopeDeps: CreateScope[] = []) {\n let defaultContexts: any[] = [];\n\n /* -----------------------------------------------------------------------------------------------\n * createContext\n * ---------------------------------------------------------------------------------------------*/\n\n function createContext<ContextValueType extends object | null>(\n rootComponentName: string,\n defaultContext?: ContextValueType\n ) {\n const BaseContext = React.createContext<ContextValueType | undefined>(defaultContext);\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n\n function Provider(\n props: ContextValueType & { scope: Scope<ContextValueType>; children: React.ReactNode }\n ) {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName][index] || BaseContext;\n // Only re-memoize when prop values change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n return <Context.Provider value={value}>{children}</Context.Provider>;\n }\n\n function useContext(consumerName: string, scope: Scope<ContextValueType | undefined>) {\n const Context = scope?.[scopeName][index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== undefined) return defaultContext;\n // if a defaultContext wasn't specified, it's a required context.\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n\n Provider.displayName = rootComponentName + 'Provider';\n return [Provider, useContext] as const;\n }\n\n /* -----------------------------------------------------------------------------------------------\n * createScope\n * ---------------------------------------------------------------------------------------------*/\n\n const createScope: CreateScope = () => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return function useScope(scope: Scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n };\n };\n\n createScope.scopeName = scopeName;\n return [createContext, composeContextScopes(createScope, ...createContextScopeDeps)] as const;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * composeContextScopes\n * -----------------------------------------------------------------------------------------------*/\n\nfunction composeContextScopes(...scopes: CreateScope[]) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n\n const createScope: CreateScope = () => {\n const scopeHooks = scopes.map((createScope) => ({\n useScope: createScope(),\n scopeName: createScope.scopeName,\n }));\n\n return function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes, { useScope, scopeName }) => {\n // We are calling a hook inside a callback which React warns against to avoid inconsistent\n // renders, however, scoping doesn't have render side effects so we ignore the rule.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes, ...currentScope };\n }, {});\n\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n };\n };\n\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nexport { createContext, createContextScope };\nexport type { CreateScope, Scope };\n","import * as React from 'react';\nimport { composeRefs } from '@radix-ui/react-compose-refs';\n\n/* -------------------------------------------------------------------------------------------------\n * Slot\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SlotProps extends React.HTMLAttributes<HTMLElement> {\n children?: React.ReactNode;\n}\n\nconst Slot = React.forwardRef<HTMLElement, SlotProps>((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n\n if (slottable) {\n // the new element to render is the one passed as a child of `Slottable`\n const newElement = slottable.props.children as React.ReactNode;\n\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n // because the new element will be the one rendered, we are only interested\n // in grabbing its children (`newElement.props.children`)\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement)\n ? (newElement.props.children as React.ReactNode)\n : null;\n } else {\n return child;\n }\n });\n\n return (\n <SlotClone {...slotProps} ref={forwardedRef}>\n {React.isValidElement(newElement)\n ? React.cloneElement(newElement, undefined, newChildren)\n : null}\n </SlotClone>\n );\n }\n\n return (\n <SlotClone {...slotProps} ref={forwardedRef}>\n {children}\n </SlotClone>\n );\n});\n\nSlot.displayName = 'Slot';\n\n/* -------------------------------------------------------------------------------------------------\n * SlotClone\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SlotCloneProps {\n children: React.ReactNode;\n}\n\nconst SlotClone = React.forwardRef<any, SlotCloneProps>((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n\n if (React.isValidElement(children)) {\n return React.cloneElement(children, {\n ...mergeProps(slotProps, children.props),\n ref: forwardedRef ? composeRefs(forwardedRef, (children as any).ref) : (children as any).ref,\n });\n }\n\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n});\n\nSlotClone.displayName = 'SlotClone';\n\n/* -------------------------------------------------------------------------------------------------\n * Slottable\n * -----------------------------------------------------------------------------------------------*/\n\nconst Slottable = ({ children }: { children: React.ReactNode }) => {\n return <>{children}</>;\n};\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype AnyProps = Record<string, any>;\n\nfunction isSlottable(child: React.ReactNode): child is React.ReactElement {\n return React.isValidElement(child) && child.type === Slottable;\n}\n\nfunction mergeProps(slotProps: AnyProps, childProps: AnyProps) {\n // all child props should override\n const overrideProps = { ...childProps };\n\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n // if the handler exists on both, we compose them\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args: unknown[]) => {\n childPropValue(...args);\n slotPropValue(...args);\n };\n }\n // but if it exists only on the slot, we use only this one\n else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n }\n // if it's `style`, we merge them\n else if (propName === 'style') {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === 'className') {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(' ');\n }\n }\n\n return { ...slotProps, ...overrideProps };\n}\n\nconst Root = Slot;\n\nexport {\n Slot,\n Slottable,\n //\n Root,\n};\nexport type { SlotProps };\n","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { Slot } from '@radix-ui/react-slot';\n\nconst NODES = [\n 'a',\n 'button',\n 'div',\n 'form',\n 'h2',\n 'h3',\n 'img',\n 'input',\n 'label',\n 'li',\n 'nav',\n 'ol',\n 'p',\n 'span',\n 'svg',\n 'ul',\n] as const;\n\n// Temporary while we await merge of this fix:\n// https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55396\n// prettier-ignore\ntype PropsWithoutRef<P> = P extends any ? ('ref' extends keyof P ? Pick<P, Exclude<keyof P, 'ref'>> : P) : P;\ntype ComponentPropsWithoutRef<T extends React.ElementType> = PropsWithoutRef<\n React.ComponentProps<T>\n>;\n\ntype Primitives = { [E in typeof NODES[number]]: PrimitiveForwardRefComponent<E> };\ntype PrimitivePropsWithRef<E extends React.ElementType> = React.ComponentPropsWithRef<E> & {\n asChild?: boolean;\n};\n\ninterface PrimitiveForwardRefComponent<E extends React.ElementType>\n extends React.ForwardRefExoticComponent<PrimitivePropsWithRef<E>> {}\n\n/* -------------------------------------------------------------------------------------------------\n * Primitive\n * -----------------------------------------------------------------------------------------------*/\n\nconst Primitive = NODES.reduce((primitive, node) => {\n const Node = React.forwardRef((props: PrimitivePropsWithRef<typeof node>, forwardedRef: any) => {\n const { asChild, ...primitiveProps } = props;\n const Comp: any = asChild ? Slot : node;\n\n React.useEffect(() => {\n (window as any)[Symbol.for('radix-ui')] = true;\n }, []);\n\n return <Comp {...primitiveProps} ref={forwardedRef} />;\n });\n\n Node.displayName = `Primitive.${node}`;\n\n return { ...primitive, [node]: Node };\n}, {} as Primitives);\n\n/* -------------------------------------------------------------------------------------------------\n * Utils\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Flush custom event dispatch\n * https://github.com/radix-ui/primitives/pull/1378\n *\n * React batches *all* event handlers since version 18, this introduces certain considerations when using custom event types.\n *\n * Internally, React prioritises events in the following order:\n * - discrete\n * - continuous\n * - default\n *\n * https://github.com/facebook/react/blob/a8a4742f1c54493df00da648a3f9d26e3db9c8b5/packages/react-dom/src/events/ReactDOMEventListener.js#L294-L350\n *\n * `discrete` is an important distinction as updates within these events are applied immediately.\n * React however, is not able to infer the priority of custom event types due to how they are detected internally.\n * Because of this, it's possible for updates from custom events to be unexpectedly batched when\n * dispatched by another `discrete` event.\n *\n * In order to ensure that updates from custom events are applied predictably, we need to manually flush the batch.\n * This utility should be used when dispatching a custom event from within another `discrete` event, this utility\n * is not nessesary when dispatching known event types, or if dispatching a custom type inside a non-discrete event.\n * For example:\n *\n * dispatching a known click 👎\n * target.dispatchEvent(new Event(‘click’))\n *\n * dispatching a custom type within a non-discrete event 👎\n * onScroll={(event) => event.target.dispatchEvent(new CustomEvent(‘customType’))}\n *\n * dispatching a custom type within a `discrete` event 👍\n * onPointerDown={(event) => dispatchDiscreteCustomEvent(event.target, new CustomEvent(‘customType’))}\n *\n * Note: though React classifies `focus`, `focusin` and `focusout` events as `discrete`, it's not recommended to use\n * this utility with them. This is because it's possible for those handlers to be called implicitly during render\n * e.g. when focus is within a component as it is unmounted, or when managing focus on mount.\n */\n\nfunction dispatchDiscreteCustomEvent<E extends CustomEvent>(target: E['target'], event: E) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = Primitive;\n\nexport {\n Primitive,\n //\n Root,\n //\n dispatchDiscreteCustomEvent,\n};\nexport type { ComponentPropsWithoutRef, PrimitivePropsWithRef };\n","import * as React from 'react';\n\n/**\n * A custom hook that converts a callback to a ref to avoid triggering re-renders when passed as a\n * prop or avoid re-executing effects when passed as a dependency\n */\nfunction useCallbackRef<T extends (...args: any[]) => any>(callback: T | undefined): T {\n const callbackRef = React.useRef(callback);\n\n React.useEffect(() => {\n callbackRef.current = callback;\n });\n\n // https://github.com/facebook/react/issues/19240\n return React.useMemo(() => ((...args) => callbackRef.current?.(...args)) as T, []);\n}\n\nexport { useCallbackRef };\n","import * as React from 'react';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\n\n/**\n * Listens for when the escape key is down\n */\nfunction useEscapeKeydown(\n onEscapeKeyDownProp?: (event: KeyboardEvent) => void,\n ownerDocument: Document = globalThis?.document\n) {\n const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp);\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n onEscapeKeyDown(event);\n }\n };\n ownerDocument.addEventListener('keydown', handleKeyDown);\n return () => ownerDocument.removeEventListener('keydown', handleKeyDown);\n }, [onEscapeKeyDown, ownerDocument]);\n}\n\nexport { useEscapeKeydown };\n","import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { Primitive, dispatchDiscreteCustomEvent } from '@radix-ui/react-primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\nimport { useEscapeKeydown } from '@radix-ui/react-use-escape-keydown';\n\nimport type * as Radix from '@radix-ui/react-primitive';\n\n/* -------------------------------------------------------------------------------------------------\n * DismissableLayer\n * -----------------------------------------------------------------------------------------------*/\n\nconst DISMISSABLE_LAYER_NAME = 'DismissableLayer';\nconst CONTEXT_UPDATE = 'dismissableLayer.update';\nconst POINTER_DOWN_OUTSIDE = 'dismissableLayer.pointerDownOutside';\nconst FOCUS_OUTSIDE = 'dismissableLayer.focusOutside';\n\nlet originalBodyPointerEvents: string;\n\nconst DismissableLayerContext = React.createContext({\n layers: new Set<DismissableLayerElement>(),\n layersWithOutsidePointerEventsDisabled: new Set<DismissableLayerElement>(),\n branches: new Set<DismissableLayerBranchElement>(),\n});\n\ntype DismissableLayerElement = React.ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = Radix.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface DismissableLayerProps extends PrimitiveDivProps {\n /**\n * When `true`, hover/focus/click interactions will be disabled on elements outside\n * the `DismissableLayer`. Users will need to click twice on outside elements to\n * interact with them: once to close the `DismissableLayer`, and again to trigger the element.\n */\n disableOutsidePointerEvents?: boolean;\n /**\n * Event handler called when the escape key is down.\n * Can be prevented.\n */\n onEscapeKeyDown?: (event: KeyboardEvent) => void;\n /**\n * Event handler called when the a `pointerdown` event happens outside of the `DismissableLayer`.\n * Can be prevented.\n */\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void;\n /**\n * Event handler called when the focus moves outside of the `DismissableLayer`.\n * Can be prevented.\n */\n onFocusOutside?: (event: FocusOutsideEvent) => void;\n /**\n * Event handler called when an interaction happens outside the `DismissableLayer`.\n * Specifically, when a `pointerdown` event happens outside or focus moves outside of it.\n * Can be prevented.\n */\n onInteractOutside?: (event: PointerDownOutsideEvent | FocusOutsideEvent) => void;\n /**\n * Handler called when the `DismissableLayer` should be dismissed\n */\n onDismiss?: () => void;\n}\n\nconst DismissableLayer = React.forwardRef<DismissableLayerElement, DismissableLayerProps>(\n (props, forwardedRef) => {\n const {\n disableOutsidePointerEvents = false,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n ...layerProps\n } = props;\n const context = React.useContext(DismissableLayerContext);\n const [node, setNode] = React.useState<DismissableLayerElement | null>(null);\n const ownerDocument = node?.ownerDocument ?? globalThis?.document;\n const [, force] = React.useState({});\n const composedRefs = useComposedRefs(forwardedRef, (node) => setNode(node));\n const layers = Array.from(context.layers);\n const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1); // prettier-ignore\n const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled); // prettier-ignore\n const index = node ? layers.indexOf(node) : -1;\n const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;\n const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;\n\n const pointerDownOutside = usePointerDownOutside((event) => {\n const target = event.target as HTMLElement;\n const isPointerDownOnBranch = [...context.branches].some((branch) => branch.contains(target));\n if (!isPointerEventsEnabled || isPointerDownOnBranch) return;\n onPointerDownOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n\n const focusOutside = useFocusOutside((event) => {\n const target = event.target as HTMLElement;\n const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target));\n if (isFocusInBranch) return;\n onFocusOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n\n useEscapeKeydown((event) => {\n const isHighestLayer = index === context.layers.size - 1;\n if (!isHighestLayer) return;\n onEscapeKeyDown?.(event);\n if (!event.defaultPrevented && onDismiss) {\n event.preventDefault();\n onDismiss();\n }\n }, ownerDocument);\n\n React.useEffect(() => {\n if (!node) return;\n if (disableOutsidePointerEvents) {\n if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;\n ownerDocument.body.style.pointerEvents = 'none';\n }\n context.layersWithOutsidePointerEventsDisabled.add(node);\n }\n context.layers.add(node);\n dispatchUpdate();\n return () => {\n if (\n disableOutsidePointerEvents &&\n context.layersWithOutsidePointerEventsDisabled.size === 1\n ) {\n ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n }\n };\n }, [node, ownerDocument, disableOutsidePointerEvents, context]);\n\n /**\n * We purposefully prevent combining this effect with the `disableOutsidePointerEvents` effect\n * because a change to `disableOutsidePointerEvents` would remove this layer from the stack\n * and add it to the end again so the layering order wouldn't be _creation order_.\n * We only want them to be removed from context stacks when unmounted.\n */\n React.useEffect(() => {\n return () => {\n if (!node) return;\n context.layers.delete(node);\n context.layersWithOutsidePointerEventsDisabled.delete(node);\n dispatchUpdate();\n };\n }, [node, context]);\n\n React.useEffect(() => {\n const handleUpdate = () => force({});\n document.addEventListener(CONTEXT_UPDATE, handleUpdate);\n return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);\n }, []);\n\n return (\n <Primitive.div\n {...layerProps}\n ref={composedRefs}\n style={{\n pointerEvents: isBodyPointerEventsDisabled\n ? isPointerEventsEnabled\n ? 'auto'\n : 'none'\n : undefined,\n ...props.style,\n }}\n onFocusCapture={composeEventHandlers(props.onFocusCapture, focusOutside.onFocusCapture)}\n onBlurCapture={composeEventHandlers(props.onBlurCapture, focusOutside.onBlurCapture)}\n onPointerDownCapture={composeEventHandlers(\n props.onPointerDownCapture,\n pointerDownOutside.onPointerDownCapture\n )}\n />\n );\n }\n);\n\nDismissableLayer.displayName = DISMISSABLE_LAYER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DismissableLayerBranch\n * -----------------------------------------------------------------------------------------------*/\n\nconst BRANCH_NAME = 'DismissableLayerBranch';\n\ntype DismissableLayerBranchElement = React.ElementRef<typeof Primitive.div>;\ninterface DismissableLayerBranchProps extends PrimitiveDivProps {}\n\nconst DismissableLayerBranch = React.forwardRef<\n DismissableLayerBranchElement,\n DismissableLayerBranchProps\n>((props, forwardedRef) => {\n const context = React.useContext(DismissableLayerContext);\n const ref = React.useRef<DismissableLayerBranchElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n context.branches.add(node);\n return () => {\n context.branches.delete(node);\n };\n }\n }, [context.branches]);\n\n return <Primitive.div {...props} ref={composedRefs} />;\n});\n\nDismissableLayerBranch.displayName = BRANCH_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype PointerDownOutsideEvent = CustomEvent<{ originalEvent: PointerEvent }>;\ntype FocusOutsideEvent = CustomEvent<{ originalEvent: FocusEvent }>;\n\n/**\n * Listens for `pointerdown` outside a react subtree. We use `pointerdown` rather than `pointerup`\n * to mimic layer dismissing behaviour present in OS.\n * Returns props to pass to the node we want to check for outside events.\n */\nfunction usePointerDownOutside(\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void,\n ownerDocument: Document = globalThis?.document\n) {\n const handlePointerDownOutside = useCallbackRef(onPointerDownOutside) as EventListener;\n const isPointerInsideReactTreeRef = React.useRef(false);\n const handleClickRef = React.useRef(() => {});\n\n React.useEffect(() => {\n const handlePointerDown = (event: PointerEvent) => {\n if (event.target && !isPointerInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n\n function handleAndDispatchPointerDownOutsideEvent() {\n handleAndDispatchCustomEvent(\n POINTER_DOWN_OUTSIDE,\n handlePointerDownOutside,\n eventDetail,\n { discrete: true }\n );\n }\n\n /**\n * On touch devices, we need to wait for a click event because browsers implement\n * a ~350ms delay between the time the user stops touching the display and when the\n * browser executres events. We need to ensure we don't reactivate pointer-events within\n * this timeframe otherwise the browser may execute events that should have been prevented.\n *\n * Additionally, this also lets us deal automatically with cancellations when a click event\n * isn't raised because the page was considered scrolled/drag-scrolled, long-pressed, etc.\n *\n * This is why we also continuously remove the previous listener, because we cannot be\n * certain that it was raised, and therefore cleaned-up.\n */\n if (event.pointerType === 'touch') {\n ownerDocument.removeEventListener('click', handleClickRef.current);\n handleClickRef.current = handleAndDispatchPointerDownOutsideEvent;\n ownerDocument.addEventListener('click', handleClickRef.current, { once: true });\n } else {\n handleAndDispatchPointerDownOutsideEvent();\n }\n } else {\n // We need to remove the event listener in case the outside click has been canceled.\n // See: https://github.com/radix-ui/primitives/issues/2171\n ownerDocument.removeEventListener('click', handleClickRef.current);\n }\n isPointerInsideReactTreeRef.current = false;\n };\n /**\n * if this hook executes in a component that mounts via a `pointerdown` event, the event\n * would bubble up to the document and trigger a `pointerDownOutside` event. We avoid\n * this by delaying the event listener registration on the document.\n * This is not React specific, but rather how the DOM works, ie:\n * ```\n * button.addEventListener('pointerdown', () => {\n * console.log('I will log');\n * document.addEventListener('pointerdown', () => {\n * console.log('I will also log');\n * })\n * });\n */\n const timerId = window.setTimeout(() => {\n ownerDocument.addEventListener('pointerdown', handlePointerDown);\n }, 0);\n return () => {\n window.clearTimeout(timerId);\n ownerDocument.removeEventListener('pointerdown', handlePointerDown);\n ownerDocument.removeEventListener('click', handleClickRef.current);\n };\n }, [ownerDocument, handlePointerDownOutside]);\n\n return {\n // ensures we check React component tree (not just DOM tree)\n onPointerDownCapture: () => (isPointerInsideReactTreeRef.current = true),\n };\n}\n\n/**\n * Listens for when focus happens outside a react subtree.\n * Returns props to pass to the root (node) of the subtree we want to check.\n */\nfunction useFocusOutside(\n onFocusOutside?: (event: FocusOutsideEvent) => void,\n ownerDocument: Document = globalThis?.document\n) {\n const handleFocusOutside = useCallbackRef(onFocusOutside) as EventListener;\n const isFocusInsideReactTreeRef = React.useRef(false);\n\n React.useEffect(() => {\n const handleFocus = (event: FocusEvent) => {\n if (event.target && !isFocusInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, {\n discrete: false,\n });\n }\n };\n ownerDocument.addEventListener('focusin', handleFocus);\n return () => ownerDocument.removeEventListener('focusin', handleFocus);\n }, [ownerDocument, handleFocusOutside]);\n\n return {\n onFocusCapture: () => (isFocusInsideReactTreeRef.current = true),\n onBlurCapture: () => (isFocusInsideReactTreeRef.current = false),\n };\n}\n\nfunction dispatchUpdate() {\n const event = new CustomEvent(CONTEXT_UPDATE);\n document.dispatchEvent(event);\n}\n\nfunction handleAndDispatchCustomEvent<E extends CustomEvent, OriginalEvent extends Event>(\n name: string,\n handler: ((event: E) => void) | undefined,\n detail: { originalEvent: OriginalEvent } & (E extends CustomEvent<infer D> ? D : never),\n { discrete }: { discrete: boolean }\n) {\n const target = detail.originalEvent.target;\n const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail });\n if (handler) target.addEventListener(name, handler as EventListener, { once: true });\n\n if (discrete) {\n dispatchDiscreteCustomEvent(target, event);\n } else {\n target.dispatchEvent(event);\n }\n}\n\nconst Root = DismissableLayer;\nconst Branch = DismissableLayerBranch;\n\nexport {\n DismissableLayer,\n DismissableLayerBranch,\n //\n Root,\n Branch,\n};\nexport type { DismissableLayerProps };\n","import * as React from 'react';\n\n/**\n * On the server, React emits a warning when calling `useLayoutEffect`.\n * This is because neither `useLayoutEffect` nor `useEffect` run on the server.\n * We use this safe version which suppresses the warning by replacing it with a noop on the server.\n *\n * See: https://reactjs.org/docs/hooks-reference.html#uselayouteffect\n */\nconst useLayoutEffect = Boolean(globalThis?.document) ? React.useLayoutEffect : () => {};\n\nexport { useLayoutEffect };\n","import * as React from 'react';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\n\n// We `toString()` to prevent bundlers from trying to `import { useId } from 'react';`\nconst useReactId = (React as any)['useId'.toString()] || (() => undefined);\nlet count = 0;\n\nfunction useId(deterministicId?: string): string {\n const [id, setId] = React.useState<string | undefined>(useReactId());\n // React versions older than 18 will have client-side ids only.\n useLayoutEffect(() => {\n if (!deterministicId) setId((reactId) => reactId ?? String(count++));\n }, [deterministicId]);\n return deterministicId || (id ? `radix-${id}` : '');\n}\n\nexport { useId };\n","import { arrow as arrow$1, computePosition } from '@floating-ui/dom';\nexport { autoPlacement, autoUpdate, computePosition, detectOverflow, flip, getOverflowAncestors, hide, inline, limitShift, offset, platform, shift, size } from '@floating-ui/dom';\nimport * as React from 'react';\nimport { useLayoutEffect, useEffect } from 'react';\nimport * as ReactDOM from 'react-dom';\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => {\n function isRef(value) {\n return {}.hasOwnProperty.call(value, 'current');\n }\n return {\n name: 'arrow',\n options,\n fn(state) {\n const {\n element,\n padding\n } = typeof options === 'function' ? options(state) : options;\n if (element && isRef(element)) {\n if (element.current != null) {\n return arrow$1({\n element: element.current,\n padding\n }).fn(state);\n }\n return {};\n }\n if (element) {\n return arrow$1({\n element,\n padding\n }).fn(state);\n }\n return {};\n }\n };\n};\n\nvar index = typeof document !== 'undefined' ? useLayoutEffect : useEffect;\n\n// Fork of `fast-deep-equal` that only does the comparisons we need and compares\n// functions\nfunction deepEqual(a, b) {\n if (a === b) {\n return true;\n }\n if (typeof a !== typeof b) {\n return false;\n }\n if (typeof a === 'function' && a.toString() === b.toString()) {\n return true;\n }\n let length;\n let i;\n let keys;\n if (a && b && typeof a === 'object') {\n if (Array.isArray(a)) {\n length = a.length;\n if (length !== b.length) return false;\n for (i = length; i-- !== 0;) {\n if (!deepEqual(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) {\n return false;\n }\n for (i = length; i-- !== 0;) {\n if (!{}.hasOwnProperty.call(b, keys[i])) {\n return false;\n }\n }\n for (i = length; i-- !== 0;) {\n const key = keys[i];\n if (key === '_owner' && a.$$typeof) {\n continue;\n }\n if (!deepEqual(a[key], b[key])) {\n return false;\n }\n }\n return true;\n }\n\n // biome-ignore lint/suspicious/noSelfCompare: in source\n return a !== a && b !== b;\n}\n\nfunction getDPR(element) {\n if (typeof window === 'undefined') {\n return 1;\n }\n const win = element.ownerDocument.defaultView || window;\n return win.devicePixelRatio || 1;\n}\n\nfunction roundByDPR(element, value) {\n const dpr = getDPR(element);\n return Math.round(value * dpr) / dpr;\n}\n\nfunction useLatestRef(value) {\n const ref = React.useRef(value);\n index(() => {\n ref.current = value;\n });\n return ref;\n}\n\n/**\n * Provides data to position a floating element.\n * @see https://floating-ui.com/docs/useFloating\n */\nfunction useFloating(options) {\n if (options === void 0) {\n options = {};\n }\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform,\n elements: {\n reference: externalReference,\n floating: externalFloating\n } = {},\n transform = true,\n whileElementsMounted,\n open\n } = options;\n const [data, setData] = React.useState({\n x: 0,\n y: 0,\n strategy,\n placement,\n middlewareData: {},\n isPositioned: false\n });\n const [latestMiddleware, setLatestMiddleware] = React.useState(middleware);\n if (!deepEqual(latestMiddleware, middleware)) {\n setLatestMiddleware(middleware);\n }\n const [_reference, _setReference] = React.useState(null);\n const [_floating, _setFloating] = React.useState(null);\n const setReference = React.useCallback(node => {\n if (node !== referenceRef.current) {\n referenceRef.current = node;\n _setReference(node);\n }\n }, []);\n const setFloating = React.useCallback(node => {\n if (node !== floatingRef.current) {\n floatingRef.current = node;\n _setFloating(node);\n }\n }, []);\n const referenceEl = externalReference || _reference;\n const floatingEl = externalFloating || _floating;\n const referenceRef = React.useRef(null);\n const floatingRef = React.useRef(null);\n const dataRef = React.useRef(data);\n const hasWhileElementsMounted = whileElementsMounted != null;\n const whileElementsMountedRef = useLatestRef(whileElementsMounted);\n const platformRef = useLatestRef(platform);\n const update = React.useCallback(() => {\n if (!referenceRef.current || !floatingRef.current) {\n return;\n }\n const config = {\n placement,\n strategy,\n middleware: latestMiddleware\n };\n if (platformRef.current) {\n config.platform = platformRef.current;\n }\n computePosition(referenceRef.current, floatingRef.current, config).then(data => {\n const fullData = {\n ...data,\n isPositioned: true\n };\n if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) {\n dataRef.current = fullData;\n ReactDOM.flushSync(() => {\n setData(fullData);\n });\n }\n });\n }, [latestMiddleware, placement, strategy, platformRef]);\n index(() => {\n if (open === false && dataRef.current.isPositioned) {\n dataRef.current.isPositioned = false;\n setData(data => ({\n ...data,\n isPositioned: false\n }));\n }\n }, [open]);\n const isMountedRef = React.useRef(false);\n index(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: `hasWhileElementsMounted` is intentionally included.\n index(() => {\n if (referenceEl) referenceRef.current = referenceEl;\n if (floatingEl) floatingRef.current = floatingEl;\n if (referenceEl && floatingEl) {\n if (whileElementsMountedRef.current) {\n return whileElementsMountedRef.current(referenceEl, floatingEl, update);\n }\n update();\n }\n }, [referenceEl, floatingEl, update, whileElementsMountedRef, hasWhileElementsMounted]);\n const refs = React.useMemo(() => ({\n reference: referenceRef,\n floating: floatingRef,\n setReference,\n setFloating\n }), [setReference, setFloating]);\n const elements = React.useMemo(() => ({\n reference: referenceEl,\n floating: floatingEl\n }), [referenceEl, floatingEl]);\n const floatingStyles = React.useMemo(() => {\n const initialStyles = {\n position: strategy,\n left: 0,\n top: 0\n };\n if (!elements.floating) {\n return initialStyles;\n }\n const x = roundByDPR(elements.floating, data.x);\n const y = roundByDPR(elements.floating, data.y);\n if (transform) {\n return {\n ...initialStyles,\n transform: \"translate(\" + x + \"px, \" + y + \"px)\",\n ...(getDPR(elements.floating) >= 1.5 && {\n willChange: 'transform'\n })\n };\n }\n return {\n position: strategy,\n left: x,\n top: y\n };\n }, [strategy, transform, elements.floating, data.x, data.y]);\n return React.useMemo(() => ({\n ...data,\n update,\n refs,\n elements,\n floatingStyles\n }), [data, update, refs, elements, floatingStyles]);\n}\n\nexport { arrow, useFloating };\n","import { rectToClientRect, autoPlacement as autoPlacement$1, shift as shift$1, flip as flip$1, size as size$1, hide as hide$1, arrow as arrow$1, inline as inline$1, limitShift as limitShift$1, computePosition as computePosition$1 } from '@floating-ui/core';\nexport { detectOverflow, offset } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle, isHTMLElement, isElement, getWindow, isWebKit, getDocumentElement, getNodeName, isOverflowElement, getNodeScroll, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n const css = getComputedStyle(element);\n // In testing environments, the `width` and `height` properties are empty\n // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n let width = parseFloat(css.width) || 0;\n let height = parseFloat(css.height) || 0;\n const hasOffset = isHTMLElement(element);\n const offsetWidth = hasOffset ? element.offsetWidth : width;\n const offsetHeight = hasOffset ? element.offsetHeight : height;\n const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n if (shouldFallback) {\n width = offsetWidth;\n height = offsetHeight;\n }\n return {\n width,\n height,\n $: shouldFallback\n };\n}\n\nfunction unwrapElement(element) {\n return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n const domElement = unwrapElement(element);\n if (!isHTMLElement(domElement)) {\n return createCoords(1);\n }\n const rect = domElement.getBoundingClientRect();\n const {\n width,\n height,\n $\n } = getCssDimensions(domElement);\n let x = ($ ? round(rect.width) : rect.width) / width;\n let y = ($ ? round(rect.height) : rect.height) / height;\n\n // 0, NaN, or Infinity should always fallback to 1.\n\n if (!x || !Number.isFinite(x)) {\n x = 1;\n }\n if (!y || !Number.isFinite(y)) {\n y = 1;\n }\n return {\n x,\n y\n };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n const win = getWindow(element);\n if (!isWebKit() || !win.visualViewport) {\n return noOffsets;\n }\n return {\n x: win.visualViewport.offsetLeft,\n y: win.visualViewport.offsetTop\n };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n return false;\n }\n return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n const clientRect = element.getBoundingClientRect();\n const domElement = unwrapElement(element);\n let scale = createCoords(1);\n if (includeScale) {\n if (offsetParent) {\n if (isElement(offsetParent)) {\n scale = getScale(offsetParent);\n }\n } else {\n scale = getScale(element);\n }\n }\n const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n let x = (clientRect.left + visualOffsets.x) / scale.x;\n let y = (clientRect.top + visualOffsets.y) / scale.y;\n let width = clientRect.width / scale.x;\n let height = clientRect.height / scale.y;\n if (domElement) {\n const win = getWindow(domElement);\n const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n let currentWin = win;\n let currentIFrame = currentWin.frameElement;\n while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n const iframeScale = getScale(currentIFrame);\n const iframeRect = currentIFrame.getBoundingClientRect();\n const css = getComputedStyle(currentIFrame);\n const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n x *= iframeScale.x;\n y *= iframeScale.y;\n width *= iframeScale.x;\n height *= iframeScale.y;\n x += left;\n y += top;\n currentWin = getWindow(currentIFrame);\n currentIFrame = currentWin.frameElement;\n }\n }\n return rectToClientRect({\n width,\n height,\n x,\n y\n });\n}\n\nconst topLayerSelectors = [':popover-open', ':modal'];\nfunction isTopLayer(floating) {\n return topLayerSelectors.some(selector => {\n try {\n return floating.matches(selector);\n } catch (e) {\n return false;\n }\n });\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n elements,\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isFixed = strategy === 'fixed';\n const documentElement = getDocumentElement(offsetParent);\n const topLayer = elements ? isTopLayer(elements.floating) : false;\n if (offsetParent === documentElement || topLayer && isFixed) {\n return rect;\n }\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n let scale = createCoords(1);\n const offsets = createCoords(0);\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isHTMLElement(offsetParent)) {\n const offsetRect = getBoundingClientRect(offsetParent);\n scale = getScale(offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n }\n }\n return {\n width: rect.width * scale.x,\n height: rect.height * scale.y,\n x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x,\n y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y\n };\n}\n\nfunction getClientRects(element) {\n return Array.from(element.getClientRects());\n}\n\nfunction getWindowScrollBarX(element) {\n // If <html> has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n return getBoundingClientRect(getDocumentElement(element)).left + getNodeScroll(element).scrollLeft;\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n const html = getDocumentElement(element);\n const scroll = getNodeScroll(element);\n const body = element.ownerDocument.body;\n const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n const y = -scroll.scrollTop;\n if (getComputedStyle(body).direction === 'rtl') {\n x += max(html.clientWidth, body.clientWidth) - width;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\nfunction getViewportRect(element, strategy) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n const visualViewportBased = isWebKit();\n if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n const width = element.clientWidth * scale.x;\n const height = element.clientHeight * scale.y;\n const x = left * scale.x;\n const y = top * scale.y;\n return {\n width,\n height,\n x,\n y\n };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n let rect;\n if (clippingAncestor === 'viewport') {\n rect = getViewportRect(element, strategy);\n } else if (clippingAncestor === 'document') {\n rect = getDocumentRect(getDocumentElement(element));\n } else if (isElement(clippingAncestor)) {\n rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n } else {\n const visualOffsets = getVisualOffsets(element);\n rect = {\n ...clippingAncestor,\n x: clippingAncestor.x - visualOffsets.x,\n y: clippingAncestor.y - visualOffsets.y\n };\n }\n return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n const parentNode = getParentNode(element);\n if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n return false;\n }\n return getComputedStyle(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n const cachedResult = cache.get(element);\n if (cachedResult) {\n return cachedResult;\n }\n let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n let currentContainingBlockComputedStyle = null;\n const elementIsFixed = getComputedStyle(element).position === 'fixed';\n let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n const computedStyle = getComputedStyle(currentNode);\n const currentNodeIsContaining = isContainingBlock(currentNode);\n if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n currentContainingBlockComputedStyle = null;\n }\n const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && ['absolute', 'fixed'].includes(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n if (shouldDropCurrentNode) {\n // Drop non-containing blocks.\n result = result.filter(ancestor => ancestor !== currentNode);\n } else {\n // Record last containing block for next iteration.\n currentContainingBlockComputedStyle = computedStyle;\n }\n currentNode = getParentNode(currentNode);\n }\n cache.set(element, result);\n return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary,\n strategy\n } = _ref;\n const elementClippingAncestors = boundary === 'clippingAncestors' ? getClippingElementAncestors(element, this._c) : [].concat(boundary);\n const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n const firstClippingAncestor = clippingAncestors[0];\n const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n return {\n width: clippingRect.right - clippingRect.left,\n height: clippingRect.bottom - clippingRect.top,\n x: clippingRect.left,\n y: clippingRect.top\n };\n}\n\nfunction getDimensions(element) {\n const {\n width,\n height\n } = getCssDimensions(element);\n return {\n width,\n height\n };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const isFixed = strategy === 'fixed';\n const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = createCoords(0);\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n const x = rect.left + scroll.scrollLeft - offsets.x;\n const y = rect.top + scroll.scrollTop - offsets.y;\n return {\n x,\n y,\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n if (!isHTMLElement(element) || getComputedStyle(element).position === 'fixed') {\n return null;\n }\n if (polyfill) {\n return polyfill(element);\n }\n return element.offsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n const window = getWindow(element);\n if (!isHTMLElement(element) || isTopLayer(element)) {\n return window;\n }\n let offsetParent = getTrueOffsetParent(element, polyfill);\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n }\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static' && !isContainingBlock(offsetParent))) {\n return window;\n }\n return offsetParent || getContainingBlock(element) || window;\n}\n\nconst getElementRects = async function (data) {\n const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n const getDimensionsFn = this.getDimensions;\n return {\n reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n floating: {\n x: 0,\n y: 0,\n ...(await getDimensionsFn(data.floating))\n }\n };\n};\n\nfunction isRTL(element) {\n return getComputedStyle(element).direction === 'rtl';\n}\n\nconst platform = {\n convertOffsetParentRelativeRectToViewportRelativeRect,\n getDocumentElement,\n getClippingRect,\n getOffsetParent,\n getElementRects,\n getClientRects,\n getDimensions,\n getScale,\n isElement,\n isRTL\n};\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n let io = null;\n let timeoutId;\n const root = getDocumentElement(element);\n function cleanup() {\n var _io;\n clearTimeout(timeoutId);\n (_io = io) == null || _io.disconnect();\n io = null;\n }\n function refresh(skip, threshold) {\n if (skip === void 0) {\n skip = false;\n }\n if (threshold === void 0) {\n threshold = 1;\n }\n cleanup();\n const {\n left,\n top,\n width,\n height\n } = element.getBoundingClientRect();\n if (!skip) {\n onMove();\n }\n if (!width || !height) {\n return;\n }\n const insetTop = floor(top);\n const insetRight = floor(root.clientWidth - (left + width));\n const insetBottom = floor(root.clientHeight - (top + height));\n const insetLeft = floor(left);\n const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n const options = {\n rootMargin,\n threshold: max(0, min(1, threshold)) || 1\n };\n let isFirstUpdate = true;\n function handleObserve(entries) {\n const ratio = entries[0].intersectionRatio;\n if (ratio !== threshold) {\n if (!isFirstUpdate) {\n return refresh();\n }\n if (!ratio) {\n timeoutId = setTimeout(() => {\n refresh(false, 1e-7);\n }, 100);\n } else {\n refresh(false, ratio);\n }\n }\n isFirstUpdate = false;\n }\n\n // Older browsers don't support a `document` as the root and will throw an\n // error.\n try {\n io = new IntersectionObserver(handleObserve, {\n ...options,\n // Handle <iframe>s\n root: root.ownerDocument\n });\n } catch (e) {\n io = new IntersectionObserver(handleObserve, options);\n }\n io.observe(element);\n }\n refresh(true);\n return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n ancestorScroll = true,\n ancestorResize = true,\n elementResize = typeof ResizeObserver === 'function',\n layoutShift = typeof IntersectionObserver === 'function',\n animationFrame = false\n } = options;\n const referenceEl = unwrapElement(reference);\n const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...getOverflowAncestors(floating)] : [];\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.addEventListener('scroll', update, {\n passive: true\n });\n ancestorResize && ancestor.addEventListener('resize', update);\n });\n const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n let reobserveFrame = -1;\n let resizeObserver = null;\n if (elementResize) {\n resizeObserver = new ResizeObserver(_ref => {\n let [firstEntry] = _ref;\n if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {\n // Prevent update loops when using the `size` middleware.\n // https://github.com/floating-ui/floating-ui/issues/1740\n resizeObserver.unobserve(floating);\n cancelAnimationFrame(reobserveFrame);\n reobserveFrame = requestAnimationFrame(() => {\n var _resizeObserver;\n (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n });\n }\n update();\n });\n if (referenceEl && !animationFrame) {\n resizeObserver.observe(referenceEl);\n }\n resizeObserver.observe(floating);\n }\n let frameId;\n let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n if (animationFrame) {\n frameLoop();\n }\n function frameLoop() {\n const nextRefRect = getBoundingClientRect(reference);\n if (prevRefRect && (nextRefRect.x !== prevRefRect.x || nextRefRect.y !== prevRefRect.y || nextRefRect.width !== prevRefRect.width || nextRefRect.height !== prevRefRect.height)) {\n update();\n }\n prevRefRect = nextRefRect;\n frameId = requestAnimationFrame(frameLoop);\n }\n update();\n return () => {\n var _resizeObserver2;\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.removeEventListener('scroll', update);\n ancestorResize && ancestor.removeEventListener('resize', update);\n });\n cleanupIo == null || cleanupIo();\n (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n resizeObserver = null;\n if (animationFrame) {\n cancelAnimationFrame(frameId);\n }\n };\n}\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n // This caches the expensive `getClippingElementAncestors` function so that\n // multiple lifecycle resets re-use the same result. It only lives for a\n // single call. If other functions become expensive, we can add them as well.\n const cache = new Map();\n const mergedOptions = {\n platform,\n ...options\n };\n const platformWithCache = {\n ...mergedOptions.platform,\n _c: cache\n };\n return computePosition$1(reference, floating, {\n ...mergedOptions,\n platform: platformWithCache\n });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, flip, hide, inline, limitShift, platform, shift, size };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n let {\n reference,\n floating\n } = _ref;\n const sideAxis = getSideAxis(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const alignLength = getAxisLength(alignmentAxis);\n const side = getSide(placement);\n const isVertical = sideAxis === 'y';\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n let coords;\n switch (side) {\n case 'top':\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n case 'bottom':\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n case 'right':\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n case 'left':\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n switch (getAlignment(placement)) {\n case 'start':\n coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n case 'end':\n coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n }\n return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform\n } = config;\n const validMiddleware = middleware.filter(Boolean);\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n let rects = await platform.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement(rects, placement, rtl);\n let statefulPlacement = placement;\n let middlewareData = {};\n let resetCount = 0;\n for (let i = 0; i < validMiddleware.length; i++) {\n const {\n name,\n fn\n } = validMiddleware[i];\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData = {\n ...middlewareData,\n [name]: {\n ...middlewareData[name],\n ...data\n }\n };\n if (reset && resetCount <= 50) {\n resetCount++;\n if (typeof reset === 'object') {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n if (reset.rects) {\n rects = reset.rects === true ? await platform.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n ({\n x,\n y\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n }\n i = -1;\n }\n }\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n var _await$platform$isEle;\n if (options === void 0) {\n options = {};\n }\n const {\n x,\n y,\n platform,\n rects,\n elements,\n strategy\n } = state;\n const {\n boundary = 'clippingAncestors',\n rootBoundary = 'viewport',\n elementContext = 'floating',\n altBoundary = false,\n padding = 0\n } = evaluate(options, state);\n const paddingObject = getPaddingObject(padding);\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n boundary,\n rootBoundary,\n strategy\n }));\n const rect = elementContext === 'floating' ? {\n ...rects.floating,\n x,\n y\n } : rects.reference;\n const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n x: 1,\n y: 1\n } : {\n x: 1,\n y: 1\n };\n const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n elements,\n rect,\n offsetParent,\n strategy\n }) : rect);\n return {\n top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n };\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n name: 'arrow',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n platform,\n elements,\n middlewareData\n } = state;\n // Since `element` is required, we don't Partial<> the type.\n const {\n element,\n padding = 0\n } = evaluate(options, state) || {};\n if (element == null) {\n return {};\n }\n const paddingObject = getPaddingObject(padding);\n const coords = {\n x,\n y\n };\n const axis = getAlignmentAxis(placement);\n const length = getAxisLength(axis);\n const arrowDimensions = await platform.getDimensions(element);\n const isYAxis = axis === 'y';\n const minProp = isYAxis ? 'top' : 'left';\n const maxProp = isYAxis ? 'bottom' : 'right';\n const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n // DOM platform can return `window` as the `offsetParent`.\n if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n clientSize = elements.floating[clientProp] || rects.floating[length];\n }\n const centerToReference = endDiff / 2 - startDiff / 2;\n\n // If the padding is large enough that it causes the arrow to no longer be\n // centered, modify the padding so that it is centered.\n const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside the floating element's bounds.\n const min$1 = minPadding;\n const max = clientSize - arrowDimensions[length] - maxPadding;\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = clamp(min$1, center, max);\n\n // If the reference is small enough that the arrow's padding causes it to\n // to point to nothing for an aligned placement, adjust the offset of the\n // floating element itself. To ensure `shift()` continues to take action,\n // a single reset is performed when this is true.\n const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n return {\n [axis]: coords[axis] + alignmentOffset,\n data: {\n [axis]: offset,\n centerOffset: center - offset - alignmentOffset,\n ...(shouldAddOffset && {\n alignmentOffset\n })\n },\n reset: shouldAddOffset\n };\n }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n return allowedPlacementsSortedByAlignment.filter(placement => {\n if (alignment) {\n return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n }\n return true;\n });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'autoPlacement',\n options,\n async fn(state) {\n var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n const {\n rects,\n middlewareData,\n placement,\n platform,\n elements\n } = state;\n const {\n crossAxis = false,\n alignment,\n allowedPlacements = placements,\n autoAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n const currentPlacement = placements$1[currentIndex];\n if (currentPlacement == null) {\n return {};\n }\n const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n // Make `computeCoords` start from the right place.\n if (placement !== currentPlacement) {\n return {\n reset: {\n placement: placements$1[0]\n }\n };\n }\n const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n placement: currentPlacement,\n overflows: currentOverflows\n }];\n const nextPlacement = placements$1[currentIndex + 1];\n\n // There are more placements to check.\n if (nextPlacement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n const placementsSortedByMostSpace = allOverflows.map(d => {\n const alignment = getAlignment(d.placement);\n return [d.placement, alignment && crossAxis ?\n // Check along the mainAxis and main crossAxis side.\n d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n // Check only the mainAxis.\n d.overflows[0], d.overflows];\n }).sort((a, b) => a[1] - b[1]);\n const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n // Aligned placements should not check their opposite crossAxis\n // side.\n getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n if (resetPlacement !== placement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: resetPlacement\n }\n };\n }\n return {};\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'flip',\n options,\n async fn(state) {\n var _middlewareData$arrow, _middlewareData$flip;\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform,\n elements\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n fallbackAxisSideDirection = 'none',\n flipAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n\n // If a reset by the arrow was caused due to an alignment offset being\n // added, we should skip any logic now since `flip()` has already done its\n // work.\n // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n const side = getSide(placement);\n const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n if (!specifiedFallbackPlacements && fallbackAxisSideDirection !== 'none') {\n fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n }\n const placements = [initialPlacement, ...fallbackPlacements];\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n if (checkMainAxis) {\n overflows.push(overflow[side]);\n }\n if (checkCrossAxis) {\n const sides = getAlignmentSides(placement, rects, rtl);\n overflows.push(overflow[sides[0]], overflow[sides[1]]);\n }\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }];\n\n // One or more sides is overflowing.\n if (!overflows.every(side => side <= 0)) {\n var _middlewareData$flip2, _overflowsData$filter;\n const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n const nextPlacement = placements[nextIndex];\n if (nextPlacement) {\n // Try next placement and re-run the lifecycle.\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n\n // First, find the candidates that fit on the mainAxis side of overflow,\n // then find the placement that fits the best on the main crossAxis side.\n let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n // Otherwise fallback.\n if (!resetPlacement) {\n switch (fallbackStrategy) {\n case 'bestFit':\n {\n var _overflowsData$map$so;\n const placement = (_overflowsData$map$so = overflowsData.map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$map$so[0];\n if (placement) {\n resetPlacement = placement;\n }\n break;\n }\n case 'initialPlacement':\n resetPlacement = initialPlacement;\n break;\n }\n }\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement\n }\n };\n }\n }\n return {};\n }\n };\n};\n\nfunction getSideOffsets(overflow, rect) {\n return {\n top: overflow.top - rect.height,\n right: overflow.right - rect.width,\n bottom: overflow.bottom - rect.height,\n left: overflow.left - rect.width\n };\n}\nfunction isAnySideFullyClipped(overflow) {\n return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'hide',\n options,\n async fn(state) {\n const {\n rects\n } = state;\n const {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = evaluate(options, state);\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await detectOverflow(state, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const offsets = getSideOffsets(overflow, rects.reference);\n return {\n data: {\n referenceHiddenOffsets: offsets,\n referenceHidden: isAnySideFullyClipped(offsets)\n }\n };\n }\n case 'escaped':\n {\n const overflow = await detectOverflow(state, {\n ...detectOverflowOptions,\n altBoundary: true\n });\n const offsets = getSideOffsets(overflow, rects.floating);\n return {\n data: {\n escapedOffsets: offsets,\n escaped: isAnySideFullyClipped(offsets)\n }\n };\n }\n default:\n {\n return {};\n }\n }\n }\n };\n};\n\nfunction getBoundingRect(rects) {\n const minX = min(...rects.map(rect => rect.left));\n const minY = min(...rects.map(rect => rect.top));\n const maxX = max(...rects.map(rect => rect.right));\n const maxY = max(...rects.map(rect => rect.bottom));\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\nfunction getRectsByLine(rects) {\n const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n const groups = [];\n let prevRect = null;\n for (let i = 0; i < sortedRects.length; i++) {\n const rect = sortedRects[i];\n if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n groups.push([rect]);\n } else {\n groups[groups.length - 1].push(rect);\n }\n prevRect = rect;\n }\n return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'inline',\n options,\n async fn(state) {\n const {\n placement,\n elements,\n rects,\n platform,\n strategy\n } = state;\n // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n // ClientRect's bounds, despite the event listener being triggered. A\n // padding of 2 seems to handle this issue.\n const {\n padding = 2,\n x,\n y\n } = evaluate(options, state);\n const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n const clientRects = getRectsByLine(nativeClientRects);\n const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n const paddingObject = getPaddingObject(padding);\n function getBoundingClientRect() {\n // There are two rects and they are disjoined.\n if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n // Find the first rect in which the point is fully inside.\n return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n }\n\n // There are 2 or more connected rects.\n if (clientRects.length >= 2) {\n if (getSideAxis(placement) === 'y') {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = getSide(placement) === 'top';\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n const isLeftSide = getSide(placement) === 'left';\n const maxRight = max(...clientRects.map(rect => rect.right));\n const minLeft = min(...clientRects.map(rect => rect.left));\n const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n const left = minLeft;\n const right = maxRight;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n return fallback;\n }\n const resetRects = await platform.getElementRects({\n reference: {\n getBoundingClientRect\n },\n floating: elements.floating,\n strategy\n });\n if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n return {\n reset: {\n rects: resetRects\n }\n };\n }\n return {};\n }\n };\n};\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n const {\n placement,\n platform,\n elements\n } = state;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isVertical = getSideAxis(placement) === 'y';\n const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\n const rawValue = evaluate(options, state);\n let {\n mainAxis,\n crossAxis,\n alignmentAxis\n } = typeof rawValue === 'number' ? {\n mainAxis: rawValue,\n crossAxis: 0,\n alignmentAxis: null\n } : {\n mainAxis: 0,\n crossAxis: 0,\n alignmentAxis: null,\n ...rawValue\n };\n if (alignment && typeof alignmentAxis === 'number') {\n crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n }\n return isVertical ? {\n x: crossAxis * crossAxisMulti,\n y: mainAxis * mainAxisMulti\n } : {\n x: mainAxis * mainAxisMulti,\n y: crossAxis * crossAxisMulti\n };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n if (options === void 0) {\n options = 0;\n }\n return {\n name: 'offset',\n options,\n async fn(state) {\n var _middlewareData$offse, _middlewareData$arrow;\n const {\n x,\n y,\n placement,\n middlewareData\n } = state;\n const diffCoords = await convertValueToCoords(state, options);\n\n // If the placement is the same and the arrow caused an alignment offset\n // then we don't need to change the positioning coordinates.\n if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: {\n ...diffCoords,\n placement\n }\n };\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'shift',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: _ref => {\n let {\n x,\n y\n } = _ref;\n return {\n x,\n y\n };\n }\n },\n ...detectOverflowOptions\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const crossAxis = getSideAxis(getSide(placement));\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n if (checkMainAxis) {\n const minSide = mainAxis === 'y' ? 'top' : 'left';\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n const min = mainAxisCoord + overflow[minSide];\n const max = mainAxisCoord - overflow[maxSide];\n mainAxisCoord = clamp(min, mainAxisCoord, max);\n }\n if (checkCrossAxis) {\n const minSide = crossAxis === 'y' ? 'top' : 'left';\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n const min = crossAxisCoord + overflow[minSide];\n const max = crossAxisCoord - overflow[maxSide];\n crossAxisCoord = clamp(min, crossAxisCoord, max);\n }\n const limitedCoords = limiter.fn({\n ...state,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return {\n ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y\n }\n };\n }\n };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n options,\n fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n middlewareData\n } = state;\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const crossAxis = getSideAxis(placement);\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const rawOffset = evaluate(offset, state);\n const computedOffset = typeof rawOffset === 'number' ? {\n mainAxis: rawOffset,\n crossAxis: 0\n } : {\n mainAxis: 0,\n crossAxis: 0,\n ...rawOffset\n };\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin;\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax;\n }\n }\n if (checkCrossAxis) {\n var _middlewareData$offse, _middlewareData$offse2;\n const len = mainAxis === 'y' ? 'width' : 'height';\n const isOriginSide = ['top', 'left'].includes(getSide(placement));\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin;\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax;\n }\n }\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n };\n }\n };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'size',\n options,\n async fn(state) {\n const {\n placement,\n rects,\n platform,\n elements\n } = state;\n const {\n apply = () => {},\n ...detectOverflowOptions\n } = evaluate(options, state);\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isYAxis = getSideAxis(placement) === 'y';\n const {\n width,\n height\n } = rects.floating;\n let heightSide;\n let widthSide;\n if (side === 'top' || side === 'bottom') {\n heightSide = side;\n widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n } else {\n widthSide = side;\n heightSide = alignment === 'end' ? 'top' : 'bottom';\n }\n const overflowAvailableHeight = height - overflow[heightSide];\n const overflowAvailableWidth = width - overflow[widthSide];\n const noShift = !state.middlewareData.shift;\n let availableHeight = overflowAvailableHeight;\n let availableWidth = overflowAvailableWidth;\n if (isYAxis) {\n const maximumClippingWidth = width - overflow.left - overflow.right;\n availableWidth = alignment || noShift ? min(overflowAvailableWidth, maximumClippingWidth) : maximumClippingWidth;\n } else {\n const maximumClippingHeight = height - overflow.top - overflow.bottom;\n availableHeight = alignment || noShift ? min(overflowAvailableHeight, maximumClippingHeight) : maximumClippingHeight;\n }\n if (noShift && !alignment) {\n const xMin = max(overflow.left, 0);\n const xMax = max(overflow.right, 0);\n const yMin = max(overflow.top, 0);\n const yMax = max(overflow.bottom, 0);\n if (isYAxis) {\n availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n } else {\n availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n }\n }\n await apply({\n ...state,\n availableWidth,\n availableHeight\n });\n const nextDimensions = await platform.getDimensions(elements.floating);\n if (width !== nextDimensions.width || height !== nextDimensions.height) {\n return {\n reset: {\n rects: true\n }\n };\n }\n return {};\n }\n };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n x: v,\n y: v\n});\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n start: 'end',\n end: 'start'\n};\nfunction clamp(start, value, end) {\n return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n return ['top', 'bottom'].includes(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const length = getAxisLength(alignmentAxis);\n let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nfunction getSideList(side, isStart, rtl) {\n const lr = ['left', 'right'];\n const rl = ['right', 'left'];\n const tb = ['top', 'bottom'];\n const bt = ['bottom', 'top'];\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rl : lr;\n return isStart ? lr : rl;\n case 'left':\n case 'right':\n return isStart ? tb : bt;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\nfunction getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\nfunction getPaddingObject(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\nfunction rectToClientRect(rect) {\n return {\n ...rect,\n top: rect.y,\n left: rect.x,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","function getNodeName(node) {\n if (isNode(node)) {\n return (node.nodeName || '').toLowerCase();\n }\n // Mocked nodes in testing environments may not be instances of Node. By\n // returning `#document` an infinite loop won't occur.\n // https://github.com/floating-ui/floating-ui/issues/2317\n return '#document';\n}\nfunction getWindow(node) {\n var _node$ownerDocument;\n return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n var _ref;\n return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n // Browsers without `ShadowRoot` support.\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n const {\n overflow,\n overflowX,\n overflowY,\n display\n } = getComputedStyle(element);\n return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display);\n}\nfunction isTableElement(element) {\n return ['table', 'td', 'th'].includes(getNodeName(element));\n}\nfunction isContainingBlock(element) {\n const webkit = isWebKit();\n const css = getComputedStyle(element);\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n return css.transform !== 'none' || css.perspective !== 'none' || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || ['transform', 'perspective', 'filter'].some(value => (css.willChange || '').includes(value)) || ['paint', 'layout', 'strict', 'content'].some(value => (css.contain || '').includes(value));\n}\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else {\n currentNode = getParentNode(currentNode);\n }\n }\n return null;\n}\nfunction isWebKit() {\n if (typeof CSS === 'undefined' || !CSS.supports) return false;\n return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nfunction isLastTraversableNode(node) {\n return ['html', 'body', '#document'].includes(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n return {\n scrollLeft: element.pageXOffset,\n scrollTop: element.pageYOffset\n };\n}\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n const result =\n // Step into the shadow DOM of the parent of a slotted node.\n node.assignedSlot ||\n // DOM Element detected.\n node.parentNode ||\n // ShadowRoot detected.\n isShadowRoot(node) && node.host ||\n // Fallback.\n getDocumentElement(node);\n return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n if (isLastTraversableNode(parentNode)) {\n return node.ownerDocument ? node.ownerDocument.body : node.body;\n }\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n var _node$ownerDocument2;\n if (list === void 0) {\n list = [];\n }\n if (traverseIframes === void 0) {\n traverseIframes = true;\n }\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n const win = getWindow(scrollableAncestor);\n if (isBody) {\n return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], win.frameElement && traverseIframes ? getOverflowAncestors(win.frameElement) : []);\n }\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isWebKit };\n","/// <reference types=\"resize-observer-browser\" />\n\nimport * as React from 'react';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\n\nfunction useSize(element: HTMLElement | null) {\n const [size, setSize] = React.useState<{ width: number; height: number } | undefined>(undefined);\n\n useLayoutEffect(() => {\n if (element) {\n // provide size as early as possible\n setSize({ width: element.offsetWidth, height: element.offsetHeight });\n\n const resizeObserver = new ResizeObserver((entries) => {\n if (!Array.isArray(entries)) {\n return;\n }\n\n // Since we only observe the one element, we don't need to loop over the\n // array\n if (!entries.length) {\n return;\n }\n\n const entry = entries[0];\n let width: number;\n let height: number;\n\n if ('borderBoxSize' in entry) {\n const borderSizeEntry = entry['borderBoxSize'];\n // iron out differences between browsers\n const borderSize = Array.isArray(borderSizeEntry) ? borderSizeEntry[0] : borderSizeEntry;\n width = borderSize['inlineSize'];\n height = borderSize['blockSize'];\n } else {\n // for browsers that don't support `borderBoxSize`\n // we calculate it ourselves to get the correct border box.\n width = element.offsetWidth;\n height = element.offsetHeight;\n }\n\n setSize({ width, height });\n });\n\n resizeObserver.observe(element, { box: 'border-box' });\n\n return () => resizeObserver.unobserve(element);\n } else {\n // We only want to reset to `undefined` when the element becomes `null`,\n // not if it changes to another element.\n setSize(undefined);\n }\n }, [element]);\n\n return size;\n}\n\nexport { useSize };\n","import * as React from 'react';\nimport {\n useFloating,\n autoUpdate,\n offset,\n shift,\n limitShift,\n hide,\n arrow as floatingUIarrow,\n flip,\n size,\n} from '@floating-ui/react-dom';\nimport * as ArrowPrimitive from '@radix-ui/react-arrow';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { useSize } from '@radix-ui/react-use-size';\n\nimport type { Placement, Middleware } from '@floating-ui/react-dom';\nimport type * as Radix from '@radix-ui/react-primitive';\nimport type { Scope } from '@radix-ui/react-context';\nimport type { Measurable } from '@radix-ui/rect';\n\nconst SIDE_OPTIONS = ['top', 'right', 'bottom', 'left'] as const;\nconst ALIGN_OPTIONS = ['start', 'center', 'end'] as const;\n\ntype Side = typeof SIDE_OPTIONS[number];\ntype Align = typeof ALIGN_OPTIONS[number];\n\n/* -------------------------------------------------------------------------------------------------\n * Popper\n * -----------------------------------------------------------------------------------------------*/\n\nconst POPPER_NAME = 'Popper';\n\ntype ScopedProps<P> = P & { __scopePopper?: Scope };\nconst [createPopperContext, createPopperScope] = createContextScope(POPPER_NAME);\n\ntype PopperContextValue = {\n anchor: Measurable | null;\n onAnchorChange(anchor: Measurable | null): void;\n};\nconst [PopperProvider, usePopperContext] = createPopperContext<PopperContextValue>(POPPER_NAME);\n\ninterface PopperProps {\n children?: React.ReactNode;\n}\nconst Popper: React.FC<PopperProps> = (props: ScopedProps<PopperProps>) => {\n const { __scopePopper, children } = props;\n const [anchor, setAnchor] = React.useState<Measurable | null>(null);\n return (\n <PopperProvider scope={__scopePopper} anchor={anchor} onAnchorChange={setAnchor}>\n {children}\n </PopperProvider>\n );\n};\n\nPopper.displayName = POPPER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * PopperAnchor\n * -----------------------------------------------------------------------------------------------*/\n\nconst ANCHOR_NAME = 'PopperAnchor';\n\ntype PopperAnchorElement = React.ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = Radix.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface PopperAnchorProps extends PrimitiveDivProps {\n virtualRef?: React.RefObject<Measurable>;\n}\n\nconst PopperAnchor = React.forwardRef<PopperAnchorElement, PopperAnchorProps>(\n (props: ScopedProps<PopperAnchorProps>, forwardedRef) => {\n const { __scopePopper, virtualRef, ...anchorProps } = props;\n const context = usePopperContext(ANCHOR_NAME, __scopePopper);\n const ref = React.useRef<PopperAnchorElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n\n React.useEffect(() => {\n // Consumer can anchor the popper to something that isn't\n // a DOM node e.g. pointer position, so we override the\n // `anchorRef` with their virtual ref in this case.\n context.onAnchorChange(virtualRef?.current || ref.current);\n });\n\n return virtualRef ? null : <Primitive.div {...anchorProps} ref={composedRefs} />;\n }\n);\n\nPopperAnchor.displayName = ANCHOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * PopperContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'PopperContent';\n\ntype PopperContentContextValue = {\n placedSide: Side;\n onArrowChange(arrow: HTMLSpanElement | null): void;\n arrowX?: number;\n arrowY?: number;\n shouldHideArrow: boolean;\n};\n\nconst [PopperContentProvider, useContentContext] =\n createPopperContext<PopperContentContextValue>(CONTENT_NAME);\n\ntype Boundary = Element | null;\n\ntype PopperContentElement = React.ElementRef<typeof Primitive.div>;\ninterface PopperContentProps extends PrimitiveDivProps {\n side?: Side;\n sideOffset?: number;\n align?: Align;\n alignOffset?: number;\n arrowPadding?: number;\n avoidCollisions?: boolean;\n collisionBoundary?: Boundary | Boundary[];\n collisionPadding?: number | Partial<Record<Side, number>>;\n sticky?: 'partial' | 'always';\n hideWhenDetached?: boolean;\n updatePositionStrategy?: 'optimized' | 'always';\n onPlaced?: () => void;\n}\n\nconst PopperContent = React.forwardRef<PopperContentElement, PopperContentProps>(\n (props: ScopedProps<PopperContentProps>, forwardedRef) => {\n const {\n __scopePopper,\n side = 'bottom',\n sideOffset = 0,\n align = 'center',\n alignOffset = 0,\n arrowPadding = 0,\n avoidCollisions = true,\n collisionBoundary = [],\n collisionPadding: collisionPaddingProp = 0,\n sticky = 'partial',\n hideWhenDetached = false,\n updatePositionStrategy = 'optimized',\n onPlaced,\n ...contentProps\n } = props;\n\n const context = usePopperContext(CONTENT_NAME, __scopePopper);\n\n const [content, setContent] = React.useState<HTMLDivElement | null>(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n\n const [arrow, setArrow] = React.useState<HTMLSpanElement | null>(null);\n const arrowSize = useSize(arrow);\n const arrowWidth = arrowSize?.width ?? 0;\n const arrowHeight = arrowSize?.height ?? 0;\n\n const desiredPlacement = (side + (align !== 'center' ? '-' + align : '')) as Placement;\n\n const collisionPadding =\n typeof collisionPaddingProp === 'number'\n ? collisionPaddingProp\n : { top: 0, right: 0, bottom: 0, left: 0, ...collisionPaddingProp };\n\n const boundary = Array.isArray(collisionBoundary) ? collisionBoundary : [collisionBoundary];\n const hasExplicitBoundaries = boundary.length > 0;\n\n const detectOverflowOptions = {\n padding: collisionPadding,\n boundary: boundary.filter(isNotNull),\n // with `strategy: 'fixed'`, this is the only way to get it to respect boundaries\n altBoundary: hasExplicitBoundaries,\n };\n\n const { refs, floatingStyles, placement, isPositioned, middlewareData } = useFloating({\n // default to `fixed` strategy so users don't have to pick and we also avoid focus scroll issues\n strategy: 'fixed',\n placement: desiredPlacement,\n whileElementsMounted: (...args) => {\n const cleanup = autoUpdate(...args, {\n animationFrame: updatePositionStrategy === 'always',\n });\n return cleanup;\n },\n elements: {\n reference: context.anchor,\n },\n middleware: [\n offset({ mainAxis: sideOffset + arrowHeight, alignmentAxis: alignOffset }),\n avoidCollisions &&\n shift({\n mainAxis: true,\n crossAxis: false,\n limiter: sticky === 'partial' ? limitShift() : undefined,\n ...detectOverflowOptions,\n }),\n avoidCollisions && flip({ ...detectOverflowOptions }),\n size({\n ...detectOverflowOptions,\n apply: ({ elements, rects, availableWidth, availableHeight }) => {\n const { width: anchorWidth, height: anchorHeight } = rects.reference;\n const contentStyle = elements.floating.style;\n contentStyle.setProperty('--radix-popper-available-width', `${availableWidth}px`);\n contentStyle.setProperty('--radix-popper-available-height', `${availableHeight}px`);\n contentStyle.setProperty('--radix-popper-anchor-width', `${anchorWidth}px`);\n contentStyle.setProperty('--radix-popper-anchor-height', `${anchorHeight}px`);\n },\n }),\n arrow && floatingUIarrow({ element: arrow, padding: arrowPadding }),\n transformOrigin({ arrowWidth, arrowHeight }),\n hideWhenDetached && hide({ strategy: 'referenceHidden', ...detectOverflowOptions }),\n ],\n });\n\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n\n const handlePlaced = useCallbackRef(onPlaced);\n useLayoutEffect(() => {\n if (isPositioned) {\n handlePlaced?.();\n }\n }, [isPositioned, handlePlaced]);\n\n const arrowX = middlewareData.arrow?.x;\n const arrowY = middlewareData.arrow?.y;\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n\n const [contentZIndex, setContentZIndex] = React.useState<string>();\n useLayoutEffect(() => {\n if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n }, [content]);\n\n return (\n <div\n ref={refs.setFloating}\n data-radix-popper-content-wrapper=\"\"\n style={{\n ...floatingStyles,\n transform: isPositioned ? floatingStyles.transform : 'translate(0, -200%)', // keep off the page when measuring\n minWidth: 'max-content',\n zIndex: contentZIndex,\n ['--radix-popper-transform-origin' as any]: [\n middlewareData.transformOrigin?.x,\n middlewareData.transformOrigin?.y,\n ].join(' '),\n }}\n // Floating UI interally calculates logical alignment based the `dir` attribute on\n // the reference/floating node, we must add this attribute here to ensure\n // this is calculated when portalled as well as inline.\n dir={props.dir}\n >\n <PopperContentProvider\n scope={__scopePopper}\n placedSide={placedSide}\n onArrowChange={setArrow}\n arrowX={arrowX}\n arrowY={arrowY}\n shouldHideArrow={cannotCenterArrow}\n >\n <Primitive.div\n data-side={placedSide}\n data-align={placedAlign}\n {...contentProps}\n ref={composedRefs}\n style={{\n ...contentProps.style,\n // if the PopperContent hasn't been placed yet (not all measurements done)\n // we prevent animations so that users's animation don't kick in too early referring wrong sides\n animation: !isPositioned ? 'none' : undefined,\n // hide the content if using the hide middleware and should be hidden\n opacity: middlewareData.hide?.referenceHidden ? 0 : undefined,\n }}\n />\n </PopperContentProvider>\n </div>\n );\n }\n);\n\nPopperContent.displayName = CONTENT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * PopperArrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst ARROW_NAME = 'PopperArrow';\n\nconst OPPOSITE_SIDE: Record<Side, Side> = {\n top: 'bottom',\n right: 'left',\n bottom: 'top',\n left: 'right',\n};\n\ntype PopperArrowElement = React.ElementRef<typeof ArrowPrimitive.Root>;\ntype ArrowProps = Radix.ComponentPropsWithoutRef<typeof ArrowPrimitive.Root>;\ninterface PopperArrowProps extends ArrowProps {}\n\nconst PopperArrow = React.forwardRef<PopperArrowElement, PopperArrowProps>(function PopperArrow(\n props: ScopedProps<PopperArrowProps>,\n forwardedRef\n) {\n const { __scopePopper, ...arrowProps } = props;\n const contentContext = useContentContext(ARROW_NAME, __scopePopper);\n const baseSide = OPPOSITE_SIDE[contentContext.placedSide];\n\n return (\n // we have to use an extra wrapper because `ResizeObserver` (used by `useSize`)\n // doesn't report size as we'd expect on SVG elements.\n // it reports their bounding box which is effectively the largest path inside the SVG.\n <span\n ref={contentContext.onArrowChange}\n style={{\n position: 'absolute',\n left: contentContext.arrowX,\n top: contentContext.arrowY,\n [baseSide]: 0,\n transformOrigin: {\n top: '',\n right: '0 0',\n bottom: 'center 0',\n left: '100% 0',\n }[contentContext.placedSide],\n transform: {\n top: 'translateY(100%)',\n right: 'translateY(50%) rotate(90deg) translateX(-50%)',\n bottom: `rotate(180deg)`,\n left: 'translateY(50%) rotate(-90deg) translateX(50%)',\n }[contentContext.placedSide],\n visibility: contentContext.shouldHideArrow ? 'hidden' : undefined,\n }}\n >\n <ArrowPrimitive.Root\n {...arrowProps}\n ref={forwardedRef}\n style={{\n ...arrowProps.style,\n // ensures the element can be measured correctly (mostly for if SVG)\n display: 'block',\n }}\n />\n </span>\n );\n});\n\nPopperArrow.displayName = ARROW_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction isNotNull<T>(value: T | null): value is T {\n return value !== null;\n}\n\nconst transformOrigin = (options: { arrowWidth: number; arrowHeight: number }): Middleware => ({\n name: 'transformOrigin',\n options,\n fn(data) {\n const { placement, rects, middlewareData } = data;\n\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n const isArrowHidden = cannotCenterArrow;\n const arrowWidth = isArrowHidden ? 0 : options.arrowWidth;\n const arrowHeight = isArrowHidden ? 0 : options.arrowHeight;\n\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n const noArrowAlign = { start: '0%', center: '50%', end: '100%' }[placedAlign];\n\n const arrowXCenter = (middlewareData.arrow?.x ?? 0) + arrowWidth / 2;\n const arrowYCenter = (middlewareData.arrow?.y ?? 0) + arrowHeight / 2;\n\n let x = '';\n let y = '';\n\n if (placedSide === 'bottom') {\n x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n y = `${-arrowHeight}px`;\n } else if (placedSide === 'top') {\n x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n y = `${rects.floating.height + arrowHeight}px`;\n } else if (placedSide === 'right') {\n x = `${-arrowHeight}px`;\n y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n } else if (placedSide === 'left') {\n x = `${rects.floating.width + arrowHeight}px`;\n y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n }\n return { data: { x, y } };\n },\n});\n\nfunction getSideAndAlignFromPlacement(placement: Placement) {\n const [side, align = 'center'] = placement.split('-');\n return [side as Side, align as Align] as const;\n}\n\nconst Root = Popper;\nconst Anchor = PopperAnchor;\nconst Content = PopperContent;\nconst Arrow = PopperArrow;\n\nexport {\n createPopperScope,\n //\n Popper,\n PopperAnchor,\n PopperContent,\n PopperArrow,\n //\n Root,\n Anchor,\n Content,\n Arrow,\n //\n SIDE_OPTIONS,\n ALIGN_OPTIONS,\n};\nexport type { PopperProps, PopperAnchorProps, PopperContentProps, PopperArrowProps };\n","import * as React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Primitive } from '@radix-ui/react-primitive';\n\nimport type * as Radix from '@radix-ui/react-primitive';\n\n/* -------------------------------------------------------------------------------------------------\n * Portal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'Portal';\n\ntype PortalElement = React.ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = Radix.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface PortalProps extends PrimitiveDivProps {\n /**\n * An optional container where the portaled content should be appended.\n */\n container?: HTMLElement | null;\n}\n\nconst Portal = React.forwardRef<PortalElement, PortalProps>((props, forwardedRef) => {\n const { container = globalThis?.document?.body, ...portalProps } = props;\n return container\n ? ReactDOM.createPortal(<Primitive.div {...portalProps} ref={forwardedRef} />, container)\n : null;\n});\n\nPortal.displayName = PORTAL_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = Portal;\n\nexport {\n Portal,\n //\n Root,\n};\nexport type { PortalProps };\n","import * as React from 'react';\n\ntype Machine<S> = { [k: string]: { [k: string]: S } };\ntype MachineState<T> = keyof T;\ntype MachineEvent<T> = keyof UnionToIntersection<T[keyof T]>;\n\n// 🤯 https://fettblog.eu/typescript-union-to-intersection/\ntype UnionToIntersection<T> = (T extends any ? (x: T) => any : never) extends (x: infer R) => any\n ? R\n : never;\n\nexport function useStateMachine<M>(\n initialState: MachineState<M>,\n machine: M & Machine<MachineState<M>>\n) {\n return React.useReducer((state: MachineState<M>, event: MachineEvent<M>): MachineState<M> => {\n const nextState = (machine[state] as any)[event];\n return nextState ?? state;\n }, initialState);\n}\n","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { useStateMachine } from './useStateMachine';\n\ninterface PresenceProps {\n children: React.ReactElement | ((props: { present: boolean }) => React.ReactElement);\n present: boolean;\n}\n\nconst Presence: React.FC<PresenceProps> = (props) => {\n const { present, children } = props;\n const presence = usePresence(present);\n\n const child = (\n typeof children === 'function'\n ? children({ present: presence.isPresent })\n : React.Children.only(children)\n ) as React.ReactElement;\n\n const ref = useComposedRefs(presence.ref, (child as any).ref);\n const forceMount = typeof children === 'function';\n return forceMount || presence.isPresent ? React.cloneElement(child, { ref }) : null;\n};\n\nPresence.displayName = 'Presence';\n\n/* -------------------------------------------------------------------------------------------------\n * usePresence\n * -----------------------------------------------------------------------------------------------*/\n\nfunction usePresence(present: boolean) {\n const [node, setNode] = React.useState<HTMLElement>();\n const stylesRef = React.useRef<CSSStyleDeclaration>({} as any);\n const prevPresentRef = React.useRef(present);\n const prevAnimationNameRef = React.useRef<string>('none');\n const initialState = present ? 'mounted' : 'unmounted';\n const [state, send] = useStateMachine(initialState, {\n mounted: {\n UNMOUNT: 'unmounted',\n ANIMATION_OUT: 'unmountSuspended',\n },\n unmountSuspended: {\n MOUNT: 'mounted',\n ANIMATION_END: 'unmounted',\n },\n unmounted: {\n MOUNT: 'mounted',\n },\n });\n\n React.useEffect(() => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n prevAnimationNameRef.current = state === 'mounted' ? currentAnimationName : 'none';\n }, [state]);\n\n useLayoutEffect(() => {\n const styles = stylesRef.current;\n const wasPresent = prevPresentRef.current;\n const hasPresentChanged = wasPresent !== present;\n\n if (hasPresentChanged) {\n const prevAnimationName = prevAnimationNameRef.current;\n const currentAnimationName = getAnimationName(styles);\n\n if (present) {\n send('MOUNT');\n } else if (currentAnimationName === 'none' || styles?.display === 'none') {\n // If there is no exit animation or the element is hidden, animations won't run\n // so we unmount instantly\n send('UNMOUNT');\n } else {\n /**\n * When `present` changes to `false`, we check changes to animation-name to\n * determine whether an animation has started. We chose this approach (reading\n * computed styles) because there is no `animationrun` event and `animationstart`\n * fires after `animation-delay` has expired which would be too late.\n */\n const isAnimating = prevAnimationName !== currentAnimationName;\n\n if (wasPresent && isAnimating) {\n send('ANIMATION_OUT');\n } else {\n send('UNMOUNT');\n }\n }\n\n prevPresentRef.current = present;\n }\n }, [present, send]);\n\n useLayoutEffect(() => {\n if (node) {\n /**\n * Triggering an ANIMATION_OUT during an ANIMATION_IN will fire an `animationcancel`\n * event for ANIMATION_IN after we have entered `unmountSuspended` state. So, we\n * make sure we only trigger ANIMATION_END for the currently active animation.\n */\n const handleAnimationEnd = (event: AnimationEvent) => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n const isCurrentAnimation = currentAnimationName.includes(event.animationName);\n if (event.target === node && isCurrentAnimation) {\n // With React 18 concurrency this update is applied\n // a frame after the animation ends, creating a flash of visible content.\n // By manually flushing we ensure they sync within a frame, removing the flash.\n ReactDOM.flushSync(() => send('ANIMATION_END'));\n }\n };\n const handleAnimationStart = (event: AnimationEvent) => {\n if (event.target === node) {\n // if animation occurred, store its name as the previous animation.\n prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n }\n };\n node.addEventListener('animationstart', handleAnimationStart);\n node.addEventListener('animationcancel', handleAnimationEnd);\n node.addEventListener('animationend', handleAnimationEnd);\n return () => {\n node.removeEventListener('animationstart', handleAnimationStart);\n node.removeEventListener('animationcancel', handleAnimationEnd);\n node.removeEventListener('animationend', handleAnimationEnd);\n };\n } else {\n // Transition to the unmounted state if the node is removed prematurely.\n // We avoid doing so during cleanup as the node may change but still exist.\n send('ANIMATION_END');\n }\n }, [node, send]);\n\n return {\n isPresent: ['mounted', 'unmountSuspended'].includes(state),\n ref: React.useCallback((node: HTMLElement) => {\n if (node) stylesRef.current = getComputedStyle(node);\n setNode(node);\n }, []),\n };\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getAnimationName(styles?: CSSStyleDeclaration) {\n return styles?.animationName || 'none';\n}\n\nexport { Presence };\nexport type { PresenceProps };\n","import * as React from 'react';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\n\ntype UseControllableStateParams<T> = {\n prop?: T | undefined;\n defaultProp?: T | undefined;\n onChange?: (state: T) => void;\n};\n\ntype SetStateFn<T> = (prevState?: T) => T;\n\nfunction useControllableState<T>({\n prop,\n defaultProp,\n onChange = () => {},\n}: UseControllableStateParams<T>) {\n const [uncontrolledProp, setUncontrolledProp] = useUncontrolledState({ defaultProp, onChange });\n const isControlled = prop !== undefined;\n const value = isControlled ? prop : uncontrolledProp;\n const handleChange = useCallbackRef(onChange);\n\n const setValue: React.Dispatch<React.SetStateAction<T | undefined>> = React.useCallback(\n (nextValue) => {\n if (isControlled) {\n const setter = nextValue as SetStateFn<T>;\n const value = typeof nextValue === 'function' ? setter(prop) : nextValue;\n if (value !== prop) handleChange(value as T);\n } else {\n setUncontrolledProp(nextValue);\n }\n },\n [isControlled, prop, setUncontrolledProp, handleChange]\n );\n\n return [value, setValue] as const;\n}\n\nfunction useUncontrolledState<T>({\n defaultProp,\n onChange,\n}: Omit<UseControllableStateParams<T>, 'prop'>) {\n const uncontrolledState = React.useState<T | undefined>(defaultProp);\n const [value] = uncontrolledState;\n const prevValueRef = React.useRef(value);\n const handleChange = useCallbackRef(onChange);\n\n React.useEffect(() => {\n if (prevValueRef.current !== value) {\n handleChange(value as T);\n prevValueRef.current = value;\n }\n }, [value, prevValueRef, handleChange]);\n\n return uncontrolledState;\n}\n\nexport { useControllableState };\n","import * as React from 'react';\nimport { Primitive } from '@radix-ui/react-primitive';\n\nimport type * as Radix from '@radix-ui/react-primitive';\n\n/* -------------------------------------------------------------------------------------------------\n * VisuallyHidden\n * -----------------------------------------------------------------------------------------------*/\n\nconst NAME = 'VisuallyHidden';\n\ntype VisuallyHiddenElement = React.ElementRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = Radix.ComponentPropsWithoutRef<typeof Primitive.span>;\ninterface VisuallyHiddenProps extends PrimitiveSpanProps {}\n\nconst VisuallyHidden = React.forwardRef<VisuallyHiddenElement, VisuallyHiddenProps>(\n (props, forwardedRef) => {\n return (\n <Primitive.span\n {...props}\n ref={forwardedRef}\n style={{\n // See: https://github.com/twbs/bootstrap/blob/master/scss/mixins/_screen-reader.scss\n position: 'absolute',\n border: 0,\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n wordWrap: 'normal',\n ...props.style,\n }}\n />\n );\n }\n);\n\nVisuallyHidden.displayName = NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = VisuallyHidden;\n\nexport {\n VisuallyHidden,\n //\n Root,\n};\nexport type { VisuallyHiddenProps };\n","import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { DismissableLayer } from '@radix-ui/react-dismissable-layer';\nimport { useId } from '@radix-ui/react-id';\nimport * as PopperPrimitive from '@radix-ui/react-popper';\nimport { createPopperScope } from '@radix-ui/react-popper';\nimport { Portal as PortalPrimitive } from '@radix-ui/react-portal';\nimport { Presence } from '@radix-ui/react-presence';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { Slottable } from '@radix-ui/react-slot';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport * as VisuallyHiddenPrimitive from '@radix-ui/react-visually-hidden';\n\nimport type * as Radix from '@radix-ui/react-primitive';\nimport type { Scope } from '@radix-ui/react-context';\n\ntype ScopedProps<P = {}> = P & { __scopeTooltip?: Scope };\nconst [createTooltipContext, createTooltipScope] = createContextScope('Tooltip', [\n createPopperScope,\n]);\nconst usePopperScope = createPopperScope();\n\n/* -------------------------------------------------------------------------------------------------\n * TooltipProvider\n * -----------------------------------------------------------------------------------------------*/\n\nconst PROVIDER_NAME = 'TooltipProvider';\nconst DEFAULT_DELAY_DURATION = 700;\nconst TOOLTIP_OPEN = 'tooltip.open';\n\ntype TooltipProviderContextValue = {\n isOpenDelayed: boolean;\n delayDuration: number;\n onOpen(): void;\n onClose(): void;\n onPointerInTransitChange(inTransit: boolean): void;\n isPointerInTransitRef: React.MutableRefObject<boolean>;\n disableHoverableContent: boolean;\n};\n\nconst [TooltipProviderContextProvider, useTooltipProviderContext] =\n createTooltipContext<TooltipProviderContextValue>(PROVIDER_NAME);\n\ninterface TooltipProviderProps {\n children: React.ReactNode;\n /**\n * The duration from when the pointer enters the trigger until the tooltip gets opened.\n * @defaultValue 700\n */\n delayDuration?: number;\n /**\n * How much time a user has to enter another trigger without incurring a delay again.\n * @defaultValue 300\n */\n skipDelayDuration?: number;\n /**\n * When `true`, trying to hover the content will result in the tooltip closing as the pointer leaves the trigger.\n * @defaultValue false\n */\n disableHoverableContent?: boolean;\n}\n\nconst TooltipProvider: React.FC<TooltipProviderProps> = (\n props: ScopedProps<TooltipProviderProps>\n) => {\n const {\n __scopeTooltip,\n delayDuration = DEFAULT_DELAY_DURATION,\n skipDelayDuration = 300,\n disableHoverableContent = false,\n children,\n } = props;\n const [isOpenDelayed, setIsOpenDelayed] = React.useState(true);\n const isPointerInTransitRef = React.useRef(false);\n const skipDelayTimerRef = React.useRef(0);\n\n React.useEffect(() => {\n const skipDelayTimer = skipDelayTimerRef.current;\n return () => window.clearTimeout(skipDelayTimer);\n }, []);\n\n return (\n <TooltipProviderContextProvider\n scope={__scopeTooltip}\n isOpenDelayed={isOpenDelayed}\n delayDuration={delayDuration}\n onOpen={React.useCallback(() => {\n window.clearTimeout(skipDelayTimerRef.current);\n setIsOpenDelayed(false);\n }, [])}\n onClose={React.useCallback(() => {\n window.clearTimeout(skipDelayTimerRef.current);\n skipDelayTimerRef.current = window.setTimeout(\n () => setIsOpenDelayed(true),\n skipDelayDuration\n );\n }, [skipDelayDuration])}\n isPointerInTransitRef={isPointerInTransitRef}\n onPointerInTransitChange={React.useCallback((inTransit: boolean) => {\n isPointerInTransitRef.current = inTransit;\n }, [])}\n disableHoverableContent={disableHoverableContent}\n >\n {children}\n </TooltipProviderContextProvider>\n );\n};\n\nTooltipProvider.displayName = PROVIDER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * Tooltip\n * -----------------------------------------------------------------------------------------------*/\n\nconst TOOLTIP_NAME = 'Tooltip';\n\ntype TooltipContextValue = {\n contentId: string;\n open: boolean;\n stateAttribute: 'closed' | 'delayed-open' | 'instant-open';\n trigger: TooltipTriggerElement | null;\n onTriggerChange(trigger: TooltipTriggerElement | null): void;\n onTriggerEnter(): void;\n onTriggerLeave(): void;\n onOpen(): void;\n onClose(): void;\n disableHoverableContent: boolean;\n};\n\nconst [TooltipContextProvider, useTooltipContext] =\n createTooltipContext<TooltipContextValue>(TOOLTIP_NAME);\n\ninterface TooltipProps {\n children?: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n /**\n * The duration from when the pointer enters the trigger until the tooltip gets opened. This will\n * override the prop with the same name passed to Provider.\n * @defaultValue 700\n */\n delayDuration?: number;\n /**\n * When `true`, trying to hover the content will result in the tooltip closing as the pointer leaves the trigger.\n * @defaultValue false\n */\n disableHoverableContent?: boolean;\n}\n\nconst Tooltip: React.FC<TooltipProps> = (props: ScopedProps<TooltipProps>) => {\n const {\n __scopeTooltip,\n children,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n disableHoverableContent: disableHoverableContentProp,\n delayDuration: delayDurationProp,\n } = props;\n const providerContext = useTooltipProviderContext(TOOLTIP_NAME, props.__scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const [trigger, setTrigger] = React.useState<HTMLButtonElement | null>(null);\n const contentId = useId();\n const openTimerRef = React.useRef(0);\n const disableHoverableContent =\n disableHoverableContentProp ?? providerContext.disableHoverableContent;\n const delayDuration = delayDurationProp ?? providerContext.delayDuration;\n const wasOpenDelayedRef = React.useRef(false);\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: (open) => {\n if (open) {\n providerContext.onOpen();\n\n // as `onChange` is called within a lifecycle method we\n // avoid dispatching via `dispatchDiscreteCustomEvent`.\n document.dispatchEvent(new CustomEvent(TOOLTIP_OPEN));\n } else {\n providerContext.onClose();\n }\n onOpenChange?.(open);\n },\n });\n const stateAttribute = React.useMemo(() => {\n return open ? (wasOpenDelayedRef.current ? 'delayed-open' : 'instant-open') : 'closed';\n }, [open]);\n\n const handleOpen = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n wasOpenDelayedRef.current = false;\n setOpen(true);\n }, [setOpen]);\n\n const handleClose = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n setOpen(false);\n }, [setOpen]);\n\n const handleDelayedOpen = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = window.setTimeout(() => {\n wasOpenDelayedRef.current = true;\n setOpen(true);\n }, delayDuration);\n }, [delayDuration, setOpen]);\n\n React.useEffect(() => {\n return () => window.clearTimeout(openTimerRef.current);\n }, []);\n\n return (\n <PopperPrimitive.Root {...popperScope}>\n <TooltipContextProvider\n scope={__scopeTooltip}\n contentId={contentId}\n open={open}\n stateAttribute={stateAttribute}\n trigger={trigger}\n onTriggerChange={setTrigger}\n onTriggerEnter={React.useCallback(() => {\n if (providerContext.isOpenDelayed) handleDelayedOpen();\n else handleOpen();\n }, [providerContext.isOpenDelayed, handleDelayedOpen, handleOpen])}\n onTriggerLeave={React.useCallback(() => {\n if (disableHoverableContent) {\n handleClose();\n } else {\n // Clear the timer in case the pointer leaves the trigger before the tooltip is opened.\n window.clearTimeout(openTimerRef.current);\n }\n }, [handleClose, disableHoverableContent])}\n onOpen={handleOpen}\n onClose={handleClose}\n disableHoverableContent={disableHoverableContent}\n >\n {children}\n </TooltipContextProvider>\n </PopperPrimitive.Root>\n );\n};\n\nTooltip.displayName = TOOLTIP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * TooltipTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'TooltipTrigger';\n\ntype TooltipTriggerElement = React.ElementRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = Radix.ComponentPropsWithoutRef<typeof Primitive.button>;\ninterface TooltipTriggerProps extends PrimitiveButtonProps {}\n\nconst TooltipTrigger = React.forwardRef<TooltipTriggerElement, TooltipTriggerProps>(\n (props: ScopedProps<TooltipTriggerProps>, forwardedRef) => {\n const { __scopeTooltip, ...triggerProps } = props;\n const context = useTooltipContext(TRIGGER_NAME, __scopeTooltip);\n const providerContext = useTooltipProviderContext(TRIGGER_NAME, __scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const ref = React.useRef<TooltipTriggerElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref, context.onTriggerChange);\n const isPointerDownRef = React.useRef(false);\n const hasPointerMoveOpenedRef = React.useRef(false);\n const handlePointerUp = React.useCallback(() => (isPointerDownRef.current = false), []);\n\n React.useEffect(() => {\n return () => document.removeEventListener('pointerup', handlePointerUp);\n }, [handlePointerUp]);\n\n return (\n <PopperPrimitive.Anchor asChild {...popperScope}>\n <Primitive.button\n // We purposefully avoid adding `type=button` here because tooltip triggers are also\n // commonly anchors and the anchor `type` attribute signifies MIME type.\n aria-describedby={context.open ? context.contentId : undefined}\n data-state={context.stateAttribute}\n {...triggerProps}\n ref={composedRefs}\n onPointerMove={composeEventHandlers(props.onPointerMove, (event) => {\n if (event.pointerType === 'touch') return;\n if (\n !hasPointerMoveOpenedRef.current &&\n !providerContext.isPointerInTransitRef.current\n ) {\n context.onTriggerEnter();\n hasPointerMoveOpenedRef.current = true;\n }\n })}\n onPointerLeave={composeEventHandlers(props.onPointerLeave, () => {\n context.onTriggerLeave();\n hasPointerMoveOpenedRef.current = false;\n })}\n onPointerDown={composeEventHandlers(props.onPointerDown, () => {\n isPointerDownRef.current = true;\n document.addEventListener('pointerup', handlePointerUp, { once: true });\n })}\n onFocus={composeEventHandlers(props.onFocus, () => {\n if (!isPointerDownRef.current) context.onOpen();\n })}\n onBlur={composeEventHandlers(props.onBlur, context.onClose)}\n onClick={composeEventHandlers(props.onClick, context.onClose)}\n />\n </PopperPrimitive.Anchor>\n );\n }\n);\n\nTooltipTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * TooltipPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'TooltipPortal';\n\ntype PortalContextValue = { forceMount?: true };\nconst [PortalProvider, usePortalContext] = createTooltipContext<PortalContextValue>(PORTAL_NAME, {\n forceMount: undefined,\n});\n\ntype PortalProps = React.ComponentPropsWithoutRef<typeof PortalPrimitive>;\ninterface TooltipPortalProps {\n children?: React.ReactNode;\n /**\n * Specify a container element to portal the content into.\n */\n container?: PortalProps['container'];\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst TooltipPortal: React.FC<TooltipPortalProps> = (props: ScopedProps<TooltipPortalProps>) => {\n const { __scopeTooltip, forceMount, children, container } = props;\n const context = useTooltipContext(PORTAL_NAME, __scopeTooltip);\n return (\n <PortalProvider scope={__scopeTooltip} forceMount={forceMount}>\n <Presence present={forceMount || context.open}>\n <PortalPrimitive asChild container={container}>\n {children}\n </PortalPrimitive>\n </Presence>\n </PortalProvider>\n );\n};\n\nTooltipPortal.displayName = PORTAL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * TooltipContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'TooltipContent';\n\ntype TooltipContentElement = TooltipContentImplElement;\ninterface TooltipContentProps extends TooltipContentImplProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst TooltipContent = React.forwardRef<TooltipContentElement, TooltipContentProps>(\n (props: ScopedProps<TooltipContentProps>, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeTooltip);\n const { forceMount = portalContext.forceMount, side = 'top', ...contentProps } = props;\n const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n\n return (\n <Presence present={forceMount || context.open}>\n {context.disableHoverableContent ? (\n <TooltipContentImpl side={side} {...contentProps} ref={forwardedRef} />\n ) : (\n <TooltipContentHoverable side={side} {...contentProps} ref={forwardedRef} />\n )}\n </Presence>\n );\n }\n);\n\ntype Point = { x: number; y: number };\ntype Polygon = Point[];\n\ntype TooltipContentHoverableElement = TooltipContentImplElement;\ninterface TooltipContentHoverableProps extends TooltipContentImplProps {}\n\nconst TooltipContentHoverable = React.forwardRef<\n TooltipContentHoverableElement,\n TooltipContentHoverableProps\n>((props: ScopedProps<TooltipContentHoverableProps>, forwardedRef) => {\n const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n const providerContext = useTooltipProviderContext(CONTENT_NAME, props.__scopeTooltip);\n const ref = React.useRef<TooltipContentHoverableElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const [pointerGraceArea, setPointerGraceArea] = React.useState<Polygon | null>(null);\n\n const { trigger, onClose } = context;\n const content = ref.current;\n\n const { onPointerInTransitChange } = providerContext;\n\n const handleRemoveGraceArea = React.useCallback(() => {\n setPointerGraceArea(null);\n onPointerInTransitChange(false);\n }, [onPointerInTransitChange]);\n\n const handleCreateGraceArea = React.useCallback(\n (event: PointerEvent, hoverTarget: HTMLElement) => {\n const currentTarget = event.currentTarget as HTMLElement;\n const exitPoint = { x: event.clientX, y: event.clientY };\n const exitSide = getExitSideFromRect(exitPoint, currentTarget.getBoundingClientRect());\n const paddedExitPoints = getPaddedExitPoints(exitPoint, exitSide);\n const hoverTargetPoints = getPointsFromRect(hoverTarget.getBoundingClientRect());\n const graceArea = getHull([...paddedExitPoints, ...hoverTargetPoints]);\n setPointerGraceArea(graceArea);\n onPointerInTransitChange(true);\n },\n [onPointerInTransitChange]\n );\n\n React.useEffect(() => {\n return () => handleRemoveGraceArea();\n }, [handleRemoveGraceArea]);\n\n React.useEffect(() => {\n if (trigger && content) {\n const handleTriggerLeave = (event: PointerEvent) => handleCreateGraceArea(event, content);\n const handleContentLeave = (event: PointerEvent) => handleCreateGraceArea(event, trigger);\n\n trigger.addEventListener('pointerleave', handleTriggerLeave);\n content.addEventListener('pointerleave', handleContentLeave);\n return () => {\n trigger.removeEventListener('pointerleave', handleTriggerLeave);\n content.removeEventListener('pointerleave', handleContentLeave);\n };\n }\n }, [trigger, content, handleCreateGraceArea, handleRemoveGraceArea]);\n\n React.useEffect(() => {\n if (pointerGraceArea) {\n const handleTrackPointerGrace = (event: PointerEvent) => {\n const target = event.target as HTMLElement;\n const pointerPosition = { x: event.clientX, y: event.clientY };\n const hasEnteredTarget = trigger?.contains(target) || content?.contains(target);\n const isPointerOutsideGraceArea = !isPointInPolygon(pointerPosition, pointerGraceArea);\n\n if (hasEnteredTarget) {\n handleRemoveGraceArea();\n } else if (isPointerOutsideGraceArea) {\n handleRemoveGraceArea();\n onClose();\n }\n };\n document.addEventListener('pointermove', handleTrackPointerGrace);\n return () => document.removeEventListener('pointermove', handleTrackPointerGrace);\n }\n }, [trigger, content, pointerGraceArea, onClose, handleRemoveGraceArea]);\n\n return <TooltipContentImpl {...props} ref={composedRefs} />;\n});\n\nconst [VisuallyHiddenContentContextProvider, useVisuallyHiddenContentContext] =\n createTooltipContext(TOOLTIP_NAME, { isInside: false });\n\ntype TooltipContentImplElement = React.ElementRef<typeof PopperPrimitive.Content>;\ntype DismissableLayerProps = Radix.ComponentPropsWithoutRef<typeof DismissableLayer>;\ntype PopperContentProps = Radix.ComponentPropsWithoutRef<typeof PopperPrimitive.Content>;\ninterface TooltipContentImplProps extends Omit<PopperContentProps, 'onPlaced'> {\n /**\n * A more descriptive label for accessibility purpose\n */\n 'aria-label'?: string;\n\n /**\n * Event handler called when the escape key is down.\n * Can be prevented.\n */\n onEscapeKeyDown?: DismissableLayerProps['onEscapeKeyDown'];\n /**\n * Event handler called when the a `pointerdown` event happens outside of the `Tooltip`.\n * Can be prevented.\n */\n onPointerDownOutside?: DismissableLayerProps['onPointerDownOutside'];\n}\n\nconst TooltipContentImpl = React.forwardRef<TooltipContentImplElement, TooltipContentImplProps>(\n (props: ScopedProps<TooltipContentImplProps>, forwardedRef) => {\n const {\n __scopeTooltip,\n children,\n 'aria-label': ariaLabel,\n onEscapeKeyDown,\n onPointerDownOutside,\n ...contentProps\n } = props;\n const context = useTooltipContext(CONTENT_NAME, __scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const { onClose } = context;\n\n // Close this tooltip if another one opens\n React.useEffect(() => {\n document.addEventListener(TOOLTIP_OPEN, onClose);\n return () => document.removeEventListener(TOOLTIP_OPEN, onClose);\n }, [onClose]);\n\n // Close the tooltip if the trigger is scrolled\n React.useEffect(() => {\n if (context.trigger) {\n const handleScroll = (event: Event) => {\n const target = event.target as HTMLElement;\n if (target?.contains(context.trigger)) onClose();\n };\n window.addEventListener('scroll', handleScroll, { capture: true });\n return () => window.removeEventListener('scroll', handleScroll, { capture: true });\n }\n }, [context.trigger, onClose]);\n\n return (\n <DismissableLayer\n asChild\n disableOutsidePointerEvents={false}\n onEscapeKeyDown={onEscapeKeyDown}\n onPointerDownOutside={onPointerDownOutside}\n onFocusOutside={(event) => event.preventDefault()}\n onDismiss={onClose}\n >\n <PopperPrimitive.Content\n data-state={context.stateAttribute}\n {...popperScope}\n {...contentProps}\n ref={forwardedRef}\n style={{\n ...contentProps.style,\n // re-namespace exposed content custom properties\n ...{\n '--radix-tooltip-content-transform-origin': 'var(--radix-popper-transform-origin)',\n '--radix-tooltip-content-available-width': 'var(--radix-popper-available-width)',\n '--radix-tooltip-content-available-height': 'var(--radix-popper-available-height)',\n '--radix-tooltip-trigger-width': 'var(--radix-popper-anchor-width)',\n '--radix-tooltip-trigger-height': 'var(--radix-popper-anchor-height)',\n },\n }}\n >\n <Slottable>{children}</Slottable>\n <VisuallyHiddenContentContextProvider scope={__scopeTooltip} isInside={true}>\n <VisuallyHiddenPrimitive.Root id={context.contentId} role=\"tooltip\">\n {ariaLabel || children}\n </VisuallyHiddenPrimitive.Root>\n </VisuallyHiddenContentContextProvider>\n </PopperPrimitive.Content>\n </DismissableLayer>\n );\n }\n);\n\nTooltipContent.displayName = CONTENT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * TooltipArrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst ARROW_NAME = 'TooltipArrow';\n\ntype TooltipArrowElement = React.ElementRef<typeof PopperPrimitive.Arrow>;\ntype PopperArrowProps = Radix.ComponentPropsWithoutRef<typeof PopperPrimitive.Arrow>;\ninterface TooltipArrowProps extends PopperArrowProps {}\n\nconst TooltipArrow = React.forwardRef<TooltipArrowElement, TooltipArrowProps>(\n (props: ScopedProps<TooltipArrowProps>, forwardedRef) => {\n const { __scopeTooltip, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeTooltip);\n const visuallyHiddenContentContext = useVisuallyHiddenContentContext(\n ARROW_NAME,\n __scopeTooltip\n );\n // if the arrow is inside the `VisuallyHidden`, we don't want to render it all to\n // prevent issues in positioning the arrow due to the duplicate\n return visuallyHiddenContentContext.isInside ? null : (\n <PopperPrimitive.Arrow {...popperScope} {...arrowProps} ref={forwardedRef} />\n );\n }\n);\n\nTooltipArrow.displayName = ARROW_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype Side = NonNullable<TooltipContentProps['side']>;\n\nfunction getExitSideFromRect(point: Point, rect: DOMRect): Side {\n const top = Math.abs(rect.top - point.y);\n const bottom = Math.abs(rect.bottom - point.y);\n const right = Math.abs(rect.right - point.x);\n const left = Math.abs(rect.left - point.x);\n\n switch (Math.min(top, bottom, right, left)) {\n case left:\n return 'left';\n case right:\n return 'right';\n case top:\n return 'top';\n case bottom:\n return 'bottom';\n default:\n throw new Error('unreachable');\n }\n}\n\nfunction getPaddedExitPoints(exitPoint: Point, exitSide: Side, padding = 5) {\n const paddedExitPoints: Point[] = [];\n switch (exitSide) {\n case 'top':\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y + padding },\n { x: exitPoint.x + padding, y: exitPoint.y + padding }\n );\n break;\n case 'bottom':\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y - padding },\n { x: exitPoint.x + padding, y: exitPoint.y - padding }\n );\n break;\n case 'left':\n paddedExitPoints.push(\n { x: exitPoint.x + padding, y: exitPoint.y - padding },\n { x: exitPoint.x + padding, y: exitPoint.y + padding }\n );\n break;\n case 'right':\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y - padding },\n { x: exitPoint.x - padding, y: exitPoint.y + padding }\n );\n break;\n }\n return paddedExitPoints;\n}\n\nfunction getPointsFromRect(rect: DOMRect) {\n const { top, right, bottom, left } = rect;\n return [\n { x: left, y: top },\n { x: right, y: top },\n { x: right, y: bottom },\n { x: left, y: bottom },\n ];\n}\n\n// Determine if a point is inside of a polygon.\n// Based on https://github.com/substack/point-in-polygon\nfunction isPointInPolygon(point: Point, polygon: Polygon) {\n const { x, y } = point;\n let inside = false;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const xi = polygon[i].x;\n const yi = polygon[i].y;\n const xj = polygon[j].x;\n const yj = polygon[j].y;\n\n // prettier-ignore\n const intersect = ((yi > y) !== (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);\n if (intersect) inside = !inside;\n }\n\n return inside;\n}\n\n// Returns a new array of points representing the convex hull of the given set of points.\n// https://www.nayuki.io/page/convex-hull-algorithm\nfunction getHull<P extends Point>(points: Readonly<Array<P>>): Array<P> {\n const newPoints: Array<P> = points.slice();\n newPoints.sort((a: Point, b: Point) => {\n if (a.x < b.x) return -1;\n else if (a.x > b.x) return +1;\n else if (a.y < b.y) return -1;\n else if (a.y > b.y) return +1;\n else return 0;\n });\n return getHullPresorted(newPoints);\n}\n\n// Returns the convex hull, assuming that each points[i] <= points[i + 1]. Runs in O(n) time.\nfunction getHullPresorted<P extends Point>(points: Readonly<Array<P>>): Array<P> {\n if (points.length <= 1) return points.slice();\n\n const upperHull: Array<P> = [];\n for (let i = 0; i < points.length; i++) {\n const p = points[i];\n while (upperHull.length >= 2) {\n const q = upperHull[upperHull.length - 1];\n const r = upperHull[upperHull.length - 2];\n if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) upperHull.pop();\n else break;\n }\n upperHull.push(p);\n }\n upperHull.pop();\n\n const lowerHull: Array<P> = [];\n for (let i = points.length - 1; i >= 0; i--) {\n const p = points[i];\n while (lowerHull.length >= 2) {\n const q = lowerHull[lowerHull.length - 1];\n const r = lowerHull[lowerHull.length - 2];\n if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) lowerHull.pop();\n else break;\n }\n lowerHull.push(p);\n }\n lowerHull.pop();\n\n if (\n upperHull.length === 1 &&\n lowerHull.length === 1 &&\n upperHull[0].x === lowerHull[0].x &&\n upperHull[0].y === lowerHull[0].y\n ) {\n return upperHull;\n } else {\n return upperHull.concat(lowerHull);\n }\n}\n\nconst Provider = TooltipProvider;\nconst Root = Tooltip;\nconst Trigger = TooltipTrigger;\nconst Portal = TooltipPortal;\nconst Content = TooltipContent;\nconst Arrow = TooltipArrow;\n\nexport {\n createTooltipScope,\n //\n TooltipProvider,\n Tooltip,\n TooltipTrigger,\n TooltipPortal,\n TooltipContent,\n TooltipArrow,\n //\n Provider,\n Root,\n Trigger,\n Portal,\n Content,\n Arrow,\n};\nexport type {\n TooltipProps,\n TooltipTriggerProps,\n TooltipPortalProps,\n TooltipContentProps,\n TooltipArrowProps,\n};\n","import * as React from 'react';\nimport { IconProps } from './types';\n\nexport const CaretSortIcon = React.forwardRef<SVGSVGElement, IconProps>(\n ({ color = 'currentColor', ...props }, forwardedRef) => {\n return (\n <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n ref={forwardedRef}\n >\n <path\n d=\"M4.93179 5.43179C4.75605 5.60753 4.75605 5.89245 4.93179 6.06819C5.10753 6.24392 5.39245 6.24392 5.56819 6.06819L7.49999 4.13638L9.43179 6.06819C9.60753 6.24392 9.89245 6.24392 10.0682 6.06819C10.2439 5.89245 10.2439 5.60753 10.0682 5.43179L7.81819 3.18179C7.73379 3.0974 7.61933 3.04999 7.49999 3.04999C7.38064 3.04999 7.26618 3.0974 7.18179 3.18179L4.93179 5.43179ZM10.0682 9.56819C10.2439 9.39245 10.2439 9.10753 10.0682 8.93179C9.89245 8.75606 9.60753 8.75606 9.43179 8.93179L7.49999 10.8636L5.56819 8.93179C5.39245 8.75606 5.10753 8.75606 4.93179 8.93179C4.75605 9.10753 4.75605 9.39245 4.93179 9.56819L7.18179 11.8182C7.35753 11.9939 7.64245 11.9939 7.81819 11.8182L10.0682 9.56819Z\"\n fill={color}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n }\n);\n\nexport default CaretSortIcon;\n","import * as React from 'react';\nimport { IconProps } from './types';\n\nexport const CheckIcon = React.forwardRef<SVGSVGElement, IconProps>(\n ({ color = 'currentColor', ...props }, forwardedRef) => {\n return (\n <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n ref={forwardedRef}\n >\n <path\n d=\"M11.4669 3.72684C11.7558 3.91574 11.8369 4.30308 11.648 4.59198L7.39799 11.092C7.29783 11.2452 7.13556 11.3467 6.95402 11.3699C6.77247 11.3931 6.58989 11.3355 6.45446 11.2124L3.70446 8.71241C3.44905 8.48022 3.43023 8.08494 3.66242 7.82953C3.89461 7.57412 4.28989 7.55529 4.5453 7.78749L6.75292 9.79441L10.6018 3.90792C10.7907 3.61902 11.178 3.53795 11.4669 3.72684Z\"\n fill={color}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n }\n);\n\nexport default CheckIcon;\n","import * as React from 'react';\nimport { IconProps } from './types';\n\nexport const ChevronDownIcon = React.forwardRef<SVGSVGElement, IconProps>(\n ({ color = 'currentColor', ...props }, forwardedRef) => {\n return (\n <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n ref={forwardedRef}\n >\n <path\n d=\"M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z\"\n fill={color}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n }\n);\n\nexport default ChevronDownIcon;\n","import * as React from 'react';\nimport { IconProps } from './types';\n\nexport const ChevronRightIcon = React.forwardRef<SVGSVGElement, IconProps>(\n ({ color = 'currentColor', ...props }, forwardedRef) => {\n return (\n <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n ref={forwardedRef}\n >\n <path\n d=\"M6.1584 3.13508C6.35985 2.94621 6.67627 2.95642 6.86514 3.15788L10.6151 7.15788C10.7954 7.3502 10.7954 7.64949 10.6151 7.84182L6.86514 11.8418C6.67627 12.0433 6.35985 12.0535 6.1584 11.8646C5.95694 11.6757 5.94673 11.3593 6.1356 11.1579L9.565 7.49985L6.1356 3.84182C5.94673 3.64036 5.95694 3.32394 6.1584 3.13508Z\"\n fill={color}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n }\n);\n\nexport default ChevronRightIcon;\n","import * as React from 'react';\nimport { IconProps } from './types';\n\nexport const ChevronUpIcon = React.forwardRef<SVGSVGElement, IconProps>(\n ({ color = 'currentColor', ...props }, forwardedRef) => {\n return (\n <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n ref={forwardedRef}\n >\n <path\n d=\"M3.13523 8.84197C3.3241 9.04343 3.64052 9.05363 3.84197 8.86477L7.5 5.43536L11.158 8.86477C11.3595 9.05363 11.6759 9.04343 11.8648 8.84197C12.0536 8.64051 12.0434 8.32409 11.842 8.13523L7.84197 4.38523C7.64964 4.20492 7.35036 4.20492 7.15803 4.38523L3.15803 8.13523C2.95657 8.32409 2.94637 8.64051 3.13523 8.84197Z\"\n fill={color}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n }\n);\n\nexport default ChevronUpIcon;\n","import * as React from 'react';\nimport { IconProps } from './types';\n\nexport const DotFilledIcon = React.forwardRef<SVGSVGElement, IconProps>(\n ({ color = 'currentColor', ...props }, forwardedRef) => {\n return (\n <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n ref={forwardedRef}\n >\n <path\n d=\"M9.875 7.5C9.875 8.81168 8.81168 9.875 7.5 9.875C6.18832 9.875 5.125 8.81168 5.125 7.5C5.125 6.18832 6.18832 5.125 7.5 5.125C8.81168 5.125 9.875 6.18832 9.875 7.5Z\"\n fill={color}\n />\n </svg>\n );\n }\n);\n\nexport default DotFilledIcon;\n","import * as React from 'react';\nimport { IconProps } from './types';\n\nexport const QuestionMarkCircledIcon = React.forwardRef<SVGSVGElement, IconProps>(\n ({ color = 'currentColor', ...props }, forwardedRef) => {\n return (\n <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n ref={forwardedRef}\n >\n <path\n d=\"M0.877075 7.49972C0.877075 3.84204 3.84222 0.876892 7.49991 0.876892C11.1576 0.876892 14.1227 3.84204 14.1227 7.49972C14.1227 11.1574 11.1576 14.1226 7.49991 14.1226C3.84222 14.1226 0.877075 11.1574 0.877075 7.49972ZM7.49991 1.82689C4.36689 1.82689 1.82708 4.36671 1.82708 7.49972C1.82708 10.6327 4.36689 13.1726 7.49991 13.1726C10.6329 13.1726 13.1727 10.6327 13.1727 7.49972C13.1727 4.36671 10.6329 1.82689 7.49991 1.82689ZM8.24993 10.5C8.24993 10.9142 7.91414 11.25 7.49993 11.25C7.08571 11.25 6.74993 10.9142 6.74993 10.5C6.74993 10.0858 7.08571 9.75 7.49993 9.75C7.91414 9.75 8.24993 10.0858 8.24993 10.5ZM6.05003 6.25C6.05003 5.57211 6.63511 4.925 7.50003 4.925C8.36496 4.925 8.95003 5.57211 8.95003 6.25C8.95003 6.74118 8.68002 6.99212 8.21447 7.27494C8.16251 7.30651 8.10258 7.34131 8.03847 7.37854L8.03841 7.37858C7.85521 7.48497 7.63788 7.61119 7.47449 7.73849C7.23214 7.92732 6.95003 8.23198 6.95003 8.7C6.95004 9.00376 7.19628 9.25 7.50004 9.25C7.8024 9.25 8.04778 9.00601 8.05002 8.70417L8.05056 8.7033C8.05924 8.6896 8.08493 8.65735 8.15058 8.6062C8.25207 8.52712 8.36508 8.46163 8.51567 8.37436L8.51571 8.37433C8.59422 8.32883 8.68296 8.27741 8.78559 8.21506C9.32004 7.89038 10.05 7.35382 10.05 6.25C10.05 4.92789 8.93511 3.825 7.50003 3.825C6.06496 3.825 4.95003 4.92789 4.95003 6.25C4.95003 6.55376 5.19628 6.8 5.50003 6.8C5.80379 6.8 6.05003 6.55376 6.05003 6.25Z\"\n fill={color}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n }\n);\n\nexport default QuestionMarkCircledIcon;\n","import * as React from 'react';\nimport { IconProps } from './types';\n\nexport const TextIcon = React.forwardRef<SVGSVGElement, IconProps>(\n ({ color = 'currentColor', ...props }, forwardedRef) => {\n return (\n <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n ref={forwardedRef}\n >\n <path\n d=\"M3.94993 2.95002L3.94993 4.49998C3.94993 4.74851 3.74845 4.94998 3.49993 4.94998C3.2514 4.94998 3.04993 4.74851 3.04993 4.49998V2.50004C3.04993 2.45246 3.05731 2.40661 3.07099 2.36357C3.12878 2.18175 3.29897 2.05002 3.49993 2.05002H11.4999C11.6553 2.05002 11.7922 2.12872 11.8731 2.24842C11.9216 2.32024 11.9499 2.40682 11.9499 2.50002L11.9499 2.50004V4.49998C11.9499 4.74851 11.7485 4.94998 11.4999 4.94998C11.2514 4.94998 11.0499 4.74851 11.0499 4.49998V2.95002H8.04993V12.05H9.25428C9.50281 12.05 9.70428 12.2515 9.70428 12.5C9.70428 12.7486 9.50281 12.95 9.25428 12.95H5.75428C5.50575 12.95 5.30428 12.7486 5.30428 12.5C5.30428 12.2515 5.50575 12.05 5.75428 12.05H6.94993V2.95002H3.94993Z\"\n fill={color}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n }\n);\n\nexport default TextIcon;\n","/**\n * @license lucide-react v0.364.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport * as index from './icons/index.js';\nexport { index as icons };\nexport { default as AArrowDown, default as AArrowDownIcon, default as LucideAArrowDown } from './icons/a-arrow-down.js';\nexport { default as AArrowUp, default as AArrowUpIcon, default as LucideAArrowUp } from './icons/a-arrow-up.js';\nexport { default as ALargeSmall, default as ALargeSmallIcon, default as LucideALargeSmall } from './icons/a-large-small.js';\nexport { default as Accessibility, default as AccessibilityIcon, default as LucideAccessibility } from './icons/accessibility.js';\nexport { default as Activity, default as ActivityIcon, default as LucideActivity } from './icons/activity.js';\nexport { default as AirVent, default as AirVentIcon, default as LucideAirVent } from './icons/air-vent.js';\nexport { default as Airplay, default as AirplayIcon, default as LucideAirplay } from './icons/airplay.js';\nexport { default as AlarmClockOff, default as AlarmClockOffIcon, default as LucideAlarmClockOff } from './icons/alarm-clock-off.js';\nexport { default as AlarmClock, default as AlarmClockIcon, default as LucideAlarmClock } from './icons/alarm-clock.js';\nexport { default as AlarmSmoke, default as AlarmSmokeIcon, default as LucideAlarmSmoke } from './icons/alarm-smoke.js';\nexport { default as Album, default as AlbumIcon, default as LucideAlbum } from './icons/album.js';\nexport { default as AlignCenterHorizontal, default as AlignCenterHorizontalIcon, default as LucideAlignCenterHorizontal } from './icons/align-center-horizontal.js';\nexport { default as AlignCenterVertical, default as AlignCenterVerticalIcon, default as LucideAlignCenterVertical } from './icons/align-center-vertical.js';\nexport { default as AlignCenter, default as AlignCenterIcon, default as LucideAlignCenter } from './icons/align-center.js';\nexport { default as AlignEndHorizontal, default as AlignEndHorizontalIcon, default as LucideAlignEndHorizontal } from './icons/align-end-horizontal.js';\nexport { default as AlignEndVertical, default as AlignEndVerticalIcon, default as LucideAlignEndVertical } from './icons/align-end-vertical.js';\nexport { default as AlignHorizontalDistributeCenter, default as AlignHorizontalDistributeCenterIcon, default as LucideAlignHorizontalDistributeCenter } from './icons/align-horizontal-distribute-center.js';\nexport { default as AlignHorizontalDistributeEnd, default as AlignHorizontalDistributeEndIcon, default as LucideAlignHorizontalDistributeEnd } from './icons/align-horizontal-distribute-end.js';\nexport { default as AlignHorizontalDistributeStart, default as AlignHorizontalDistributeStartIcon, default as LucideAlignHorizontalDistributeStart } from './icons/align-horizontal-distribute-start.js';\nexport { default as AlignHorizontalJustifyCenter, default as AlignHorizontalJustifyCenterIcon, default as LucideAlignHorizontalJustifyCenter } from './icons/align-horizontal-justify-center.js';\nexport { default as AlignHorizontalJustifyEnd, default as AlignHorizontalJustifyEndIcon, default as LucideAlignHorizontalJustifyEnd } from './icons/align-horizontal-justify-end.js';\nexport { default as AlignHorizontalJustifyStart, default as AlignHorizontalJustifyStartIcon, default as LucideAlignHorizontalJustifyStart } from './icons/align-horizontal-justify-start.js';\nexport { default as AlignHorizontalSpaceAround, default as AlignHorizontalSpaceAroundIcon, default as LucideAlignHorizontalSpaceAround } from './icons/align-horizontal-space-around.js';\nexport { default as AlignHorizontalSpaceBetween, default as AlignHorizontalSpaceBetweenIcon, default as LucideAlignHorizontalSpaceBetween } from './icons/align-horizontal-space-between.js';\nexport { default as AlignJustify, default as AlignJustifyIcon, default as LucideAlignJustify } from './icons/align-justify.js';\nexport { default as AlignLeft, default as AlignLeftIcon, default as LucideAlignLeft } from './icons/align-left.js';\nexport { default as AlignRight, default as AlignRightIcon, default as LucideAlignRight } from './icons/align-right.js';\nexport { default as AlignStartHorizontal, default as AlignStartHorizontalIcon, default as LucideAlignStartHorizontal } from './icons/align-start-horizontal.js';\nexport { default as AlignStartVertical, default as AlignStartVerticalIcon, default as LucideAlignStartVertical } from './icons/align-start-vertical.js';\nexport { default as AlignVerticalDistributeCenter, default as AlignVerticalDistributeCenterIcon, default as LucideAlignVerticalDistributeCenter } from './icons/align-vertical-distribute-center.js';\nexport { default as AlignVerticalDistributeEnd, default as AlignVerticalDistributeEndIcon, default as LucideAlignVerticalDistributeEnd } from './icons/align-vertical-distribute-end.js';\nexport { default as AlignVerticalDistributeStart, default as AlignVerticalDistributeStartIcon, default as LucideAlignVerticalDistributeStart } from './icons/align-vertical-distribute-start.js';\nexport { default as AlignVerticalJustifyCenter, default as AlignVerticalJustifyCenterIcon, default as LucideAlignVerticalJustifyCenter } from './icons/align-vertical-justify-center.js';\nexport { default as AlignVerticalJustifyEnd, default as AlignVerticalJustifyEndIcon, default as LucideAlignVerticalJustifyEnd } from './icons/align-vertical-justify-end.js';\nexport { default as AlignVerticalJustifyStart, default as AlignVerticalJustifyStartIcon, default as LucideAlignVerticalJustifyStart } from './icons/align-vertical-justify-start.js';\nexport { default as AlignVerticalSpaceAround, default as AlignVerticalSpaceAroundIcon, default as LucideAlignVerticalSpaceAround } from './icons/align-vertical-space-around.js';\nexport { default as AlignVerticalSpaceBetween, default as AlignVerticalSpaceBetweenIcon, default as LucideAlignVerticalSpaceBetween } from './icons/align-vertical-space-between.js';\nexport { default as Ambulance, default as AmbulanceIcon, default as LucideAmbulance } from './icons/ambulance.js';\nexport { default as Ampersand, default as AmpersandIcon, default as LucideAmpersand } from './icons/ampersand.js';\nexport { default as Ampersands, default as AmpersandsIcon, default as LucideAmpersands } from './icons/ampersands.js';\nexport { default as Anchor, default as AnchorIcon, default as LucideAnchor } from './icons/anchor.js';\nexport { default as Angry, default as AngryIcon, default as LucideAngry } from './icons/angry.js';\nexport { default as Annoyed, default as AnnoyedIcon, default as LucideAnnoyed } from './icons/annoyed.js';\nexport { default as Antenna, default as AntennaIcon, default as LucideAntenna } from './icons/antenna.js';\nexport { default as Anvil, default as AnvilIcon, default as LucideAnvil } from './icons/anvil.js';\nexport { default as Aperture, default as ApertureIcon, default as LucideAperture } from './icons/aperture.js';\nexport { default as AppWindowMac, default as AppWindowMacIcon, default as LucideAppWindowMac } from './icons/app-window-mac.js';\nexport { default as AppWindow, default as AppWindowIcon, default as LucideAppWindow } from './icons/app-window.js';\nexport { default as Apple, default as AppleIcon, default as LucideApple } from './icons/apple.js';\nexport { default as ArchiveRestore, default as ArchiveRestoreIcon, default as LucideArchiveRestore } from './icons/archive-restore.js';\nexport { default as ArchiveX, default as ArchiveXIcon, default as LucideArchiveX } from './icons/archive-x.js';\nexport { default as Archive, default as ArchiveIcon, default as LucideArchive } from './icons/archive.js';\nexport { default as AreaChart, default as AreaChartIcon, default as LucideAreaChart } from './icons/area-chart.js';\nexport { default as Armchair, default as ArmchairIcon, default as LucideArmchair } from './icons/armchair.js';\nexport { default as ArrowBigDownDash, default as ArrowBigDownDashIcon, default as LucideArrowBigDownDash } from './icons/arrow-big-down-dash.js';\nexport { default as ArrowBigDown, default as ArrowBigDownIcon, default as LucideArrowBigDown } from './icons/arrow-big-down.js';\nexport { default as ArrowBigLeftDash, default as ArrowBigLeftDashIcon, default as LucideArrowBigLeftDash } from './icons/arrow-big-left-dash.js';\nexport { default as ArrowBigLeft, default as ArrowBigLeftIcon, default as LucideArrowBigLeft } from './icons/arrow-big-left.js';\nexport { default as ArrowBigRightDash, default as ArrowBigRightDashIcon, default as LucideArrowBigRightDash } from './icons/arrow-big-right-dash.js';\nexport { default as ArrowBigRight, default as ArrowBigRightIcon, default as LucideArrowBigRight } from './icons/arrow-big-right.js';\nexport { default as ArrowBigUpDash, default as ArrowBigUpDashIcon, default as LucideArrowBigUpDash } from './icons/arrow-big-up-dash.js';\nexport { default as ArrowBigUp, default as ArrowBigUpIcon, default as LucideArrowBigUp } from './icons/arrow-big-up.js';\nexport { default as ArrowDownFromLine, default as ArrowDownFromLineIcon, default as LucideArrowDownFromLine } from './icons/arrow-down-from-line.js';\nexport { default as ArrowDownLeft, default as ArrowDownLeftIcon, default as LucideArrowDownLeft } from './icons/arrow-down-left.js';\nexport { default as ArrowDownNarrowWide, default as ArrowDownNarrowWideIcon, default as LucideArrowDownNarrowWide } from './icons/arrow-down-narrow-wide.js';\nexport { default as ArrowDownRight, default as ArrowDownRightIcon, default as LucideArrowDownRight } from './icons/arrow-down-right.js';\nexport { default as ArrowDownToDot, default as ArrowDownToDotIcon, default as LucideArrowDownToDot } from './icons/arrow-down-to-dot.js';\nexport { default as ArrowDownToLine, default as ArrowDownToLineIcon, default as LucideArrowDownToLine } from './icons/arrow-down-to-line.js';\nexport { default as ArrowDownUp, default as ArrowDownUpIcon, default as LucideArrowDownUp } from './icons/arrow-down-up.js';\nexport { default as ArrowDown, default as ArrowDownIcon, default as LucideArrowDown } from './icons/arrow-down.js';\nexport { default as ArrowLeftFromLine, default as ArrowLeftFromLineIcon, default as LucideArrowLeftFromLine } from './icons/arrow-left-from-line.js';\nexport { default as ArrowLeftRight, default as ArrowLeftRightIcon, default as LucideArrowLeftRight } from './icons/arrow-left-right.js';\nexport { default as ArrowLeftToLine, default as ArrowLeftToLineIcon, default as LucideArrowLeftToLine } from './icons/arrow-left-to-line.js';\nexport { default as ArrowLeft, default as ArrowLeftIcon, default as LucideArrowLeft } from './icons/arrow-left.js';\nexport { default as ArrowRightFromLine, default as ArrowRightFromLineIcon, default as LucideArrowRightFromLine } from './icons/arrow-right-from-line.js';\nexport { default as ArrowRightLeft, default as ArrowRightLeftIcon, default as LucideArrowRightLeft } from './icons/arrow-right-left.js';\nexport { default as ArrowRightToLine, default as ArrowRightToLineIcon, default as LucideArrowRightToLine } from './icons/arrow-right-to-line.js';\nexport { default as ArrowRight, default as ArrowRightIcon, default as LucideArrowRight } from './icons/arrow-right.js';\nexport { default as ArrowUpDown, default as ArrowUpDownIcon, default as LucideArrowUpDown } from './icons/arrow-up-down.js';\nexport { default as ArrowUpFromDot, default as ArrowUpFromDotIcon, default as LucideArrowUpFromDot } from './icons/arrow-up-from-dot.js';\nexport { default as ArrowUpFromLine, default as ArrowUpFromLineIcon, default as LucideArrowUpFromLine } from './icons/arrow-up-from-line.js';\nexport { default as ArrowUpLeft, default as ArrowUpLeftIcon, default as LucideArrowUpLeft } from './icons/arrow-up-left.js';\nexport { default as ArrowUpRight, default as ArrowUpRightIcon, default as LucideArrowUpRight } from './icons/arrow-up-right.js';\nexport { default as ArrowUpToLine, default as ArrowUpToLineIcon, default as LucideArrowUpToLine } from './icons/arrow-up-to-line.js';\nexport { default as ArrowUpWideNarrow, default as ArrowUpWideNarrowIcon, default as LucideArrowUpWideNarrow } from './icons/arrow-up-wide-narrow.js';\nexport { default as ArrowUp, default as ArrowUpIcon, default as LucideArrowUp } from './icons/arrow-up.js';\nexport { default as ArrowsUpFromLine, default as ArrowsUpFromLineIcon, default as LucideArrowsUpFromLine } from './icons/arrows-up-from-line.js';\nexport { default as Asterisk, default as AsteriskIcon, default as LucideAsterisk } from './icons/asterisk.js';\nexport { default as AtSign, default as AtSignIcon, default as LucideAtSign } from './icons/at-sign.js';\nexport { default as Atom, default as AtomIcon, default as LucideAtom } from './icons/atom.js';\nexport { default as AudioLines, default as AudioLinesIcon, default as LucideAudioLines } from './icons/audio-lines.js';\nexport { default as AudioWaveform, default as AudioWaveformIcon, default as LucideAudioWaveform } from './icons/audio-waveform.js';\nexport { default as Award, default as AwardIcon, default as LucideAward } from './icons/award.js';\nexport { default as Axe, default as AxeIcon, default as LucideAxe } from './icons/axe.js';\nexport { default as Baby, default as BabyIcon, default as LucideBaby } from './icons/baby.js';\nexport { default as Backpack, default as BackpackIcon, default as LucideBackpack } from './icons/backpack.js';\nexport { default as BadgeAlert, default as BadgeAlertIcon, default as LucideBadgeAlert } from './icons/badge-alert.js';\nexport { default as BadgeCent, default as BadgeCentIcon, default as LucideBadgeCent } from './icons/badge-cent.js';\nexport { default as BadgeDollarSign, default as BadgeDollarSignIcon, default as LucideBadgeDollarSign } from './icons/badge-dollar-sign.js';\nexport { default as BadgeEuro, default as BadgeEuroIcon, default as LucideBadgeEuro } from './icons/badge-euro.js';\nexport { default as BadgeHelp, default as BadgeHelpIcon, default as LucideBadgeHelp } from './icons/badge-help.js';\nexport { default as BadgeIndianRupee, default as BadgeIndianRupeeIcon, default as LucideBadgeIndianRupee } from './icons/badge-indian-rupee.js';\nexport { default as BadgeInfo, default as BadgeInfoIcon, default as LucideBadgeInfo } from './icons/badge-info.js';\nexport { default as BadgeJapaneseYen, default as BadgeJapaneseYenIcon, default as LucideBadgeJapaneseYen } from './icons/badge-japanese-yen.js';\nexport { default as BadgeMinus, default as BadgeMinusIcon, default as LucideBadgeMinus } from './icons/badge-minus.js';\nexport { default as BadgePercent, default as BadgePercentIcon, default as LucideBadgePercent } from './icons/badge-percent.js';\nexport { default as BadgePlus, default as BadgePlusIcon, default as LucideBadgePlus } from './icons/badge-plus.js';\nexport { default as BadgePoundSterling, default as BadgePoundSterlingIcon, default as LucideBadgePoundSterling } from './icons/badge-pound-sterling.js';\nexport { default as BadgeRussianRuble, default as BadgeRussianRubleIcon, default as LucideBadgeRussianRuble } from './icons/badge-russian-ruble.js';\nexport { default as BadgeSwissFranc, default as BadgeSwissFrancIcon, default as LucideBadgeSwissFranc } from './icons/badge-swiss-franc.js';\nexport { default as BadgeX, default as BadgeXIcon, default as LucideBadgeX } from './icons/badge-x.js';\nexport { default as Badge, default as BadgeIcon, default as LucideBadge } from './icons/badge.js';\nexport { default as BaggageClaim, default as BaggageClaimIcon, default as LucideBaggageClaim } from './icons/baggage-claim.js';\nexport { default as Ban, default as BanIcon, default as LucideBan } from './icons/ban.js';\nexport { default as Banana, default as BananaIcon, default as LucideBanana } from './icons/banana.js';\nexport { default as Banknote, default as BanknoteIcon, default as LucideBanknote } from './icons/banknote.js';\nexport { default as BarChart2, default as BarChart2Icon, default as LucideBarChart2 } from './icons/bar-chart-2.js';\nexport { default as BarChart3, default as BarChart3Icon, default as LucideBarChart3 } from './icons/bar-chart-3.js';\nexport { default as BarChart4, default as BarChart4Icon, default as LucideBarChart4 } from './icons/bar-chart-4.js';\nexport { default as BarChartBig, default as BarChartBigIcon, default as LucideBarChartBig } from './icons/bar-chart-big.js';\nexport { default as BarChartHorizontalBig, default as BarChartHorizontalBigIcon, default as LucideBarChartHorizontalBig } from './icons/bar-chart-horizontal-big.js';\nexport { default as BarChartHorizontal, default as BarChartHorizontalIcon, default as LucideBarChartHorizontal } from './icons/bar-chart-horizontal.js';\nexport { default as BarChart, default as BarChartIcon, default as LucideBarChart } from './icons/bar-chart.js';\nexport { default as Barcode, default as BarcodeIcon, default as LucideBarcode } from './icons/barcode.js';\nexport { default as Baseline, default as BaselineIcon, default as LucideBaseline } from './icons/baseline.js';\nexport { default as Bath, default as BathIcon, default as LucideBath } from './icons/bath.js';\nexport { default as BatteryCharging, default as BatteryChargingIcon, default as LucideBatteryCharging } from './icons/battery-charging.js';\nexport { default as BatteryFull, default as BatteryFullIcon, default as LucideBatteryFull } from './icons/battery-full.js';\nexport { default as BatteryLow, default as BatteryLowIcon, default as LucideBatteryLow } from './icons/battery-low.js';\nexport { default as BatteryMedium, default as BatteryMediumIcon, default as LucideBatteryMedium } from './icons/battery-medium.js';\nexport { default as BatteryWarning, default as BatteryWarningIcon, default as LucideBatteryWarning } from './icons/battery-warning.js';\nexport { default as Battery, default as BatteryIcon, default as LucideBattery } from './icons/battery.js';\nexport { default as Beaker, default as BeakerIcon, default as LucideBeaker } from './icons/beaker.js';\nexport { default as BeanOff, default as BeanOffIcon, default as LucideBeanOff } from './icons/bean-off.js';\nexport { default as Bean, default as BeanIcon, default as LucideBean } from './icons/bean.js';\nexport { default as BedDouble, default as BedDoubleIcon, default as LucideBedDouble } from './icons/bed-double.js';\nexport { default as BedSingle, default as BedSingleIcon, default as LucideBedSingle } from './icons/bed-single.js';\nexport { default as Bed, default as BedIcon, default as LucideBed } from './icons/bed.js';\nexport { default as Beef, default as BeefIcon, default as LucideBeef } from './icons/beef.js';\nexport { default as BeerOff, default as BeerOffIcon, default as LucideBeerOff } from './icons/beer-off.js';\nexport { default as Beer, default as BeerIcon, default as LucideBeer } from './icons/beer.js';\nexport { default as BellDot, default as BellDotIcon, default as LucideBellDot } from './icons/bell-dot.js';\nexport { default as BellElectric, default as BellElectricIcon, default as LucideBellElectric } from './icons/bell-electric.js';\nexport { default as BellMinus, default as BellMinusIcon, default as LucideBellMinus } from './icons/bell-minus.js';\nexport { default as BellOff, default as BellOffIcon, default as LucideBellOff } from './icons/bell-off.js';\nexport { default as BellPlus, default as BellPlusIcon, default as LucideBellPlus } from './icons/bell-plus.js';\nexport { default as BellRing, default as BellRingIcon, default as LucideBellRing } from './icons/bell-ring.js';\nexport { default as Bell, default as BellIcon, default as LucideBell } from './icons/bell.js';\nexport { default as BetweenVerticalEnd, default as BetweenVerticalEndIcon, default as LucideBetweenVerticalEnd } from './icons/between-vertical-end.js';\nexport { default as BetweenVerticalStart, default as BetweenVerticalStartIcon, default as LucideBetweenVerticalStart } from './icons/between-vertical-start.js';\nexport { default as Bike, default as BikeIcon, default as LucideBike } from './icons/bike.js';\nexport { default as Binary, default as BinaryIcon, default as LucideBinary } from './icons/binary.js';\nexport { default as Biohazard, default as BiohazardIcon, default as LucideBiohazard } from './icons/biohazard.js';\nexport { default as Bird, default as BirdIcon, default as LucideBird } from './icons/bird.js';\nexport { default as Bitcoin, default as BitcoinIcon, default as LucideBitcoin } from './icons/bitcoin.js';\nexport { default as Blend, default as BlendIcon, default as LucideBlend } from './icons/blend.js';\nexport { default as Blinds, default as BlindsIcon, default as LucideBlinds } from './icons/blinds.js';\nexport { default as Blocks, default as BlocksIcon, default as LucideBlocks } from './icons/blocks.js';\nexport { default as BluetoothConnected, default as BluetoothConnectedIcon, default as LucideBluetoothConnected } from './icons/bluetooth-connected.js';\nexport { default as BluetoothOff, default as BluetoothOffIcon, default as LucideBluetoothOff } from './icons/bluetooth-off.js';\nexport { default as BluetoothSearching, default as BluetoothSearchingIcon, default as LucideBluetoothSearching } from './icons/bluetooth-searching.js';\nexport { default as Bluetooth, default as BluetoothIcon, default as LucideBluetooth } from './icons/bluetooth.js';\nexport { default as Bold, default as BoldIcon, default as LucideBold } from './icons/bold.js';\nexport { default as Bolt, default as BoltIcon, default as LucideBolt } from './icons/bolt.js';\nexport { default as Bomb, default as BombIcon, default as LucideBomb } from './icons/bomb.js';\nexport { default as Bone, default as BoneIcon, default as LucideBone } from './icons/bone.js';\nexport { default as BookA, default as BookAIcon, default as LucideBookA } from './icons/book-a.js';\nexport { default as BookAudio, default as BookAudioIcon, default as LucideBookAudio } from './icons/book-audio.js';\nexport { default as BookCheck, default as BookCheckIcon, default as LucideBookCheck } from './icons/book-check.js';\nexport { default as BookCopy, default as BookCopyIcon, default as LucideBookCopy } from './icons/book-copy.js';\nexport { default as BookDown, default as BookDownIcon, default as LucideBookDown } from './icons/book-down.js';\nexport { default as BookHeadphones, default as BookHeadphonesIcon, default as LucideBookHeadphones } from './icons/book-headphones.js';\nexport { default as BookHeart, default as BookHeartIcon, default as LucideBookHeart } from './icons/book-heart.js';\nexport { default as BookImage, default as BookImageIcon, default as LucideBookImage } from './icons/book-image.js';\nexport { default as BookKey, default as BookKeyIcon, default as LucideBookKey } from './icons/book-key.js';\nexport { default as BookLock, default as BookLockIcon, default as LucideBookLock } from './icons/book-lock.js';\nexport { default as BookMarked, default as BookMarkedIcon, default as LucideBookMarked } from './icons/book-marked.js';\nexport { default as BookMinus, default as BookMinusIcon, default as LucideBookMinus } from './icons/book-minus.js';\nexport { default as BookOpenCheck, default as BookOpenCheckIcon, default as LucideBookOpenCheck } from './icons/book-open-check.js';\nexport { default as BookOpenText, default as BookOpenTextIcon, default as LucideBookOpenText } from './icons/book-open-text.js';\nexport { default as BookOpen, default as BookOpenIcon, default as LucideBookOpen } from './icons/book-open.js';\nexport { default as BookPlus, default as BookPlusIcon, default as LucideBookPlus } from './icons/book-plus.js';\nexport { default as BookText, default as BookTextIcon, default as LucideBookText } from './icons/book-text.js';\nexport { default as BookType, default as BookTypeIcon, default as LucideBookType } from './icons/book-type.js';\nexport { default as BookUp2, default as BookUp2Icon, default as LucideBookUp2 } from './icons/book-up-2.js';\nexport { default as BookUp, default as BookUpIcon, default as LucideBookUp } from './icons/book-up.js';\nexport { default as BookUser, default as BookUserIcon, default as LucideBookUser } from './icons/book-user.js';\nexport { default as BookX, default as BookXIcon, default as LucideBookX } from './icons/book-x.js';\nexport { default as Book, default as BookIcon, default as LucideBook } from './icons/book.js';\nexport { default as BookmarkCheck, default as BookmarkCheckIcon, default as LucideBookmarkCheck } from './icons/bookmark-check.js';\nexport { default as BookmarkMinus, default as BookmarkMinusIcon, default as LucideBookmarkMinus } from './icons/bookmark-minus.js';\nexport { default as BookmarkPlus, default as BookmarkPlusIcon, default as LucideBookmarkPlus } from './icons/bookmark-plus.js';\nexport { default as BookmarkX, default as BookmarkXIcon, default as LucideBookmarkX } from './icons/bookmark-x.js';\nexport { default as Bookmark, default as BookmarkIcon, default as LucideBookmark } from './icons/bookmark.js';\nexport { default as BoomBox, default as BoomBoxIcon, default as LucideBoomBox } from './icons/boom-box.js';\nexport { default as BotMessageSquare, default as BotMessageSquareIcon, default as LucideBotMessageSquare } from './icons/bot-message-square.js';\nexport { default as Bot, default as BotIcon, default as LucideBot } from './icons/bot.js';\nexport { default as BoxSelect, default as BoxSelectIcon, default as LucideBoxSelect } from './icons/box-select.js';\nexport { default as Box, default as BoxIcon, default as LucideBox } from './icons/box.js';\nexport { default as Boxes, default as BoxesIcon, default as LucideBoxes } from './icons/boxes.js';\nexport { default as Brackets, default as BracketsIcon, default as LucideBrackets } from './icons/brackets.js';\nexport { default as BrainCircuit, default as BrainCircuitIcon, default as LucideBrainCircuit } from './icons/brain-circuit.js';\nexport { default as BrainCog, default as BrainCogIcon, default as LucideBrainCog } from './icons/brain-cog.js';\nexport { default as Brain, default as BrainIcon, default as LucideBrain } from './icons/brain.js';\nexport { default as BrickWall, default as BrickWallIcon, default as LucideBrickWall } from './icons/brick-wall.js';\nexport { default as BriefcaseBusiness, default as BriefcaseBusinessIcon, default as LucideBriefcaseBusiness } from './icons/briefcase-business.js';\nexport { default as BriefcaseMedical, default as BriefcaseMedicalIcon, default as LucideBriefcaseMedical } from './icons/briefcase-medical.js';\nexport { default as Briefcase, default as BriefcaseIcon, default as LucideBriefcase } from './icons/briefcase.js';\nexport { default as BringToFront, default as BringToFrontIcon, default as LucideBringToFront } from './icons/bring-to-front.js';\nexport { default as Brush, default as BrushIcon, default as LucideBrush } from './icons/brush.js';\nexport { default as BugOff, default as BugOffIcon, default as LucideBugOff } from './icons/bug-off.js';\nexport { default as BugPlay, default as BugPlayIcon, default as LucideBugPlay } from './icons/bug-play.js';\nexport { default as Bug, default as BugIcon, default as LucideBug } from './icons/bug.js';\nexport { default as Building2, default as Building2Icon, default as LucideBuilding2 } from './icons/building-2.js';\nexport { default as Building, default as BuildingIcon, default as LucideBuilding } from './icons/building.js';\nexport { default as BusFront, default as BusFrontIcon, default as LucideBusFront } from './icons/bus-front.js';\nexport { default as Bus, default as BusIcon, default as LucideBus } from './icons/bus.js';\nexport { default as CableCar, default as CableCarIcon, default as LucideCableCar } from './icons/cable-car.js';\nexport { default as Cable, default as CableIcon, default as LucideCable } from './icons/cable.js';\nexport { default as CakeSlice, default as CakeSliceIcon, default as LucideCakeSlice } from './icons/cake-slice.js';\nexport { default as Cake, default as CakeIcon, default as LucideCake } from './icons/cake.js';\nexport { default as Calculator, default as CalculatorIcon, default as LucideCalculator } from './icons/calculator.js';\nexport { default as CalendarCheck2, default as CalendarCheck2Icon, default as LucideCalendarCheck2 } from './icons/calendar-check-2.js';\nexport { default as CalendarCheck, default as CalendarCheckIcon, default as LucideCalendarCheck } from './icons/calendar-check.js';\nexport { default as CalendarClock, default as CalendarClockIcon, default as LucideCalendarClock } from './icons/calendar-clock.js';\nexport { default as CalendarDays, default as CalendarDaysIcon, default as LucideCalendarDays } from './icons/calendar-days.js';\nexport { default as CalendarFold, default as CalendarFoldIcon, default as LucideCalendarFold } from './icons/calendar-fold.js';\nexport { default as CalendarHeart, default as CalendarHeartIcon, default as LucideCalendarHeart } from './icons/calendar-heart.js';\nexport { default as CalendarMinus2, default as CalendarMinus2Icon, default as LucideCalendarMinus2 } from './icons/calendar-minus-2.js';\nexport { default as CalendarMinus, default as CalendarMinusIcon, default as LucideCalendarMinus } from './icons/calendar-minus.js';\nexport { default as CalendarOff, default as CalendarOffIcon, default as LucideCalendarOff } from './icons/calendar-off.js';\nexport { default as CalendarPlus2, default as CalendarPlus2Icon, default as LucideCalendarPlus2 } from './icons/calendar-plus-2.js';\nexport { default as CalendarPlus, default as CalendarPlusIcon, default as LucideCalendarPlus } from './icons/calendar-plus.js';\nexport { default as CalendarRange, default as CalendarRangeIcon, default as LucideCalendarRange } from './icons/calendar-range.js';\nexport { default as CalendarSearch, default as CalendarSearchIcon, default as LucideCalendarSearch } from './icons/calendar-search.js';\nexport { default as CalendarX2, default as CalendarX2Icon, default as LucideCalendarX2 } from './icons/calendar-x-2.js';\nexport { default as CalendarX, default as CalendarXIcon, default as LucideCalendarX } from './icons/calendar-x.js';\nexport { default as Calendar, default as CalendarIcon, default as LucideCalendar } from './icons/calendar.js';\nexport { default as CameraOff, default as CameraOffIcon, default as LucideCameraOff } from './icons/camera-off.js';\nexport { default as Camera, default as CameraIcon, default as LucideCamera } from './icons/camera.js';\nexport { default as CandlestickChart, default as CandlestickChartIcon, default as LucideCandlestickChart } from './icons/candlestick-chart.js';\nexport { default as CandyCane, default as CandyCaneIcon, default as LucideCandyCane } from './icons/candy-cane.js';\nexport { default as CandyOff, default as CandyOffIcon, default as LucideCandyOff } from './icons/candy-off.js';\nexport { default as Candy, default as CandyIcon, default as LucideCandy } from './icons/candy.js';\nexport { default as Cannabis, default as CannabisIcon, default as LucideCannabis } from './icons/cannabis.js';\nexport { default as CaptionsOff, default as CaptionsOffIcon, default as LucideCaptionsOff } from './icons/captions-off.js';\nexport { default as CarFront, default as CarFrontIcon, default as LucideCarFront } from './icons/car-front.js';\nexport { default as CarTaxiFront, default as CarTaxiFrontIcon, default as LucideCarTaxiFront } from './icons/car-taxi-front.js';\nexport { default as Car, default as CarIcon, default as LucideCar } from './icons/car.js';\nexport { default as Caravan, default as CaravanIcon, default as LucideCaravan } from './icons/caravan.js';\nexport { default as Carrot, default as CarrotIcon, default as LucideCarrot } from './icons/carrot.js';\nexport { default as CaseLower, default as CaseLowerIcon, default as LucideCaseLower } from './icons/case-lower.js';\nexport { default as CaseSensitive, default as CaseSensitiveIcon, default as LucideCaseSensitive } from './icons/case-sensitive.js';\nexport { default as CaseUpper, default as CaseUpperIcon, default as LucideCaseUpper } from './icons/case-upper.js';\nexport { default as CassetteTape, default as CassetteTapeIcon, default as LucideCassetteTape } from './icons/cassette-tape.js';\nexport { default as Cast, default as CastIcon, default as LucideCast } from './icons/cast.js';\nexport { default as Castle, default as CastleIcon, default as LucideCastle } from './icons/castle.js';\nexport { default as Cat, default as CatIcon, default as LucideCat } from './icons/cat.js';\nexport { default as Cctv, default as CctvIcon, default as LucideCctv } from './icons/cctv.js';\nexport { default as CheckCheck, default as CheckCheckIcon, default as LucideCheckCheck } from './icons/check-check.js';\nexport { default as Check, default as CheckIcon, default as LucideCheck } from './icons/check.js';\nexport { default as ChefHat, default as ChefHatIcon, default as LucideChefHat } from './icons/chef-hat.js';\nexport { default as Cherry, default as CherryIcon, default as LucideCherry } from './icons/cherry.js';\nexport { default as ChevronDown, default as ChevronDownIcon, default as LucideChevronDown } from './icons/chevron-down.js';\nexport { default as ChevronFirst, default as ChevronFirstIcon, default as LucideChevronFirst } from './icons/chevron-first.js';\nexport { default as ChevronLast, default as ChevronLastIcon, default as LucideChevronLast } from './icons/chevron-last.js';\nexport { default as ChevronLeft, default as ChevronLeftIcon, default as LucideChevronLeft } from './icons/chevron-left.js';\nexport { default as ChevronRight, default as ChevronRightIcon, default as LucideChevronRight } from './icons/chevron-right.js';\nexport { default as ChevronUp, default as ChevronUpIcon, default as LucideChevronUp } from './icons/chevron-up.js';\nexport { default as ChevronsDownUp, default as ChevronsDownUpIcon, default as LucideChevronsDownUp } from './icons/chevrons-down-up.js';\nexport { default as ChevronsDown, default as ChevronsDownIcon, default as LucideChevronsDown } from './icons/chevrons-down.js';\nexport { default as ChevronsLeftRight, default as ChevronsLeftRightIcon, default as LucideChevronsLeftRight } from './icons/chevrons-left-right.js';\nexport { default as ChevronsLeft, default as ChevronsLeftIcon, default as LucideChevronsLeft } from './icons/chevrons-left.js';\nexport { default as ChevronsRightLeft, default as ChevronsRightLeftIcon, default as LucideChevronsRightLeft } from './icons/chevrons-right-left.js';\nexport { default as ChevronsRight, default as ChevronsRightIcon, default as LucideChevronsRight } from './icons/chevrons-right.js';\nexport { default as ChevronsUpDown, default as ChevronsUpDownIcon, default as LucideChevronsUpDown } from './icons/chevrons-up-down.js';\nexport { default as ChevronsUp, default as ChevronsUpIcon, default as LucideChevronsUp } from './icons/chevrons-up.js';\nexport { default as Chrome, default as ChromeIcon, default as LucideChrome } from './icons/chrome.js';\nexport { default as Church, default as ChurchIcon, default as LucideChurch } from './icons/church.js';\nexport { default as CigaretteOff, default as CigaretteOffIcon, default as LucideCigaretteOff } from './icons/cigarette-off.js';\nexport { default as Cigarette, default as CigaretteIcon, default as LucideCigarette } from './icons/cigarette.js';\nexport { default as CircleDashed, default as CircleDashedIcon, default as LucideCircleDashed } from './icons/circle-dashed.js';\nexport { default as CircleDollarSign, default as CircleDollarSignIcon, default as LucideCircleDollarSign } from './icons/circle-dollar-sign.js';\nexport { default as CircleDotDashed, default as CircleDotDashedIcon, default as LucideCircleDotDashed } from './icons/circle-dot-dashed.js';\nexport { default as CircleDot, default as CircleDotIcon, default as LucideCircleDot } from './icons/circle-dot.js';\nexport { default as CircleEllipsis, default as CircleEllipsisIcon, default as LucideCircleEllipsis } from './icons/circle-ellipsis.js';\nexport { default as CircleEqual, default as CircleEqualIcon, default as LucideCircleEqual } from './icons/circle-equal.js';\nexport { default as CircleFadingPlus, default as CircleFadingPlusIcon, default as LucideCircleFadingPlus } from './icons/circle-fading-plus.js';\nexport { default as CircleOff, default as CircleOffIcon, default as LucideCircleOff } from './icons/circle-off.js';\nexport { default as CircleSlash, default as CircleSlashIcon, default as LucideCircleSlash } from './icons/circle-slash.js';\nexport { default as Circle, default as CircleIcon, default as LucideCircle } from './icons/circle.js';\nexport { default as CircuitBoard, default as CircuitBoardIcon, default as LucideCircuitBoard } from './icons/circuit-board.js';\nexport { default as Citrus, default as CitrusIcon, default as LucideCitrus } from './icons/citrus.js';\nexport { default as Clapperboard, default as ClapperboardIcon, default as LucideClapperboard } from './icons/clapperboard.js';\nexport { default as ClipboardCheck, default as ClipboardCheckIcon, default as LucideClipboardCheck } from './icons/clipboard-check.js';\nexport { default as ClipboardCopy, default as ClipboardCopyIcon, default as LucideClipboardCopy } from './icons/clipboard-copy.js';\nexport { default as ClipboardList, default as ClipboardListIcon, default as LucideClipboardList } from './icons/clipboard-list.js';\nexport { default as ClipboardMinus, default as ClipboardMinusIcon, default as LucideClipboardMinus } from './icons/clipboard-minus.js';\nexport { default as ClipboardPaste, default as ClipboardPasteIcon, default as LucideClipboardPaste } from './icons/clipboard-paste.js';\nexport { default as ClipboardPlus, default as ClipboardPlusIcon, default as LucideClipboardPlus } from './icons/clipboard-plus.js';\nexport { default as ClipboardType, default as ClipboardTypeIcon, default as LucideClipboardType } from './icons/clipboard-type.js';\nexport { default as ClipboardX, default as ClipboardXIcon, default as LucideClipboardX } from './icons/clipboard-x.js';\nexport { default as Clipboard, default as ClipboardIcon, default as LucideClipboard } from './icons/clipboard.js';\nexport { default as Clock1, default as Clock1Icon, default as LucideClock1 } from './icons/clock-1.js';\nexport { default as Clock10, default as Clock10Icon, default as LucideClock10 } from './icons/clock-10.js';\nexport { default as Clock11, default as Clock11Icon, default as LucideClock11 } from './icons/clock-11.js';\nexport { default as Clock12, default as Clock12Icon, default as LucideClock12 } from './icons/clock-12.js';\nexport { default as Clock2, default as Clock2Icon, default as LucideClock2 } from './icons/clock-2.js';\nexport { default as Clock3, default as Clock3Icon, default as LucideClock3 } from './icons/clock-3.js';\nexport { default as Clock4, default as Clock4Icon, default as LucideClock4 } from './icons/clock-4.js';\nexport { default as Clock5, default as Clock5Icon, default as LucideClock5 } from './icons/clock-5.js';\nexport { default as Clock6, default as Clock6Icon, default as LucideClock6 } from './icons/clock-6.js';\nexport { default as Clock7, default as Clock7Icon, default as LucideClock7 } from './icons/clock-7.js';\nexport { default as Clock8, default as Clock8Icon, default as LucideClock8 } from './icons/clock-8.js';\nexport { default as Clock9, default as Clock9Icon, default as LucideClock9 } from './icons/clock-9.js';\nexport { default as Clock, default as ClockIcon, default as LucideClock } from './icons/clock.js';\nexport { default as CloudCog, default as CloudCogIcon, default as LucideCloudCog } from './icons/cloud-cog.js';\nexport { default as CloudDrizzle, default as CloudDrizzleIcon, default as LucideCloudDrizzle } from './icons/cloud-drizzle.js';\nexport { default as CloudFog, default as CloudFogIcon, default as LucideCloudFog } from './icons/cloud-fog.js';\nexport { default as CloudHail, default as CloudHailIcon, default as LucideCloudHail } from './icons/cloud-hail.js';\nexport { default as CloudLightning, default as CloudLightningIcon, default as LucideCloudLightning } from './icons/cloud-lightning.js';\nexport { default as CloudMoonRain, default as CloudMoonRainIcon, default as LucideCloudMoonRain } from './icons/cloud-moon-rain.js';\nexport { default as CloudMoon, default as CloudMoonIcon, default as LucideCloudMoon } from './icons/cloud-moon.js';\nexport { default as CloudOff, default as CloudOffIcon, default as LucideCloudOff } from './icons/cloud-off.js';\nexport { default as CloudRainWind, default as CloudRainWindIcon, default as LucideCloudRainWind } from './icons/cloud-rain-wind.js';\nexport { default as CloudRain, default as CloudRainIcon, default as LucideCloudRain } from './icons/cloud-rain.js';\nexport { default as CloudSnow, default as CloudSnowIcon, default as LucideCloudSnow } from './icons/cloud-snow.js';\nexport { default as CloudSunRain, default as CloudSunRainIcon, default as LucideCloudSunRain } from './icons/cloud-sun-rain.js';\nexport { default as CloudSun, default as CloudSunIcon, default as LucideCloudSun } from './icons/cloud-sun.js';\nexport { default as Cloud, default as CloudIcon, default as LucideCloud } from './icons/cloud.js';\nexport { default as Cloudy, default as CloudyIcon, default as LucideCloudy } from './icons/cloudy.js';\nexport { default as Clover, default as CloverIcon, default as LucideClover } from './icons/clover.js';\nexport { default as Club, default as ClubIcon, default as LucideClub } from './icons/club.js';\nexport { default as Code, default as CodeIcon, default as LucideCode } from './icons/code.js';\nexport { default as Codepen, default as CodepenIcon, default as LucideCodepen } from './icons/codepen.js';\nexport { default as Codesandbox, default as CodesandboxIcon, default as LucideCodesandbox } from './icons/codesandbox.js';\nexport { default as Coffee, default as CoffeeIcon, default as LucideCoffee } from './icons/coffee.js';\nexport { default as Cog, default as CogIcon, default as LucideCog } from './icons/cog.js';\nexport { default as Coins, default as CoinsIcon, default as LucideCoins } from './icons/coins.js';\nexport { default as Columns4, default as Columns4Icon, default as LucideColumns4 } from './icons/columns-4.js';\nexport { default as Combine, default as CombineIcon, default as LucideCombine } from './icons/combine.js';\nexport { default as Command, default as CommandIcon, default as LucideCommand } from './icons/command.js';\nexport { default as Compass, default as CompassIcon, default as LucideCompass } from './icons/compass.js';\nexport { default as Component, default as ComponentIcon, default as LucideComponent } from './icons/component.js';\nexport { default as Computer, default as ComputerIcon, default as LucideComputer } from './icons/computer.js';\nexport { default as ConciergeBell, default as ConciergeBellIcon, default as LucideConciergeBell } from './icons/concierge-bell.js';\nexport { default as Cone, default as ConeIcon, default as LucideCone } from './icons/cone.js';\nexport { default as Construction, default as ConstructionIcon, default as LucideConstruction } from './icons/construction.js';\nexport { default as Contact, default as ContactIcon, default as LucideContact } from './icons/contact.js';\nexport { default as Container, default as ContainerIcon, default as LucideContainer } from './icons/container.js';\nexport { default as Contrast, default as ContrastIcon, default as LucideContrast } from './icons/contrast.js';\nexport { default as Cookie, default as CookieIcon, default as LucideCookie } from './icons/cookie.js';\nexport { default as CookingPot, default as CookingPotIcon, default as LucideCookingPot } from './icons/cooking-pot.js';\nexport { default as CopyCheck, default as CopyCheckIcon, default as LucideCopyCheck } from './icons/copy-check.js';\nexport { default as CopyMinus, default as CopyMinusIcon, default as LucideCopyMinus } from './icons/copy-minus.js';\nexport { default as CopyPlus, default as CopyPlusIcon, default as LucideCopyPlus } from './icons/copy-plus.js';\nexport { default as CopySlash, default as CopySlashIcon, default as LucideCopySlash } from './icons/copy-slash.js';\nexport { default as CopyX, default as CopyXIcon, default as LucideCopyX } from './icons/copy-x.js';\nexport { default as Copy, default as CopyIcon, default as LucideCopy } from './icons/copy.js';\nexport { default as Copyleft, default as CopyleftIcon, default as LucideCopyleft } from './icons/copyleft.js';\nexport { default as Copyright, default as CopyrightIcon, default as LucideCopyright } from './icons/copyright.js';\nexport { default as CornerDownLeft, default as CornerDownLeftIcon, default as LucideCornerDownLeft } from './icons/corner-down-left.js';\nexport { default as CornerDownRight, default as CornerDownRightIcon, default as LucideCornerDownRight } from './icons/corner-down-right.js';\nexport { default as CornerLeftDown, default as CornerLeftDownIcon, default as LucideCornerLeftDown } from './icons/corner-left-down.js';\nexport { default as CornerLeftUp, default as CornerLeftUpIcon, default as LucideCornerLeftUp } from './icons/corner-left-up.js';\nexport { default as CornerRightDown, default as CornerRightDownIcon, default as LucideCornerRightDown } from './icons/corner-right-down.js';\nexport { default as CornerRightUp, default as CornerRightUpIcon, default as LucideCornerRightUp } from './icons/corner-right-up.js';\nexport { default as CornerUpLeft, default as CornerUpLeftIcon, default as LucideCornerUpLeft } from './icons/corner-up-left.js';\nexport { default as CornerUpRight, default as CornerUpRightIcon, default as LucideCornerUpRight } from './icons/corner-up-right.js';\nexport { default as Cpu, default as CpuIcon, default as LucideCpu } from './icons/cpu.js';\nexport { default as CreativeCommons, default as CreativeCommonsIcon, default as LucideCreativeCommons } from './icons/creative-commons.js';\nexport { default as CreditCard, default as CreditCardIcon, default as LucideCreditCard } from './icons/credit-card.js';\nexport { default as Croissant, default as CroissantIcon, default as LucideCroissant } from './icons/croissant.js';\nexport { default as Crop, default as CropIcon, default as LucideCrop } from './icons/crop.js';\nexport { default as Cross, default as CrossIcon, default as LucideCross } from './icons/cross.js';\nexport { default as Crosshair, default as CrosshairIcon, default as LucideCrosshair } from './icons/crosshair.js';\nexport { default as Crown, default as CrownIcon, default as LucideCrown } from './icons/crown.js';\nexport { default as Cuboid, default as CuboidIcon, default as LucideCuboid } from './icons/cuboid.js';\nexport { default as CupSoda, default as CupSodaIcon, default as LucideCupSoda } from './icons/cup-soda.js';\nexport { default as Currency, default as CurrencyIcon, default as LucideCurrency } from './icons/currency.js';\nexport { default as Cylinder, default as CylinderIcon, default as LucideCylinder } from './icons/cylinder.js';\nexport { default as DatabaseBackup, default as DatabaseBackupIcon, default as LucideDatabaseBackup } from './icons/database-backup.js';\nexport { default as DatabaseZap, default as DatabaseZapIcon, default as LucideDatabaseZap } from './icons/database-zap.js';\nexport { default as Database, default as DatabaseIcon, default as LucideDatabase } from './icons/database.js';\nexport { default as Delete, default as DeleteIcon, default as LucideDelete } from './icons/delete.js';\nexport { default as Dessert, default as DessertIcon, default as LucideDessert } from './icons/dessert.js';\nexport { default as Diameter, default as DiameterIcon, default as LucideDiameter } from './icons/diameter.js';\nexport { default as Diamond, default as DiamondIcon, default as LucideDiamond } from './icons/diamond.js';\nexport { default as Dice1, default as Dice1Icon, default as LucideDice1 } from './icons/dice-1.js';\nexport { default as Dice2, default as Dice2Icon, default as LucideDice2 } from './icons/dice-2.js';\nexport { default as Dice3, default as Dice3Icon, default as LucideDice3 } from './icons/dice-3.js';\nexport { default as Dice4, default as Dice4Icon, default as LucideDice4 } from './icons/dice-4.js';\nexport { default as Dice5, default as Dice5Icon, default as LucideDice5 } from './icons/dice-5.js';\nexport { default as Dice6, default as Dice6Icon, default as LucideDice6 } from './icons/dice-6.js';\nexport { default as Dices, default as DicesIcon, default as LucideDices } from './icons/dices.js';\nexport { default as Diff, default as DiffIcon, default as LucideDiff } from './icons/diff.js';\nexport { default as Disc2, default as Disc2Icon, default as LucideDisc2 } from './icons/disc-2.js';\nexport { default as Disc3, default as Disc3Icon, default as LucideDisc3 } from './icons/disc-3.js';\nexport { default as DiscAlbum, default as DiscAlbumIcon, default as LucideDiscAlbum } from './icons/disc-album.js';\nexport { default as Disc, default as DiscIcon, default as LucideDisc } from './icons/disc.js';\nexport { default as Divide, default as DivideIcon, default as LucideDivide } from './icons/divide.js';\nexport { default as DnaOff, default as DnaOffIcon, default as LucideDnaOff } from './icons/dna-off.js';\nexport { default as Dna, default as DnaIcon, default as LucideDna } from './icons/dna.js';\nexport { default as Dock, default as DockIcon, default as LucideDock } from './icons/dock.js';\nexport { default as Dog, default as DogIcon, default as LucideDog } from './icons/dog.js';\nexport { default as DollarSign, default as DollarSignIcon, default as LucideDollarSign } from './icons/dollar-sign.js';\nexport { default as Donut, default as DonutIcon, default as LucideDonut } from './icons/donut.js';\nexport { default as DoorClosed, default as DoorClosedIcon, default as LucideDoorClosed } from './icons/door-closed.js';\nexport { default as DoorOpen, default as DoorOpenIcon, default as LucideDoorOpen } from './icons/door-open.js';\nexport { default as Dot, default as DotIcon, default as LucideDot } from './icons/dot.js';\nexport { default as Download, default as DownloadIcon, default as LucideDownload } from './icons/download.js';\nexport { default as DraftingCompass, default as DraftingCompassIcon, default as LucideDraftingCompass } from './icons/drafting-compass.js';\nexport { default as Drama, default as DramaIcon, default as LucideDrama } from './icons/drama.js';\nexport { default as Dribbble, default as DribbbleIcon, default as LucideDribbble } from './icons/dribbble.js';\nexport { default as Drill, default as DrillIcon, default as LucideDrill } from './icons/drill.js';\nexport { default as Droplet, default as DropletIcon, default as LucideDroplet } from './icons/droplet.js';\nexport { default as Droplets, default as DropletsIcon, default as LucideDroplets } from './icons/droplets.js';\nexport { default as Drum, default as DrumIcon, default as LucideDrum } from './icons/drum.js';\nexport { default as Drumstick, default as DrumstickIcon, default as LucideDrumstick } from './icons/drumstick.js';\nexport { default as Dumbbell, default as DumbbellIcon, default as LucideDumbbell } from './icons/dumbbell.js';\nexport { default as EarOff, default as EarOffIcon, default as LucideEarOff } from './icons/ear-off.js';\nexport { default as Ear, default as EarIcon, default as LucideEar } from './icons/ear.js';\nexport { default as EarthLock, default as EarthLockIcon, default as LucideEarthLock } from './icons/earth-lock.js';\nexport { default as Eclipse, default as EclipseIcon, default as LucideEclipse } from './icons/eclipse.js';\nexport { default as EggFried, default as EggFriedIcon, default as LucideEggFried } from './icons/egg-fried.js';\nexport { default as EggOff, default as EggOffIcon, default as LucideEggOff } from './icons/egg-off.js';\nexport { default as Egg, default as EggIcon, default as LucideEgg } from './icons/egg.js';\nexport { default as EqualNot, default as EqualNotIcon, default as LucideEqualNot } from './icons/equal-not.js';\nexport { default as Equal, default as EqualIcon, default as LucideEqual } from './icons/equal.js';\nexport { default as Eraser, default as EraserIcon, default as LucideEraser } from './icons/eraser.js';\nexport { default as Euro, default as EuroIcon, default as LucideEuro } from './icons/euro.js';\nexport { default as Expand, default as ExpandIcon, default as LucideExpand } from './icons/expand.js';\nexport { default as ExternalLink, default as ExternalLinkIcon, default as LucideExternalLink } from './icons/external-link.js';\nexport { default as EyeOff, default as EyeOffIcon, default as LucideEyeOff } from './icons/eye-off.js';\nexport { default as Eye, default as EyeIcon, default as LucideEye } from './icons/eye.js';\nexport { default as Facebook, default as FacebookIcon, default as LucideFacebook } from './icons/facebook.js';\nexport { default as Factory, default as FactoryIcon, default as LucideFactory } from './icons/factory.js';\nexport { default as Fan, default as FanIcon, default as LucideFan } from './icons/fan.js';\nexport { default as FastForward, default as FastForwardIcon, default as LucideFastForward } from './icons/fast-forward.js';\nexport { default as Feather, default as FeatherIcon, default as LucideFeather } from './icons/feather.js';\nexport { default as Fence, default as FenceIcon, default as LucideFence } from './icons/fence.js';\nexport { default as FerrisWheel, default as FerrisWheelIcon, default as LucideFerrisWheel } from './icons/ferris-wheel.js';\nexport { default as Figma, default as FigmaIcon, default as LucideFigma } from './icons/figma.js';\nexport { default as FileArchive, default as FileArchiveIcon, default as LucideFileArchive } from './icons/file-archive.js';\nexport { default as FileAudio2, default as FileAudio2Icon, default as LucideFileAudio2 } from './icons/file-audio-2.js';\nexport { default as FileAudio, default as FileAudioIcon, default as LucideFileAudio } from './icons/file-audio.js';\nexport { default as FileBadge2, default as FileBadge2Icon, default as LucideFileBadge2 } from './icons/file-badge-2.js';\nexport { default as FileBadge, default as FileBadgeIcon, default as LucideFileBadge } from './icons/file-badge.js';\nexport { default as FileBarChart2, default as FileBarChart2Icon, default as LucideFileBarChart2 } from './icons/file-bar-chart-2.js';\nexport { default as FileBarChart, default as FileBarChartIcon, default as LucideFileBarChart } from './icons/file-bar-chart.js';\nexport { default as FileBox, default as FileBoxIcon, default as LucideFileBox } from './icons/file-box.js';\nexport { default as FileCheck2, default as FileCheck2Icon, default as LucideFileCheck2 } from './icons/file-check-2.js';\nexport { default as FileCheck, default as FileCheckIcon, default as LucideFileCheck } from './icons/file-check.js';\nexport { default as FileClock, default as FileClockIcon, default as LucideFileClock } from './icons/file-clock.js';\nexport { default as FileCode2, default as FileCode2Icon, default as LucideFileCode2 } from './icons/file-code-2.js';\nexport { default as FileCode, default as FileCodeIcon, default as LucideFileCode } from './icons/file-code.js';\nexport { default as FileDiff, default as FileDiffIcon, default as LucideFileDiff } from './icons/file-diff.js';\nexport { default as FileDigit, default as FileDigitIcon, default as LucideFileDigit } from './icons/file-digit.js';\nexport { default as FileDown, default as FileDownIcon, default as LucideFileDown } from './icons/file-down.js';\nexport { default as FileHeart, default as FileHeartIcon, default as LucideFileHeart } from './icons/file-heart.js';\nexport { default as FileImage, default as FileImageIcon, default as LucideFileImage } from './icons/file-image.js';\nexport { default as FileInput, default as FileInputIcon, default as LucideFileInput } from './icons/file-input.js';\nexport { default as FileJson2, default as FileJson2Icon, default as LucideFileJson2 } from './icons/file-json-2.js';\nexport { default as FileJson, default as FileJsonIcon, default as LucideFileJson } from './icons/file-json.js';\nexport { default as FileKey2, default as FileKey2Icon, default as LucideFileKey2 } from './icons/file-key-2.js';\nexport { default as FileKey, default as FileKeyIcon, default as LucideFileKey } from './icons/file-key.js';\nexport { default as FileLineChart, default as FileLineChartIcon, default as LucideFileLineChart } from './icons/file-line-chart.js';\nexport { default as FileLock2, default as FileLock2Icon, default as LucideFileLock2 } from './icons/file-lock-2.js';\nexport { default as FileLock, default as FileLockIcon, default as LucideFileLock } from './icons/file-lock.js';\nexport { default as FileMinus2, default as FileMinus2Icon, default as LucideFileMinus2 } from './icons/file-minus-2.js';\nexport { default as FileMinus, default as FileMinusIcon, default as LucideFileMinus } from './icons/file-minus.js';\nexport { default as FileMusic, default as FileMusicIcon, default as LucideFileMusic } from './icons/file-music.js';\nexport { default as FileOutput, default as FileOutputIcon, default as LucideFileOutput } from './icons/file-output.js';\nexport { default as FilePieChart, default as FilePieChartIcon, default as LucideFilePieChart } from './icons/file-pie-chart.js';\nexport { default as FilePlus2, default as FilePlus2Icon, default as LucideFilePlus2 } from './icons/file-plus-2.js';\nexport { default as FilePlus, default as FilePlusIcon, default as LucideFilePlus } from './icons/file-plus.js';\nexport { default as FileQuestion, default as FileQuestionIcon, default as LucideFileQuestion } from './icons/file-question.js';\nexport { default as FileScan, default as FileScanIcon, default as LucideFileScan } from './icons/file-scan.js';\nexport { default as FileSearch2, default as FileSearch2Icon, default as LucideFileSearch2 } from './icons/file-search-2.js';\nexport { default as FileSearch, default as FileSearchIcon, default as LucideFileSearch } from './icons/file-search.js';\nexport { default as FileSliders, default as FileSlidersIcon, default as LucideFileSliders } from './icons/file-sliders.js';\nexport { default as FileSpreadsheet, default as FileSpreadsheetIcon, default as LucideFileSpreadsheet } from './icons/file-spreadsheet.js';\nexport { default as FileStack, default as FileStackIcon, default as LucideFileStack } from './icons/file-stack.js';\nexport { default as FileSymlink, default as FileSymlinkIcon, default as LucideFileSymlink } from './icons/file-symlink.js';\nexport { default as FileTerminal, default as FileTerminalIcon, default as LucideFileTerminal } from './icons/file-terminal.js';\nexport { default as FileText, default as FileTextIcon, default as LucideFileText } from './icons/file-text.js';\nexport { default as FileType2, default as FileType2Icon, default as LucideFileType2 } from './icons/file-type-2.js';\nexport { default as FileType, default as FileTypeIcon, default as LucideFileType } from './icons/file-type.js';\nexport { default as FileUp, default as FileUpIcon, default as LucideFileUp } from './icons/file-up.js';\nexport { default as FileVideo2, default as FileVideo2Icon, default as LucideFileVideo2 } from './icons/file-video-2.js';\nexport { default as FileVideo, default as FileVideoIcon, default as LucideFileVideo } from './icons/file-video.js';\nexport { default as FileVolume2, default as FileVolume2Icon, default as LucideFileVolume2 } from './icons/file-volume-2.js';\nexport { default as FileVolume, default as FileVolumeIcon, default as LucideFileVolume } from './icons/file-volume.js';\nexport { default as FileWarning, default as FileWarningIcon, default as LucideFileWarning } from './icons/file-warning.js';\nexport { default as FileX2, default as FileX2Icon, default as LucideFileX2 } from './icons/file-x-2.js';\nexport { default as FileX, default as FileXIcon, default as LucideFileX } from './icons/file-x.js';\nexport { default as File, default as FileIcon, default as LucideFile } from './icons/file.js';\nexport { default as Files, default as FilesIcon, default as LucideFiles } from './icons/files.js';\nexport { default as Film, default as FilmIcon, default as LucideFilm } from './icons/film.js';\nexport { default as FilterX, default as FilterXIcon, default as LucideFilterX } from './icons/filter-x.js';\nexport { default as Filter, default as FilterIcon, default as LucideFilter } from './icons/filter.js';\nexport { default as Fingerprint, default as FingerprintIcon, default as LucideFingerprint } from './icons/fingerprint.js';\nexport { default as FireExtinguisher, default as FireExtinguisherIcon, default as LucideFireExtinguisher } from './icons/fire-extinguisher.js';\nexport { default as FishOff, default as FishOffIcon, default as LucideFishOff } from './icons/fish-off.js';\nexport { default as FishSymbol, default as FishSymbolIcon, default as LucideFishSymbol } from './icons/fish-symbol.js';\nexport { default as Fish, default as FishIcon, default as LucideFish } from './icons/fish.js';\nexport { default as FlagOff, default as FlagOffIcon, default as LucideFlagOff } from './icons/flag-off.js';\nexport { default as FlagTriangleLeft, default as FlagTriangleLeftIcon, default as LucideFlagTriangleLeft } from './icons/flag-triangle-left.js';\nexport { default as FlagTriangleRight, default as FlagTriangleRightIcon, default as LucideFlagTriangleRight } from './icons/flag-triangle-right.js';\nexport { default as Flag, default as FlagIcon, default as LucideFlag } from './icons/flag.js';\nexport { default as FlameKindling, default as FlameKindlingIcon, default as LucideFlameKindling } from './icons/flame-kindling.js';\nexport { default as Flame, default as FlameIcon, default as LucideFlame } from './icons/flame.js';\nexport { default as FlashlightOff, default as FlashlightOffIcon, default as LucideFlashlightOff } from './icons/flashlight-off.js';\nexport { default as Flashlight, default as FlashlightIcon, default as LucideFlashlight } from './icons/flashlight.js';\nexport { default as FlaskConicalOff, default as FlaskConicalOffIcon, default as LucideFlaskConicalOff } from './icons/flask-conical-off.js';\nexport { default as FlaskConical, default as FlaskConicalIcon, default as LucideFlaskConical } from './icons/flask-conical.js';\nexport { default as FlaskRound, default as FlaskRoundIcon, default as LucideFlaskRound } from './icons/flask-round.js';\nexport { default as FlipHorizontal2, default as FlipHorizontal2Icon, default as LucideFlipHorizontal2 } from './icons/flip-horizontal-2.js';\nexport { default as FlipHorizontal, default as FlipHorizontalIcon, default as LucideFlipHorizontal } from './icons/flip-horizontal.js';\nexport { default as FlipVertical2, default as FlipVertical2Icon, default as LucideFlipVertical2 } from './icons/flip-vertical-2.js';\nexport { default as FlipVertical, default as FlipVerticalIcon, default as LucideFlipVertical } from './icons/flip-vertical.js';\nexport { default as Flower2, default as Flower2Icon, default as LucideFlower2 } from './icons/flower-2.js';\nexport { default as Flower, default as FlowerIcon, default as LucideFlower } from './icons/flower.js';\nexport { default as Focus, default as FocusIcon, default as LucideFocus } from './icons/focus.js';\nexport { default as FoldHorizontal, default as FoldHorizontalIcon, default as LucideFoldHorizontal } from './icons/fold-horizontal.js';\nexport { default as FoldVertical, default as FoldVerticalIcon, default as LucideFoldVertical } from './icons/fold-vertical.js';\nexport { default as FolderArchive, default as FolderArchiveIcon, default as LucideFolderArchive } from './icons/folder-archive.js';\nexport { default as FolderCheck, default as FolderCheckIcon, default as LucideFolderCheck } from './icons/folder-check.js';\nexport { default as FolderClock, default as FolderClockIcon, default as LucideFolderClock } from './icons/folder-clock.js';\nexport { default as FolderClosed, default as FolderClosedIcon, default as LucideFolderClosed } from './icons/folder-closed.js';\nexport { default as FolderDot, default as FolderDotIcon, default as LucideFolderDot } from './icons/folder-dot.js';\nexport { default as FolderDown, default as FolderDownIcon, default as LucideFolderDown } from './icons/folder-down.js';\nexport { default as FolderGit2, default as FolderGit2Icon, default as LucideFolderGit2 } from './icons/folder-git-2.js';\nexport { default as FolderGit, default as FolderGitIcon, default as LucideFolderGit } from './icons/folder-git.js';\nexport { default as FolderHeart, default as FolderHeartIcon, default as LucideFolderHeart } from './icons/folder-heart.js';\nexport { default as FolderInput, default as FolderInputIcon, default as LucideFolderInput } from './icons/folder-input.js';\nexport { default as FolderKanban, default as FolderKanbanIcon, default as LucideFolderKanban } from './icons/folder-kanban.js';\nexport { default as FolderKey, default as FolderKeyIcon, default as LucideFolderKey } from './icons/folder-key.js';\nexport { default as FolderLock, default as FolderLockIcon, default as LucideFolderLock } from './icons/folder-lock.js';\nexport { default as FolderMinus, default as FolderMinusIcon, default as LucideFolderMinus } from './icons/folder-minus.js';\nexport { default as FolderOpenDot, default as FolderOpenDotIcon, default as LucideFolderOpenDot } from './icons/folder-open-dot.js';\nexport { default as FolderOpen, default as FolderOpenIcon, default as LucideFolderOpen } from './icons/folder-open.js';\nexport { default as FolderOutput, default as FolderOutputIcon, default as LucideFolderOutput } from './icons/folder-output.js';\nexport { default as FolderPlus, default as FolderPlusIcon, default as LucideFolderPlus } from './icons/folder-plus.js';\nexport { default as FolderRoot, default as FolderRootIcon, default as LucideFolderRoot } from './icons/folder-root.js';\nexport { default as FolderSearch2, default as FolderSearch2Icon, default as LucideFolderSearch2 } from './icons/folder-search-2.js';\nexport { default as FolderSearch, default as FolderSearchIcon, default as LucideFolderSearch } from './icons/folder-search.js';\nexport { default as FolderSymlink, default as FolderSymlinkIcon, default as LucideFolderSymlink } from './icons/folder-symlink.js';\nexport { default as FolderSync, default as FolderSyncIcon, default as LucideFolderSync } from './icons/folder-sync.js';\nexport { default as FolderTree, default as FolderTreeIcon, default as LucideFolderTree } from './icons/folder-tree.js';\nexport { default as FolderUp, default as FolderUpIcon, default as LucideFolderUp } from './icons/folder-up.js';\nexport { default as FolderX, default as FolderXIcon, default as LucideFolderX } from './icons/folder-x.js';\nexport { default as Folder, default as FolderIcon, default as LucideFolder } from './icons/folder.js';\nexport { default as Folders, default as FoldersIcon, default as LucideFolders } from './icons/folders.js';\nexport { default as Footprints, default as FootprintsIcon, default as LucideFootprints } from './icons/footprints.js';\nexport { default as Forklift, default as ForkliftIcon, default as LucideForklift } from './icons/forklift.js';\nexport { default as Forward, default as ForwardIcon, default as LucideForward } from './icons/forward.js';\nexport { default as Frame, default as FrameIcon, default as LucideFrame } from './icons/frame.js';\nexport { default as Framer, default as FramerIcon, default as LucideFramer } from './icons/framer.js';\nexport { default as Frown, default as FrownIcon, default as LucideFrown } from './icons/frown.js';\nexport { default as Fuel, default as FuelIcon, default as LucideFuel } from './icons/fuel.js';\nexport { default as Fullscreen, default as FullscreenIcon, default as LucideFullscreen } from './icons/fullscreen.js';\nexport { default as GalleryHorizontalEnd, default as GalleryHorizontalEndIcon, default as LucideGalleryHorizontalEnd } from './icons/gallery-horizontal-end.js';\nexport { default as GalleryHorizontal, default as GalleryHorizontalIcon, default as LucideGalleryHorizontal } from './icons/gallery-horizontal.js';\nexport { default as GalleryThumbnails, default as GalleryThumbnailsIcon, default as LucideGalleryThumbnails } from './icons/gallery-thumbnails.js';\nexport { default as GalleryVerticalEnd, default as GalleryVerticalEndIcon, default as LucideGalleryVerticalEnd } from './icons/gallery-vertical-end.js';\nexport { default as GalleryVertical, default as GalleryVerticalIcon, default as LucideGalleryVertical } from './icons/gallery-vertical.js';\nexport { default as Gamepad2, default as Gamepad2Icon, default as LucideGamepad2 } from './icons/gamepad-2.js';\nexport { default as Gamepad, default as GamepadIcon, default as LucideGamepad } from './icons/gamepad.js';\nexport { default as GanttChart, default as GanttChartIcon, default as LucideGanttChart } from './icons/gantt-chart.js';\nexport { default as Gauge, default as GaugeIcon, default as LucideGauge } from './icons/gauge.js';\nexport { default as Gavel, default as GavelIcon, default as LucideGavel } from './icons/gavel.js';\nexport { default as Gem, default as GemIcon, default as LucideGem } from './icons/gem.js';\nexport { default as Ghost, default as GhostIcon, default as LucideGhost } from './icons/ghost.js';\nexport { default as Gift, default as GiftIcon, default as LucideGift } from './icons/gift.js';\nexport { default as GitBranchPlus, default as GitBranchPlusIcon, default as LucideGitBranchPlus } from './icons/git-branch-plus.js';\nexport { default as GitBranch, default as GitBranchIcon, default as LucideGitBranch } from './icons/git-branch.js';\nexport { default as GitCommitVertical, default as GitCommitVerticalIcon, default as LucideGitCommitVertical } from './icons/git-commit-vertical.js';\nexport { default as GitCompareArrows, default as GitCompareArrowsIcon, default as LucideGitCompareArrows } from './icons/git-compare-arrows.js';\nexport { default as GitCompare, default as GitCompareIcon, default as LucideGitCompare } from './icons/git-compare.js';\nexport { default as GitFork, default as GitForkIcon, default as LucideGitFork } from './icons/git-fork.js';\nexport { default as GitGraph, default as GitGraphIcon, default as LucideGitGraph } from './icons/git-graph.js';\nexport { default as GitMerge, default as GitMergeIcon, default as LucideGitMerge } from './icons/git-merge.js';\nexport { default as GitPullRequestArrow, default as GitPullRequestArrowIcon, default as LucideGitPullRequestArrow } from './icons/git-pull-request-arrow.js';\nexport { default as GitPullRequestClosed, default as GitPullRequestClosedIcon, default as LucideGitPullRequestClosed } from './icons/git-pull-request-closed.js';\nexport { default as GitPullRequestCreateArrow, default as GitPullRequestCreateArrowIcon, default as LucideGitPullRequestCreateArrow } from './icons/git-pull-request-create-arrow.js';\nexport { default as GitPullRequestCreate, default as GitPullRequestCreateIcon, default as LucideGitPullRequestCreate } from './icons/git-pull-request-create.js';\nexport { default as GitPullRequestDraft, default as GitPullRequestDraftIcon, default as LucideGitPullRequestDraft } from './icons/git-pull-request-draft.js';\nexport { default as GitPullRequest, default as GitPullRequestIcon, default as LucideGitPullRequest } from './icons/git-pull-request.js';\nexport { default as Github, default as GithubIcon, default as LucideGithub } from './icons/github.js';\nexport { default as Gitlab, default as GitlabIcon, default as LucideGitlab } from './icons/gitlab.js';\nexport { default as GlassWater, default as GlassWaterIcon, default as LucideGlassWater } from './icons/glass-water.js';\nexport { default as Glasses, default as GlassesIcon, default as LucideGlasses } from './icons/glasses.js';\nexport { default as GlobeLock, default as GlobeLockIcon, default as LucideGlobeLock } from './icons/globe-lock.js';\nexport { default as Globe, default as GlobeIcon, default as LucideGlobe } from './icons/globe.js';\nexport { default as Goal, default as GoalIcon, default as LucideGoal } from './icons/goal.js';\nexport { default as Grab, default as GrabIcon, default as LucideGrab } from './icons/grab.js';\nexport { default as GraduationCap, default as GraduationCapIcon, default as LucideGraduationCap } from './icons/graduation-cap.js';\nexport { default as Grape, default as GrapeIcon, default as LucideGrape } from './icons/grape.js';\nexport { default as GripHorizontal, default as GripHorizontalIcon, default as LucideGripHorizontal } from './icons/grip-horizontal.js';\nexport { default as GripVertical, default as GripVerticalIcon, default as LucideGripVertical } from './icons/grip-vertical.js';\nexport { default as Grip, default as GripIcon, default as LucideGrip } from './icons/grip.js';\nexport { default as Group, default as GroupIcon, default as LucideGroup } from './icons/group.js';\nexport { default as Guitar, default as GuitarIcon, default as LucideGuitar } from './icons/guitar.js';\nexport { default as Ham, default as HamIcon, default as LucideHam } from './icons/ham.js';\nexport { default as Hammer, default as HammerIcon, default as LucideHammer } from './icons/hammer.js';\nexport { default as HandCoins, default as HandCoinsIcon, default as LucideHandCoins } from './icons/hand-coins.js';\nexport { default as HandHeart, default as HandHeartIcon, default as LucideHandHeart } from './icons/hand-heart.js';\nexport { default as HandMetal, default as HandMetalIcon, default as LucideHandMetal } from './icons/hand-metal.js';\nexport { default as HandPlatter, default as HandPlatterIcon, default as LucideHandPlatter } from './icons/hand-platter.js';\nexport { default as Hand, default as HandIcon, default as LucideHand } from './icons/hand.js';\nexport { default as Handshake, default as HandshakeIcon, default as LucideHandshake } from './icons/handshake.js';\nexport { default as HardDriveDownload, default as HardDriveDownloadIcon, default as LucideHardDriveDownload } from './icons/hard-drive-download.js';\nexport { default as HardDriveUpload, default as HardDriveUploadIcon, default as LucideHardDriveUpload } from './icons/hard-drive-upload.js';\nexport { default as HardDrive, default as HardDriveIcon, default as LucideHardDrive } from './icons/hard-drive.js';\nexport { default as HardHat, default as HardHatIcon, default as LucideHardHat } from './icons/hard-hat.js';\nexport { default as Hash, default as HashIcon, default as LucideHash } from './icons/hash.js';\nexport { default as Haze, default as HazeIcon, default as LucideHaze } from './icons/haze.js';\nexport { default as HdmiPort, default as HdmiPortIcon, default as LucideHdmiPort } from './icons/hdmi-port.js';\nexport { default as Heading1, default as Heading1Icon, default as LucideHeading1 } from './icons/heading-1.js';\nexport { default as Heading2, default as Heading2Icon, default as LucideHeading2 } from './icons/heading-2.js';\nexport { default as Heading3, default as Heading3Icon, default as LucideHeading3 } from './icons/heading-3.js';\nexport { default as Heading4, default as Heading4Icon, default as LucideHeading4 } from './icons/heading-4.js';\nexport { default as Heading5, default as Heading5Icon, default as LucideHeading5 } from './icons/heading-5.js';\nexport { default as Heading6, default as Heading6Icon, default as LucideHeading6 } from './icons/heading-6.js';\nexport { default as Heading, default as HeadingIcon, default as LucideHeading } from './icons/heading.js';\nexport { default as Headphones, default as HeadphonesIcon, default as LucideHeadphones } from './icons/headphones.js';\nexport { default as Headset, default as HeadsetIcon, default as LucideHeadset } from './icons/headset.js';\nexport { default as HeartCrack, default as HeartCrackIcon, default as LucideHeartCrack } from './icons/heart-crack.js';\nexport { default as HeartHandshake, default as HeartHandshakeIcon, default as LucideHeartHandshake } from './icons/heart-handshake.js';\nexport { default as HeartOff, default as HeartOffIcon, default as LucideHeartOff } from './icons/heart-off.js';\nexport { default as HeartPulse, default as HeartPulseIcon, default as LucideHeartPulse } from './icons/heart-pulse.js';\nexport { default as Heart, default as HeartIcon, default as LucideHeart } from './icons/heart.js';\nexport { default as Heater, default as HeaterIcon, default as LucideHeater } from './icons/heater.js';\nexport { default as Hexagon, default as HexagonIcon, default as LucideHexagon } from './icons/hexagon.js';\nexport { default as Highlighter, default as HighlighterIcon, default as LucideHighlighter } from './icons/highlighter.js';\nexport { default as History, default as HistoryIcon, default as LucideHistory } from './icons/history.js';\nexport { default as Home, default as HomeIcon, default as LucideHome } from './icons/home.js';\nexport { default as HopOff, default as HopOffIcon, default as LucideHopOff } from './icons/hop-off.js';\nexport { default as Hop, default as HopIcon, default as LucideHop } from './icons/hop.js';\nexport { default as Hospital, default as HospitalIcon, default as LucideHospital } from './icons/hospital.js';\nexport { default as Hotel, default as HotelIcon, default as LucideHotel } from './icons/hotel.js';\nexport { default as Hourglass, default as HourglassIcon, default as LucideHourglass } from './icons/hourglass.js';\nexport { default as ImageDown, default as ImageDownIcon, default as LucideImageDown } from './icons/image-down.js';\nexport { default as ImageMinus, default as ImageMinusIcon, default as LucideImageMinus } from './icons/image-minus.js';\nexport { default as ImageOff, default as ImageOffIcon, default as LucideImageOff } from './icons/image-off.js';\nexport { default as ImagePlus, default as ImagePlusIcon, default as LucideImagePlus } from './icons/image-plus.js';\nexport { default as ImageUp, default as ImageUpIcon, default as LucideImageUp } from './icons/image-up.js';\nexport { default as Image, default as ImageIcon, default as LucideImage } from './icons/image.js';\nexport { default as Images, default as ImagesIcon, default as LucideImages } from './icons/images.js';\nexport { default as Import, default as ImportIcon, default as LucideImport } from './icons/import.js';\nexport { default as Inbox, default as InboxIcon, default as LucideInbox } from './icons/inbox.js';\nexport { default as IndianRupee, default as IndianRupeeIcon, default as LucideIndianRupee } from './icons/indian-rupee.js';\nexport { default as Infinity, default as InfinityIcon, default as LucideInfinity } from './icons/infinity.js';\nexport { default as Info, default as InfoIcon, default as LucideInfo } from './icons/info.js';\nexport { default as InspectionPanel, default as InspectionPanelIcon, default as LucideInspectionPanel } from './icons/inspection-panel.js';\nexport { default as Instagram, default as InstagramIcon, default as LucideInstagram } from './icons/instagram.js';\nexport { default as Italic, default as ItalicIcon, default as LucideItalic } from './icons/italic.js';\nexport { default as IterationCcw, default as IterationCcwIcon, default as LucideIterationCcw } from './icons/iteration-ccw.js';\nexport { default as IterationCw, default as IterationCwIcon, default as LucideIterationCw } from './icons/iteration-cw.js';\nexport { default as JapaneseYen, default as JapaneseYenIcon, default as LucideJapaneseYen } from './icons/japanese-yen.js';\nexport { default as Joystick, default as JoystickIcon, default as LucideJoystick } from './icons/joystick.js';\nexport { default as Kanban, default as KanbanIcon, default as LucideKanban } from './icons/kanban.js';\nexport { default as KeyRound, default as KeyRoundIcon, default as LucideKeyRound } from './icons/key-round.js';\nexport { default as KeySquare, default as KeySquareIcon, default as LucideKeySquare } from './icons/key-square.js';\nexport { default as Key, default as KeyIcon, default as LucideKey } from './icons/key.js';\nexport { default as KeyboardMusic, default as KeyboardMusicIcon, default as LucideKeyboardMusic } from './icons/keyboard-music.js';\nexport { default as Keyboard, default as KeyboardIcon, default as LucideKeyboard } from './icons/keyboard.js';\nexport { default as LampCeiling, default as LampCeilingIcon, default as LucideLampCeiling } from './icons/lamp-ceiling.js';\nexport { default as LampDesk, default as LampDeskIcon, default as LucideLampDesk } from './icons/lamp-desk.js';\nexport { default as LampFloor, default as LampFloorIcon, default as LucideLampFloor } from './icons/lamp-floor.js';\nexport { default as LampWallDown, default as LampWallDownIcon, default as LucideLampWallDown } from './icons/lamp-wall-down.js';\nexport { default as LampWallUp, default as LampWallUpIcon, default as LucideLampWallUp } from './icons/lamp-wall-up.js';\nexport { default as Lamp, default as LampIcon, default as LucideLamp } from './icons/lamp.js';\nexport { default as LandPlot, default as LandPlotIcon, default as LucideLandPlot } from './icons/land-plot.js';\nexport { default as Landmark, default as LandmarkIcon, default as LucideLandmark } from './icons/landmark.js';\nexport { default as Languages, default as LanguagesIcon, default as LucideLanguages } from './icons/languages.js';\nexport { default as Laptop, default as LaptopIcon, default as LucideLaptop } from './icons/laptop.js';\nexport { default as LassoSelect, default as LassoSelectIcon, default as LucideLassoSelect } from './icons/lasso-select.js';\nexport { default as Lasso, default as LassoIcon, default as LucideLasso } from './icons/lasso.js';\nexport { default as Laugh, default as LaughIcon, default as LucideLaugh } from './icons/laugh.js';\nexport { default as Layers2, default as Layers2Icon, default as LucideLayers2 } from './icons/layers-2.js';\nexport { default as Layers3, default as Layers3Icon, default as LucideLayers3 } from './icons/layers-3.js';\nexport { default as Layers, default as LayersIcon, default as LucideLayers } from './icons/layers.js';\nexport { default as LayoutDashboard, default as LayoutDashboardIcon, default as LucideLayoutDashboard } from './icons/layout-dashboard.js';\nexport { default as LayoutGrid, default as LayoutGridIcon, default as LucideLayoutGrid } from './icons/layout-grid.js';\nexport { default as LayoutList, default as LayoutListIcon, default as LucideLayoutList } from './icons/layout-list.js';\nexport { default as LayoutPanelLeft, default as LayoutPanelLeftIcon, default as LucideLayoutPanelLeft } from './icons/layout-panel-left.js';\nexport { default as LayoutPanelTop, default as LayoutPanelTopIcon, default as LucideLayoutPanelTop } from './icons/layout-panel-top.js';\nexport { default as LayoutTemplate, default as LayoutTemplateIcon, default as LucideLayoutTemplate } from './icons/layout-template.js';\nexport { default as Leaf, default as LeafIcon, default as LucideLeaf } from './icons/leaf.js';\nexport { default as LeafyGreen, default as LeafyGreenIcon, default as LucideLeafyGreen } from './icons/leafy-green.js';\nexport { default as LibraryBig, default as LibraryBigIcon, default as LucideLibraryBig } from './icons/library-big.js';\nexport { default as Library, default as LibraryIcon, default as LucideLibrary } from './icons/library.js';\nexport { default as LifeBuoy, default as LifeBuoyIcon, default as LucideLifeBuoy } from './icons/life-buoy.js';\nexport { default as Ligature, default as LigatureIcon, default as LucideLigature } from './icons/ligature.js';\nexport { default as LightbulbOff, default as LightbulbOffIcon, default as LucideLightbulbOff } from './icons/lightbulb-off.js';\nexport { default as Lightbulb, default as LightbulbIcon, default as LucideLightbulb } from './icons/lightbulb.js';\nexport { default as LineChart, default as LineChartIcon, default as LucideLineChart } from './icons/line-chart.js';\nexport { default as Link2Off, default as Link2OffIcon, default as LucideLink2Off } from './icons/link-2-off.js';\nexport { default as Link2, default as Link2Icon, default as LucideLink2 } from './icons/link-2.js';\nexport { default as Link, default as LinkIcon, default as LucideLink } from './icons/link.js';\nexport { default as Linkedin, default as LinkedinIcon, default as LucideLinkedin } from './icons/linkedin.js';\nexport { default as ListChecks, default as ListChecksIcon, default as LucideListChecks } from './icons/list-checks.js';\nexport { default as ListCollapse, default as ListCollapseIcon, default as LucideListCollapse } from './icons/list-collapse.js';\nexport { default as ListEnd, default as ListEndIcon, default as LucideListEnd } from './icons/list-end.js';\nexport { default as ListFilter, default as ListFilterIcon, default as LucideListFilter } from './icons/list-filter.js';\nexport { default as ListMinus, default as ListMinusIcon, default as LucideListMinus } from './icons/list-minus.js';\nexport { default as ListMusic, default as ListMusicIcon, default as LucideListMusic } from './icons/list-music.js';\nexport { default as ListOrdered, default as ListOrderedIcon, default as LucideListOrdered } from './icons/list-ordered.js';\nexport { default as ListPlus, default as ListPlusIcon, default as LucideListPlus } from './icons/list-plus.js';\nexport { default as ListRestart, default as ListRestartIcon, default as LucideListRestart } from './icons/list-restart.js';\nexport { default as ListStart, default as ListStartIcon, default as LucideListStart } from './icons/list-start.js';\nexport { default as ListTodo, default as ListTodoIcon, default as LucideListTodo } from './icons/list-todo.js';\nexport { default as ListTree, default as ListTreeIcon, default as LucideListTree } from './icons/list-tree.js';\nexport { default as ListVideo, default as ListVideoIcon, default as LucideListVideo } from './icons/list-video.js';\nexport { default as ListX, default as ListXIcon, default as LucideListX } from './icons/list-x.js';\nexport { default as List, default as ListIcon, default as LucideList } from './icons/list.js';\nexport { default as Loader, default as LoaderIcon, default as LucideLoader } from './icons/loader.js';\nexport { default as LocateFixed, default as LocateFixedIcon, default as LucideLocateFixed } from './icons/locate-fixed.js';\nexport { default as LocateOff, default as LocateOffIcon, default as LucideLocateOff } from './icons/locate-off.js';\nexport { default as Locate, default as LocateIcon, default as LucideLocate } from './icons/locate.js';\nexport { default as LockKeyhole, default as LockKeyholeIcon, default as LucideLockKeyhole } from './icons/lock-keyhole.js';\nexport { default as Lock, default as LockIcon, default as LucideLock } from './icons/lock.js';\nexport { default as LogIn, default as LogInIcon, default as LucideLogIn } from './icons/log-in.js';\nexport { default as LogOut, default as LogOutIcon, default as LucideLogOut } from './icons/log-out.js';\nexport { default as Lollipop, default as LollipopIcon, default as LucideLollipop } from './icons/lollipop.js';\nexport { default as LucideLuggage, default as Luggage, default as LuggageIcon } from './icons/luggage.js';\nexport { default as LucideMagnet, default as Magnet, default as MagnetIcon } from './icons/magnet.js';\nexport { default as LucideMailCheck, default as MailCheck, default as MailCheckIcon } from './icons/mail-check.js';\nexport { default as LucideMailMinus, default as MailMinus, default as MailMinusIcon } from './icons/mail-minus.js';\nexport { default as LucideMailOpen, default as MailOpen, default as MailOpenIcon } from './icons/mail-open.js';\nexport { default as LucideMailPlus, default as MailPlus, default as MailPlusIcon } from './icons/mail-plus.js';\nexport { default as LucideMailQuestion, default as MailQuestion, default as MailQuestionIcon } from './icons/mail-question.js';\nexport { default as LucideMailSearch, default as MailSearch, default as MailSearchIcon } from './icons/mail-search.js';\nexport { default as LucideMailWarning, default as MailWarning, default as MailWarningIcon } from './icons/mail-warning.js';\nexport { default as LucideMailX, default as MailX, default as MailXIcon } from './icons/mail-x.js';\nexport { default as LucideMail, default as Mail, default as MailIcon } from './icons/mail.js';\nexport { default as LucideMailbox, default as Mailbox, default as MailboxIcon } from './icons/mailbox.js';\nexport { default as LucideMails, default as Mails, default as MailsIcon } from './icons/mails.js';\nexport { default as LucideMapPinOff, default as MapPinOff, default as MapPinOffIcon } from './icons/map-pin-off.js';\nexport { default as LucideMapPin, default as MapPin, default as MapPinIcon } from './icons/map-pin.js';\nexport { default as LucideMapPinned, default as MapPinned, default as MapPinnedIcon } from './icons/map-pinned.js';\nexport { default as LucideMap, default as Map, default as MapIcon } from './icons/map.js';\nexport { default as LucideMartini, default as Martini, default as MartiniIcon } from './icons/martini.js';\nexport { default as LucideMaximize2, default as Maximize2, default as Maximize2Icon } from './icons/maximize-2.js';\nexport { default as LucideMaximize, default as Maximize, default as MaximizeIcon } from './icons/maximize.js';\nexport { default as LucideMedal, default as Medal, default as MedalIcon } from './icons/medal.js';\nexport { default as LucideMegaphoneOff, default as MegaphoneOff, default as MegaphoneOffIcon } from './icons/megaphone-off.js';\nexport { default as LucideMegaphone, default as Megaphone, default as MegaphoneIcon } from './icons/megaphone.js';\nexport { default as LucideMeh, default as Meh, default as MehIcon } from './icons/meh.js';\nexport { default as LucideMemoryStick, default as MemoryStick, default as MemoryStickIcon } from './icons/memory-stick.js';\nexport { default as LucideMenu, default as Menu, default as MenuIcon } from './icons/menu.js';\nexport { default as LucideMerge, default as Merge, default as MergeIcon } from './icons/merge.js';\nexport { default as LucideMessageCircleCode, default as MessageCircleCode, default as MessageCircleCodeIcon } from './icons/message-circle-code.js';\nexport { default as LucideMessageCircleDashed, default as MessageCircleDashed, default as MessageCircleDashedIcon } from './icons/message-circle-dashed.js';\nexport { default as LucideMessageCircleHeart, default as MessageCircleHeart, default as MessageCircleHeartIcon } from './icons/message-circle-heart.js';\nexport { default as LucideMessageCircleMore, default as MessageCircleMore, default as MessageCircleMoreIcon } from './icons/message-circle-more.js';\nexport { default as LucideMessageCircleOff, default as MessageCircleOff, default as MessageCircleOffIcon } from './icons/message-circle-off.js';\nexport { default as LucideMessageCirclePlus, default as MessageCirclePlus, default as MessageCirclePlusIcon } from './icons/message-circle-plus.js';\nexport { default as LucideMessageCircleQuestion, default as MessageCircleQuestion, default as MessageCircleQuestionIcon } from './icons/message-circle-question.js';\nexport { default as LucideMessageCircleReply, default as MessageCircleReply, default as MessageCircleReplyIcon } from './icons/message-circle-reply.js';\nexport { default as LucideMessageCircleWarning, default as MessageCircleWarning, default as MessageCircleWarningIcon } from './icons/message-circle-warning.js';\nexport { default as LucideMessageCircleX, default as MessageCircleX, default as MessageCircleXIcon } from './icons/message-circle-x.js';\nexport { default as LucideMessageCircle, default as MessageCircle, default as MessageCircleIcon } from './icons/message-circle.js';\nexport { default as LucideMessageSquareCode, default as MessageSquareCode, default as MessageSquareCodeIcon } from './icons/message-square-code.js';\nexport { default as LucideMessageSquareDashed, default as MessageSquareDashed, default as MessageSquareDashedIcon } from './icons/message-square-dashed.js';\nexport { default as LucideMessageSquareDiff, default as MessageSquareDiff, default as MessageSquareDiffIcon } from './icons/message-square-diff.js';\nexport { default as LucideMessageSquareDot, default as MessageSquareDot, default as MessageSquareDotIcon } from './icons/message-square-dot.js';\nexport { default as LucideMessageSquareHeart, default as MessageSquareHeart, default as MessageSquareHeartIcon } from './icons/message-square-heart.js';\nexport { default as LucideMessageSquareMore, default as MessageSquareMore, default as MessageSquareMoreIcon } from './icons/message-square-more.js';\nexport { default as LucideMessageSquareOff, default as MessageSquareOff, default as MessageSquareOffIcon } from './icons/message-square-off.js';\nexport { default as LucideMessageSquarePlus, default as MessageSquarePlus, default as MessageSquarePlusIcon } from './icons/message-square-plus.js';\nexport { default as LucideMessageSquareQuote, default as MessageSquareQuote, default as MessageSquareQuoteIcon } from './icons/message-square-quote.js';\nexport { default as LucideMessageSquareReply, default as MessageSquareReply, default as MessageSquareReplyIcon } from './icons/message-square-reply.js';\nexport { default as LucideMessageSquareShare, default as MessageSquareShare, default as MessageSquareShareIcon } from './icons/message-square-share.js';\nexport { default as LucideMessageSquareText, default as MessageSquareText, default as MessageSquareTextIcon } from './icons/message-square-text.js';\nexport { default as LucideMessageSquareWarning, default as MessageSquareWarning, default as MessageSquareWarningIcon } from './icons/message-square-warning.js';\nexport { default as LucideMessageSquareX, default as MessageSquareX, default as MessageSquareXIcon } from './icons/message-square-x.js';\nexport { default as LucideMessageSquare, default as MessageSquare, default as MessageSquareIcon } from './icons/message-square.js';\nexport { default as LucideMessagesSquare, default as MessagesSquare, default as MessagesSquareIcon } from './icons/messages-square.js';\nexport { default as LucideMicOff, default as MicOff, default as MicOffIcon } from './icons/mic-off.js';\nexport { default as LucideMic, default as Mic, default as MicIcon } from './icons/mic.js';\nexport { default as LucideMicroscope, default as Microscope, default as MicroscopeIcon } from './icons/microscope.js';\nexport { default as LucideMicrowave, default as Microwave, default as MicrowaveIcon } from './icons/microwave.js';\nexport { default as LucideMilestone, default as Milestone, default as MilestoneIcon } from './icons/milestone.js';\nexport { default as LucideMilkOff, default as MilkOff, default as MilkOffIcon } from './icons/milk-off.js';\nexport { default as LucideMilk, default as Milk, default as MilkIcon } from './icons/milk.js';\nexport { default as LucideMinimize2, default as Minimize2, default as Minimize2Icon } from './icons/minimize-2.js';\nexport { default as LucideMinimize, default as Minimize, default as MinimizeIcon } from './icons/minimize.js';\nexport { default as LucideMinus, default as Minus, default as MinusIcon } from './icons/minus.js';\nexport { default as LucideMonitorCheck, default as MonitorCheck, default as MonitorCheckIcon } from './icons/monitor-check.js';\nexport { default as LucideMonitorDot, default as MonitorDot, default as MonitorDotIcon } from './icons/monitor-dot.js';\nexport { default as LucideMonitorDown, default as MonitorDown, default as MonitorDownIcon } from './icons/monitor-down.js';\nexport { default as LucideMonitorOff, default as MonitorOff, default as MonitorOffIcon } from './icons/monitor-off.js';\nexport { default as LucideMonitorPause, default as MonitorPause, default as MonitorPauseIcon } from './icons/monitor-pause.js';\nexport { default as LucideMonitorPlay, default as MonitorPlay, default as MonitorPlayIcon } from './icons/monitor-play.js';\nexport { default as LucideMonitorSmartphone, default as MonitorSmartphone, default as MonitorSmartphoneIcon } from './icons/monitor-smartphone.js';\nexport { default as LucideMonitorSpeaker, default as MonitorSpeaker, default as MonitorSpeakerIcon } from './icons/monitor-speaker.js';\nexport { default as LucideMonitorStop, default as MonitorStop, default as MonitorStopIcon } from './icons/monitor-stop.js';\nexport { default as LucideMonitorUp, default as MonitorUp, default as MonitorUpIcon } from './icons/monitor-up.js';\nexport { default as LucideMonitorX, default as MonitorX, default as MonitorXIcon } from './icons/monitor-x.js';\nexport { default as LucideMonitor, default as Monitor, default as MonitorIcon } from './icons/monitor.js';\nexport { default as LucideMoonStar, default as MoonStar, default as MoonStarIcon } from './icons/moon-star.js';\nexport { default as LucideMoon, default as Moon, default as MoonIcon } from './icons/moon.js';\nexport { default as LucideMountainSnow, default as MountainSnow, default as MountainSnowIcon } from './icons/mountain-snow.js';\nexport { default as LucideMountain, default as Mountain, default as MountainIcon } from './icons/mountain.js';\nexport { default as LucideMouseOff, default as MouseOff, default as MouseOffIcon } from './icons/mouse-off.js';\nexport { default as LucideMousePointer2, default as MousePointer2, default as MousePointer2Icon } from './icons/mouse-pointer-2.js';\nexport { default as LucideMousePointerClick, default as MousePointerClick, default as MousePointerClickIcon } from './icons/mouse-pointer-click.js';\nexport { default as LucideMousePointer, default as MousePointer, default as MousePointerIcon } from './icons/mouse-pointer.js';\nexport { default as LucideMouse, default as Mouse, default as MouseIcon } from './icons/mouse.js';\nexport { default as LucideMoveDiagonal2, default as MoveDiagonal2, default as MoveDiagonal2Icon } from './icons/move-diagonal-2.js';\nexport { default as LucideMoveDiagonal, default as MoveDiagonal, default as MoveDiagonalIcon } from './icons/move-diagonal.js';\nexport { default as LucideMoveDownLeft, default as MoveDownLeft, default as MoveDownLeftIcon } from './icons/move-down-left.js';\nexport { default as LucideMoveDownRight, default as MoveDownRight, default as MoveDownRightIcon } from './icons/move-down-right.js';\nexport { default as LucideMoveDown, default as MoveDown, default as MoveDownIcon } from './icons/move-down.js';\nexport { default as LucideMoveHorizontal, default as MoveHorizontal, default as MoveHorizontalIcon } from './icons/move-horizontal.js';\nexport { default as LucideMoveLeft, default as MoveLeft, default as MoveLeftIcon } from './icons/move-left.js';\nexport { default as LucideMoveRight, default as MoveRight, default as MoveRightIcon } from './icons/move-right.js';\nexport { default as LucideMoveUpLeft, default as MoveUpLeft, default as MoveUpLeftIcon } from './icons/move-up-left.js';\nexport { default as LucideMoveUpRight, default as MoveUpRight, default as MoveUpRightIcon } from './icons/move-up-right.js';\nexport { default as LucideMoveUp, default as MoveUp, default as MoveUpIcon } from './icons/move-up.js';\nexport { default as LucideMoveVertical, default as MoveVertical, default as MoveVerticalIcon } from './icons/move-vertical.js';\nexport { default as LucideMove, default as Move, default as MoveIcon } from './icons/move.js';\nexport { default as LucideMusic2, default as Music2, default as Music2Icon } from './icons/music-2.js';\nexport { default as LucideMusic3, default as Music3, default as Music3Icon } from './icons/music-3.js';\nexport { default as LucideMusic4, default as Music4, default as Music4Icon } from './icons/music-4.js';\nexport { default as LucideMusic, default as Music, default as MusicIcon } from './icons/music.js';\nexport { default as LucideNavigation2Off, default as Navigation2Off, default as Navigation2OffIcon } from './icons/navigation-2-off.js';\nexport { default as LucideNavigation2, default as Navigation2, default as Navigation2Icon } from './icons/navigation-2.js';\nexport { default as LucideNavigationOff, default as NavigationOff, default as NavigationOffIcon } from './icons/navigation-off.js';\nexport { default as LucideNavigation, default as Navigation, default as NavigationIcon } from './icons/navigation.js';\nexport { default as LucideNetwork, default as Network, default as NetworkIcon } from './icons/network.js';\nexport { default as LucideNewspaper, default as Newspaper, default as NewspaperIcon } from './icons/newspaper.js';\nexport { default as LucideNfc, default as Nfc, default as NfcIcon } from './icons/nfc.js';\nexport { default as LucideNotebookPen, default as NotebookPen, default as NotebookPenIcon } from './icons/notebook-pen.js';\nexport { default as LucideNotebookTabs, default as NotebookTabs, default as NotebookTabsIcon } from './icons/notebook-tabs.js';\nexport { default as LucideNotebookText, default as NotebookText, default as NotebookTextIcon } from './icons/notebook-text.js';\nexport { default as LucideNotebook, default as Notebook, default as NotebookIcon } from './icons/notebook.js';\nexport { default as LucideNotepadTextDashed, default as NotepadTextDashed, default as NotepadTextDashedIcon } from './icons/notepad-text-dashed.js';\nexport { default as LucideNotepadText, default as NotepadText, default as NotepadTextIcon } from './icons/notepad-text.js';\nexport { default as LucideNutOff, default as NutOff, default as NutOffIcon } from './icons/nut-off.js';\nexport { default as LucideNut, default as Nut, default as NutIcon } from './icons/nut.js';\nexport { default as LucideOctagon, default as Octagon, default as OctagonIcon } from './icons/octagon.js';\nexport { default as LucideOption, default as Option, default as OptionIcon } from './icons/option.js';\nexport { default as LucideOrbit, default as Orbit, default as OrbitIcon } from './icons/orbit.js';\nexport { default as LucidePackage2, default as Package2, default as Package2Icon } from './icons/package-2.js';\nexport { default as LucidePackageCheck, default as PackageCheck, default as PackageCheckIcon } from './icons/package-check.js';\nexport { default as LucidePackageMinus, default as PackageMinus, default as PackageMinusIcon } from './icons/package-minus.js';\nexport { default as LucidePackageOpen, default as PackageOpen, default as PackageOpenIcon } from './icons/package-open.js';\nexport { default as LucidePackagePlus, default as PackagePlus, default as PackagePlusIcon } from './icons/package-plus.js';\nexport { default as LucidePackageSearch, default as PackageSearch, default as PackageSearchIcon } from './icons/package-search.js';\nexport { default as LucidePackageX, default as PackageX, default as PackageXIcon } from './icons/package-x.js';\nexport { default as LucidePackage, default as Package, default as PackageIcon } from './icons/package.js';\nexport { default as LucidePaintBucket, default as PaintBucket, default as PaintBucketIcon } from './icons/paint-bucket.js';\nexport { default as LucidePaintRoller, default as PaintRoller, default as PaintRollerIcon } from './icons/paint-roller.js';\nexport { default as LucidePaintbrush2, default as Paintbrush2, default as Paintbrush2Icon } from './icons/paintbrush-2.js';\nexport { default as LucidePaintbrush, default as Paintbrush, default as PaintbrushIcon } from './icons/paintbrush.js';\nexport { default as LucidePalette, default as Palette, default as PaletteIcon } from './icons/palette.js';\nexport { default as LucidePanelBottomClose, default as PanelBottomClose, default as PanelBottomCloseIcon } from './icons/panel-bottom-close.js';\nexport { default as LucidePanelBottomOpen, default as PanelBottomOpen, default as PanelBottomOpenIcon } from './icons/panel-bottom-open.js';\nexport { default as LucidePanelBottom, default as PanelBottom, default as PanelBottomIcon } from './icons/panel-bottom.js';\nexport { default as LucidePanelRightClose, default as PanelRightClose, default as PanelRightCloseIcon } from './icons/panel-right-close.js';\nexport { default as LucidePanelRightOpen, default as PanelRightOpen, default as PanelRightOpenIcon } from './icons/panel-right-open.js';\nexport { default as LucidePanelRight, default as PanelRight, default as PanelRightIcon } from './icons/panel-right.js';\nexport { default as LucidePanelTopClose, default as PanelTopClose, default as PanelTopCloseIcon } from './icons/panel-top-close.js';\nexport { default as LucidePanelTopOpen, default as PanelTopOpen, default as PanelTopOpenIcon } from './icons/panel-top-open.js';\nexport { default as LucidePanelTop, default as PanelTop, default as PanelTopIcon } from './icons/panel-top.js';\nexport { default as LucidePanelsLeftBottom, default as PanelsLeftBottom, default as PanelsLeftBottomIcon } from './icons/panels-left-bottom.js';\nexport { default as LucidePanelsRightBottom, default as PanelsRightBottom, default as PanelsRightBottomIcon } from './icons/panels-right-bottom.js';\nexport { default as LucidePaperclip, default as Paperclip, default as PaperclipIcon } from './icons/paperclip.js';\nexport { default as LucideParentheses, default as Parentheses, default as ParenthesesIcon } from './icons/parentheses.js';\nexport { default as LucideParkingMeter, default as ParkingMeter, default as ParkingMeterIcon } from './icons/parking-meter.js';\nexport { default as LucidePartyPopper, default as PartyPopper, default as PartyPopperIcon } from './icons/party-popper.js';\nexport { default as LucidePause, default as Pause, default as PauseIcon } from './icons/pause.js';\nexport { default as LucidePawPrint, default as PawPrint, default as PawPrintIcon } from './icons/paw-print.js';\nexport { default as LucidePcCase, default as PcCase, default as PcCaseIcon } from './icons/pc-case.js';\nexport { default as LucidePenTool, default as PenTool, default as PenToolIcon } from './icons/pen-tool.js';\nexport { default as LucidePencilLine, default as PencilLine, default as PencilLineIcon } from './icons/pencil-line.js';\nexport { default as LucidePencilRuler, default as PencilRuler, default as PencilRulerIcon } from './icons/pencil-ruler.js';\nexport { default as LucidePencil, default as Pencil, default as PencilIcon } from './icons/pencil.js';\nexport { default as LucidePentagon, default as Pentagon, default as PentagonIcon } from './icons/pentagon.js';\nexport { default as LucidePercent, default as Percent, default as PercentIcon } from './icons/percent.js';\nexport { default as LucidePersonStanding, default as PersonStanding, default as PersonStandingIcon } from './icons/person-standing.js';\nexport { default as LucidePhoneCall, default as PhoneCall, default as PhoneCallIcon } from './icons/phone-call.js';\nexport { default as LucidePhoneForwarded, default as PhoneForwarded, default as PhoneForwardedIcon } from './icons/phone-forwarded.js';\nexport { default as LucidePhoneIncoming, default as PhoneIncoming, default as PhoneIncomingIcon } from './icons/phone-incoming.js';\nexport { default as LucidePhoneMissed, default as PhoneMissed, default as PhoneMissedIcon } from './icons/phone-missed.js';\nexport { default as LucidePhoneOff, default as PhoneOff, default as PhoneOffIcon } from './icons/phone-off.js';\nexport { default as LucidePhoneOutgoing, default as PhoneOutgoing, default as PhoneOutgoingIcon } from './icons/phone-outgoing.js';\nexport { default as LucidePhone, default as Phone, default as PhoneIcon } from './icons/phone.js';\nexport { default as LucidePi, default as Pi, default as PiIcon } from './icons/pi.js';\nexport { default as LucidePiano, default as Piano, default as PianoIcon } from './icons/piano.js';\nexport { default as LucidePickaxe, default as Pickaxe, default as PickaxeIcon } from './icons/pickaxe.js';\nexport { default as LucidePictureInPicture2, default as PictureInPicture2, default as PictureInPicture2Icon } from './icons/picture-in-picture-2.js';\nexport { default as LucidePictureInPicture, default as PictureInPicture, default as PictureInPictureIcon } from './icons/picture-in-picture.js';\nexport { default as LucidePieChart, default as PieChart, default as PieChartIcon } from './icons/pie-chart.js';\nexport { default as LucidePiggyBank, default as PiggyBank, default as PiggyBankIcon } from './icons/piggy-bank.js';\nexport { default as LucidePilcrow, default as Pilcrow, default as PilcrowIcon } from './icons/pilcrow.js';\nexport { default as LucidePill, default as Pill, default as PillIcon } from './icons/pill.js';\nexport { default as LucidePinOff, default as PinOff, default as PinOffIcon } from './icons/pin-off.js';\nexport { default as LucidePin, default as Pin, default as PinIcon } from './icons/pin.js';\nexport { default as LucidePipette, default as Pipette, default as PipetteIcon } from './icons/pipette.js';\nexport { default as LucidePizza, default as Pizza, default as PizzaIcon } from './icons/pizza.js';\nexport { default as LucidePlaneLanding, default as PlaneLanding, default as PlaneLandingIcon } from './icons/plane-landing.js';\nexport { default as LucidePlaneTakeoff, default as PlaneTakeoff, default as PlaneTakeoffIcon } from './icons/plane-takeoff.js';\nexport { default as LucidePlane, default as Plane, default as PlaneIcon } from './icons/plane.js';\nexport { default as LucidePlay, default as Play, default as PlayIcon } from './icons/play.js';\nexport { default as LucidePlug2, default as Plug2, default as Plug2Icon } from './icons/plug-2.js';\nexport { default as LucidePlugZap2, default as PlugZap2, default as PlugZap2Icon } from './icons/plug-zap-2.js';\nexport { default as LucidePlugZap, default as PlugZap, default as PlugZapIcon } from './icons/plug-zap.js';\nexport { default as LucidePlug, default as Plug, default as PlugIcon } from './icons/plug.js';\nexport { default as LucidePlus, default as Plus, default as PlusIcon } from './icons/plus.js';\nexport { default as LucidePocketKnife, default as PocketKnife, default as PocketKnifeIcon } from './icons/pocket-knife.js';\nexport { default as LucidePocket, default as Pocket, default as PocketIcon } from './icons/pocket.js';\nexport { default as LucidePodcast, default as Podcast, default as PodcastIcon } from './icons/podcast.js';\nexport { default as LucidePointerOff, default as PointerOff, default as PointerOffIcon } from './icons/pointer-off.js';\nexport { default as LucidePointer, default as Pointer, default as PointerIcon } from './icons/pointer.js';\nexport { default as LucidePopcorn, default as Popcorn, default as PopcornIcon } from './icons/popcorn.js';\nexport { default as LucidePopsicle, default as Popsicle, default as PopsicleIcon } from './icons/popsicle.js';\nexport { default as LucidePoundSterling, default as PoundSterling, default as PoundSterlingIcon } from './icons/pound-sterling.js';\nexport { default as LucidePowerOff, default as PowerOff, default as PowerOffIcon } from './icons/power-off.js';\nexport { default as LucidePower, default as Power, default as PowerIcon } from './icons/power.js';\nexport { default as LucidePresentation, default as Presentation, default as PresentationIcon } from './icons/presentation.js';\nexport { default as LucidePrinter, default as Printer, default as PrinterIcon } from './icons/printer.js';\nexport { default as LucideProjector, default as Projector, default as ProjectorIcon } from './icons/projector.js';\nexport { default as LucideProportions, default as Proportions, default as ProportionsIcon } from './icons/proportions.js';\nexport { default as LucidePuzzle, default as Puzzle, default as PuzzleIcon } from './icons/puzzle.js';\nexport { default as LucidePyramid, default as Pyramid, default as PyramidIcon } from './icons/pyramid.js';\nexport { default as LucideQrCode, default as QrCode, default as QrCodeIcon } from './icons/qr-code.js';\nexport { default as LucideQuote, default as Quote, default as QuoteIcon } from './icons/quote.js';\nexport { default as LucideRabbit, default as Rabbit, default as RabbitIcon } from './icons/rabbit.js';\nexport { default as LucideRadar, default as Radar, default as RadarIcon } from './icons/radar.js';\nexport { default as LucideRadiation, default as Radiation, default as RadiationIcon } from './icons/radiation.js';\nexport { default as LucideRadical, default as Radical, default as RadicalIcon } from './icons/radical.js';\nexport { default as LucideRadioReceiver, default as RadioReceiver, default as RadioReceiverIcon } from './icons/radio-receiver.js';\nexport { default as LucideRadioTower, default as RadioTower, default as RadioTowerIcon } from './icons/radio-tower.js';\nexport { default as LucideRadio, default as Radio, default as RadioIcon } from './icons/radio.js';\nexport { default as LucideRadius, default as Radius, default as RadiusIcon } from './icons/radius.js';\nexport { default as LucideRailSymbol, default as RailSymbol, default as RailSymbolIcon } from './icons/rail-symbol.js';\nexport { default as LucideRainbow, default as Rainbow, default as RainbowIcon } from './icons/rainbow.js';\nexport { default as LucideRat, default as Rat, default as RatIcon } from './icons/rat.js';\nexport { default as LucideRatio, default as Ratio, default as RatioIcon } from './icons/ratio.js';\nexport { default as LucideReceiptCent, default as ReceiptCent, default as ReceiptCentIcon } from './icons/receipt-cent.js';\nexport { default as LucideReceiptEuro, default as ReceiptEuro, default as ReceiptEuroIcon } from './icons/receipt-euro.js';\nexport { default as LucideReceiptIndianRupee, default as ReceiptIndianRupee, default as ReceiptIndianRupeeIcon } from './icons/receipt-indian-rupee.js';\nexport { default as LucideReceiptJapaneseYen, default as ReceiptJapaneseYen, default as ReceiptJapaneseYenIcon } from './icons/receipt-japanese-yen.js';\nexport { default as LucideReceiptPoundSterling, default as ReceiptPoundSterling, default as ReceiptPoundSterlingIcon } from './icons/receipt-pound-sterling.js';\nexport { default as LucideReceiptRussianRuble, default as ReceiptRussianRuble, default as ReceiptRussianRubleIcon } from './icons/receipt-russian-ruble.js';\nexport { default as LucideReceiptSwissFranc, default as ReceiptSwissFranc, default as ReceiptSwissFrancIcon } from './icons/receipt-swiss-franc.js';\nexport { default as LucideReceiptText, default as ReceiptText, default as ReceiptTextIcon } from './icons/receipt-text.js';\nexport { default as LucideReceipt, default as Receipt, default as ReceiptIcon } from './icons/receipt.js';\nexport { default as LucideRectangleHorizontal, default as RectangleHorizontal, default as RectangleHorizontalIcon } from './icons/rectangle-horizontal.js';\nexport { default as LucideRectangleVertical, default as RectangleVertical, default as RectangleVerticalIcon } from './icons/rectangle-vertical.js';\nexport { default as LucideRecycle, default as Recycle, default as RecycleIcon } from './icons/recycle.js';\nexport { default as LucideRedo2, default as Redo2, default as Redo2Icon } from './icons/redo-2.js';\nexport { default as LucideRedoDot, default as RedoDot, default as RedoDotIcon } from './icons/redo-dot.js';\nexport { default as LucideRedo, default as Redo, default as RedoIcon } from './icons/redo.js';\nexport { default as LucideRefreshCcwDot, default as RefreshCcwDot, default as RefreshCcwDotIcon } from './icons/refresh-ccw-dot.js';\nexport { default as LucideRefreshCcw, default as RefreshCcw, default as RefreshCcwIcon } from './icons/refresh-ccw.js';\nexport { default as LucideRefreshCwOff, default as RefreshCwOff, default as RefreshCwOffIcon } from './icons/refresh-cw-off.js';\nexport { default as LucideRefreshCw, default as RefreshCw, default as RefreshCwIcon } from './icons/refresh-cw.js';\nexport { default as LucideRefrigerator, default as Refrigerator, default as RefrigeratorIcon } from './icons/refrigerator.js';\nexport { default as LucideRegex, default as Regex, default as RegexIcon } from './icons/regex.js';\nexport { default as LucideRemoveFormatting, default as RemoveFormatting, default as RemoveFormattingIcon } from './icons/remove-formatting.js';\nexport { default as LucideRepeat1, default as Repeat1, default as Repeat1Icon } from './icons/repeat-1.js';\nexport { default as LucideRepeat2, default as Repeat2, default as Repeat2Icon } from './icons/repeat-2.js';\nexport { default as LucideRepeat, default as Repeat, default as RepeatIcon } from './icons/repeat.js';\nexport { default as LucideReplaceAll, default as ReplaceAll, default as ReplaceAllIcon } from './icons/replace-all.js';\nexport { default as LucideReplace, default as Replace, default as ReplaceIcon } from './icons/replace.js';\nexport { default as LucideReplyAll, default as ReplyAll, default as ReplyAllIcon } from './icons/reply-all.js';\nexport { default as LucideReply, default as Reply, default as ReplyIcon } from './icons/reply.js';\nexport { default as LucideRewind, default as Rewind, default as RewindIcon } from './icons/rewind.js';\nexport { default as LucideRibbon, default as Ribbon, default as RibbonIcon } from './icons/ribbon.js';\nexport { default as LucideRocket, default as Rocket, default as RocketIcon } from './icons/rocket.js';\nexport { default as LucideRockingChair, default as RockingChair, default as RockingChairIcon } from './icons/rocking-chair.js';\nexport { default as LucideRollerCoaster, default as RollerCoaster, default as RollerCoasterIcon } from './icons/roller-coaster.js';\nexport { default as LucideRotateCcwSquare, default as RotateCcwSquare, default as RotateCcwSquareIcon } from './icons/rotate-ccw-square.js';\nexport { default as LucideRotateCcw, default as RotateCcw, default as RotateCcwIcon } from './icons/rotate-ccw.js';\nexport { default as LucideRotateCwSquare, default as RotateCwSquare, default as RotateCwSquareIcon } from './icons/rotate-cw-square.js';\nexport { default as LucideRotateCw, default as RotateCw, default as RotateCwIcon } from './icons/rotate-cw.js';\nexport { default as LucideRouteOff, default as RouteOff, default as RouteOffIcon } from './icons/route-off.js';\nexport { default as LucideRoute, default as Route, default as RouteIcon } from './icons/route.js';\nexport { default as LucideRouter, default as Router, default as RouterIcon } from './icons/router.js';\nexport { default as LucideRows4, default as Rows4, default as Rows4Icon } from './icons/rows-4.js';\nexport { default as LucideRss, default as Rss, default as RssIcon } from './icons/rss.js';\nexport { default as LucideRuler, default as Ruler, default as RulerIcon } from './icons/ruler.js';\nexport { default as LucideRussianRuble, default as RussianRuble, default as RussianRubleIcon } from './icons/russian-ruble.js';\nexport { default as LucideSailboat, default as Sailboat, default as SailboatIcon } from './icons/sailboat.js';\nexport { default as LucideSalad, default as Salad, default as SaladIcon } from './icons/salad.js';\nexport { default as LucideSandwich, default as Sandwich, default as SandwichIcon } from './icons/sandwich.js';\nexport { default as LucideSatelliteDish, default as SatelliteDish, default as SatelliteDishIcon } from './icons/satellite-dish.js';\nexport { default as LucideSatellite, default as Satellite, default as SatelliteIcon } from './icons/satellite.js';\nexport { default as LucideSaveAll, default as SaveAll, default as SaveAllIcon } from './icons/save-all.js';\nexport { default as LucideSave, default as Save, default as SaveIcon } from './icons/save.js';\nexport { default as LucideScale, default as Scale, default as ScaleIcon } from './icons/scale.js';\nexport { default as LucideScaling, default as Scaling, default as ScalingIcon } from './icons/scaling.js';\nexport { default as LucideScanBarcode, default as ScanBarcode, default as ScanBarcodeIcon } from './icons/scan-barcode.js';\nexport { default as LucideScanEye, default as ScanEye, default as ScanEyeIcon } from './icons/scan-eye.js';\nexport { default as LucideScanFace, default as ScanFace, default as ScanFaceIcon } from './icons/scan-face.js';\nexport { default as LucideScanLine, default as ScanLine, default as ScanLineIcon } from './icons/scan-line.js';\nexport { default as LucideScanSearch, default as ScanSearch, default as ScanSearchIcon } from './icons/scan-search.js';\nexport { default as LucideScanText, default as ScanText, default as ScanTextIcon } from './icons/scan-text.js';\nexport { default as LucideScan, default as Scan, default as ScanIcon } from './icons/scan.js';\nexport { default as LucideScatterChart, default as ScatterChart, default as ScatterChartIcon } from './icons/scatter-chart.js';\nexport { default as LucideSchool, default as School, default as SchoolIcon } from './icons/school.js';\nexport { default as LucideScissorsLineDashed, default as ScissorsLineDashed, default as ScissorsLineDashedIcon } from './icons/scissors-line-dashed.js';\nexport { default as LucideScissors, default as Scissors, default as ScissorsIcon } from './icons/scissors.js';\nexport { default as LucideScreenShareOff, default as ScreenShareOff, default as ScreenShareOffIcon } from './icons/screen-share-off.js';\nexport { default as LucideScreenShare, default as ScreenShare, default as ScreenShareIcon } from './icons/screen-share.js';\nexport { default as LucideScrollText, default as ScrollText, default as ScrollTextIcon } from './icons/scroll-text.js';\nexport { default as LucideScroll, default as Scroll, default as ScrollIcon } from './icons/scroll.js';\nexport { default as LucideSearchCheck, default as SearchCheck, default as SearchCheckIcon } from './icons/search-check.js';\nexport { default as LucideSearchCode, default as SearchCode, default as SearchCodeIcon } from './icons/search-code.js';\nexport { default as LucideSearchSlash, default as SearchSlash, default as SearchSlashIcon } from './icons/search-slash.js';\nexport { default as LucideSearchX, default as SearchX, default as SearchXIcon } from './icons/search-x.js';\nexport { default as LucideSearch, default as Search, default as SearchIcon } from './icons/search.js';\nexport { default as LucideSendToBack, default as SendToBack, default as SendToBackIcon } from './icons/send-to-back.js';\nexport { default as LucideSend, default as Send, default as SendIcon } from './icons/send.js';\nexport { default as LucideSeparatorHorizontal, default as SeparatorHorizontal, default as SeparatorHorizontalIcon } from './icons/separator-horizontal.js';\nexport { default as LucideSeparatorVertical, default as SeparatorVertical, default as SeparatorVerticalIcon } from './icons/separator-vertical.js';\nexport { default as LucideServerCog, default as ServerCog, default as ServerCogIcon } from './icons/server-cog.js';\nexport { default as LucideServerCrash, default as ServerCrash, default as ServerCrashIcon } from './icons/server-crash.js';\nexport { default as LucideServerOff, default as ServerOff, default as ServerOffIcon } from './icons/server-off.js';\nexport { default as LucideServer, default as Server, default as ServerIcon } from './icons/server.js';\nexport { default as LucideSettings2, default as Settings2, default as Settings2Icon } from './icons/settings-2.js';\nexport { default as LucideSettings, default as Settings, default as SettingsIcon } from './icons/settings.js';\nexport { default as LucideShapes, default as Shapes, default as ShapesIcon } from './icons/shapes.js';\nexport { default as LucideShare2, default as Share2, default as Share2Icon } from './icons/share-2.js';\nexport { default as LucideShare, default as Share, default as ShareIcon } from './icons/share.js';\nexport { default as LucideSheet, default as Sheet, default as SheetIcon } from './icons/sheet.js';\nexport { default as LucideShell, default as Shell, default as ShellIcon } from './icons/shell.js';\nexport { default as LucideShieldAlert, default as ShieldAlert, default as ShieldAlertIcon } from './icons/shield-alert.js';\nexport { default as LucideShieldBan, default as ShieldBan, default as ShieldBanIcon } from './icons/shield-ban.js';\nexport { default as LucideShieldCheck, default as ShieldCheck, default as ShieldCheckIcon } from './icons/shield-check.js';\nexport { default as LucideShieldEllipsis, default as ShieldEllipsis, default as ShieldEllipsisIcon } from './icons/shield-ellipsis.js';\nexport { default as LucideShieldHalf, default as ShieldHalf, default as ShieldHalfIcon } from './icons/shield-half.js';\nexport { default as LucideShieldMinus, default as ShieldMinus, default as ShieldMinusIcon } from './icons/shield-minus.js';\nexport { default as LucideShieldOff, default as ShieldOff, default as ShieldOffIcon } from './icons/shield-off.js';\nexport { default as LucideShieldPlus, default as ShieldPlus, default as ShieldPlusIcon } from './icons/shield-plus.js';\nexport { default as LucideShieldQuestion, default as ShieldQuestion, default as ShieldQuestionIcon } from './icons/shield-question.js';\nexport { default as LucideShield, default as Shield, default as ShieldIcon } from './icons/shield.js';\nexport { default as LucideShipWheel, default as ShipWheel, default as ShipWheelIcon } from './icons/ship-wheel.js';\nexport { default as LucideShip, default as Ship, default as ShipIcon } from './icons/ship.js';\nexport { default as LucideShirt, default as Shirt, default as ShirtIcon } from './icons/shirt.js';\nexport { default as LucideShoppingBag, default as ShoppingBag, default as ShoppingBagIcon } from './icons/shopping-bag.js';\nexport { default as LucideShoppingBasket, default as ShoppingBasket, default as ShoppingBasketIcon } from './icons/shopping-basket.js';\nexport { default as LucideShoppingCart, default as ShoppingCart, default as ShoppingCartIcon } from './icons/shopping-cart.js';\nexport { default as LucideShovel, default as Shovel, default as ShovelIcon } from './icons/shovel.js';\nexport { default as LucideShowerHead, default as ShowerHead, default as ShowerHeadIcon } from './icons/shower-head.js';\nexport { default as LucideShrink, default as Shrink, default as ShrinkIcon } from './icons/shrink.js';\nexport { default as LucideShrub, default as Shrub, default as ShrubIcon } from './icons/shrub.js';\nexport { default as LucideShuffle, default as Shuffle, default as ShuffleIcon } from './icons/shuffle.js';\nexport { default as LucideSigma, default as Sigma, default as SigmaIcon } from './icons/sigma.js';\nexport { default as LucideSignalHigh, default as SignalHigh, default as SignalHighIcon } from './icons/signal-high.js';\nexport { default as LucideSignalLow, default as SignalLow, default as SignalLowIcon } from './icons/signal-low.js';\nexport { default as LucideSignalMedium, default as SignalMedium, default as SignalMediumIcon } from './icons/signal-medium.js';\nexport { default as LucideSignalZero, default as SignalZero, default as SignalZeroIcon } from './icons/signal-zero.js';\nexport { default as LucideSignal, default as Signal, default as SignalIcon } from './icons/signal.js';\nexport { default as LucideSignpostBig, default as SignpostBig, default as SignpostBigIcon } from './icons/signpost-big.js';\nexport { default as LucideSignpost, default as Signpost, default as SignpostIcon } from './icons/signpost.js';\nexport { default as LucideSiren, default as Siren, default as SirenIcon } from './icons/siren.js';\nexport { default as LucideSkipBack, default as SkipBack, default as SkipBackIcon } from './icons/skip-back.js';\nexport { default as LucideSkipForward, default as SkipForward, default as SkipForwardIcon } from './icons/skip-forward.js';\nexport { default as LucideSkull, default as Skull, default as SkullIcon } from './icons/skull.js';\nexport { default as LucideSlack, default as Slack, default as SlackIcon } from './icons/slack.js';\nexport { default as LucideSlash, default as Slash, default as SlashIcon } from './icons/slash.js';\nexport { default as LucideSlice, default as Slice, default as SliceIcon } from './icons/slice.js';\nexport { default as LucideSlidersHorizontal, default as SlidersHorizontal, default as SlidersHorizontalIcon } from './icons/sliders-horizontal.js';\nexport { default as LucideSmartphoneCharging, default as SmartphoneCharging, default as SmartphoneChargingIcon } from './icons/smartphone-charging.js';\nexport { default as LucideSmartphoneNfc, default as SmartphoneNfc, default as SmartphoneNfcIcon } from './icons/smartphone-nfc.js';\nexport { default as LucideSmartphone, default as Smartphone, default as SmartphoneIcon } from './icons/smartphone.js';\nexport { default as LucideSmilePlus, default as SmilePlus, default as SmilePlusIcon } from './icons/smile-plus.js';\nexport { default as LucideSmile, default as Smile, default as SmileIcon } from './icons/smile.js';\nexport { default as LucideSnail, default as Snail, default as SnailIcon } from './icons/snail.js';\nexport { default as LucideSnowflake, default as Snowflake, default as SnowflakeIcon } from './icons/snowflake.js';\nexport { default as LucideSofa, default as Sofa, default as SofaIcon } from './icons/sofa.js';\nexport { default as LucideSoup, default as Soup, default as SoupIcon } from './icons/soup.js';\nexport { default as LucideSpace, default as Space, default as SpaceIcon } from './icons/space.js';\nexport { default as LucideSpade, default as Spade, default as SpadeIcon } from './icons/spade.js';\nexport { default as LucideSparkle, default as Sparkle, default as SparkleIcon } from './icons/sparkle.js';\nexport { default as LucideSpeaker, default as Speaker, default as SpeakerIcon } from './icons/speaker.js';\nexport { default as LucideSpeech, default as Speech, default as SpeechIcon } from './icons/speech.js';\nexport { default as LucideSpellCheck2, default as SpellCheck2, default as SpellCheck2Icon } from './icons/spell-check-2.js';\nexport { default as LucideSpellCheck, default as SpellCheck, default as SpellCheckIcon } from './icons/spell-check.js';\nexport { default as LucideSpline, default as Spline, default as SplineIcon } from './icons/spline.js';\nexport { default as LucideSplit, default as Split, default as SplitIcon } from './icons/split.js';\nexport { default as LucideSprayCan, default as SprayCan, default as SprayCanIcon } from './icons/spray-can.js';\nexport { default as LucideSprout, default as Sprout, default as SproutIcon } from './icons/sprout.js';\nexport { default as LucideSquareDashedBottomCode, default as SquareDashedBottomCode, default as SquareDashedBottomCodeIcon } from './icons/square-dashed-bottom-code.js';\nexport { default as LucideSquareDashedBottom, default as SquareDashedBottom, default as SquareDashedBottomIcon } from './icons/square-dashed-bottom.js';\nexport { default as LucideSquareRadical, default as SquareRadical, default as SquareRadicalIcon } from './icons/square-radical.js';\nexport { default as LucideSquareStack, default as SquareStack, default as SquareStackIcon } from './icons/square-stack.js';\nexport { default as LucideSquare, default as Square, default as SquareIcon } from './icons/square.js';\nexport { default as LucideSquircle, default as Squircle, default as SquircleIcon } from './icons/squircle.js';\nexport { default as LucideSquirrel, default as Squirrel, default as SquirrelIcon } from './icons/squirrel.js';\nexport { default as LucideStamp, default as Stamp, default as StampIcon } from './icons/stamp.js';\nexport { default as LucideStarHalf, default as StarHalf, default as StarHalfIcon } from './icons/star-half.js';\nexport { default as LucideStarOff, default as StarOff, default as StarOffIcon } from './icons/star-off.js';\nexport { default as LucideStar, default as Star, default as StarIcon } from './icons/star.js';\nexport { default as LucideStepBack, default as StepBack, default as StepBackIcon } from './icons/step-back.js';\nexport { default as LucideStepForward, default as StepForward, default as StepForwardIcon } from './icons/step-forward.js';\nexport { default as LucideStethoscope, default as Stethoscope, default as StethoscopeIcon } from './icons/stethoscope.js';\nexport { default as LucideSticker, default as Sticker, default as StickerIcon } from './icons/sticker.js';\nexport { default as LucideStickyNote, default as StickyNote, default as StickyNoteIcon } from './icons/sticky-note.js';\nexport { default as LucideStore, default as Store, default as StoreIcon } from './icons/store.js';\nexport { default as LucideStretchHorizontal, default as StretchHorizontal, default as StretchHorizontalIcon } from './icons/stretch-horizontal.js';\nexport { default as LucideStretchVertical, default as StretchVertical, default as StretchVerticalIcon } from './icons/stretch-vertical.js';\nexport { default as LucideStrikethrough, default as Strikethrough, default as StrikethroughIcon } from './icons/strikethrough.js';\nexport { default as LucideSubscript, default as Subscript, default as SubscriptIcon } from './icons/subscript.js';\nexport { default as LucideSunDim, default as SunDim, default as SunDimIcon } from './icons/sun-dim.js';\nexport { default as LucideSunMedium, default as SunMedium, default as SunMediumIcon } from './icons/sun-medium.js';\nexport { default as LucideSunMoon, default as SunMoon, default as SunMoonIcon } from './icons/sun-moon.js';\nexport { default as LucideSunSnow, default as SunSnow, default as SunSnowIcon } from './icons/sun-snow.js';\nexport { default as LucideSun, default as Sun, default as SunIcon } from './icons/sun.js';\nexport { default as LucideSunrise, default as Sunrise, default as SunriseIcon } from './icons/sunrise.js';\nexport { default as LucideSunset, default as Sunset, default as SunsetIcon } from './icons/sunset.js';\nexport { default as LucideSuperscript, default as Superscript, default as SuperscriptIcon } from './icons/superscript.js';\nexport { default as LucideSwatchBook, default as SwatchBook, default as SwatchBookIcon } from './icons/swatch-book.js';\nexport { default as LucideSwissFranc, default as SwissFranc, default as SwissFrancIcon } from './icons/swiss-franc.js';\nexport { default as LucideSwitchCamera, default as SwitchCamera, default as SwitchCameraIcon } from './icons/switch-camera.js';\nexport { default as LucideSword, default as Sword, default as SwordIcon } from './icons/sword.js';\nexport { default as LucideSwords, default as Swords, default as SwordsIcon } from './icons/swords.js';\nexport { default as LucideSyringe, default as Syringe, default as SyringeIcon } from './icons/syringe.js';\nexport { default as LucideTable2, default as Table2, default as Table2Icon } from './icons/table-2.js';\nexport { default as LucideTableCellsMerge, default as TableCellsMerge, default as TableCellsMergeIcon } from './icons/table-cells-merge.js';\nexport { default as LucideTableCellsSplit, default as TableCellsSplit, default as TableCellsSplitIcon } from './icons/table-cells-split.js';\nexport { default as LucideTableColumnsSplit, default as TableColumnsSplit, default as TableColumnsSplitIcon } from './icons/table-columns-split.js';\nexport { default as LucideTableProperties, default as TableProperties, default as TablePropertiesIcon } from './icons/table-properties.js';\nexport { default as LucideTableRowsSplit, default as TableRowsSplit, default as TableRowsSplitIcon } from './icons/table-rows-split.js';\nexport { default as LucideTable, default as Table, default as TableIcon } from './icons/table.js';\nexport { default as LucideTabletSmartphone, default as TabletSmartphone, default as TabletSmartphoneIcon } from './icons/tablet-smartphone.js';\nexport { default as LucideTablet, default as Tablet, default as TabletIcon } from './icons/tablet.js';\nexport { default as LucideTablets, default as Tablets, default as TabletsIcon } from './icons/tablets.js';\nexport { default as LucideTag, default as Tag, default as TagIcon } from './icons/tag.js';\nexport { default as LucideTags, default as Tags, default as TagsIcon } from './icons/tags.js';\nexport { default as LucideTally1, default as Tally1, default as Tally1Icon } from './icons/tally-1.js';\nexport { default as LucideTally2, default as Tally2, default as Tally2Icon } from './icons/tally-2.js';\nexport { default as LucideTally3, default as Tally3, default as Tally3Icon } from './icons/tally-3.js';\nexport { default as LucideTally4, default as Tally4, default as Tally4Icon } from './icons/tally-4.js';\nexport { default as LucideTally5, default as Tally5, default as Tally5Icon } from './icons/tally-5.js';\nexport { default as LucideTangent, default as Tangent, default as TangentIcon } from './icons/tangent.js';\nexport { default as LucideTarget, default as Target, default as TargetIcon } from './icons/target.js';\nexport { default as LucideTelescope, default as Telescope, default as TelescopeIcon } from './icons/telescope.js';\nexport { default as LucideTentTree, default as TentTree, default as TentTreeIcon } from './icons/tent-tree.js';\nexport { default as LucideTent, default as Tent, default as TentIcon } from './icons/tent.js';\nexport { default as LucideTerminal, default as Terminal, default as TerminalIcon } from './icons/terminal.js';\nexport { default as LucideTestTube, default as TestTube, default as TestTubeIcon } from './icons/test-tube.js';\nexport { default as LucideTestTubes, default as TestTubes, default as TestTubesIcon } from './icons/test-tubes.js';\nexport { default as LucideTextCursorInput, default as TextCursorInput, default as TextCursorInputIcon } from './icons/text-cursor-input.js';\nexport { default as LucideTextCursor, default as TextCursor, default as TextCursorIcon } from './icons/text-cursor.js';\nexport { default as LucideTextQuote, default as TextQuote, default as TextQuoteIcon } from './icons/text-quote.js';\nexport { default as LucideTextSearch, default as TextSearch, default as TextSearchIcon } from './icons/text-search.js';\nexport { default as LucideText, default as Text, default as TextIcon } from './icons/text.js';\nexport { default as LucideTheater, default as Theater, default as TheaterIcon } from './icons/theater.js';\nexport { default as LucideThermometerSnowflake, default as ThermometerSnowflake, default as ThermometerSnowflakeIcon } from './icons/thermometer-snowflake.js';\nexport { default as LucideThermometerSun, default as ThermometerSun, default as ThermometerSunIcon } from './icons/thermometer-sun.js';\nexport { default as LucideThermometer, default as Thermometer, default as ThermometerIcon } from './icons/thermometer.js';\nexport { default as LucideThumbsDown, default as ThumbsDown, default as ThumbsDownIcon } from './icons/thumbs-down.js';\nexport { default as LucideThumbsUp, default as ThumbsUp, default as ThumbsUpIcon } from './icons/thumbs-up.js';\nexport { default as LucideTicketCheck, default as TicketCheck, default as TicketCheckIcon } from './icons/ticket-check.js';\nexport { default as LucideTicketMinus, default as TicketMinus, default as TicketMinusIcon } from './icons/ticket-minus.js';\nexport { default as LucideTicketPercent, default as TicketPercent, default as TicketPercentIcon } from './icons/ticket-percent.js';\nexport { default as LucideTicketPlus, default as TicketPlus, default as TicketPlusIcon } from './icons/ticket-plus.js';\nexport { default as LucideTicketSlash, default as TicketSlash, default as TicketSlashIcon } from './icons/ticket-slash.js';\nexport { default as LucideTicketX, default as TicketX, default as TicketXIcon } from './icons/ticket-x.js';\nexport { default as LucideTicket, default as Ticket, default as TicketIcon } from './icons/ticket.js';\nexport { default as LucideTimerOff, default as TimerOff, default as TimerOffIcon } from './icons/timer-off.js';\nexport { default as LucideTimerReset, default as TimerReset, default as TimerResetIcon } from './icons/timer-reset.js';\nexport { default as LucideTimer, default as Timer, default as TimerIcon } from './icons/timer.js';\nexport { default as LucideToggleLeft, default as ToggleLeft, default as ToggleLeftIcon } from './icons/toggle-left.js';\nexport { default as LucideToggleRight, default as ToggleRight, default as ToggleRightIcon } from './icons/toggle-right.js';\nexport { default as LucideTornado, default as Tornado, default as TornadoIcon } from './icons/tornado.js';\nexport { default as LucideTorus, default as Torus, default as TorusIcon } from './icons/torus.js';\nexport { default as LucideTouchpadOff, default as TouchpadOff, default as TouchpadOffIcon } from './icons/touchpad-off.js';\nexport { default as LucideTouchpad, default as Touchpad, default as TouchpadIcon } from './icons/touchpad.js';\nexport { default as LucideTowerControl, default as TowerControl, default as TowerControlIcon } from './icons/tower-control.js';\nexport { default as LucideToyBrick, default as ToyBrick, default as ToyBrickIcon } from './icons/toy-brick.js';\nexport { default as LucideTractor, default as Tractor, default as TractorIcon } from './icons/tractor.js';\nexport { default as LucideTrafficCone, default as TrafficCone, default as TrafficConeIcon } from './icons/traffic-cone.js';\nexport { default as LucideTrainFrontTunnel, default as TrainFrontTunnel, default as TrainFrontTunnelIcon } from './icons/train-front-tunnel.js';\nexport { default as LucideTrainFront, default as TrainFront, default as TrainFrontIcon } from './icons/train-front.js';\nexport { default as LucideTrainTrack, default as TrainTrack, default as TrainTrackIcon } from './icons/train-track.js';\nexport { default as LucideTrash2, default as Trash2, default as Trash2Icon } from './icons/trash-2.js';\nexport { default as LucideTrash, default as Trash, default as TrashIcon } from './icons/trash.js';\nexport { default as LucideTreeDeciduous, default as TreeDeciduous, default as TreeDeciduousIcon } from './icons/tree-deciduous.js';\nexport { default as LucideTreePine, default as TreePine, default as TreePineIcon } from './icons/tree-pine.js';\nexport { default as LucideTrees, default as Trees, default as TreesIcon } from './icons/trees.js';\nexport { default as LucideTrello, default as Trello, default as TrelloIcon } from './icons/trello.js';\nexport { default as LucideTrendingDown, default as TrendingDown, default as TrendingDownIcon } from './icons/trending-down.js';\nexport { default as LucideTrendingUp, default as TrendingUp, default as TrendingUpIcon } from './icons/trending-up.js';\nexport { default as LucideTriangleRight, default as TriangleRight, default as TriangleRightIcon } from './icons/triangle-right.js';\nexport { default as LucideTriangle, default as Triangle, default as TriangleIcon } from './icons/triangle.js';\nexport { default as LucideTrophy, default as Trophy, default as TrophyIcon } from './icons/trophy.js';\nexport { default as LucideTruck, default as Truck, default as TruckIcon } from './icons/truck.js';\nexport { default as LucideTurtle, default as Turtle, default as TurtleIcon } from './icons/turtle.js';\nexport { default as LucideTv2, default as Tv2, default as Tv2Icon } from './icons/tv-2.js';\nexport { default as LucideTv, default as Tv, default as TvIcon } from './icons/tv.js';\nexport { default as LucideTwitch, default as Twitch, default as TwitchIcon } from './icons/twitch.js';\nexport { default as LucideTwitter, default as Twitter, default as TwitterIcon } from './icons/twitter.js';\nexport { default as LucideType, default as Type, default as TypeIcon } from './icons/type.js';\nexport { default as LucideUmbrellaOff, default as UmbrellaOff, default as UmbrellaOffIcon } from './icons/umbrella-off.js';\nexport { default as LucideUmbrella, default as Umbrella, default as UmbrellaIcon } from './icons/umbrella.js';\nexport { default as LucideUnderline, default as Underline, default as UnderlineIcon } from './icons/underline.js';\nexport { default as LucideUndo2, default as Undo2, default as Undo2Icon } from './icons/undo-2.js';\nexport { default as LucideUndoDot, default as UndoDot, default as UndoDotIcon } from './icons/undo-dot.js';\nexport { default as LucideUndo, default as Undo, default as UndoIcon } from './icons/undo.js';\nexport { default as LucideUnfoldHorizontal, default as UnfoldHorizontal, default as UnfoldHorizontalIcon } from './icons/unfold-horizontal.js';\nexport { default as LucideUnfoldVertical, default as UnfoldVertical, default as UnfoldVerticalIcon } from './icons/unfold-vertical.js';\nexport { default as LucideUngroup, default as Ungroup, default as UngroupIcon } from './icons/ungroup.js';\nexport { default as LucideUnlink2, default as Unlink2, default as Unlink2Icon } from './icons/unlink-2.js';\nexport { default as LucideUnlink, default as Unlink, default as UnlinkIcon } from './icons/unlink.js';\nexport { default as LucideUnplug, default as Unplug, default as UnplugIcon } from './icons/unplug.js';\nexport { default as LucideUpload, default as Upload, default as UploadIcon } from './icons/upload.js';\nexport { default as LucideUsb, default as Usb, default as UsbIcon } from './icons/usb.js';\nexport { default as LucideUserCheck, default as UserCheck, default as UserCheckIcon } from './icons/user-check.js';\nexport { default as LucideUserCog, default as UserCog, default as UserCogIcon } from './icons/user-cog.js';\nexport { default as LucideUserMinus, default as UserMinus, default as UserMinusIcon } from './icons/user-minus.js';\nexport { default as LucideUserPlus, default as UserPlus, default as UserPlusIcon } from './icons/user-plus.js';\nexport { default as LucideUserRoundSearch, default as UserRoundSearch, default as UserRoundSearchIcon } from './icons/user-round-search.js';\nexport { default as LucideUserSearch, default as UserSearch, default as UserSearchIcon } from './icons/user-search.js';\nexport { default as LucideUserX, default as UserX, default as UserXIcon } from './icons/user-x.js';\nexport { default as LucideUser, default as User, default as UserIcon } from './icons/user.js';\nexport { default as LucideUsers, default as Users, default as UsersIcon } from './icons/users.js';\nexport { default as LucideUtensilsCrossed, default as UtensilsCrossed, default as UtensilsCrossedIcon } from './icons/utensils-crossed.js';\nexport { default as LucideUtensils, default as Utensils, default as UtensilsIcon } from './icons/utensils.js';\nexport { default as LucideUtilityPole, default as UtilityPole, default as UtilityPoleIcon } from './icons/utility-pole.js';\nexport { default as LucideVariable, default as Variable, default as VariableIcon } from './icons/variable.js';\nexport { default as LucideVault, default as Vault, default as VaultIcon } from './icons/vault.js';\nexport { default as LucideVegan, default as Vegan, default as VeganIcon } from './icons/vegan.js';\nexport { default as LucideVenetianMask, default as VenetianMask, default as VenetianMaskIcon } from './icons/venetian-mask.js';\nexport { default as LucideVibrateOff, default as VibrateOff, default as VibrateOffIcon } from './icons/vibrate-off.js';\nexport { default as LucideVibrate, default as Vibrate, default as VibrateIcon } from './icons/vibrate.js';\nexport { default as LucideVideoOff, default as VideoOff, default as VideoOffIcon } from './icons/video-off.js';\nexport { default as LucideVideo, default as Video, default as VideoIcon } from './icons/video.js';\nexport { default as LucideVideotape, default as Videotape, default as VideotapeIcon } from './icons/videotape.js';\nexport { default as LucideView, default as View, default as ViewIcon } from './icons/view.js';\nexport { default as LucideVoicemail, default as Voicemail, default as VoicemailIcon } from './icons/voicemail.js';\nexport { default as LucideVolume1, default as Volume1, default as Volume1Icon } from './icons/volume-1.js';\nexport { default as LucideVolume2, default as Volume2, default as Volume2Icon } from './icons/volume-2.js';\nexport { default as LucideVolumeX, default as VolumeX, default as VolumeXIcon } from './icons/volume-x.js';\nexport { default as LucideVolume, default as Volume, default as VolumeIcon } from './icons/volume.js';\nexport { default as LucideVote, default as Vote, default as VoteIcon } from './icons/vote.js';\nexport { default as LucideWalletCards, default as WalletCards, default as WalletCardsIcon } from './icons/wallet-cards.js';\nexport { default as LucideWallet, default as Wallet, default as WalletIcon } from './icons/wallet.js';\nexport { default as LucideWallpaper, default as Wallpaper, default as WallpaperIcon } from './icons/wallpaper.js';\nexport { default as LucideWand, default as Wand, default as WandIcon } from './icons/wand.js';\nexport { default as LucideWarehouse, default as Warehouse, default as WarehouseIcon } from './icons/warehouse.js';\nexport { default as LucideWashingMachine, default as WashingMachine, default as WashingMachineIcon } from './icons/washing-machine.js';\nexport { default as LucideWatch, default as Watch, default as WatchIcon } from './icons/watch.js';\nexport { default as LucideWaves, default as Waves, default as WavesIcon } from './icons/waves.js';\nexport { default as LucideWaypoints, default as Waypoints, default as WaypointsIcon } from './icons/waypoints.js';\nexport { default as LucideWebcam, default as Webcam, default as WebcamIcon } from './icons/webcam.js';\nexport { default as LucideWebhookOff, default as WebhookOff, default as WebhookOffIcon } from './icons/webhook-off.js';\nexport { default as LucideWebhook, default as Webhook, default as WebhookIcon } from './icons/webhook.js';\nexport { default as LucideWeight, default as Weight, default as WeightIcon } from './icons/weight.js';\nexport { default as LucideWheatOff, default as WheatOff, default as WheatOffIcon } from './icons/wheat-off.js';\nexport { default as LucideWheat, default as Wheat, default as WheatIcon } from './icons/wheat.js';\nexport { default as LucideWholeWord, default as WholeWord, default as WholeWordIcon } from './icons/whole-word.js';\nexport { default as LucideWifiOff, default as WifiOff, default as WifiOffIcon } from './icons/wifi-off.js';\nexport { default as LucideWifi, default as Wifi, default as WifiIcon } from './icons/wifi.js';\nexport { default as LucideWind, default as Wind, default as WindIcon } from './icons/wind.js';\nexport { default as LucideWineOff, default as WineOff, default as WineOffIcon } from './icons/wine-off.js';\nexport { default as LucideWine, default as Wine, default as WineIcon } from './icons/wine.js';\nexport { default as LucideWorkflow, default as Workflow, default as WorkflowIcon } from './icons/workflow.js';\nexport { default as LucideWorm, default as Worm, default as WormIcon } from './icons/worm.js';\nexport { default as LucideWrapText, default as WrapText, default as WrapTextIcon } from './icons/wrap-text.js';\nexport { default as LucideWrench, default as Wrench, default as WrenchIcon } from './icons/wrench.js';\nexport { default as LucideX, default as X, default as XIcon } from './icons/x.js';\nexport { default as LucideYoutube, default as Youtube, default as YoutubeIcon } from './icons/youtube.js';\nexport { default as LucideZapOff, default as ZapOff, default as ZapOffIcon } from './icons/zap-off.js';\nexport { default as LucideZap, default as Zap, default as ZapIcon } from './icons/zap.js';\nexport { default as LucideZoomIn, default as ZoomIn, default as ZoomInIcon } from './icons/zoom-in.js';\nexport { default as LucideZoomOut, default as ZoomOut, default as ZoomOutIcon } from './icons/zoom-out.js';\nexport { default as AlarmCheck, default as AlarmCheckIcon, default as AlarmClockCheck, default as AlarmClockCheckIcon, default as LucideAlarmCheck, default as LucideAlarmClockCheck } from './icons/alarm-clock-check.js';\nexport { default as AlarmClockMinus, default as AlarmClockMinusIcon, default as AlarmMinus, default as AlarmMinusIcon, default as LucideAlarmClockMinus, default as LucideAlarmMinus } from './icons/alarm-clock-minus.js';\nexport { default as AlarmClockPlus, default as AlarmClockPlusIcon, default as AlarmPlus, default as AlarmPlusIcon, default as LucideAlarmClockPlus, default as LucideAlarmPlus } from './icons/alarm-clock-plus.js';\nexport { default as ArrowDown10, default as ArrowDown10Icon, default as LucideArrowDown10 } from './icons/arrow-down-1-0.js';\nexport { default as ArrowDown01, default as ArrowDown01Icon, default as LucideArrowDown01 } from './icons/arrow-down-0-1.js';\nexport { default as ArrowDownAZ, default as ArrowDownAZIcon, default as ArrowDownAz, default as ArrowDownAzIcon, default as LucideArrowDownAZ, default as LucideArrowDownAz } from './icons/arrow-down-a-z.js';\nexport { default as ArrowDownWideNarrow, default as ArrowDownWideNarrowIcon, default as LucideArrowDownWideNarrow, default as LucideSortDesc, default as SortDesc, default as SortDescIcon } from './icons/arrow-down-wide-narrow.js';\nexport { default as ArrowUp01, default as ArrowUp01Icon, default as LucideArrowUp01 } from './icons/arrow-up-0-1.js';\nexport { default as ArrowDownZA, default as ArrowDownZAIcon, default as ArrowDownZa, default as ArrowDownZaIcon, default as LucideArrowDownZA, default as LucideArrowDownZa } from './icons/arrow-down-z-a.js';\nexport { default as ArrowUpAZ, default as ArrowUpAZIcon, default as ArrowUpAz, default as ArrowUpAzIcon, default as LucideArrowUpAZ, default as LucideArrowUpAz } from './icons/arrow-up-a-z.js';\nexport { default as ArrowUp10, default as ArrowUp10Icon, default as LucideArrowUp10 } from './icons/arrow-up-1-0.js';\nexport { default as ArrowUpNarrowWide, default as ArrowUpNarrowWideIcon, default as LucideArrowUpNarrowWide, default as LucideSortAsc, default as SortAsc, default as SortAscIcon } from './icons/arrow-up-narrow-wide.js';\nexport { default as ArrowUpZA, default as ArrowUpZAIcon, default as ArrowUpZa, default as ArrowUpZaIcon, default as LucideArrowUpZA, default as LucideArrowUpZa } from './icons/arrow-up-z-a.js';\nexport { default as Axis3D, default as Axis3DIcon, default as Axis3d, default as Axis3dIcon, default as LucideAxis3D, default as LucideAxis3d } from './icons/axis-3d.js';\nexport { default as BadgeCheck, default as BadgeCheckIcon, default as LucideBadgeCheck, default as LucideVerified, default as Verified, default as VerifiedIcon } from './icons/badge-check.js';\nexport { default as BetweenHorizonalStart, default as BetweenHorizonalStartIcon, default as BetweenHorizontalStart, default as BetweenHorizontalStartIcon, default as LucideBetweenHorizonalStart, default as LucideBetweenHorizontalStart } from './icons/between-horizontal-start.js';\nexport { default as BetweenHorizonalEnd, default as BetweenHorizonalEndIcon, default as BetweenHorizontalEnd, default as BetweenHorizontalEndIcon, default as LucideBetweenHorizonalEnd, default as LucideBetweenHorizontalEnd } from './icons/between-horizontal-end.js';\nexport { default as Braces, default as BracesIcon, default as CurlyBraces, default as CurlyBracesIcon, default as LucideBraces, default as LucideCurlyBraces } from './icons/braces.js';\nexport { default as BookDashed, default as BookDashedIcon, default as BookTemplate, default as BookTemplateIcon, default as LucideBookDashed, default as LucideBookTemplate } from './icons/book-dashed.js';\nexport { default as Captions, default as CaptionsIcon, default as LucideCaptions, default as LucideSubtitles, default as Subtitles, default as SubtitlesIcon } from './icons/captions.js';\nexport { default as AlertCircle, default as AlertCircleIcon, default as CircleAlert, default as CircleAlertIcon, default as LucideAlertCircle, default as LucideCircleAlert } from './icons/circle-alert.js';\nexport { default as ArrowDownCircle, default as ArrowDownCircleIcon, default as CircleArrowDown, default as CircleArrowDownIcon, default as LucideArrowDownCircle, default as LucideCircleArrowDown } from './icons/circle-arrow-down.js';\nexport { default as ArrowLeftCircle, default as ArrowLeftCircleIcon, default as CircleArrowLeft, default as CircleArrowLeftIcon, default as LucideArrowLeftCircle, default as LucideCircleArrowLeft } from './icons/circle-arrow-left.js';\nexport { default as ArrowDownLeftFromCircle, default as ArrowDownLeftFromCircleIcon, default as CircleArrowOutDownLeft, default as CircleArrowOutDownLeftIcon, default as LucideArrowDownLeftFromCircle, default as LucideCircleArrowOutDownLeft } from './icons/circle-arrow-out-down-left.js';\nexport { default as ArrowDownRightFromCircle, default as ArrowDownRightFromCircleIcon, default as CircleArrowOutDownRight, default as CircleArrowOutDownRightIcon, default as LucideArrowDownRightFromCircle, default as LucideCircleArrowOutDownRight } from './icons/circle-arrow-out-down-right.js';\nexport { default as ArrowUpLeftFromCircle, default as ArrowUpLeftFromCircleIcon, default as CircleArrowOutUpLeft, default as CircleArrowOutUpLeftIcon, default as LucideArrowUpLeftFromCircle, default as LucideCircleArrowOutUpLeft } from './icons/circle-arrow-out-up-left.js';\nexport { default as ArrowUpRightFromCircle, default as ArrowUpRightFromCircleIcon, default as CircleArrowOutUpRight, default as CircleArrowOutUpRightIcon, default as LucideArrowUpRightFromCircle, default as LucideCircleArrowOutUpRight } from './icons/circle-arrow-out-up-right.js';\nexport { default as ArrowRightCircle, default as ArrowRightCircleIcon, default as CircleArrowRight, default as CircleArrowRightIcon, default as LucideArrowRightCircle, default as LucideCircleArrowRight } from './icons/circle-arrow-right.js';\nexport { default as ArrowUpCircle, default as ArrowUpCircleIcon, default as CircleArrowUp, default as CircleArrowUpIcon, default as LucideArrowUpCircle, default as LucideCircleArrowUp } from './icons/circle-arrow-up.js';\nexport { default as CheckCircle, default as CheckCircleIcon, default as CircleCheckBig, default as CircleCheckBigIcon, default as LucideCheckCircle, default as LucideCircleCheckBig } from './icons/circle-check-big.js';\nexport { default as CheckCircle2, default as CheckCircle2Icon, default as CircleCheck, default as CircleCheckIcon, default as LucideCheckCircle2, default as LucideCircleCheck } from './icons/circle-check.js';\nexport { default as ChevronDownCircle, default as ChevronDownCircleIcon, default as CircleChevronDown, default as CircleChevronDownIcon, default as LucideChevronDownCircle, default as LucideCircleChevronDown } from './icons/circle-chevron-down.js';\nexport { default as ChevronLeftCircle, default as ChevronLeftCircleIcon, default as CircleChevronLeft, default as CircleChevronLeftIcon, default as LucideChevronLeftCircle, default as LucideCircleChevronLeft } from './icons/circle-chevron-left.js';\nexport { default as ChevronRightCircle, default as ChevronRightCircleIcon, default as CircleChevronRight, default as CircleChevronRightIcon, default as LucideChevronRightCircle, default as LucideCircleChevronRight } from './icons/circle-chevron-right.js';\nexport { default as ChevronUpCircle, default as ChevronUpCircleIcon, default as CircleChevronUp, default as CircleChevronUpIcon, default as LucideChevronUpCircle, default as LucideCircleChevronUp } from './icons/circle-chevron-up.js';\nexport { default as CircleDivide, default as CircleDivideIcon, default as DivideCircle, default as DivideCircleIcon, default as LucideCircleDivide, default as LucideDivideCircle } from './icons/circle-divide.js';\nexport { default as CircleGauge, default as CircleGaugeIcon, default as GaugeCircle, default as GaugeCircleIcon, default as LucideCircleGauge, default as LucideGaugeCircle } from './icons/circle-gauge.js';\nexport { default as CircleHelp, default as CircleHelpIcon, default as HelpCircle, default as HelpCircleIcon, default as LucideCircleHelp, default as LucideHelpCircle } from './icons/circle-help.js';\nexport { default as CircleMinus, default as CircleMinusIcon, default as LucideCircleMinus, default as LucideMinusCircle, default as MinusCircle, default as MinusCircleIcon } from './icons/circle-minus.js';\nexport { default as CircleParkingOff, default as CircleParkingOffIcon, default as LucideCircleParkingOff, default as LucideParkingCircleOff, default as ParkingCircleOff, default as ParkingCircleOffIcon } from './icons/circle-parking-off.js';\nexport { default as CircleParking, default as CircleParkingIcon, default as LucideCircleParking, default as LucideParkingCircle, default as ParkingCircle, default as ParkingCircleIcon } from './icons/circle-parking.js';\nexport { default as CirclePause, default as CirclePauseIcon, default as LucideCirclePause, default as LucidePauseCircle, default as PauseCircle, default as PauseCircleIcon } from './icons/circle-pause.js';\nexport { default as CirclePercent, default as CirclePercentIcon, default as LucideCirclePercent, default as LucidePercentCircle, default as PercentCircle, default as PercentCircleIcon } from './icons/circle-percent.js';\nexport { default as CirclePlay, default as CirclePlayIcon, default as LucideCirclePlay, default as LucidePlayCircle, default as PlayCircle, default as PlayCircleIcon } from './icons/circle-play.js';\nexport { default as CirclePlus, default as CirclePlusIcon, default as LucideCirclePlus, default as LucidePlusCircle, default as PlusCircle, default as PlusCircleIcon } from './icons/circle-plus.js';\nexport { default as CirclePower, default as CirclePowerIcon, default as LucideCirclePower, default as LucidePowerCircle, default as PowerCircle, default as PowerCircleIcon } from './icons/circle-power.js';\nexport { default as CircleSlash2, default as CircleSlash2Icon, default as CircleSlashed, default as CircleSlashedIcon, default as LucideCircleSlash2, default as LucideCircleSlashed } from './icons/circle-slash-2.js';\nexport { default as CircleStop, default as CircleStopIcon, default as LucideCircleStop, default as LucideStopCircle, default as StopCircle, default as StopCircleIcon } from './icons/circle-stop.js';\nexport { default as CircleUserRound, default as CircleUserRoundIcon, default as LucideCircleUserRound, default as LucideUserCircle2, default as UserCircle2, default as UserCircle2Icon } from './icons/circle-user-round.js';\nexport { default as CircleUser, default as CircleUserIcon, default as LucideCircleUser, default as LucideUserCircle, default as UserCircle, default as UserCircleIcon } from './icons/circle-user.js';\nexport { default as CircleX, default as CircleXIcon, default as LucideCircleX, default as LucideXCircle, default as XCircle, default as XCircleIcon } from './icons/circle-x.js';\nexport { default as ClipboardPenLine, default as ClipboardPenLineIcon, default as ClipboardSignature, default as ClipboardSignatureIcon, default as LucideClipboardPenLine, default as LucideClipboardSignature } from './icons/clipboard-pen-line.js';\nexport { default as ClipboardEdit, default as ClipboardEditIcon, default as ClipboardPen, default as ClipboardPenIcon, default as LucideClipboardEdit, default as LucideClipboardPen } from './icons/clipboard-pen.js';\nexport { default as CloudDownload, default as CloudDownloadIcon, default as DownloadCloud, default as DownloadCloudIcon, default as LucideCloudDownload, default as LucideDownloadCloud } from './icons/cloud-download.js';\nexport { default as CloudUpload, default as CloudUploadIcon, default as LucideCloudUpload, default as LucideUploadCloud, default as UploadCloud, default as UploadCloudIcon } from './icons/cloud-upload.js';\nexport { default as Code2, default as Code2Icon, default as CodeXml, default as CodeXmlIcon, default as LucideCode2, default as LucideCodeXml } from './icons/code-xml.js';\nexport { default as Columns, default as Columns2, default as Columns2Icon, default as ColumnsIcon, default as LucideColumns, default as LucideColumns2 } from './icons/columns-2.js';\nexport { default as Columns3, default as Columns3Icon, default as LucideColumns3, default as LucidePanelsLeftRight, default as PanelsLeftRight, default as PanelsLeftRightIcon } from './icons/columns-3.js';\nexport { default as Contact2, default as Contact2Icon, default as ContactRound, default as ContactRoundIcon, default as LucideContact2, default as LucideContactRound } from './icons/contact-round.js';\nexport { default as DiamondPercent, default as DiamondPercentIcon, default as LucideDiamondPercent, default as LucidePercentDiamond, default as PercentDiamond, default as PercentDiamondIcon } from './icons/diamond-percent.js';\nexport { default as Earth, default as EarthIcon, default as Globe2, default as Globe2Icon, default as LucideEarth, default as LucideGlobe2 } from './icons/earth.js';\nexport { default as EllipsisVertical, default as EllipsisVerticalIcon, default as LucideEllipsisVertical, default as LucideMoreVertical, default as MoreVertical, default as MoreVerticalIcon } from './icons/ellipsis-vertical.js';\nexport { default as Ellipsis, default as EllipsisIcon, default as LucideEllipsis, default as LucideMoreHorizontal, default as MoreHorizontal, default as MoreHorizontalIcon } from './icons/ellipsis.js';\nexport { default as FileAxis3D, default as FileAxis3DIcon, default as FileAxis3d, default as FileAxis3dIcon, default as LucideFileAxis3D, default as LucideFileAxis3d } from './icons/file-axis-3d.js';\nexport { default as FileCog, default as FileCog2, default as FileCog2Icon, default as FileCogIcon, default as LucideFileCog, default as LucideFileCog2 } from './icons/file-cog.js';\nexport { default as FilePenLine, default as FilePenLineIcon, default as FileSignature, default as FileSignatureIcon, default as LucideFilePenLine, default as LucideFileSignature } from './icons/file-pen-line.js';\nexport { default as FileEdit, default as FileEditIcon, default as FilePen, default as FilePenIcon, default as LucideFileEdit, default as LucideFilePen } from './icons/file-pen.js';\nexport { default as FolderCog, default as FolderCog2, default as FolderCog2Icon, default as FolderCogIcon, default as LucideFolderCog, default as LucideFolderCog2 } from './icons/folder-cog.js';\nexport { default as FolderEdit, default as FolderEditIcon, default as FolderPen, default as FolderPenIcon, default as LucideFolderEdit, default as LucideFolderPen } from './icons/folder-pen.js';\nexport { default as GitCommit, default as GitCommitHorizontal, default as GitCommitHorizontalIcon, default as GitCommitIcon, default as LucideGitCommit, default as LucideGitCommitHorizontal } from './icons/git-commit-horizontal.js';\nexport { default as Grid2X2, default as Grid2X2Icon, default as Grid2x2, default as Grid2x2Icon, default as LucideGrid2X2, default as LucideGrid2x2 } from './icons/grid-2x2.js';\nexport { default as Grid, default as Grid3X3, default as Grid3X3Icon, default as Grid3x3, default as Grid3x3Icon, default as GridIcon, default as LucideGrid, default as LucideGrid3X3, default as LucideGrid3x3 } from './icons/grid-3x3.js';\nexport { default as HandHelping, default as HandHelpingIcon, default as HelpingHand, default as HelpingHandIcon, default as LucideHandHelping, default as LucideHelpingHand } from './icons/hand-helping.js';\nexport { default as IceCream2, default as IceCream2Icon, default as IceCreamBowl, default as IceCreamBowlIcon, default as LucideIceCream2, default as LucideIceCreamBowl } from './icons/ice-cream-bowl.js';\nexport { default as IceCream, default as IceCreamCone, default as IceCreamConeIcon, default as IceCreamIcon, default as LucideIceCream, default as LucideIceCreamCone } from './icons/ice-cream-cone.js';\nexport { default as IndentDecrease, default as IndentDecreaseIcon, default as LucideIndentDecrease, default as LucideOutdent, default as Outdent, default as OutdentIcon } from './icons/indent-decrease.js';\nexport { default as Indent, default as IndentIcon, default as IndentIncrease, default as IndentIncreaseIcon, default as LucideIndent, default as LucideIndentIncrease } from './icons/indent-increase.js';\nexport { default as Laptop2, default as Laptop2Icon, default as LaptopMinimal, default as LaptopMinimalIcon, default as LucideLaptop2, default as LucideLaptopMinimal } from './icons/laptop-minimal.js';\nexport { default as Loader2, default as Loader2Icon, default as LoaderCircle, default as LoaderCircleIcon, default as LucideLoader2, default as LucideLoaderCircle } from './icons/loader-circle.js';\nexport { default as LockKeyholeOpen, default as LockKeyholeOpenIcon, default as LucideLockKeyholeOpen, default as LucideUnlockKeyhole, default as UnlockKeyhole, default as UnlockKeyholeIcon } from './icons/lock-keyhole-open.js';\nexport { default as LockOpen, default as LockOpenIcon, default as LucideLockOpen, default as LucideUnlock, default as Unlock, default as UnlockIcon } from './icons/lock-open.js';\nexport { default as LucideMic2, default as LucideMicVocal, default as Mic2, default as Mic2Icon, default as MicVocal, default as MicVocalIcon } from './icons/mic-vocal.js';\nexport { default as LucideMove3D, default as LucideMove3d, default as Move3D, default as Move3DIcon, default as Move3d, default as Move3dIcon } from './icons/move-3d.js';\nexport { default as AlertOctagon, default as AlertOctagonIcon, default as LucideAlertOctagon, default as LucideOctagonAlert, default as OctagonAlert, default as OctagonAlertIcon } from './icons/octagon-alert.js';\nexport { default as LucideOctagonPause, default as LucidePauseOctagon, default as OctagonPause, default as OctagonPauseIcon, default as PauseOctagon, default as PauseOctagonIcon } from './icons/octagon-pause.js';\nexport { default as LucideOctagonX, default as LucideXOctagon, default as OctagonX, default as OctagonXIcon, default as XOctagon, default as XOctagonIcon } from './icons/octagon-x.js';\nexport { default as LucidePanelBottomDashed, default as LucidePanelBottomInactive, default as PanelBottomDashed, default as PanelBottomDashedIcon, default as PanelBottomInactive, default as PanelBottomInactiveIcon } from './icons/panel-bottom-dashed.js';\nexport { default as LucidePanelLeftClose, default as LucideSidebarClose, default as PanelLeftClose, default as PanelLeftCloseIcon, default as SidebarClose, default as SidebarCloseIcon } from './icons/panel-left-close.js';\nexport { default as LucidePanelLeftDashed, default as LucidePanelLeftInactive, default as PanelLeftDashed, default as PanelLeftDashedIcon, default as PanelLeftInactive, default as PanelLeftInactiveIcon } from './icons/panel-left-dashed.js';\nexport { default as LucidePanelLeftOpen, default as LucideSidebarOpen, default as PanelLeftOpen, default as PanelLeftOpenIcon, default as SidebarOpen, default as SidebarOpenIcon } from './icons/panel-left-open.js';\nexport { default as LucidePanelLeft, default as LucideSidebar, default as PanelLeft, default as PanelLeftIcon, default as Sidebar, default as SidebarIcon } from './icons/panel-left.js';\nexport { default as LucidePanelRightDashed, default as LucidePanelRightInactive, default as PanelRightDashed, default as PanelRightDashedIcon, default as PanelRightInactive, default as PanelRightInactiveIcon } from './icons/panel-right-dashed.js';\nexport { default as LucidePanelTopDashed, default as LucidePanelTopInactive, default as PanelTopDashed, default as PanelTopDashedIcon, default as PanelTopInactive, default as PanelTopInactiveIcon } from './icons/panel-top-dashed.js';\nexport { default as Layout, default as LayoutIcon, default as LucideLayout, default as LucidePanelsTopLeft, default as PanelsTopLeft, default as PanelsTopLeftIcon } from './icons/panels-top-left.js';\nexport { default as Edit3, default as Edit3Icon, default as LucideEdit3, default as LucidePenLine, default as PenLine, default as PenLineIcon } from './icons/pen-line.js';\nexport { default as Edit2, default as Edit2Icon, default as LucideEdit2, default as LucidePen, default as Pen, default as PenIcon } from './icons/pen.js';\nexport { default as FormInput, default as FormInputIcon, default as LucideFormInput, default as LucideRectangleEllipsis, default as RectangleEllipsis, default as RectangleEllipsisIcon } from './icons/rectangle-ellipsis.js';\nexport { default as LucideRotate3D, default as LucideRotate3d, default as Rotate3D, default as Rotate3DIcon, default as Rotate3d, default as Rotate3dIcon } from './icons/rotate-3d.js';\nexport { default as LucidePanelsTopBottom, default as LucideRows3, default as PanelsTopBottom, default as PanelsTopBottomIcon, default as Rows3, default as Rows3Icon } from './icons/rows-3.js';\nexport { default as LucideRows, default as LucideRows2, default as Rows, default as Rows2, default as Rows2Icon, default as RowsIcon } from './icons/rows-2.js';\nexport { default as LucideScale3D, default as LucideScale3d, default as Scale3D, default as Scale3DIcon, default as Scale3d, default as Scale3dIcon } from './icons/scale-3d.js';\nexport { default as LucideSendHorizonal, default as LucideSendHorizontal, default as SendHorizonal, default as SendHorizonalIcon, default as SendHorizontal, default as SendHorizontalIcon } from './icons/send-horizontal.js';\nexport { default as LucideShieldClose, default as LucideShieldX, default as ShieldClose, default as ShieldCloseIcon, default as ShieldX, default as ShieldXIcon } from './icons/shield-x.js';\nexport { default as LucideSliders, default as LucideSlidersVertical, default as Sliders, default as SlidersIcon, default as SlidersVertical, default as SlidersVerticalIcon } from './icons/sliders-vertical.js';\nexport { default as LucideSparkles, default as LucideStars, default as Sparkles, default as SparklesIcon, default as Stars, default as StarsIcon } from './icons/sparkles.js';\nexport { default as ActivitySquare, default as ActivitySquareIcon, default as LucideActivitySquare, default as LucideSquareActivity, default as SquareActivity, default as SquareActivityIcon } from './icons/square-activity.js';\nexport { default as ArrowDownLeftSquare, default as ArrowDownLeftSquareIcon, default as LucideArrowDownLeftSquare, default as LucideSquareArrowDownLeft, default as SquareArrowDownLeft, default as SquareArrowDownLeftIcon } from './icons/square-arrow-down-left.js';\nexport { default as ArrowDownRightSquare, default as ArrowDownRightSquareIcon, default as LucideArrowDownRightSquare, default as LucideSquareArrowDownRight, default as SquareArrowDownRight, default as SquareArrowDownRightIcon } from './icons/square-arrow-down-right.js';\nexport { default as ArrowDownSquare, default as ArrowDownSquareIcon, default as LucideArrowDownSquare, default as LucideSquareArrowDown, default as SquareArrowDown, default as SquareArrowDownIcon } from './icons/square-arrow-down.js';\nexport { default as ArrowLeftSquare, default as ArrowLeftSquareIcon, default as LucideArrowLeftSquare, default as LucideSquareArrowLeft, default as SquareArrowLeft, default as SquareArrowLeftIcon } from './icons/square-arrow-left.js';\nexport { default as ArrowDownLeftFromSquare, default as ArrowDownLeftFromSquareIcon, default as LucideArrowDownLeftFromSquare, default as LucideSquareArrowOutDownLeft, default as SquareArrowOutDownLeft, default as SquareArrowOutDownLeftIcon } from './icons/square-arrow-out-down-left.js';\nexport { default as ArrowDownRightFromSquare, default as ArrowDownRightFromSquareIcon, default as LucideArrowDownRightFromSquare, default as LucideSquareArrowOutDownRight, default as SquareArrowOutDownRight, default as SquareArrowOutDownRightIcon } from './icons/square-arrow-out-down-right.js';\nexport { default as ArrowUpLeftFromSquare, default as ArrowUpLeftFromSquareIcon, default as LucideArrowUpLeftFromSquare, default as LucideSquareArrowOutUpLeft, default as SquareArrowOutUpLeft, default as SquareArrowOutUpLeftIcon } from './icons/square-arrow-out-up-left.js';\nexport { default as ArrowUpRightFromSquare, default as ArrowUpRightFromSquareIcon, default as LucideArrowUpRightFromSquare, default as LucideSquareArrowOutUpRight, default as SquareArrowOutUpRight, default as SquareArrowOutUpRightIcon } from './icons/square-arrow-out-up-right.js';\nexport { default as ArrowRightSquare, default as ArrowRightSquareIcon, default as LucideArrowRightSquare, default as LucideSquareArrowRight, default as SquareArrowRight, default as SquareArrowRightIcon } from './icons/square-arrow-right.js';\nexport { default as ArrowUpLeftSquare, default as ArrowUpLeftSquareIcon, default as LucideArrowUpLeftSquare, default as LucideSquareArrowUpLeft, default as SquareArrowUpLeft, default as SquareArrowUpLeftIcon } from './icons/square-arrow-up-left.js';\nexport { default as ArrowUpRightSquare, default as ArrowUpRightSquareIcon, default as LucideArrowUpRightSquare, default as LucideSquareArrowUpRight, default as SquareArrowUpRight, default as SquareArrowUpRightIcon } from './icons/square-arrow-up-right.js';\nexport { default as ArrowUpSquare, default as ArrowUpSquareIcon, default as LucideArrowUpSquare, default as LucideSquareArrowUp, default as SquareArrowUp, default as SquareArrowUpIcon } from './icons/square-arrow-up.js';\nexport { default as AsteriskSquare, default as AsteriskSquareIcon, default as LucideAsteriskSquare, default as LucideSquareAsterisk, default as SquareAsterisk, default as SquareAsteriskIcon } from './icons/square-asterisk.js';\nexport { default as LucideScissorsSquareDashedBottom, default as LucideSquareBottomDashedScissors, default as ScissorsSquareDashedBottom, default as ScissorsSquareDashedBottomIcon, default as SquareBottomDashedScissors, default as SquareBottomDashedScissorsIcon } from './icons/square-bottom-dashed-scissors.js';\nexport { default as CheckSquare, default as CheckSquareIcon, default as LucideCheckSquare, default as LucideSquareCheckBig, default as SquareCheckBig, default as SquareCheckBigIcon } from './icons/square-check-big.js';\nexport { default as CheckSquare2, default as CheckSquare2Icon, default as LucideCheckSquare2, default as LucideSquareCheck, default as SquareCheck, default as SquareCheckIcon } from './icons/square-check.js';\nexport { default as ChevronDownSquare, default as ChevronDownSquareIcon, default as LucideChevronDownSquare, default as LucideSquareChevronDown, default as SquareChevronDown, default as SquareChevronDownIcon } from './icons/square-chevron-down.js';\nexport { default as ChevronLeftSquare, default as ChevronLeftSquareIcon, default as LucideChevronLeftSquare, default as LucideSquareChevronLeft, default as SquareChevronLeft, default as SquareChevronLeftIcon } from './icons/square-chevron-left.js';\nexport { default as ChevronRightSquare, default as ChevronRightSquareIcon, default as LucideChevronRightSquare, default as LucideSquareChevronRight, default as SquareChevronRight, default as SquareChevronRightIcon } from './icons/square-chevron-right.js';\nexport { default as ChevronUpSquare, default as ChevronUpSquareIcon, default as LucideChevronUpSquare, default as LucideSquareChevronUp, default as SquareChevronUp, default as SquareChevronUpIcon } from './icons/square-chevron-up.js';\nexport { default as CodeSquare, default as CodeSquareIcon, default as LucideCodeSquare, default as LucideSquareCode, default as SquareCode, default as SquareCodeIcon } from './icons/square-code.js';\nexport { default as KanbanSquareDashed, default as KanbanSquareDashedIcon, default as LucideKanbanSquareDashed, default as LucideSquareDashedKanban, default as SquareDashedKanban, default as SquareDashedKanbanIcon } from './icons/square-dashed-kanban.js';\nexport { default as LucideMousePointerSquareDashed, default as LucideSquareDashedMousePointer, default as MousePointerSquareDashed, default as MousePointerSquareDashedIcon, default as SquareDashedMousePointer, default as SquareDashedMousePointerIcon } from './icons/square-dashed-mouse-pointer.js';\nexport { default as DivideSquare, default as DivideSquareIcon, default as LucideDivideSquare, default as LucideSquareDivide, default as SquareDivide, default as SquareDivideIcon } from './icons/square-divide.js';\nexport { default as DotSquare, default as DotSquareIcon, default as LucideDotSquare, default as LucideSquareDot, default as SquareDot, default as SquareDotIcon } from './icons/square-dot.js';\nexport { default as EqualSquare, default as EqualSquareIcon, default as LucideEqualSquare, default as LucideSquareEqual, default as SquareEqual, default as SquareEqualIcon } from './icons/square-equal.js';\nexport { default as FunctionSquare, default as FunctionSquareIcon, default as LucideFunctionSquare, default as LucideSquareFunction, default as SquareFunction, default as SquareFunctionIcon } from './icons/square-function.js';\nexport { default as GanttChartSquare, default as GanttChartSquareIcon, default as LucideGanttChartSquare, default as LucideSquareGanttChart, default as SquareGanttChart, default as SquareGanttChartIcon } from './icons/square-gantt-chart.js';\nexport { default as KanbanSquare, default as KanbanSquareIcon, default as LucideKanbanSquare, default as LucideSquareKanban, default as SquareKanban, default as SquareKanbanIcon } from './icons/square-kanban.js';\nexport { default as LibrarySquare, default as LibrarySquareIcon, default as LucideLibrarySquare, default as LucideSquareLibrary, default as SquareLibrary, default as SquareLibraryIcon } from './icons/square-library.js';\nexport { default as LucideMSquare, default as LucideSquareM, default as MSquare, default as MSquareIcon, default as SquareM, default as SquareMIcon } from './icons/square-m.js';\nexport { default as LucideMenuSquare, default as LucideSquareMenu, default as MenuSquare, default as MenuSquareIcon, default as SquareMenu, default as SquareMenuIcon } from './icons/square-menu.js';\nexport { default as LucideMinusSquare, default as LucideSquareMinus, default as MinusSquare, default as MinusSquareIcon, default as SquareMinus, default as SquareMinusIcon } from './icons/square-minus.js';\nexport { default as Inspect, default as InspectIcon, default as LucideInspect, default as LucideSquareMousePointer, default as SquareMousePointer, default as SquareMousePointerIcon } from './icons/square-mouse-pointer.js';\nexport { default as LucideParkingSquare, default as LucideSquareParking, default as ParkingSquare, default as ParkingSquareIcon, default as SquareParking, default as SquareParkingIcon } from './icons/square-parking.js';\nexport { default as LucideParkingSquareOff, default as LucideSquareParkingOff, default as ParkingSquareOff, default as ParkingSquareOffIcon, default as SquareParkingOff, default as SquareParkingOffIcon } from './icons/square-parking-off.js';\nexport { default as Edit, default as EditIcon, default as LucideEdit, default as LucidePenBox, default as LucidePenSquare, default as LucideSquarePen, default as PenBox, default as PenBoxIcon, default as PenSquare, default as PenSquareIcon, default as SquarePen, default as SquarePenIcon } from './icons/square-pen.js';\nexport { default as LucidePercentSquare, default as LucideSquarePercent, default as PercentSquare, default as PercentSquareIcon, default as SquarePercent, default as SquarePercentIcon } from './icons/square-percent.js';\nexport { default as LucidePiSquare, default as LucideSquarePi, default as PiSquare, default as PiSquareIcon, default as SquarePi, default as SquarePiIcon } from './icons/square-pi.js';\nexport { default as LucidePilcrowSquare, default as LucideSquarePilcrow, default as PilcrowSquare, default as PilcrowSquareIcon, default as SquarePilcrow, default as SquarePilcrowIcon } from './icons/square-pilcrow.js';\nexport { default as LucidePlaySquare, default as LucideSquarePlay, default as PlaySquare, default as PlaySquareIcon, default as SquarePlay, default as SquarePlayIcon } from './icons/square-play.js';\nexport { default as LucidePlusSquare, default as LucideSquarePlus, default as PlusSquare, default as PlusSquareIcon, default as SquarePlus, default as SquarePlusIcon } from './icons/square-plus.js';\nexport { default as LucidePowerSquare, default as LucideSquarePower, default as PowerSquare, default as PowerSquareIcon, default as SquarePower, default as SquarePowerIcon } from './icons/square-power.js';\nexport { default as LucideSigmaSquare, default as LucideSquareSigma, default as SigmaSquare, default as SigmaSquareIcon, default as SquareSigma, default as SquareSigmaIcon } from './icons/square-sigma.js';\nexport { default as LucideScissorsSquare, default as LucideSquareScissors, default as ScissorsSquare, default as ScissorsSquareIcon, default as SquareScissors, default as SquareScissorsIcon } from './icons/square-scissors.js';\nexport { default as LucideSlashSquare, default as LucideSquareSlash, default as SlashSquare, default as SlashSquareIcon, default as SquareSlash, default as SquareSlashIcon } from './icons/square-slash.js';\nexport { default as LucideSplitSquareHorizontal, default as LucideSquareSplitHorizontal, default as SplitSquareHorizontal, default as SplitSquareHorizontalIcon, default as SquareSplitHorizontal, default as SquareSplitHorizontalIcon } from './icons/square-split-horizontal.js';\nexport { default as LucideSquareTerminal, default as LucideTerminalSquare, default as SquareTerminal, default as SquareTerminalIcon, default as TerminalSquare, default as TerminalSquareIcon } from './icons/square-terminal.js';\nexport { default as LucideSquareUserRound, default as LucideUserSquare2, default as SquareUserRound, default as SquareUserRoundIcon, default as UserSquare2, default as UserSquare2Icon } from './icons/square-user-round.js';\nexport { default as LucideSplitSquareVertical, default as LucideSquareSplitVertical, default as SplitSquareVertical, default as SplitSquareVerticalIcon, default as SquareSplitVertical, default as SquareSplitVerticalIcon } from './icons/square-split-vertical.js';\nexport { default as LucideSquareUser, default as LucideUserSquare, default as SquareUser, default as SquareUserIcon, default as UserSquare, default as UserSquareIcon } from './icons/square-user.js';\nexport { default as LucideSquareX, default as LucideXSquare, default as SquareX, default as SquareXIcon, default as XSquare, default as XSquareIcon } from './icons/square-x.js';\nexport { default as LucideTestTube2, default as LucideTestTubeDiagonal, default as TestTube2, default as TestTube2Icon, default as TestTubeDiagonal, default as TestTubeDiagonalIcon } from './icons/test-tube-diagonal.js';\nexport { default as LucideTextSelect, default as LucideTextSelection, default as TextSelect, default as TextSelectIcon, default as TextSelection, default as TextSelectionIcon } from './icons/text-select.js';\nexport { default as LucideTrain, default as LucideTramFront, default as Train, default as TrainIcon, default as TramFront, default as TramFrontIcon } from './icons/tram-front.js';\nexport { default as LucidePalmtree, default as LucideTreePalm, default as Palmtree, default as PalmtreeIcon, default as TreePalm, default as TreePalmIcon } from './icons/tree-palm.js';\nexport { default as AlertTriangle, default as AlertTriangleIcon, default as LucideAlertTriangle, default as LucideTriangleAlert, default as TriangleAlert, default as TriangleAlertIcon } from './icons/triangle-alert.js';\nexport { default as LucideSchool2, default as LucideUniversity, default as School2, default as School2Icon, default as University, default as UniversityIcon } from './icons/university.js';\nexport { default as LucideUserCheck2, default as LucideUserRoundCheck, default as UserCheck2, default as UserCheck2Icon, default as UserRoundCheck, default as UserRoundCheckIcon } from './icons/user-round-check.js';\nexport { default as LucideUserCog2, default as LucideUserRoundCog, default as UserCog2, default as UserCog2Icon, default as UserRoundCog, default as UserRoundCogIcon } from './icons/user-round-cog.js';\nexport { default as LucideUserMinus2, default as LucideUserRoundMinus, default as UserMinus2, default as UserMinus2Icon, default as UserRoundMinus, default as UserRoundMinusIcon } from './icons/user-round-minus.js';\nexport { default as LucideUserPlus2, default as LucideUserRoundPlus, default as UserPlus2, default as UserPlus2Icon, default as UserRoundPlus, default as UserRoundPlusIcon } from './icons/user-round-plus.js';\nexport { default as LucideUserRoundX, default as LucideUserX2, default as UserRoundX, default as UserRoundXIcon, default as UserX2, default as UserX2Icon } from './icons/user-round-x.js';\nexport { default as LucideUser2, default as LucideUserRound, default as User2, default as User2Icon, default as UserRound, default as UserRoundIcon } from './icons/user-round.js';\nexport { default as LucideUsers2, default as LucideUsersRound, default as Users2, default as Users2Icon, default as UsersRound, default as UsersRoundIcon } from './icons/users-round.js';\nexport { default as LucideWallet2, default as LucideWalletMinimal, default as Wallet2, default as Wallet2Icon, default as WalletMinimal, default as WalletMinimalIcon } from './icons/wallet-minimal.js';\nexport { default as LucideWand2, default as LucideWandSparkles, default as Wand2, default as Wand2Icon, default as WandSparkles, default as WandSparklesIcon } from './icons/wand-sparkles.js';\nexport { default as createLucideIcon } from './createLucideIcon.js';\n//# sourceMappingURL=lucide-react.js.map\n","export default {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n};\n","/**\n * Converts string to KebabCase\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n","import {\n forwardRef,\n createElement,\n ReactSVG,\n SVGProps,\n ForwardRefExoticComponent,\n RefAttributes,\n} from 'react';\nimport defaultAttributes from './defaultAttributes';\nimport { toKebabCase } from '@lucide/shared';\n\nexport type IconNode = [elementName: keyof ReactSVG, attrs: Record<string, string>][];\n\nexport type SVGAttributes = Partial<SVGProps<SVGSVGElement>>;\ntype ComponentAttributes = RefAttributes<SVGSVGElement> & SVGAttributes;\n\nexport interface LucideProps extends ComponentAttributes {\n size?: string | number;\n absoluteStrokeWidth?: boolean;\n}\n\nexport type LucideIcon = ForwardRefExoticComponent<LucideProps>;\n\nconst createLucideIcon = (iconName: string, iconNode: IconNode): LucideIcon => {\n const Component = forwardRef<SVGSVGElement, LucideProps>(\n (\n {\n color = 'currentColor',\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = '',\n children,\n ...rest\n },\n ref,\n ) => {\n return createElement(\n 'svg',\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth\n ? (Number(strokeWidth) * 24) / Number(size)\n : strokeWidth,\n className: ['lucide', `lucide-${toKebabCase(iconName)}`, className].join(' '),\n ...rest,\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n );\n },\n );\n\n Component.displayName = `${iconName}`;\n\n return Component;\n};\n\nexport default createLucideIcon;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Calendar\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNOCAydjQiIC8+CiAgPHBhdGggZD0iTTE2IDJ2NCIgLz4KICA8cmVjdCB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHg9IjMiIHk9IjQiIHJ4PSIyIiAvPgogIDxwYXRoIGQ9Ik0zIDEwaDE4IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/calendar\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Calendar = createLucideIcon('Calendar', [\n ['path', { d: 'M8 2v4', key: '1cmpym' }],\n ['path', { d: 'M16 2v4', key: '4m81vk' }],\n ['rect', { width: '18', height: '18', x: '3', y: '4', rx: '2', key: '1hopcy' }],\n ['path', { d: 'M3 10h18', key: '8toen8' }],\n]);\n\nexport default Calendar;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ChevronDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtNiA5IDYgNiA2LTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/chevron-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronDown = createLucideIcon('ChevronDown', [\n ['path', { d: 'm6 9 6 6 6-6', key: 'qrunsl' }],\n]);\n\nexport default ChevronDown;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name CopyCheck\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTIgMTUgMiAyIDQtNCIgLz4KICA8cmVjdCB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHg9IjgiIHk9IjgiIHJ4PSIyIiByeT0iMiIgLz4KICA8cGF0aCBkPSJNNCAxNmMtMS4xIDAtMi0uOS0yLTJWNGMwLTEuMS45LTIgMi0yaDEwYzEuMSAwIDIgLjkgMiAyIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/copy-check\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst CopyCheck = createLucideIcon('CopyCheck', [\n ['path', { d: 'm12 15 2 2 4-4', key: '2c609p' }],\n ['rect', { width: '14', height: '14', x: '8', y: '8', rx: '2', ry: '2', key: '17jyea' }],\n ['path', { d: 'M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2', key: 'zix9uf' }],\n]);\n\nexport default CopyCheck;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Divide\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjYiIHI9IjEiIC8+CiAgPGxpbmUgeDE9IjUiIHgyPSIxOSIgeTE9IjEyIiB5Mj0iMTIiIC8+CiAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxOCIgcj0iMSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/divide\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Divide = createLucideIcon('Divide', [\n ['circle', { cx: '12', cy: '6', r: '1', key: '1bh7o1' }],\n ['line', { x1: '5', x2: '19', y1: '12', y2: '12', key: '13b5wn' }],\n ['circle', { cx: '12', cy: '18', r: '1', key: 'lqb9t5' }],\n]);\n\nexport default Divide;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name DollarSign\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8bGluZSB4MT0iMTIiIHgyPSIxMiIgeTE9IjIiIHkyPSIyMiIgLz4KICA8cGF0aCBkPSJNMTcgNUg5LjVhMy41IDMuNSAwIDAgMCAwIDdoNWEzLjUgMy41IDAgMCAxIDAgN0g2IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/dollar-sign\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst DollarSign = createLucideIcon('DollarSign', [\n ['line', { x1: '12', x2: '12', y1: '2', y2: '22', key: '7eqyqh' }],\n ['path', { d: 'M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6', key: '1b0p4s' }],\n]);\n\nexport default DollarSign;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ListTodo\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB4PSIzIiB5PSI1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiByeD0iMSIgLz4KICA8cGF0aCBkPSJtMyAxNyAyIDIgNC00IiAvPgogIDxwYXRoIGQ9Ik0xMyA2aDgiIC8+CiAgPHBhdGggZD0iTTEzIDEyaDgiIC8+CiAgPHBhdGggZD0iTTEzIDE4aDgiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/list-todo\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ListTodo = createLucideIcon('ListTodo', [\n ['rect', { x: '3', y: '5', width: '6', height: '6', rx: '1', key: '1defrl' }],\n ['path', { d: 'm3 17 2 2 4-4', key: '1jhpwq' }],\n ['path', { d: 'M13 6h8', key: '15sg57' }],\n ['path', { d: 'M13 12h8', key: 'h98zly' }],\n ['path', { d: 'M13 18h8', key: 'oe0vm4' }],\n]);\n\nexport default ListTodo;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Percent\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8bGluZSB4MT0iMTkiIHgyPSI1IiB5MT0iNSIgeTI9IjE5IiAvPgogIDxjaXJjbGUgY3g9IjYuNSIgY3k9IjYuNSIgcj0iMi41IiAvPgogIDxjaXJjbGUgY3g9IjE3LjUiIGN5PSIxNy41IiByPSIyLjUiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/percent\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Percent = createLucideIcon('Percent', [\n ['line', { x1: '19', x2: '5', y1: '5', y2: '19', key: '1x9vlm' }],\n ['circle', { cx: '6.5', cy: '6.5', r: '2.5', key: '4mh3h7' }],\n ['circle', { cx: '17.5', cy: '17.5', r: '2.5', key: '1mdrzq' }],\n]);\n\nexport default Percent;\n","import { useSpreadsheet } from '@/src/components/spreadsheet/lib/use-spreadsheet';\nimport { cn } from '@/src/shared/lib/cn';\n\nexport function CornerIndicator({ className }: { className?: string }) {\n const { emptySize, onSelectSpreadsheet } = useSpreadsheet();\n\n return (\n <button\n type=\"button\"\n disabled={emptySize}\n className={cn(\n 'relative flex h-7 w-12 shrink-0 items-center justify-center border border-t border-l bg-white text-xs',\n className,\n )}\n onClick={onSelectSpreadsheet}\n >\n <span className=\"absolute top-0 right-0 h-full w-0.5 bg-gray-300\" />\n <span className=\"absolute bottom-0 left-0 h-0.5 w-full bg-gray-300\" />\n </button>\n );\n}\n","import { useSpreadsheet } from '@/src/components/spreadsheet/lib/use-spreadsheet';\nimport { Cell } from '@/src/components/spreadsheet/ui/cell';\nimport { RowIndicator } from '@/src/components/spreadsheet/ui/indicators/row-indicator';\nimport { cn } from '@/src/shared/lib/cn';\nimport { useId } from 'react';\n\nexport function Rows() {\n const id = useId();\n\n const { highlightLastRow, matrix } = useSpreadsheet();\n\n return (\n <div className=\"relative\">\n {matrix.map((rowValue, row) => (\n <div\n // biome-ignore lint/suspicious/noArrayIndexKey: Using ID as key.\n key={`spreadsheet__row__key__${id}__${row}}`}\n className={cn(\n 'flex items-center transition-all ease-linear',\n row === matrix.length - 1 && highlightLastRow && 'bg-blue-50',\n )}\n >\n <RowIndicator row={row} />\n\n {rowValue.map((columnValue, column) => (\n <Cell\n // biome-ignore lint/suspicious/noArrayIndexKey: Using ID as key.\n key={`spreadsheet__cell__key__${id}__${row}__${column}`}\n value={columnValue}\n coordinates={{ column, row }}\n />\n ))}\n </div>\n ))}\n </div>\n );\n}\n","import { useSpreadsheet } from '@/src/components/spreadsheet/lib/use-spreadsheet';\nimport * as Spreadsheet from '@/src/components/spreadsheet/model/spreadsheet';\nimport { DataEditor, DataViewer } from '@/src/components/spreadsheet/ui/data-editor';\nimport { cn } from '@/src/shared/lib/cn';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { useClickAway } from 'react-use';\n\nexport function Cell(props: Spreadsheet.Cell) {\n const { value, coordinates } = props;\n\n const { columns, isCellSelected, onChange, onPaste, onSelectCell } = useSpreadsheet();\n const { dataEditorType, readonly, width, visible, settings } = columns[coordinates.column];\n\n const [mode, setMode] = useState<Spreadsheet.Mode>(readonly ? 'readonly' : 'view');\n const dataEditorContainerRef = useRef<HTMLDivElement | null>(null);\n\n /** Cell correspondent column */\n const column = useMemo(() => columns[coordinates.column], [columns, coordinates.column]);\n /** Whether the cell is selected */\n const selected = useMemo(() => isCellSelected(coordinates), [coordinates, isCellSelected]);\n /** Select component custom items by prop */\n const selectItems = useMemo(() => settings?.select?.items || [], [settings?.select?.items]);\n\n const common: Record<'dataEditor' | 'dataViewer', Spreadsheet.DataEditor> = useMemo(\n () => ({\n dataEditor: {\n value,\n column,\n setMode,\n selected,\n onPaste: () => onPaste(coordinates),\n onChange: ({ data }) => onChange({ data, point: coordinates }),\n },\n dataViewer: {\n value,\n column,\n selected,\n },\n }),\n [coordinates, value, column, selected, onPaste, onChange],\n );\n\n const dataEditorElementMap: Partial<Record<Spreadsheet.DataEditorType, JSX.Element>> = useMemo(\n () => ({\n Date: <DataEditor.Date {...common.dataEditor} />,\n String: <DataEditor.Text {...common.dataEditor} />,\n Currency: <DataEditor.Numeric {...common.dataEditor} />,\n Decimal: <DataEditor.Numeric {...common.dataEditor} />,\n Float: <DataEditor.Numeric {...common.dataEditor} />,\n Integer: <DataEditor.Numeric {...common.dataEditor} />,\n Percentage: <DataEditor.Numeric {...common.dataEditor} />,\n Boolean: <DataEditor.Boolean {...common.dataEditor} />,\n Select: <DataEditor.Select {...common.dataEditor} items={selectItems} />,\n }),\n [common.dataEditor, selectItems],\n );\n\n const dataViewerElementMap: Partial<Record<Spreadsheet.DataEditorType, JSX.Element>> = useMemo(\n () => ({\n Date: <DataViewer.Date {...common.dataViewer} />,\n String: <DataViewer.Text {...common.dataViewer} />,\n Currency: <DataViewer.Numeric {...common.dataViewer} />,\n Decimal: <DataViewer.Numeric {...common.dataViewer} />,\n Float: <DataViewer.Numeric {...common.dataViewer} />,\n Integer: <DataViewer.Numeric {...common.dataViewer} />,\n Percentage: <DataViewer.Numeric {...common.dataViewer} />,\n Boolean: <DataViewer.Boolean {...common.dataViewer} />,\n Select: <DataViewer.Select {...common.dataViewer} items={selectItems} />,\n }),\n [common.dataViewer, selectItems],\n );\n\n const dataEditorElement = useMemo(\n () => (dataEditorType ? dataEditorElementMap[dataEditorType] : null),\n [dataEditorType, dataEditorElementMap],\n );\n\n const dataViewerElement = useMemo(\n () => (dataEditorType ? dataViewerElementMap[dataEditorType] : null),\n [dataEditorType, dataViewerElementMap],\n );\n\n useEffect(() => {\n const enterEditMode = (e: KeyboardEvent) => {\n const enterKey = e.code === 'Enter';\n\n if (enterKey && selected && mode === 'view') {\n setMode('edit');\n }\n\n if (enterKey && selected && mode === 'edit') {\n setMode('view');\n }\n };\n\n window.addEventListener('keydown', enterEditMode);\n\n return () => window.removeEventListener('keydown', enterEditMode);\n }, [selected, mode]);\n\n useClickAway(dataEditorContainerRef, () => setMode('view'));\n\n if (!visible) return null;\n\n if (mode === 'readonly') {\n return (\n <div\n onClick={() => onSelectCell(coordinates)}\n className={cn(\n 'flex h-7 shrink-0 cursor-default select-none border border-t-transparent border-l-transparent bg-[#F6F6F9]',\n selected && 'bg-[#EAF5FF]',\n )}\n style={{ width, height: Spreadsheet.CELL_INITIAL_HEIGHT }}\n >\n {dataViewerElement}\n </div>\n );\n }\n\n if (mode === 'view') {\n return (\n <div\n onClick={() => onSelectCell(coordinates)}\n onDoubleClick={() => setMode('edit')}\n className={cn(\n 'relative flex h-7 shrink-0 cursor-default select-none border border-t-transparent border-l-transparent',\n selected && 'bg-[#EAF5FF]',\n )}\n style={{ width, height: Spreadsheet.CELL_INITIAL_HEIGHT }}\n >\n {dataViewerElement}\n </div>\n );\n }\n\n return (\n <div\n ref={dataEditorContainerRef}\n data-testid=\"cell__testid\"\n className=\"relative h-7 w-32 shrink-0 border border-l-transparent border-t-transparent bg-[#EAF5FF] shadow-lg outline outline-2 outline-blue-500\"\n style={{\n width,\n height: Spreadsheet.CELL_INITIAL_HEIGHT,\n top: coordinates.row === 0 ? '4px' : '0px',\n }}\n >\n <div className=\"h-full w-full outline outline-[3px] outline-offset-2 outline-sky-200\">\n {dataEditorElement}\n </div>\n </div>\n );\n}\n","import {\n BooleanDataEditor,\n BooleanDataViewer,\n} from '@/src/components/spreadsheet/ui/data-editor/boolean';\n\nimport { DateDataEditor, DateDataViewer } from '@/src/components/spreadsheet/ui/data-editor/date';\n\nimport {\n NumericDataViewer,\n NumericEditor,\n} from '@/src/components/spreadsheet/ui/data-editor/numeric';\n\nimport {\n SelectDataEditor,\n SelectDataViewer,\n} from '@/src/components/spreadsheet/ui/data-editor/select';\n\nimport { TextDataEditor, TextDataViewer } from '@/src/components/spreadsheet/ui/data-editor/text';\n\nexport const DataEditor = {\n Date: DateDataEditor,\n Text: TextDataEditor,\n Boolean: BooleanDataEditor,\n Numeric: NumericEditor,\n Select: SelectDataEditor,\n};\n\nexport const DataViewer = {\n Date: DateDataViewer,\n Text: TextDataViewer,\n Boolean: BooleanDataViewer,\n Numeric: NumericDataViewer,\n Select: SelectDataViewer,\n};\n","import type * as Spreadsheet from '@/src/components/spreadsheet/model/spreadsheet';\nimport { cn } from '@/src/shared/lib/cn';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/src/shared/ui/select';\nimport { CaretSortIcon } from '@radix-ui/react-icons';\nimport { type ClipboardEvent, useCallback } from 'react';\n\nexport function BooleanDataEditor(props: Spreadsheet.DataEditor) {\n const { value, onBlur, onChange, onPaste } = props;\n\n const _onPaste = useCallback(\n (e: ClipboardEvent<HTMLButtonElement>) => {\n e.preventDefault();\n onPaste?.();\n },\n [onPaste],\n );\n\n return (\n <Select value={value as string} onValueChange={(data) => onChange?.({ data })} defaultOpen>\n <SelectTrigger\n onBlur={onBlur}\n onPaste={_onPaste}\n className={cn(\n 'h-full w-full rounded-none border-none pl-1 text-xs outline-none focus:ring-0',\n )}\n autoFocus\n >\n <SelectValue placeholder=\"Selecionar\" />\n </SelectTrigger>\n\n <SelectContent>\n <SelectItem className=\"text-xs\" value=\"true\">\n Sim\n </SelectItem>\n\n <SelectItem className=\"text-xs\" value=\"false\">\n Não\n </SelectItem>\n </SelectContent>\n </Select>\n );\n}\n\nexport function BooleanDataViewer({ value }: Spreadsheet.DataViewer) {\n const empty = value === '';\n const displayValue = empty ? 'Selecionar' : value === 'true' ? 'Sim' : 'Não';\n\n return (\n <div className=\"flex h-full w-full items-center justify-between pr-px pl-1\">\n <p className=\"line-clamp-1 text-xs\">{displayValue}</p>\n <CaretSortIcon className=\"h-4 w-4 opacity-50\" />\n </div>\n );\n}\n","'use client';\n\nimport { cn } from '@/src/shared/lib/cn';\nimport { CaretSortIcon, CheckIcon, ChevronDownIcon, ChevronUpIcon } from '@radix-ui/react-icons';\nimport * as SelectPrimitive from '@radix-ui/react-select';\nimport * as React from 'react';\n\nconst Select = SelectPrimitive.Root;\n\nconst SelectGroup = SelectPrimitive.Group;\n\nconst SelectValue = SelectPrimitive.Value;\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n 'flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-transparent py-2 pr-px pl-3 text-sm shadow-sm ring-offset-background [&>span]:line-clamp-1 disabled:cursor-not-allowed placeholder:text-muted-foreground disabled:opacity-50 focus:outline-none focus:ring-1 focus:ring-ring',\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <CaretSortIcon className=\"h-4 w-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n {...props}\n >\n <ChevronUpIcon />\n </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n {...props}\n >\n <ChevronDownIcon />\n </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = 'popper', ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n '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-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=closed]:animate-out data-[state=open]:animate-in',\n position === 'popper' &&\n 'data-[side=left]:-translate-x-1 data-[side=top]:-translate-y-1 data-[side=right]:translate-x-1 data-[side=bottom]:translate-y-1',\n className,\n )}\n position={position}\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)]',\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn('px-2 py-1.5 font-semibold text-sm', className)}\n {...props}\n />\n));\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pr-8 pl-2 text-sm outline-none data-[disabled]:pointer-events-none focus:bg-accent focus:text-accent-foreground data-[disabled]:opacity-50',\n className,\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"h-4 w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn('-mx-1 my-1 h-px bg-muted', className)}\n {...props}\n />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n","function clamp(value: number, [min, max]: [number, number]): number {\n return Math.min(max, Math.max(min, value));\n}\n\nexport { clamp };\n","import React from 'react';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { Slot } from '@radix-ui/react-slot';\n\nimport type * as Radix from '@radix-ui/react-primitive';\n\ntype SlotProps = Radix.ComponentPropsWithoutRef<typeof Slot>;\ntype CollectionElement = HTMLElement;\ninterface CollectionProps extends SlotProps {\n scope: any;\n}\n\n// We have resorted to returning slots directly rather than exposing primitives that can then\n// be slotted like `<CollectionItem as={Slot}>…</CollectionItem>`.\n// This is because we encountered issues with generic types that cannot be statically analysed\n// due to creating them dynamically via createCollection.\n\nfunction createCollection<ItemElement extends HTMLElement, ItemData = {}>(name: string) {\n /* -----------------------------------------------------------------------------------------------\n * CollectionProvider\n * ---------------------------------------------------------------------------------------------*/\n\n const PROVIDER_NAME = name + 'CollectionProvider';\n const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n\n type ContextValue = {\n collectionRef: React.RefObject<CollectionElement>;\n itemMap: Map<React.RefObject<ItemElement>, { ref: React.RefObject<ItemElement> } & ItemData>;\n };\n\n const [CollectionProviderImpl, useCollectionContext] = createCollectionContext<ContextValue>(\n PROVIDER_NAME,\n { collectionRef: { current: null }, itemMap: new Map() }\n );\n\n const CollectionProvider: React.FC<{ children?: React.ReactNode; scope: any }> = (props) => {\n const { scope, children } = props;\n const ref = React.useRef<CollectionElement>(null);\n const itemMap = React.useRef<ContextValue['itemMap']>(new Map()).current;\n return (\n <CollectionProviderImpl scope={scope} itemMap={itemMap} collectionRef={ref}>\n {children}\n </CollectionProviderImpl>\n );\n };\n\n CollectionProvider.displayName = PROVIDER_NAME;\n\n /* -----------------------------------------------------------------------------------------------\n * CollectionSlot\n * ---------------------------------------------------------------------------------------------*/\n\n const COLLECTION_SLOT_NAME = name + 'CollectionSlot';\n\n const CollectionSlot = React.forwardRef<CollectionElement, CollectionProps>(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);\n return <Slot ref={composedRefs}>{children}</Slot>;\n }\n );\n\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n\n /* -----------------------------------------------------------------------------------------------\n * CollectionItem\n * ---------------------------------------------------------------------------------------------*/\n\n const ITEM_SLOT_NAME = name + 'CollectionItemSlot';\n const ITEM_DATA_ATTR = 'data-radix-collection-item';\n\n type CollectionItemSlotProps = ItemData & {\n children: React.ReactNode;\n scope: any;\n };\n\n const CollectionItemSlot = React.forwardRef<ItemElement, CollectionItemSlotProps>(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React.useRef<ItemElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n\n React.useEffect(() => {\n context.itemMap.set(ref, { ref, ...(itemData as unknown as ItemData) });\n return () => void context.itemMap.delete(ref);\n });\n\n return (\n <Slot {...{ [ITEM_DATA_ATTR]: '' }} ref={composedRefs}>\n {children}\n </Slot>\n );\n }\n );\n\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n\n /* -----------------------------------------------------------------------------------------------\n * useCollection\n * ---------------------------------------------------------------------------------------------*/\n\n function useCollection(scope: any) {\n const context = useCollectionContext(name + 'CollectionConsumer', scope);\n\n const getItems = React.useCallback(() => {\n const collectionNode = context.collectionRef.current;\n if (!collectionNode) return [];\n const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`));\n const items = Array.from(context.itemMap.values());\n const orderedItems = items.sort(\n (a, b) => orderedNodes.indexOf(a.ref.current!) - orderedNodes.indexOf(b.ref.current!)\n );\n return orderedItems;\n }, [context.collectionRef, context.itemMap]);\n\n return getItems;\n }\n\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n useCollection,\n createCollectionScope,\n ] as const;\n}\n\nexport { createCollection };\nexport type { CollectionProps };\n","import * as React from 'react';\n\ntype Direction = 'ltr' | 'rtl';\nconst DirectionContext = React.createContext<Direction | undefined>(undefined);\n\n/* -------------------------------------------------------------------------------------------------\n * Direction\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DirectionProviderProps {\n children?: React.ReactNode;\n dir: Direction;\n}\nconst DirectionProvider: React.FC<DirectionProviderProps> = (props) => {\n const { dir, children } = props;\n return <DirectionContext.Provider value={dir}>{children}</DirectionContext.Provider>;\n};\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction useDirection(localDir?: Direction) {\n const globalDir = React.useContext(DirectionContext);\n return localDir || globalDir || 'ltr';\n}\n\nconst Provider = DirectionProvider;\n\nexport {\n useDirection,\n //\n Provider,\n //\n DirectionProvider,\n};\n","import * as React from 'react';\n\n/** Number of components which have requested interest to have focus guards */\nlet count = 0;\n\nfunction FocusGuards(props: any) {\n useFocusGuards();\n return props.children;\n}\n\n/**\n * Injects a pair of focus guards at the edges of the whole DOM tree\n * to ensure `focusin` & `focusout` events can be caught consistently.\n */\nfunction useFocusGuards() {\n React.useEffect(() => {\n const edgeGuards = document.querySelectorAll('[data-radix-focus-guard]');\n document.body.insertAdjacentElement('afterbegin', edgeGuards[0] ?? createFocusGuard());\n document.body.insertAdjacentElement('beforeend', edgeGuards[1] ?? createFocusGuard());\n count++;\n\n return () => {\n if (count === 1) {\n document.querySelectorAll('[data-radix-focus-guard]').forEach((node) => node.remove());\n }\n count--;\n };\n }, []);\n}\n\nfunction createFocusGuard() {\n const element = document.createElement('span');\n element.setAttribute('data-radix-focus-guard', '');\n element.tabIndex = 0;\n element.style.cssText = 'outline: none; opacity: 0; position: fixed; pointer-events: none';\n return element;\n}\n\nconst Root = FocusGuards;\n\nexport {\n FocusGuards,\n //\n Root,\n //\n useFocusGuards,\n};\n","import * as React from 'react';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\n\nimport type * as Radix from '@radix-ui/react-primitive';\n\nconst AUTOFOCUS_ON_MOUNT = 'focusScope.autoFocusOnMount';\nconst AUTOFOCUS_ON_UNMOUNT = 'focusScope.autoFocusOnUnmount';\nconst EVENT_OPTIONS = { bubbles: false, cancelable: true };\n\ntype FocusableTarget = HTMLElement | { focus(): void };\n\n/* -------------------------------------------------------------------------------------------------\n * FocusScope\n * -----------------------------------------------------------------------------------------------*/\n\nconst FOCUS_SCOPE_NAME = 'FocusScope';\n\ntype FocusScopeElement = React.ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = Radix.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface FocusScopeProps extends PrimitiveDivProps {\n /**\n * When `true`, tabbing from last item will focus first tabbable\n * and shift+tab from first item will focus last tababble.\n * @defaultValue false\n */\n loop?: boolean;\n\n /**\n * When `true`, focus cannot escape the focus scope via keyboard,\n * pointer, or a programmatic focus.\n * @defaultValue false\n */\n trapped?: boolean;\n\n /**\n * Event handler called when auto-focusing on mount.\n * Can be prevented.\n */\n onMountAutoFocus?: (event: Event) => void;\n\n /**\n * Event handler called when auto-focusing on unmount.\n * Can be prevented.\n */\n onUnmountAutoFocus?: (event: Event) => void;\n}\n\nconst FocusScope = React.forwardRef<FocusScopeElement, FocusScopeProps>((props, forwardedRef) => {\n const {\n loop = false,\n trapped = false,\n onMountAutoFocus: onMountAutoFocusProp,\n onUnmountAutoFocus: onUnmountAutoFocusProp,\n ...scopeProps\n } = props;\n const [container, setContainer] = React.useState<HTMLElement | null>(null);\n const onMountAutoFocus = useCallbackRef(onMountAutoFocusProp);\n const onUnmountAutoFocus = useCallbackRef(onUnmountAutoFocusProp);\n const lastFocusedElementRef = React.useRef<HTMLElement | null>(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContainer(node));\n\n const focusScope = React.useRef({\n paused: false,\n pause() {\n this.paused = true;\n },\n resume() {\n this.paused = false;\n },\n }).current;\n\n // Takes care of trapping focus if focus is moved outside programmatically for example\n React.useEffect(() => {\n if (trapped) {\n function handleFocusIn(event: FocusEvent) {\n if (focusScope.paused || !container) return;\n const target = event.target as HTMLElement | null;\n if (container.contains(target)) {\n lastFocusedElementRef.current = target;\n } else {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }\n\n function handleFocusOut(event: FocusEvent) {\n if (focusScope.paused || !container) return;\n const relatedTarget = event.relatedTarget as HTMLElement | null;\n\n // A `focusout` event with a `null` `relatedTarget` will happen in at least two cases:\n //\n // 1. When the user switches app/tabs/windows/the browser itself loses focus.\n // 2. In Google Chrome, when the focused element is removed from the DOM.\n //\n // We let the browser do its thing here because:\n //\n // 1. The browser already keeps a memory of what's focused for when the page gets refocused.\n // 2. In Google Chrome, if we try to focus the deleted focused element (as per below), it\n // throws the CPU to 100%, so we avoid doing anything for this reason here too.\n if (relatedTarget === null) return;\n\n // If the focus has moved to an actual legitimate element (`relatedTarget !== null`)\n // that is outside the container, we move focus to the last valid focused element inside.\n if (!container.contains(relatedTarget)) {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }\n\n // When the focused element gets removed from the DOM, browsers move focus\n // back to the document.body. In this case, we move focus to the container\n // to keep focus trapped correctly.\n function handleMutations(mutations: MutationRecord[]) {\n const focusedElement = document.activeElement as HTMLElement | null;\n if (focusedElement !== document.body) return;\n for (const mutation of mutations) {\n if (mutation.removedNodes.length > 0) focus(container);\n }\n }\n\n document.addEventListener('focusin', handleFocusIn);\n document.addEventListener('focusout', handleFocusOut);\n const mutationObserver = new MutationObserver(handleMutations);\n if (container) mutationObserver.observe(container, { childList: true, subtree: true });\n\n return () => {\n document.removeEventListener('focusin', handleFocusIn);\n document.removeEventListener('focusout', handleFocusOut);\n mutationObserver.disconnect();\n };\n }\n }, [trapped, container, focusScope.paused]);\n\n React.useEffect(() => {\n if (container) {\n focusScopesStack.add(focusScope);\n const previouslyFocusedElement = document.activeElement as HTMLElement | null;\n const hasFocusedCandidate = container.contains(previouslyFocusedElement);\n\n if (!hasFocusedCandidate) {\n const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n container.dispatchEvent(mountEvent);\n if (!mountEvent.defaultPrevented) {\n focusFirst(removeLinks(getTabbableCandidates(container)), { select: true });\n if (document.activeElement === previouslyFocusedElement) {\n focus(container);\n }\n }\n }\n\n return () => {\n container.removeEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n\n // We hit a react bug (fixed in v17) with focusing in unmount.\n // We need to delay the focus a little to get around it for now.\n // See: https://github.com/facebook/react/issues/17894\n setTimeout(() => {\n const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n container.dispatchEvent(unmountEvent);\n if (!unmountEvent.defaultPrevented) {\n focus(previouslyFocusedElement ?? document.body, { select: true });\n }\n // we need to remove the listener after we `dispatchEvent`\n container.removeEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n\n focusScopesStack.remove(focusScope);\n }, 0);\n };\n }\n }, [container, onMountAutoFocus, onUnmountAutoFocus, focusScope]);\n\n // Takes care of looping focus (when tabbing whilst at the edges)\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (!loop && !trapped) return;\n if (focusScope.paused) return;\n\n const isTabKey = event.key === 'Tab' && !event.altKey && !event.ctrlKey && !event.metaKey;\n const focusedElement = document.activeElement as HTMLElement | null;\n\n if (isTabKey && focusedElement) {\n const container = event.currentTarget as HTMLElement;\n const [first, last] = getTabbableEdges(container);\n const hasTabbableElementsInside = first && last;\n\n // we can only wrap focus if we have tabbable edges\n if (!hasTabbableElementsInside) {\n if (focusedElement === container) event.preventDefault();\n } else {\n if (!event.shiftKey && focusedElement === last) {\n event.preventDefault();\n if (loop) focus(first, { select: true });\n } else if (event.shiftKey && focusedElement === first) {\n event.preventDefault();\n if (loop) focus(last, { select: true });\n }\n }\n }\n },\n [loop, trapped, focusScope.paused]\n );\n\n return (\n <Primitive.div tabIndex={-1} {...scopeProps} ref={composedRefs} onKeyDown={handleKeyDown} />\n );\n});\n\nFocusScope.displayName = FOCUS_SCOPE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * Utils\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Attempts focusing the first element in a list of candidates.\n * Stops when focus has actually moved.\n */\nfunction focusFirst(candidates: HTMLElement[], { select = false } = {}) {\n const previouslyFocusedElement = document.activeElement;\n for (const candidate of candidates) {\n focus(candidate, { select });\n if (document.activeElement !== previouslyFocusedElement) return;\n }\n}\n\n/**\n * Returns the first and last tabbable elements inside a container.\n */\nfunction getTabbableEdges(container: HTMLElement) {\n const candidates = getTabbableCandidates(container);\n const first = findVisible(candidates, container);\n const last = findVisible(candidates.reverse(), container);\n return [first, last] as const;\n}\n\n/**\n * Returns a list of potential tabbable candidates.\n *\n * NOTE: This is only a close approximation. For example it doesn't take into account cases like when\n * elements are not visible. This cannot be worked out easily by just reading a property, but rather\n * necessitate runtime knowledge (computed styles, etc). We deal with these cases separately.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker\n * Credit: https://github.com/discord/focus-layers/blob/master/src/util/wrapFocus.tsx#L1\n */\nfunction getTabbableCandidates(container: HTMLElement) {\n const nodes: HTMLElement[] = [];\n const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n acceptNode: (node: any) => {\n const isHiddenInput = node.tagName === 'INPUT' && node.type === 'hidden';\n if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;\n // `.tabIndex` is not the same as the `tabindex` attribute. It works on the\n // runtime's understanding of tabbability, so this automatically accounts\n // for any kind of element that could be tabbed to.\n return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n },\n });\n while (walker.nextNode()) nodes.push(walker.currentNode as HTMLElement);\n // we do not take into account the order of nodes with positive `tabIndex` as it\n // hinders accessibility to have tab order different from visual order.\n return nodes;\n}\n\n/**\n * Returns the first visible element in a list.\n * NOTE: Only checks visibility up to the `container`.\n */\nfunction findVisible(elements: HTMLElement[], container: HTMLElement) {\n for (const element of elements) {\n // we stop checking if it's hidden at the `container` level (excluding)\n if (!isHidden(element, { upTo: container })) return element;\n }\n}\n\nfunction isHidden(node: HTMLElement, { upTo }: { upTo?: HTMLElement }) {\n if (getComputedStyle(node).visibility === 'hidden') return true;\n while (node) {\n // we stop at `upTo` (excluding it)\n if (upTo !== undefined && node === upTo) return false;\n if (getComputedStyle(node).display === 'none') return true;\n node = node.parentElement as HTMLElement;\n }\n return false;\n}\n\nfunction isSelectableInput(element: any): element is FocusableTarget & { select: () => void } {\n return element instanceof HTMLInputElement && 'select' in element;\n}\n\nfunction focus(element?: FocusableTarget | null, { select = false } = {}) {\n // only focus if that element is focusable\n if (element && element.focus) {\n const previouslyFocusedElement = document.activeElement;\n // NOTE: we prevent scrolling on focus, to minimize jarring transitions for users\n element.focus({ preventScroll: true });\n // only select if its not the same element, it supports selection and we need to select\n if (element !== previouslyFocusedElement && isSelectableInput(element) && select)\n element.select();\n }\n}\n\n/* -------------------------------------------------------------------------------------------------\n * FocusScope stack\n * -----------------------------------------------------------------------------------------------*/\n\ntype FocusScopeAPI = { paused: boolean; pause(): void; resume(): void };\nconst focusScopesStack = createFocusScopesStack();\n\nfunction createFocusScopesStack() {\n /** A stack of focus scopes, with the active one at the top */\n let stack: FocusScopeAPI[] = [];\n\n return {\n add(focusScope: FocusScopeAPI) {\n // pause the currently active focus scope (at the top of the stack)\n const activeFocusScope = stack[0];\n if (focusScope !== activeFocusScope) {\n activeFocusScope?.pause();\n }\n // remove in case it already exists (because we'll re-add it at the top of the stack)\n stack = arrayRemove(stack, focusScope);\n stack.unshift(focusScope);\n },\n\n remove(focusScope: FocusScopeAPI) {\n stack = arrayRemove(stack, focusScope);\n stack[0]?.resume();\n },\n };\n}\n\nfunction arrayRemove<T>(array: T[], item: T) {\n const updatedArray = [...array];\n const index = updatedArray.indexOf(item);\n if (index !== -1) {\n updatedArray.splice(index, 1);\n }\n return updatedArray;\n}\n\nfunction removeLinks(items: HTMLElement[]) {\n return items.filter((item) => item.tagName !== 'A');\n}\n\nconst Root = FocusScope;\n\nexport {\n FocusScope,\n //\n Root,\n};\nexport type { FocusScopeProps };\n","import * as React from 'react';\n\nfunction usePrevious<T>(value: T) {\n const ref = React.useRef({ value, previous: value });\n\n // We compare values before making an update to ensure that\n // a change has been made. This ensures the previous value is\n // persisted correctly between renders.\n return React.useMemo(() => {\n if (ref.current.value !== value) {\n ref.current.previous = ref.current.value;\n ref.current.value = value;\n }\n return ref.current.previous;\n }, [value]);\n}\n\nexport { usePrevious };\n","var getDefaultParent = function (originalTarget) {\n if (typeof document === 'undefined') {\n return null;\n }\n var sampleTarget = Array.isArray(originalTarget) ? originalTarget[0] : originalTarget;\n return sampleTarget.ownerDocument.body;\n};\nvar counterMap = new WeakMap();\nvar uncontrolledNodes = new WeakMap();\nvar markerMap = {};\nvar lockCount = 0;\nvar unwrapHost = function (node) {\n return node && (node.host || unwrapHost(node.parentNode));\n};\nvar correctTargets = function (parent, targets) {\n return targets\n .map(function (target) {\n if (parent.contains(target)) {\n return target;\n }\n var correctedTarget = unwrapHost(target);\n if (correctedTarget && parent.contains(correctedTarget)) {\n return correctedTarget;\n }\n console.error('aria-hidden', target, 'in not contained inside', parent, '. Doing nothing');\n return null;\n })\n .filter(function (x) { return Boolean(x); });\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @param {String} [controlAttribute] - html Attribute to control\n * @return {Undo} undo command\n */\nvar applyAttributeToOthers = function (originalTarget, parentNode, markerName, controlAttribute) {\n var targets = correctTargets(parentNode, Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n if (!markerMap[markerName]) {\n markerMap[markerName] = new WeakMap();\n }\n var markerCounter = markerMap[markerName];\n var hiddenNodes = [];\n var elementsToKeep = new Set();\n var elementsToStop = new Set(targets);\n var keep = function (el) {\n if (!el || elementsToKeep.has(el)) {\n return;\n }\n elementsToKeep.add(el);\n keep(el.parentNode);\n };\n targets.forEach(keep);\n var deep = function (parent) {\n if (!parent || elementsToStop.has(parent)) {\n return;\n }\n Array.prototype.forEach.call(parent.children, function (node) {\n if (elementsToKeep.has(node)) {\n deep(node);\n }\n else {\n try {\n var attr = node.getAttribute(controlAttribute);\n var alreadyHidden = attr !== null && attr !== 'false';\n var counterValue = (counterMap.get(node) || 0) + 1;\n var markerValue = (markerCounter.get(node) || 0) + 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n hiddenNodes.push(node);\n if (counterValue === 1 && alreadyHidden) {\n uncontrolledNodes.set(node, true);\n }\n if (markerValue === 1) {\n node.setAttribute(markerName, 'true');\n }\n if (!alreadyHidden) {\n node.setAttribute(controlAttribute, 'true');\n }\n }\n catch (e) {\n console.error('aria-hidden: cannot operate on ', node, e);\n }\n }\n });\n };\n deep(parentNode);\n elementsToKeep.clear();\n lockCount++;\n return function () {\n hiddenNodes.forEach(function (node) {\n var counterValue = counterMap.get(node) - 1;\n var markerValue = markerCounter.get(node) - 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n if (!counterValue) {\n if (!uncontrolledNodes.has(node)) {\n node.removeAttribute(controlAttribute);\n }\n uncontrolledNodes.delete(node);\n }\n if (!markerValue) {\n node.removeAttribute(markerName);\n }\n });\n lockCount--;\n if (!lockCount) {\n // clear\n counterMap = new WeakMap();\n counterMap = new WeakMap();\n uncontrolledNodes = new WeakMap();\n markerMap = {};\n }\n };\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var hideOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-aria-hidden'; }\n var targets = Array.from(Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n var activeParentNode = parentNode || getDefaultParent(originalTarget);\n if (!activeParentNode) {\n return function () { return null; };\n }\n // we should not hide ariaLive elements - https://github.com/theKashey/aria-hidden/issues/10\n targets.push.apply(targets, Array.from(activeParentNode.querySelectorAll('[aria-live]')));\n return applyAttributeToOthers(targets, activeParentNode, markerName, 'aria-hidden');\n};\n/**\n * Marks everything except given node(or nodes) as inert\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var inertOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-inert-ed'; }\n var activeParentNode = parentNode || getDefaultParent(originalTarget);\n if (!activeParentNode) {\n return function () { return null; };\n }\n return applyAttributeToOthers(originalTarget, activeParentNode, markerName, 'inert');\n};\n/**\n * @returns if current browser supports inert\n */\nexport var supportsInert = function () {\n return typeof HTMLElement !== 'undefined' && HTMLElement.prototype.hasOwnProperty('inert');\n};\n/**\n * Automatic function to \"suppress\" DOM elements - _hide_ or _inert_ in the best possible way\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var suppressOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-suppressed'; }\n return (supportsInert() ? inertOthers : hideOthers)(originalTarget, parentNode, markerName);\n};\n","import RemoveScroll from './Combination';\nexport { RemoveScroll };\n","import { __assign } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScroll } from './UI';\nimport SideCar from './sidecar';\nvar ReactRemoveScroll = React.forwardRef(function (props, ref) { return (React.createElement(RemoveScroll, __assign({}, props, { ref: ref, sideCar: SideCar }))); });\nReactRemoveScroll.classNames = RemoveScroll.classNames;\nexport default ReactRemoveScroll;\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nimport { fullWidthClassName, zeroRightClassName } from 'react-remove-scroll-bar/constants';\nimport { useMergeRefs } from 'use-callback-ref';\nimport { effectCar } from './medium';\nvar nothing = function () {\n return;\n};\n/**\n * Removes scrollbar from the page and contain the scroll within the Lock\n */\nvar RemoveScroll = React.forwardRef(function (props, parentRef) {\n var ref = React.useRef(null);\n var _a = React.useState({\n onScrollCapture: nothing,\n onWheelCapture: nothing,\n onTouchMoveCapture: nothing,\n }), callbacks = _a[0], setCallbacks = _a[1];\n var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? 'div' : _b, rest = __rest(props, [\"forwardProps\", \"children\", \"className\", \"removeScrollBar\", \"enabled\", \"shards\", \"sideCar\", \"noIsolation\", \"inert\", \"allowPinchZoom\", \"as\"]);\n var SideCar = sideCar;\n var containerRef = useMergeRefs([ref, parentRef]);\n var containerProps = __assign(__assign({}, rest), callbacks);\n return (React.createElement(React.Fragment, null,\n enabled && (React.createElement(SideCar, { sideCar: effectCar, removeScrollBar: removeScrollBar, shards: shards, noIsolation: noIsolation, inert: inert, setCallbacks: setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref })),\n forwardProps ? (React.cloneElement(React.Children.only(children), __assign(__assign({}, containerProps), { ref: containerRef }))) : (React.createElement(Container, __assign({}, containerProps, { className: className, ref: containerRef }), children))));\n});\nRemoveScroll.defaultProps = {\n enabled: true,\n removeScrollBar: true,\n inert: false,\n};\nRemoveScroll.classNames = {\n fullWidth: fullWidthClassName,\n zeroRight: zeroRightClassName,\n};\nexport { RemoveScroll };\n","export var zeroRightClassName = 'right-scroll-bar-position';\nexport var fullWidthClassName = 'width-before-scroll-bar';\nexport var noScrollbarsClassName = 'with-scroll-bars-hidden';\n/**\n * Name of a CSS variable containing the amount of \"hidden\" scrollbar\n * ! might be undefined ! use will fallback!\n */\nexport var removedBarSizeVariable = '--removed-body-scroll-bar-size';\n","export { assignRef } from './assignRef';\n// callback ref\nexport { useCallbackRef } from './useRef';\nexport { createCallbackRef } from './createRef';\n// merge ref\nexport { mergeRefs } from './mergeRef';\nexport { useMergeRefs } from './useMergeRef';\n// transform ref\nexport { useTransformRef } from './useTransformRef';\nexport { transformRef } from './transformRef';\n// refToCallback\nexport { refToCallback, useRefToCallback } from './refToCallback';\n","/**\n * Assigns a value for a given ref, no matter of the ref format\n * @param {RefObject} ref - a callback function or ref object\n * @param value - a new value\n *\n * @see https://github.com/theKashey/use-callback-ref#assignref\n * @example\n * const refObject = useRef();\n * const refFn = (ref) => {....}\n *\n * assignRef(refObject, \"refValue\");\n * assignRef(refFn, \"refValue\");\n */\nexport function assignRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n }\n else if (ref) {\n ref.current = value;\n }\n return ref;\n}\n","import { useState } from 'react';\n/**\n * creates a MutableRef with ref change callback\n * @param initialValue - initial ref value\n * @param {Function} callback - a callback to run when value changes\n *\n * @example\n * const ref = useCallbackRef(0, (newValue, oldValue) => console.log(oldValue, '->', newValue);\n * ref.current = 1;\n * // prints 0 -> 1\n *\n * @see https://reactjs.org/docs/hooks-reference.html#useref\n * @see https://github.com/theKashey/use-callback-ref#usecallbackref---to-replace-reactuseref\n * @returns {MutableRefObject}\n */\nexport function useCallbackRef(initialValue, callback) {\n var ref = useState(function () { return ({\n // value\n value: initialValue,\n // last callback\n callback: callback,\n // \"memoized\" public interface\n facade: {\n get current() {\n return ref.value;\n },\n set current(value) {\n var last = ref.value;\n if (last !== value) {\n ref.value = value;\n ref.callback(value, last);\n }\n },\n },\n }); })[0];\n // update callback\n ref.callback = callback;\n return ref.facade;\n}\n","import * as React from 'react';\nimport { assignRef } from './assignRef';\nimport { useCallbackRef } from './useRef';\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nvar currentValues = new WeakMap();\n/**\n * Merges two or more refs together providing a single interface to set their value\n * @param {RefObject|Ref} refs\n * @returns {MutableRefObject} - a new ref, which translates all changes to {refs}\n *\n * @see {@link mergeRefs} a version without buit-in memoization\n * @see https://github.com/theKashey/use-callback-ref#usemergerefs\n * @example\n * const Component = React.forwardRef((props, ref) => {\n * const ownRef = useRef();\n * const domRef = useMergeRefs([ref, ownRef]); // 👈 merge together\n * return <div ref={domRef}>...</div>\n * }\n */\nexport function useMergeRefs(refs, defaultValue) {\n var callbackRef = useCallbackRef(defaultValue || null, function (newValue) {\n return refs.forEach(function (ref) { return assignRef(ref, newValue); });\n });\n // handle refs changes - added or removed\n useIsomorphicLayoutEffect(function () {\n var oldValue = currentValues.get(callbackRef);\n if (oldValue) {\n var prevRefs_1 = new Set(oldValue);\n var nextRefs_1 = new Set(refs);\n var current_1 = callbackRef.current;\n prevRefs_1.forEach(function (ref) {\n if (!nextRefs_1.has(ref)) {\n assignRef(ref, null);\n }\n });\n nextRefs_1.forEach(function (ref) {\n if (!prevRefs_1.has(ref)) {\n assignRef(ref, current_1);\n }\n });\n }\n currentValues.set(callbackRef, refs);\n }, [refs]);\n return callbackRef;\n}\n","import { createSidecarMedium } from 'use-sidecar';\nexport var effectCar = createSidecarMedium();\n","export { sidecar } from './hoc';\nexport { useSidecar } from './hook';\nexport { setConfig } from './config';\nexport { createMedium, createSidecarMedium } from './medium';\nexport { renderCar } from './renderProp';\nexport { exportSidecar } from './exports';\n","import { __assign } from \"tslib\";\nfunction ItoI(a) {\n return a;\n}\nfunction innerCreateMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n var buffer = [];\n var assigned = false;\n var medium = {\n read: function () {\n if (assigned) {\n throw new Error('Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.');\n }\n if (buffer.length) {\n return buffer[buffer.length - 1];\n }\n return defaults;\n },\n useMedium: function (data) {\n var item = middleware(data, assigned);\n buffer.push(item);\n return function () {\n buffer = buffer.filter(function (x) { return x !== item; });\n };\n },\n assignSyncMedium: function (cb) {\n assigned = true;\n while (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n }\n buffer = {\n push: function (x) { return cb(x); },\n filter: function () { return buffer; },\n };\n },\n assignMedium: function (cb) {\n assigned = true;\n var pendingQueue = [];\n if (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n pendingQueue = buffer;\n }\n var executeQueue = function () {\n var cbs = pendingQueue;\n pendingQueue = [];\n cbs.forEach(cb);\n };\n var cycle = function () { return Promise.resolve().then(executeQueue); };\n cycle();\n buffer = {\n push: function (x) {\n pendingQueue.push(x);\n cycle();\n },\n filter: function (filter) {\n pendingQueue = pendingQueue.filter(filter);\n return buffer;\n },\n };\n },\n };\n return medium;\n}\nexport function createMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n return innerCreateMedium(defaults, middleware);\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function createSidecarMedium(options) {\n if (options === void 0) { options = {}; }\n var medium = innerCreateMedium(null);\n medium.options = __assign({ async: true, ssr: false }, options);\n return medium;\n}\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nvar SideCar = function (_a) {\n var sideCar = _a.sideCar, rest = __rest(_a, [\"sideCar\"]);\n if (!sideCar) {\n throw new Error('Sidecar: please provide `sideCar` property to import the right car');\n }\n var Target = sideCar.read();\n if (!Target) {\n throw new Error('Sidecar medium not found');\n }\n return React.createElement(Target, __assign({}, rest));\n};\nSideCar.isSideCarExport = true;\nexport function exportSidecar(medium, exported) {\n medium.useMedium(exported);\n return SideCar;\n}\n","import { exportSidecar } from 'use-sidecar';\nimport { RemoveScrollSideCar } from './SideEffect';\nimport { effectCar } from './medium';\nexport default exportSidecar(effectCar, RemoveScrollSideCar);\n","import { __spreadArray } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScrollBar } from 'react-remove-scroll-bar';\nimport { styleSingleton } from 'react-style-singleton';\nimport { nonPassive } from './aggresiveCapture';\nimport { handleScroll, locationCouldBeScrolled } from './handleScroll';\nexport var getTouchXY = function (event) {\n return 'changedTouches' in event ? [event.changedTouches[0].clientX, event.changedTouches[0].clientY] : [0, 0];\n};\nexport var getDeltaXY = function (event) { return [event.deltaX, event.deltaY]; };\nvar extractRef = function (ref) {\n return ref && 'current' in ref ? ref.current : ref;\n};\nvar deltaCompare = function (x, y) { return x[0] === y[0] && x[1] === y[1]; };\nvar generateStyle = function (id) { return \"\\n .block-interactivity-\".concat(id, \" {pointer-events: none;}\\n .allow-interactivity-\").concat(id, \" {pointer-events: all;}\\n\"); };\nvar idCounter = 0;\nvar lockStack = [];\nexport function RemoveScrollSideCar(props) {\n var shouldPreventQueue = React.useRef([]);\n var touchStartRef = React.useRef([0, 0]);\n var activeAxis = React.useRef();\n var id = React.useState(idCounter++)[0];\n var Style = React.useState(function () { return styleSingleton(); })[0];\n var lastProps = React.useRef(props);\n React.useEffect(function () {\n lastProps.current = props;\n }, [props]);\n React.useEffect(function () {\n if (props.inert) {\n document.body.classList.add(\"block-interactivity-\".concat(id));\n var allow_1 = __spreadArray([props.lockRef.current], (props.shards || []).map(extractRef), true).filter(Boolean);\n allow_1.forEach(function (el) { return el.classList.add(\"allow-interactivity-\".concat(id)); });\n return function () {\n document.body.classList.remove(\"block-interactivity-\".concat(id));\n allow_1.forEach(function (el) { return el.classList.remove(\"allow-interactivity-\".concat(id)); });\n };\n }\n return;\n }, [props.inert, props.lockRef.current, props.shards]);\n var shouldCancelEvent = React.useCallback(function (event, parent) {\n if ('touches' in event && event.touches.length === 2) {\n return !lastProps.current.allowPinchZoom;\n }\n var touch = getTouchXY(event);\n var touchStart = touchStartRef.current;\n var deltaX = 'deltaX' in event ? event.deltaX : touchStart[0] - touch[0];\n var deltaY = 'deltaY' in event ? event.deltaY : touchStart[1] - touch[1];\n var currentAxis;\n var target = event.target;\n var moveDirection = Math.abs(deltaX) > Math.abs(deltaY) ? 'h' : 'v';\n // allow horizontal touch move on Range inputs. They will not cause any scroll\n if ('touches' in event && moveDirection === 'h' && target.type === 'range') {\n return false;\n }\n var canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n if (!canBeScrolledInMainDirection) {\n return true;\n }\n if (canBeScrolledInMainDirection) {\n currentAxis = moveDirection;\n }\n else {\n currentAxis = moveDirection === 'v' ? 'h' : 'v';\n canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n // other axis might be not scrollable\n }\n if (!canBeScrolledInMainDirection) {\n return false;\n }\n if (!activeAxis.current && 'changedTouches' in event && (deltaX || deltaY)) {\n activeAxis.current = currentAxis;\n }\n if (!currentAxis) {\n return true;\n }\n var cancelingAxis = activeAxis.current || currentAxis;\n return handleScroll(cancelingAxis, parent, event, cancelingAxis === 'h' ? deltaX : deltaY, true);\n }, []);\n var shouldPrevent = React.useCallback(function (_event) {\n var event = _event;\n if (!lockStack.length || lockStack[lockStack.length - 1] !== Style) {\n // not the last active\n return;\n }\n var delta = 'deltaY' in event ? getDeltaXY(event) : getTouchXY(event);\n var sourceEvent = shouldPreventQueue.current.filter(function (e) { return e.name === event.type && e.target === event.target && deltaCompare(e.delta, delta); })[0];\n // self event, and should be canceled\n if (sourceEvent && sourceEvent.should) {\n if (event.cancelable) {\n event.preventDefault();\n }\n return;\n }\n // outside or shard event\n if (!sourceEvent) {\n var shardNodes = (lastProps.current.shards || [])\n .map(extractRef)\n .filter(Boolean)\n .filter(function (node) { return node.contains(event.target); });\n var shouldStop = shardNodes.length > 0 ? shouldCancelEvent(event, shardNodes[0]) : !lastProps.current.noIsolation;\n if (shouldStop) {\n if (event.cancelable) {\n event.preventDefault();\n }\n }\n }\n }, []);\n var shouldCancel = React.useCallback(function (name, delta, target, should) {\n var event = { name: name, delta: delta, target: target, should: should };\n shouldPreventQueue.current.push(event);\n setTimeout(function () {\n shouldPreventQueue.current = shouldPreventQueue.current.filter(function (e) { return e !== event; });\n }, 1);\n }, []);\n var scrollTouchStart = React.useCallback(function (event) {\n touchStartRef.current = getTouchXY(event);\n activeAxis.current = undefined;\n }, []);\n var scrollWheel = React.useCallback(function (event) {\n shouldCancel(event.type, getDeltaXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n var scrollTouchMove = React.useCallback(function (event) {\n shouldCancel(event.type, getTouchXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n React.useEffect(function () {\n lockStack.push(Style);\n props.setCallbacks({\n onScrollCapture: scrollWheel,\n onWheelCapture: scrollWheel,\n onTouchMoveCapture: scrollTouchMove,\n });\n document.addEventListener('wheel', shouldPrevent, nonPassive);\n document.addEventListener('touchmove', shouldPrevent, nonPassive);\n document.addEventListener('touchstart', scrollTouchStart, nonPassive);\n return function () {\n lockStack = lockStack.filter(function (inst) { return inst !== Style; });\n document.removeEventListener('wheel', shouldPrevent, nonPassive);\n document.removeEventListener('touchmove', shouldPrevent, nonPassive);\n document.removeEventListener('touchstart', scrollTouchStart, nonPassive);\n };\n }, []);\n var removeScrollBar = props.removeScrollBar, inert = props.inert;\n return (React.createElement(React.Fragment, null,\n inert ? React.createElement(Style, { styles: generateStyle(id) }) : null,\n removeScrollBar ? React.createElement(RemoveScrollBar, { gapMode: \"margin\" }) : null));\n}\n","import { RemoveScrollBar } from './component';\nimport { zeroRightClassName, fullWidthClassName, noScrollbarsClassName, removedBarSizeVariable } from './constants';\nimport { getGapWidth } from './utils';\nexport { RemoveScrollBar, zeroRightClassName, fullWidthClassName, noScrollbarsClassName, removedBarSizeVariable, getGapWidth, };\n","import * as React from 'react';\nimport { styleSingleton } from 'react-style-singleton';\nimport { fullWidthClassName, zeroRightClassName, noScrollbarsClassName, removedBarSizeVariable } from './constants';\nimport { getGapWidth } from './utils';\nvar Style = styleSingleton();\nexport var lockAttribute = 'data-scroll-locked';\n// important tip - once we measure scrollBar width and remove them\n// we could not repeat this operation\n// thus we are using style-singleton - only the first \"yet correct\" style will be applied.\nvar getStyles = function (_a, allowRelative, gapMode, important) {\n var left = _a.left, top = _a.top, right = _a.right, gap = _a.gap;\n if (gapMode === void 0) { gapMode = 'margin'; }\n return \"\\n .\".concat(noScrollbarsClassName, \" {\\n overflow: hidden \").concat(important, \";\\n padding-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n body[\").concat(lockAttribute, \"] {\\n overflow: hidden \").concat(important, \";\\n overscroll-behavior: contain;\\n \").concat([\n allowRelative && \"position: relative \".concat(important, \";\"),\n gapMode === 'margin' &&\n \"\\n padding-left: \".concat(left, \"px;\\n padding-top: \").concat(top, \"px;\\n padding-right: \").concat(right, \"px;\\n margin-left:0;\\n margin-top:0;\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n \"),\n gapMode === 'padding' && \"padding-right: \".concat(gap, \"px \").concat(important, \";\"),\n ]\n .filter(Boolean)\n .join(''), \"\\n }\\n \\n .\").concat(zeroRightClassName, \" {\\n right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" {\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(zeroRightClassName, \" .\").concat(zeroRightClassName, \" {\\n right: 0 \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" .\").concat(fullWidthClassName, \" {\\n margin-right: 0 \").concat(important, \";\\n }\\n \\n body[\").concat(lockAttribute, \"] {\\n \").concat(removedBarSizeVariable, \": \").concat(gap, \"px;\\n }\\n\");\n};\nvar getCurrentUseCounter = function () {\n var counter = parseInt(document.body.getAttribute(lockAttribute) || '0', 10);\n return isFinite(counter) ? counter : 0;\n};\nexport var useLockAttribute = function () {\n React.useEffect(function () {\n document.body.setAttribute(lockAttribute, (getCurrentUseCounter() + 1).toString());\n return function () {\n var newCounter = getCurrentUseCounter() - 1;\n if (newCounter <= 0) {\n document.body.removeAttribute(lockAttribute);\n }\n else {\n document.body.setAttribute(lockAttribute, newCounter.toString());\n }\n };\n }, []);\n};\n/**\n * Removes page scrollbar and blocks page scroll when mounted\n */\nexport var RemoveScrollBar = function (_a) {\n var noRelative = _a.noRelative, noImportant = _a.noImportant, _b = _a.gapMode, gapMode = _b === void 0 ? 'margin' : _b;\n useLockAttribute();\n /*\n gap will be measured on every component mount\n however it will be used only by the \"first\" invocation\n due to singleton nature of <Style\n */\n var gap = React.useMemo(function () { return getGapWidth(gapMode); }, [gapMode]);\n return React.createElement(Style, { styles: getStyles(gap, !noRelative, gapMode, !noImportant ? '!important' : '') });\n};\n","export { styleSingleton } from './component';\nexport { stylesheetSingleton } from './singleton';\nexport { styleHookSingleton } from './hook';\n","import { styleHookSingleton } from './hook';\n/**\n * create a Component to add styles on demand\n * - styles are added when first instance is mounted\n * - styles are removed when the last instance is unmounted\n * - changing styles in runtime does nothing unless dynamic is set. But with multiple components that can lead to the undefined behavior\n */\nexport var styleSingleton = function () {\n var useStyle = styleHookSingleton();\n var Sheet = function (_a) {\n var styles = _a.styles, dynamic = _a.dynamic;\n useStyle(styles, dynamic);\n return null;\n };\n return Sheet;\n};\n","import * as React from 'react';\nimport { stylesheetSingleton } from './singleton';\n/**\n * creates a hook to control style singleton\n * @see {@link styleSingleton} for a safer component version\n * @example\n * ```tsx\n * const useStyle = styleHookSingleton();\n * ///\n * useStyle('body { overflow: hidden}');\n */\nexport var styleHookSingleton = function () {\n var sheet = stylesheetSingleton();\n return function (styles, isDynamic) {\n React.useEffect(function () {\n sheet.add(styles);\n return function () {\n sheet.remove();\n };\n }, [styles && isDynamic]);\n };\n};\n","import { getNonce } from 'get-nonce';\nfunction makeStyleTag() {\n if (!document)\n return null;\n var tag = document.createElement('style');\n tag.type = 'text/css';\n var nonce = getNonce();\n if (nonce) {\n tag.setAttribute('nonce', nonce);\n }\n return tag;\n}\nfunction injectStyles(tag, css) {\n // @ts-ignore\n if (tag.styleSheet) {\n // @ts-ignore\n tag.styleSheet.cssText = css;\n }\n else {\n tag.appendChild(document.createTextNode(css));\n }\n}\nfunction insertStyleTag(tag) {\n var head = document.head || document.getElementsByTagName('head')[0];\n head.appendChild(tag);\n}\nexport var stylesheetSingleton = function () {\n var counter = 0;\n var stylesheet = null;\n return {\n add: function (style) {\n if (counter == 0) {\n if ((stylesheet = makeStyleTag())) {\n injectStyles(stylesheet, style);\n insertStyleTag(stylesheet);\n }\n }\n counter++;\n },\n remove: function () {\n counter--;\n if (!counter && stylesheet) {\n stylesheet.parentNode && stylesheet.parentNode.removeChild(stylesheet);\n stylesheet = null;\n }\n },\n };\n};\n","var currentNonce;\nexport var setNonce = function (nonce) {\n currentNonce = nonce;\n};\nexport var getNonce = function () {\n if (currentNonce) {\n return currentNonce;\n }\n if (typeof __webpack_nonce__ !== 'undefined') {\n return __webpack_nonce__;\n }\n return undefined;\n};\n","export var zeroGap = {\n left: 0,\n top: 0,\n right: 0,\n gap: 0,\n};\nvar parse = function (x) { return parseInt(x || '', 10) || 0; };\nvar getOffset = function (gapMode) {\n var cs = window.getComputedStyle(document.body);\n var left = cs[gapMode === 'padding' ? 'paddingLeft' : 'marginLeft'];\n var top = cs[gapMode === 'padding' ? 'paddingTop' : 'marginTop'];\n var right = cs[gapMode === 'padding' ? 'paddingRight' : 'marginRight'];\n return [parse(left), parse(top), parse(right)];\n};\nexport var getGapWidth = function (gapMode) {\n if (gapMode === void 0) { gapMode = 'margin'; }\n if (typeof window === 'undefined') {\n return zeroGap;\n }\n var offsets = getOffset(gapMode);\n var documentWidth = document.documentElement.clientWidth;\n var windowWidth = window.innerWidth;\n return {\n left: offsets[0],\n top: offsets[1],\n right: offsets[2],\n gap: Math.max(0, windowWidth - documentWidth + offsets[2] - offsets[0]),\n };\n};\n","var passiveSupported = false;\nif (typeof window !== 'undefined') {\n try {\n var options = Object.defineProperty({}, 'passive', {\n get: function () {\n passiveSupported = true;\n return true;\n },\n });\n // @ts-ignore\n window.addEventListener('test', options, options);\n // @ts-ignore\n window.removeEventListener('test', options, options);\n }\n catch (err) {\n passiveSupported = false;\n }\n}\nexport var nonPassive = passiveSupported ? { passive: false } : false;\n","var alwaysContainsScroll = function (node) {\n // textarea will always _contain_ scroll inside self. It only can be hidden\n return node.tagName === 'TEXTAREA';\n};\nvar elementCanBeScrolled = function (node, overflow) {\n var styles = window.getComputedStyle(node);\n return (\n // not-not-scrollable\n styles[overflow] !== 'hidden' &&\n // contains scroll inside self\n !(styles.overflowY === styles.overflowX && !alwaysContainsScroll(node) && styles[overflow] === 'visible'));\n};\nvar elementCouldBeVScrolled = function (node) { return elementCanBeScrolled(node, 'overflowY'); };\nvar elementCouldBeHScrolled = function (node) { return elementCanBeScrolled(node, 'overflowX'); };\nexport var locationCouldBeScrolled = function (axis, node) {\n var current = node;\n do {\n // Skip over shadow root\n if (typeof ShadowRoot !== 'undefined' && current instanceof ShadowRoot) {\n current = current.host;\n }\n var isScrollable = elementCouldBeScrolled(axis, current);\n if (isScrollable) {\n var _a = getScrollVariables(axis, current), s = _a[1], d = _a[2];\n if (s > d) {\n return true;\n }\n }\n current = current.parentNode;\n } while (current && current !== document.body);\n return false;\n};\nvar getVScrollVariables = function (_a) {\n var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;\n return [\n scrollTop,\n scrollHeight,\n clientHeight,\n ];\n};\nvar getHScrollVariables = function (_a) {\n var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth;\n return [\n scrollLeft,\n scrollWidth,\n clientWidth,\n ];\n};\nvar elementCouldBeScrolled = function (axis, node) {\n return axis === 'v' ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node);\n};\nvar getScrollVariables = function (axis, node) {\n return axis === 'v' ? getVScrollVariables(node) : getHScrollVariables(node);\n};\nvar getDirectionFactor = function (axis, direction) {\n /**\n * If the element's direction is rtl (right-to-left), then scrollLeft is 0 when the scrollbar is at its rightmost position,\n * and then increasingly negative as you scroll towards the end of the content.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollLeft\n */\n return axis === 'h' && direction === 'rtl' ? -1 : 1;\n};\nexport var handleScroll = function (axis, endTarget, event, sourceDelta, noOverscroll) {\n var directionFactor = getDirectionFactor(axis, window.getComputedStyle(endTarget).direction);\n var delta = directionFactor * sourceDelta;\n // find scrollable target\n var target = event.target;\n var targetInLock = endTarget.contains(target);\n var shouldCancelScroll = false;\n var isDeltaPositive = delta > 0;\n var availableScroll = 0;\n var availableScrollTop = 0;\n do {\n var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2];\n var elementScroll = scroll_1 - capacity - directionFactor * position;\n if (position || elementScroll) {\n if (elementCouldBeScrolled(axis, target)) {\n availableScroll += elementScroll;\n availableScrollTop += position;\n }\n }\n target = target.parentNode;\n } while (\n // portaled content\n (!targetInLock && target !== document.body) ||\n // self content\n (targetInLock && (endTarget.contains(target) || endTarget === target)));\n if (isDeltaPositive && ((noOverscroll && availableScroll === 0) || (!noOverscroll && delta > availableScroll))) {\n shouldCancelScroll = true;\n }\n else if (!isDeltaPositive &&\n ((noOverscroll && availableScrollTop === 0) || (!noOverscroll && -delta > availableScrollTop))) {\n shouldCancelScroll = true;\n }\n return shouldCancelScroll;\n};\n","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { clamp } from '@radix-ui/number';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { createCollection } from '@radix-ui/react-collection';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useDirection } from '@radix-ui/react-direction';\nimport { DismissableLayer } from '@radix-ui/react-dismissable-layer';\nimport { useFocusGuards } from '@radix-ui/react-focus-guards';\nimport { FocusScope } from '@radix-ui/react-focus-scope';\nimport { useId } from '@radix-ui/react-id';\nimport * as PopperPrimitive from '@radix-ui/react-popper';\nimport { createPopperScope } from '@radix-ui/react-popper';\nimport { Portal as PortalPrimitive } from '@radix-ui/react-portal';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { Slot } from '@radix-ui/react-slot';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { usePrevious } from '@radix-ui/react-use-previous';\nimport { VisuallyHidden } from '@radix-ui/react-visually-hidden';\nimport { hideOthers } from 'aria-hidden';\nimport { RemoveScroll } from 'react-remove-scroll';\n\nimport type * as Radix from '@radix-ui/react-primitive';\nimport type { Scope } from '@radix-ui/react-context';\n\ntype Direction = 'ltr' | 'rtl';\n\nconst OPEN_KEYS = [' ', 'Enter', 'ArrowUp', 'ArrowDown'];\nconst SELECTION_KEYS = [' ', 'Enter'];\n\n/* -------------------------------------------------------------------------------------------------\n * Select\n * -----------------------------------------------------------------------------------------------*/\n\nconst SELECT_NAME = 'Select';\n\ntype ItemData = { value: string; disabled: boolean; textValue: string };\nconst [Collection, useCollection, createCollectionScope] = createCollection<\n SelectItemElement,\n ItemData\n>(SELECT_NAME);\n\ntype ScopedProps<P> = P & { __scopeSelect?: Scope };\nconst [createSelectContext, createSelectScope] = createContextScope(SELECT_NAME, [\n createCollectionScope,\n createPopperScope,\n]);\nconst usePopperScope = createPopperScope();\n\ntype SelectContextValue = {\n trigger: SelectTriggerElement | null;\n onTriggerChange(node: SelectTriggerElement | null): void;\n valueNode: SelectValueElement | null;\n onValueNodeChange(node: SelectValueElement): void;\n valueNodeHasChildren: boolean;\n onValueNodeHasChildrenChange(hasChildren: boolean): void;\n contentId: string;\n value?: string;\n onValueChange(value: string): void;\n open: boolean;\n required?: boolean;\n onOpenChange(open: boolean): void;\n dir: SelectProps['dir'];\n triggerPointerDownPosRef: React.MutableRefObject<{ x: number; y: number } | null>;\n disabled?: boolean;\n};\n\nconst [SelectProvider, useSelectContext] = createSelectContext<SelectContextValue>(SELECT_NAME);\n\ntype NativeOption = React.ReactElement<React.ComponentProps<'option'>>;\n\ntype SelectNativeOptionsContextValue = {\n onNativeOptionAdd(option: NativeOption): void;\n onNativeOptionRemove(option: NativeOption): void;\n};\nconst [SelectNativeOptionsProvider, useSelectNativeOptionsContext] =\n createSelectContext<SelectNativeOptionsContextValue>(SELECT_NAME);\n\ninterface SelectProps {\n children?: React.ReactNode;\n value?: string;\n defaultValue?: string;\n onValueChange?(value: string): void;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?(open: boolean): void;\n dir?: Direction;\n name?: string;\n autoComplete?: string;\n disabled?: boolean;\n required?: boolean;\n}\n\nconst Select: React.FC<SelectProps> = (props: ScopedProps<SelectProps>) => {\n const {\n __scopeSelect,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n value: valueProp,\n defaultValue,\n onValueChange,\n dir,\n name,\n autoComplete,\n disabled,\n required,\n } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const [trigger, setTrigger] = React.useState<SelectTriggerElement | null>(null);\n const [valueNode, setValueNode] = React.useState<SelectValueElement | null>(null);\n const [valueNodeHasChildren, setValueNodeHasChildren] = React.useState(false);\n const direction = useDirection(dir);\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n });\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue,\n onChange: onValueChange,\n });\n const triggerPointerDownPosRef = React.useRef<{ x: number; y: number } | null>(null);\n\n // We set this to true by default so that events bubble to forms without JS (SSR)\n const isFormControl = trigger ? Boolean(trigger.closest('form')) : true;\n const [nativeOptionsSet, setNativeOptionsSet] = React.useState(new Set<NativeOption>());\n\n // The native `select` only associates the correct default value if the corresponding\n // `option` is rendered as a child **at the same time** as itself.\n // Because it might take a few renders for our items to gather the information to build\n // the native `option`(s), we generate a key on the `select` to make sure React re-builds it\n // each time the options change.\n const nativeSelectKey = Array.from(nativeOptionsSet)\n .map((option) => option.props.value)\n .join(';');\n\n return (\n <PopperPrimitive.Root {...popperScope}>\n <SelectProvider\n required={required}\n scope={__scopeSelect}\n trigger={trigger}\n onTriggerChange={setTrigger}\n valueNode={valueNode}\n onValueNodeChange={setValueNode}\n valueNodeHasChildren={valueNodeHasChildren}\n onValueNodeHasChildrenChange={setValueNodeHasChildren}\n contentId={useId()}\n value={value}\n onValueChange={setValue}\n open={open}\n onOpenChange={setOpen}\n dir={direction}\n triggerPointerDownPosRef={triggerPointerDownPosRef}\n disabled={disabled}\n >\n <Collection.Provider scope={__scopeSelect}>\n <SelectNativeOptionsProvider\n scope={props.__scopeSelect}\n onNativeOptionAdd={React.useCallback((option) => {\n setNativeOptionsSet((prev) => new Set(prev).add(option));\n }, [])}\n onNativeOptionRemove={React.useCallback((option) => {\n setNativeOptionsSet((prev) => {\n const optionsSet = new Set(prev);\n optionsSet.delete(option);\n return optionsSet;\n });\n }, [])}\n >\n {children}\n </SelectNativeOptionsProvider>\n </Collection.Provider>\n\n {isFormControl ? (\n <BubbleSelect\n key={nativeSelectKey}\n aria-hidden\n required={required}\n tabIndex={-1}\n name={name}\n autoComplete={autoComplete}\n value={value}\n // enable form autofill\n onChange={(event) => setValue(event.target.value)}\n disabled={disabled}\n >\n {value === undefined ? <option value=\"\" /> : null}\n {Array.from(nativeOptionsSet)}\n </BubbleSelect>\n ) : null}\n </SelectProvider>\n </PopperPrimitive.Root>\n );\n};\n\nSelect.displayName = SELECT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'SelectTrigger';\n\ntype SelectTriggerElement = React.ElementRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = Radix.ComponentPropsWithoutRef<typeof Primitive.button>;\ninterface SelectTriggerProps extends PrimitiveButtonProps {}\n\nconst SelectTrigger = React.forwardRef<SelectTriggerElement, SelectTriggerProps>(\n (props: ScopedProps<SelectTriggerProps>, forwardedRef) => {\n const { __scopeSelect, disabled = false, ...triggerProps } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const context = useSelectContext(TRIGGER_NAME, __scopeSelect);\n const isDisabled = context.disabled || disabled;\n const composedRefs = useComposedRefs(forwardedRef, context.onTriggerChange);\n const getItems = useCollection(__scopeSelect);\n\n const [searchRef, handleTypeaheadSearch, resetTypeahead] = useTypeaheadSearch((search) => {\n const enabledItems = getItems().filter((item) => !item.disabled);\n const currentItem = enabledItems.find((item) => item.value === context.value);\n const nextItem = findNextItem(enabledItems, search, currentItem);\n if (nextItem !== undefined) {\n context.onValueChange(nextItem.value);\n }\n });\n\n const handleOpen = () => {\n if (!isDisabled) {\n context.onOpenChange(true);\n // reset typeahead when we open\n resetTypeahead();\n }\n };\n\n return (\n <PopperPrimitive.Anchor asChild {...popperScope}>\n <Primitive.button\n type=\"button\"\n role=\"combobox\"\n aria-controls={context.contentId}\n aria-expanded={context.open}\n aria-required={context.required}\n aria-autocomplete=\"none\"\n dir={context.dir}\n data-state={context.open ? 'open' : 'closed'}\n disabled={isDisabled}\n data-disabled={isDisabled ? '' : undefined}\n data-placeholder={shouldShowPlaceholder(context.value) ? '' : undefined}\n {...triggerProps}\n ref={composedRefs}\n // Enable compatibility with native label or custom `Label` \"click\" for Safari:\n onClick={composeEventHandlers(triggerProps.onClick, (event) => {\n // Whilst browsers generally have no issue focusing the trigger when clicking\n // on a label, Safari seems to struggle with the fact that there's no `onClick`.\n // We force `focus` in this case. Note: this doesn't create any other side-effect\n // because we are preventing default in `onPointerDown` so effectively\n // this only runs for a label \"click\"\n event.currentTarget.focus();\n })}\n onPointerDown={composeEventHandlers(triggerProps.onPointerDown, (event) => {\n // prevent implicit pointer capture\n // https://www.w3.org/TR/pointerevents3/#implicit-pointer-capture\n const target = event.target as HTMLElement;\n if (target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n }\n\n // only call handler if it's the left button (mousedown gets triggered by all mouse buttons)\n // but not when the control key is pressed (avoiding MacOS right click)\n if (event.button === 0 && event.ctrlKey === false) {\n handleOpen();\n context.triggerPointerDownPosRef.current = {\n x: Math.round(event.pageX),\n y: Math.round(event.pageY),\n };\n // prevent trigger from stealing focus from the active item after opening.\n event.preventDefault();\n }\n })}\n onKeyDown={composeEventHandlers(triggerProps.onKeyDown, (event) => {\n const isTypingAhead = searchRef.current !== '';\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);\n if (isTypingAhead && event.key === ' ') return;\n if (OPEN_KEYS.includes(event.key)) {\n handleOpen();\n event.preventDefault();\n }\n })}\n />\n </PopperPrimitive.Anchor>\n );\n }\n);\n\nSelectTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectValue\n * -----------------------------------------------------------------------------------------------*/\n\nconst VALUE_NAME = 'SelectValue';\n\ntype SelectValueElement = React.ElementRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = Radix.ComponentPropsWithoutRef<typeof Primitive.span>;\ninterface SelectValueProps extends Omit<PrimitiveSpanProps, 'placeholder'> {\n placeholder?: React.ReactNode;\n}\n\nconst SelectValue = React.forwardRef<SelectValueElement, SelectValueProps>(\n (props: ScopedProps<SelectValueProps>, forwardedRef) => {\n // We ignore `className` and `style` as this part shouldn't be styled.\n const { __scopeSelect, className, style, children, placeholder = '', ...valueProps } = props;\n const context = useSelectContext(VALUE_NAME, __scopeSelect);\n const { onValueNodeHasChildrenChange } = context;\n const hasChildren = children !== undefined;\n const composedRefs = useComposedRefs(forwardedRef, context.onValueNodeChange);\n\n useLayoutEffect(() => {\n onValueNodeHasChildrenChange(hasChildren);\n }, [onValueNodeHasChildrenChange, hasChildren]);\n\n return (\n <Primitive.span\n {...valueProps}\n ref={composedRefs}\n // we don't want events from the portalled `SelectValue` children to bubble\n // through the item they came from\n style={{ pointerEvents: 'none' }}\n >\n {shouldShowPlaceholder(context.value) ? <>{placeholder}</> : children}\n </Primitive.span>\n );\n }\n);\n\nSelectValue.displayName = VALUE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectIcon\n * -----------------------------------------------------------------------------------------------*/\n\nconst ICON_NAME = 'SelectIcon';\n\ntype SelectIconElement = React.ElementRef<typeof Primitive.span>;\ninterface SelectIconProps extends PrimitiveSpanProps {}\n\nconst SelectIcon = React.forwardRef<SelectIconElement, SelectIconProps>(\n (props: ScopedProps<SelectIconProps>, forwardedRef) => {\n const { __scopeSelect, children, ...iconProps } = props;\n return (\n <Primitive.span aria-hidden {...iconProps} ref={forwardedRef}>\n {children || '▼'}\n </Primitive.span>\n );\n }\n);\n\nSelectIcon.displayName = ICON_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'SelectPortal';\n\ntype PortalProps = React.ComponentPropsWithoutRef<typeof PortalPrimitive>;\ninterface SelectPortalProps {\n children?: React.ReactNode;\n /**\n * Specify a container element to portal the content into.\n */\n container?: PortalProps['container'];\n}\n\nconst SelectPortal: React.FC<SelectPortalProps> = (props: ScopedProps<SelectPortalProps>) => {\n return <PortalPrimitive asChild {...props} />;\n};\n\nSelectPortal.displayName = PORTAL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'SelectContent';\n\ntype SelectContentElement = SelectContentImplElement;\ninterface SelectContentProps extends SelectContentImplProps {}\n\nconst SelectContent = React.forwardRef<SelectContentElement, SelectContentProps>(\n (props: ScopedProps<SelectContentProps>, forwardedRef) => {\n const context = useSelectContext(CONTENT_NAME, props.__scopeSelect);\n const [fragment, setFragment] = React.useState<DocumentFragment>();\n\n // setting the fragment in `useLayoutEffect` as `DocumentFragment` doesn't exist on the server\n useLayoutEffect(() => {\n setFragment(new DocumentFragment());\n }, []);\n\n if (!context.open) {\n const frag = fragment as Element | undefined;\n return frag\n ? ReactDOM.createPortal(\n <SelectContentProvider scope={props.__scopeSelect}>\n <Collection.Slot scope={props.__scopeSelect}>\n <div>{props.children}</div>\n </Collection.Slot>\n </SelectContentProvider>,\n frag\n )\n : null;\n }\n\n return <SelectContentImpl {...props} ref={forwardedRef} />;\n }\n);\n\nSelectContent.displayName = CONTENT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectContentImpl\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_MARGIN = 10;\n\ntype SelectContentContextValue = {\n content?: SelectContentElement | null;\n viewport?: SelectViewportElement | null;\n onViewportChange?: (node: SelectViewportElement | null) => void;\n itemRefCallback?: (node: SelectItemElement | null, value: string, disabled: boolean) => void;\n selectedItem?: SelectItemElement | null;\n onItemLeave?: () => void;\n itemTextRefCallback?: (\n node: SelectItemTextElement | null,\n value: string,\n disabled: boolean\n ) => void;\n focusSelectedItem?: () => void;\n selectedItemText?: SelectItemTextElement | null;\n position?: SelectContentProps['position'];\n isPositioned?: boolean;\n searchRef?: React.RefObject<string>;\n};\n\nconst [SelectContentProvider, useSelectContentContext] =\n createSelectContext<SelectContentContextValue>(CONTENT_NAME);\n\nconst CONTENT_IMPL_NAME = 'SelectContentImpl';\n\ntype SelectContentImplElement = SelectPopperPositionElement | SelectItemAlignedPositionElement;\ntype DismissableLayerProps = React.ComponentPropsWithoutRef<typeof DismissableLayer>;\ntype FocusScopeProps = Radix.ComponentPropsWithoutRef<typeof FocusScope>;\n\ntype SelectPopperPrivateProps = { onPlaced?: PopperContentProps['onPlaced'] };\n\ninterface SelectContentImplProps\n extends Omit<SelectPopperPositionProps, keyof SelectPopperPrivateProps>,\n Omit<SelectItemAlignedPositionProps, keyof SelectPopperPrivateProps> {\n /**\n * Event handler called when auto-focusing on close.\n * Can be prevented.\n */\n onCloseAutoFocus?: FocusScopeProps['onUnmountAutoFocus'];\n /**\n * Event handler called when the escape key is down.\n * Can be prevented.\n */\n onEscapeKeyDown?: DismissableLayerProps['onEscapeKeyDown'];\n /**\n * Event handler called when the a `pointerdown` event happens outside of the `DismissableLayer`.\n * Can be prevented.\n */\n onPointerDownOutside?: DismissableLayerProps['onPointerDownOutside'];\n\n position?: 'item-aligned' | 'popper';\n}\n\nconst SelectContentImpl = React.forwardRef<SelectContentImplElement, SelectContentImplProps>(\n (props: ScopedProps<SelectContentImplProps>, forwardedRef) => {\n const {\n __scopeSelect,\n position = 'item-aligned',\n onCloseAutoFocus,\n onEscapeKeyDown,\n onPointerDownOutside,\n //\n // PopperContent props\n side,\n sideOffset,\n align,\n alignOffset,\n arrowPadding,\n collisionBoundary,\n collisionPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions,\n //\n ...contentProps\n } = props;\n const context = useSelectContext(CONTENT_NAME, __scopeSelect);\n const [content, setContent] = React.useState<SelectContentImplElement | null>(null);\n const [viewport, setViewport] = React.useState<SelectViewportElement | null>(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n const [selectedItem, setSelectedItem] = React.useState<SelectItemElement | null>(null);\n const [selectedItemText, setSelectedItemText] = React.useState<SelectItemTextElement | null>(\n null\n );\n const getItems = useCollection(__scopeSelect);\n const [isPositioned, setIsPositioned] = React.useState(false);\n const firstValidItemFoundRef = React.useRef(false);\n\n // aria-hide everything except the content (better supported equivalent to setting aria-modal)\n React.useEffect(() => {\n if (content) return hideOthers(content);\n }, [content]);\n\n // Make sure the whole tree has focus guards as our `Select` may be\n // the last element in the DOM (because of the `Portal`)\n useFocusGuards();\n\n const focusFirst = React.useCallback(\n (candidates: Array<HTMLElement | null>) => {\n const [firstItem, ...restItems] = getItems().map((item) => item.ref.current);\n const [lastItem] = restItems.slice(-1);\n\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n // if focus is already where we want to go, we don't want to keep going through the candidates\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate?.scrollIntoView({ block: 'nearest' });\n // viewport might have padding so scroll to its edges when focusing first/last items.\n if (candidate === firstItem && viewport) viewport.scrollTop = 0;\n if (candidate === lastItem && viewport) viewport.scrollTop = viewport.scrollHeight;\n candidate?.focus();\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n },\n [getItems, viewport]\n );\n\n const focusSelectedItem = React.useCallback(\n () => focusFirst([selectedItem, content]),\n [focusFirst, selectedItem, content]\n );\n\n // Since this is not dependent on layout, we want to ensure this runs at the same time as\n // other effects across components. Hence why we don't call `focusSelectedItem` inside `position`.\n React.useEffect(() => {\n if (isPositioned) {\n focusSelectedItem();\n }\n }, [isPositioned, focusSelectedItem]);\n\n // prevent selecting items on `pointerup` in some cases after opening from `pointerdown`\n // and close on `pointerup` outside.\n const { onOpenChange, triggerPointerDownPosRef } = context;\n React.useEffect(() => {\n if (content) {\n let pointerMoveDelta = { x: 0, y: 0 };\n\n const handlePointerMove = (event: PointerEvent) => {\n pointerMoveDelta = {\n x: Math.abs(Math.round(event.pageX) - (triggerPointerDownPosRef.current?.x ?? 0)),\n y: Math.abs(Math.round(event.pageY) - (triggerPointerDownPosRef.current?.y ?? 0)),\n };\n };\n const handlePointerUp = (event: PointerEvent) => {\n // If the pointer hasn't moved by a certain threshold then we prevent selecting item on `pointerup`.\n if (pointerMoveDelta.x <= 10 && pointerMoveDelta.y <= 10) {\n event.preventDefault();\n } else {\n // otherwise, if the event was outside the content, close.\n if (!content.contains(event.target as HTMLElement)) {\n onOpenChange(false);\n }\n }\n document.removeEventListener('pointermove', handlePointerMove);\n triggerPointerDownPosRef.current = null;\n };\n\n if (triggerPointerDownPosRef.current !== null) {\n document.addEventListener('pointermove', handlePointerMove);\n document.addEventListener('pointerup', handlePointerUp, { capture: true, once: true });\n }\n\n return () => {\n document.removeEventListener('pointermove', handlePointerMove);\n document.removeEventListener('pointerup', handlePointerUp, { capture: true });\n };\n }\n }, [content, onOpenChange, triggerPointerDownPosRef]);\n\n React.useEffect(() => {\n const close = () => onOpenChange(false);\n window.addEventListener('blur', close);\n window.addEventListener('resize', close);\n return () => {\n window.removeEventListener('blur', close);\n window.removeEventListener('resize', close);\n };\n }, [onOpenChange]);\n\n const [searchRef, handleTypeaheadSearch] = useTypeaheadSearch((search) => {\n const enabledItems = getItems().filter((item) => !item.disabled);\n const currentItem = enabledItems.find((item) => item.ref.current === document.activeElement);\n const nextItem = findNextItem(enabledItems, search, currentItem);\n if (nextItem) {\n /**\n * Imperative focus during keydown is risky so we prevent React's batching updates\n * to avoid potential bugs. See: https://github.com/facebook/react/issues/20332\n */\n setTimeout(() => (nextItem.ref.current as HTMLElement).focus());\n }\n });\n\n const itemRefCallback = React.useCallback(\n (node: SelectItemElement | null, value: string, disabled: boolean) => {\n const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;\n const isSelectedItem = context.value !== undefined && context.value === value;\n if (isSelectedItem || isFirstValidItem) {\n setSelectedItem(node);\n if (isFirstValidItem) firstValidItemFoundRef.current = true;\n }\n },\n [context.value]\n );\n const handleItemLeave = React.useCallback(() => content?.focus(), [content]);\n const itemTextRefCallback = React.useCallback(\n (node: SelectItemTextElement | null, value: string, disabled: boolean) => {\n const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;\n const isSelectedItem = context.value !== undefined && context.value === value;\n if (isSelectedItem || isFirstValidItem) {\n setSelectedItemText(node);\n }\n },\n [context.value]\n );\n\n const SelectPosition = position === 'popper' ? SelectPopperPosition : SelectItemAlignedPosition;\n\n // Silently ignore props that are not supported by `SelectItemAlignedPosition`\n const popperContentProps =\n SelectPosition === SelectPopperPosition\n ? {\n side,\n sideOffset,\n align,\n alignOffset,\n arrowPadding,\n collisionBoundary,\n collisionPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions,\n }\n : {};\n\n return (\n <SelectContentProvider\n scope={__scopeSelect}\n content={content}\n viewport={viewport}\n onViewportChange={setViewport}\n itemRefCallback={itemRefCallback}\n selectedItem={selectedItem}\n onItemLeave={handleItemLeave}\n itemTextRefCallback={itemTextRefCallback}\n focusSelectedItem={focusSelectedItem}\n selectedItemText={selectedItemText}\n position={position}\n isPositioned={isPositioned}\n searchRef={searchRef}\n >\n <RemoveScroll as={Slot} allowPinchZoom>\n <FocusScope\n asChild\n // we make sure we're not trapping once it's been closed\n // (closed !== unmounted when animating out)\n trapped={context.open}\n onMountAutoFocus={(event) => {\n // we prevent open autofocus because we manually focus the selected item\n event.preventDefault();\n }}\n onUnmountAutoFocus={composeEventHandlers(onCloseAutoFocus, (event) => {\n context.trigger?.focus({ preventScroll: true });\n event.preventDefault();\n })}\n >\n <DismissableLayer\n asChild\n disableOutsidePointerEvents\n onEscapeKeyDown={onEscapeKeyDown}\n onPointerDownOutside={onPointerDownOutside}\n // When focus is trapped, a focusout event may still happen.\n // We make sure we don't trigger our `onDismiss` in such case.\n onFocusOutside={(event) => event.preventDefault()}\n onDismiss={() => context.onOpenChange(false)}\n >\n <SelectPosition\n role=\"listbox\"\n id={context.contentId}\n data-state={context.open ? 'open' : 'closed'}\n dir={context.dir}\n onContextMenu={(event) => event.preventDefault()}\n {...contentProps}\n {...popperContentProps}\n onPlaced={() => setIsPositioned(true)}\n ref={composedRefs}\n style={{\n // flex layout so we can place the scroll buttons properly\n display: 'flex',\n flexDirection: 'column',\n // reset the outline by default as the content MAY get focused\n outline: 'none',\n ...contentProps.style,\n }}\n onKeyDown={composeEventHandlers(contentProps.onKeyDown, (event) => {\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n\n // select should not be navigated using tab key so we prevent it\n if (event.key === 'Tab') event.preventDefault();\n\n if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);\n\n if (['ArrowUp', 'ArrowDown', 'Home', 'End'].includes(event.key)) {\n const items = getItems().filter((item) => !item.disabled);\n let candidateNodes = items.map((item) => item.ref.current!);\n\n if (['ArrowUp', 'End'].includes(event.key)) {\n candidateNodes = candidateNodes.slice().reverse();\n }\n if (['ArrowUp', 'ArrowDown'].includes(event.key)) {\n const currentElement = event.target as SelectItemElement;\n const currentIndex = candidateNodes.indexOf(currentElement);\n candidateNodes = candidateNodes.slice(currentIndex + 1);\n }\n\n /**\n * Imperative focus during keydown is risky so we prevent React's batching updates\n * to avoid potential bugs. See: https://github.com/facebook/react/issues/20332\n */\n setTimeout(() => focusFirst(candidateNodes));\n\n event.preventDefault();\n }\n })}\n />\n </DismissableLayer>\n </FocusScope>\n </RemoveScroll>\n </SelectContentProvider>\n );\n }\n);\n\nSelectContentImpl.displayName = CONTENT_IMPL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectItemAlignedPosition\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_ALIGNED_POSITION_NAME = 'SelectItemAlignedPosition';\n\ntype SelectItemAlignedPositionElement = React.ElementRef<typeof Primitive.div>;\ninterface SelectItemAlignedPositionProps extends PrimitiveDivProps, SelectPopperPrivateProps {}\n\nconst SelectItemAlignedPosition = React.forwardRef<\n SelectItemAlignedPositionElement,\n SelectItemAlignedPositionProps\n>((props: ScopedProps<SelectItemAlignedPositionProps>, forwardedRef) => {\n const { __scopeSelect, onPlaced, ...popperProps } = props;\n const context = useSelectContext(CONTENT_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(CONTENT_NAME, __scopeSelect);\n const [contentWrapper, setContentWrapper] = React.useState<HTMLDivElement | null>(null);\n const [content, setContent] = React.useState<SelectItemAlignedPositionElement | null>(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n const getItems = useCollection(__scopeSelect);\n const shouldExpandOnScrollRef = React.useRef(false);\n const shouldRepositionRef = React.useRef(true);\n\n const { viewport, selectedItem, selectedItemText, focusSelectedItem } = contentContext;\n const position = React.useCallback(() => {\n if (\n context.trigger &&\n context.valueNode &&\n contentWrapper &&\n content &&\n viewport &&\n selectedItem &&\n selectedItemText\n ) {\n const triggerRect = context.trigger.getBoundingClientRect();\n\n // -----------------------------------------------------------------------------------------\n // Horizontal positioning\n // -----------------------------------------------------------------------------------------\n const contentRect = content.getBoundingClientRect();\n const valueNodeRect = context.valueNode.getBoundingClientRect();\n const itemTextRect = selectedItemText.getBoundingClientRect();\n\n if (context.dir !== 'rtl') {\n const itemTextOffset = itemTextRect.left - contentRect.left;\n const left = valueNodeRect.left - itemTextOffset;\n const leftDelta = triggerRect.left - left;\n const minContentWidth = triggerRect.width + leftDelta;\n const contentWidth = Math.max(minContentWidth, contentRect.width);\n const rightEdge = window.innerWidth - CONTENT_MARGIN;\n const clampedLeft = clamp(left, [CONTENT_MARGIN, rightEdge - contentWidth]);\n\n contentWrapper.style.minWidth = minContentWidth + 'px';\n contentWrapper.style.left = clampedLeft + 'px';\n } else {\n const itemTextOffset = contentRect.right - itemTextRect.right;\n const right = window.innerWidth - valueNodeRect.right - itemTextOffset;\n const rightDelta = window.innerWidth - triggerRect.right - right;\n const minContentWidth = triggerRect.width + rightDelta;\n const contentWidth = Math.max(minContentWidth, contentRect.width);\n const leftEdge = window.innerWidth - CONTENT_MARGIN;\n const clampedRight = clamp(right, [CONTENT_MARGIN, leftEdge - contentWidth]);\n\n contentWrapper.style.minWidth = minContentWidth + 'px';\n contentWrapper.style.right = clampedRight + 'px';\n }\n\n // -----------------------------------------------------------------------------------------\n // Vertical positioning\n // -----------------------------------------------------------------------------------------\n const items = getItems();\n const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;\n const itemsHeight = viewport.scrollHeight;\n\n const contentStyles = window.getComputedStyle(content);\n const contentBorderTopWidth = parseInt(contentStyles.borderTopWidth, 10);\n const contentPaddingTop = parseInt(contentStyles.paddingTop, 10);\n const contentBorderBottomWidth = parseInt(contentStyles.borderBottomWidth, 10);\n const contentPaddingBottom = parseInt(contentStyles.paddingBottom, 10);\n const fullContentHeight = contentBorderTopWidth + contentPaddingTop + itemsHeight + contentPaddingBottom + contentBorderBottomWidth; // prettier-ignore\n const minContentHeight = Math.min(selectedItem.offsetHeight * 5, fullContentHeight);\n\n const viewportStyles = window.getComputedStyle(viewport);\n const viewportPaddingTop = parseInt(viewportStyles.paddingTop, 10);\n const viewportPaddingBottom = parseInt(viewportStyles.paddingBottom, 10);\n\n const topEdgeToTriggerMiddle = triggerRect.top + triggerRect.height / 2 - CONTENT_MARGIN;\n const triggerMiddleToBottomEdge = availableHeight - topEdgeToTriggerMiddle;\n\n const selectedItemHalfHeight = selectedItem.offsetHeight / 2;\n const itemOffsetMiddle = selectedItem.offsetTop + selectedItemHalfHeight;\n const contentTopToItemMiddle = contentBorderTopWidth + contentPaddingTop + itemOffsetMiddle;\n const itemMiddleToContentBottom = fullContentHeight - contentTopToItemMiddle;\n\n const willAlignWithoutTopOverflow = contentTopToItemMiddle <= topEdgeToTriggerMiddle;\n\n if (willAlignWithoutTopOverflow) {\n const isLastItem = selectedItem === items[items.length - 1].ref.current;\n contentWrapper.style.bottom = 0 + 'px';\n const viewportOffsetBottom =\n content.clientHeight - viewport.offsetTop - viewport.offsetHeight;\n const clampedTriggerMiddleToBottomEdge = Math.max(\n triggerMiddleToBottomEdge,\n selectedItemHalfHeight +\n // viewport might have padding bottom, include it to avoid a scrollable viewport\n (isLastItem ? viewportPaddingBottom : 0) +\n viewportOffsetBottom +\n contentBorderBottomWidth\n );\n const height = contentTopToItemMiddle + clampedTriggerMiddleToBottomEdge;\n contentWrapper.style.height = height + 'px';\n } else {\n const isFirstItem = selectedItem === items[0].ref.current;\n contentWrapper.style.top = 0 + 'px';\n const clampedTopEdgeToTriggerMiddle = Math.max(\n topEdgeToTriggerMiddle,\n contentBorderTopWidth +\n viewport.offsetTop +\n // viewport might have padding top, include it to avoid a scrollable viewport\n (isFirstItem ? viewportPaddingTop : 0) +\n selectedItemHalfHeight\n );\n const height = clampedTopEdgeToTriggerMiddle + itemMiddleToContentBottom;\n contentWrapper.style.height = height + 'px';\n viewport.scrollTop = contentTopToItemMiddle - topEdgeToTriggerMiddle + viewport.offsetTop;\n }\n\n contentWrapper.style.margin = `${CONTENT_MARGIN}px 0`;\n contentWrapper.style.minHeight = minContentHeight + 'px';\n contentWrapper.style.maxHeight = availableHeight + 'px';\n // -----------------------------------------------------------------------------------------\n\n onPlaced?.();\n\n // we don't want the initial scroll position adjustment to trigger \"expand on scroll\"\n // so we explicitly turn it on only after they've registered.\n requestAnimationFrame(() => (shouldExpandOnScrollRef.current = true));\n }\n }, [\n getItems,\n context.trigger,\n context.valueNode,\n contentWrapper,\n content,\n viewport,\n selectedItem,\n selectedItemText,\n context.dir,\n onPlaced,\n ]);\n\n useLayoutEffect(() => position(), [position]);\n\n // copy z-index from content to wrapper\n const [contentZIndex, setContentZIndex] = React.useState<string>();\n useLayoutEffect(() => {\n if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n }, [content]);\n\n // When the viewport becomes scrollable at the top, the scroll up button will mount.\n // Because it is part of the normal flow, it will push down the viewport, thus throwing our\n // trigger => selectedItem alignment off by the amount the viewport was pushed down.\n // We wait for this to happen and then re-run the positining logic one more time to account for it.\n const handleScrollButtonChange = React.useCallback(\n (node: SelectScrollButtonImplElement | null) => {\n if (node && shouldRepositionRef.current === true) {\n position();\n focusSelectedItem?.();\n shouldRepositionRef.current = false;\n }\n },\n [position, focusSelectedItem]\n );\n\n return (\n <SelectViewportProvider\n scope={__scopeSelect}\n contentWrapper={contentWrapper}\n shouldExpandOnScrollRef={shouldExpandOnScrollRef}\n onScrollButtonChange={handleScrollButtonChange}\n >\n <div\n ref={setContentWrapper}\n style={{\n display: 'flex',\n flexDirection: 'column',\n position: 'fixed',\n zIndex: contentZIndex,\n }}\n >\n <Primitive.div\n {...popperProps}\n ref={composedRefs}\n style={{\n // When we get the height of the content, it includes borders. If we were to set\n // the height without having `boxSizing: 'border-box'` it would be too big.\n boxSizing: 'border-box',\n // We need to ensure the content doesn't get taller than the wrapper\n maxHeight: '100%',\n ...popperProps.style,\n }}\n />\n </div>\n </SelectViewportProvider>\n );\n});\n\nSelectItemAlignedPosition.displayName = ITEM_ALIGNED_POSITION_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectPopperPosition\n * -----------------------------------------------------------------------------------------------*/\n\nconst POPPER_POSITION_NAME = 'SelectPopperPosition';\n\ntype SelectPopperPositionElement = React.ElementRef<typeof PopperPrimitive.Content>;\ntype PopperContentProps = React.ComponentPropsWithoutRef<typeof PopperPrimitive.Content>;\ninterface SelectPopperPositionProps extends PopperContentProps, SelectPopperPrivateProps {}\n\nconst SelectPopperPosition = React.forwardRef<\n SelectPopperPositionElement,\n SelectPopperPositionProps\n>((props: ScopedProps<SelectPopperPositionProps>, forwardedRef) => {\n const {\n __scopeSelect,\n align = 'start',\n collisionPadding = CONTENT_MARGIN,\n ...popperProps\n } = props;\n const popperScope = usePopperScope(__scopeSelect);\n\n return (\n <PopperPrimitive.Content\n {...popperScope}\n {...popperProps}\n ref={forwardedRef}\n align={align}\n collisionPadding={collisionPadding}\n style={{\n // Ensure border-box for floating-ui calculations\n boxSizing: 'border-box',\n ...popperProps.style,\n // re-namespace exposed content custom properties\n ...{\n '--radix-select-content-transform-origin': 'var(--radix-popper-transform-origin)',\n '--radix-select-content-available-width': 'var(--radix-popper-available-width)',\n '--radix-select-content-available-height': 'var(--radix-popper-available-height)',\n '--radix-select-trigger-width': 'var(--radix-popper-anchor-width)',\n '--radix-select-trigger-height': 'var(--radix-popper-anchor-height)',\n },\n }}\n />\n );\n});\n\nSelectPopperPosition.displayName = POPPER_POSITION_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectViewport\n * -----------------------------------------------------------------------------------------------*/\n\ntype SelectViewportContextValue = {\n contentWrapper?: HTMLDivElement | null;\n shouldExpandOnScrollRef?: React.RefObject<boolean>;\n onScrollButtonChange?: (node: SelectScrollButtonImplElement | null) => void;\n};\n\nconst [SelectViewportProvider, useSelectViewportContext] =\n createSelectContext<SelectViewportContextValue>(CONTENT_NAME, {});\n\nconst VIEWPORT_NAME = 'SelectViewport';\n\ntype SelectViewportElement = React.ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = Radix.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface SelectViewportProps extends PrimitiveDivProps {}\n\nconst SelectViewport = React.forwardRef<SelectViewportElement, SelectViewportProps>(\n (props: ScopedProps<SelectViewportProps>, forwardedRef) => {\n const { __scopeSelect, ...viewportProps } = props;\n const contentContext = useSelectContentContext(VIEWPORT_NAME, __scopeSelect);\n const viewportContext = useSelectViewportContext(VIEWPORT_NAME, __scopeSelect);\n const composedRefs = useComposedRefs(forwardedRef, contentContext.onViewportChange);\n const prevScrollTopRef = React.useRef(0);\n return (\n <>\n {/* Hide scrollbars cross-browser and enable momentum scroll for touch devices */}\n <style\n dangerouslySetInnerHTML={{\n __html: `[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}`,\n }}\n />\n <Collection.Slot scope={__scopeSelect}>\n <Primitive.div\n data-radix-select-viewport=\"\"\n role=\"presentation\"\n {...viewportProps}\n ref={composedRefs}\n style={{\n // we use position: 'relative' here on the `viewport` so that when we call\n // `selectedItem.offsetTop` in calculations, the offset is relative to the viewport\n // (independent of the scrollUpButton).\n position: 'relative',\n flex: 1,\n overflow: 'auto',\n ...viewportProps.style,\n }}\n onScroll={composeEventHandlers(viewportProps.onScroll, (event) => {\n const viewport = event.currentTarget;\n const { contentWrapper, shouldExpandOnScrollRef } = viewportContext;\n if (shouldExpandOnScrollRef?.current && contentWrapper) {\n const scrolledBy = Math.abs(prevScrollTopRef.current - viewport.scrollTop);\n if (scrolledBy > 0) {\n const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;\n const cssMinHeight = parseFloat(contentWrapper.style.minHeight);\n const cssHeight = parseFloat(contentWrapper.style.height);\n const prevHeight = Math.max(cssMinHeight, cssHeight);\n\n if (prevHeight < availableHeight) {\n const nextHeight = prevHeight + scrolledBy;\n const clampedNextHeight = Math.min(availableHeight, nextHeight);\n const heightDiff = nextHeight - clampedNextHeight;\n\n contentWrapper.style.height = clampedNextHeight + 'px';\n if (contentWrapper.style.bottom === '0px') {\n viewport.scrollTop = heightDiff > 0 ? heightDiff : 0;\n // ensure the content stays pinned to the bottom\n contentWrapper.style.justifyContent = 'flex-end';\n }\n }\n }\n }\n prevScrollTopRef.current = viewport.scrollTop;\n })}\n />\n </Collection.Slot>\n </>\n );\n }\n);\n\nSelectViewport.displayName = VIEWPORT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectGroup\n * -----------------------------------------------------------------------------------------------*/\n\nconst GROUP_NAME = 'SelectGroup';\n\ntype SelectGroupContextValue = { id: string };\n\nconst [SelectGroupContextProvider, useSelectGroupContext] =\n createSelectContext<SelectGroupContextValue>(GROUP_NAME);\n\ntype SelectGroupElement = React.ElementRef<typeof Primitive.div>;\ninterface SelectGroupProps extends PrimitiveDivProps {}\n\nconst SelectGroup = React.forwardRef<SelectGroupElement, SelectGroupProps>(\n (props: ScopedProps<SelectGroupProps>, forwardedRef) => {\n const { __scopeSelect, ...groupProps } = props;\n const groupId = useId();\n return (\n <SelectGroupContextProvider scope={__scopeSelect} id={groupId}>\n <Primitive.div role=\"group\" aria-labelledby={groupId} {...groupProps} ref={forwardedRef} />\n </SelectGroupContextProvider>\n );\n }\n);\n\nSelectGroup.displayName = GROUP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectLabel\n * -----------------------------------------------------------------------------------------------*/\n\nconst LABEL_NAME = 'SelectLabel';\n\ntype SelectLabelElement = React.ElementRef<typeof Primitive.div>;\ninterface SelectLabelProps extends PrimitiveDivProps {}\n\nconst SelectLabel = React.forwardRef<SelectLabelElement, SelectLabelProps>(\n (props: ScopedProps<SelectLabelProps>, forwardedRef) => {\n const { __scopeSelect, ...labelProps } = props;\n const groupContext = useSelectGroupContext(LABEL_NAME, __scopeSelect);\n return <Primitive.div id={groupContext.id} {...labelProps} ref={forwardedRef} />;\n }\n);\n\nSelectLabel.displayName = LABEL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_NAME = 'SelectItem';\n\ntype SelectItemContextValue = {\n value: string;\n disabled: boolean;\n textId: string;\n isSelected: boolean;\n onItemTextChange(node: SelectItemTextElement | null): void;\n};\n\nconst [SelectItemContextProvider, useSelectItemContext] =\n createSelectContext<SelectItemContextValue>(ITEM_NAME);\n\ntype SelectItemElement = React.ElementRef<typeof Primitive.div>;\ninterface SelectItemProps extends PrimitiveDivProps {\n value: string;\n disabled?: boolean;\n textValue?: string;\n}\n\nconst SelectItem = React.forwardRef<SelectItemElement, SelectItemProps>(\n (props: ScopedProps<SelectItemProps>, forwardedRef) => {\n const {\n __scopeSelect,\n value,\n disabled = false,\n textValue: textValueProp,\n ...itemProps\n } = props;\n const context = useSelectContext(ITEM_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ITEM_NAME, __scopeSelect);\n const isSelected = context.value === value;\n const [textValue, setTextValue] = React.useState(textValueProp ?? '');\n const [isFocused, setIsFocused] = React.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, (node) =>\n contentContext.itemRefCallback?.(node, value, disabled)\n );\n const textId = useId();\n\n const handleSelect = () => {\n if (!disabled) {\n context.onValueChange(value);\n context.onOpenChange(false);\n }\n };\n\n if (value === '') {\n throw new Error(\n 'A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.'\n );\n }\n\n return (\n <SelectItemContextProvider\n scope={__scopeSelect}\n value={value}\n disabled={disabled}\n textId={textId}\n isSelected={isSelected}\n onItemTextChange={React.useCallback((node) => {\n setTextValue((prevTextValue) => prevTextValue || (node?.textContent ?? '').trim());\n }, [])}\n >\n <Collection.ItemSlot\n scope={__scopeSelect}\n value={value}\n disabled={disabled}\n textValue={textValue}\n >\n <Primitive.div\n role=\"option\"\n aria-labelledby={textId}\n data-highlighted={isFocused ? '' : undefined}\n // `isFocused` caveat fixes stuttering in VoiceOver\n aria-selected={isSelected && isFocused}\n data-state={isSelected ? 'checked' : 'unchecked'}\n aria-disabled={disabled || undefined}\n data-disabled={disabled ? '' : undefined}\n tabIndex={disabled ? undefined : -1}\n {...itemProps}\n ref={composedRefs}\n onFocus={composeEventHandlers(itemProps.onFocus, () => setIsFocused(true))}\n onBlur={composeEventHandlers(itemProps.onBlur, () => setIsFocused(false))}\n onPointerUp={composeEventHandlers(itemProps.onPointerUp, handleSelect)}\n onPointerMove={composeEventHandlers(itemProps.onPointerMove, (event) => {\n if (disabled) {\n contentContext.onItemLeave?.();\n } else {\n // even though safari doesn't support this option, it's acceptable\n // as it only means it might scroll a few pixels when using the pointer.\n event.currentTarget.focus({ preventScroll: true });\n }\n })}\n onPointerLeave={composeEventHandlers(itemProps.onPointerLeave, (event) => {\n if (event.currentTarget === document.activeElement) {\n contentContext.onItemLeave?.();\n }\n })}\n onKeyDown={composeEventHandlers(itemProps.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef?.current !== '';\n if (isTypingAhead && event.key === ' ') return;\n if (SELECTION_KEYS.includes(event.key)) handleSelect();\n // prevent page scroll if using the space key to select an item\n if (event.key === ' ') event.preventDefault();\n })}\n />\n </Collection.ItemSlot>\n </SelectItemContextProvider>\n );\n }\n);\n\nSelectItem.displayName = ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectItemText\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_TEXT_NAME = 'SelectItemText';\n\ntype SelectItemTextElement = React.ElementRef<typeof Primitive.span>;\ninterface SelectItemTextProps extends PrimitiveSpanProps {}\n\nconst SelectItemText = React.forwardRef<SelectItemTextElement, SelectItemTextProps>(\n (props: ScopedProps<SelectItemTextProps>, forwardedRef) => {\n // We ignore `className` and `style` as this part shouldn't be styled.\n const { __scopeSelect, className, style, ...itemTextProps } = props;\n const context = useSelectContext(ITEM_TEXT_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ITEM_TEXT_NAME, __scopeSelect);\n const itemContext = useSelectItemContext(ITEM_TEXT_NAME, __scopeSelect);\n const nativeOptionsContext = useSelectNativeOptionsContext(ITEM_TEXT_NAME, __scopeSelect);\n const [itemTextNode, setItemTextNode] = React.useState<SelectItemTextElement | null>(null);\n const composedRefs = useComposedRefs(\n forwardedRef,\n (node) => setItemTextNode(node),\n itemContext.onItemTextChange,\n (node) => contentContext.itemTextRefCallback?.(node, itemContext.value, itemContext.disabled)\n );\n\n const textContent = itemTextNode?.textContent;\n const nativeOption = React.useMemo(\n () => (\n <option key={itemContext.value} value={itemContext.value} disabled={itemContext.disabled}>\n {textContent}\n </option>\n ),\n [itemContext.disabled, itemContext.value, textContent]\n );\n\n const { onNativeOptionAdd, onNativeOptionRemove } = nativeOptionsContext;\n useLayoutEffect(() => {\n onNativeOptionAdd(nativeOption);\n return () => onNativeOptionRemove(nativeOption);\n }, [onNativeOptionAdd, onNativeOptionRemove, nativeOption]);\n\n return (\n <>\n <Primitive.span id={itemContext.textId} {...itemTextProps} ref={composedRefs} />\n\n {/* Portal the select item text into the trigger value node */}\n {itemContext.isSelected && context.valueNode && !context.valueNodeHasChildren\n ? ReactDOM.createPortal(itemTextProps.children, context.valueNode)\n : null}\n </>\n );\n }\n);\n\nSelectItemText.displayName = ITEM_TEXT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectItemIndicator\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_INDICATOR_NAME = 'SelectItemIndicator';\n\ntype SelectItemIndicatorElement = React.ElementRef<typeof Primitive.span>;\ninterface SelectItemIndicatorProps extends PrimitiveSpanProps {}\n\nconst SelectItemIndicator = React.forwardRef<SelectItemIndicatorElement, SelectItemIndicatorProps>(\n (props: ScopedProps<SelectItemIndicatorProps>, forwardedRef) => {\n const { __scopeSelect, ...itemIndicatorProps } = props;\n const itemContext = useSelectItemContext(ITEM_INDICATOR_NAME, __scopeSelect);\n return itemContext.isSelected ? (\n <Primitive.span aria-hidden {...itemIndicatorProps} ref={forwardedRef} />\n ) : null;\n }\n);\n\nSelectItemIndicator.displayName = ITEM_INDICATOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectScrollUpButton\n * -----------------------------------------------------------------------------------------------*/\n\nconst SCROLL_UP_BUTTON_NAME = 'SelectScrollUpButton';\n\ntype SelectScrollUpButtonElement = SelectScrollButtonImplElement;\ninterface SelectScrollUpButtonProps extends Omit<SelectScrollButtonImplProps, 'onAutoScroll'> {}\n\nconst SelectScrollUpButton = React.forwardRef<\n SelectScrollUpButtonElement,\n SelectScrollUpButtonProps\n>((props: ScopedProps<SelectScrollUpButtonProps>, forwardedRef) => {\n const contentContext = useSelectContentContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);\n const viewportContext = useSelectViewportContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);\n const [canScrollUp, setCanScrollUp] = React.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);\n\n useLayoutEffect(() => {\n if (contentContext.viewport && contentContext.isPositioned) {\n const viewport = contentContext.viewport;\n function handleScroll() {\n const canScrollUp = viewport.scrollTop > 0;\n setCanScrollUp(canScrollUp);\n }\n handleScroll();\n viewport.addEventListener('scroll', handleScroll);\n return () => viewport.removeEventListener('scroll', handleScroll);\n }\n }, [contentContext.viewport, contentContext.isPositioned]);\n\n return canScrollUp ? (\n <SelectScrollButtonImpl\n {...props}\n ref={composedRefs}\n onAutoScroll={() => {\n const { viewport, selectedItem } = contentContext;\n if (viewport && selectedItem) {\n viewport.scrollTop = viewport.scrollTop - selectedItem.offsetHeight;\n }\n }}\n />\n ) : null;\n});\n\nSelectScrollUpButton.displayName = SCROLL_UP_BUTTON_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectScrollDownButton\n * -----------------------------------------------------------------------------------------------*/\n\nconst SCROLL_DOWN_BUTTON_NAME = 'SelectScrollDownButton';\n\ntype SelectScrollDownButtonElement = SelectScrollButtonImplElement;\ninterface SelectScrollDownButtonProps extends Omit<SelectScrollButtonImplProps, 'onAutoScroll'> {}\n\nconst SelectScrollDownButton = React.forwardRef<\n SelectScrollDownButtonElement,\n SelectScrollDownButtonProps\n>((props: ScopedProps<SelectScrollDownButtonProps>, forwardedRef) => {\n const contentContext = useSelectContentContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);\n const viewportContext = useSelectViewportContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);\n const [canScrollDown, setCanScrollDown] = React.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);\n\n useLayoutEffect(() => {\n if (contentContext.viewport && contentContext.isPositioned) {\n const viewport = contentContext.viewport;\n function handleScroll() {\n const maxScroll = viewport.scrollHeight - viewport.clientHeight;\n // we use Math.ceil here because if the UI is zoomed-in\n // `scrollTop` is not always reported as an integer\n const canScrollDown = Math.ceil(viewport.scrollTop) < maxScroll;\n setCanScrollDown(canScrollDown);\n }\n handleScroll();\n viewport.addEventListener('scroll', handleScroll);\n return () => viewport.removeEventListener('scroll', handleScroll);\n }\n }, [contentContext.viewport, contentContext.isPositioned]);\n\n return canScrollDown ? (\n <SelectScrollButtonImpl\n {...props}\n ref={composedRefs}\n onAutoScroll={() => {\n const { viewport, selectedItem } = contentContext;\n if (viewport && selectedItem) {\n viewport.scrollTop = viewport.scrollTop + selectedItem.offsetHeight;\n }\n }}\n />\n ) : null;\n});\n\nSelectScrollDownButton.displayName = SCROLL_DOWN_BUTTON_NAME;\n\ntype SelectScrollButtonImplElement = React.ElementRef<typeof Primitive.div>;\ninterface SelectScrollButtonImplProps extends PrimitiveDivProps {\n onAutoScroll(): void;\n}\n\nconst SelectScrollButtonImpl = React.forwardRef<\n SelectScrollButtonImplElement,\n SelectScrollButtonImplProps\n>((props: ScopedProps<SelectScrollButtonImplProps>, forwardedRef) => {\n const { __scopeSelect, onAutoScroll, ...scrollIndicatorProps } = props;\n const contentContext = useSelectContentContext('SelectScrollButton', __scopeSelect);\n const autoScrollTimerRef = React.useRef<number | null>(null);\n const getItems = useCollection(__scopeSelect);\n\n const clearAutoScrollTimer = React.useCallback(() => {\n if (autoScrollTimerRef.current !== null) {\n window.clearInterval(autoScrollTimerRef.current);\n autoScrollTimerRef.current = null;\n }\n }, []);\n\n React.useEffect(() => {\n return () => clearAutoScrollTimer();\n }, [clearAutoScrollTimer]);\n\n // When the viewport becomes scrollable on either side, the relevant scroll button will mount.\n // Because it is part of the normal flow, it will push down (top button) or shrink (bottom button)\n // the viewport, potentially causing the active item to now be partially out of view.\n // We re-run the `scrollIntoView` logic to make sure it stays within the viewport.\n useLayoutEffect(() => {\n const activeItem = getItems().find((item) => item.ref.current === document.activeElement);\n activeItem?.ref.current?.scrollIntoView({ block: 'nearest' });\n }, [getItems]);\n\n return (\n <Primitive.div\n aria-hidden\n {...scrollIndicatorProps}\n ref={forwardedRef}\n style={{ flexShrink: 0, ...scrollIndicatorProps.style }}\n onPointerDown={composeEventHandlers(scrollIndicatorProps.onPointerDown, () => {\n if (autoScrollTimerRef.current === null) {\n autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);\n }\n })}\n onPointerMove={composeEventHandlers(scrollIndicatorProps.onPointerMove, () => {\n contentContext.onItemLeave?.();\n if (autoScrollTimerRef.current === null) {\n autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);\n }\n })}\n onPointerLeave={composeEventHandlers(scrollIndicatorProps.onPointerLeave, () => {\n clearAutoScrollTimer();\n })}\n />\n );\n});\n\n/* -------------------------------------------------------------------------------------------------\n * SelectSeparator\n * -----------------------------------------------------------------------------------------------*/\n\nconst SEPARATOR_NAME = 'SelectSeparator';\n\ntype SelectSeparatorElement = React.ElementRef<typeof Primitive.div>;\ninterface SelectSeparatorProps extends PrimitiveDivProps {}\n\nconst SelectSeparator = React.forwardRef<SelectSeparatorElement, SelectSeparatorProps>(\n (props: ScopedProps<SelectSeparatorProps>, forwardedRef) => {\n const { __scopeSelect, ...separatorProps } = props;\n return <Primitive.div aria-hidden {...separatorProps} ref={forwardedRef} />;\n }\n);\n\nSelectSeparator.displayName = SEPARATOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectArrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst ARROW_NAME = 'SelectArrow';\n\ntype SelectArrowElement = React.ElementRef<typeof PopperPrimitive.Arrow>;\ntype PopperArrowProps = Radix.ComponentPropsWithoutRef<typeof PopperPrimitive.Arrow>;\ninterface SelectArrowProps extends PopperArrowProps {}\n\nconst SelectArrow = React.forwardRef<SelectArrowElement, SelectArrowProps>(\n (props: ScopedProps<SelectArrowProps>, forwardedRef) => {\n const { __scopeSelect, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const context = useSelectContext(ARROW_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ARROW_NAME, __scopeSelect);\n return context.open && contentContext.position === 'popper' ? (\n <PopperPrimitive.Arrow {...popperScope} {...arrowProps} ref={forwardedRef} />\n ) : null;\n }\n);\n\nSelectArrow.displayName = ARROW_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction shouldShowPlaceholder(value?: string) {\n return value === '' || value === undefined;\n}\n\nconst BubbleSelect = React.forwardRef<HTMLSelectElement, React.ComponentPropsWithoutRef<'select'>>(\n (props, forwardedRef) => {\n const { value, ...selectProps } = props;\n const ref = React.useRef<HTMLSelectElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const prevValue = usePrevious(value);\n\n // Bubble value change to parents (e.g form change event)\n React.useEffect(() => {\n const select = ref.current!;\n const selectProto = window.HTMLSelectElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n selectProto,\n 'value'\n ) as PropertyDescriptor;\n const setValue = descriptor.set;\n if (prevValue !== value && setValue) {\n const event = new Event('change', { bubbles: true });\n setValue.call(select, value);\n select.dispatchEvent(event);\n }\n }, [prevValue, value]);\n\n /**\n * We purposefully use a `select` here to support form autofill as much\n * as possible.\n *\n * We purposefully do not add the `value` attribute here to allow the value\n * to be set programatically and bubble to any parent form `onChange` event.\n * Adding the `value` will cause React to consider the programatic\n * dispatch a duplicate and it will get swallowed.\n *\n * We use `VisuallyHidden` rather than `display: \"none\"` because Safari autofill\n * won't work otherwise.\n */\n return (\n <VisuallyHidden asChild>\n <select {...selectProps} ref={composedRefs} defaultValue={value} />\n </VisuallyHidden>\n );\n }\n);\n\nBubbleSelect.displayName = 'BubbleSelect';\n\nfunction useTypeaheadSearch(onSearchChange: (search: string) => void) {\n const handleSearchChange = useCallbackRef(onSearchChange);\n const searchRef = React.useRef('');\n const timerRef = React.useRef(0);\n\n const handleTypeaheadSearch = React.useCallback(\n (key: string) => {\n const search = searchRef.current + key;\n handleSearchChange(search);\n\n (function updateSearch(value: string) {\n searchRef.current = value;\n window.clearTimeout(timerRef.current);\n // Reset `searchRef` 1 second after it was last updated\n if (value !== '') timerRef.current = window.setTimeout(() => updateSearch(''), 1000);\n })(search);\n },\n [handleSearchChange]\n );\n\n const resetTypeahead = React.useCallback(() => {\n searchRef.current = '';\n window.clearTimeout(timerRef.current);\n }, []);\n\n React.useEffect(() => {\n return () => window.clearTimeout(timerRef.current);\n }, []);\n\n return [searchRef, handleTypeaheadSearch, resetTypeahead] as const;\n}\n\n/**\n * This is the \"meat\" of the typeahead matching logic. It takes in a list of items,\n * the search and the current item, and returns the next item (or `undefined`).\n *\n * We normalize the search because if a user has repeatedly pressed a character,\n * we want the exact same behavior as if we only had that one character\n * (ie. cycle through items starting with that character)\n *\n * We also reorder the items by wrapping the array around the current item.\n * This is so we always look forward from the current item, and picking the first\n * item will always be the correct one.\n *\n * Finally, if the normalized search is exactly one character, we exclude the\n * current item from the values because otherwise it would be the first to match always\n * and focus would never move. This is as opposed to the regular case, where we\n * don't want focus to move if the current item still matches.\n */\nfunction findNextItem<T extends { textValue: string }>(\n items: T[],\n search: string,\n currentItem?: T\n) {\n const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);\n const normalizedSearch = isRepeated ? search[0] : search;\n const currentItemIndex = currentItem ? items.indexOf(currentItem) : -1;\n let wrappedItems = wrapArray(items, Math.max(currentItemIndex, 0));\n const excludeCurrentItem = normalizedSearch.length === 1;\n if (excludeCurrentItem) wrappedItems = wrappedItems.filter((v) => v !== currentItem);\n const nextItem = wrappedItems.find((item) =>\n item.textValue.toLowerCase().startsWith(normalizedSearch.toLowerCase())\n );\n return nextItem !== currentItem ? nextItem : undefined;\n}\n\n/**\n * Wraps an array around itself at a given start index\n * Example: `wrapArray(['a', 'b', 'c', 'd'], 2) === ['c', 'd', 'a', 'b']`\n */\nfunction wrapArray<T>(array: T[], startIndex: number) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\n\nconst Root = Select;\nconst Trigger = SelectTrigger;\nconst Value = SelectValue;\nconst Icon = SelectIcon;\nconst Portal = SelectPortal;\nconst Content = SelectContent;\nconst Viewport = SelectViewport;\nconst Group = SelectGroup;\nconst Label = SelectLabel;\nconst Item = SelectItem;\nconst ItemText = SelectItemText;\nconst ItemIndicator = SelectItemIndicator;\nconst ScrollUpButton = SelectScrollUpButton;\nconst ScrollDownButton = SelectScrollDownButton;\nconst Separator = SelectSeparator;\nconst Arrow = SelectArrow;\n\nexport {\n createSelectScope,\n //\n Select,\n SelectTrigger,\n SelectValue,\n SelectIcon,\n SelectPortal,\n SelectContent,\n SelectViewport,\n SelectGroup,\n SelectLabel,\n SelectItem,\n SelectItemText,\n SelectItemIndicator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n SelectSeparator,\n SelectArrow,\n //\n Root,\n Trigger,\n Value,\n Icon,\n Portal,\n Content,\n Viewport,\n Group,\n Label,\n Item,\n ItemText,\n ItemIndicator,\n ScrollUpButton,\n ScrollDownButton,\n Separator,\n Arrow,\n};\nexport type {\n SelectProps,\n SelectTriggerProps,\n SelectValueProps,\n SelectIconProps,\n SelectPortalProps,\n SelectContentProps,\n SelectViewportProps,\n SelectGroupProps,\n SelectLabelProps,\n SelectItemProps,\n SelectItemTextProps,\n SelectItemIndicatorProps,\n SelectScrollUpButtonProps,\n SelectScrollDownButtonProps,\n SelectSeparatorProps,\n SelectArrowProps,\n};\n","import type * as Spreadsheet from '@/src/components/spreadsheet/model/spreadsheet';\nimport { cn } from '@/src/shared/lib/cn';\nimport { type ClipboardEvent, useCallback } from 'react';\n\nexport function DateDataEditor(props: Spreadsheet.DataEditor) {\n const { value, onBlur, onChange, onPaste } = props;\n\n const _onPaste = useCallback(\n (e: ClipboardEvent<HTMLInputElement>) => {\n e.preventDefault();\n onPaste?.();\n },\n [onPaste],\n );\n\n return (\n <input\n type=\"date\"\n onBlur={onBlur}\n onPaste={_onPaste}\n value={value as string}\n onChange={(e) => onChange?.({ data: e.target.value })}\n className={cn('h-full w-full bg-transparent pl-1 text-xs outline-none')}\n autoFocus\n />\n );\n}\n\nexport function DateDataViewer(props: Spreadsheet.DataViewer) {\n const { value } = props;\n const formatter = Intl.DateTimeFormat('pt-BR', { dateStyle: 'short' });\n const formatted = value ? formatter.format(new Date(value as string)) : 'dd/mm/yyyy';\n\n return (\n <div className=\"flex h-full w-full items-center\">\n <p className=\"line-clamp-1 pl-1 text-xs\">{formatted as string}</p>\n </div>\n );\n}\n","import type * as Spreadsheet from '@/src/components/spreadsheet/model/spreadsheet';\nimport { NumericField } from '@/src/components/tmp/numeric';\nimport { type ClipboardEvent, useCallback } from 'react';\n\nexport function NumericEditor(props: Spreadsheet.DataEditor) {\n const { value, onBlur, onChange, onPaste, setMode, column } = props;\n\n const _onPaste = useCallback(\n (e: ClipboardEvent<HTMLInputElement>) => {\n e.preventDefault();\n onPaste?.();\n },\n [onPaste],\n );\n\n const _onBlur = useCallback(() => {\n onBlur?.();\n setMode?.('view');\n }, [onBlur, setMode]);\n\n return (\n <NumericField\n dataEditorType={column.dataEditorType}\n value={value as string}\n onPaste={_onPaste}\n onBlur={_onBlur}\n onChange={(value) => onChange?.({ data: value })}\n settings={column.settings}\n />\n );\n\n // return (\n // <input\n // type=\"number\"\n // onBlur={_onBlur}\n // onPaste={_onPaste}\n // value={value as string}\n // onChange={(e) => onChange?.({ data: e.target.value })}\n // className={cn('h-full w-full bg-transparent pl-1 text-xs outline-none')}\n // autoFocus\n // />\n // );\n}\n\nexport function NumericDataViewer(props: Spreadsheet.DataViewer) {\n const { value, column } = props;\n\n return (\n <NumericField\n dataEditorType={column.dataEditorType}\n value={value as string}\n settings={column.settings}\n disabled\n className=\"pointer-events-none\"\n />\n // <div className=\"flex h-full w-full items-center\">\n // <p className=\"line-clamp-1 pl-1 text-xs\">{value as string}</p>\n // </div>\n );\n}\n","import type { Column, DataEditorType } from '@/src/components/spreadsheet/model/spreadsheet';\nimport { cn } from '@/src/shared/lib/cn';\nimport { type ClipboardEvent, type FocusEvent, type MouseEvent, useEffect, useState } from 'react';\nimport { type NumberFormatValues, NumericFormat } from 'react-number-format';\n\nexport type NumericFieldProps = {\n value?: string;\n onChange?: (value?: string) => void;\n onBlur?: () => void;\n onFocus?: (e: FocusEvent<HTMLInputElement>) => void;\n onClick?: (e: MouseEvent<HTMLInputElement>) => void;\n onPaste?: (e: ClipboardEvent<HTMLInputElement>) => void;\n tabIndex?: number;\n\n dataEditorType: DataEditorType;\n settings?: Partial<Column['settings']>;\n disabled?: boolean;\n\n testid?: string;\n className?: string;\n\n dataCypress?: string;\n};\n\nexport function NumericField(props: NumericFieldProps) {\n const {\n className,\n dataEditorType,\n onFocus,\n onBlur,\n onChange,\n onClick,\n onPaste,\n settings,\n testid,\n value,\n disabled,\n dataCypress,\n tabIndex,\n } = props;\n\n const thousandSeparator = '.';\n const decimalSeparator = ',';\n const decimalScale = getDecimalScale({\n dataEditorType,\n decimalScale: settings?.numeric?.decimalPlaces,\n });\n const allowNegative = settings?.numeric?.allowNegative;\n const min = settings?.numeric?.min;\n const max = settings?.numeric?.max;\n\n const prefix = dataEditorType.toLocaleLowerCase() === 'currency' ? 'R$ ' : '';\n const suffix = dataEditorType.toLocaleLowerCase() === 'percentage' ? '%' : '';\n\n const [strValue, setStrValue] = useState<string | undefined>(value);\n\n const [waitCapToOnBlur, setWaitCapToOnBlur] = useState(false);\n\n const onValueChange = ({ value }: NumberFormatValues) => {\n setStrValue(value);\n onChange?.(value);\n };\n\n const _onBlur = () => {\n let waitCapToOnBlur = false;\n\n const numValue = Number(value);\n\n let newStrValue = value;\n\n if (typeof min === 'number') {\n if (numValue < min) newStrValue = min.toString();\n }\n\n if (typeof max === 'number') {\n if (numValue > max) newStrValue = max.toString();\n }\n\n if (newStrValue !== value) {\n waitCapToOnBlur = true;\n\n onChange?.(newStrValue);\n setStrValue(newStrValue);\n setWaitCapToOnBlur(waitCapToOnBlur);\n }\n\n if (!waitCapToOnBlur) onBlur?.();\n };\n\n useEffect(() => {\n if (waitCapToOnBlur) {\n onBlur?.();\n setWaitCapToOnBlur(false);\n }\n }, [onBlur, waitCapToOnBlur]);\n\n useEffect(() => {\n setStrValue(value);\n }, [value]);\n\n return (\n <NumericFormat\n tabIndex={tabIndex}\n value={strValue}\n onPaste={onPaste}\n prefix={prefix}\n suffix={suffix}\n fixedDecimalScale\n onBlur={_onBlur}\n data-testid={testid}\n valueIsNumericString\n onFocus={onFocus}\n onClick={onClick}\n decimalScale={decimalScale}\n onValueChange={onValueChange}\n allowNegative={allowNegative}\n decimalSeparator={decimalSeparator}\n thousandSeparator={thousandSeparator}\n className={cn(\n 'h-full w-full rounded-none bg-transparent pl-1 text-xs outline-none',\n className,\n )}\n disabled={disabled}\n data-cypress={dataCypress}\n autoFocus\n />\n );\n}\n\nexport const percentageRatio = 100;\nexport const percentageScaleToBeDisregarded = 2;\n\nexport function getDecimalScale(params: { dataEditorType: DataEditorType; decimalScale?: number }) {\n const { dataEditorType, decimalScale } = params;\n\n let newDecimalScale = decimalScale;\n\n if (dataEditorType.toLowerCase() === 'percentage') {\n if (decimalScale) {\n newDecimalScale = decimalScale > 2 ? decimalScale - percentageScaleToBeDisregarded : 0;\n } else {\n newDecimalScale = 0;\n }\n }\n\n if (!decimalScale) {\n if (dataEditorType.toLowerCase() === 'decimal') newDecimalScale = 2;\n if (dataEditorType.toLowerCase() === 'float') newDecimalScale = 2;\n if (dataEditorType.toLowerCase() === 'integer') newDecimalScale = 0;\n if (dataEditorType.toLowerCase() === 'currency') newDecimalScale = 2;\n }\n\n return newDecimalScale;\n}\n","/**\n * react-number-format - 5.3.4\n * Author : Sudhanshu Yadav\n * Copyright (c) 2016, 2024 to Sudhanshu Yadav, released under the MIT license.\n * https://github.com/s-yadav/react-number-format\n */\n\nimport React, { useState, useMemo, useRef, useEffect, useLayoutEffect } from 'react';\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) { if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n { t[p] = s[p]; } }\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n { for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n { t[p[i]] = s[p[i]]; }\r\n } }\r\n return t;\r\n}\n\nvar SourceType;\n(function (SourceType) {\n SourceType[\"event\"] = \"event\";\n SourceType[\"props\"] = \"prop\";\n})(SourceType || (SourceType = {}));\n\n// basic noop function\nfunction noop() { }\nfunction memoizeOnce(cb) {\n var lastArgs;\n var lastValue = undefined;\n return function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n if (lastArgs &&\n args.length === lastArgs.length &&\n args.every(function (value, index) { return value === lastArgs[index]; })) {\n return lastValue;\n }\n lastArgs = args;\n lastValue = cb.apply(void 0, args);\n return lastValue;\n };\n}\nfunction charIsNumber(char) {\n return !!(char || '').match(/\\d/);\n}\nfunction isNil(val) {\n return val === null || val === undefined;\n}\nfunction isNanValue(val) {\n return typeof val === 'number' && isNaN(val);\n}\nfunction isNotValidValue(val) {\n return isNil(val) || isNanValue(val) || (typeof val === 'number' && !isFinite(val));\n}\nfunction escapeRegExp(str) {\n return str.replace(/[-[\\]/{}()*+?.\\\\^$|]/g, '\\\\$&');\n}\nfunction getThousandsGroupRegex(thousandsGroupStyle) {\n switch (thousandsGroupStyle) {\n case 'lakh':\n return /(\\d+?)(?=(\\d\\d)+(\\d)(?!\\d))(\\.\\d+)?/g;\n case 'wan':\n return /(\\d)(?=(\\d{4})+(?!\\d))/g;\n case 'thousand':\n default:\n return /(\\d)(?=(\\d{3})+(?!\\d))/g;\n }\n}\nfunction applyThousandSeparator(str, thousandSeparator, thousandsGroupStyle) {\n var thousandsGroupRegex = getThousandsGroupRegex(thousandsGroupStyle);\n var index = str.search(/[1-9]/);\n index = index === -1 ? str.length : index;\n return (str.substring(0, index) +\n str.substring(index, str.length).replace(thousandsGroupRegex, '$1' + thousandSeparator));\n}\nfunction usePersistentCallback(cb) {\n var callbackRef = useRef(cb);\n // keep the callback ref upto date\n callbackRef.current = cb;\n /**\n * initialize a persistent callback which never changes\n * through out the component lifecycle\n */\n var persistentCbRef = useRef(function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return callbackRef.current.apply(callbackRef, args);\n });\n return persistentCbRef.current;\n}\n//spilt a float number into different parts beforeDecimal, afterDecimal, and negation\nfunction splitDecimal(numStr, allowNegative) {\n if ( allowNegative === void 0 ) allowNegative = true;\n\n var hasNegation = numStr[0] === '-';\n var addNegation = hasNegation && allowNegative;\n numStr = numStr.replace('-', '');\n var parts = numStr.split('.');\n var beforeDecimal = parts[0];\n var afterDecimal = parts[1] || '';\n return {\n beforeDecimal: beforeDecimal,\n afterDecimal: afterDecimal,\n hasNegation: hasNegation,\n addNegation: addNegation,\n };\n}\nfunction fixLeadingZero(numStr) {\n if (!numStr)\n { return numStr; }\n var isNegative = numStr[0] === '-';\n if (isNegative)\n { numStr = numStr.substring(1, numStr.length); }\n var parts = numStr.split('.');\n var beforeDecimal = parts[0].replace(/^0+/, '') || '0';\n var afterDecimal = parts[1] || '';\n return (\"\" + (isNegative ? '-' : '') + beforeDecimal + (afterDecimal ? (\".\" + afterDecimal) : ''));\n}\n/**\n * limit decimal numbers to given scale\n * Not used .fixedTo because that will break with big numbers\n */\nfunction limitToScale(numStr, scale, fixedDecimalScale) {\n var str = '';\n var filler = fixedDecimalScale ? '0' : '';\n for (var i = 0; i <= scale - 1; i++) {\n str += numStr[i] || filler;\n }\n return str;\n}\nfunction repeat(str, count) {\n return Array(count + 1).join(str);\n}\nfunction toNumericString(num) {\n var _num = num + ''; // typecast number to string\n // store the sign and remove it from the number.\n var sign = _num[0] === '-' ? '-' : '';\n if (sign)\n { _num = _num.substring(1); }\n // split the number into cofficient and exponent\n var ref = _num.split(/[eE]/g);\n var coefficient = ref[0];\n var exponent = ref[1];\n // covert exponent to number;\n exponent = Number(exponent);\n // if there is no exponent part or its 0, return the coffiecient with sign\n if (!exponent)\n { return sign + coefficient; }\n coefficient = coefficient.replace('.', '');\n /**\n * for scientific notation the current decimal index will be after first number (index 0)\n * So effective decimal index will always be 1 + exponent value\n */\n var decimalIndex = 1 + exponent;\n var coffiecientLn = coefficient.length;\n if (decimalIndex < 0) {\n // if decimal index is less then 0 add preceding 0s\n // add 1 as join will have\n coefficient = '0.' + repeat('0', Math.abs(decimalIndex)) + coefficient;\n }\n else if (decimalIndex >= coffiecientLn) {\n // if decimal index is less then 0 add leading 0s\n coefficient = coefficient + repeat('0', decimalIndex - coffiecientLn);\n }\n else {\n // else add decimal point at proper index\n coefficient =\n (coefficient.substring(0, decimalIndex) || '0') + '.' + coefficient.substring(decimalIndex);\n }\n return sign + coefficient;\n}\n/**\n * This method is required to round prop value to given scale.\n * Not used .round or .fixedTo because that will break with big numbers\n */\nfunction roundToPrecision(numStr, scale, fixedDecimalScale) {\n //if number is empty don't do anything return empty string\n if (['', '-'].indexOf(numStr) !== -1)\n { return numStr; }\n var shouldHaveDecimalSeparator = (numStr.indexOf('.') !== -1 || fixedDecimalScale) && scale;\n var ref = splitDecimal(numStr);\n var beforeDecimal = ref.beforeDecimal;\n var afterDecimal = ref.afterDecimal;\n var hasNegation = ref.hasNegation;\n var floatValue = parseFloat((\"0.\" + (afterDecimal || '0')));\n var floatValueStr = afterDecimal.length <= scale ? (\"0.\" + afterDecimal) : floatValue.toFixed(scale);\n var roundedDecimalParts = floatValueStr.split('.');\n var intPart = beforeDecimal;\n // if we have cary over from rounding decimal part, add that on before decimal\n if (beforeDecimal && Number(roundedDecimalParts[0])) {\n intPart = beforeDecimal\n .split('')\n .reverse()\n .reduce(function (roundedStr, current, idx) {\n if (roundedStr.length > idx) {\n return ((Number(roundedStr[0]) + Number(current)).toString() +\n roundedStr.substring(1, roundedStr.length));\n }\n return current + roundedStr;\n }, roundedDecimalParts[0]);\n }\n var decimalPart = limitToScale(roundedDecimalParts[1] || '', scale, fixedDecimalScale);\n var negation = hasNegation ? '-' : '';\n var decimalSeparator = shouldHaveDecimalSeparator ? '.' : '';\n return (\"\" + negation + intPart + decimalSeparator + decimalPart);\n}\n/** set the caret positon in an input field **/\nfunction setCaretPosition(el, caretPos) {\n el.value = el.value;\n // ^ this is used to not only get 'focus', but\n // to make sure we don't have it everything -selected-\n // (it causes an issue in chrome, and having it doesn't hurt any other browser)\n if (el !== null) {\n /* @ts-ignore */\n if (el.createTextRange) {\n /* @ts-ignore */\n var range = el.createTextRange();\n range.move('character', caretPos);\n range.select();\n return true;\n }\n // (el.selectionStart === 0 added for Firefox bug)\n if (el.selectionStart || el.selectionStart === 0) {\n el.focus();\n el.setSelectionRange(caretPos, caretPos);\n return true;\n }\n // fail city, fortunately this never happens (as far as I've tested) :)\n el.focus();\n return false;\n }\n}\nvar findChangeRange = memoizeOnce(function (prevValue, newValue) {\n var i = 0, j = 0;\n var prevLength = prevValue.length;\n var newLength = newValue.length;\n while (prevValue[i] === newValue[i] && i < prevLength)\n { i++; }\n //check what has been changed from last\n while (prevValue[prevLength - 1 - j] === newValue[newLength - 1 - j] &&\n newLength - j > i &&\n prevLength - j > i) {\n j++;\n }\n return {\n from: { start: i, end: prevLength - j },\n to: { start: i, end: newLength - j },\n };\n});\n/*\n Returns a number whose value is limited to the given range\n*/\nfunction clamp(num, min, max) {\n return Math.min(Math.max(num, min), max);\n}\nfunction geInputCaretPosition(el) {\n /*Max of selectionStart and selectionEnd is taken for the patch of pixel and other mobile device caret bug*/\n return Math.max(el.selectionStart, el.selectionEnd);\n}\nfunction addInputMode() {\n return (typeof navigator !== 'undefined' &&\n !(navigator.platform && /iPhone|iPod/.test(navigator.platform)));\n}\nfunction getDefaultChangeMeta(value) {\n return {\n from: {\n start: 0,\n end: 0,\n },\n to: {\n start: 0,\n end: value.length,\n },\n lastValue: '',\n };\n}\nfunction getMaskAtIndex(mask, index) {\n if ( mask === void 0 ) mask = ' ';\n\n if (typeof mask === 'string') {\n return mask;\n }\n return mask[index] || ' ';\n}\nfunction defaultIsCharacterSame(ref) {\n var currentValue = ref.currentValue;\n var formattedValue = ref.formattedValue;\n var currentValueIndex = ref.currentValueIndex;\n var formattedValueIndex = ref.formattedValueIndex;\n\n return currentValue[currentValueIndex] === formattedValue[formattedValueIndex];\n}\nfunction getCaretPosition(newFormattedValue, lastFormattedValue, curValue, curCaretPos, boundary, isValidInputCharacter, \n/**\n * format function can change the character, the caret engine relies on mapping old value and new value\n * In such case if character is changed, parent can tell which chars are equivalent\n * Some example, all allowedDecimalCharacters are updated to decimalCharacters, 2nd case if user is coverting\n * number to different numeric system.\n */\nisCharacterSame) {\n if ( isCharacterSame === void 0 ) isCharacterSame = defaultIsCharacterSame;\n\n /**\n * if something got inserted on empty value, add the formatted character before the current value,\n * This is to avoid the case where typed character is present on format characters\n */\n var firstAllowedPosition = boundary.findIndex(function (b) { return b; });\n var prefixFormat = newFormattedValue.slice(0, firstAllowedPosition);\n if (!lastFormattedValue && !curValue.startsWith(prefixFormat)) {\n lastFormattedValue = prefixFormat;\n curValue = prefixFormat + curValue;\n curCaretPos = curCaretPos + prefixFormat.length;\n }\n var curValLn = curValue.length;\n var formattedValueLn = newFormattedValue.length;\n // create index map\n var addedIndexMap = {};\n var indexMap = new Array(curValLn);\n for (var i = 0; i < curValLn; i++) {\n indexMap[i] = -1;\n for (var j = 0, jLn = formattedValueLn; j < jLn; j++) {\n var isCharSame = isCharacterSame({\n currentValue: curValue,\n lastValue: lastFormattedValue,\n formattedValue: newFormattedValue,\n currentValueIndex: i,\n formattedValueIndex: j,\n });\n if (isCharSame && addedIndexMap[j] !== true) {\n indexMap[i] = j;\n addedIndexMap[j] = true;\n break;\n }\n }\n }\n /**\n * For current caret position find closest characters (left and right side)\n * which are properly mapped to formatted value.\n * The idea is that the new caret position will exist always in the boundary of\n * that mapped index\n */\n var pos = curCaretPos;\n while (pos < curValLn && (indexMap[pos] === -1 || !isValidInputCharacter(curValue[pos]))) {\n pos++;\n }\n // if the caret position is on last keep the endIndex as last for formatted value\n var endIndex = pos === curValLn || indexMap[pos] === -1 ? formattedValueLn : indexMap[pos];\n pos = curCaretPos - 1;\n while (pos > 0 && indexMap[pos] === -1)\n { pos--; }\n var startIndex = pos === -1 || indexMap[pos] === -1 ? 0 : indexMap[pos] + 1;\n /**\n * case where a char is added on suffix and removed from middle, example 2sq345 becoming $2,345 sq\n * there is still a mapping but the order of start index and end index is changed\n */\n if (startIndex > endIndex)\n { return endIndex; }\n /**\n * given the current caret position if it closer to startIndex\n * keep the new caret position on start index or keep it closer to endIndex\n */\n return curCaretPos - startIndex < endIndex - curCaretPos ? startIndex : endIndex;\n}\n/* This keeps the caret within typing area so people can't type in between prefix or suffix or format characters */\nfunction getCaretPosInBoundary(value, caretPos, boundary, direction) {\n var valLn = value.length;\n // clamp caret position to [0, value.length]\n caretPos = clamp(caretPos, 0, valLn);\n if (direction === 'left') {\n while (caretPos >= 0 && !boundary[caretPos])\n { caretPos--; }\n // if we don't find any suitable caret position on left, set it on first allowed position\n if (caretPos === -1)\n { caretPos = boundary.indexOf(true); }\n }\n else {\n while (caretPos <= valLn && !boundary[caretPos])\n { caretPos++; }\n // if we don't find any suitable caret position on right, set it on last allowed position\n if (caretPos > valLn)\n { caretPos = boundary.lastIndexOf(true); }\n }\n // if we still don't find caret position, set it at the end of value\n if (caretPos === -1)\n { caretPos = valLn; }\n return caretPos;\n}\nfunction caretUnknownFormatBoundary(formattedValue) {\n var boundaryAry = Array.from({ length: formattedValue.length + 1 }).map(function () { return true; });\n for (var i = 0, ln = boundaryAry.length; i < ln; i++) {\n // consider caret to be in boundary if it is before or after numeric value\n boundaryAry[i] = Boolean(charIsNumber(formattedValue[i]) || charIsNumber(formattedValue[i - 1]));\n }\n return boundaryAry;\n}\nfunction useInternalValues(value, defaultValue, valueIsNumericString, format, removeFormatting, onValueChange) {\n if ( onValueChange === void 0 ) onValueChange = noop;\n\n var getValues = usePersistentCallback(function (value, valueIsNumericString) {\n var formattedValue, numAsString;\n if (isNotValidValue(value)) {\n numAsString = '';\n formattedValue = '';\n }\n else if (typeof value === 'number' || valueIsNumericString) {\n numAsString = typeof value === 'number' ? toNumericString(value) : value;\n formattedValue = format(numAsString);\n }\n else {\n numAsString = removeFormatting(value, undefined);\n formattedValue = format(numAsString);\n }\n return { formattedValue: formattedValue, numAsString: numAsString };\n });\n var ref = useState(function () {\n return getValues(isNil(value) ? defaultValue : value, valueIsNumericString);\n });\n var values = ref[0];\n var setValues = ref[1];\n var _onValueChange = function (newValues, sourceInfo) {\n if (newValues.formattedValue !== values.formattedValue) {\n setValues({\n formattedValue: newValues.formattedValue,\n numAsString: newValues.value,\n });\n }\n // call parent on value change if only if formatted value is changed\n onValueChange(newValues, sourceInfo);\n };\n // if value is switch from controlled to uncontrolled, use the internal state's value to format with new props\n var _value = value;\n var _valueIsNumericString = valueIsNumericString;\n if (isNil(value)) {\n _value = values.numAsString;\n _valueIsNumericString = true;\n }\n var newValues = getValues(_value, _valueIsNumericString);\n useMemo(function () {\n setValues(newValues);\n }, [newValues.formattedValue]);\n return [values, _onValueChange];\n}\n\nfunction defaultRemoveFormatting(value) {\n return value.replace(/[^0-9]/g, '');\n}\nfunction defaultFormat(value) {\n return value;\n}\nfunction NumberFormatBase(props) {\n var type = props.type; if ( type === void 0 ) type = 'text';\n var displayType = props.displayType; if ( displayType === void 0 ) displayType = 'input';\n var customInput = props.customInput;\n var renderText = props.renderText;\n var getInputRef = props.getInputRef;\n var format = props.format; if ( format === void 0 ) format = defaultFormat;\n var removeFormatting = props.removeFormatting; if ( removeFormatting === void 0 ) removeFormatting = defaultRemoveFormatting;\n var defaultValue = props.defaultValue;\n var valueIsNumericString = props.valueIsNumericString;\n var onValueChange = props.onValueChange;\n var isAllowed = props.isAllowed;\n var onChange = props.onChange; if ( onChange === void 0 ) onChange = noop;\n var onKeyDown = props.onKeyDown; if ( onKeyDown === void 0 ) onKeyDown = noop;\n var onMouseUp = props.onMouseUp; if ( onMouseUp === void 0 ) onMouseUp = noop;\n var onFocus = props.onFocus; if ( onFocus === void 0 ) onFocus = noop;\n var onBlur = props.onBlur; if ( onBlur === void 0 ) onBlur = noop;\n var propValue = props.value;\n var getCaretBoundary = props.getCaretBoundary; if ( getCaretBoundary === void 0 ) getCaretBoundary = caretUnknownFormatBoundary;\n var isValidInputCharacter = props.isValidInputCharacter; if ( isValidInputCharacter === void 0 ) isValidInputCharacter = charIsNumber;\n var isCharacterSame = props.isCharacterSame;\n var otherProps = __rest(props, [\"type\", \"displayType\", \"customInput\", \"renderText\", \"getInputRef\", \"format\", \"removeFormatting\", \"defaultValue\", \"valueIsNumericString\", \"onValueChange\", \"isAllowed\", \"onChange\", \"onKeyDown\", \"onMouseUp\", \"onFocus\", \"onBlur\", \"value\", \"getCaretBoundary\", \"isValidInputCharacter\", \"isCharacterSame\"]);\n var ref = useInternalValues(propValue, defaultValue, Boolean(valueIsNumericString), format, removeFormatting, onValueChange);\n var ref_0 = ref[0];\n var formattedValue = ref_0.formattedValue;\n var numAsString = ref_0.numAsString;\n var onFormattedValueChange = ref[1];\n var lastUpdatedValue = useRef({ formattedValue: formattedValue, numAsString: numAsString });\n var _onValueChange = function (values, source) {\n lastUpdatedValue.current = { formattedValue: values.formattedValue, numAsString: values.value };\n onFormattedValueChange(values, source);\n };\n var ref$1 = useState(false);\n var mounted = ref$1[0];\n var setMounted = ref$1[1];\n var focusedElm = useRef(null);\n var timeout = useRef({\n setCaretTimeout: null,\n focusTimeout: null,\n });\n useEffect(function () {\n setMounted(true);\n return function () {\n clearTimeout(timeout.current.setCaretTimeout);\n clearTimeout(timeout.current.focusTimeout);\n };\n }, []);\n var _format = format;\n var getValueObject = function (formattedValue, numAsString) {\n var floatValue = parseFloat(numAsString);\n return {\n formattedValue: formattedValue,\n value: numAsString,\n floatValue: isNaN(floatValue) ? undefined : floatValue,\n };\n };\n var setPatchedCaretPosition = function (el, caretPos, currentValue) {\n // don't reset the caret position when the whole input content is selected\n if (el.selectionStart === 0 && el.selectionEnd === el.value.length)\n { return; }\n /* setting caret position within timeout of 0ms is required for mobile chrome,\n otherwise browser resets the caret position after we set it\n We are also setting it without timeout so that in normal browser we don't see the flickering */\n setCaretPosition(el, caretPos);\n timeout.current.setCaretTimeout = setTimeout(function () {\n if (el.value === currentValue && el.selectionStart !== caretPos) {\n setCaretPosition(el, caretPos);\n }\n }, 0);\n };\n /* This keeps the caret within typing area so people can't type in between prefix or suffix */\n var correctCaretPosition = function (value, caretPos, direction) {\n return getCaretPosInBoundary(value, caretPos, getCaretBoundary(value), direction);\n };\n var getNewCaretPosition = function (inputValue, newFormattedValue, caretPos) {\n var caretBoundary = getCaretBoundary(newFormattedValue);\n var updatedCaretPos = getCaretPosition(newFormattedValue, formattedValue, inputValue, caretPos, caretBoundary, isValidInputCharacter, isCharacterSame);\n //correct caret position if its outside of editable area\n updatedCaretPos = getCaretPosInBoundary(newFormattedValue, updatedCaretPos, caretBoundary);\n return updatedCaretPos;\n };\n var updateValueAndCaretPosition = function (params) {\n var newFormattedValue = params.formattedValue; if ( newFormattedValue === void 0 ) newFormattedValue = '';\n var input = params.input;\n var source = params.source;\n var event = params.event;\n var numAsString = params.numAsString;\n var caretPos;\n if (input) {\n var inputValue = params.inputValue || input.value;\n var currentCaretPosition = geInputCaretPosition(input);\n /**\n * set the value imperatively, this is required for IE fix\n * This is also required as if new caret position is beyond the previous value.\n * Caret position will not be set correctly\n */\n input.value = newFormattedValue;\n //get the caret position\n caretPos = getNewCaretPosition(inputValue, newFormattedValue, currentCaretPosition);\n //set caret position imperatively\n if (caretPos !== undefined) {\n setPatchedCaretPosition(input, caretPos, newFormattedValue);\n }\n }\n if (newFormattedValue !== formattedValue) {\n // trigger onValueChange synchronously, so parent is updated along with the number format. Fix for #277, #287\n _onValueChange(getValueObject(newFormattedValue, numAsString), { event: event, source: source });\n }\n };\n /**\n * if the formatted value is not synced to parent, or if the formatted value is different from last synced value sync it\n * we also don't need to sync to the parent if no formatting is applied\n * if the formatting props is removed, in which case last formatted value will be different from the numeric string value\n * in such case we need to inform the parent.\n */\n useEffect(function () {\n var ref = lastUpdatedValue.current;\n var lastFormattedValue = ref.formattedValue;\n var lastNumAsString = ref.numAsString;\n if (formattedValue !== lastFormattedValue &&\n (formattedValue !== numAsString || lastFormattedValue !== lastNumAsString)) {\n _onValueChange(getValueObject(formattedValue, numAsString), {\n event: undefined,\n source: SourceType.props,\n });\n }\n }, [formattedValue, numAsString]);\n // also if formatted value is changed from the props, we need to update the caret position\n // keep the last caret position if element is focused\n var currentCaretPosition = focusedElm.current\n ? geInputCaretPosition(focusedElm.current)\n : undefined;\n // needed to prevent warning with useLayoutEffect on server\n var useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;\n useIsomorphicLayoutEffect(function () {\n var input = focusedElm.current;\n if (formattedValue !== lastUpdatedValue.current.formattedValue && input) {\n var caretPos = getNewCaretPosition(lastUpdatedValue.current.formattedValue, formattedValue, currentCaretPosition);\n /**\n * set the value imperatively, as we set the caret position as well imperatively.\n * This is to keep value and caret position in sync\n */\n input.value = formattedValue;\n setPatchedCaretPosition(input, caretPos, formattedValue);\n }\n }, [formattedValue]);\n var formatInputValue = function (inputValue, event, source) {\n var changeRange = findChangeRange(formattedValue, inputValue);\n var changeMeta = Object.assign(Object.assign({}, changeRange), { lastValue: formattedValue });\n var _numAsString = removeFormatting(inputValue, changeMeta);\n var _formattedValue = _format(_numAsString);\n // formatting can remove some of the number chars, so we need to fine number string again\n _numAsString = removeFormatting(_formattedValue, undefined);\n if (isAllowed && !isAllowed(getValueObject(_formattedValue, _numAsString))) {\n //reset the caret position\n var input = event.target;\n var currentCaretPosition = geInputCaretPosition(input);\n var caretPos = getNewCaretPosition(inputValue, formattedValue, currentCaretPosition);\n input.value = formattedValue;\n setPatchedCaretPosition(input, caretPos, formattedValue);\n return false;\n }\n updateValueAndCaretPosition({\n formattedValue: _formattedValue,\n numAsString: _numAsString,\n inputValue: inputValue,\n event: event,\n source: source,\n input: event.target,\n });\n return true;\n };\n var _onChange = function (e) {\n var el = e.target;\n var inputValue = el.value;\n var changed = formatInputValue(inputValue, e, SourceType.event);\n if (changed)\n { onChange(e); }\n };\n var _onKeyDown = function (e) {\n var el = e.target;\n var key = e.key;\n var selectionStart = el.selectionStart;\n var selectionEnd = el.selectionEnd;\n var value = el.value; if ( value === void 0 ) value = '';\n var expectedCaretPosition;\n //Handle backspace and delete against non numerical/decimal characters or arrow keys\n if (key === 'ArrowLeft' || key === 'Backspace') {\n expectedCaretPosition = Math.max(selectionStart - 1, 0);\n }\n else if (key === 'ArrowRight') {\n expectedCaretPosition = Math.min(selectionStart + 1, value.length);\n }\n else if (key === 'Delete') {\n expectedCaretPosition = selectionStart;\n }\n //if expectedCaretPosition is not set it means we don't want to Handle keyDown\n // also if multiple characters are selected don't handle\n if (expectedCaretPosition === undefined || selectionStart !== selectionEnd) {\n onKeyDown(e);\n return;\n }\n var newCaretPosition = expectedCaretPosition;\n if (key === 'ArrowLeft' || key === 'ArrowRight') {\n var direction = key === 'ArrowLeft' ? 'left' : 'right';\n newCaretPosition = correctCaretPosition(value, expectedCaretPosition, direction);\n // arrow left or right only moves the caret, so no need to handle the event, if we are handling it manually\n if (newCaretPosition !== expectedCaretPosition) {\n e.preventDefault();\n }\n }\n else if (key === 'Delete' && !isValidInputCharacter(value[expectedCaretPosition])) {\n // in case of delete go to closest caret boundary on the right side\n newCaretPosition = correctCaretPosition(value, expectedCaretPosition, 'right');\n }\n else if (key === 'Backspace' && !isValidInputCharacter(value[expectedCaretPosition])) {\n // in case of backspace go to closest caret boundary on the left side\n newCaretPosition = correctCaretPosition(value, expectedCaretPosition, 'left');\n }\n if (newCaretPosition !== expectedCaretPosition) {\n setPatchedCaretPosition(el, newCaretPosition, value);\n }\n /* NOTE: this is just required for unit test as we need to get the newCaretPosition,\n Remove this when you find different solution */\n /* @ts-ignore */\n if (e.isUnitTestRun) {\n setPatchedCaretPosition(el, newCaretPosition, value);\n }\n onKeyDown(e);\n };\n /** required to handle the caret position when click anywhere within the input **/\n var _onMouseUp = function (e) {\n var el = e.target;\n /**\n * NOTE: we have to give default value for value as in case when custom input is provided\n * value can come as undefined when nothing is provided on value prop.\n */\n var correctCaretPositionIfRequired = function () {\n var selectionStart = el.selectionStart;\n var selectionEnd = el.selectionEnd;\n var value = el.value; if ( value === void 0 ) value = '';\n if (selectionStart === selectionEnd) {\n var caretPosition = correctCaretPosition(value, selectionStart);\n if (caretPosition !== selectionStart) {\n setPatchedCaretPosition(el, caretPosition, value);\n }\n }\n };\n correctCaretPositionIfRequired();\n // try to correct after selection has updated by browser\n // this case is required when user clicks on some position while a text is selected on input\n requestAnimationFrame(function () {\n correctCaretPositionIfRequired();\n });\n onMouseUp(e);\n };\n var _onFocus = function (e) {\n // Workaround Chrome and Safari bug https://bugs.chromium.org/p/chromium/issues/detail?id=779328\n // (onFocus event target selectionStart is always 0 before setTimeout)\n if (e.persist)\n { e.persist(); }\n var el = e.target;\n var currentTarget = e.currentTarget;\n focusedElm.current = el;\n timeout.current.focusTimeout = setTimeout(function () {\n var selectionStart = el.selectionStart;\n var selectionEnd = el.selectionEnd;\n var value = el.value; if ( value === void 0 ) value = '';\n var caretPosition = correctCaretPosition(value, selectionStart);\n //setPatchedCaretPosition only when everything is not selected on focus (while tabbing into the field)\n if (caretPosition !== selectionStart &&\n !(selectionStart === 0 && selectionEnd === value.length)) {\n setPatchedCaretPosition(el, caretPosition, value);\n }\n onFocus(Object.assign(Object.assign({}, e), { currentTarget: currentTarget }));\n }, 0);\n };\n var _onBlur = function (e) {\n focusedElm.current = null;\n clearTimeout(timeout.current.focusTimeout);\n clearTimeout(timeout.current.setCaretTimeout);\n onBlur(e);\n };\n // add input mode on element based on format prop and device once the component is mounted\n var inputMode = mounted && addInputMode() ? 'numeric' : undefined;\n var inputProps = Object.assign({ inputMode: inputMode }, otherProps, {\n type: type,\n value: formattedValue,\n onChange: _onChange,\n onKeyDown: _onKeyDown,\n onMouseUp: _onMouseUp,\n onFocus: _onFocus,\n onBlur: _onBlur,\n });\n if (displayType === 'text') {\n return renderText ? (React.createElement(React.Fragment, null, renderText(formattedValue, otherProps) || null)) : (React.createElement(\"span\", Object.assign({}, otherProps, { ref: getInputRef }), formattedValue));\n }\n else if (customInput) {\n var CustomInput = customInput;\n /* @ts-ignore */\n return React.createElement(CustomInput, Object.assign({}, inputProps, { ref: getInputRef }));\n }\n return React.createElement(\"input\", Object.assign({}, inputProps, { ref: getInputRef }));\n}\n\nfunction format(numStr, props) {\n var decimalScale = props.decimalScale;\n var fixedDecimalScale = props.fixedDecimalScale;\n var prefix = props.prefix; if ( prefix === void 0 ) prefix = '';\n var suffix = props.suffix; if ( suffix === void 0 ) suffix = '';\n var allowNegative = props.allowNegative;\n var thousandsGroupStyle = props.thousandsGroupStyle; if ( thousandsGroupStyle === void 0 ) thousandsGroupStyle = 'thousand';\n // don't apply formatting on empty string or '-'\n if (numStr === '' || numStr === '-') {\n return numStr;\n }\n var ref = getSeparators(props);\n var thousandSeparator = ref.thousandSeparator;\n var decimalSeparator = ref.decimalSeparator;\n /**\n * Keep the decimal separator\n * when decimalScale is not defined or non zero and the numStr has decimal in it\n * Or if decimalScale is > 0 and fixeDecimalScale is true (even if numStr has no decimal)\n */\n var hasDecimalSeparator = (decimalScale !== 0 && numStr.indexOf('.') !== -1) || (decimalScale && fixedDecimalScale);\n var ref$1 = splitDecimal(numStr, allowNegative);\n var beforeDecimal = ref$1.beforeDecimal;\n var afterDecimal = ref$1.afterDecimal;\n var addNegation = ref$1.addNegation; // eslint-disable-line prefer-const\n //apply decimal precision if its defined\n if (decimalScale !== undefined) {\n afterDecimal = limitToScale(afterDecimal, decimalScale, !!fixedDecimalScale);\n }\n if (thousandSeparator) {\n beforeDecimal = applyThousandSeparator(beforeDecimal, thousandSeparator, thousandsGroupStyle);\n }\n //add prefix and suffix when there is a number present\n if (prefix)\n { beforeDecimal = prefix + beforeDecimal; }\n if (suffix)\n { afterDecimal = afterDecimal + suffix; }\n //restore negation sign\n if (addNegation)\n { beforeDecimal = '-' + beforeDecimal; }\n numStr = beforeDecimal + ((hasDecimalSeparator && decimalSeparator) || '') + afterDecimal;\n return numStr;\n}\nfunction getSeparators(props) {\n var decimalSeparator = props.decimalSeparator; if ( decimalSeparator === void 0 ) decimalSeparator = '.';\n var thousandSeparator = props.thousandSeparator;\n var allowedDecimalSeparators = props.allowedDecimalSeparators;\n if (thousandSeparator === true) {\n thousandSeparator = ',';\n }\n if (!allowedDecimalSeparators) {\n allowedDecimalSeparators = [decimalSeparator, '.'];\n }\n return {\n decimalSeparator: decimalSeparator,\n thousandSeparator: thousandSeparator,\n allowedDecimalSeparators: allowedDecimalSeparators,\n };\n}\nfunction handleNegation(value, allowNegative) {\n if ( value === void 0 ) value = '';\n\n var negationRegex = new RegExp('(-)');\n var doubleNegationRegex = new RegExp('(-)(.)*(-)');\n // Check number has '-' value\n var hasNegation = negationRegex.test(value);\n // Check number has 2 or more '-' values\n var removeNegation = doubleNegationRegex.test(value);\n //remove negation\n value = value.replace(/-/g, '');\n if (hasNegation && !removeNegation && allowNegative) {\n value = '-' + value;\n }\n return value;\n}\nfunction getNumberRegex(decimalSeparator, global) {\n return new RegExp((\"(^-)|[0-9]|\" + (escapeRegExp(decimalSeparator))), global ? 'g' : undefined);\n}\nfunction isNumericString(val, prefix, suffix) {\n // for empty value we can always treat it as numeric string\n if (val === '')\n { return true; }\n return (!(prefix === null || prefix === void 0 ? void 0 : prefix.match(/\\d/)) && !(suffix === null || suffix === void 0 ? void 0 : suffix.match(/\\d/)) && typeof val === 'string' && !isNaN(Number(val)));\n}\nfunction removeFormatting(value, changeMeta, props) {\n var assign;\n\n if ( changeMeta === void 0 ) changeMeta = getDefaultChangeMeta(value);\n var allowNegative = props.allowNegative;\n var prefix = props.prefix; if ( prefix === void 0 ) prefix = '';\n var suffix = props.suffix; if ( suffix === void 0 ) suffix = '';\n var decimalScale = props.decimalScale;\n var from = changeMeta.from;\n var to = changeMeta.to;\n var start = to.start;\n var end = to.end;\n var ref = getSeparators(props);\n var allowedDecimalSeparators = ref.allowedDecimalSeparators;\n var decimalSeparator = ref.decimalSeparator;\n var isBeforeDecimalSeparator = value[end] === decimalSeparator;\n /**\n * If only a number is added on empty input which matches with the prefix or suffix,\n * then don't remove it, just return the same\n */\n if (charIsNumber(value) &&\n (value === prefix || value === suffix) &&\n changeMeta.lastValue === '') {\n return value;\n }\n /** Check for any allowed decimal separator is added in the numeric format and replace it with decimal separator */\n if (end - start === 1 && allowedDecimalSeparators.indexOf(value[start]) !== -1) {\n var separator = decimalScale === 0 ? '' : decimalSeparator;\n value = value.substring(0, start) + separator + value.substring(start + 1, value.length);\n }\n var stripNegation = function (value, start, end) {\n /**\n * if prefix starts with - we don't allow negative number to avoid confusion\n * if suffix starts with - and the value length is same as suffix length, then the - sign is from the suffix\n * In other cases, if the value starts with - then it is a negation\n */\n var hasNegation = false;\n var hasDoubleNegation = false;\n if (prefix.startsWith('-')) {\n hasNegation = false;\n }\n else if (value.startsWith('--')) {\n hasNegation = false;\n hasDoubleNegation = true;\n }\n else if (suffix.startsWith('-') && value.length === suffix.length) {\n hasNegation = false;\n }\n else if (value[0] === '-') {\n hasNegation = true;\n }\n var charsToRemove = hasNegation ? 1 : 0;\n if (hasDoubleNegation)\n { charsToRemove = 2; }\n // remove negation/double negation from start to simplify prefix logic as negation comes before prefix\n if (charsToRemove) {\n value = value.substring(charsToRemove);\n // account for the removal of the negation for start and end index\n start -= charsToRemove;\n end -= charsToRemove;\n }\n return { value: value, start: start, end: end, hasNegation: hasNegation };\n };\n var toMetadata = stripNegation(value, start, end);\n var hasNegation = toMetadata.hasNegation;\n ((assign = toMetadata, value = assign.value, start = assign.start, end = assign.end));\n var ref$1 = stripNegation(changeMeta.lastValue, from.start, from.end);\n var fromStart = ref$1.start;\n var fromEnd = ref$1.end;\n var lastValue = ref$1.value;\n // if only prefix and suffix part is updated reset the value to last value\n // if the changed range is from suffix in the updated value, and the the suffix starts with the same characters, allow the change\n var updatedSuffixPart = value.substring(start, end);\n if (value.length &&\n lastValue.length &&\n (fromStart > lastValue.length - suffix.length || fromEnd < prefix.length) &&\n !(updatedSuffixPart && suffix.startsWith(updatedSuffixPart))) {\n value = lastValue;\n }\n /**\n * remove prefix\n * Remove whole prefix part if its present on the value\n * If the prefix is partially deleted (in which case change start index will be less the prefix length)\n * Remove only partial part of prefix.\n */\n var startIndex = 0;\n if (value.startsWith(prefix))\n { startIndex += prefix.length; }\n else if (start < prefix.length)\n { startIndex = start; }\n value = value.substring(startIndex);\n // account for deleted prefix for end\n end -= startIndex;\n /**\n * Remove suffix\n * Remove whole suffix part if its present on the value\n * If the suffix is partially deleted (in which case change end index will be greater than the suffixStartIndex)\n * remove the partial part of suffix\n */\n var endIndex = value.length;\n var suffixStartIndex = value.length - suffix.length;\n if (value.endsWith(suffix))\n { endIndex = suffixStartIndex; }\n // if the suffix is removed from the end\n else if (end > suffixStartIndex)\n { endIndex = end; }\n // if the suffix is removed from start\n else if (end > value.length - suffix.length)\n { endIndex = end; }\n value = value.substring(0, endIndex);\n // add the negation back and handle for double negation\n value = handleNegation(hasNegation ? (\"-\" + value) : value, allowNegative);\n // remove non numeric characters\n value = (value.match(getNumberRegex(decimalSeparator, true)) || []).join('');\n // replace the decimalSeparator with ., and only keep the first separator, ignore following ones\n var firstIndex = value.indexOf(decimalSeparator);\n value = value.replace(new RegExp(escapeRegExp(decimalSeparator), 'g'), function (match, index) {\n return index === firstIndex ? '.' : '';\n });\n //check if beforeDecimal got deleted and there is nothing after decimal,\n //clear all numbers in such case while keeping the - sign\n var ref$2 = splitDecimal(value, allowNegative);\n var beforeDecimal = ref$2.beforeDecimal;\n var afterDecimal = ref$2.afterDecimal;\n var addNegation = ref$2.addNegation; // eslint-disable-line prefer-const\n //clear only if something got deleted before decimal (cursor is before decimal)\n if (to.end - to.start < from.end - from.start &&\n beforeDecimal === '' &&\n isBeforeDecimalSeparator &&\n !parseFloat(afterDecimal)) {\n value = addNegation ? '-' : '';\n }\n return value;\n}\nfunction getCaretBoundary(formattedValue, props) {\n var prefix = props.prefix; if ( prefix === void 0 ) prefix = '';\n var suffix = props.suffix; if ( suffix === void 0 ) suffix = '';\n var boundaryAry = Array.from({ length: formattedValue.length + 1 }).map(function () { return true; });\n var hasNegation = formattedValue[0] === '-';\n // fill for prefix and negation\n boundaryAry.fill(false, 0, prefix.length + (hasNegation ? 1 : 0));\n // fill for suffix\n var valLn = formattedValue.length;\n boundaryAry.fill(false, valLn - suffix.length + 1, valLn + 1);\n return boundaryAry;\n}\nfunction validateAndUpdateProps(props) {\n var ref = getSeparators(props);\n var thousandSeparator = ref.thousandSeparator;\n var decimalSeparator = ref.decimalSeparator;\n // eslint-disable-next-line prefer-const\n var prefix = props.prefix; if ( prefix === void 0 ) prefix = '';\n var allowNegative = props.allowNegative; if ( allowNegative === void 0 ) allowNegative = true;\n if (thousandSeparator === decimalSeparator) {\n throw new Error((\"\\n Decimal separator can't be same as thousand separator.\\n thousandSeparator: \" + thousandSeparator + \" (thousandSeparator = {true} is same as thousandSeparator = \\\",\\\")\\n decimalSeparator: \" + decimalSeparator + \" (default value for decimalSeparator is .)\\n \"));\n }\n if (prefix.startsWith('-') && allowNegative) {\n // TODO: throw error in next major version\n console.error((\"\\n Prefix can't start with '-' when allowNegative is true.\\n prefix: \" + prefix + \"\\n allowNegative: \" + allowNegative + \"\\n \"));\n allowNegative = false;\n }\n return Object.assign(Object.assign({}, props), { allowNegative: allowNegative });\n}\nfunction useNumericFormat(props) {\n // validate props\n props = validateAndUpdateProps(props);\n var _decimalSeparator = props.decimalSeparator;\n var _allowedDecimalSeparators = props.allowedDecimalSeparators;\n var thousandsGroupStyle = props.thousandsGroupStyle;\n var suffix = props.suffix;\n var allowNegative = props.allowNegative;\n var allowLeadingZeros = props.allowLeadingZeros;\n var onKeyDown = props.onKeyDown; if ( onKeyDown === void 0 ) onKeyDown = noop;\n var onBlur = props.onBlur; if ( onBlur === void 0 ) onBlur = noop;\n var thousandSeparator = props.thousandSeparator;\n var decimalScale = props.decimalScale;\n var fixedDecimalScale = props.fixedDecimalScale;\n var prefix = props.prefix; if ( prefix === void 0 ) prefix = '';\n var defaultValue = props.defaultValue;\n var value = props.value;\n var valueIsNumericString = props.valueIsNumericString;\n var onValueChange = props.onValueChange;\n var restProps = __rest(props, [\"decimalSeparator\", \"allowedDecimalSeparators\", \"thousandsGroupStyle\", \"suffix\", \"allowNegative\", \"allowLeadingZeros\", \"onKeyDown\", \"onBlur\", \"thousandSeparator\", \"decimalScale\", \"fixedDecimalScale\", \"prefix\", \"defaultValue\", \"value\", \"valueIsNumericString\", \"onValueChange\"]);\n // get derived decimalSeparator and allowedDecimalSeparators\n var ref = getSeparators(props);\n var decimalSeparator = ref.decimalSeparator;\n var allowedDecimalSeparators = ref.allowedDecimalSeparators;\n var _format = function (numStr) { return format(numStr, props); };\n var _removeFormatting = function (inputValue, changeMeta) { return removeFormatting(inputValue, changeMeta, props); };\n var _value = isNil(value) ? defaultValue : value;\n // try to figure out isValueNumericString based on format prop and value\n var _valueIsNumericString = valueIsNumericString !== null && valueIsNumericString !== void 0 ? valueIsNumericString : isNumericString(_value, prefix, suffix);\n if (!isNil(value)) {\n _valueIsNumericString = _valueIsNumericString || typeof value === 'number';\n }\n else if (!isNil(defaultValue)) {\n _valueIsNumericString = _valueIsNumericString || typeof defaultValue === 'number';\n }\n var roundIncomingValueToPrecision = function (value) {\n if (isNotValidValue(value))\n { return value; }\n if (typeof value === 'number') {\n value = toNumericString(value);\n }\n /**\n * only round numeric or float string values coming through props,\n * we don't need to do it for onChange events, as we want to prevent typing there\n */\n if (_valueIsNumericString && typeof decimalScale === 'number') {\n return roundToPrecision(value, decimalScale, Boolean(fixedDecimalScale));\n }\n return value;\n };\n var ref$1 = useInternalValues(roundIncomingValueToPrecision(value), roundIncomingValueToPrecision(defaultValue), Boolean(_valueIsNumericString), _format, _removeFormatting, onValueChange);\n var ref$1_0 = ref$1[0];\n var numAsString = ref$1_0.numAsString;\n var formattedValue = ref$1_0.formattedValue;\n var _onValueChange = ref$1[1];\n var _onKeyDown = function (e) {\n var el = e.target;\n var key = e.key;\n var selectionStart = el.selectionStart;\n var selectionEnd = el.selectionEnd;\n var value = el.value; if ( value === void 0 ) value = '';\n // if multiple characters are selected and user hits backspace, no need to handle anything manually\n if (selectionStart !== selectionEnd) {\n onKeyDown(e);\n return;\n }\n // if user hits backspace, while the cursor is before prefix, and the input has negation, remove the negation\n if (key === 'Backspace' &&\n value[0] === '-' &&\n selectionStart === prefix.length + 1 &&\n allowNegative) {\n // bring the cursor to after negation\n setCaretPosition(el, 1);\n }\n // don't allow user to delete decimal separator when decimalScale and fixedDecimalScale is set\n if (decimalScale && fixedDecimalScale) {\n if (key === 'Backspace' && value[selectionStart - 1] === decimalSeparator) {\n setCaretPosition(el, selectionStart - 1);\n e.preventDefault();\n }\n else if (key === 'Delete' && value[selectionStart] === decimalSeparator) {\n e.preventDefault();\n }\n }\n // if user presses the allowed decimal separator before the separator, move the cursor after the separator\n if ((allowedDecimalSeparators === null || allowedDecimalSeparators === void 0 ? void 0 : allowedDecimalSeparators.includes(key)) && value[selectionStart] === decimalSeparator) {\n setCaretPosition(el, selectionStart + 1);\n }\n var _thousandSeparator = thousandSeparator === true ? ',' : thousandSeparator;\n // move cursor when delete or backspace is pressed before/after thousand separator\n if (key === 'Backspace' && value[selectionStart - 1] === _thousandSeparator) {\n setCaretPosition(el, selectionStart - 1);\n }\n if (key === 'Delete' && value[selectionStart] === _thousandSeparator) {\n setCaretPosition(el, selectionStart + 1);\n }\n onKeyDown(e);\n };\n var _onBlur = function (e) {\n var _value = numAsString;\n // if there no no numeric value, clear the input\n if (!_value.match(/\\d/g)) {\n _value = '';\n }\n // clear leading 0s\n if (!allowLeadingZeros) {\n _value = fixLeadingZero(_value);\n }\n // apply fixedDecimalScale on blur event\n if (fixedDecimalScale && decimalScale) {\n _value = roundToPrecision(_value, decimalScale, fixedDecimalScale);\n }\n if (_value !== numAsString) {\n var formattedValue = format(_value, props);\n _onValueChange({\n formattedValue: formattedValue,\n value: _value,\n floatValue: parseFloat(_value),\n }, {\n event: e,\n source: SourceType.event,\n });\n }\n onBlur(e);\n };\n var isValidInputCharacter = function (inputChar) {\n if (inputChar === decimalSeparator)\n { return true; }\n return charIsNumber(inputChar);\n };\n var isCharacterSame = function (ref) {\n var currentValue = ref.currentValue;\n var lastValue = ref.lastValue;\n var formattedValue = ref.formattedValue;\n var currentValueIndex = ref.currentValueIndex;\n var formattedValueIndex = ref.formattedValueIndex;\n\n var curChar = currentValue[currentValueIndex];\n var newChar = formattedValue[formattedValueIndex];\n /**\n * NOTE: as thousand separator and allowedDecimalSeparators can be same, we need to check on\n * typed range if we have typed any character from allowedDecimalSeparators, in that case we\n * consider different characters like , and . same within the range of updated value.\n */\n var typedRange = findChangeRange(lastValue, currentValue);\n var to = typedRange.to;\n if (currentValueIndex >= to.start &&\n currentValueIndex < to.end &&\n allowedDecimalSeparators &&\n allowedDecimalSeparators.includes(curChar) &&\n newChar === decimalSeparator) {\n return true;\n }\n return curChar === newChar;\n };\n return Object.assign(Object.assign({}, restProps), { value: formattedValue, valueIsNumericString: false, isValidInputCharacter: isValidInputCharacter,\n isCharacterSame: isCharacterSame, onValueChange: _onValueChange, format: _format, removeFormatting: _removeFormatting, getCaretBoundary: function (formattedValue) { return getCaretBoundary(formattedValue, props); }, onKeyDown: _onKeyDown, onBlur: _onBlur });\n}\nfunction NumericFormat(props) {\n var numericFormatProps = useNumericFormat(props);\n return React.createElement(NumberFormatBase, Object.assign({}, numericFormatProps));\n}\n\nfunction format$1(numStr, props) {\n var format = props.format;\n var allowEmptyFormatting = props.allowEmptyFormatting;\n var mask = props.mask;\n var patternChar = props.patternChar; if ( patternChar === void 0 ) patternChar = '#';\n if (numStr === '' && !allowEmptyFormatting)\n { return ''; }\n var hashCount = 0;\n var formattedNumberAry = format.split('');\n for (var i = 0, ln = format.length; i < ln; i++) {\n if (format[i] === patternChar) {\n formattedNumberAry[i] = numStr[hashCount] || getMaskAtIndex(mask, hashCount);\n hashCount += 1;\n }\n }\n return formattedNumberAry.join('');\n}\nfunction removeFormatting$1(value, changeMeta, props) {\n if ( changeMeta === void 0 ) changeMeta = getDefaultChangeMeta(value);\n\n var format = props.format;\n var patternChar = props.patternChar; if ( patternChar === void 0 ) patternChar = '#';\n var from = changeMeta.from;\n var to = changeMeta.to;\n var lastValue = changeMeta.lastValue; if ( lastValue === void 0 ) lastValue = '';\n var isNumericSlot = function (caretPos) { return format[caretPos] === patternChar; };\n var removeFormatChar = function (string, startIndex) {\n var str = '';\n for (var i = 0; i < string.length; i++) {\n if (isNumericSlot(startIndex + i) && charIsNumber(string[i])) {\n str += string[i];\n }\n }\n return str;\n };\n var extractNumbers = function (str) { return str.replace(/[^0-9]/g, ''); };\n // if format doesn't have any number, remove all the non numeric characters\n if (!format.match(/\\d/)) {\n return extractNumbers(value);\n }\n /**\n * if user paste the whole formatted text in an empty input, check if matches to the pattern\n * and remove the format characters, if there is a mismatch on the pattern, do plane number extract\n */\n if (lastValue === '' && value.length === format.length) {\n var str = '';\n for (var i = 0; i < value.length; i++) {\n if (isNumericSlot(i)) {\n if (charIsNumber(value[i])) {\n str += value[i];\n }\n }\n else if (value[i] !== format[i]) {\n // if there is a mismatch on the pattern, do plane number extract\n return extractNumbers(value);\n }\n }\n return str;\n }\n /**\n * For partial change,\n * where ever there is a change on the input, we can break the number in three parts\n * 1st: left part which is unchanged\n * 2nd: middle part which is changed\n * 3rd: right part which is unchanged\n *\n * The first and third section will be same as last value, only the middle part will change\n * We can consider on the change part all the new characters are non format characters.\n * And on the first and last section it can have partial format characters.\n *\n * We pick first and last section from the lastValue (as that has 1-1 mapping with format)\n * and middle one from the update value.\n */\n var firstSection = lastValue.substring(0, from.start);\n var middleSection = value.substring(to.start, to.end);\n var lastSection = lastValue.substring(from.end);\n return (\"\" + (removeFormatChar(firstSection, 0)) + (extractNumbers(middleSection)) + (removeFormatChar(lastSection, from.end)));\n}\nfunction getCaretBoundary$1(formattedValue, props) {\n var format = props.format;\n var mask = props.mask;\n var patternChar = props.patternChar; if ( patternChar === void 0 ) patternChar = '#';\n var boundaryAry = Array.from({ length: formattedValue.length + 1 }).map(function () { return true; });\n var hashCount = 0;\n var firstEmptySlot = -1;\n var maskAndIndexMap = {};\n format.split('').forEach(function (char, index) {\n var maskAtIndex = undefined;\n if (char === patternChar) {\n hashCount++;\n maskAtIndex = getMaskAtIndex(mask, hashCount - 1);\n if (firstEmptySlot === -1 && formattedValue[index] === maskAtIndex) {\n firstEmptySlot = index;\n }\n }\n maskAndIndexMap[index] = maskAtIndex;\n });\n var isPosAllowed = function (pos) {\n // the position is allowed if the position is not masked and valid number area\n return format[pos] === patternChar && formattedValue[pos] !== maskAndIndexMap[pos];\n };\n for (var i = 0, ln = boundaryAry.length; i < ln; i++) {\n // consider caret to be in boundary if it is before or after numeric value\n // Note: on pattern based format its denoted by patternCharacter\n // we should also allow user to put cursor on first empty slot\n boundaryAry[i] = i === firstEmptySlot || isPosAllowed(i) || isPosAllowed(i - 1);\n }\n // the first patternChar position is always allowed\n boundaryAry[format.indexOf(patternChar)] = true;\n return boundaryAry;\n}\nfunction validateProps(props) {\n var mask = props.mask;\n if (mask) {\n var maskAsStr = mask === 'string' ? mask : mask.toString();\n if (maskAsStr.match(/\\d/g)) {\n throw new Error((\"Mask \" + mask + \" should not contain numeric character;\"));\n }\n }\n}\nfunction isNumericString$1(val, format) {\n //we can treat empty string as numeric string\n if (val === '')\n { return true; }\n return !(format === null || format === void 0 ? void 0 : format.match(/\\d/)) && typeof val === 'string' && (!!val.match(/^\\d+$/) || val === '');\n}\nfunction usePatternFormat(props) {\n var mask = props.mask;\n var allowEmptyFormatting = props.allowEmptyFormatting;\n var formatProp = props.format;\n var inputMode = props.inputMode; if ( inputMode === void 0 ) inputMode = 'numeric';\n var onKeyDown = props.onKeyDown; if ( onKeyDown === void 0 ) onKeyDown = noop;\n var patternChar = props.patternChar; if ( patternChar === void 0 ) patternChar = '#';\n var value = props.value;\n var defaultValue = props.defaultValue;\n var valueIsNumericString = props.valueIsNumericString;\n var restProps = __rest(props, [\"mask\", \"allowEmptyFormatting\", \"format\", \"inputMode\", \"onKeyDown\", \"patternChar\", \"value\", \"defaultValue\", \"valueIsNumericString\"]);\n // validate props\n validateProps(props);\n var _getCaretBoundary = function (formattedValue) {\n return getCaretBoundary$1(formattedValue, props);\n };\n var _onKeyDown = function (e) {\n var key = e.key;\n var el = e.target;\n var selectionStart = el.selectionStart;\n var selectionEnd = el.selectionEnd;\n var value = el.value;\n // if multiple characters are selected and user hits backspace, no need to handle anything manually\n if (selectionStart !== selectionEnd) {\n onKeyDown(e);\n return;\n }\n // bring the cursor to closest numeric section\n var caretPos = selectionStart;\n // if backspace is pressed after the format characters, bring it to numeric section\n // if delete is pressed before the format characters, bring it to numeric section\n if (key === 'Backspace' || key === 'Delete') {\n var direction = 'right';\n if (key === 'Backspace') {\n while (caretPos > 0 && formatProp[caretPos - 1] !== patternChar) {\n caretPos--;\n }\n direction = 'left';\n }\n else {\n var formatLn = formatProp.length;\n while (caretPos < formatLn && formatProp[caretPos] !== patternChar) {\n caretPos++;\n }\n direction = 'right';\n }\n caretPos = getCaretPosInBoundary(value, caretPos, _getCaretBoundary(value), direction);\n }\n else if (formatProp[caretPos] !== patternChar &&\n key !== 'ArrowLeft' &&\n key !== 'ArrowRight') {\n // if user is typing on format character position, bring user to next allowed caret position\n caretPos = getCaretPosInBoundary(value, caretPos + 1, _getCaretBoundary(value), 'right');\n }\n // if we changing caret position, set the caret position\n if (caretPos !== selectionStart) {\n setCaretPosition(el, caretPos);\n }\n onKeyDown(e);\n };\n // try to figure out isValueNumericString based on format prop and value\n var _value = isNil(value) ? defaultValue : value;\n var isValueNumericString = valueIsNumericString !== null && valueIsNumericString !== void 0 ? valueIsNumericString : isNumericString$1(_value, formatProp);\n var _props = Object.assign(Object.assign({}, props), { valueIsNumericString: isValueNumericString });\n return Object.assign(Object.assign({}, restProps), { value: value,\n defaultValue: defaultValue, valueIsNumericString: isValueNumericString, inputMode: inputMode, format: function (numStr) { return format$1(numStr, _props); }, removeFormatting: function (inputValue, changeMeta) { return removeFormatting$1(inputValue, changeMeta, _props); }, getCaretBoundary: _getCaretBoundary, onKeyDown: _onKeyDown });\n}\nfunction PatternFormat(props) {\n var patternFormatProps = usePatternFormat(props);\n return React.createElement(NumberFormatBase, Object.assign({}, patternFormatProps));\n}\n\nexport { NumberFormatBase, NumericFormat, PatternFormat, getCaretBoundary as getNumericCaretBoundary, getCaretBoundary$1 as getPatternCaretBoundary, format as numericFormatter, format$1 as patternFormatter, removeFormatting as removeNumericFormat, removeFormatting$1 as removePatternFormat, useNumericFormat, usePatternFormat };\n","import type * as Spreadsheet from '@/src/components/spreadsheet/model/spreadsheet';\nimport { cn } from '@/src/shared/lib/cn';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/src/shared/ui/select';\nimport { CaretSortIcon } from '@radix-ui/react-icons';\nimport { type ClipboardEvent, useCallback } from 'react';\n\nexport function SelectDataEditor(\n props: { items: Array<Spreadsheet.SelectItem> } & Spreadsheet.DataEditor,\n) {\n const { value, onBlur, onChange, onPaste, items } = props;\n\n const _onPaste = useCallback(\n (e: ClipboardEvent<HTMLButtonElement>) => {\n e.preventDefault();\n onPaste?.();\n },\n [onPaste],\n );\n\n return (\n <Select value={value as string} onValueChange={(data) => onChange?.({ data })} defaultOpen>\n <SelectTrigger\n onBlur={onBlur}\n onPaste={_onPaste}\n className={cn(\n 'h-full w-full rounded-none border-none pl-1 text-xs outline-none focus:ring-0',\n )}\n >\n <SelectValue placeholder=\"Selecionar\" />\n </SelectTrigger>\n\n <SelectContent>\n {items.map(({ value, text }) => (\n <SelectItem key={value} className=\"text-xs\" value={value}>\n {text}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n}\n\nexport function SelectDataViewer(\n props: { items: Array<Spreadsheet.SelectItem> } & Spreadsheet.DataViewer,\n) {\n const { value, items } = props;\n\n const selected = useMemo(() => items.find((item) => item.value === value), [items, value]);\n const displayValue = useMemo(() => (selected ? selected.text : 'Selecionar'), [selected]);\n\n return (\n <div className=\"flex h-full w-full items-center justify-between pr-px pl-1\">\n <p className=\"line-clamp-1 text-xs\">{displayValue}</p>\n <CaretSortIcon className=\"h-4 w-4 opacity-50\" />\n </div>\n );\n}\n","import * as Spreadsheet from '@/src/components/spreadsheet/model/spreadsheet';\nimport { cn } from '@/src/shared/lib/cn';\nimport { moveInputCursorToEnd } from '@/src/shared/lib/move-input-cursor-to-end';\nimport { readTextFromClipboard } from '@/src/shared/lib/read-text-from-clipboard';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/src/shared/ui/tooltip';\nimport {\n type ChangeEvent,\n type ClipboardEvent,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nconst CHAR_WIDTH = 6;\nconst INPUT_MAX_LENGTH = 200;\n\nexport function TextDataEditor(props: Spreadsheet.DataEditor) {\n const { value, onBlur, onChange, onPaste, setMode, column, selected } = props;\n const valueAsString = value as string;\n\n const textareaRef = useRef<null | HTMLTextAreaElement>(null);\n const [textareaHeight, setTextareaHeight] = useState(0);\n\n const overflow = useMemo(\n () => charOverflow(valueAsString, column.width),\n [valueAsString, column.width],\n );\n\n const _onPaste = useCallback(\n <T extends HTMLInputElement | HTMLTextAreaElement>(e: ClipboardEvent<T>) => {\n const clipboard = readTextFromClipboard(e);\n const singleLine = oneLineString(clipboard);\n\n if (!singleLine) {\n e.preventDefault();\n onPaste?.();\n }\n },\n [onPaste],\n );\n\n const _onBlur = useCallback(() => {\n onBlur?.();\n setMode?.('view');\n }, [onBlur, setMode]);\n\n const updateTextareaHeight = useCallback(() => {\n const element = textareaRef.current;\n\n if (!element) return;\n\n const scrollHeight = element.scrollHeight;\n element.style.height = `${scrollHeight}px`;\n setTextareaHeight(scrollHeight);\n }, []);\n\n const _onChange = useCallback(\n <T extends HTMLInputElement | HTMLTextAreaElement>(e: ChangeEvent<T>) => {\n onChange?.({ data: e.target.value });\n updateTextareaHeight();\n },\n [updateTextareaHeight, onChange],\n );\n\n if (overflow) {\n return (\n <div\n style={{ height: textareaHeight }}\n className={cn(\n '-left-0.5 -top-0.5 absolute z-40 h-fit w-fit border bg-white shadow-lg outline outline-2 outline-blue-500',\n selected ? 'bg-blue-50' : 'bg-white',\n )}\n >\n <div\n style={{ height: textareaHeight - 1 }}\n className=\"h-full w-full outline outline-[3px] outline-sky-200 outline-offset-2\"\n >\n <textarea\n ref={textareaRef}\n onBlur={_onBlur}\n onPaste={_onPaste}\n value={valueAsString}\n onChange={_onChange}\n className={cn(\n 'resize-none break-all rounded-none bg-transparent py-1.5 pr-3 pl-1 text-xs outline-none',\n )}\n onFocus={(e) => moveInputCursorToEnd(e.target)}\n maxLength={INPUT_MAX_LENGTH}\n style={{ width: column.width }}\n autoFocus\n />\n </div>\n </div>\n );\n }\n\n return (\n <input\n onBlur={onBlur}\n onPaste={_onPaste}\n value={valueAsString}\n maxLength={INPUT_MAX_LENGTH}\n onChange={_onChange}\n className={cn('h-full w-full bg-transparent pl-1 text-xs outline-none')}\n autoFocus\n />\n );\n}\n\nexport function TextDataViewer(props: Spreadsheet.DataViewer) {\n const { value, column, selected } = props;\n const valueAsString = value as string;\n\n const overflow = useMemo(\n () => charOverflow(valueAsString, column.width),\n [valueAsString, column.width],\n );\n\n if (overflow) {\n return (\n <TooltipProvider delayDuration={0}>\n <Tooltip>\n <TooltipTrigger className=\"w-full\">\n <div className=\"flex h-full w-full items-center overflow-hidden\">\n <p className=\"line-clamp-1 break-all pl-1 text-left text-xs\">{valueAsString}</p>\n </div>\n </TooltipTrigger>\n\n <TooltipContent\n align=\"start\"\n side=\"bottom\"\n alignOffset={-2}\n sideOffset={-Spreadsheet.CELL_INITIAL_HEIGHT}\n className={cn(\n 'h-fit w-full break-all rounded-none border bg-white pl-1 text-black shadow-lg',\n 'data-[state=closed]:transform-none data-[side=bottom]:animate-none data-[state=closed]:animate-none data-[state=closed]:transition-none',\n selected ? 'bg-blue-50' : 'bg-white',\n )}\n style={{ width: column.width }}\n >\n <p>{valueAsString}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n }\n\n return (\n <div className=\"flex h-full w-full items-center overflow-hidden\">\n <p className=\"line-clamp-1 break-all pl-1 text-left text-xs\" title={valueAsString}>\n {valueAsString}\n </p>\n </div>\n );\n}\n\nfunction charOverflow(string: string, width: number) {\n return CHAR_WIDTH * string?.length > width;\n}\n\nfunction oneLineString(value: string) {\n return ['\\t', '\\n', '\\r'].every((regex) => !value.includes(regex));\n}\n","/** Move the cursor of given input (or textarea) element to it's end */\nexport function moveInputCursorToEnd(element: HTMLInputElement | HTMLTextAreaElement) {\n element.selectionStart = element.selectionEnd = element.value.length;\n}\n","import type { ClipboardEvent } from 'react';\n\nexport const PLAIN_TEXT_MIME = 'text/plain';\n\n/** Read text from given clipboard event */\nexport function readTextFromClipboard<T>(event: ClipboardEvent<T>): string {\n // @ts-ignore\n if (window.clipboardData?.getData) {\n // @ts-ignore\n return window.clipboardData.getData('Text');\n }\n\n if (event.clipboardData?.getData) {\n return event.clipboardData.getData(PLAIN_TEXT_MIME);\n }\n\n return '';\n}\n","import { useSpreadsheet } from '@/src/components/spreadsheet/lib/use-spreadsheet';\nimport * as Matrix from '@/src/components/spreadsheet/model/matrix';\nimport * as Spreadsheet from '@/src/components/spreadsheet/model/spreadsheet';\nimport { cn } from '@/src/shared/lib/cn';\nimport { useMemo } from 'react';\n\nexport function RowIndicator({ row }: { row: number }) {\n const { onSelectRow, pointRange, matrix } = useSpreadsheet();\n\n const isRowInRange = useMemo(\n () => pointRange && row >= pointRange.start.row && row <= pointRange.end.row,\n [pointRange, row],\n );\n const isEntireRowSelected = useMemo(\n () => !!(pointRange && Matrix.hasEntireRows({ matrix, pointRange, row })),\n [matrix, pointRange, row],\n );\n\n return (\n <div\n className={cn(\n 'flex h-7 w-12 shrink-0 cursor-default select-none items-center justify-center border-r border-b text-[#8E8EA9] text-xs',\n isRowInRange && 'bg-blue-100 font-bold text-blue-700',\n isEntireRowSelected && 'bg-[#0085FF] font-bold text-white',\n )}\n onClick={(e) => onSelectRow(row, e)}\n style={{\n height: Spreadsheet.CELL_INITIAL_HEIGHT,\n }}\n >\n {row + 1}\n </div>\n );\n}\n","import { useSpreadsheet } from '@/src/components/spreadsheet/lib/use-spreadsheet';\nimport { cn } from '@/src/shared/lib/cn';\n\nexport function Start({ className }: { className?: string }) {\n const { staticRows, emptySize, onInsertNewRow } = useSpreadsheet();\n\n if (staticRows) return null;\n\n return (\n <div\n className={cn(\n 'pointer-events-none mt-[calc(28px+36px)] flex h-[calc(100%-28px-28px)] w-full items-center justify-center',\n emptySize && 'pointer-events-auto bg-white/25 backdrop-blur-sm',\n className,\n )}\n >\n {emptySize && (\n <p className=\"text-neutral-500\">\n <span>Clique </span>\n <button type=\"button\" onClick={onInsertNewRow} className=\"font-bold\">\n AQUI\n </button>\n <span> para começar a preencher a tabela.</span>\n </p>\n )}\n </div>\n );\n}\n","import { useSpreadsheet } from '@/src/components/spreadsheet/lib/use-spreadsheet';\nimport { AddRowIcon } from '@/src/components/spreadsheet/ui/icons/add-row-icon';\nimport { RemoveRowIcon } from '@/src/components/spreadsheet/ui/icons/remove-row-icon';\nimport { Button } from '@/src/shared/ui/button';\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuTrigger,\n} from '@/src/shared/ui/dropdown-menu';\nimport { ChevronDown } from 'lucide-react';\nimport { nanoid } from 'nanoid';\nimport { useMemo } from 'react';\n\nexport function Toolbar() {\n const {\n hasSomeEntireRow,\n emptySize,\n staticRows,\n columns,\n onInsertNewRow,\n onRemoveRow,\n onColumnVisibilityChange,\n } = useSpreadsheet();\n\n const visibleColumns = useMemo(() => columns.filter(({ visible }) => visible), [columns]);\n const allVisible = useMemo(\n () => columns.length === visibleColumns.length,\n [columns.length, visibleColumns.length],\n );\n\n const allVisibleLabel = 'Exibindo todas as colunas';\n const visibleColumnsLabel = `Exibindo ${visibleColumns.length} de ${columns.length} colunas`;\n const columnVisibilityLabel = allVisible ? allVisibleLabel : visibleColumnsLabel;\n\n return (\n <div className=\"sticky top-0 z-50 flex w-full items-center justify-between rounded-t-md border bg-[#EAF5FF] px-4 py-2.5\">\n <div className=\"flex items-center gap-6\">\n <Button\n disabled={staticRows}\n size=\"icon\"\n variant=\"ghost\"\n onClick={onInsertNewRow}\n className=\"text-[#4A4A6A] transition-none active:bg-[#0085FF] hover:bg-[#8FD6FF] active:text-white\"\n >\n <AddRowIcon />\n </Button>\n\n <Button\n disabled={staticRows || emptySize || !hasSomeEntireRow}\n size=\"icon\"\n variant=\"ghost\"\n onClick={onRemoveRow}\n className=\"text-[#4A4A6A] transition-none active:bg-[#0085FF] hover:bg-[#8FD6FF] active:text-white\"\n >\n <RemoveRowIcon />\n </Button>\n </div>\n\n <DropdownMenu>\n <DropdownMenuTrigger asChild className=\"w-56\">\n <Button variant=\"outline\" className=\"justify-between px-2\">\n <span className=\"text-xs\">{columnVisibilityLabel}</span>\n <ChevronDown className=\"h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n\n <DropdownMenuContent className=\"w-56\">\n {columns.map(({ name, id, alphabetLetter, visible }) => (\n <DropdownMenuCheckboxItem\n key={`spreadsheet__column__dropdown_checkbox__key__${nanoid()}`}\n checked={visible}\n onCheckedChange={() => onColumnVisibilityChange(id)}\n className=\"justify-between text-xs\"\n >\n <span>{name}</span>\n <span className=\"text-[10px] text-neutral-500\">{alphabetLetter}</span>\n </DropdownMenuCheckboxItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n}\n","import type { SVGProps } from 'react';\n\nexport function AddRowIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n fill=\"none\"\n viewBox=\"0 0 20 20\"\n {...props}\n >\n <title>Add Row</title>\n <path\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.5\"\n d=\"M10 6.667v6.666M6.667 10h6.666M6.5 17.5h7c1.4 0 2.1 0 2.635-.273a2.5 2.5 0 001.092-1.092c.273-.535.273-1.235.273-2.635v-7c0-1.4 0-2.1-.273-2.635a2.5 2.5 0 00-1.092-1.093C15.6 2.5 14.9 2.5 13.5 2.5h-7c-1.4 0-2.1 0-2.635.272a2.5 2.5 0 00-1.093 1.093C2.5 4.4 2.5 5.1 2.5 6.5v7c0 1.4 0 2.1.272 2.635a2.5 2.5 0 001.093 1.092C4.4 17.5 5.1 17.5 6.5 17.5z\"\n />\n </svg>\n );\n}\n","import type { SVGProps } from 'react';\n\nexport function RemoveRowIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n fill=\"none\"\n viewBox=\"0 0 20 20\"\n {...props}\n >\n <title>Remove Row</title>\n <path\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.5\"\n d=\"M13.333 5v-.667c0-.933 0-1.4-.181-1.756a1.667 1.667 0 00-.729-.729c-.356-.181-.823-.181-1.756-.181H9.333c-.933 0-1.4 0-1.756.181-.314.16-.569.415-.729.729-.181.356-.181.823-.181 1.756V5m1.666 4.583v4.167m3.334-4.167v4.167M2.5 5h15m-1.667 0v9.333c0 1.4 0 2.1-.272 2.635a2.5 2.5 0 01-1.093 1.093c-.534.272-1.235.272-2.635.272H8.167c-1.4 0-2.1 0-2.635-.272a2.5 2.5 0 01-1.093-1.093c-.272-.535-.272-1.235-.272-2.635V5\"\n />\n </svg>\n );\n}\n","import { cn } from '@/src/shared/lib/cn';\nimport { Slot } from '@radix-ui/react-slot';\nimport { type VariantProps, cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nconst buttonVariants = cva(\n 'inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground shadow hover:bg-primary/90',\n destructive: 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90',\n outline:\n 'border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground',\n secondary: 'bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n default: 'h-9 px-4 py-2',\n sm: 'h-8 rounded-md px-3 text-xs',\n lg: 'h-10 rounded-md px-8',\n icon: 'h-9 w-9',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button';\n return (\n <Comp className={cn(buttonVariants({ variant, size, className }))} ref={ref} {...props} />\n );\n },\n);\n\nButton.displayName = 'Button';\n\nexport { Button, buttonVariants };\n","import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? \"\".concat(value) : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>{\n return (props)=>{\n var ref;\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 : (ref = config.compoundVariants) === null || ref === void 0 ? void 0 : ref.reduce((acc, param1)=>{\n let { class: cvClass , className: cvClassName , ...compoundVariantOptions } = param1;\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\n\n//# sourceMappingURL=index.mjs.map","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))for(t=0;t<e.length;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f);else for(t in e)e[t]&&(n&&(n+=\" \"),n+=t);return n}export function clsx(){for(var e,t,f=0,n=\"\";f<arguments.length;)(e=arguments[f++])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","'use client';\nimport { cn } from '@/src/shared/lib/cn';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport { CheckIcon, ChevronRightIcon, DotFilledIcon } from '@radix-ui/react-icons';\nimport * as React from 'react';\n\nconst DropdownMenu = DropdownMenuPrimitive.Root;\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group;\n\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal;\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub;\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n 'flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[state=open]:bg-accent focus:bg-accent',\n inset && 'pl-8',\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto h-4 w-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n));\nDropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n '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 bg-popover p-1 text-popover-foreground shadow-lg data-[state=closed]:animate-out data-[state=open]:animate-in',\n className,\n )}\n {...props}\n />\n));\nDropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md',\n '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 data-[state=closed]:animate-out data-[state=open]:animate-in',\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n));\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors data-[disabled]:pointer-events-none focus:bg-accent focus:text-accent-foreground data-[disabled]:opacity-50',\n inset && 'pl-8',\n className,\n )}\n {...props}\n />\n));\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pr-2 pl-8 text-sm outline-none transition-colors data-[disabled]:pointer-events-none focus:bg-accent focus:text-accent-foreground data-[disabled]:opacity-50',\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n));\nDropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pr-2 pl-8 text-sm outline-none transition-colors data-[disabled]:pointer-events-none focus:bg-accent focus:text-accent-foreground data-[disabled]:opacity-50',\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <DotFilledIcon className=\"h-4 w-4 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n));\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn('px-2 py-1.5 font-semibold text-sm', inset && 'pl-8', className)}\n {...props}\n />\n));\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn('-mx-1 my-1 h-px bg-muted', className)}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;\n\nconst DropdownMenuShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span className={cn('ml-auto text-xs tracking-widest opacity-60', className)} {...props} />\n );\n};\nDropdownMenuShortcut.displayName = 'DropdownMenuShortcut';\n\nexport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n};\n","import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { createCollection } from '@radix-ui/react-collection';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useId } from '@radix-ui/react-id';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { useDirection } from '@radix-ui/react-direction';\n\nimport type * as Radix from '@radix-ui/react-primitive';\nimport type { Scope } from '@radix-ui/react-context';\n\nconst ENTRY_FOCUS = 'rovingFocusGroup.onEntryFocus';\nconst EVENT_OPTIONS = { bubbles: false, cancelable: true };\n\n/* -------------------------------------------------------------------------------------------------\n * RovingFocusGroup\n * -----------------------------------------------------------------------------------------------*/\n\nconst GROUP_NAME = 'RovingFocusGroup';\n\ntype ItemData = { id: string; focusable: boolean; active: boolean };\nconst [Collection, useCollection, createCollectionScope] = createCollection<\n HTMLSpanElement,\n ItemData\n>(GROUP_NAME);\n\ntype ScopedProps<P> = P & { __scopeRovingFocusGroup?: Scope };\nconst [createRovingFocusGroupContext, createRovingFocusGroupScope] = createContextScope(\n GROUP_NAME,\n [createCollectionScope]\n);\n\ntype Orientation = React.AriaAttributes['aria-orientation'];\ntype Direction = 'ltr' | 'rtl';\n\ninterface RovingFocusGroupOptions {\n /**\n * The orientation of the group.\n * Mainly so arrow navigation is done accordingly (left & right vs. up & down)\n */\n orientation?: Orientation;\n /**\n * The direction of navigation between items.\n */\n dir?: Direction;\n /**\n * Whether keyboard navigation should loop around\n * @defaultValue false\n */\n loop?: boolean;\n}\n\ntype RovingContextValue = RovingFocusGroupOptions & {\n currentTabStopId: string | null;\n onItemFocus(tabStopId: string): void;\n onItemShiftTab(): void;\n onFocusableItemAdd(): void;\n onFocusableItemRemove(): void;\n};\n\nconst [RovingFocusProvider, useRovingFocusContext] =\n createRovingFocusGroupContext<RovingContextValue>(GROUP_NAME);\n\ntype RovingFocusGroupElement = RovingFocusGroupImplElement;\ninterface RovingFocusGroupProps extends RovingFocusGroupImplProps {}\n\nconst RovingFocusGroup = React.forwardRef<RovingFocusGroupElement, RovingFocusGroupProps>(\n (props: ScopedProps<RovingFocusGroupProps>, forwardedRef) => {\n return (\n <Collection.Provider scope={props.__scopeRovingFocusGroup}>\n <Collection.Slot scope={props.__scopeRovingFocusGroup}>\n <RovingFocusGroupImpl {...props} ref={forwardedRef} />\n </Collection.Slot>\n </Collection.Provider>\n );\n }\n);\n\nRovingFocusGroup.displayName = GROUP_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype RovingFocusGroupImplElement = React.ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = Radix.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface RovingFocusGroupImplProps\n extends Omit<PrimitiveDivProps, 'dir'>,\n RovingFocusGroupOptions {\n currentTabStopId?: string | null;\n defaultCurrentTabStopId?: string;\n onCurrentTabStopIdChange?: (tabStopId: string | null) => void;\n onEntryFocus?: (event: Event) => void;\n}\n\nconst RovingFocusGroupImpl = React.forwardRef<\n RovingFocusGroupImplElement,\n RovingFocusGroupImplProps\n>((props: ScopedProps<RovingFocusGroupImplProps>, forwardedRef) => {\n const {\n __scopeRovingFocusGroup,\n orientation,\n loop = false,\n dir,\n currentTabStopId: currentTabStopIdProp,\n defaultCurrentTabStopId,\n onCurrentTabStopIdChange,\n onEntryFocus,\n ...groupProps\n } = props;\n const ref = React.useRef<RovingFocusGroupImplElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const direction = useDirection(dir);\n const [currentTabStopId = null, setCurrentTabStopId] = useControllableState({\n prop: currentTabStopIdProp,\n defaultProp: defaultCurrentTabStopId,\n onChange: onCurrentTabStopIdChange,\n });\n const [isTabbingBackOut, setIsTabbingBackOut] = React.useState(false);\n const handleEntryFocus = useCallbackRef(onEntryFocus);\n const getItems = useCollection(__scopeRovingFocusGroup);\n const isClickFocusRef = React.useRef(false);\n const [focusableItemsCount, setFocusableItemsCount] = React.useState(0);\n\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n node.addEventListener(ENTRY_FOCUS, handleEntryFocus);\n return () => node.removeEventListener(ENTRY_FOCUS, handleEntryFocus);\n }\n }, [handleEntryFocus]);\n\n return (\n <RovingFocusProvider\n scope={__scopeRovingFocusGroup}\n orientation={orientation}\n dir={direction}\n loop={loop}\n currentTabStopId={currentTabStopId}\n onItemFocus={React.useCallback(\n (tabStopId) => setCurrentTabStopId(tabStopId),\n [setCurrentTabStopId]\n )}\n onItemShiftTab={React.useCallback(() => setIsTabbingBackOut(true), [])}\n onFocusableItemAdd={React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount + 1),\n []\n )}\n onFocusableItemRemove={React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount - 1),\n []\n )}\n >\n <Primitive.div\n tabIndex={isTabbingBackOut || focusableItemsCount === 0 ? -1 : 0}\n data-orientation={orientation}\n {...groupProps}\n ref={composedRefs}\n style={{ outline: 'none', ...props.style }}\n onMouseDown={composeEventHandlers(props.onMouseDown, () => {\n isClickFocusRef.current = true;\n })}\n onFocus={composeEventHandlers(props.onFocus, (event) => {\n // We normally wouldn't need this check, because we already check\n // that the focus is on the current target and not bubbling to it.\n // We do this because Safari doesn't focus buttons when clicked, and\n // instead, the wrapper will get focused and not through a bubbling event.\n const isKeyboardFocus = !isClickFocusRef.current;\n\n if (event.target === event.currentTarget && isKeyboardFocus && !isTabbingBackOut) {\n const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS);\n event.currentTarget.dispatchEvent(entryFocusEvent);\n\n if (!entryFocusEvent.defaultPrevented) {\n const items = getItems().filter((item) => item.focusable);\n const activeItem = items.find((item) => item.active);\n const currentItem = items.find((item) => item.id === currentTabStopId);\n const candidateItems = [activeItem, currentItem, ...items].filter(\n Boolean\n ) as typeof items;\n const candidateNodes = candidateItems.map((item) => item.ref.current!);\n focusFirst(candidateNodes);\n }\n }\n\n isClickFocusRef.current = false;\n })}\n onBlur={composeEventHandlers(props.onBlur, () => setIsTabbingBackOut(false))}\n />\n </RovingFocusProvider>\n );\n});\n\n/* -------------------------------------------------------------------------------------------------\n * RovingFocusGroupItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_NAME = 'RovingFocusGroupItem';\n\ntype RovingFocusItemElement = React.ElementRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = Radix.ComponentPropsWithoutRef<typeof Primitive.span>;\ninterface RovingFocusItemProps extends PrimitiveSpanProps {\n tabStopId?: string;\n focusable?: boolean;\n active?: boolean;\n}\n\nconst RovingFocusGroupItem = React.forwardRef<RovingFocusItemElement, RovingFocusItemProps>(\n (props: ScopedProps<RovingFocusItemProps>, forwardedRef) => {\n const {\n __scopeRovingFocusGroup,\n focusable = true,\n active = false,\n tabStopId,\n ...itemProps\n } = props;\n const autoId = useId();\n const id = tabStopId || autoId;\n const context = useRovingFocusContext(ITEM_NAME, __scopeRovingFocusGroup);\n const isCurrentTabStop = context.currentTabStopId === id;\n const getItems = useCollection(__scopeRovingFocusGroup);\n\n const { onFocusableItemAdd, onFocusableItemRemove } = context;\n\n React.useEffect(() => {\n if (focusable) {\n onFocusableItemAdd();\n return () => onFocusableItemRemove();\n }\n }, [focusable, onFocusableItemAdd, onFocusableItemRemove]);\n\n return (\n <Collection.ItemSlot\n scope={__scopeRovingFocusGroup}\n id={id}\n focusable={focusable}\n active={active}\n >\n <Primitive.span\n tabIndex={isCurrentTabStop ? 0 : -1}\n data-orientation={context.orientation}\n {...itemProps}\n ref={forwardedRef}\n onMouseDown={composeEventHandlers(props.onMouseDown, (event) => {\n // We prevent focusing non-focusable items on `mousedown`.\n // Even though the item has tabIndex={-1}, that only means take it out of the tab order.\n if (!focusable) event.preventDefault();\n // Safari doesn't focus a button when clicked so we run our logic on mousedown also\n else context.onItemFocus(id);\n })}\n onFocus={composeEventHandlers(props.onFocus, () => context.onItemFocus(id))}\n onKeyDown={composeEventHandlers(props.onKeyDown, (event) => {\n if (event.key === 'Tab' && event.shiftKey) {\n context.onItemShiftTab();\n return;\n }\n\n if (event.target !== event.currentTarget) return;\n\n const focusIntent = getFocusIntent(event, context.orientation, context.dir);\n\n if (focusIntent !== undefined) {\n event.preventDefault();\n const items = getItems().filter((item) => item.focusable);\n let candidateNodes = items.map((item) => item.ref.current!);\n\n if (focusIntent === 'last') candidateNodes.reverse();\n else if (focusIntent === 'prev' || focusIntent === 'next') {\n if (focusIntent === 'prev') candidateNodes.reverse();\n const currentIndex = candidateNodes.indexOf(event.currentTarget);\n candidateNodes = context.loop\n ? wrapArray(candidateNodes, currentIndex + 1)\n : candidateNodes.slice(currentIndex + 1);\n }\n\n /**\n * Imperative focus during keydown is risky so we prevent React's batching updates\n * to avoid potential bugs. See: https://github.com/facebook/react/issues/20332\n */\n setTimeout(() => focusFirst(candidateNodes));\n }\n })}\n />\n </Collection.ItemSlot>\n );\n }\n);\n\nRovingFocusGroupItem.displayName = ITEM_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\n// prettier-ignore\nconst MAP_KEY_TO_FOCUS_INTENT: Record<string, FocusIntent> = {\n ArrowLeft: 'prev', ArrowUp: 'prev',\n ArrowRight: 'next', ArrowDown: 'next',\n PageUp: 'first', Home: 'first',\n PageDown: 'last', End: 'last',\n};\n\nfunction getDirectionAwareKey(key: string, dir?: Direction) {\n if (dir !== 'rtl') return key;\n return key === 'ArrowLeft' ? 'ArrowRight' : key === 'ArrowRight' ? 'ArrowLeft' : key;\n}\n\ntype FocusIntent = 'first' | 'last' | 'prev' | 'next';\n\nfunction getFocusIntent(event: React.KeyboardEvent, orientation?: Orientation, dir?: Direction) {\n const key = getDirectionAwareKey(event.key, dir);\n if (orientation === 'vertical' && ['ArrowLeft', 'ArrowRight'].includes(key)) return undefined;\n if (orientation === 'horizontal' && ['ArrowUp', 'ArrowDown'].includes(key)) return undefined;\n return MAP_KEY_TO_FOCUS_INTENT[key];\n}\n\nfunction focusFirst(candidates: HTMLElement[]) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n // if focus is already where we want to go, we don't want to keep going through the candidates\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus();\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\n\n/**\n * Wraps an array around itself at a given start index\n * Example: `wrapArray(['a', 'b', 'c', 'd'], 2) === ['c', 'd', 'a', 'b']`\n */\nfunction wrapArray<T>(array: T[], startIndex: number) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\n\nconst Root = RovingFocusGroup;\nconst Item = RovingFocusGroupItem;\n\nexport {\n createRovingFocusGroupScope,\n //\n RovingFocusGroup,\n RovingFocusGroupItem,\n //\n Root,\n Item,\n};\nexport type { RovingFocusGroupProps, RovingFocusItemProps };\n","import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { createCollection } from '@radix-ui/react-collection';\nimport { useComposedRefs, composeRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useDirection } from '@radix-ui/react-direction';\nimport { DismissableLayer } from '@radix-ui/react-dismissable-layer';\nimport { useFocusGuards } from '@radix-ui/react-focus-guards';\nimport { FocusScope } from '@radix-ui/react-focus-scope';\nimport { useId } from '@radix-ui/react-id';\nimport * as PopperPrimitive from '@radix-ui/react-popper';\nimport { createPopperScope } from '@radix-ui/react-popper';\nimport { Portal as PortalPrimitive } from '@radix-ui/react-portal';\nimport { Presence } from '@radix-ui/react-presence';\nimport { Primitive, dispatchDiscreteCustomEvent } from '@radix-ui/react-primitive';\nimport * as RovingFocusGroup from '@radix-ui/react-roving-focus';\nimport { createRovingFocusGroupScope } from '@radix-ui/react-roving-focus';\nimport { Slot } from '@radix-ui/react-slot';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\nimport { hideOthers } from 'aria-hidden';\nimport { RemoveScroll } from 'react-remove-scroll';\n\nimport type * as Radix from '@radix-ui/react-primitive';\nimport type { Scope } from '@radix-ui/react-context';\n\ntype Direction = 'ltr' | 'rtl';\n\nconst SELECTION_KEYS = ['Enter', ' '];\nconst FIRST_KEYS = ['ArrowDown', 'PageUp', 'Home'];\nconst LAST_KEYS = ['ArrowUp', 'PageDown', 'End'];\nconst FIRST_LAST_KEYS = [...FIRST_KEYS, ...LAST_KEYS];\nconst SUB_OPEN_KEYS: Record<Direction, string[]> = {\n ltr: [...SELECTION_KEYS, 'ArrowRight'],\n rtl: [...SELECTION_KEYS, 'ArrowLeft'],\n};\nconst SUB_CLOSE_KEYS: Record<Direction, string[]> = {\n ltr: ['ArrowLeft'],\n rtl: ['ArrowRight'],\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Menu\n * -----------------------------------------------------------------------------------------------*/\n\nconst MENU_NAME = 'Menu';\n\ntype ItemData = { disabled: boolean; textValue: string };\nconst [Collection, useCollection, createCollectionScope] = createCollection<\n MenuItemElement,\n ItemData\n>(MENU_NAME);\n\ntype ScopedProps<P> = P & { __scopeMenu?: Scope };\nconst [createMenuContext, createMenuScope] = createContextScope(MENU_NAME, [\n createCollectionScope,\n createPopperScope,\n createRovingFocusGroupScope,\n]);\nconst usePopperScope = createPopperScope();\nconst useRovingFocusGroupScope = createRovingFocusGroupScope();\n\ntype MenuContextValue = {\n open: boolean;\n onOpenChange(open: boolean): void;\n content: MenuContentElement | null;\n onContentChange(content: MenuContentElement | null): void;\n};\n\nconst [MenuProvider, useMenuContext] = createMenuContext<MenuContextValue>(MENU_NAME);\n\ntype MenuRootContextValue = {\n onClose(): void;\n isUsingKeyboardRef: React.RefObject<boolean>;\n dir: Direction;\n modal: boolean;\n};\n\nconst [MenuRootProvider, useMenuRootContext] = createMenuContext<MenuRootContextValue>(MENU_NAME);\n\ninterface MenuProps {\n children?: React.ReactNode;\n open?: boolean;\n onOpenChange?(open: boolean): void;\n dir?: Direction;\n modal?: boolean;\n}\n\nconst Menu: React.FC<MenuProps> = (props: ScopedProps<MenuProps>) => {\n const { __scopeMenu, open = false, children, dir, onOpenChange, modal = true } = props;\n const popperScope = usePopperScope(__scopeMenu);\n const [content, setContent] = React.useState<MenuContentElement | null>(null);\n const isUsingKeyboardRef = React.useRef(false);\n const handleOpenChange = useCallbackRef(onOpenChange);\n const direction = useDirection(dir);\n\n React.useEffect(() => {\n // Capture phase ensures we set the boolean before any side effects execute\n // in response to the key or pointer event as they might depend on this value.\n const handleKeyDown = () => {\n isUsingKeyboardRef.current = true;\n document.addEventListener('pointerdown', handlePointer, { capture: true, once: true });\n document.addEventListener('pointermove', handlePointer, { capture: true, once: true });\n };\n const handlePointer = () => (isUsingKeyboardRef.current = false);\n document.addEventListener('keydown', handleKeyDown, { capture: true });\n return () => {\n document.removeEventListener('keydown', handleKeyDown, { capture: true });\n document.removeEventListener('pointerdown', handlePointer, { capture: true });\n document.removeEventListener('pointermove', handlePointer, { capture: true });\n };\n }, []);\n\n return (\n <PopperPrimitive.Root {...popperScope}>\n <MenuProvider\n scope={__scopeMenu}\n open={open}\n onOpenChange={handleOpenChange}\n content={content}\n onContentChange={setContent}\n >\n <MenuRootProvider\n scope={__scopeMenu}\n onClose={React.useCallback(() => handleOpenChange(false), [handleOpenChange])}\n isUsingKeyboardRef={isUsingKeyboardRef}\n dir={direction}\n modal={modal}\n >\n {children}\n </MenuRootProvider>\n </MenuProvider>\n </PopperPrimitive.Root>\n );\n};\n\nMenu.displayName = MENU_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuAnchor\n * -----------------------------------------------------------------------------------------------*/\n\nconst ANCHOR_NAME = 'MenuAnchor';\n\ntype MenuAnchorElement = React.ElementRef<typeof PopperPrimitive.Anchor>;\ntype PopperAnchorProps = Radix.ComponentPropsWithoutRef<typeof PopperPrimitive.Anchor>;\ninterface MenuAnchorProps extends PopperAnchorProps {}\n\nconst MenuAnchor = React.forwardRef<MenuAnchorElement, MenuAnchorProps>(\n (props: ScopedProps<MenuAnchorProps>, forwardedRef) => {\n const { __scopeMenu, ...anchorProps } = props;\n const popperScope = usePopperScope(__scopeMenu);\n return <PopperPrimitive.Anchor {...popperScope} {...anchorProps} ref={forwardedRef} />;\n }\n);\n\nMenuAnchor.displayName = ANCHOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'MenuPortal';\n\ntype PortalContextValue = { forceMount?: true };\nconst [PortalProvider, usePortalContext] = createMenuContext<PortalContextValue>(PORTAL_NAME, {\n forceMount: undefined,\n});\n\ntype PortalProps = React.ComponentPropsWithoutRef<typeof PortalPrimitive>;\ninterface MenuPortalProps {\n children?: React.ReactNode;\n /**\n * Specify a container element to portal the content into.\n */\n container?: PortalProps['container'];\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst MenuPortal: React.FC<MenuPortalProps> = (props: ScopedProps<MenuPortalProps>) => {\n const { __scopeMenu, forceMount, children, container } = props;\n const context = useMenuContext(PORTAL_NAME, __scopeMenu);\n return (\n <PortalProvider scope={__scopeMenu} forceMount={forceMount}>\n <Presence present={forceMount || context.open}>\n <PortalPrimitive asChild container={container}>\n {children}\n </PortalPrimitive>\n </Presence>\n </PortalProvider>\n );\n};\n\nMenuPortal.displayName = PORTAL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'MenuContent';\n\ntype MenuContentContextValue = {\n onItemEnter(event: React.PointerEvent): void;\n onItemLeave(event: React.PointerEvent): void;\n onTriggerLeave(event: React.PointerEvent): void;\n searchRef: React.RefObject<string>;\n pointerGraceTimerRef: React.MutableRefObject<number>;\n onPointerGraceIntentChange(intent: GraceIntent | null): void;\n};\nconst [MenuContentProvider, useMenuContentContext] =\n createMenuContext<MenuContentContextValue>(CONTENT_NAME);\n\ntype MenuContentElement = MenuRootContentTypeElement;\n/**\n * We purposefully don't union MenuRootContent and MenuSubContent props here because\n * they have conflicting prop types. We agreed that we would allow MenuSubContent to\n * accept props that it would just ignore.\n */\ninterface MenuContentProps extends MenuRootContentTypeProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst MenuContent = React.forwardRef<MenuContentElement, MenuContentProps>(\n (props: ScopedProps<MenuContentProps>, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeMenu);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, props.__scopeMenu);\n\n return (\n <Collection.Provider scope={props.__scopeMenu}>\n <Presence present={forceMount || context.open}>\n <Collection.Slot scope={props.__scopeMenu}>\n {rootContext.modal ? (\n <MenuRootContentModal {...contentProps} ref={forwardedRef} />\n ) : (\n <MenuRootContentNonModal {...contentProps} ref={forwardedRef} />\n )}\n </Collection.Slot>\n </Presence>\n </Collection.Provider>\n );\n }\n);\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype MenuRootContentTypeElement = MenuContentImplElement;\ninterface MenuRootContentTypeProps\n extends Omit<MenuContentImplProps, keyof MenuContentImplPrivateProps> {}\n\nconst MenuRootContentModal = React.forwardRef<MenuRootContentTypeElement, MenuRootContentTypeProps>(\n (props: ScopedProps<MenuRootContentTypeProps>, forwardedRef) => {\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const ref = React.useRef<MenuRootContentTypeElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n\n // Hide everything from ARIA except the `MenuContent`\n React.useEffect(() => {\n const content = ref.current;\n if (content) return hideOthers(content);\n }, []);\n\n return (\n <MenuContentImpl\n {...props}\n ref={composedRefs}\n // we make sure we're not trapping once it's been closed\n // (closed !== unmounted when animating out)\n trapFocus={context.open}\n // make sure to only disable pointer events when open\n // this avoids blocking interactions while animating out\n disableOutsidePointerEvents={context.open}\n disableOutsideScroll\n // When focus is trapped, a `focusout` event may still happen.\n // We make sure we don't trigger our `onDismiss` in such case.\n onFocusOutside={composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault(),\n { checkForDefaultPrevented: false }\n )}\n onDismiss={() => context.onOpenChange(false)}\n />\n );\n }\n);\n\nconst MenuRootContentNonModal = React.forwardRef<\n MenuRootContentTypeElement,\n MenuRootContentTypeProps\n>((props: ScopedProps<MenuRootContentTypeProps>, forwardedRef) => {\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n return (\n <MenuContentImpl\n {...props}\n ref={forwardedRef}\n trapFocus={false}\n disableOutsidePointerEvents={false}\n disableOutsideScroll={false}\n onDismiss={() => context.onOpenChange(false)}\n />\n );\n});\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype MenuContentImplElement = React.ElementRef<typeof PopperPrimitive.Content>;\ntype FocusScopeProps = Radix.ComponentPropsWithoutRef<typeof FocusScope>;\ntype DismissableLayerProps = Radix.ComponentPropsWithoutRef<typeof DismissableLayer>;\ntype RovingFocusGroupProps = Radix.ComponentPropsWithoutRef<typeof RovingFocusGroup.Root>;\ntype PopperContentProps = Radix.ComponentPropsWithoutRef<typeof PopperPrimitive.Content>;\ntype MenuContentImplPrivateProps = {\n onOpenAutoFocus?: FocusScopeProps['onMountAutoFocus'];\n onDismiss?: DismissableLayerProps['onDismiss'];\n disableOutsidePointerEvents?: DismissableLayerProps['disableOutsidePointerEvents'];\n\n /**\n * Whether scrolling outside the `MenuContent` should be prevented\n * (default: `false`)\n */\n disableOutsideScroll?: boolean;\n\n /**\n * Whether focus should be trapped within the `MenuContent`\n * (default: false)\n */\n trapFocus?: FocusScopeProps['trapped'];\n};\ninterface MenuContentImplProps\n extends MenuContentImplPrivateProps,\n Omit<PopperContentProps, 'dir' | 'onPlaced'> {\n /**\n * Event handler called when auto-focusing on close.\n * Can be prevented.\n */\n onCloseAutoFocus?: FocusScopeProps['onUnmountAutoFocus'];\n\n /**\n * Whether keyboard navigation should loop around\n * @defaultValue false\n */\n loop?: RovingFocusGroupProps['loop'];\n\n onEntryFocus?: RovingFocusGroupProps['onEntryFocus'];\n onEscapeKeyDown?: DismissableLayerProps['onEscapeKeyDown'];\n onPointerDownOutside?: DismissableLayerProps['onPointerDownOutside'];\n onFocusOutside?: DismissableLayerProps['onFocusOutside'];\n onInteractOutside?: DismissableLayerProps['onInteractOutside'];\n}\n\nconst MenuContentImpl = React.forwardRef<MenuContentImplElement, MenuContentImplProps>(\n (props: ScopedProps<MenuContentImplProps>, forwardedRef) => {\n const {\n __scopeMenu,\n loop = false,\n trapFocus,\n onOpenAutoFocus,\n onCloseAutoFocus,\n disableOutsidePointerEvents,\n onEntryFocus,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n disableOutsideScroll,\n ...contentProps\n } = props;\n const context = useMenuContext(CONTENT_NAME, __scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, __scopeMenu);\n const popperScope = usePopperScope(__scopeMenu);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeMenu);\n const getItems = useCollection(__scopeMenu);\n const [currentItemId, setCurrentItemId] = React.useState<string | null>(null);\n const contentRef = React.useRef<HTMLDivElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef, context.onContentChange);\n const timerRef = React.useRef(0);\n const searchRef = React.useRef('');\n const pointerGraceTimerRef = React.useRef(0);\n const pointerGraceIntentRef = React.useRef<GraceIntent | null>(null);\n const pointerDirRef = React.useRef<Side>('right');\n const lastPointerXRef = React.useRef(0);\n\n const ScrollLockWrapper = disableOutsideScroll ? RemoveScroll : React.Fragment;\n const scrollLockWrapperProps = disableOutsideScroll\n ? { as: Slot, allowPinchZoom: true }\n : undefined;\n\n const handleTypeaheadSearch = (key: string) => {\n const search = searchRef.current + key;\n const items = getItems().filter((item) => !item.disabled);\n const currentItem = document.activeElement;\n const currentMatch = items.find((item) => item.ref.current === currentItem)?.textValue;\n const values = items.map((item) => item.textValue);\n const nextMatch = getNextMatch(values, search, currentMatch);\n const newItem = items.find((item) => item.textValue === nextMatch)?.ref.current;\n\n // Reset `searchRef` 1 second after it was last updated\n (function updateSearch(value: string) {\n searchRef.current = value;\n window.clearTimeout(timerRef.current);\n if (value !== '') timerRef.current = window.setTimeout(() => updateSearch(''), 1000);\n })(search);\n\n if (newItem) {\n /**\n * Imperative focus during keydown is risky so we prevent React's batching updates\n * to avoid potential bugs. See: https://github.com/facebook/react/issues/20332\n */\n setTimeout(() => (newItem as HTMLElement).focus());\n }\n };\n\n React.useEffect(() => {\n return () => window.clearTimeout(timerRef.current);\n }, []);\n\n // Make sure the whole tree has focus guards as our `MenuContent` may be\n // the last element in the DOM (beacuse of the `Portal`)\n useFocusGuards();\n\n const isPointerMovingToSubmenu = React.useCallback((event: React.PointerEvent) => {\n const isMovingTowards = pointerDirRef.current === pointerGraceIntentRef.current?.side;\n return isMovingTowards && isPointerInGraceArea(event, pointerGraceIntentRef.current?.area);\n }, []);\n\n return (\n <MenuContentProvider\n scope={__scopeMenu}\n searchRef={searchRef}\n onItemEnter={React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) event.preventDefault();\n },\n [isPointerMovingToSubmenu]\n )}\n onItemLeave={React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) return;\n contentRef.current?.focus();\n setCurrentItemId(null);\n },\n [isPointerMovingToSubmenu]\n )}\n onTriggerLeave={React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) event.preventDefault();\n },\n [isPointerMovingToSubmenu]\n )}\n pointerGraceTimerRef={pointerGraceTimerRef}\n onPointerGraceIntentChange={React.useCallback((intent) => {\n pointerGraceIntentRef.current = intent;\n }, [])}\n >\n <ScrollLockWrapper {...scrollLockWrapperProps}>\n <FocusScope\n asChild\n trapped={trapFocus}\n onMountAutoFocus={composeEventHandlers(onOpenAutoFocus, (event) => {\n // when opening, explicitly focus the content area only and leave\n // `onEntryFocus` in control of focusing first item\n event.preventDefault();\n contentRef.current?.focus();\n })}\n onUnmountAutoFocus={onCloseAutoFocus}\n >\n <DismissableLayer\n asChild\n disableOutsidePointerEvents={disableOutsidePointerEvents}\n onEscapeKeyDown={onEscapeKeyDown}\n onPointerDownOutside={onPointerDownOutside}\n onFocusOutside={onFocusOutside}\n onInteractOutside={onInteractOutside}\n onDismiss={onDismiss}\n >\n <RovingFocusGroup.Root\n asChild\n {...rovingFocusGroupScope}\n dir={rootContext.dir}\n orientation=\"vertical\"\n loop={loop}\n currentTabStopId={currentItemId}\n onCurrentTabStopIdChange={setCurrentItemId}\n onEntryFocus={composeEventHandlers(onEntryFocus, (event) => {\n // only focus first item when using keyboard\n if (!rootContext.isUsingKeyboardRef.current) event.preventDefault();\n })}\n >\n <PopperPrimitive.Content\n role=\"menu\"\n aria-orientation=\"vertical\"\n data-state={getOpenState(context.open)}\n data-radix-menu-content=\"\"\n dir={rootContext.dir}\n {...popperScope}\n {...contentProps}\n ref={composedRefs}\n style={{ outline: 'none', ...contentProps.style }}\n onKeyDown={composeEventHandlers(contentProps.onKeyDown, (event) => {\n // submenu key events bubble through portals. We only care about keys in this menu.\n const target = event.target as HTMLElement;\n const isKeyDownInside =\n target.closest('[data-radix-menu-content]') === event.currentTarget;\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n const isCharacterKey = event.key.length === 1;\n if (isKeyDownInside) {\n // menus should not be navigated using tab key so we prevent it\n if (event.key === 'Tab') event.preventDefault();\n if (!isModifierKey && isCharacterKey) handleTypeaheadSearch(event.key);\n }\n // focus first/last item based on key pressed\n const content = contentRef.current;\n if (event.target !== content) return;\n if (!FIRST_LAST_KEYS.includes(event.key)) return;\n event.preventDefault();\n const items = getItems().filter((item) => !item.disabled);\n const candidateNodes = items.map((item) => item.ref.current!);\n if (LAST_KEYS.includes(event.key)) candidateNodes.reverse();\n focusFirst(candidateNodes);\n })}\n onBlur={composeEventHandlers(props.onBlur, (event) => {\n // clear search buffer when leaving the menu\n if (!event.currentTarget.contains(event.target)) {\n window.clearTimeout(timerRef.current);\n searchRef.current = '';\n }\n })}\n onPointerMove={composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n const target = event.target as HTMLElement;\n const pointerXHasChanged = lastPointerXRef.current !== event.clientX;\n\n // We don't use `event.movementX` for this check because Safari will\n // always return `0` on a pointer event.\n if (event.currentTarget.contains(target) && pointerXHasChanged) {\n const newDir = event.clientX > lastPointerXRef.current ? 'right' : 'left';\n pointerDirRef.current = newDir;\n lastPointerXRef.current = event.clientX;\n }\n })\n )}\n />\n </RovingFocusGroup.Root>\n </DismissableLayer>\n </FocusScope>\n </ScrollLockWrapper>\n </MenuContentProvider>\n );\n }\n);\n\nMenuContent.displayName = CONTENT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuGroup\n * -----------------------------------------------------------------------------------------------*/\n\nconst GROUP_NAME = 'MenuGroup';\n\ntype MenuGroupElement = React.ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = Radix.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface MenuGroupProps extends PrimitiveDivProps {}\n\nconst MenuGroup = React.forwardRef<MenuGroupElement, MenuGroupProps>(\n (props: ScopedProps<MenuGroupProps>, forwardedRef) => {\n const { __scopeMenu, ...groupProps } = props;\n return <Primitive.div role=\"group\" {...groupProps} ref={forwardedRef} />;\n }\n);\n\nMenuGroup.displayName = GROUP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuLabel\n * -----------------------------------------------------------------------------------------------*/\n\nconst LABEL_NAME = 'MenuLabel';\n\ntype MenuLabelElement = React.ElementRef<typeof Primitive.div>;\ninterface MenuLabelProps extends PrimitiveDivProps {}\n\nconst MenuLabel = React.forwardRef<MenuLabelElement, MenuLabelProps>(\n (props: ScopedProps<MenuLabelProps>, forwardedRef) => {\n const { __scopeMenu, ...labelProps } = props;\n return <Primitive.div {...labelProps} ref={forwardedRef} />;\n }\n);\n\nMenuLabel.displayName = LABEL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_NAME = 'MenuItem';\nconst ITEM_SELECT = 'menu.itemSelect';\n\ntype MenuItemElement = MenuItemImplElement;\ninterface MenuItemProps extends Omit<MenuItemImplProps, 'onSelect'> {\n onSelect?: (event: Event) => void;\n}\n\nconst MenuItem = React.forwardRef<MenuItemElement, MenuItemProps>(\n (props: ScopedProps<MenuItemProps>, forwardedRef) => {\n const { disabled = false, onSelect, ...itemProps } = props;\n const ref = React.useRef<HTMLDivElement>(null);\n const rootContext = useMenuRootContext(ITEM_NAME, props.__scopeMenu);\n const contentContext = useMenuContentContext(ITEM_NAME, props.__scopeMenu);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const isPointerDownRef = React.useRef(false);\n\n const handleSelect = () => {\n const menuItem = ref.current;\n if (!disabled && menuItem) {\n const itemSelectEvent = new CustomEvent(ITEM_SELECT, { bubbles: true, cancelable: true });\n menuItem.addEventListener(ITEM_SELECT, (event) => onSelect?.(event), { once: true });\n dispatchDiscreteCustomEvent(menuItem, itemSelectEvent);\n if (itemSelectEvent.defaultPrevented) {\n isPointerDownRef.current = false;\n } else {\n rootContext.onClose();\n }\n }\n };\n\n return (\n <MenuItemImpl\n {...itemProps}\n ref={composedRefs}\n disabled={disabled}\n onClick={composeEventHandlers(props.onClick, handleSelect)}\n onPointerDown={(event) => {\n props.onPointerDown?.(event);\n isPointerDownRef.current = true;\n }}\n onPointerUp={composeEventHandlers(props.onPointerUp, (event) => {\n // Pointer down can move to a different menu item which should activate it on pointer up.\n // We dispatch a click for selection to allow composition with click based triggers and to\n // prevent Firefox from getting stuck in text selection mode when the menu closes.\n if (!isPointerDownRef.current) event.currentTarget?.click();\n })}\n onKeyDown={composeEventHandlers(props.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef.current !== '';\n if (disabled || (isTypingAhead && event.key === ' ')) return;\n if (SELECTION_KEYS.includes(event.key)) {\n event.currentTarget.click();\n /**\n * We prevent default browser behaviour for selection keys as they should trigger\n * a selection only:\n * - prevents space from scrolling the page.\n * - if keydown causes focus to move, prevents keydown from firing on the new target.\n */\n event.preventDefault();\n }\n })}\n />\n );\n }\n);\n\nMenuItem.displayName = ITEM_NAME;\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype MenuItemImplElement = React.ElementRef<typeof Primitive.div>;\ninterface MenuItemImplProps extends PrimitiveDivProps {\n disabled?: boolean;\n textValue?: string;\n}\n\nconst MenuItemImpl = React.forwardRef<MenuItemImplElement, MenuItemImplProps>(\n (props: ScopedProps<MenuItemImplProps>, forwardedRef) => {\n const { __scopeMenu, disabled = false, textValue, ...itemProps } = props;\n const contentContext = useMenuContentContext(ITEM_NAME, __scopeMenu);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeMenu);\n const ref = React.useRef<HTMLDivElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const [isFocused, setIsFocused] = React.useState(false);\n\n // get the item's `.textContent` as default strategy for typeahead `textValue`\n const [textContent, setTextContent] = React.useState('');\n React.useEffect(() => {\n const menuItem = ref.current;\n if (menuItem) {\n setTextContent((menuItem.textContent ?? '').trim());\n }\n }, [itemProps.children]);\n\n return (\n <Collection.ItemSlot\n scope={__scopeMenu}\n disabled={disabled}\n textValue={textValue ?? textContent}\n >\n <RovingFocusGroup.Item asChild {...rovingFocusGroupScope} focusable={!disabled}>\n <Primitive.div\n role=\"menuitem\"\n data-highlighted={isFocused ? '' : undefined}\n aria-disabled={disabled || undefined}\n data-disabled={disabled ? '' : undefined}\n {...itemProps}\n ref={composedRefs}\n /**\n * We focus items on `pointerMove` to achieve the following:\n *\n * - Mouse over an item (it focuses)\n * - Leave mouse where it is and use keyboard to focus a different item\n * - Wiggle mouse without it leaving previously focused item\n * - Previously focused item should re-focus\n *\n * If we used `mouseOver`/`mouseEnter` it would not re-focus when the mouse\n * wiggles. This is to match native menu implementation.\n */\n onPointerMove={composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n if (disabled) {\n contentContext.onItemLeave(event);\n } else {\n contentContext.onItemEnter(event);\n if (!event.defaultPrevented) {\n const item = event.currentTarget;\n item.focus();\n }\n }\n })\n )}\n onPointerLeave={composeEventHandlers(\n props.onPointerLeave,\n whenMouse((event) => contentContext.onItemLeave(event))\n )}\n onFocus={composeEventHandlers(props.onFocus, () => setIsFocused(true))}\n onBlur={composeEventHandlers(props.onBlur, () => setIsFocused(false))}\n />\n </RovingFocusGroup.Item>\n </Collection.ItemSlot>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * MenuCheckboxItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst CHECKBOX_ITEM_NAME = 'MenuCheckboxItem';\n\ntype MenuCheckboxItemElement = MenuItemElement;\n\ntype CheckedState = boolean | 'indeterminate';\n\ninterface MenuCheckboxItemProps extends MenuItemProps {\n checked?: CheckedState;\n // `onCheckedChange` can never be called with `\"indeterminate\"` from the inside\n onCheckedChange?: (checked: boolean) => void;\n}\n\nconst MenuCheckboxItem = React.forwardRef<MenuCheckboxItemElement, MenuCheckboxItemProps>(\n (props: ScopedProps<MenuCheckboxItemProps>, forwardedRef) => {\n const { checked = false, onCheckedChange, ...checkboxItemProps } = props;\n return (\n <ItemIndicatorProvider scope={props.__scopeMenu} checked={checked}>\n <MenuItem\n role=\"menuitemcheckbox\"\n aria-checked={isIndeterminate(checked) ? 'mixed' : checked}\n {...checkboxItemProps}\n ref={forwardedRef}\n data-state={getCheckedState(checked)}\n onSelect={composeEventHandlers(\n checkboxItemProps.onSelect,\n () => onCheckedChange?.(isIndeterminate(checked) ? true : !checked),\n { checkForDefaultPrevented: false }\n )}\n />\n </ItemIndicatorProvider>\n );\n }\n);\n\nMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuRadioGroup\n * -----------------------------------------------------------------------------------------------*/\n\nconst RADIO_GROUP_NAME = 'MenuRadioGroup';\n\nconst [RadioGroupProvider, useRadioGroupContext] = createMenuContext<MenuRadioGroupProps>(\n RADIO_GROUP_NAME,\n { value: undefined, onValueChange: () => {} }\n);\n\ntype MenuRadioGroupElement = React.ElementRef<typeof MenuGroup>;\ninterface MenuRadioGroupProps extends MenuGroupProps {\n value?: string;\n onValueChange?: (value: string) => void;\n}\n\nconst MenuRadioGroup = React.forwardRef<MenuRadioGroupElement, MenuRadioGroupProps>(\n (props: ScopedProps<MenuRadioGroupProps>, forwardedRef) => {\n const { value, onValueChange, ...groupProps } = props;\n const handleValueChange = useCallbackRef(onValueChange);\n return (\n <RadioGroupProvider scope={props.__scopeMenu} value={value} onValueChange={handleValueChange}>\n <MenuGroup {...groupProps} ref={forwardedRef} />\n </RadioGroupProvider>\n );\n }\n);\n\nMenuRadioGroup.displayName = RADIO_GROUP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuRadioItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst RADIO_ITEM_NAME = 'MenuRadioItem';\n\ntype MenuRadioItemElement = React.ElementRef<typeof MenuItem>;\ninterface MenuRadioItemProps extends MenuItemProps {\n value: string;\n}\n\nconst MenuRadioItem = React.forwardRef<MenuRadioItemElement, MenuRadioItemProps>(\n (props: ScopedProps<MenuRadioItemProps>, forwardedRef) => {\n const { value, ...radioItemProps } = props;\n const context = useRadioGroupContext(RADIO_ITEM_NAME, props.__scopeMenu);\n const checked = value === context.value;\n return (\n <ItemIndicatorProvider scope={props.__scopeMenu} checked={checked}>\n <MenuItem\n role=\"menuitemradio\"\n aria-checked={checked}\n {...radioItemProps}\n ref={forwardedRef}\n data-state={getCheckedState(checked)}\n onSelect={composeEventHandlers(\n radioItemProps.onSelect,\n () => context.onValueChange?.(value),\n { checkForDefaultPrevented: false }\n )}\n />\n </ItemIndicatorProvider>\n );\n }\n);\n\nMenuRadioItem.displayName = RADIO_ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuItemIndicator\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_INDICATOR_NAME = 'MenuItemIndicator';\n\ntype CheckboxContextValue = { checked: CheckedState };\n\nconst [ItemIndicatorProvider, useItemIndicatorContext] = createMenuContext<CheckboxContextValue>(\n ITEM_INDICATOR_NAME,\n { checked: false }\n);\n\ntype MenuItemIndicatorElement = React.ElementRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = Radix.ComponentPropsWithoutRef<typeof Primitive.span>;\ninterface MenuItemIndicatorProps extends PrimitiveSpanProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst MenuItemIndicator = React.forwardRef<MenuItemIndicatorElement, MenuItemIndicatorProps>(\n (props: ScopedProps<MenuItemIndicatorProps>, forwardedRef) => {\n const { __scopeMenu, forceMount, ...itemIndicatorProps } = props;\n const indicatorContext = useItemIndicatorContext(ITEM_INDICATOR_NAME, __scopeMenu);\n return (\n <Presence\n present={\n forceMount ||\n isIndeterminate(indicatorContext.checked) ||\n indicatorContext.checked === true\n }\n >\n <Primitive.span\n {...itemIndicatorProps}\n ref={forwardedRef}\n data-state={getCheckedState(indicatorContext.checked)}\n />\n </Presence>\n );\n }\n);\n\nMenuItemIndicator.displayName = ITEM_INDICATOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuSeparator\n * -----------------------------------------------------------------------------------------------*/\n\nconst SEPARATOR_NAME = 'MenuSeparator';\n\ntype MenuSeparatorElement = React.ElementRef<typeof Primitive.div>;\ninterface MenuSeparatorProps extends PrimitiveDivProps {}\n\nconst MenuSeparator = React.forwardRef<MenuSeparatorElement, MenuSeparatorProps>(\n (props: ScopedProps<MenuSeparatorProps>, forwardedRef) => {\n const { __scopeMenu, ...separatorProps } = props;\n return (\n <Primitive.div\n role=\"separator\"\n aria-orientation=\"horizontal\"\n {...separatorProps}\n ref={forwardedRef}\n />\n );\n }\n);\n\nMenuSeparator.displayName = SEPARATOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuArrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst ARROW_NAME = 'MenuArrow';\n\ntype MenuArrowElement = React.ElementRef<typeof PopperPrimitive.Arrow>;\ntype PopperArrowProps = Radix.ComponentPropsWithoutRef<typeof PopperPrimitive.Arrow>;\ninterface MenuArrowProps extends PopperArrowProps {}\n\nconst MenuArrow = React.forwardRef<MenuArrowElement, MenuArrowProps>(\n (props: ScopedProps<MenuArrowProps>, forwardedRef) => {\n const { __scopeMenu, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeMenu);\n return <PopperPrimitive.Arrow {...popperScope} {...arrowProps} ref={forwardedRef} />;\n }\n);\n\nMenuArrow.displayName = ARROW_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuSub\n * -----------------------------------------------------------------------------------------------*/\n\nconst SUB_NAME = 'MenuSub';\n\ntype MenuSubContextValue = {\n contentId: string;\n triggerId: string;\n trigger: MenuSubTriggerElement | null;\n onTriggerChange(trigger: MenuSubTriggerElement | null): void;\n};\n\nconst [MenuSubProvider, useMenuSubContext] = createMenuContext<MenuSubContextValue>(SUB_NAME);\n\ninterface MenuSubProps {\n children?: React.ReactNode;\n open?: boolean;\n onOpenChange?(open: boolean): void;\n}\n\nconst MenuSub: React.FC<MenuSubProps> = (props: ScopedProps<MenuSubProps>) => {\n const { __scopeMenu, children, open = false, onOpenChange } = props;\n const parentMenuContext = useMenuContext(SUB_NAME, __scopeMenu);\n const popperScope = usePopperScope(__scopeMenu);\n const [trigger, setTrigger] = React.useState<MenuSubTriggerElement | null>(null);\n const [content, setContent] = React.useState<MenuContentElement | null>(null);\n const handleOpenChange = useCallbackRef(onOpenChange);\n\n // Prevent the parent menu from reopening with open submenus.\n React.useEffect(() => {\n if (parentMenuContext.open === false) handleOpenChange(false);\n return () => handleOpenChange(false);\n }, [parentMenuContext.open, handleOpenChange]);\n\n return (\n <PopperPrimitive.Root {...popperScope}>\n <MenuProvider\n scope={__scopeMenu}\n open={open}\n onOpenChange={handleOpenChange}\n content={content}\n onContentChange={setContent}\n >\n <MenuSubProvider\n scope={__scopeMenu}\n contentId={useId()}\n triggerId={useId()}\n trigger={trigger}\n onTriggerChange={setTrigger}\n >\n {children}\n </MenuSubProvider>\n </MenuProvider>\n </PopperPrimitive.Root>\n );\n};\n\nMenuSub.displayName = SUB_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuSubTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst SUB_TRIGGER_NAME = 'MenuSubTrigger';\n\ntype MenuSubTriggerElement = MenuItemImplElement;\ninterface MenuSubTriggerProps extends MenuItemImplProps {}\n\nconst MenuSubTrigger = React.forwardRef<MenuSubTriggerElement, MenuSubTriggerProps>(\n (props: ScopedProps<MenuSubTriggerProps>, forwardedRef) => {\n const context = useMenuContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const subContext = useMenuSubContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const contentContext = useMenuContentContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const openTimerRef = React.useRef<number | null>(null);\n const { pointerGraceTimerRef, onPointerGraceIntentChange } = contentContext;\n const scope = { __scopeMenu: props.__scopeMenu };\n\n const clearOpenTimer = React.useCallback(() => {\n if (openTimerRef.current) window.clearTimeout(openTimerRef.current);\n openTimerRef.current = null;\n }, []);\n\n React.useEffect(() => clearOpenTimer, [clearOpenTimer]);\n\n React.useEffect(() => {\n const pointerGraceTimer = pointerGraceTimerRef.current;\n return () => {\n window.clearTimeout(pointerGraceTimer);\n onPointerGraceIntentChange(null);\n };\n }, [pointerGraceTimerRef, onPointerGraceIntentChange]);\n\n return (\n <MenuAnchor asChild {...scope}>\n <MenuItemImpl\n id={subContext.triggerId}\n aria-haspopup=\"menu\"\n aria-expanded={context.open}\n aria-controls={subContext.contentId}\n data-state={getOpenState(context.open)}\n {...props}\n ref={composeRefs(forwardedRef, subContext.onTriggerChange)}\n // This is redundant for mouse users but we cannot determine pointer type from\n // click event and we cannot use pointerup event (see git history for reasons why)\n onClick={(event) => {\n props.onClick?.(event);\n if (props.disabled || event.defaultPrevented) return;\n /**\n * We manually focus because iOS Safari doesn't always focus on click (e.g. buttons)\n * and we rely heavily on `onFocusOutside` for submenus to close when switching\n * between separate submenus.\n */\n event.currentTarget.focus();\n if (!context.open) context.onOpenChange(true);\n }}\n onPointerMove={composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n contentContext.onItemEnter(event);\n if (event.defaultPrevented) return;\n if (!props.disabled && !context.open && !openTimerRef.current) {\n contentContext.onPointerGraceIntentChange(null);\n openTimerRef.current = window.setTimeout(() => {\n context.onOpenChange(true);\n clearOpenTimer();\n }, 100);\n }\n })\n )}\n onPointerLeave={composeEventHandlers(\n props.onPointerLeave,\n whenMouse((event) => {\n clearOpenTimer();\n\n const contentRect = context.content?.getBoundingClientRect();\n if (contentRect) {\n // TODO: make sure to update this when we change positioning logic\n const side = context.content?.dataset.side as Side;\n const rightSide = side === 'right';\n const bleed = rightSide ? -5 : +5;\n const contentNearEdge = contentRect[rightSide ? 'left' : 'right'];\n const contentFarEdge = contentRect[rightSide ? 'right' : 'left'];\n\n contentContext.onPointerGraceIntentChange({\n area: [\n // Apply a bleed on clientX to ensure that our exit point is\n // consistently within polygon bounds\n { x: event.clientX + bleed, y: event.clientY },\n { x: contentNearEdge, y: contentRect.top },\n { x: contentFarEdge, y: contentRect.top },\n { x: contentFarEdge, y: contentRect.bottom },\n { x: contentNearEdge, y: contentRect.bottom },\n ],\n side,\n });\n\n window.clearTimeout(pointerGraceTimerRef.current);\n pointerGraceTimerRef.current = window.setTimeout(\n () => contentContext.onPointerGraceIntentChange(null),\n 300\n );\n } else {\n contentContext.onTriggerLeave(event);\n if (event.defaultPrevented) return;\n\n // There's 100ms where the user may leave an item before the submenu was opened.\n contentContext.onPointerGraceIntentChange(null);\n }\n })\n )}\n onKeyDown={composeEventHandlers(props.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef.current !== '';\n if (props.disabled || (isTypingAhead && event.key === ' ')) return;\n if (SUB_OPEN_KEYS[rootContext.dir].includes(event.key)) {\n context.onOpenChange(true);\n // The trigger may hold focus if opened via pointer interaction\n // so we ensure content is given focus again when switching to keyboard.\n context.content?.focus();\n // prevent window from scrolling\n event.preventDefault();\n }\n })}\n />\n </MenuAnchor>\n );\n }\n);\n\nMenuSubTrigger.displayName = SUB_TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuSubContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst SUB_CONTENT_NAME = 'MenuSubContent';\n\ntype MenuSubContentElement = MenuContentImplElement;\ninterface MenuSubContentProps\n extends Omit<\n MenuContentImplProps,\n keyof MenuContentImplPrivateProps | 'onCloseAutoFocus' | 'onEntryFocus' | 'side' | 'align'\n > {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst MenuSubContent = React.forwardRef<MenuSubContentElement, MenuSubContentProps>(\n (props: ScopedProps<MenuSubContentProps>, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeMenu);\n const { forceMount = portalContext.forceMount, ...subContentProps } = props;\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, props.__scopeMenu);\n const subContext = useMenuSubContext(SUB_CONTENT_NAME, props.__scopeMenu);\n const ref = React.useRef<MenuSubContentElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n return (\n <Collection.Provider scope={props.__scopeMenu}>\n <Presence present={forceMount || context.open}>\n <Collection.Slot scope={props.__scopeMenu}>\n <MenuContentImpl\n id={subContext.contentId}\n aria-labelledby={subContext.triggerId}\n {...subContentProps}\n ref={composedRefs}\n align=\"start\"\n side={rootContext.dir === 'rtl' ? 'left' : 'right'}\n disableOutsidePointerEvents={false}\n disableOutsideScroll={false}\n trapFocus={false}\n onOpenAutoFocus={(event) => {\n // when opening a submenu, focus content for keyboard users only\n if (rootContext.isUsingKeyboardRef.current) ref.current?.focus();\n event.preventDefault();\n }}\n // The menu might close because of focusing another menu item in the parent menu. We\n // don't want it to refocus the trigger in that case so we handle trigger focus ourselves.\n onCloseAutoFocus={(event) => event.preventDefault()}\n onFocusOutside={composeEventHandlers(props.onFocusOutside, (event) => {\n // We prevent closing when the trigger is focused to avoid triggering a re-open animation\n // on pointer interaction.\n if (event.target !== subContext.trigger) context.onOpenChange(false);\n })}\n onEscapeKeyDown={composeEventHandlers(props.onEscapeKeyDown, (event) => {\n rootContext.onClose();\n // ensure pressing escape in submenu doesn't escape full screen mode\n event.preventDefault();\n })}\n onKeyDown={composeEventHandlers(props.onKeyDown, (event) => {\n // Submenu key events bubble through portals. We only care about keys in this menu.\n const isKeyDownInside = event.currentTarget.contains(event.target as HTMLElement);\n const isCloseKey = SUB_CLOSE_KEYS[rootContext.dir].includes(event.key);\n if (isKeyDownInside && isCloseKey) {\n context.onOpenChange(false);\n // We focus manually because we prevented it in `onCloseAutoFocus`\n subContext.trigger?.focus();\n // prevent window from scrolling\n event.preventDefault();\n }\n })}\n />\n </Collection.Slot>\n </Presence>\n </Collection.Provider>\n );\n }\n);\n\nMenuSubContent.displayName = SUB_CONTENT_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getOpenState(open: boolean) {\n return open ? 'open' : 'closed';\n}\n\nfunction isIndeterminate(checked?: CheckedState): checked is 'indeterminate' {\n return checked === 'indeterminate';\n}\n\nfunction getCheckedState(checked: CheckedState) {\n return isIndeterminate(checked) ? 'indeterminate' : checked ? 'checked' : 'unchecked';\n}\n\nfunction focusFirst(candidates: HTMLElement[]) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n // if focus is already where we want to go, we don't want to keep going through the candidates\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus();\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\n\n/**\n * Wraps an array around itself at a given start index\n * Example: `wrapArray(['a', 'b', 'c', 'd'], 2) === ['c', 'd', 'a', 'b']`\n */\nfunction wrapArray<T>(array: T[], startIndex: number) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\n\n/**\n * This is the \"meat\" of the typeahead matching logic. It takes in all the values,\n * the search and the current match, and returns the next match (or `undefined`).\n *\n * We normalize the search because if a user has repeatedly pressed a character,\n * we want the exact same behavior as if we only had that one character\n * (ie. cycle through options starting with that character)\n *\n * We also reorder the values by wrapping the array around the current match.\n * This is so we always look forward from the current match, and picking the first\n * match will always be the correct one.\n *\n * Finally, if the normalized search is exactly one character, we exclude the\n * current match from the values because otherwise it would be the first to match always\n * and focus would never move. This is as opposed to the regular case, where we\n * don't want focus to move if the current match still matches.\n */\nfunction getNextMatch(values: string[], search: string, currentMatch?: string) {\n const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);\n const normalizedSearch = isRepeated ? search[0] : search;\n const currentMatchIndex = currentMatch ? values.indexOf(currentMatch) : -1;\n let wrappedValues = wrapArray(values, Math.max(currentMatchIndex, 0));\n const excludeCurrentMatch = normalizedSearch.length === 1;\n if (excludeCurrentMatch) wrappedValues = wrappedValues.filter((v) => v !== currentMatch);\n const nextMatch = wrappedValues.find((value) =>\n value.toLowerCase().startsWith(normalizedSearch.toLowerCase())\n );\n return nextMatch !== currentMatch ? nextMatch : undefined;\n}\n\ntype Point = { x: number; y: number };\ntype Polygon = Point[];\ntype Side = 'left' | 'right';\ntype GraceIntent = { area: Polygon; side: Side };\n\n// Determine if a point is inside of a polygon.\n// Based on https://github.com/substack/point-in-polygon\nfunction isPointInPolygon(point: Point, polygon: Polygon) {\n const { x, y } = point;\n let inside = false;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const xi = polygon[i].x;\n const yi = polygon[i].y;\n const xj = polygon[j].x;\n const yj = polygon[j].y;\n\n // prettier-ignore\n const intersect = ((yi > y) !== (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);\n if (intersect) inside = !inside;\n }\n\n return inside;\n}\n\nfunction isPointerInGraceArea(event: React.PointerEvent, area?: Polygon) {\n if (!area) return false;\n const cursorPos = { x: event.clientX, y: event.clientY };\n return isPointInPolygon(cursorPos, area);\n}\n\nfunction whenMouse<E>(handler: React.PointerEventHandler<E>): React.PointerEventHandler<E> {\n return (event) => (event.pointerType === 'mouse' ? handler(event) : undefined);\n}\n\nconst Root = Menu;\nconst Anchor = MenuAnchor;\nconst Portal = MenuPortal;\nconst Content = MenuContent;\nconst Group = MenuGroup;\nconst Label = MenuLabel;\nconst Item = MenuItem;\nconst CheckboxItem = MenuCheckboxItem;\nconst RadioGroup = MenuRadioGroup;\nconst RadioItem = MenuRadioItem;\nconst ItemIndicator = MenuItemIndicator;\nconst Separator = MenuSeparator;\nconst Arrow = MenuArrow;\nconst Sub = MenuSub;\nconst SubTrigger = MenuSubTrigger;\nconst SubContent = MenuSubContent;\n\nexport {\n createMenuScope,\n //\n Menu,\n MenuAnchor,\n MenuPortal,\n MenuContent,\n MenuGroup,\n MenuLabel,\n MenuItem,\n MenuCheckboxItem,\n MenuRadioGroup,\n MenuRadioItem,\n MenuItemIndicator,\n MenuSeparator,\n MenuArrow,\n MenuSub,\n MenuSubTrigger,\n MenuSubContent,\n //\n Root,\n Anchor,\n Portal,\n Content,\n Group,\n Label,\n Item,\n CheckboxItem,\n RadioGroup,\n RadioItem,\n ItemIndicator,\n Separator,\n Arrow,\n Sub,\n SubTrigger,\n SubContent,\n};\nexport type {\n MenuProps,\n MenuAnchorProps,\n MenuPortalProps,\n MenuContentProps,\n MenuGroupProps,\n MenuLabelProps,\n MenuItemProps,\n MenuCheckboxItemProps,\n MenuRadioGroupProps,\n MenuRadioItemProps,\n MenuItemIndicatorProps,\n MenuSeparatorProps,\n MenuArrowProps,\n MenuSubProps,\n MenuSubTriggerProps,\n MenuSubContentProps,\n};\n","import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { composeRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport * as MenuPrimitive from '@radix-ui/react-menu';\nimport { createMenuScope } from '@radix-ui/react-menu';\nimport { useId } from '@radix-ui/react-id';\n\nimport type * as Radix from '@radix-ui/react-primitive';\nimport type { Scope } from '@radix-ui/react-context';\n\ntype Direction = 'ltr' | 'rtl';\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenu\n * -----------------------------------------------------------------------------------------------*/\n\nconst DROPDOWN_MENU_NAME = 'DropdownMenu';\n\ntype ScopedProps<P> = P & { __scopeDropdownMenu?: Scope };\nconst [createDropdownMenuContext, createDropdownMenuScope] = createContextScope(\n DROPDOWN_MENU_NAME,\n [createMenuScope]\n);\nconst useMenuScope = createMenuScope();\n\ntype DropdownMenuContextValue = {\n triggerId: string;\n triggerRef: React.RefObject<HTMLButtonElement>;\n contentId: string;\n open: boolean;\n onOpenChange(open: boolean): void;\n onOpenToggle(): void;\n modal: boolean;\n};\n\nconst [DropdownMenuProvider, useDropdownMenuContext] =\n createDropdownMenuContext<DropdownMenuContextValue>(DROPDOWN_MENU_NAME);\n\ninterface DropdownMenuProps {\n children?: React.ReactNode;\n dir?: Direction;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?(open: boolean): void;\n modal?: boolean;\n}\n\nconst DropdownMenu: React.FC<DropdownMenuProps> = (props: ScopedProps<DropdownMenuProps>) => {\n const {\n __scopeDropdownMenu,\n children,\n dir,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true,\n } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n });\n\n return (\n <DropdownMenuProvider\n scope={__scopeDropdownMenu}\n triggerId={useId()}\n triggerRef={triggerRef}\n contentId={useId()}\n open={open}\n onOpenChange={setOpen}\n onOpenToggle={React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen])}\n modal={modal}\n >\n <MenuPrimitive.Root {...menuScope} open={open} onOpenChange={setOpen} dir={dir} modal={modal}>\n {children}\n </MenuPrimitive.Root>\n </DropdownMenuProvider>\n );\n};\n\nDropdownMenu.displayName = DROPDOWN_MENU_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'DropdownMenuTrigger';\n\ntype DropdownMenuTriggerElement = React.ElementRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = Radix.ComponentPropsWithoutRef<typeof Primitive.button>;\ninterface DropdownMenuTriggerProps extends PrimitiveButtonProps {}\n\nconst DropdownMenuTrigger = React.forwardRef<DropdownMenuTriggerElement, DropdownMenuTriggerProps>(\n (props: ScopedProps<DropdownMenuTriggerProps>, forwardedRef) => {\n const { __scopeDropdownMenu, disabled = false, ...triggerProps } = props;\n const context = useDropdownMenuContext(TRIGGER_NAME, __scopeDropdownMenu);\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return (\n <MenuPrimitive.Anchor asChild {...menuScope}>\n <Primitive.button\n type=\"button\"\n id={context.triggerId}\n aria-haspopup=\"menu\"\n aria-expanded={context.open}\n aria-controls={context.open ? context.contentId : undefined}\n data-state={context.open ? 'open' : 'closed'}\n data-disabled={disabled ? '' : undefined}\n disabled={disabled}\n {...triggerProps}\n ref={composeRefs(forwardedRef, context.triggerRef)}\n onPointerDown={composeEventHandlers(props.onPointerDown, (event) => {\n // only call handler if it's the left button (mousedown gets triggered by all mouse buttons)\n // but not when the control key is pressed (avoiding MacOS right click)\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onOpenToggle();\n // prevent trigger focusing when opening\n // this allows the content to be given focus without competition\n if (!context.open) event.preventDefault();\n }\n })}\n onKeyDown={composeEventHandlers(props.onKeyDown, (event) => {\n if (disabled) return;\n if (['Enter', ' '].includes(event.key)) context.onOpenToggle();\n if (event.key === 'ArrowDown') context.onOpenChange(true);\n // prevent keydown from scrolling window / first focused item to execute\n // that keydown (inadvertently closing the menu)\n if (['Enter', ' ', 'ArrowDown'].includes(event.key)) event.preventDefault();\n })}\n />\n </MenuPrimitive.Anchor>\n );\n }\n);\n\nDropdownMenuTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'DropdownMenuPortal';\n\ntype MenuPortalProps = React.ComponentPropsWithoutRef<typeof MenuPrimitive.Portal>;\ninterface DropdownMenuPortalProps extends MenuPortalProps {}\n\nconst DropdownMenuPortal: React.FC<DropdownMenuPortalProps> = (\n props: ScopedProps<DropdownMenuPortalProps>\n) => {\n const { __scopeDropdownMenu, ...portalProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.Portal {...menuScope} {...portalProps} />;\n};\n\nDropdownMenuPortal.displayName = PORTAL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'DropdownMenuContent';\n\ntype DropdownMenuContentElement = React.ElementRef<typeof MenuPrimitive.Content>;\ntype MenuContentProps = Radix.ComponentPropsWithoutRef<typeof MenuPrimitive.Content>;\ninterface DropdownMenuContentProps extends Omit<MenuContentProps, 'onEntryFocus'> {}\n\nconst DropdownMenuContent = React.forwardRef<DropdownMenuContentElement, DropdownMenuContentProps>(\n (props: ScopedProps<DropdownMenuContentProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...contentProps } = props;\n const context = useDropdownMenuContext(CONTENT_NAME, __scopeDropdownMenu);\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const hasInteractedOutsideRef = React.useRef(false);\n\n return (\n <MenuPrimitive.Content\n id={context.contentId}\n aria-labelledby={context.triggerId}\n {...menuScope}\n {...contentProps}\n ref={forwardedRef}\n onCloseAutoFocus={composeEventHandlers(props.onCloseAutoFocus, (event) => {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n hasInteractedOutsideRef.current = false;\n // Always prevent auto focus because we either focus manually or want user agent focus\n event.preventDefault();\n })}\n onInteractOutside={composeEventHandlers(props.onInteractOutside, (event) => {\n const originalEvent = event.detail.originalEvent as PointerEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n if (!context.modal || isRightClick) hasInteractedOutsideRef.current = true;\n })}\n style={{\n ...props.style,\n // re-namespace exposed content custom properties\n ...{\n '--radix-dropdown-menu-content-transform-origin':\n 'var(--radix-popper-transform-origin)',\n '--radix-dropdown-menu-content-available-width': 'var(--radix-popper-available-width)',\n '--radix-dropdown-menu-content-available-height':\n 'var(--radix-popper-available-height)',\n '--radix-dropdown-menu-trigger-width': 'var(--radix-popper-anchor-width)',\n '--radix-dropdown-menu-trigger-height': 'var(--radix-popper-anchor-height)',\n },\n }}\n />\n );\n }\n);\n\nDropdownMenuContent.displayName = CONTENT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuGroup\n * -----------------------------------------------------------------------------------------------*/\n\nconst GROUP_NAME = 'DropdownMenuGroup';\n\ntype DropdownMenuGroupElement = React.ElementRef<typeof MenuPrimitive.Group>;\ntype MenuGroupProps = Radix.ComponentPropsWithoutRef<typeof MenuPrimitive.Group>;\ninterface DropdownMenuGroupProps extends MenuGroupProps {}\n\nconst DropdownMenuGroup = React.forwardRef<DropdownMenuGroupElement, DropdownMenuGroupProps>(\n (props: ScopedProps<DropdownMenuGroupProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...groupProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.Group {...menuScope} {...groupProps} ref={forwardedRef} />;\n }\n);\n\nDropdownMenuGroup.displayName = GROUP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuLabel\n * -----------------------------------------------------------------------------------------------*/\n\nconst LABEL_NAME = 'DropdownMenuLabel';\n\ntype DropdownMenuLabelElement = React.ElementRef<typeof MenuPrimitive.Label>;\ntype MenuLabelProps = Radix.ComponentPropsWithoutRef<typeof MenuPrimitive.Label>;\ninterface DropdownMenuLabelProps extends MenuLabelProps {}\n\nconst DropdownMenuLabel = React.forwardRef<DropdownMenuLabelElement, DropdownMenuLabelProps>(\n (props: ScopedProps<DropdownMenuLabelProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...labelProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.Label {...menuScope} {...labelProps} ref={forwardedRef} />;\n }\n);\n\nDropdownMenuLabel.displayName = LABEL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_NAME = 'DropdownMenuItem';\n\ntype DropdownMenuItemElement = React.ElementRef<typeof MenuPrimitive.Item>;\ntype MenuItemProps = Radix.ComponentPropsWithoutRef<typeof MenuPrimitive.Item>;\ninterface DropdownMenuItemProps extends MenuItemProps {}\n\nconst DropdownMenuItem = React.forwardRef<DropdownMenuItemElement, DropdownMenuItemProps>(\n (props: ScopedProps<DropdownMenuItemProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...itemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.Item {...menuScope} {...itemProps} ref={forwardedRef} />;\n }\n);\n\nDropdownMenuItem.displayName = ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuCheckboxItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst CHECKBOX_ITEM_NAME = 'DropdownMenuCheckboxItem';\n\ntype DropdownMenuCheckboxItemElement = React.ElementRef<typeof MenuPrimitive.CheckboxItem>;\ntype MenuCheckboxItemProps = Radix.ComponentPropsWithoutRef<typeof MenuPrimitive.CheckboxItem>;\ninterface DropdownMenuCheckboxItemProps extends MenuCheckboxItemProps {}\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n DropdownMenuCheckboxItemElement,\n DropdownMenuCheckboxItemProps\n>((props: ScopedProps<DropdownMenuCheckboxItemProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...checkboxItemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.CheckboxItem {...menuScope} {...checkboxItemProps} ref={forwardedRef} />;\n});\n\nDropdownMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuRadioGroup\n * -----------------------------------------------------------------------------------------------*/\n\nconst RADIO_GROUP_NAME = 'DropdownMenuRadioGroup';\n\ntype DropdownMenuRadioGroupElement = React.ElementRef<typeof MenuPrimitive.RadioGroup>;\ntype MenuRadioGroupProps = Radix.ComponentPropsWithoutRef<typeof MenuPrimitive.RadioGroup>;\ninterface DropdownMenuRadioGroupProps extends MenuRadioGroupProps {}\n\nconst DropdownMenuRadioGroup = React.forwardRef<\n DropdownMenuRadioGroupElement,\n DropdownMenuRadioGroupProps\n>((props: ScopedProps<DropdownMenuRadioGroupProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...radioGroupProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.RadioGroup {...menuScope} {...radioGroupProps} ref={forwardedRef} />;\n});\n\nDropdownMenuRadioGroup.displayName = RADIO_GROUP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuRadioItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst RADIO_ITEM_NAME = 'DropdownMenuRadioItem';\n\ntype DropdownMenuRadioItemElement = React.ElementRef<typeof MenuPrimitive.RadioItem>;\ntype MenuRadioItemProps = Radix.ComponentPropsWithoutRef<typeof MenuPrimitive.RadioItem>;\ninterface DropdownMenuRadioItemProps extends MenuRadioItemProps {}\n\nconst DropdownMenuRadioItem = React.forwardRef<\n DropdownMenuRadioItemElement,\n DropdownMenuRadioItemProps\n>((props: ScopedProps<DropdownMenuRadioItemProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...radioItemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.RadioItem {...menuScope} {...radioItemProps} ref={forwardedRef} />;\n});\n\nDropdownMenuRadioItem.displayName = RADIO_ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuItemIndicator\n * -----------------------------------------------------------------------------------------------*/\n\nconst INDICATOR_NAME = 'DropdownMenuItemIndicator';\n\ntype DropdownMenuItemIndicatorElement = React.ElementRef<typeof MenuPrimitive.ItemIndicator>;\ntype MenuItemIndicatorProps = Radix.ComponentPropsWithoutRef<typeof MenuPrimitive.ItemIndicator>;\ninterface DropdownMenuItemIndicatorProps extends MenuItemIndicatorProps {}\n\nconst DropdownMenuItemIndicator = React.forwardRef<\n DropdownMenuItemIndicatorElement,\n DropdownMenuItemIndicatorProps\n>((props: ScopedProps<DropdownMenuItemIndicatorProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...itemIndicatorProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.ItemIndicator {...menuScope} {...itemIndicatorProps} ref={forwardedRef} />;\n});\n\nDropdownMenuItemIndicator.displayName = INDICATOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuSeparator\n * -----------------------------------------------------------------------------------------------*/\n\nconst SEPARATOR_NAME = 'DropdownMenuSeparator';\n\ntype DropdownMenuSeparatorElement = React.ElementRef<typeof MenuPrimitive.Separator>;\ntype MenuSeparatorProps = Radix.ComponentPropsWithoutRef<typeof MenuPrimitive.Separator>;\ninterface DropdownMenuSeparatorProps extends MenuSeparatorProps {}\n\nconst DropdownMenuSeparator = React.forwardRef<\n DropdownMenuSeparatorElement,\n DropdownMenuSeparatorProps\n>((props: ScopedProps<DropdownMenuSeparatorProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...separatorProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.Separator {...menuScope} {...separatorProps} ref={forwardedRef} />;\n});\n\nDropdownMenuSeparator.displayName = SEPARATOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuArrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst ARROW_NAME = 'DropdownMenuArrow';\n\ntype DropdownMenuArrowElement = React.ElementRef<typeof MenuPrimitive.Arrow>;\ntype MenuArrowProps = Radix.ComponentPropsWithoutRef<typeof MenuPrimitive.Arrow>;\ninterface DropdownMenuArrowProps extends MenuArrowProps {}\n\nconst DropdownMenuArrow = React.forwardRef<DropdownMenuArrowElement, DropdownMenuArrowProps>(\n (props: ScopedProps<DropdownMenuArrowProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...arrowProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.Arrow {...menuScope} {...arrowProps} ref={forwardedRef} />;\n }\n);\n\nDropdownMenuArrow.displayName = ARROW_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuSub\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DropdownMenuSubProps {\n children?: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?(open: boolean): void;\n}\n\nconst DropdownMenuSub: React.FC<DropdownMenuSubProps> = (\n props: ScopedProps<DropdownMenuSubProps>\n) => {\n const { __scopeDropdownMenu, children, open: openProp, onOpenChange, defaultOpen } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n });\n\n return (\n <MenuPrimitive.Sub {...menuScope} open={open} onOpenChange={setOpen}>\n {children}\n </MenuPrimitive.Sub>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuSubTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst SUB_TRIGGER_NAME = 'DropdownMenuSubTrigger';\n\ntype DropdownMenuSubTriggerElement = React.ElementRef<typeof MenuPrimitive.SubTrigger>;\ntype MenuSubTriggerProps = Radix.ComponentPropsWithoutRef<typeof MenuPrimitive.SubTrigger>;\ninterface DropdownMenuSubTriggerProps extends MenuSubTriggerProps {}\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n DropdownMenuSubTriggerElement,\n DropdownMenuSubTriggerProps\n>((props: ScopedProps<DropdownMenuSubTriggerProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...subTriggerProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return <MenuPrimitive.SubTrigger {...menuScope} {...subTriggerProps} ref={forwardedRef} />;\n});\n\nDropdownMenuSubTrigger.displayName = SUB_TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuSubContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst SUB_CONTENT_NAME = 'DropdownMenuSubContent';\n\ntype DropdownMenuSubContentElement = React.ElementRef<typeof MenuPrimitive.Content>;\ntype MenuSubContentProps = Radix.ComponentPropsWithoutRef<typeof MenuPrimitive.SubContent>;\ninterface DropdownMenuSubContentProps extends MenuSubContentProps {}\n\nconst DropdownMenuSubContent = React.forwardRef<\n DropdownMenuSubContentElement,\n DropdownMenuSubContentProps\n>((props: ScopedProps<DropdownMenuSubContentProps>, forwardedRef) => {\n const { __scopeDropdownMenu, ...subContentProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n\n return (\n <MenuPrimitive.SubContent\n {...menuScope}\n {...subContentProps}\n ref={forwardedRef}\n style={{\n ...props.style,\n // re-namespace exposed content custom properties\n ...{\n '--radix-dropdown-menu-content-transform-origin': 'var(--radix-popper-transform-origin)',\n '--radix-dropdown-menu-content-available-width': 'var(--radix-popper-available-width)',\n '--radix-dropdown-menu-content-available-height': 'var(--radix-popper-available-height)',\n '--radix-dropdown-menu-trigger-width': 'var(--radix-popper-anchor-width)',\n '--radix-dropdown-menu-trigger-height': 'var(--radix-popper-anchor-height)',\n },\n }}\n />\n );\n});\n\nDropdownMenuSubContent.displayName = SUB_CONTENT_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = DropdownMenu;\nconst Trigger = DropdownMenuTrigger;\nconst Portal = DropdownMenuPortal;\nconst Content = DropdownMenuContent;\nconst Group = DropdownMenuGroup;\nconst Label = DropdownMenuLabel;\nconst Item = DropdownMenuItem;\nconst CheckboxItem = DropdownMenuCheckboxItem;\nconst RadioGroup = DropdownMenuRadioGroup;\nconst RadioItem = DropdownMenuRadioItem;\nconst ItemIndicator = DropdownMenuItemIndicator;\nconst Separator = DropdownMenuSeparator;\nconst Arrow = DropdownMenuArrow;\nconst Sub = DropdownMenuSub;\nconst SubTrigger = DropdownMenuSubTrigger;\nconst SubContent = DropdownMenuSubContent;\n\nexport {\n createDropdownMenuScope,\n //\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuPortal,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuItemIndicator,\n DropdownMenuSeparator,\n DropdownMenuArrow,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n //\n Root,\n Trigger,\n Portal,\n Content,\n Group,\n Label,\n Item,\n CheckboxItem,\n RadioGroup,\n RadioItem,\n ItemIndicator,\n Separator,\n Arrow,\n Sub,\n SubTrigger,\n SubContent,\n};\nexport type {\n DropdownMenuProps,\n DropdownMenuTriggerProps,\n DropdownMenuPortalProps,\n DropdownMenuContentProps,\n DropdownMenuGroupProps,\n DropdownMenuLabelProps,\n DropdownMenuItemProps,\n DropdownMenuCheckboxItemProps,\n DropdownMenuRadioGroupProps,\n DropdownMenuRadioItemProps,\n DropdownMenuItemIndicatorProps,\n DropdownMenuSeparatorProps,\n DropdownMenuArrowProps,\n DropdownMenuSubProps,\n DropdownMenuSubTriggerProps,\n DropdownMenuSubContentProps,\n};\n"]}