@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 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 DataGrid ${operation} 요청:`, {
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 DataGrid 데이터 로딩 오류:", error);
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 DataGrid 데이터 로딩 시작...");
85
+ console.log("U-DataGrid 데이터 로딩 시작...");
85
86
  },
86
87
  onLoaded: (data) => {
87
- console.log("U DataGrid 데이터 로딩 완료:", data);
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 { BaseElement } from '@iyulab/components/dist/components/BaseElement.js';
2
- export interface DataViewColumnDefinition {
3
- name: string;
4
- display?: string;
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 BaseElement {
13
+ export declare class UDataView extends UElement {
10
14
  static styles: import('lit').CSSResultGroup[];
11
- static dependencies: Record<string, typeof BaseElement>;
12
- /** 표시할 데이터 배열을 지정합니다. */
13
- data: any[];
14
- /** 데이터 뷰의 레이아웃을 지정합니다. ('list', 'grid' 또는 'table') */
15
- layout: "list" | "grid" | "table";
16
- /** 아이템을 렌더링하는 함수를 지정합니다. */
17
- renderItem?: (item: any) => HTMLElement;
18
- /** 아이템의 이미지를 렌더링하는 함수를 지정합니다. */
19
- renderImage?: (item: any) => HTMLElement;
20
- /** 아이템의 필드를 렌더링하는 함수를 지정합니다. */
21
- renderFields?: (item: any) => HTMLElement;
22
- /** 페이지당 표시할 아이템 수를 지정합니다. */
23
- itemsPerPage?: number;
24
- /** 아이템의 이미지 필드 이름을 지정합니다. */
25
- imageField: string;
26
- /** 아이템 간 마진을 지정합니다. */
27
- itemMargin: string;
28
- /** 그리드 레이아웃에서 아이템의 최소 너비를 지정합니다. */
29
- minItemWidth: string;
30
- /** 표시할 열 정보를 지정합니다. 지정하지 않으면 이미지를 제외한 모든 필드가 표시됩니다. */
31
- columns?: DataViewColumnDefinition[];
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 getDefaultColumns;
45
- private getDisplayName;
46
- private toPascalCase;
38
+ private renderGridItem;
39
+ private renderListItem;
40
+ private renderDefaultCard;
41
+ private getCellContent;
42
+ private getColumns;
43
+ private formatLabel;
47
44
  private formatValue;
48
- private defaultRenderFields;
49
- private getRandomColor;
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
  }