@ticatec/uniface-element 0.2.0 → 0.2.2

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.
Files changed (209) hide show
  1. package/README.md +320 -1
  2. package/README_CN.md +392 -0
  3. package/dist/accordion/Accordion.svelte +1 -1
  4. package/dist/action-bar/ActionBar.svelte +7 -1
  5. package/dist/attachment-files/FileRender.svelte +1 -1
  6. package/dist/attachment-files/FileUploadBar.svelte +7 -6
  7. package/dist/attachment-files/FileUploadPanel.svelte +2 -2
  8. package/dist/base-calendar/DateContext.js +5 -4
  9. package/dist/base-calendar/YearPickupPanel.svelte +4 -4
  10. package/dist/card/Card.svelte +1 -1
  11. package/dist/card/Card.svelte.d.ts +1 -1
  12. package/dist/cascade-options-select/CascadeOptionSelect.svelte +2 -3
  13. package/dist/cascade-options-select/CascadeOptionSelect.svelte.d.ts +46 -1
  14. package/dist/cascade-options-select/CascadePanel.svelte +1 -1
  15. package/dist/checkbox/CheckBox.svelte +1 -1
  16. package/dist/color-picker/ColorPicker.svelte +9 -9
  17. package/dist/color-picker/ColorPicker.svelte.d.ts +0 -2
  18. package/dist/color-picker/ColorPickerPanel.svelte +11 -15
  19. package/dist/color-picker/ColorPickerPanel.svelte.d.ts +1 -1
  20. package/dist/common/CommonPicker.svelte +2 -2
  21. package/dist/common/CommonPicker.svelte.d.ts +1 -1
  22. package/dist/common/MouseClickHandler.d.ts +1 -1
  23. package/dist/common/Popover.svelte +28 -6
  24. package/dist/common/Popover.svelte.d.ts +9 -3
  25. package/dist/common/uniface-utils.js +6 -4
  26. package/dist/common-editor/CommonEditor.svelte +1 -1
  27. package/dist/common-editor/CommonEditor.svelte.d.ts +1 -1
  28. package/dist/common-editor/NumberInput.svelte +1 -1
  29. package/dist/common-editor/NumberInput.svelte.d.ts +1 -1
  30. package/dist/concise-data-table/ConciseListTable.svelte +7 -2
  31. package/dist/concise-data-table/ConciseListTable.svelte.d.ts +1 -0
  32. package/dist/concise-data-table/DataRow.svelte +1 -1
  33. package/dist/concise-data-table/TableOptions.d.ts +1 -1
  34. package/dist/data-table/DataTable.svelte +1 -1
  35. package/dist/data-table/parts/ActionsPanel.svelte +4 -3
  36. package/dist/data-table/parts/ActionsRow.svelte +3 -3
  37. package/dist/data-table/parts/ContentPanel.svelte +3 -2
  38. package/dist/data-table/parts/FixedColumnsPanel.svelte +0 -1
  39. package/dist/data-table/parts/FixedColumnsPanel.svelte.d.ts +1 -2
  40. package/dist/data-table/parts/FixedHeaderPanel.svelte +2 -2
  41. package/dist/data-table/parts/FixedRow.svelte +2 -1
  42. package/dist/data-table/parts/FixedRow.svelte.d.ts +1 -1
  43. package/dist/data-table/parts/HrefCell.svelte +23 -2
  44. package/dist/data-table/parts/PopupMenu.svelte +25 -2
  45. package/dist/data-table/parts/PopupMenu.svelte.d.ts +8 -1
  46. package/dist/date-picker/DatePicker.svelte +0 -1
  47. package/dist/date-picker/DateTimePicker.svelte +3 -3
  48. package/dist/date-picker/ScrollBar.svelte +4 -7
  49. package/dist/date-range/DateRangeEditor.svelte +1 -1
  50. package/dist/dialog/CommonDialog.svelte +8 -5
  51. package/dist/dialog/CommonDialog.svelte.d.ts +2 -1
  52. package/dist/dialog/Dialog.svelte +37 -12
  53. package/dist/dialog/Dialog.svelte.d.ts +4 -3
  54. package/dist/dialog/DialogBoard.svelte +11 -8
  55. package/dist/dialog/DialogWrapper.svelte +10 -0
  56. package/dist/{common-editor/DateInput.svelte.d.ts → dialog/DialogWrapper.svelte.d.ts} +6 -13
  57. package/dist/dialog/Dialogs.js +1 -1
  58. package/dist/dialog/ModalResult.d.ts +5 -0
  59. package/dist/dialog/ModalResult.js +5 -0
  60. package/dist/drawer/Drawer.svelte +1 -1
  61. package/dist/form-field/FormField.svelte +2 -1
  62. package/dist/form-field/FormField.svelte.d.ts +1 -0
  63. package/dist/form-panel/flex-row-form/FormContainer.svelte +1 -1
  64. package/dist/form-panel/grid-form/EmptyCell.svelte +8 -7
  65. package/dist/form-panel/grid-form/EmptyCell.svelte.d.ts +2 -2
  66. package/dist/form-panel/grid-form/GridField.svelte +1 -1
  67. package/dist/i18nRes/i18nRes.d.ts +2 -0
  68. package/dist/i18nRes/i18nRes.js +44 -0
  69. package/dist/i18nRes/index.d.ts +2 -0
  70. package/dist/i18nRes/index.js +2 -0
  71. package/dist/image-files/ImageFilesField.svelte +1 -1
  72. package/dist/indicator/IndicatorBoard.svelte +1 -1
  73. package/dist/inline-cell-editor/InvalidEditor.svelte +1 -0
  74. package/dist/input-options-select/InputOptionsSelect.svelte +6 -6
  75. package/dist/input-options-select/InputOptionsSelect.svelte.d.ts +1 -1
  76. package/dist/layout/flex/FlexBlock.svelte +1 -1
  77. package/dist/lookup-editor/LookupEditor.svelte +1 -1
  78. package/dist/memo-editor/MemoEditor.svelte +2 -2
  79. package/dist/message-box/IMessageBox.d.ts +2 -4
  80. package/dist/message-box/IMessageBox.js +4 -6
  81. package/dist/message-box/MessageBoxBoard.svelte +1 -3
  82. package/dist/options-multi-select/OptionsMultiSelect.svelte +1 -1
  83. package/dist/prompts-text-editor/PromptsTextEditor.svelte +2 -2
  84. package/dist/prompts-text-editor/PromptsTextEditor.svelte.d.ts +1 -1
  85. package/dist/property-editor/PropertyEditor.svelte +3 -3
  86. package/dist/text-editor/PasswordEditor.svelte +1 -1
  87. package/dist/transfer/Transfer.svelte +17 -12
  88. package/dist/transfer/Transfer.svelte.d.ts +0 -1
  89. package/dist/unit-number-editor/UnitNumberEditor.svelte +2 -2
  90. package/docs/buttons/cn/ActionBar.md +459 -0
  91. package/docs/buttons/cn/Button.md +228 -0
  92. package/docs/buttons/cn/IconButton.md +294 -0
  93. package/docs/buttons/cn/README.md +600 -0
  94. package/docs/buttons/cn/TextButton.md +163 -0
  95. package/docs/buttons/en/ActionBar.md +459 -0
  96. package/docs/buttons/en/Button.md +228 -0
  97. package/docs/buttons/en/IconButton.md +294 -0
  98. package/docs/buttons/en/README.md +600 -0
  99. package/docs/buttons/en/TextButton.md +163 -0
  100. package/docs/containers/cn/accordion.md +622 -0
  101. package/docs/containers/cn/box.md +445 -0
  102. package/docs/containers/cn/card.md +404 -0
  103. package/docs/containers/cn/page.md +576 -0
  104. package/docs/containers/cn/tabs.md +686 -0
  105. package/docs/containers/en/accordion.md +622 -0
  106. package/docs/containers/en/box.md +445 -0
  107. package/docs/containers/en/card.md +404 -0
  108. package/docs/containers/en/page.md +576 -0
  109. package/docs/containers/en/tabs.md +686 -0
  110. package/docs/data-display/cn/concise-data-table.md +731 -0
  111. package/docs/data-display/cn/listbox.md +786 -0
  112. package/docs/data-display/cn/treeview.md +863 -0
  113. package/docs/data-display/en/concise-data-table.md +732 -0
  114. package/docs/data-display/en/listbox.md +786 -0
  115. package/docs/data-display/en/treeview.md +863 -0
  116. package/docs/data-table/cn/README.md +596 -0
  117. package/docs/data-table/en/README.md +596 -0
  118. package/docs/dialog/cn/README.md +767 -0
  119. package/docs/dialog/en/README.md +767 -0
  120. package/docs/form/cn/README.md +847 -0
  121. package/docs/form/en/README.md +847 -0
  122. package/docs/form-components/cn/README.md +495 -0
  123. package/docs/form-components/cn/attachmentfilesfield.md +757 -0
  124. package/docs/form-components/cn/cascade-options-select.md +374 -0
  125. package/docs/form-components/cn/checkbox.md +58 -0
  126. package/docs/form-components/cn/date-picker.md +138 -0
  127. package/docs/form-components/cn/datetime-picker.md +228 -0
  128. package/docs/form-components/cn/group-checkbox.md +405 -0
  129. package/docs/form-components/cn/group-radiobox.md +525 -0
  130. package/docs/form-components/cn/imagefilesfield.md +651 -0
  131. package/docs/form-components/cn/input-options-select.md +250 -0
  132. package/docs/form-components/cn/lookup-editor.md +406 -0
  133. package/docs/form-components/cn/memoeditor.md +409 -0
  134. package/docs/form-components/cn/number-editor.md +261 -0
  135. package/docs/form-components/cn/options-multi-select.md +177 -0
  136. package/docs/form-components/cn/options-select.md +83 -0
  137. package/docs/form-components/cn/passwordeditor.md +538 -0
  138. package/docs/form-components/cn/prompts-text-editor.md +241 -0
  139. package/docs/form-components/cn/radiobutton.md +84 -0
  140. package/docs/form-components/cn/switch.md +178 -0
  141. package/docs/form-components/cn/text-editor.md +142 -0
  142. package/docs/form-components/cn/time-editor.md +159 -0
  143. package/docs/form-components/cn/unit-number-editor.md +164 -0
  144. package/docs/form-components/en/README.md +463 -0
  145. package/docs/form-components/en/attachmentfilesfield.md +757 -0
  146. package/docs/form-components/en/cascade-options-select.md +358 -0
  147. package/docs/form-components/en/checkbox.md +59 -0
  148. package/docs/form-components/en/date-picker.md +138 -0
  149. package/docs/form-components/en/datetime-picker.md +228 -0
  150. package/docs/form-components/en/group-checkbox.md +395 -0
  151. package/docs/form-components/en/group-radiobox.md +498 -0
  152. package/docs/form-components/en/imagefilesfield.md +651 -0
  153. package/docs/form-components/en/input-options-select.md +239 -0
  154. package/docs/form-components/en/lookup-editor.md +389 -0
  155. package/docs/form-components/en/memoeditor.md +409 -0
  156. package/docs/form-components/en/number-editor.md +249 -0
  157. package/docs/form-components/en/options-multi-select.md +177 -0
  158. package/docs/form-components/en/options-select.md +83 -0
  159. package/docs/form-components/en/passwordeditor.md +538 -0
  160. package/docs/form-components/en/prompts-text-editor.md +241 -0
  161. package/docs/form-components/en/radiobutton.md +84 -0
  162. package/docs/form-components/en/switch.md +180 -0
  163. package/docs/form-components/en/text-editor.md +142 -0
  164. package/docs/form-components/en/time-editor.md +159 -0
  165. package/docs/form-components/en/unit-number-editor.md +164 -0
  166. package/docs/form-layout/cn/criteria-field.md +652 -0
  167. package/docs/form-layout/cn/flex-form.md +454 -0
  168. package/docs/form-layout/cn/flex-row-form.md +542 -0
  169. package/docs/form-layout/cn/form-field.md +923 -0
  170. package/docs/form-layout/cn/grid-form.md +676 -0
  171. package/docs/form-layout/en/criteria-field.md +652 -0
  172. package/docs/form-layout/en/flex-form.md +454 -0
  173. package/docs/form-layout/en/flex-row-form.md +542 -0
  174. package/docs/form-layout/en/form-field.md +923 -0
  175. package/docs/form-layout/en/grid-form.md +676 -0
  176. package/docs/global/cn/README.md +534 -0
  177. package/docs/global/en/README.md +534 -0
  178. package/docs/layout/cn/classiclayout.md +460 -0
  179. package/docs/layout/cn/headerlayout.md +524 -0
  180. package/docs/layout/cn/sidebarlayout.md +263 -0
  181. package/docs/layout/en/classiclayout.md +951 -0
  182. package/docs/layout/en/headerlayout.md +524 -0
  183. package/docs/layout/en/sidebarlayout.md +262 -0
  184. package/docs/misc/cn/README.md +1217 -0
  185. package/docs/misc/en/README.md +1217 -0
  186. package/docs/navigation/cn/breadcrumb.md +291 -0
  187. package/docs/navigation/cn/navigator.md +322 -0
  188. package/docs/navigation/cn/navigatormenu.md +512 -0
  189. package/docs/navigation/cn/progressbar.md +199 -0
  190. package/docs/navigation/cn/progressstepbar.md +299 -0
  191. package/docs/navigation/en/breadcrumb.md +291 -0
  192. package/docs/navigation/en/navigator.md +322 -0
  193. package/docs/navigation/en/navigatormenu.md +512 -0
  194. package/docs/navigation/en/progressbar.md +199 -0
  195. package/docs/navigation/en/progressstepbar.md +299 -0
  196. package/docs/search-filters/cn/daterange.md +1156 -0
  197. package/docs/search-filters/cn/numberrange.md +688 -0
  198. package/docs/search-filters/cn/searchbox.md +1582 -0
  199. package/docs/search-filters/en/daterange.md +1156 -0
  200. package/docs/search-filters/en/numberrange.md +688 -0
  201. package/docs/search-filters/en/searchbox.md +1582 -0
  202. package/package.json +53 -13
  203. package/dist/common-editor/DateInput.svelte +0 -27
  204. package/dist/i18n_resources/index.d.ts +0 -3
  205. package/dist/i18n_resources/index.js +0 -3
  206. /package/dist/{i18n_resources → i18nRes}/uniface_cn_resource.d.ts +0 -0
  207. /package/dist/{i18n_resources → i18nRes}/uniface_cn_resource.js +0 -0
  208. /package/dist/{i18n_resources → i18nRes}/uniface_en_resource.d.ts +0 -0
  209. /package/dist/{i18n_resources → i18nRes}/uniface_en_resource.js +0 -0
