import { PropType } from 'vue';
import { ColumnDefInput } from 'photon-grid-core';
import { PhotonGridOptions } from './vue-renderer-adapter';
/**
* Vue 3 wrapper around the framework-agnostic {@link GridCore}. Renders a single
* host element, instantiates the grid on mount, forwards the grid's typed events
* as Vue emits, and disposes everything on unmount. All business logic lives in
* Photon Core — this component only binds it to Vue's lifecycle.
*
* @example
* ```vue
*
* ```
*/
export declare const PhotonGrid: import('vue').DefineComponent;
default: () => never[];
};
/** Row data. */
dataSet: {
type: PropType[]>;
default: () => never[];
};
/**
* Additional grid options (theme, selection, features…), forwarded to the
* core. Enable the natural-language AI panel — and, optionally, its Gemini
* generative back-end — through `options.photonAI`:
*
* @example Gemini-powered AI panel
* ```ts
* import { PhotonAIProviderType } from 'photon-grid-vue';
*
* const options = {
* photonAI: {
* enabled: true,
* provider: {
* type: PhotonAIProviderType.Gemini,
* apiKey: import.meta.env.VITE_GEMINI_API_KEY,
* model: 'gemini-flash-latest',
* },
* },
* };
* ```
*
* A Master/Detail row may be rendered by a Vue component through
* `options.masterDetail.renderer` — see {@link PhotonGridOptions}:
*
* @example Vue component as a Master/Detail renderer
* ```ts
* const options = {
* masterDetail: {
* enabled: true,
* renderer: OrderDetail, // any Vue component
* props: (ctx) => ({ orders: ctx.detailData ?? [] }),
* events: { save: (e) => persist(e.payload) },
* },
* };
* ```
*/
options: {
type: PropType>;
default: () => {};
};
/**
* Whether the grid shows its loading indicator.
*
* A dedicated prop rather than an `options` field, because an `options`
* change rebuilds the grid — this routes to `GridApi.setLoading` instead,
* so toggling it is a repaint, not a rebuild, and grid state (scroll
* position, selection, column layout) survives untouched.
*
* Configure the indicator's appearance — spinner (default) or skeleton
* placeholder rows — through `options.loadingOverlay`.
*
* @example
* ```vue
*
* ```
*/
loading: {
type: BooleanConstructor;
default: boolean;
};
}>, () => import('vue').VNode, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, ("dataChanged" | "rowClicked" | "rowDoubleClicked" | "rowSelected" | "cellClicked" | "cellDoubleClicked" | "cellValueChanged" | "cellSelectionChanged" | "columnResized" | "columnMoved" | "sortChanged" | "filterChanged" | "pageChanged" | "columnsStateChanged" | "themeChanged" | "exportComplete" | "loadingChanged" | "gridReady")[], "dataChanged" | "rowClicked" | "rowDoubleClicked" | "rowSelected" | "cellClicked" | "cellDoubleClicked" | "cellValueChanged" | "cellSelectionChanged" | "columnResized" | "columnMoved" | "sortChanged" | "filterChanged" | "pageChanged" | "columnsStateChanged" | "themeChanged" | "exportComplete" | "loadingChanged" | "gridReady", import('vue').PublicProps, Readonly;
default: () => never[];
};
/** Row data. */
dataSet: {
type: PropType[]>;
default: () => never[];
};
/**
* Additional grid options (theme, selection, features…), forwarded to the
* core. Enable the natural-language AI panel — and, optionally, its Gemini
* generative back-end — through `options.photonAI`:
*
* @example Gemini-powered AI panel
* ```ts
* import { PhotonAIProviderType } from 'photon-grid-vue';
*
* const options = {
* photonAI: {
* enabled: true,
* provider: {
* type: PhotonAIProviderType.Gemini,
* apiKey: import.meta.env.VITE_GEMINI_API_KEY,
* model: 'gemini-flash-latest',
* },
* },
* };
* ```
*
* A Master/Detail row may be rendered by a Vue component through
* `options.masterDetail.renderer` — see {@link PhotonGridOptions}:
*
* @example Vue component as a Master/Detail renderer
* ```ts
* const options = {
* masterDetail: {
* enabled: true,
* renderer: OrderDetail, // any Vue component
* props: (ctx) => ({ orders: ctx.detailData ?? [] }),
* events: { save: (e) => persist(e.payload) },
* },
* };
* ```
*/
options: {
type: PropType>;
default: () => {};
};
/**
* Whether the grid shows its loading indicator.
*
* A dedicated prop rather than an `options` field, because an `options`
* change rebuilds the grid — this routes to `GridApi.setLoading` instead,
* so toggling it is a repaint, not a rebuild, and grid state (scroll
* position, selection, column layout) survives untouched.
*
* Configure the indicator's appearance — spinner (default) or skeleton
* placeholder rows — through `options.loadingOverlay`.
*
* @example
* ```vue
*
* ```
*/
loading: {
type: BooleanConstructor;
default: boolean;
};
}>> & Readonly<{
onDataChanged?: ((...args: any[]) => any) | undefined;
onRowClicked?: ((...args: any[]) => any) | undefined;
onRowDoubleClicked?: ((...args: any[]) => any) | undefined;
onRowSelected?: ((...args: any[]) => any) | undefined;
onCellClicked?: ((...args: any[]) => any) | undefined;
onCellDoubleClicked?: ((...args: any[]) => any) | undefined;
onCellValueChanged?: ((...args: any[]) => any) | undefined;
onCellSelectionChanged?: ((...args: any[]) => any) | undefined;
onColumnResized?: ((...args: any[]) => any) | undefined;
onColumnMoved?: ((...args: any[]) => any) | undefined;
onSortChanged?: ((...args: any[]) => any) | undefined;
onFilterChanged?: ((...args: any[]) => any) | undefined;
onPageChanged?: ((...args: any[]) => any) | undefined;
onColumnsStateChanged?: ((...args: any[]) => any) | undefined;
onThemeChanged?: ((...args: any[]) => any) | undefined;
onExportComplete?: ((...args: any[]) => any) | undefined;
onLoadingChanged?: ((...args: any[]) => any) | undefined;
onGridReady?: ((...args: any[]) => any) | undefined;
}>, {
columns: ColumnDefInput[];
loading: boolean;
dataSet: Record[];
options: Partial;
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
export default PhotonGrid;