import React, { type ReactElement, type ReactNode } from "react";
/**
* All user-facing strings rendered by the object table and its
* sub-components.
*/
export interface ObjectTableLabels {
	/**
	* Shown in the table body when there are no rows and no error, unless a
	* `renderEmptyState` override is supplied.
	* @default "No Data"
	*/
	noData: string;
	/**
	* Shown in the table body when data loading fails.
	* @default (errorMessage) => `Error Loading Data: ${errorMessage}`
	*/
	errorLoadingData: (errorMessage: string) => string;
	/** @default "Edit Table" */
	editFooterEditTable: string;
	/** @default "Submit Edits" */
	editFooterSubmitEdits: string;
	/** @default "Cancel" */
	editFooterCancel: string;
	/** @default "Select a row to edit data…" */
	editFooterSelectRowToEdit: string;
	/** @default (count) => `${count} modifications` */
	editFooterModificationCount: (count: number) => string;
	/** Shown in the edit-footer badge when a cell fails validation.
	* @default "Validation error" */
	editFooterValidationError: string;
	/**
	* Fallback message surfaced when a column's `validateEdit` rejects (throws)
	* rather than resolving with a message. Messages returned by `validateEdit`
	* itself are surfaced verbatim and are not affected by this label.
	* @default "Validation error"
	*/
	cellValidationError: string;
	/** @default "Configure Table Columns" */
	columnConfigTitle: string;
	/** @default "Cancel" */
	columnConfigCancel: string;
	/** @default "Apply" */
	columnConfigApply: string;
	/** @default "Visible Columns" */
	columnConfigVisibleColumns: string;
	/** @default "Drag to reorder" */
	columnConfigDragToReorder: string;
	/** @default "Add or Remove Columns" */
	columnConfigAddOrRemoveColumns: string;
	/** @default "All Columns" */
	columnConfigAllColumns: string;
	/** @default "No visible columns" */
	columnConfigNoVisibleColumns: string;
	/** @default "No matching columns found" */
	columnConfigNoMatchingColumns: string;
	/** @default "Search..." */
	columnConfigSearchPlaceholder: string;
	/** @default "Search available columns" */
	columnConfigSearchAriaLabel: string;
	/** @default "Sort on Multiple Columns" */
	sortDialogTitle: string;
	/** @default "Cancel" */
	sortDialogCancel: string;
	/** @default "Apply" */
	sortDialogApply: string;
	/** @default "Add Column to Sort" */
	sortDialogAddColumnToSort: string;
	/** @default "Search columns" */
	sortDialogSearchPlaceholder: string;
	/** @default "No matching columns" */
	sortDialogNoMatchingColumns: string;
	/** @default (columnName) => `Toggle sort direction for ${columnName}` */
	sortDialogToggleDirection: (columnName: string) => string;
	/** @default "Pin column" */
	headerMenuPinColumn: string;
	/** @default "Unpin Column" */
	headerMenuUnpinColumn: string;
	/** @default "Sort ascending" */
	headerMenuSortAscending: string;
	/** @default "Sort descending" */
	headerMenuSortDescending: string;
	/** @default "Sort on multiple columns" */
	headerMenuSortOnMultipleColumns: string;
	/** @default "Clear all sorts" */
	headerMenuClearAllSorts: string;
	/** @default "Reset Column Size" */
	headerMenuResetColumnSize: string;
	/** @default "Configure Columns" */
	headerMenuConfigureColumns: string;
	/** @default (columnId) => `Open header menu for column with id=${columnId}` */
	headerMenuAriaLabel: (columnId: string) => string;
	/** @default "Error" */
	cellError: string;
	/** @default "No value" */
	cellNoValue: string;
	/** @default "Select all rows" */
	selectAllRows: string;
	/** @default "Deselect all rows" */
	deselectAllRows: string;
	/** @default (rowNumber) => `Select row ${rowNumber}` */
	selectRow: (rowNumber: number) => string;
}
export declare const DEFAULT_OBJECT_TABLE_LABELS: ObjectTableLabels;
export interface ObjectTableLabelsProviderProps {
	labels?: Partial<ObjectTableLabels>;
	children: ReactNode;
}
/**
* Supplies overridden {@link ObjectTableLabels} to descendant table
* sub-components via context. Merges `labels` over the labels from the nearest
* ancestor provider, so a wrapping `ObjectTable`/`BaseTable` and an inner
* dialog can each override a different subset.
*
* The provided value keeps a stable identity across renders whenever the
* merged labels are equal, so callers can pass an inline `labels` object
* without re-rendering every label consumer.
*/
export declare function ObjectTableLabelsProvider({ labels, children }: ObjectTableLabelsProviderProps): ReactElement;
/**
* Returns the fully-resolved {@link ObjectTableLabels} for the current subtree.
* When no {@link ObjectTableLabelsProvider} is present, returns
* {@link DEFAULT_OBJECT_TABLE_LABELS}.
*/
export declare function useObjectTableLabels(): ObjectTableLabels;
/**
* Wraps `Inner` so it accepts an optional `labels` prop and supplies the merged
* {@link ObjectTableLabels} to its subtree.
*
* For generic components, e.g. `BaseTable` use
* {@link ObjectTableLabelsProvider} directly to preserve its `TData`
* type parameter.
*/
export declare function withObjectTableLabels<P extends object>(Inner: React.ComponentType<P>): React.FC<P & {
	labels?: Partial<ObjectTableLabels>
}>;
