// Copyright 2025 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import type { CSSProperties, ReactNode } from 'react';
import React from 'react';
import { FocusScope } from 'react-aria';
import classNames from 'classnames';
import { Button, Dialog, Header, Popover } from 'react-aria-components';
import { FunScrollerSection } from './FunScroller';
/**
* Grid Container
*/
export type FunGridContainerProps = Readonly<{
totalSize: number;
columnCount: number;
cellWidth: number;
cellHeight: number;
children: ReactNode;
}>;
export function FunGridContainer(props: FunGridContainerProps): JSX.Element {
return (
{props.children}
);
}
/**
* Grid Section
*/
export type FunGridScrollerSectionProps = Readonly<{
id: string;
sectionOffset: number;
sectionSize: number;
children: ReactNode;
}>;
export function FunGridScrollerSection(
props: FunGridScrollerSectionProps
): JSX.Element {
return (
{props.children}
);
}
/**
* Grid Header
*/
export type FunGridHeaderProps = Readonly<{
id: string;
headerOffset: number;
headerSize: number;
children: ReactNode;
}>;
export function FunGridHeader(props: FunGridHeaderProps): JSX.Element {
return (
{props.children}
);
}
/**
* Grid Header Text
*/
export type FunGridHeaderTextProps = Readonly<{
children: ReactNode;
}>;
export function FunGridHeaderText(props: FunGridHeaderTextProps): JSX.Element {
return {props.children};
}
/**
* Grid Header Button
*/
export type FunGridHeaderButtonProps = Readonly<{
label: string;
onPress?: () => void;
children: ReactNode;
}>;
export function FunGridHeaderButton(
props: FunGridHeaderButtonProps
): JSX.Element {
return (
);
}
/**
* Grid Header Button
*/
export type FunGridHeaderIconProps = Readonly<{
iconClassName: `FunGrid__HeaderIcon--${string}`;
}>;
export function FunGridHeaderIcon(props: FunGridHeaderIconProps): JSX.Element {
return (
);
}
/**
* Grid Header Popover
*/
export type FunGridHeaderPopoverProps = Readonly<{
children: ReactNode;
}>;
export function FunGridHeaderPopover(
props: FunGridHeaderPopoverProps
): JSX.Element {
return (
);
}
export type FunGridHeaderPopoverTextProps = Readonly<{
children: ReactNode;
}>;
export function FunGridHeaderPopoverHeader(
props: FunGridHeaderPopoverTextProps
): JSX.Element {
return (
);
}
/**
* Grid Row Group
*/
export type FunGridRowGroupProps = Readonly<{
'aria-labelledby': string;
colCount: number;
rowCount: number;
rowGroupOffset: number;
rowGroupSize: number;
children: ReactNode;
}>;
export function FunGridRowGroup(props: FunGridRowGroupProps): JSX.Element {
return (
{props.children}
);
}
/**
* Grid Row
*/
export type FunGridRowProps = Readonly<{
rowIndex: number;
children: ReactNode;
}>;
export function FunGridRow(props: FunGridRowProps): JSX.Element {
return (
{props.children}
);
}
/**
* Grid Cell
*/
export type FunGridCellProps = Readonly<{
'data-key': string;
rowIndex: number;
colIndex: number;
children: ReactNode;
}>;
export function FunGridCell(props: FunGridCellProps): JSX.Element {
return (
{props.children}
);
}