@freegridjs/angular 1.8.0 → 1.9.1
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/LICENSE +63 -29
- package/README.md +25 -3
- package/fesm2022/freegridjs-angular.mjs +9 -3
- package/fesm2022/freegridjs-angular.mjs.map +1 -1
- package/package.json +4 -4
- package/types/freegridjs-angular.d.ts +6 -0
package/LICENSE
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
FreeGrid License
|
|
2
|
-
Version 1.
|
|
2
|
+
Version 1.1, 2026-10-17
|
|
3
3
|
|
|
4
4
|
Copyright (c) 2026 2nd Korea (세컨드코리아). All rights reserved.
|
|
5
5
|
Contact: help@2nd-korea.com · https://freegrid.app/pricing/
|
|
@@ -8,29 +8,52 @@ This license covers the FreeGrid software, including the packages @freegridjs/co
|
|
|
8
8
|
@freegridjs/react and @freegridjs/vue, their source code and the files built from them
|
|
9
9
|
(the "Software").
|
|
10
10
|
|
|
11
|
-
1.
|
|
11
|
+
1. Core features are free
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
open-source projects that are not run by a company, and learning or evaluation.
|
|
13
|
+
Anyone, individuals and companies alike, may use, copy and modify the Software free of
|
|
14
|
+
charge for its core features, which work without a license key and without time limit.
|
|
16
15
|
|
|
17
|
-
2.
|
|
16
|
+
2. Paid features need a key after a 30-day trial
|
|
18
17
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
The paid features listed at https://freegrid.app/pricing/ (such as row grouping, pivot,
|
|
19
|
+
charts, cell range selection, Excel and PDF export, formulas and conditional formatting)
|
|
20
|
+
may be used free of charge for 30 days on each domain. After that they need a valid
|
|
21
|
+
Personal Key or Company License key for that domain. On development hosts (localhost,
|
|
22
|
+
private network addresses, .local and .test) every feature works without a key.
|
|
22
23
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
A key issued for a domain (for example example.com) covers that domain and all of its
|
|
25
|
+
subdomains (for example www.example.com and erp.example.com).
|
|
26
|
+
|
|
27
|
+
3. Personal Key
|
|
28
|
+
|
|
29
|
+
An individual may get a free Personal Key at https://freegrid.app/license/personal/ for
|
|
30
|
+
personal, educational, research or other non-commercial purposes, including personal
|
|
31
|
+
websites, open-source projects that are not run by a company, and learning or
|
|
32
|
+
evaluation.
|
|
33
|
+
|
|
34
|
+
- A Personal Key is issued for one domain after email verification and is valid for 6
|
|
35
|
+
months from the day it is issued.
|
|
36
|
+
- It may be renewed at any time by requesting a new key; the previous key keeps working
|
|
37
|
+
until it expires.
|
|
38
|
+
- A Personal Key may not be used by or for a Company (section 4) or for any commercial
|
|
39
|
+
purpose.
|
|
40
|
+
|
|
41
|
+
4. Company License
|
|
42
|
+
|
|
43
|
+
Any use of the paid features by or for a company, organization, public body or other
|
|
44
|
+
business ("Company"), whether the product is sold, used internally or offered to
|
|
45
|
+
customers, requires a paid Company License.
|
|
46
|
+
|
|
47
|
+
- A Company License is issued for one domain and covers that domain and all of its
|
|
48
|
+
subdomains. Applications without a domain (desktop apps, intranets reached by address)
|
|
49
|
+
count as one domain per installation site.
|
|
27
50
|
- The fee is KRW 200,000 per domain per year. The license is valid for one year from the
|
|
28
51
|
date it is issued and may be renewed. A perpetual Company License costs KRW 400,000 per
|
|
29
52
|
domain, paid once, and does not expire.
|
|
30
|
-
- A license key is provided with each Company License. Setting
|
|
31
|
-
console notice described in section
|
|
53
|
+
- A license key is provided with each Company License. Setting a valid key removes the
|
|
54
|
+
console notice described in section 7.
|
|
32
55
|
|
|
33
|
-
|
|
56
|
+
5. Conditions for all users
|
|
34
57
|
|
|
35
58
|
- Keep this license and the copyright notice in copies of the Software.
|
|
36
59
|
- Do not sell, rent or sublicense the Software itself, or offer it as a standalone grid
|
|
@@ -38,38 +61,49 @@ This license covers the FreeGrid software, including the packages @freegridjs/co
|
|
|
38
61
|
- Do not remove or work around the license check, or share license keys outside the
|
|
39
62
|
licensed domain.
|
|
40
63
|
|
|
41
|
-
|
|
64
|
+
6. No warranty
|
|
42
65
|
|
|
43
66
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
44
67
|
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
|
45
68
|
PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
|
|
46
69
|
FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY ARISING FROM THE SOFTWARE OR ITS USE.
|
|
47
70
|
|
|
48
|
-
|
|
71
|
+
7. Usage report
|
|
49
72
|
|
|
50
73
|
When the Software runs on a public domain (not localhost or a private network address),
|
|
51
74
|
it sends the domain name, the page address without query string, the Software version
|
|
52
|
-
and whether a license key is set to freegrid.app once a day.
|
|
53
|
-
|
|
54
|
-
|
|
75
|
+
and whether a license key is set to freegrid.app once a day. Without a valid key it also
|
|
76
|
+
asks freegrid.app for the domain's trial status. No data shown in the grid and no
|
|
77
|
+
information about end users is sent. Without a license key on such a domain it also
|
|
78
|
+
prints a notice in the browser developer console.
|
|
55
79
|
|
|
56
80
|
---------------------------------------------------------------------------------------
|
|
57
81
|
|
|
58
82
|
FreeGrid 라이선스 (요약, 한국어)
|
|
59
83
|
|
|
60
|
-
-
|
|
61
|
-
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
84
|
+
- 기본 기능: 개인과 회사 모두 키 없이, 기간 제한 없이 무료로 사용, 복제, 수정할 수 있습니다.
|
|
85
|
+
- 유료 기능: https://freegrid.app/pricing/ 에 나온 유료 기능(행 그룹, 피벗, 차트, 셀 범위
|
|
86
|
+
선택, 엑셀·PDF 내보내기, 수식, 조건부 서식 등)은 도메인마다 30일 동안 무료로 쓸 수 있고,
|
|
87
|
+
그 뒤에는 그 도메인의 유효한 개인 키나 회사 라이선스 키가 필요합니다. 개발 환경
|
|
88
|
+
(localhost, 사설 네트워크 주소, .local, .test)에서는 키 없이 모든 기능이 동작합니다.
|
|
89
|
+
- 키 하나는 지정한 도메인과 그 모든 서브도메인(예: www.example.com, erp.example.com)에
|
|
90
|
+
적용됩니다.
|
|
91
|
+
- 개인 키: 개인적·교육·연구 등 비상업적 용도라면 https://freegrid.app/license/personal/
|
|
92
|
+
에서 이메일 확인을 거쳐 무료로 받을 수 있습니다. 도메인 1개에 대해 발급일부터 6개월간
|
|
93
|
+
유효하고, 언제든 새 키를 받아 갱신할 수 있으며 이전 키는 만료일까지 동작합니다. 회사
|
|
94
|
+
용도나 상업적 용도에는 쓸 수 없습니다.
|
|
95
|
+
- 회사: 회사, 단체, 공공기관 등 업무용으로 유료 기능을 쓰려면 판매용·내부용·고객 제공용
|
|
96
|
+
모두 유료 회사 라이선스가 필요합니다.
|
|
97
|
+
- 도메인 1개(서브도메인 포함) 기준 연 200,000원이며, 발급일로부터 1년간 유효하고
|
|
98
|
+
갱신할 수 있습니다.
|
|
65
99
|
- 영구 라이선스는 도메인 1개 기준 400,000원을 한 번 결제하며 만료되지 않습니다.
|
|
66
|
-
- 라이선스마다 키를 발급하며, 키를 설정하면 콘솔 안내가 사라집니다.
|
|
100
|
+
- 라이선스마다 키를 발급하며, 유효한 키를 설정하면 콘솔 안내가 사라집니다.
|
|
67
101
|
- 모든 사용자: 저작권과 이 라이선스 문구를 유지해야 하며, 소프트웨어 자체를 판매하거나
|
|
68
102
|
별도 그리드 라이브러리로 재배포할 수 없고, 라이선스 확인을 제거하거나 키를 다른
|
|
69
103
|
도메인에 공유할 수 없습니다.
|
|
70
104
|
- 보증 없음: 소프트웨어는 있는 그대로 제공됩니다.
|
|
71
105
|
- 사용 보고: 공개 도메인에서 실행되면 하루 한 번 도메인 이름, 쿼리 문자열을 뺀 페이지
|
|
72
|
-
주소, 버전, 라이선스 키 설정 여부를 freegrid.app으로
|
|
73
|
-
사용자 정보는 보내지 않습니다.
|
|
106
|
+
주소, 버전, 라이선스 키 설정 여부를 freegrid.app으로 보내고, 유효한 키가 없으면 그
|
|
107
|
+
도메인의 체험 기간을 확인합니다. 그리드의 데이터나 최종 사용자 정보는 보내지 않습니다.
|
|
74
108
|
|
|
75
109
|
문의: help@2nd-korea.com · 대표번호 070-7768-1326
|
package/README.md
CHANGED
|
@@ -40,7 +40,29 @@ Docs: https://freegrid.app/docs/#angular
|
|
|
40
40
|
|
|
41
41
|
## License
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
The core grid (sorting, filters, editing, selection, pinned columns, pages and server rows, CSV export,
|
|
44
|
+
printing, themes, languages) is free for everyone, companies included.
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
Paid features need a key after a 30-day trial per domain: row grouping and aggregation, pivot, charts,
|
|
47
|
+
cell range selection, range copy and paste, fill handle, Excel and PDF export, workbook, server-side groups,
|
|
48
|
+
advanced filter, side bar panels, context menu, summary rows, formulas, find, conditional formatting,
|
|
49
|
+
the AI assistant and merged cells. Development hosts (localhost, private networks, .local, .test) always
|
|
50
|
+
have every feature.
|
|
51
|
+
|
|
52
|
+
- Personal, educational and non-commercial projects: a free personal key, valid 6 months and renewable
|
|
53
|
+
any time, at https://freegrid.app/license/personal/
|
|
54
|
+
- Companies: KRW 200,000 per domain per year, or KRW 400,000 once (perpetual, updates within the major
|
|
55
|
+
version bought). One key covers the domain and all its subdomains.
|
|
56
|
+
|
|
57
|
+
See https://freegrid.app/pricing/ and the LICENSE file.
|
|
58
|
+
|
|
59
|
+
기본 기능은 회사를 포함해 누구나 무료입니다. 유료 기능은 도메인마다 30일 체험 뒤 키가 필요합니다.
|
|
60
|
+
개인·교육·비영리 프로젝트는 무료 개인 키(6개월, 언제든 갱신)를, 회사는 도메인당 연 20만 원 또는 영구 40만 원
|
|
61
|
+
라이선스를 쓰며, 키 하나로 서브도메인까지 모두 쓸 수 있습니다. 자세한 내용은 https://freegrid.app/pricing/
|
|
62
|
+
|
|
63
|
+
```ts
|
|
64
|
+
import { setLicenseKey } from '@freegridjs/core';
|
|
65
|
+
setLicenseKey('FG1....'); // once for every grid on the page
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
or per grid: `<free-grid licenseKey="FG1...." [columns]="columns" [data]="rows" />`
|
|
@@ -100,8 +100,7 @@ var FreeGridComponent = class FreeGridComponent {
|
|
|
100
100
|
return typeof this.height === "number" ? `${this.height}px` : this.height;
|
|
101
101
|
}
|
|
102
102
|
ngAfterViewInit() {
|
|
103
|
-
const
|
|
104
|
-
...this.options,
|
|
103
|
+
const explicit = {
|
|
105
104
|
columns: this.columns,
|
|
106
105
|
data: this.data,
|
|
107
106
|
rowSelection: this.rowSelection,
|
|
@@ -114,7 +113,12 @@ var FreeGridComponent = class FreeGridComponent {
|
|
|
114
113
|
groupBy: this.groupBy,
|
|
115
114
|
pivot: this.pivot,
|
|
116
115
|
fontSize: this.fontSize,
|
|
117
|
-
fontFamily: this.fontFamily
|
|
116
|
+
fontFamily: this.fontFamily,
|
|
117
|
+
licenseKey: this.licenseKey
|
|
118
|
+
};
|
|
119
|
+
const api = this.zone.runOutsideAngular(() => createGrid(this.host, {
|
|
120
|
+
...this.options,
|
|
121
|
+
...Object.fromEntries(Object.entries(explicit).filter(([, v]) => v !== void 0))
|
|
118
122
|
}));
|
|
119
123
|
for (const [type, name] of Object.entries(OUTPUTS)) {
|
|
120
124
|
const out = this[name];
|
|
@@ -183,6 +187,7 @@ var FreeGridComponent = class FreeGridComponent {
|
|
|
183
187
|
pivot: "pivot",
|
|
184
188
|
fontSize: "fontSize",
|
|
185
189
|
fontFamily: "fontFamily",
|
|
190
|
+
licenseKey: "licenseKey",
|
|
186
191
|
height: "height"
|
|
187
192
|
},
|
|
188
193
|
outputs: {
|
|
@@ -274,6 +279,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
274
279
|
pivot: [{ type: Input }],
|
|
275
280
|
fontSize: [{ type: Input }],
|
|
276
281
|
fontFamily: [{ type: Input }],
|
|
282
|
+
licenseKey: [{ type: Input }],
|
|
277
283
|
height: [{ type: Input }],
|
|
278
284
|
ready: [{ type: Output }],
|
|
279
285
|
cellClick: [{ type: Output }],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"freegridjs-angular.mjs","names":[],"sources":["../../src/free-grid.component.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, NgZone, Output, inject,\n type AfterViewInit, type OnChanges, type OnDestroy, type SimpleChanges,\n} from '@angular/core';\nimport { changeTracker, createGrid, type ColumnDef, type GridApi, type GridEvents, type GridOptions, type LocalePack, type Row } from '@freegridjs/core';\n\n/** Grid event → output name. `paste` and `scroll` are prefixed so they don't clash with the DOM events of the host. */\nconst OUTPUTS = {\n cellClick: 'cellClick',\n cellDoubleClick: 'cellDoubleClick',\n selectionChange: 'selectionChange',\n sortChange: 'sortChange',\n filterChange: 'filterChange',\n columnResize: 'columnResize',\n columnMove: 'columnMove',\n focusChange: 'focusChange',\n columnVisible: 'columnVisible',\n rangeChange: 'rangeChange',\n cellValueChanged: 'cellValueChanged',\n paste: 'gridPaste',\n editStart: 'editStart',\n editStop: 'editStop',\n validationFailed: 'validationFailed',\n rowsAdded: 'rowsAdded',\n rowsRemoved: 'rowsRemoved',\n groupChange: 'groupChange',\n groupToggle: 'groupToggle',\n detailToggle: 'detailToggle',\n rowDragEnd: 'rowDragEnd',\n pageChange: 'pageChange',\n rowsLoaded: 'rowsLoaded',\n rowsLoadFailed: 'rowsLoadFailed',\n pivotChange: 'pivotChange',\n rowDrop: 'rowDrop',\n transactionApplied: 'transactionApplied',\n conditionalFormatsChange: 'conditionalFormatsChange',\n assistantAnswer: 'assistantAnswer',\n rowEditStart: 'rowEditStart',\n columnGroupOpened: 'columnGroupOpened',\n advancedFilterChange: 'advancedFilterChange',\n rowEditStop: 'rowEditStop',\n childrenLoaded: 'childrenLoaded',\n childrenLoadFailed: 'childrenLoadFailed',\n scroll: 'gridScroll',\n beforeSort: 'beforeSort',\n beforeFilter: 'beforeFilter',\n beforePageChange: 'beforePageChange',\n beforeEdit: 'beforeEdit',\n beforeCellChange: 'beforeCellChange',\n} as const satisfies Record<keyof GridEvents, string>;\n\n/**\n * `<free-grid [columns]=\"columns\" [data]=\"rows\" (cellClick)=\"…\" />`\n *\n * Inputs listed here update the grid when they change; anything else goes in `[options]` and applies at creation.\n * The grid runs outside Angular's zone; outputs re-enter it only when someone listens.\n */\n@Component({\n selector: 'free-grid',\n standalone: true,\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[style.display]': '\"block\"', '[style.height]': 'hostHeight' },\n})\nexport class FreeGridComponent implements AfterViewInit, OnChanges, OnDestroy {\n @Input() columns: ColumnDef[] = [];\n @Input() data: Row[] = [];\n /** Any other grid option (rowDrag, treeData, pagination, …), applied at creation. */\n @Input() options?: Partial<GridOptions>;\n @Input() rowSelection?: GridOptions['rowSelection'];\n @Input() getRowId?: GridOptions['getRowId'];\n @Input() rowHeight?: number;\n @Input() headerHeight?: number;\n @Input() theme?: string;\n @Input() locale?: string | Partial<LocalePack>;\n @Input() summary?: GridOptions['summary'];\n @Input() groupBy?: string[];\n @Input() pivot?: GridOptions['pivot'];\n @Input() fontSize?: number;\n @Input() fontFamily?: string;\n /** Host height; number = px. */\n @Input() height: number | string = 400;\n\n /** The grid API once the view is ready. */\n @Output() readonly ready = new EventEmitter<GridApi>();\n @Output() readonly cellClick = new EventEmitter<GridEvents['cellClick']>();\n @Output() readonly cellDoubleClick = new EventEmitter<GridEvents['cellDoubleClick']>();\n @Output() readonly selectionChange = new EventEmitter<GridEvents['selectionChange']>();\n @Output() readonly sortChange = new EventEmitter<GridEvents['sortChange']>();\n @Output() readonly filterChange = new EventEmitter<GridEvents['filterChange']>();\n @Output() readonly columnResize = new EventEmitter<GridEvents['columnResize']>();\n @Output() readonly columnMove = new EventEmitter<GridEvents['columnMove']>();\n @Output() readonly focusChange = new EventEmitter<GridEvents['focusChange']>();\n @Output() readonly columnVisible = new EventEmitter<GridEvents['columnVisible']>();\n @Output() readonly rangeChange = new EventEmitter<GridEvents['rangeChange']>();\n @Output() readonly cellValueChanged = new EventEmitter<GridEvents['cellValueChanged']>();\n @Output() readonly gridPaste = new EventEmitter<GridEvents['paste']>();\n @Output() readonly editStart = new EventEmitter<GridEvents['editStart']>();\n @Output() readonly editStop = new EventEmitter<GridEvents['editStop']>();\n @Output() readonly validationFailed = new EventEmitter<GridEvents['validationFailed']>();\n @Output() readonly rowsAdded = new EventEmitter<GridEvents['rowsAdded']>();\n @Output() readonly rowsRemoved = new EventEmitter<GridEvents['rowsRemoved']>();\n @Output() readonly groupChange = new EventEmitter<GridEvents['groupChange']>();\n @Output() readonly groupToggle = new EventEmitter<GridEvents['groupToggle']>();\n @Output() readonly detailToggle = new EventEmitter<GridEvents['detailToggle']>();\n @Output() readonly rowDragEnd = new EventEmitter<GridEvents['rowDragEnd']>();\n @Output() readonly pageChange = new EventEmitter<GridEvents['pageChange']>();\n @Output() readonly rowsLoaded = new EventEmitter<GridEvents['rowsLoaded']>();\n @Output() readonly rowsLoadFailed = new EventEmitter<GridEvents['rowsLoadFailed']>();\n @Output() readonly pivotChange = new EventEmitter<GridEvents['pivotChange']>();\n @Output() readonly rowDrop = new EventEmitter<GridEvents['rowDrop']>();\n @Output() readonly transactionApplied = new EventEmitter<GridEvents['transactionApplied']>();\n @Output() readonly conditionalFormatsChange = new EventEmitter<GridEvents['conditionalFormatsChange']>();\n @Output() readonly assistantAnswer = new EventEmitter<GridEvents['assistantAnswer']>();\n @Output() readonly rowEditStart = new EventEmitter<GridEvents['rowEditStart']>();\n @Output() readonly columnGroupOpened = new EventEmitter<GridEvents['columnGroupOpened']>();\n @Output() readonly advancedFilterChange = new EventEmitter<GridEvents['advancedFilterChange']>();\n @Output() readonly rowEditStop = new EventEmitter<GridEvents['rowEditStop']>();\n @Output() readonly childrenLoaded = new EventEmitter<GridEvents['childrenLoaded']>();\n @Output() readonly childrenLoadFailed = new EventEmitter<GridEvents['childrenLoadFailed']>();\n @Output() readonly gridScroll = new EventEmitter<GridEvents['scroll']>();\n @Output() readonly beforeSort = new EventEmitter<GridEvents['beforeSort']>();\n @Output() readonly beforeFilter = new EventEmitter<GridEvents['beforeFilter']>();\n @Output() readonly beforePageChange = new EventEmitter<GridEvents['beforePageChange']>();\n @Output() readonly beforeEdit = new EventEmitter<GridEvents['beforeEdit']>();\n @Output() readonly beforeCellChange = new EventEmitter<GridEvents['beforeCellChange']>();\n\n /** The grid API (null before the view is ready and after destroy). */\n api: GridApi | null = null;\n /** groupBy and pivot can also be changed by the user in the grid: re-apply them only when the input's content changes. */\n private content: Record<'groupBy' | 'pivot', (next: unknown) => boolean> | null = null;\n\n private readonly host: HTMLElement = inject(ElementRef).nativeElement;\n private readonly zone = inject(NgZone);\n\n get hostHeight(): string {\n return typeof this.height === 'number' ? `${this.height}px` : this.height;\n }\n\n ngAfterViewInit(): void {\n const api = this.zone.runOutsideAngular(() => createGrid(this.host, {\n ...this.options,\n columns: this.columns, data: this.data, rowSelection: this.rowSelection, getRowId: this.getRowId,\n rowHeight: this.rowHeight, headerHeight: this.headerHeight, theme: this.theme, locale: this.locale,\n summary: this.summary, groupBy: this.groupBy, pivot: this.pivot, fontSize: this.fontSize, fontFamily: this.fontFamily,\n }));\n for (const [type, name] of Object.entries(OUTPUTS)) {\n const out = (this as unknown as Record<string, EventEmitter<unknown>>)[name];\n api.on(type as keyof GridEvents, payload => {\n if (out.observed) this.zone.run(() => out.emit(payload));\n });\n }\n this.content = { groupBy: changeTracker(this.groupBy), pivot: changeTracker(this.pivot) };\n this.api = api;\n this.ready.emit(api);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const api = this.api;\n const c = this.content;\n if (!api || !c) return;\n this.zone.runOutsideAngular(() => {\n if (changes['columns']) api.setColumns(this.columns);\n if (changes['data']) api.setData(this.data ?? []);\n if (changes['theme'] && this.theme) api.setTheme(this.theme);\n if (changes['locale'] && this.locale !== undefined) api.setLocale(this.locale);\n if (changes['summary']) api.setSummary(this.summary ?? null);\n if (changes['groupBy'] && c.groupBy(this.groupBy)) api.setGroupBy(this.groupBy ?? []);\n if (changes['pivot'] && c.pivot(this.pivot)) api.setPivot(this.pivot ?? null);\n if (changes['fontSize'] || changes['fontFamily']) api.setFont({ size: this.fontSize, family: this.fontFamily ?? null });\n });\n }\n\n ngOnDestroy(): void {\n this.api?.destroy();\n this.api = null;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"freegridjs-angular.mjs","names":[],"sources":["../../src/free-grid.component.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, NgZone, Output, inject,\n type AfterViewInit, type OnChanges, type OnDestroy, type SimpleChanges,\n} from '@angular/core';\nimport { changeTracker, createGrid, type ColumnDef, type GridApi, type GridEvents, type GridOptions, type LocalePack, type Row } from '@freegridjs/core';\n\n/** Grid event → output name. `paste` and `scroll` are prefixed so they don't clash with the DOM events of the host. */\nconst OUTPUTS = {\n cellClick: 'cellClick',\n cellDoubleClick: 'cellDoubleClick',\n selectionChange: 'selectionChange',\n sortChange: 'sortChange',\n filterChange: 'filterChange',\n columnResize: 'columnResize',\n columnMove: 'columnMove',\n focusChange: 'focusChange',\n columnVisible: 'columnVisible',\n rangeChange: 'rangeChange',\n cellValueChanged: 'cellValueChanged',\n paste: 'gridPaste',\n editStart: 'editStart',\n editStop: 'editStop',\n validationFailed: 'validationFailed',\n rowsAdded: 'rowsAdded',\n rowsRemoved: 'rowsRemoved',\n groupChange: 'groupChange',\n groupToggle: 'groupToggle',\n detailToggle: 'detailToggle',\n rowDragEnd: 'rowDragEnd',\n pageChange: 'pageChange',\n rowsLoaded: 'rowsLoaded',\n rowsLoadFailed: 'rowsLoadFailed',\n pivotChange: 'pivotChange',\n rowDrop: 'rowDrop',\n transactionApplied: 'transactionApplied',\n conditionalFormatsChange: 'conditionalFormatsChange',\n assistantAnswer: 'assistantAnswer',\n rowEditStart: 'rowEditStart',\n columnGroupOpened: 'columnGroupOpened',\n advancedFilterChange: 'advancedFilterChange',\n rowEditStop: 'rowEditStop',\n childrenLoaded: 'childrenLoaded',\n childrenLoadFailed: 'childrenLoadFailed',\n scroll: 'gridScroll',\n beforeSort: 'beforeSort',\n beforeFilter: 'beforeFilter',\n beforePageChange: 'beforePageChange',\n beforeEdit: 'beforeEdit',\n beforeCellChange: 'beforeCellChange',\n} as const satisfies Record<keyof GridEvents, string>;\n\n/**\n * `<free-grid [columns]=\"columns\" [data]=\"rows\" (cellClick)=\"…\" />`\n *\n * Inputs listed here update the grid when they change; anything else goes in `[options]` and applies at creation.\n * The grid runs outside Angular's zone; outputs re-enter it only when someone listens.\n */\n@Component({\n selector: 'free-grid',\n standalone: true,\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[style.display]': '\"block\"', '[style.height]': 'hostHeight' },\n})\nexport class FreeGridComponent implements AfterViewInit, OnChanges, OnDestroy {\n @Input() columns: ColumnDef[] = [];\n @Input() data: Row[] = [];\n /** Any other grid option (rowDrag, treeData, pagination, …), applied at creation. */\n @Input() options?: Partial<GridOptions>;\n @Input() rowSelection?: GridOptions['rowSelection'];\n @Input() getRowId?: GridOptions['getRowId'];\n @Input() rowHeight?: number;\n @Input() headerHeight?: number;\n @Input() theme?: string;\n @Input() locale?: string | Partial<LocalePack>;\n @Input() summary?: GridOptions['summary'];\n @Input() groupBy?: string[];\n @Input() pivot?: GridOptions['pivot'];\n @Input() fontSize?: number;\n @Input() fontFamily?: string;\n /** License key for paid features (or call `setLicenseKey` once for every grid); applied at creation. */\n @Input() licenseKey?: string;\n /** Host height; number = px. */\n @Input() height: number | string = 400;\n\n /** The grid API once the view is ready. */\n @Output() readonly ready = new EventEmitter<GridApi>();\n @Output() readonly cellClick = new EventEmitter<GridEvents['cellClick']>();\n @Output() readonly cellDoubleClick = new EventEmitter<GridEvents['cellDoubleClick']>();\n @Output() readonly selectionChange = new EventEmitter<GridEvents['selectionChange']>();\n @Output() readonly sortChange = new EventEmitter<GridEvents['sortChange']>();\n @Output() readonly filterChange = new EventEmitter<GridEvents['filterChange']>();\n @Output() readonly columnResize = new EventEmitter<GridEvents['columnResize']>();\n @Output() readonly columnMove = new EventEmitter<GridEvents['columnMove']>();\n @Output() readonly focusChange = new EventEmitter<GridEvents['focusChange']>();\n @Output() readonly columnVisible = new EventEmitter<GridEvents['columnVisible']>();\n @Output() readonly rangeChange = new EventEmitter<GridEvents['rangeChange']>();\n @Output() readonly cellValueChanged = new EventEmitter<GridEvents['cellValueChanged']>();\n @Output() readonly gridPaste = new EventEmitter<GridEvents['paste']>();\n @Output() readonly editStart = new EventEmitter<GridEvents['editStart']>();\n @Output() readonly editStop = new EventEmitter<GridEvents['editStop']>();\n @Output() readonly validationFailed = new EventEmitter<GridEvents['validationFailed']>();\n @Output() readonly rowsAdded = new EventEmitter<GridEvents['rowsAdded']>();\n @Output() readonly rowsRemoved = new EventEmitter<GridEvents['rowsRemoved']>();\n @Output() readonly groupChange = new EventEmitter<GridEvents['groupChange']>();\n @Output() readonly groupToggle = new EventEmitter<GridEvents['groupToggle']>();\n @Output() readonly detailToggle = new EventEmitter<GridEvents['detailToggle']>();\n @Output() readonly rowDragEnd = new EventEmitter<GridEvents['rowDragEnd']>();\n @Output() readonly pageChange = new EventEmitter<GridEvents['pageChange']>();\n @Output() readonly rowsLoaded = new EventEmitter<GridEvents['rowsLoaded']>();\n @Output() readonly rowsLoadFailed = new EventEmitter<GridEvents['rowsLoadFailed']>();\n @Output() readonly pivotChange = new EventEmitter<GridEvents['pivotChange']>();\n @Output() readonly rowDrop = new EventEmitter<GridEvents['rowDrop']>();\n @Output() readonly transactionApplied = new EventEmitter<GridEvents['transactionApplied']>();\n @Output() readonly conditionalFormatsChange = new EventEmitter<GridEvents['conditionalFormatsChange']>();\n @Output() readonly assistantAnswer = new EventEmitter<GridEvents['assistantAnswer']>();\n @Output() readonly rowEditStart = new EventEmitter<GridEvents['rowEditStart']>();\n @Output() readonly columnGroupOpened = new EventEmitter<GridEvents['columnGroupOpened']>();\n @Output() readonly advancedFilterChange = new EventEmitter<GridEvents['advancedFilterChange']>();\n @Output() readonly rowEditStop = new EventEmitter<GridEvents['rowEditStop']>();\n @Output() readonly childrenLoaded = new EventEmitter<GridEvents['childrenLoaded']>();\n @Output() readonly childrenLoadFailed = new EventEmitter<GridEvents['childrenLoadFailed']>();\n @Output() readonly gridScroll = new EventEmitter<GridEvents['scroll']>();\n @Output() readonly beforeSort = new EventEmitter<GridEvents['beforeSort']>();\n @Output() readonly beforeFilter = new EventEmitter<GridEvents['beforeFilter']>();\n @Output() readonly beforePageChange = new EventEmitter<GridEvents['beforePageChange']>();\n @Output() readonly beforeEdit = new EventEmitter<GridEvents['beforeEdit']>();\n @Output() readonly beforeCellChange = new EventEmitter<GridEvents['beforeCellChange']>();\n\n /** The grid API (null before the view is ready and after destroy). */\n api: GridApi | null = null;\n /** groupBy and pivot can also be changed by the user in the grid: re-apply them only when the input's content changes. */\n private content: Record<'groupBy' | 'pivot', (next: unknown) => boolean> | null = null;\n\n private readonly host: HTMLElement = inject(ElementRef).nativeElement;\n private readonly zone = inject(NgZone);\n\n get hostHeight(): string {\n return typeof this.height === 'number' ? `${this.height}px` : this.height;\n }\n\n ngAfterViewInit(): void {\n // inputs left unset do not override the same option given in [options]\n const explicit: Partial<GridOptions> = {\n columns: this.columns, data: this.data, rowSelection: this.rowSelection, getRowId: this.getRowId,\n rowHeight: this.rowHeight, headerHeight: this.headerHeight, theme: this.theme, locale: this.locale,\n summary: this.summary, groupBy: this.groupBy, pivot: this.pivot, fontSize: this.fontSize, fontFamily: this.fontFamily,\n licenseKey: this.licenseKey,\n };\n const api = this.zone.runOutsideAngular(() => createGrid(this.host, {\n ...this.options,\n ...Object.fromEntries(Object.entries(explicit).filter(([, v]) => v !== undefined)),\n } as GridOptions));\n for (const [type, name] of Object.entries(OUTPUTS)) {\n const out = (this as unknown as Record<string, EventEmitter<unknown>>)[name];\n api.on(type as keyof GridEvents, payload => {\n if (out.observed) this.zone.run(() => out.emit(payload));\n });\n }\n this.content = { groupBy: changeTracker(this.groupBy), pivot: changeTracker(this.pivot) };\n this.api = api;\n this.ready.emit(api);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const api = this.api;\n const c = this.content;\n if (!api || !c) return;\n this.zone.runOutsideAngular(() => {\n if (changes['columns']) api.setColumns(this.columns);\n if (changes['data']) api.setData(this.data ?? []);\n if (changes['theme'] && this.theme) api.setTheme(this.theme);\n if (changes['locale'] && this.locale !== undefined) api.setLocale(this.locale);\n if (changes['summary']) api.setSummary(this.summary ?? null);\n if (changes['groupBy'] && c.groupBy(this.groupBy)) api.setGroupBy(this.groupBy ?? []);\n if (changes['pivot'] && c.pivot(this.pivot)) api.setPivot(this.pivot ?? null);\n if (changes['fontSize'] || changes['fontFamily']) api.setFont({ size: this.fontSize, family: this.fontFamily ?? null });\n });\n }\n\n ngOnDestroy(): void {\n this.api?.destroy();\n this.api = null;\n }\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@freegridjs/angular",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Angular component for FreeGrid, the fast data grid
|
|
3
|
+
"version": "1.9.1",
|
|
4
|
+
"description": "Angular component for FreeGrid, the fast data grid. Free core; paid features free with a personal key.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"peerDependencies": {
|
|
7
7
|
"@angular/core": ">=17.0.0",
|
|
8
|
-
"@freegridjs/core": "^1.
|
|
8
|
+
"@freegridjs/core": "^1.9.1"
|
|
9
9
|
},
|
|
10
10
|
"sideEffects": false,
|
|
11
11
|
"keywords": [
|
|
@@ -35,4 +35,4 @@
|
|
|
35
35
|
"dependencies": {
|
|
36
36
|
"tslib": "^2.3.0"
|
|
37
37
|
}
|
|
38
|
-
}
|
|
38
|
+
}
|
|
@@ -23,6 +23,8 @@ export declare class FreeGridComponent implements AfterViewInit, OnChanges, OnDe
|
|
|
23
23
|
pivot?: GridOptions['pivot'];
|
|
24
24
|
fontSize?: number;
|
|
25
25
|
fontFamily?: string;
|
|
26
|
+
/** License key for paid features (or call `setLicenseKey` once for every grid); applied at creation. */
|
|
27
|
+
licenseKey?: string;
|
|
26
28
|
/** Host height; number = px. */
|
|
27
29
|
height: number | string;
|
|
28
30
|
/** The grid API once the view is ready. */
|
|
@@ -265,6 +267,10 @@ export declare class FreeGridComponent implements AfterViewInit, OnChanges, OnDe
|
|
|
265
267
|
"alias": "fontFamily";
|
|
266
268
|
"required": false;
|
|
267
269
|
};
|
|
270
|
+
"licenseKey": {
|
|
271
|
+
"alias": "licenseKey";
|
|
272
|
+
"required": false;
|
|
273
|
+
};
|
|
268
274
|
"height": {
|
|
269
275
|
"alias": "height";
|
|
270
276
|
"required": false;
|