@@ -0,0 +1,596 @@
1
+ # Data Table Component
2
+
3
+ A powerful and flexible data table component for Uniface applications, built with Svelte and TypeScript.
4
+
5
+ ## Overview
6
+
7
+ The Data Table component provides a comprehensive solution for displaying and managing tabular data. It supports features like frozen columns, row actions, sorting, inline editing, and custom cell formatting.
8
+
9
+ ## Installation
10
+
11
+ ```typescript
12
+ import DataTable from '@ticatec/uniface-element/DataTable';
13
+ import type { DataColumn, ActionsColumn, IndicatorColumn } from '@ticatec/uniface-element/DataTable';
14
+ ```
15
+
16
+ ## Basic Usage
17
+
18
+ ```svelte
19
+ <script lang="ts">
20
+ import DataTable from '@ticatec/uniface-element/DataTable';
21
+ import type { DataColumn } from '@ticatec/uniface-element/DataTable';
22
+
23
+ let data = [
24
+ { id: 1, name: 'John Doe', age: 30 },
25
+ { id: 2, name: 'Jane Smith', age: 25 }
26
+ ];
27
+
28
+ let columns: DataColumn[] = [
29
+ { text: 'ID', field: 'id', width: 80 },
30
+ { text: 'Name', field: 'name', width: 200 },
31
+ { text: 'Age', field: 'age', width: 100 }
32
+ ];
33
+ </script>
34
+
35
+ <DataTable {columns} list={data} />
36
+ ```
37
+
38
+ ## Core Components
39
+
40
+ ### UniDataTable Class
41
+
42
+ The main data table class (`src/lib/data-table/UniDataTable.ts:17`) that manages table state and configuration.
43
+
44
+ **Constructor:**
45
+ ```typescript
46
+ new UniDataTable(id: string, indicatorWidth?: number)
47
+ ```
48
+
49
+ **Key Methods:**
50
+ - `setColumns(columns: Array<DataColumn>)` - Set table columns
51
+ - `generateTemplateStyle(): string` - Generate CSS styles for columns
52
+ - Getters: `width`, `frozenWidth`, `rows`, `columns`, `frozenColumns`
53
+
54
+ ### DataColumn Interface
55
+
56
+ Defines column configuration (`src/lib/data-table/lib/DataColumn.ts:5`):
57
+
58
+ ```typescript
59
+ interface DataColumn {
60
+ text: string; // Column header text
61
+ field?: string; // Data field name
62
+ frozen?: boolean; // Whether column is frozen
63
+ align?: 'left' | 'center' | 'right';
64
+ width: number; // Column width in pixels
65
+ minWidth?: number; // Minimum width
66
+ warp?: boolean; // Allow text wrapping
67
+ formatter?: FormatCell; // Cell value formatter
68
+ escapeHTML?: boolean; // Escape HTML in cell content
69
+ href?: HrefBuilder; // Hyperlink configuration
70
+ hint?: CellHint; // Cell tooltip function
71
+ render?: any; // Custom cell renderer
72
+ visible?: boolean; // Column visibility
73
+ resizable?: boolean; // Column is resizable
74
+ compareFunction?: CompareFunction; // Sorting function
75
+ }
76
+ ```
77
+
78
+ ## Properties
79
+
80
+ ### DataTable Component Props
81
+
82
+ | Property | Type | Default | Description |
83
+ |----------|------|---------|-------------|
84
+ | `columns` | `Array<DataColumn>` | required | Column definitions |
85
+ | `list` | `Array<any>` | required | Data array |
86
+ | `actionsColumn` | `ActionsColumn \| null` | `null` | Row actions configuration |
87
+ | `indicatorColumn` | `IndicatorColumn \| null` | `null` | Indicator column configuration |
88
+ | `rowHeight` | `number` | `42` | Row height in pixels |
89
+ | `selectedRows` | `Array<any>` | `[]` | Selected rows array |
90
+ | `inlineRowHeight` | `number` | `80` | Height for expanded inline rows |
91
+ | `rowBorder` | `boolean` | `false` | Show row borders |
92
+ | `colBorder` | `boolean` | `false` | Show column borders |
93
+ | `emptyIndicator` | `string \| undefined` | `undefined` | Empty state message |
94
+ | `style` | `string` | `''` | Additional CSS styles |
95
+
96
+ ## Advanced Features
97
+
98
+ ### Frozen Columns
99
+
100
+ Columns can be frozen to the left side of the table:
101
+
102
+ ```typescript
103
+ let columns: DataColumn[] = [
104
+ { text: 'ID', field: 'id', width: 80, frozen: true },
105
+ { text: 'Name', field: 'name', width: 200, frozen: true },
106
+ { text: 'Description', field: 'desc', width: 300 }
107
+ ];
108
+ ```
109
+
110
+ ### Actions Column
111
+
112
+ Add action buttons to each row:
113
+
114
+ ```typescript
115
+ import type { ActionsColumn, RowAction } from '@ticatec/uniface-element/DataTable';
116
+
117
+ let actionsColumn: ActionsColumn = {
118
+ width: 120,
119
+ align: 'center',
120
+ getActions: (item) => [
121
+ {
122
+ label: 'Edit',
123
+ type: 'primary',
124
+ icon: 'edit',
125
+ callback: (item) => editItem(item)
126
+ },
127
+ {
128
+ label: 'Delete',
129
+ type: 'secondary',
130
+ icon: 'delete',
131
+ callback: (item) => deleteItem(item)
132
+ }
133
+ ]
134
+ };
135
+ ```
136
+
137
+ ### Indicator Column
138
+
139
+ Add selection checkboxes, row numbers, or expandable rows:
140
+
141
+ ```typescript
142
+ import type { IndicatorColumn } from '@ticatec/uniface-element/DataTable';
143
+
144
+ let indicatorColumn: IndicatorColumn = {
145
+ width: 60,
146
+ selectable: true,
147
+ displayNo: true,
148
+ buildInlineComponent: async (data) => {
149
+ // Return component for expanded row content
150
+ return SomeInlineComponent;
151
+ }
152
+ };
153
+ ```
154
+
155
+ ### Cell Formatting
156
+
157
+ Custom cell formatters and hints:
158
+
159
+ ```typescript
160
+ import type { FormatCell, CellHint } from '@ticatec/uniface-element/DataTable';
161
+
162
+ const dateFormatter: FormatCell = (value) => {
163
+ return new Date(value).toLocaleDateString();
164
+ };
165
+
166
+ const tooltipHint: CellHint = (value) => {
167
+ return `Full value: ${value}`;
168
+ };
169
+
170
+ let columns: DataColumn[] = [
171
+ {
172
+ text: 'Created Date',
173
+ field: 'createdAt',
174
+ width: 150,
175
+ formatter: dateFormatter,
176
+ hint: tooltipHint
177
+ }
178
+ ];
179
+ ```
180
+
181
+ ### Sorting
182
+
183
+ Add sorting capability to columns:
184
+
185
+ ```typescript
186
+ import type { CompareFunction } from '@ticatec/uniface-element/DataTable';
187
+
188
+ const nameCompare: CompareFunction = (a, b) => {
189
+ return a.name.localeCompare(b.name);
190
+ };
191
+
192
+ let columns: DataColumn[] = [
193
+ {
194
+ text: 'Name',
195
+ field: 'name',
196
+ width: 200,
197
+ compareFunction: nameCompare
198
+ }
199
+ ];
200
+ ```
201
+
202
+ ### Hyperlinks
203
+
204
+ Make cells clickable links:
205
+
206
+ ```typescript
207
+ import type { HrefBuilder } from '@ticatec/uniface-element/DataTable';
208
+
209
+ const profileLink: HrefBuilder = (item) => {
210
+ return `/profile/${item.id}`;
211
+ };
212
+
213
+ let columns: DataColumn[] = [
214
+ {
215
+ text: 'Name',
216
+ field: 'name',
217
+ width: 200,
218
+ href: profileLink
219
+ }
220
+ ];
221
+ ```
222
+
223
+ ## Event Handling
224
+
225
+ The component supports various event handlers:
226
+
227
+ ```typescript
228
+ // Event handler types
229
+ type RowEventHandler = (row: TableRow) => void;
230
+ type RowSelectEventHandler = (row: TableRow, value: boolean) => void;
231
+ type TableEventHandler = () => void;
232
+ type SelectionEventHandler = (value: boolean) => void;
233
+ ```
234
+
235
+ ### Selection Modes
236
+
237
+ ```typescript
238
+ enum SelectionMode {
239
+ All = 1,
240
+ Partial = 0,
241
+ None = -1
242
+ }
243
+ ```
244
+
245
+ ## Styling
246
+
247
+ The component uses CSS classes that can be customized:
248
+
249
+ ```css
250
+ .uniface-data-table {
251
+ /* Main table container */
252
+ }
253
+
254
+ .uniface-data-table.row-border {
255
+ /* Table with row borders */
256
+ }
257
+
258
+ .uniface-data-table.cell-border {
259
+ /* Table with cell borders */
260
+ }
261
+ ```
262
+
263
+ Column-specific styles are generated dynamically based on column configuration.
264
+
265
+ ## Examples
266
+
267
+ ### Complete Example with All Features
268
+
269
+ ```svelte
270
+ <script lang="ts">
271
+ import DataTable from '@ticatec/uniface-element/DataTable';
272
+ import type { DataColumn, ActionsColumn, IndicatorColumn } from '@ticatec/uniface-element/DataTable';
273
+
274
+ let employees = [
275
+ { id: 1, name: 'John Doe', department: 'IT', salary: 75000, startDate: '2020-01-15' },
276
+ { id: 2, name: 'Jane Smith', department: 'HR', salary: 68000, startDate: '2019-03-22' }
277
+ ];
278
+
279
+ let selectedRows = [];
280
+
281
+ let columns: DataColumn[] = [
282
+ {
283
+ text: 'ID',
284
+ field: 'id',
285
+ width: 60,
286
+ frozen: true,
287
+ align: 'center'
288
+ },
289
+ {
290
+ text: 'Employee Name',
291
+ field: 'name',
292
+ width: 180,
293
+ frozen: true
294
+ },
295
+ {
296
+ text: 'Department',
297
+ field: 'department',
298
+ width: 120
299
+ },
300
+ {
301
+ text: 'Salary',
302
+ field: 'salary',
303
+ width: 100,
304
+ align: 'right',
305
+ formatter: (value) => `$${value.toLocaleString()}`
306
+ },
307
+ {
308
+ text: 'Start Date',
309
+ field: 'startDate',
310
+ width: 120,
311
+ formatter: (value) => new Date(value).toLocaleDateString()
312
+ }
313
+ ];
314
+
315
+ let actionsColumn: ActionsColumn = {
316
+ width: 100,
317
+ align: 'center',
318
+ getActions: (employee) => [
319
+ {
320
+ label: 'Edit',
321
+ type: 'primary',
322
+ callback: (emp) => console.log('Edit', emp)
323
+ },
324
+ {
325
+ label: 'Delete',
326
+ type: 'secondary',
327
+ callback: (emp) => console.log('Delete', emp)
328
+ }
329
+ ]
330
+ };
331
+
332
+ let indicatorColumn: IndicatorColumn = {
333
+ width: 50,
334
+ selectable: true,
335
+ displayNo: true
336
+ };
337
+ </script>
338
+
339
+ <DataTable
340
+ {columns}
341
+ {actionsColumn}
342
+ {indicatorColumn}
343
+ list={employees}
344
+ bind:selectedRows
345
+ rowHeight={45}
346
+ rowBorder={true}
347
+ colBorder={false}
348
+ />
349
+ ```
350
+
351
+ ## API Reference
352
+
353
+ ### Main Exports
354
+
355
+ ```typescript
356
+ import DataTable from "@ticatec/uniface-element/DataTable";
357
+ import type {
358
+ ActionsColumn,
359
+ IndicatorColumn,
360
+ FormatCell,
361
+ CellHint,
362
+ DataColumn,
363
+ RowAction,
364
+ GetRowActions,
365
+ ActionFunction
366
+ } from "@ticatec/uniface-element/DataTable";
367
+ ```
368
+
369
+ ### DataColumn Interface
370
+
371
+ ```typescript
372
+ interface DataColumn {
373
+ /**
374
+ * Column header text
375
+ */
376
+ text: string;
377
+
378
+ /**
379
+ * Data field/property name
380
+ */
381
+ field?: string;
382
+
383
+ /**
384
+ * Whether column is frozen to left side
385
+ */
386
+ frozen?: boolean;
387
+
388
+ /**
389
+ * Text alignment
390
+ */
391
+ align?: 'left' | 'center' | 'right';
392
+
393
+ /**
394
+ * Column width in pixels
395
+ */
396
+ width: number;
397
+
398
+ /**
399
+ * Minimum width
400
+ */
401
+ minWidth?: number;
402
+
403
+ /**
404
+ * Allow text wrapping (default: false)
405
+ */
406
+ warp?: boolean;
407
+
408
+ /**
409
+ * Cell value formatter function
410
+ */
411
+ formatter?: FormatCell;
412
+
413
+ /**
414
+ * Whether to escape HTML characters
415
+ */
416
+ escapeHTML?: boolean;
417
+
418
+ /**
419
+ * Hyperlink configuration
420
+ */
421
+ href?: HrefBuilder;
422
+
423
+ /**
424
+ * Cell hint/tooltip function
425
+ */
426
+ hint?: CellHint;
427
+
428
+ /**
429
+ * Custom cell renderer
430
+ */
431
+ render?: any;
432
+
433
+ /**
434
+ * Column visibility
435
+ */
436
+ visible?: boolean;
437
+
438
+ /**
439
+ * Whether column is resizable
440
+ */
441
+ resizable?: boolean;
442
+
443
+ /**
444
+ * Sorting comparison function
445
+ */
446
+ compareFunction?: CompareFunction;
447
+ }
448
+ ```
449
+
450
+ ### ActionsColumn Interface
451
+
452
+ ```typescript
453
+ interface ActionsColumn {
454
+ /**
455
+ * Column width in pixels
456
+ */
457
+ width: number;
458
+
459
+ /**
460
+ * Get row actions function
461
+ */
462
+ getActions: GetRowActions;
463
+
464
+ /**
465
+ * Alignment (default: left)
466
+ */
467
+ align?: 'left' | 'center';
468
+ }
469
+ ```
470
+
471
+ ### IndicatorColumn Interface
472
+
473
+ ```typescript
474
+ interface IndicatorColumn {
475
+ /**
476
+ * Column width in pixels
477
+ */
478
+ width: number;
479
+
480
+ /**
481
+ * Whether rows are selectable
482
+ */
483
+ selectable?: boolean;
484
+
485
+ /**
486
+ * Function to build inline component for expanded rows
487
+ */
488
+ buildInlineComponent?: (data: any) => Promise<any>;
489
+
490
+ /**
491
+ * Whether to display row numbers
492
+ */
493
+ displayNo?: boolean;
494
+ }
495
+ ```
496
+
497
+ ### RowAction Interface
498
+
499
+ ```typescript
500
+ interface RowAction {
501
+ /**
502
+ * Action button label
503
+ */
504
+ label: string;
505
+
506
+ /**
507
+ * Action button type/style
508
+ */
509
+ type?: 'primary' | 'secondary' | 'third' | 'forth';
510
+
511
+ /**
512
+ * Action button icon
513
+ */
514
+ icon?: string;
515
+
516
+ /**
517
+ * Action callback function
518
+ */
519
+ callback: ActionFunction;
520
+ }
521
+ ```
522
+
523
+ ### Type Definitions
524
+
525
+ ```typescript
526
+ /**
527
+ * Cell value formatter function
528
+ */
529
+ export type FormatCell = (value: any) => string;
530
+
531
+ /**
532
+ * Cell hint/tooltip function
533
+ */
534
+ export type CellHint = (value: any) => string;
535
+
536
+ /**
537
+ * Action callback function
538
+ */
539
+ export type ActionFunction = (item: any) => void;
540
+
541
+ /**
542
+ * Function to get row actions
543
+ */
544
+ export type GetRowActions = (item: any) => Array<RowAction>;
545
+
546
+ /**
547
+ * Hyperlink builder function
548
+ */
549
+ export type HrefBuilder = (item: any) => string;
550
+
551
+ /**
552
+ * Comparison function for sorting
553
+ */
554
+ export type CompareFunction = (a: any, b: any) => number;
555
+
556
+ /**
557
+ * Row event handler
558
+ */
559
+ export type RowEventHandler = (row: TableRow) => void;
560
+
561
+ /**
562
+ * Row selection event handler
563
+ */
564
+ export type RowSelectEventHandler = (row: TableRow, value: boolean) => void;
565
+
566
+ /**
567
+ * Table event handler
568
+ */
569
+ export type TableEventHandler = () => void;
570
+
571
+ /**
572
+ * Selection event handler
573
+ */
574
+ export type SelectionEventHandler = (value: boolean) => void;
575
+ ```
576
+
577
+ ### Enums
578
+
579
+ ```typescript
580
+ /**
581
+ * Selection modes
582
+ */
583
+ export enum SelectionMode {
584
+ All = 1, // All rows selected
585
+ Partial = 0, // Some rows selected
586
+ None = -1 // No rows selected
587
+ }
588
+
589
+ /**
590
+ * Sort order directions
591
+ */
592
+ export enum OrderDirection {
593
+ Ascending = 'asc',
594
+ Descending = 'desc'
595
+ }
596
+ ```