photon-grid-vue 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,61 @@
1
+ # photon-grid-vue
2
+
3
+ Vue 3 wrapper for [Photon Grid](https://github.com/abdulwahid-csit/photon-grid) — an
4
+ enterprise-grade, framework-agnostic TypeScript data grid.
5
+
6
+ ## Install
7
+
8
+ ```bash
9
+ npm install photon-grid-vue photon-grid-core vue
10
+ ```
11
+
12
+ `vue` and `photon-grid-core` are peer dependencies.
13
+
14
+ ## Usage
15
+
16
+ ```vue
17
+ <script setup lang="ts">
18
+ import { PhotonGrid } from 'photon-grid-vue';
19
+ import type { ColumnDef, GridApi } from 'photon-grid-vue';
20
+ import 'photon-grid-core/styles/photon-grid.css';
21
+
22
+ const columns: ColumnDef[] = [
23
+ { colId: 'name', field: 'name', header: 'Name', type: 'string' },
24
+ { colId: 'age', field: 'age', header: 'Age', type: 'number' },
25
+ ];
26
+ const rows = [{ name: 'Ada', age: 36 }, { name: 'Alan', age: 41 }];
27
+
28
+ function onReady(api: GridApi) {
29
+ console.log('rows:', api.getVisibleRows().length);
30
+ }
31
+ </script>
32
+
33
+ <template>
34
+ <PhotonGrid
35
+ :columns="columns"
36
+ :dataSet="rows"
37
+ :options="{ theme: 'light' }"
38
+ @gridReady="onReady"
39
+ @rowClicked="(e) => console.log(e)"
40
+ />
41
+ </template>
42
+ ```
43
+
44
+ ## Props
45
+
46
+ | Prop | Type | Description |
47
+ | --------- | --------------------------- | ------------------------------------ |
48
+ | `columns` | `ColumnDef[]` | Column definitions. |
49
+ | `dataSet` | `Record<string, unknown>[]` | Row data. |
50
+ | `options` | `Partial<GridOptions>` | Theme, selection, and feature flags. |
51
+
52
+ ## Events
53
+
54
+ `gridReady`, `dataChanged`, `rowClicked`, `rowDoubleClicked`, `rowSelected`,
55
+ `cellClicked`, `cellDoubleClicked`, `cellValueChanged`, `cellSelectionChanged`,
56
+ `columnResized`, `columnMoved`, `sortChanged`, `filterChanged`, `pageChanged`,
57
+ `columnsStateChanged`, `themeChanged`, `exportComplete`.
58
+
59
+ ## License
60
+
61
+ MIT
package/index.cjs ADDED
@@ -0,0 +1 @@
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});let e=require("vue"),t=require("photon-grid-core");var n=[[t.GridEventType.DATA_CHANGED,`dataChanged`],[t.GridEventType.ROW_CLICKED,`rowClicked`],[t.GridEventType.ROW_DOUBLE_CLICKED,`rowDoubleClicked`],[t.GridEventType.ROW_SELECTED,`rowSelected`],[t.GridEventType.CELL_CLICKED,`cellClicked`],[t.GridEventType.CELL_DOUBLE_CLICKED,`cellDoubleClicked`],[t.GridEventType.CELL_VALUE_CHANGED,`cellValueChanged`],[t.GridEventType.CELL_SELECTION_CHANGED,`cellSelectionChanged`],[t.GridEventType.COLUMN_RESIZED,`columnResized`],[t.GridEventType.COLUMN_MOVED,`columnMoved`],[t.GridEventType.SORT_CHANGED,`sortChanged`],[t.GridEventType.FILTER_CHANGED,`filterChanged`],[t.GridEventType.PAGE_CHANGED,`pageChanged`],[t.GridEventType.COLUMNS_STATE_CHANGED,`columnsStateChanged`],[t.GridEventType.THEME_CHANGED,`themeChanged`],[t.GridEventType.EXPORT_COMPLETE,`exportComplete`]],r=(0,e.defineComponent)({name:`PhotonGrid`,props:{columns:{type:Array,default:()=>[]},dataSet:{type:Array,default:()=>[]},options:{type:Object,default:()=>({})}},emits:[`gridReady`,`dataChanged`,`rowClicked`,`rowDoubleClicked`,`rowSelected`,`cellClicked`,`cellDoubleClicked`,`cellValueChanged`,`cellSelectionChanged`,`columnResized`,`columnMoved`,`sortChanged`,`filterChanged`,`pageChanged`,`columnsStateChanged`,`themeChanged`,`exportComplete`],setup(r,{emit:i}){let a=(0,e.ref)(null),o=(0,e.shallowRef)(null),s=[],c=()=>{for(let e of s)e();s=[],o.value?.destroy(),o.value=null},l=()=>{if(!a.value)return;let e={...r.options??{},columns:r.columns??[],data:r.dataSet??[]},c=new t.GridCore(a.value,e);o.value=c;let l=i;for(let[e,t]of n)s.push(c.api.on(e,e=>l(t,e)));l(`gridReady`,c.api)};return(0,e.onMounted)(l),(0,e.onBeforeUnmount)(c),(0,e.watch)(()=>[r.columns,r.dataSet,r.options],()=>{c(),l()}),()=>(0,e.h)(`div`,{ref:a,class:`photon-grid__host`})}});exports.PhotonGrid=r,exports.default=r;
package/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export { PhotonGrid, default } from './photon-grid';
2
+ export type * from 'photon-grid-core';
package/index.js ADDED
@@ -0,0 +1,85 @@
1
+ import { defineComponent as e, h as t, onBeforeUnmount as n, onMounted as r, ref as i, shallowRef as a, watch as o } from "vue";
2
+ import { GridCore as s, GridEventType as c } from "photon-grid-core";
3
+ //#region src/photon-grid.ts
4
+ var l = [
5
+ [c.DATA_CHANGED, "dataChanged"],
6
+ [c.ROW_CLICKED, "rowClicked"],
7
+ [c.ROW_DOUBLE_CLICKED, "rowDoubleClicked"],
8
+ [c.ROW_SELECTED, "rowSelected"],
9
+ [c.CELL_CLICKED, "cellClicked"],
10
+ [c.CELL_DOUBLE_CLICKED, "cellDoubleClicked"],
11
+ [c.CELL_VALUE_CHANGED, "cellValueChanged"],
12
+ [c.CELL_SELECTION_CHANGED, "cellSelectionChanged"],
13
+ [c.COLUMN_RESIZED, "columnResized"],
14
+ [c.COLUMN_MOVED, "columnMoved"],
15
+ [c.SORT_CHANGED, "sortChanged"],
16
+ [c.FILTER_CHANGED, "filterChanged"],
17
+ [c.PAGE_CHANGED, "pageChanged"],
18
+ [c.COLUMNS_STATE_CHANGED, "columnsStateChanged"],
19
+ [c.THEME_CHANGED, "themeChanged"],
20
+ [c.EXPORT_COMPLETE, "exportComplete"]
21
+ ], u = e({
22
+ name: "PhotonGrid",
23
+ props: {
24
+ columns: {
25
+ type: Array,
26
+ default: () => []
27
+ },
28
+ dataSet: {
29
+ type: Array,
30
+ default: () => []
31
+ },
32
+ options: {
33
+ type: Object,
34
+ default: () => ({})
35
+ }
36
+ },
37
+ emits: [
38
+ "gridReady",
39
+ "dataChanged",
40
+ "rowClicked",
41
+ "rowDoubleClicked",
42
+ "rowSelected",
43
+ "cellClicked",
44
+ "cellDoubleClicked",
45
+ "cellValueChanged",
46
+ "cellSelectionChanged",
47
+ "columnResized",
48
+ "columnMoved",
49
+ "sortChanged",
50
+ "filterChanged",
51
+ "pageChanged",
52
+ "columnsStateChanged",
53
+ "themeChanged",
54
+ "exportComplete"
55
+ ],
56
+ setup(e, { emit: c }) {
57
+ let u = i(null), d = a(null), f = [], p = () => {
58
+ for (let e of f) e();
59
+ f = [], d.value?.destroy(), d.value = null;
60
+ }, m = () => {
61
+ if (!u.value) return;
62
+ let t = {
63
+ ...e.options ?? {},
64
+ columns: e.columns ?? [],
65
+ data: e.dataSet ?? []
66
+ }, n = new s(u.value, t);
67
+ d.value = n;
68
+ let r = c;
69
+ for (let [e, t] of l) f.push(n.api.on(e, (e) => r(t, e)));
70
+ r("gridReady", n.api);
71
+ };
72
+ return r(m), n(p), o(() => [
73
+ e.columns,
74
+ e.dataSet,
75
+ e.options
76
+ ], () => {
77
+ p(), m();
78
+ }), () => t("div", {
79
+ ref: u,
80
+ class: "photon-grid__host"
81
+ });
82
+ }
83
+ });
84
+ //#endregion
85
+ export { u as PhotonGrid, u as default };
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "photon-grid-vue",
3
+ "version": "1.0.0",
4
+ "description": "Vue 3 wrapper for Photon Grid — an enterprise-grade, framework-agnostic TypeScript data grid.",
5
+ "author": "Abdul Wahid",
6
+ "license": "MIT",
7
+ "type": "module",
8
+ "main": "./index.cjs",
9
+ "module": "./index.js",
10
+ "types": "./index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "types": "./index.d.ts",
14
+ "import": "./index.js",
15
+ "require": "./index.cjs"
16
+ },
17
+ "./package.json": "./package.json"
18
+ },
19
+ "files": [
20
+ "*"
21
+ ],
22
+ "sideEffects": false,
23
+ "peerDependencies": {
24
+ "photon-grid-core": "^1.0.0",
25
+ "vue": "^3.4.0"
26
+ },
27
+ "keywords": [
28
+ "vue",
29
+ "vue3",
30
+ "vue-grid",
31
+ "vue-data-grid",
32
+ "vue-table",
33
+ "datatable",
34
+ "data-grid",
35
+ "grid",
36
+ "table",
37
+ "virtualization",
38
+ "tree-grid",
39
+ "enterprise-grid",
40
+ "photon-grid",
41
+ "typescript"
42
+ ],
43
+ "homepage": "https://github.com/abdulwahid-csit/photon-grid#readme",
44
+ "repository": {
45
+ "type": "git",
46
+ "url": "git+https://github.com/abdulwahid-csit/photon-grid.git"
47
+ },
48
+ "bugs": {
49
+ "url": "https://github.com/abdulwahid-csit/photon-grid/issues"
50
+ },
51
+ "engines": {
52
+ "node": ">=18"
53
+ },
54
+ "publishConfig": {
55
+ "access": "public"
56
+ }
57
+ }
@@ -0,0 +1,72 @@
1
+ import { PropType } from 'vue';
2
+ import { ColumnDef, GridOptions } from 'photon-grid-core';
3
+ /**
4
+ * Vue 3 wrapper around the framework-agnostic {@link GridCore}. Renders a single
5
+ * host element, instantiates the grid on mount, forwards the grid's typed events
6
+ * as Vue emits, and disposes everything on unmount. All business logic lives in
7
+ * Photon Core — this component only binds it to Vue's lifecycle.
8
+ *
9
+ * @example
10
+ * ```vue
11
+ * <PhotonGrid :columns="columns" :dataSet="rows" :options="{ theme: 'light' }"
12
+ * @gridReady="onReady" @rowClicked="onRow" />
13
+ * ```
14
+ */
15
+ export declare const PhotonGrid: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
16
+ /** Column definitions. */
17
+ columns: {
18
+ type: PropType<ColumnDef[]>;
19
+ default: () => never[];
20
+ };
21
+ /** Row data. */
22
+ dataSet: {
23
+ type: PropType<Record<string, unknown>[]>;
24
+ default: () => never[];
25
+ };
26
+ /** Additional grid options (theme, selection, features…). */
27
+ options: {
28
+ type: PropType<Partial<GridOptions>>;
29
+ default: () => {};
30
+ };
31
+ }>, () => import('vue').VNode<import('vue').RendererNode, import('vue').RendererElement, {
32
+ [key: string]: any;
33
+ }>, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, ("dataChanged" | "rowClicked" | "rowDoubleClicked" | "rowSelected" | "cellClicked" | "cellDoubleClicked" | "cellValueChanged" | "cellSelectionChanged" | "columnResized" | "columnMoved" | "sortChanged" | "filterChanged" | "pageChanged" | "columnsStateChanged" | "themeChanged" | "exportComplete" | "gridReady")[], "dataChanged" | "rowClicked" | "rowDoubleClicked" | "rowSelected" | "cellClicked" | "cellDoubleClicked" | "cellValueChanged" | "cellSelectionChanged" | "columnResized" | "columnMoved" | "sortChanged" | "filterChanged" | "pageChanged" | "columnsStateChanged" | "themeChanged" | "exportComplete" | "gridReady", import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
34
+ /** Column definitions. */
35
+ columns: {
36
+ type: PropType<ColumnDef[]>;
37
+ default: () => never[];
38
+ };
39
+ /** Row data. */
40
+ dataSet: {
41
+ type: PropType<Record<string, unknown>[]>;
42
+ default: () => never[];
43
+ };
44
+ /** Additional grid options (theme, selection, features…). */
45
+ options: {
46
+ type: PropType<Partial<GridOptions>>;
47
+ default: () => {};
48
+ };
49
+ }>> & Readonly<{
50
+ onDataChanged?: ((...args: any[]) => any) | undefined;
51
+ onRowClicked?: ((...args: any[]) => any) | undefined;
52
+ onRowDoubleClicked?: ((...args: any[]) => any) | undefined;
53
+ onRowSelected?: ((...args: any[]) => any) | undefined;
54
+ onCellClicked?: ((...args: any[]) => any) | undefined;
55
+ onCellDoubleClicked?: ((...args: any[]) => any) | undefined;
56
+ onCellValueChanged?: ((...args: any[]) => any) | undefined;
57
+ onCellSelectionChanged?: ((...args: any[]) => any) | undefined;
58
+ onColumnResized?: ((...args: any[]) => any) | undefined;
59
+ onColumnMoved?: ((...args: any[]) => any) | undefined;
60
+ onSortChanged?: ((...args: any[]) => any) | undefined;
61
+ onFilterChanged?: ((...args: any[]) => any) | undefined;
62
+ onPageChanged?: ((...args: any[]) => any) | undefined;
63
+ onColumnsStateChanged?: ((...args: any[]) => any) | undefined;
64
+ onThemeChanged?: ((...args: any[]) => any) | undefined;
65
+ onExportComplete?: ((...args: any[]) => any) | undefined;
66
+ onGridReady?: ((...args: any[]) => any) | undefined;
67
+ }>, {
68
+ columns: ColumnDef[];
69
+ dataSet: Record<string, unknown>[];
70
+ options: Partial<GridOptions>;
71
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
72
+ export default PhotonGrid;