@iyulab/data-components 0.1.0 → 0.1.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/CHANGELOG.md +3 -3
- package/README.md +89 -89
- package/dist/components/data-grid/UDataGrid.d.ts +1 -1
- package/dist/components/data-grid/UDataGrid.js +6 -4
- package/dist/components/data-grid/UDataGrid.types.d.ts +3 -0
- package/dist/components/data-view/UDataView.component.d.ts +39 -50
- package/dist/components/data-view/UDataView.component.js +162 -237
- package/dist/components/data-view/UDataView.d.ts +1 -1
- package/dist/components/data-view/UDataView.styles.js +126 -229
- package/dist/components/simple-sheet/USimpleSheet.component.d.ts +138 -0
- package/dist/components/simple-sheet/USimpleSheet.component.js +855 -0
- package/dist/components/simple-sheet/USimpleSheet.d.ts +8 -0
- package/dist/components/simple-sheet/USimpleSheet.styles.d.ts +1 -0
- package/dist/components/simple-sheet/USimpleSheet.styles.js +245 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.js +1 -3
- package/package.json +75 -75
- package/dist/components/data-view/UDataView.js +0 -5
- package/dist/components/index.d.ts +0 -3
- package/dist/styles/devextreme-overrides.css.js +0 -3
- package/dist/utils/devExtremeCssInjection.js +0 -164
- package/dist/utils/index.d.ts +0 -2
- package/dist/utils/shadowDomProtection.js +0 -82
- /package/dist/{utils → utilities}/devExtremeCssInjection.d.ts +0 -0
- /package/dist/{utils → utilities}/shadowDomProtection.d.ts +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
## [Unreleased]
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [Unreleased]
|
|
4
4
|
- Initial library version release
|
package/README.md
CHANGED
|
@@ -1,89 +1,89 @@
|
|
|
1
|
-
# @iyulab/data-components
|
|
2
|
-
|
|
3
|
-
데이터 표시 및 입력을 위한 웹 컴포넌트 라이브러리.
|
|
4
|
-
|
|
5
|
-
- **USimpleSheet** — 엑셀 호환 스프레드시트 입력 컴포넌트 (Lit)
|
|
6
|
-
- **UDataView** — Grid / List / Table 뷰 전환 컴포넌트 (Lit)
|
|
7
|
-
- **UDataGrid** — OData 기반 서버 사이드 데이터 그리드 (React + DevExtreme)
|
|
8
|
-
|
|
9
|
-
## Installation
|
|
10
|
-
|
|
11
|
-
```bash
|
|
12
|
-
npm install @iyulab/data-components
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## Quick Start
|
|
16
|
-
|
|
17
|
-
### USimpleSheet
|
|
18
|
-
|
|
19
|
-
```html
|
|
20
|
-
<u-simple-sheet
|
|
21
|
-
style="height: 300px;"
|
|
22
|
-
.rows=${20}
|
|
23
|
-
.cols=${8}
|
|
24
|
-
@change=${(e) => console.log(e.detail.data)}
|
|
25
|
-
></u-simple-sheet>
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
컬럼 정의 + 초기 데이터:
|
|
29
|
-
|
|
30
|
-
```html
|
|
31
|
-
<u-simple-sheet
|
|
32
|
-
style="height: 400px;"
|
|
33
|
-
.columns=${[
|
|
34
|
-
{ key: 'name', label: '이름', width: 150 },
|
|
35
|
-
{ key: 'email', label: '이메일', width: 220 },
|
|
36
|
-
]}
|
|
37
|
-
.data=${[
|
|
38
|
-
['홍길동', 'hong@example.com'],
|
|
39
|
-
['김철수', 'kim@example.com'],
|
|
40
|
-
]}
|
|
41
|
-
@change=${(e) => console.log(e.target.getDataAsObjects())}
|
|
42
|
-
></u-simple-sheet>
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
### UDataView
|
|
46
|
-
|
|
47
|
-
```html
|
|
48
|
-
<u-data-view
|
|
49
|
-
.items=${myData}
|
|
50
|
-
mode="grid"
|
|
51
|
-
@select=${(e) => console.log(e.detail)}
|
|
52
|
-
></u-data-view>
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
### UDataGrid (React)
|
|
56
|
-
|
|
57
|
-
```tsx
|
|
58
|
-
import { UDataGrid } from '@iyulab/data-components';
|
|
59
|
-
|
|
60
|
-
<UDataGrid
|
|
61
|
-
dataSourceUrl="https://api.example.com/odata/products"
|
|
62
|
-
keyField="id"
|
|
63
|
-
columns={[
|
|
64
|
-
{ dataField: 'name', caption: '상품명' },
|
|
65
|
-
{ dataField: 'price', caption: '가격', dataType: 'number' },
|
|
66
|
-
]}
|
|
67
|
-
/>
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
## Documentation
|
|
71
|
-
|
|
72
|
-
- [USimpleSheet](./docs/USimpleSheet.md)
|
|
73
|
-
- [UDataView](./docs/UDataView.md)
|
|
74
|
-
- [UDataGrid](./docs/UDataGrid.md)
|
|
75
|
-
|
|
76
|
-
## Theming
|
|
77
|
-
|
|
78
|
-
`@iyulab/components`의 테마 시스템을 사용합니다. 라이트/다크 모드 자동 지원.
|
|
79
|
-
|
|
80
|
-
```typescript
|
|
81
|
-
import { Theme } from '@iyulab/components';
|
|
82
|
-
|
|
83
|
-
Theme.init({ default: 'system' });
|
|
84
|
-
Theme.set('dark'); // 'light' | 'dark' | 'system'
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
## License
|
|
88
|
-
|
|
89
|
-
MIT
|
|
1
|
+
# @iyulab/data-components
|
|
2
|
+
|
|
3
|
+
데이터 표시 및 입력을 위한 웹 컴포넌트 라이브러리.
|
|
4
|
+
|
|
5
|
+
- **USimpleSheet** — 엑셀 호환 스프레드시트 입력 컴포넌트 (Lit)
|
|
6
|
+
- **UDataView** — Grid / List / Table 뷰 전환 컴포넌트 (Lit)
|
|
7
|
+
- **UDataGrid** — OData 기반 서버 사이드 데이터 그리드 (React + DevExtreme)
|
|
8
|
+
|
|
9
|
+
## Installation
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install @iyulab/data-components
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Quick Start
|
|
16
|
+
|
|
17
|
+
### USimpleSheet
|
|
18
|
+
|
|
19
|
+
```html
|
|
20
|
+
<u-simple-sheet
|
|
21
|
+
style="height: 300px;"
|
|
22
|
+
.rows=${20}
|
|
23
|
+
.cols=${8}
|
|
24
|
+
@change=${(e) => console.log(e.detail.data)}
|
|
25
|
+
></u-simple-sheet>
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
컬럼 정의 + 초기 데이터:
|
|
29
|
+
|
|
30
|
+
```html
|
|
31
|
+
<u-simple-sheet
|
|
32
|
+
style="height: 400px;"
|
|
33
|
+
.columns=${[
|
|
34
|
+
{ key: 'name', label: '이름', width: 150 },
|
|
35
|
+
{ key: 'email', label: '이메일', width: 220 },
|
|
36
|
+
]}
|
|
37
|
+
.data=${[
|
|
38
|
+
['홍길동', 'hong@example.com'],
|
|
39
|
+
['김철수', 'kim@example.com'],
|
|
40
|
+
]}
|
|
41
|
+
@change=${(e) => console.log(e.target.getDataAsObjects())}
|
|
42
|
+
></u-simple-sheet>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### UDataView
|
|
46
|
+
|
|
47
|
+
```html
|
|
48
|
+
<u-data-view
|
|
49
|
+
.items=${myData}
|
|
50
|
+
mode="grid"
|
|
51
|
+
@select=${(e) => console.log(e.detail)}
|
|
52
|
+
></u-data-view>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### UDataGrid (React)
|
|
56
|
+
|
|
57
|
+
```tsx
|
|
58
|
+
import { UDataGrid } from '@iyulab/data-components';
|
|
59
|
+
|
|
60
|
+
<UDataGrid
|
|
61
|
+
dataSourceUrl="https://api.example.com/odata/products"
|
|
62
|
+
keyField="id"
|
|
63
|
+
columns={[
|
|
64
|
+
{ dataField: 'name', caption: '상품명' },
|
|
65
|
+
{ dataField: 'price', caption: '가격', dataType: 'number' },
|
|
66
|
+
]}
|
|
67
|
+
/>
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Documentation
|
|
71
|
+
|
|
72
|
+
- [USimpleSheet](./docs/USimpleSheet.md)
|
|
73
|
+
- [UDataView](./docs/UDataView.md)
|
|
74
|
+
- [UDataGrid](./docs/UDataGrid.md)
|
|
75
|
+
|
|
76
|
+
## Theming
|
|
77
|
+
|
|
78
|
+
`@iyulab/components`의 테마 시스템을 사용합니다. 라이트/다크 모드 자동 지원.
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
import { Theme } from '@iyulab/components';
|
|
82
|
+
|
|
83
|
+
Theme.init({ default: 'system' });
|
|
84
|
+
Theme.set('dark'); // 'light' | 'dark' | 'system'
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## License
|
|
88
|
+
|
|
89
|
+
MIT
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { UDataGridProps } from './UDataGrid.types.js';
|
|
2
|
-
export declare function UDataGrid({ dataSourceUrl, keyField, selectFields, columns, pageSize, showBorders, allowColumnReordering, allowColumnResizing, showGroupPanel, showSearchPanel, showFilterRow, showHeaderFilter, allowExport, exportFileName, isDevelopment, onDataLoaded, onDataLoadError, onExporting, beforeSend }: UDataGridProps): import("react/jsx-runtime").JSX.Element;
|
|
2
|
+
export declare function UDataGrid({ dataSourceUrl, keyField, selectFields, columns, pageSize, showBorders, allowColumnReordering, allowColumnResizing, showGroupPanel, showSearchPanel, showFilterRow, showHeaderFilter, allowExport, exportFileName, isDevelopment, onDataLoaded, onDataLoadError, onExporting, onRowClick, beforeSend }: UDataGridProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -22,6 +22,7 @@ function UDataGrid({
|
|
|
22
22
|
onDataLoaded,
|
|
23
23
|
onDataLoadError,
|
|
24
24
|
onExporting,
|
|
25
|
+
onRowClick,
|
|
25
26
|
beforeSend
|
|
26
27
|
}) {
|
|
27
28
|
const defaultBeforeSend = (operation, ajaxOptions) => {
|
|
@@ -39,7 +40,7 @@ function UDataGrid({
|
|
|
39
40
|
ajaxOptions.crossDomain = true;
|
|
40
41
|
ajaxOptions.headers["Access-Control-Allow-Origin"] = "*";
|
|
41
42
|
}
|
|
42
|
-
console.log(`U
|
|
43
|
+
console.log(`U-DataGrid ${operation} 요청:`, {
|
|
43
44
|
url: ajaxOptions.url,
|
|
44
45
|
headers: ajaxOptions.headers,
|
|
45
46
|
method: ajaxOptions.type || "GET"
|
|
@@ -49,7 +50,7 @@ function UDataGrid({
|
|
|
49
50
|
}
|
|
50
51
|
};
|
|
51
52
|
const defaultOnLoadError = (error) => {
|
|
52
|
-
console.error("U
|
|
53
|
+
console.error("U-DataGrid 데이터 로딩 오류:", error);
|
|
53
54
|
let errorMessage = "데이터를 불러오는 중 오류가 발생했습니다.";
|
|
54
55
|
try {
|
|
55
56
|
if (error && typeof error === "object") {
|
|
@@ -81,10 +82,10 @@ function UDataGrid({
|
|
|
81
82
|
key: keyField,
|
|
82
83
|
beforeSend: beforeSend || defaultBeforeSend,
|
|
83
84
|
onLoading: () => {
|
|
84
|
-
console.log("U
|
|
85
|
+
console.log("U-DataGrid 데이터 로딩 시작...");
|
|
85
86
|
},
|
|
86
87
|
onLoaded: (data) => {
|
|
87
|
-
console.log("U
|
|
88
|
+
console.log("U-DataGrid 데이터 로딩 완료:", data);
|
|
88
89
|
onDataLoaded?.(data);
|
|
89
90
|
},
|
|
90
91
|
onLoadError: onDataLoadError || defaultOnLoadError
|
|
@@ -125,6 +126,7 @@ function UDataGrid({
|
|
|
125
126
|
columnResizingMode: "widget",
|
|
126
127
|
remoteOperations: true,
|
|
127
128
|
onExporting: handleExporting,
|
|
129
|
+
onRowClick,
|
|
128
130
|
children: [
|
|
129
131
|
/* @__PURE__ */ jsx(LoadPanel, { enabled: true }),
|
|
130
132
|
/* @__PURE__ */ jsx(Selection, { mode: "multiple" }),
|
|
@@ -35,5 +35,8 @@ export interface UDataGridProps {
|
|
|
35
35
|
onDataLoaded?: (data: any) => void;
|
|
36
36
|
onDataLoadError?: (error: any) => void;
|
|
37
37
|
onExporting?: (e: any) => void;
|
|
38
|
+
onRowClick?: (e: {
|
|
39
|
+
data: Record<string, unknown>;
|
|
40
|
+
}) => void;
|
|
38
41
|
beforeSend?: (operation: string, ajaxOptions: any) => void;
|
|
39
42
|
}
|
|
@@ -1,58 +1,47 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { TemplateResult } from 'lit';
|
|
2
|
+
import { UElement } from '@iyulab/components/dist/components/UElement.js';
|
|
3
|
+
export type ViewMode = 'grid' | 'list' | 'table';
|
|
4
|
+
export interface Column {
|
|
5
|
+
key: string;
|
|
6
|
+
label?: string;
|
|
7
|
+
width?: string;
|
|
5
8
|
}
|
|
6
9
|
/**
|
|
7
10
|
* Data View Component
|
|
11
|
+
* 데이터를 3가지 레이아웃(grid, list, table)으로 표시하는 컴포넌트
|
|
8
12
|
*/
|
|
9
|
-
export declare class UDataView extends
|
|
13
|
+
export declare class UDataView extends UElement {
|
|
10
14
|
static styles: import('lit').CSSResultGroup[];
|
|
11
|
-
static dependencies: Record<string, typeof
|
|
12
|
-
/** 표시할 데이터
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
onItemSelect?: (item: any) => void;
|
|
34
|
-
/** 아이템 더블 클릭 시 호출되는 콜백 함수를 지정합니다. */
|
|
35
|
-
onItemDoubleClick?: (item: any) => void;
|
|
36
|
-
private selectedItem;
|
|
37
|
-
private currentLayout;
|
|
38
|
-
private loading;
|
|
39
|
-
private imageLoadErrors;
|
|
40
|
-
private randomColors;
|
|
41
|
-
connectedCallback(): void;
|
|
42
|
-
private handleImageError;
|
|
15
|
+
static dependencies: Record<string, typeof UElement>;
|
|
16
|
+
/** 표시할 데이터 배열 */
|
|
17
|
+
items: any[];
|
|
18
|
+
/** 현재 뷰 모드 */
|
|
19
|
+
mode: ViewMode;
|
|
20
|
+
/** 표시할 컬럼 설정 (미지정시 자동 감지) */
|
|
21
|
+
columns?: Column[];
|
|
22
|
+
/** 그리드 모드 최소 폭 */
|
|
23
|
+
gridMinWidth: string;
|
|
24
|
+
/** 아이템 간격 */
|
|
25
|
+
gap: string;
|
|
26
|
+
/** 커스텀 렌더 함수 (grid/list 카드용) */
|
|
27
|
+
renderCard?: (item: any, index: number) => TemplateResult;
|
|
28
|
+
/** 커스텀 셀 렌더 함수 (table용) */
|
|
29
|
+
renderCell?: (item: any, column: Column, index: number) => TemplateResult | string;
|
|
30
|
+
private selectedIndex;
|
|
31
|
+
render(): TemplateResult<1>;
|
|
32
|
+
private renderToolbar;
|
|
33
|
+
private renderViewButton;
|
|
34
|
+
private renderContent;
|
|
35
|
+
private renderGrid;
|
|
36
|
+
private renderList;
|
|
43
37
|
private renderTable;
|
|
44
|
-
private
|
|
45
|
-
private
|
|
46
|
-
private
|
|
38
|
+
private renderGridItem;
|
|
39
|
+
private renderListItem;
|
|
40
|
+
private renderDefaultCard;
|
|
41
|
+
private getCellContent;
|
|
42
|
+
private getColumns;
|
|
43
|
+
private formatLabel;
|
|
47
44
|
private formatValue;
|
|
48
|
-
private
|
|
49
|
-
private
|
|
50
|
-
private defaultRenderImage;
|
|
51
|
-
private getContrastColor;
|
|
52
|
-
private hexToRgb;
|
|
53
|
-
protected render(): import('lit').TemplateResult<1>;
|
|
54
|
-
private renderItems;
|
|
55
|
-
protected setLayout(newLayout: "list" | "grid" | "table"): void;
|
|
56
|
-
private handleItemClick;
|
|
57
|
-
private handleItemDoubleClick;
|
|
45
|
+
private switchMode;
|
|
46
|
+
private selectItem;
|
|
58
47
|
}
|