@expcat/tigercat-vue 1.2.37 → 1.2.41

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 (215) hide show
  1. package/dist/{chunk-MD7S2A55.js → chunk-5TJI4HOT.js} +2 -2
  2. package/dist/{chunk-FKCZSBM6.js → chunk-7IVLFDZI.js} +17 -3
  3. package/dist/{chunk-W54LFA7A.mjs → chunk-CHDKJDZQ.mjs} +306 -94
  4. package/dist/{chunk-2HT6YGRY.js → chunk-EWQJGR7E.js} +185 -18
  5. package/dist/{chunk-U2PPTMQX.mjs → chunk-FI2EIJIF.mjs} +1 -1
  6. package/dist/{chunk-HSMN5FWL.js → chunk-GD2WAN62.js} +2 -2
  7. package/dist/{chunk-ILTIUESE.mjs → chunk-GFQDHFAX.mjs} +178 -11
  8. package/dist/{chunk-3EVCDIZE.js → chunk-KGDRA475.js} +2 -2
  9. package/dist/{chunk-WT3LV7OQ.mjs → chunk-KJ6VISRW.mjs} +1 -1
  10. package/dist/{chunk-6DYGPOYH.js → chunk-LUAI6VXV.js} +2 -2
  11. package/dist/{chunk-UJZPEXF5.mjs → chunk-M4EP4OVR.mjs} +19 -4
  12. package/dist/{chunk-RRI3F52B.js → chunk-OFTAQ2A4.js} +305 -93
  13. package/dist/{chunk-PC2FNA4J.mjs → chunk-PT4Q7C2A.mjs} +1 -1
  14. package/dist/{chunk-S3KTGULC.js → chunk-QOMWROWE.js} +22 -7
  15. package/dist/{chunk-FATIMV7O.mjs → chunk-ROMVD7LS.mjs} +1 -1
  16. package/dist/{chunk-NYH6GSP7.mjs → chunk-VKW2O36D.mjs} +17 -3
  17. package/dist/components/ActivityFeed.d.mts +6 -6
  18. package/dist/components/ActivityFeed.d.ts +6 -6
  19. package/dist/components/Alert.d.mts +3 -3
  20. package/dist/components/Alert.d.ts +3 -3
  21. package/dist/components/Anchor.d.mts +1 -1
  22. package/dist/components/Anchor.d.ts +1 -1
  23. package/dist/components/AreaChart.d.mts +2 -2
  24. package/dist/components/AreaChart.d.ts +2 -2
  25. package/dist/components/AutoComplete.d.mts +2 -2
  26. package/dist/components/AutoComplete.d.ts +2 -2
  27. package/dist/components/Avatar.d.mts +1 -1
  28. package/dist/components/Avatar.d.ts +1 -1
  29. package/dist/components/Badge.d.mts +3 -3
  30. package/dist/components/Badge.d.ts +3 -3
  31. package/dist/components/BarChart.d.mts +1 -1
  32. package/dist/components/BarChart.d.ts +1 -1
  33. package/dist/components/Breadcrumb.d.mts +2 -2
  34. package/dist/components/Breadcrumb.d.ts +2 -2
  35. package/dist/components/Button.d.mts +3 -3
  36. package/dist/components/Button.d.ts +3 -3
  37. package/dist/components/ButtonGroup.d.mts +1 -1
  38. package/dist/components/ButtonGroup.d.ts +1 -1
  39. package/dist/components/Calendar.d.mts +1 -1
  40. package/dist/components/Calendar.d.ts +1 -1
  41. package/dist/components/Card.d.mts +2 -2
  42. package/dist/components/Card.d.ts +2 -2
  43. package/dist/components/ChartGrid.d.mts +1 -1
  44. package/dist/components/ChartGrid.d.ts +1 -1
  45. package/dist/components/ChatWindow.d.mts +3 -3
  46. package/dist/components/ChatWindow.d.ts +3 -3
  47. package/dist/components/ChatWindow.js +3 -3
  48. package/dist/components/ChatWindow.mjs +2 -2
  49. package/dist/components/CodeEditor.d.mts +2 -2
  50. package/dist/components/CodeEditor.d.ts +2 -2
  51. package/dist/components/Collapse.d.mts +1 -1
  52. package/dist/components/Collapse.d.ts +1 -1
  53. package/dist/components/CollapsePanel.d.mts +1 -1
  54. package/dist/components/CollapsePanel.d.ts +1 -1
  55. package/dist/components/ColorSwatch.d.mts +1 -1
  56. package/dist/components/ColorSwatch.d.ts +1 -1
  57. package/dist/components/CommentThread.d.mts +2 -2
  58. package/dist/components/CommentThread.d.ts +2 -2
  59. package/dist/components/ConfigProvider.d.mts +1 -1
  60. package/dist/components/ConfigProvider.d.ts +1 -1
  61. package/dist/components/DataTableWithToolbar.d.mts +55 -11
  62. package/dist/components/DataTableWithToolbar.d.ts +55 -11
  63. package/dist/components/DataTableWithToolbar.js +11 -3
  64. package/dist/components/DataTableWithToolbar.mjs +10 -2
  65. package/dist/components/DatePicker.d.mts +2 -2
  66. package/dist/components/DatePicker.d.ts +2 -2
  67. package/dist/components/Descriptions.d.mts +2 -2
  68. package/dist/components/Descriptions.d.ts +2 -2
  69. package/dist/components/DonutChart.d.mts +2 -2
  70. package/dist/components/DonutChart.d.ts +2 -2
  71. package/dist/components/Drawer.d.mts +5 -5
  72. package/dist/components/Drawer.d.ts +5 -5
  73. package/dist/components/Dropdown.d.mts +19 -0
  74. package/dist/components/Dropdown.d.ts +19 -0
  75. package/dist/components/Dropdown.js +2 -2
  76. package/dist/components/Dropdown.mjs +1 -1
  77. package/dist/components/DropdownItem.js +3 -3
  78. package/dist/components/DropdownItem.mjs +2 -2
  79. package/dist/components/DropdownMenu.js +3 -3
  80. package/dist/components/DropdownMenu.mjs +1 -1
  81. package/dist/components/Empty.d.mts +1 -1
  82. package/dist/components/Empty.d.ts +1 -1
  83. package/dist/components/FileManager.d.mts +1 -1
  84. package/dist/components/FileManager.d.ts +1 -1
  85. package/dist/components/FloatButton.d.mts +3 -3
  86. package/dist/components/FloatButton.d.ts +3 -3
  87. package/dist/components/Form.d.mts +1 -1
  88. package/dist/components/Form.d.ts +1 -1
  89. package/dist/components/FormWizard.d.mts +6 -6
  90. package/dist/components/FormWizard.d.ts +6 -6
  91. package/dist/components/FunnelChart.d.mts +1 -1
  92. package/dist/components/FunnelChart.d.ts +1 -1
  93. package/dist/components/Gantt.d.mts +1 -1
  94. package/dist/components/Gantt.d.ts +1 -1
  95. package/dist/components/GaugeChart.d.mts +1 -1
  96. package/dist/components/GaugeChart.d.ts +1 -1
  97. package/dist/components/HeatmapChart.d.mts +2 -2
  98. package/dist/components/HeatmapChart.d.ts +2 -2
  99. package/dist/components/Image.d.mts +2 -2
  100. package/dist/components/Image.d.ts +2 -2
  101. package/dist/components/ImageAnnotation.d.mts +4 -4
  102. package/dist/components/ImageAnnotation.d.ts +4 -4
  103. package/dist/components/InfiniteScroll.d.mts +2 -2
  104. package/dist/components/InfiniteScroll.d.ts +2 -2
  105. package/dist/components/Input.d.mts +4 -4
  106. package/dist/components/Input.d.ts +4 -4
  107. package/dist/components/InputGroup.d.mts +1 -1
  108. package/dist/components/InputGroup.d.ts +1 -1
  109. package/dist/components/InputNumber.d.mts +1 -1
  110. package/dist/components/InputNumber.d.ts +1 -1
  111. package/dist/components/Kanban.d.mts +1 -1
  112. package/dist/components/Kanban.d.ts +1 -1
  113. package/dist/components/LineChart.d.mts +2 -2
  114. package/dist/components/LineChart.d.ts +2 -2
  115. package/dist/components/Link.d.mts +1 -1
  116. package/dist/components/Link.d.ts +1 -1
  117. package/dist/components/List.d.mts +6 -6
  118. package/dist/components/List.d.ts +6 -6
  119. package/dist/components/Loading.d.mts +5 -5
  120. package/dist/components/Loading.d.ts +5 -5
  121. package/dist/components/MarkdownEditor.d.mts +2 -2
  122. package/dist/components/MarkdownEditor.d.ts +2 -2
  123. package/dist/components/Mentions.d.mts +2 -2
  124. package/dist/components/Mentions.d.ts +2 -2
  125. package/dist/components/Menu.d.mts +5 -5
  126. package/dist/components/Menu.d.ts +5 -5
  127. package/dist/components/Modal.d.mts +8 -8
  128. package/dist/components/Modal.d.ts +8 -8
  129. package/dist/components/NotificationCenter.d.mts +5 -5
  130. package/dist/components/NotificationCenter.d.ts +5 -5
  131. package/dist/components/NumberKeyboard.d.mts +2 -2
  132. package/dist/components/NumberKeyboard.d.ts +2 -2
  133. package/dist/components/OrgChart.d.mts +1 -1
  134. package/dist/components/OrgChart.d.ts +1 -1
  135. package/dist/components/Pagination.d.mts +5 -5
  136. package/dist/components/Pagination.d.ts +5 -5
  137. package/dist/components/PieChart.d.mts +2 -2
  138. package/dist/components/PieChart.d.ts +2 -2
  139. package/dist/components/Popconfirm.d.mts +3 -3
  140. package/dist/components/Popconfirm.d.ts +3 -3
  141. package/dist/components/Popconfirm.js +3 -3
  142. package/dist/components/Popconfirm.mjs +2 -2
  143. package/dist/components/Popover.d.mts +1 -1
  144. package/dist/components/Popover.d.ts +1 -1
  145. package/dist/components/Popover.js +3 -3
  146. package/dist/components/Popover.mjs +2 -2
  147. package/dist/components/Progress.d.mts +3 -3
  148. package/dist/components/Progress.d.ts +3 -3
  149. package/dist/components/QRCode.d.mts +1 -1
  150. package/dist/components/QRCode.d.ts +1 -1
  151. package/dist/components/RadarChart.d.mts +2 -2
  152. package/dist/components/RadarChart.d.ts +2 -2
  153. package/dist/components/RichTextEditor.d.mts +1 -1
  154. package/dist/components/RichTextEditor.d.ts +1 -1
  155. package/dist/components/Row.d.mts +1 -1
  156. package/dist/components/Row.d.ts +1 -1
  157. package/dist/components/ScatterChart.d.mts +1 -1
  158. package/dist/components/ScatterChart.d.ts +1 -1
  159. package/dist/components/ScrollSpy.d.mts +2 -2
  160. package/dist/components/ScrollSpy.d.ts +2 -2
  161. package/dist/components/Select.d.mts +1 -1
  162. package/dist/components/Select.d.ts +1 -1
  163. package/dist/components/Signature.d.mts +2 -2
  164. package/dist/components/Signature.d.ts +2 -2
  165. package/dist/components/Skeleton.d.mts +1 -1
  166. package/dist/components/Skeleton.d.ts +1 -1
  167. package/dist/components/Space.d.mts +2 -2
  168. package/dist/components/Space.d.ts +2 -2
  169. package/dist/components/Splitter.d.mts +1 -1
  170. package/dist/components/Splitter.d.ts +1 -1
  171. package/dist/components/Spotlight.d.mts +4 -4
  172. package/dist/components/Spotlight.d.ts +4 -4
  173. package/dist/components/Steps.d.mts +3 -3
  174. package/dist/components/Steps.d.ts +3 -3
  175. package/dist/components/SunburstChart.d.mts +1 -1
  176. package/dist/components/SunburstChart.d.ts +1 -1
  177. package/dist/components/Table.d.mts +56 -8
  178. package/dist/components/Table.d.ts +56 -8
  179. package/dist/components/Table.js +8 -2
  180. package/dist/components/Table.mjs +7 -1
  181. package/dist/components/Tabs.d.mts +2 -2
  182. package/dist/components/Tabs.d.ts +2 -2
  183. package/dist/components/Tag.d.mts +1 -1
  184. package/dist/components/Tag.d.ts +1 -1
  185. package/dist/components/TaskBoard.d.mts +2 -2
  186. package/dist/components/TaskBoard.d.ts +2 -2
  187. package/dist/components/Text.d.mts +3 -3
  188. package/dist/components/Text.d.ts +3 -3
  189. package/dist/components/Textarea.d.mts +1 -1
  190. package/dist/components/Textarea.d.ts +1 -1
  191. package/dist/components/TimePicker.d.mts +3 -3
  192. package/dist/components/TimePicker.d.ts +3 -3
  193. package/dist/components/Timeline.d.mts +3 -3
  194. package/dist/components/Timeline.d.ts +3 -3
  195. package/dist/components/Tooltip.d.mts +1 -1
  196. package/dist/components/Tooltip.d.ts +1 -1
  197. package/dist/components/Tooltip.js +3 -3
  198. package/dist/components/Tooltip.mjs +2 -2
  199. package/dist/components/Tour.d.mts +2 -2
  200. package/dist/components/Tour.d.ts +2 -2
  201. package/dist/components/Tree.d.mts +2 -2
  202. package/dist/components/Tree.d.ts +2 -2
  203. package/dist/components/TreeMapChart.d.mts +1 -1
  204. package/dist/components/TreeMapChart.d.ts +1 -1
  205. package/dist/components/Upload.d.mts +4 -4
  206. package/dist/components/Upload.d.ts +4 -4
  207. package/dist/components/VirtualTable.d.mts +2 -2
  208. package/dist/components/VirtualTable.d.ts +2 -2
  209. package/dist/components/Watermark.d.mts +1 -1
  210. package/dist/components/Watermark.d.ts +1 -1
  211. package/dist/index.js +20 -20
  212. package/dist/index.mjs +20 -20
  213. package/package.json +2 -2
  214. package/dist/{chunk-S45NWVQS.mjs → chunk-6GPX4ONB.mjs} +3 -3
  215. package/dist/{chunk-VES3OJOP.js → chunk-YS6FW775.js} +2 -2
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
- var _chunkFKCZSBM6js = require('./chunk-FKCZSBM6.js');
3
+ var _chunk7IVLFDZIjs = require('./chunk-7IVLFDZI.js');
4
4
 
5
5
  // src/components/DropdownItem.ts
6
6
  var _vue = require('vue');
@@ -47,7 +47,7 @@ var DropdownItem = _vue.defineComponent.call(void 0, {
47
47
  const attrsRecord = attrs;
48
48
  const attrsClass = attrsRecord.class;
49
49
  const attrsStyle = attrsRecord.style;
50
- const context = _vue.inject.call(void 0, _chunkFKCZSBM6js.DropdownContextKey, null);
50
+ const context = _vue.inject.call(void 0, _chunk7IVLFDZIjs.DropdownContextKey, null);
51
51
  const handleClick = (event) => {
52
52
  if (props.disabled) {
53
53
  event.preventDefault();
@@ -2,6 +2,7 @@
2
2
 
3
3
 
4
4
 
5
+
5
6
  var _chunkEQW6IUHGjs = require('./chunk-EQW6IUHG.js');
6
7
 
7
8
  // src/components/Dropdown.ts
@@ -33,6 +34,7 @@ var _vue = require('vue');
33
34
 
34
35
 
35
36
 
37
+
36
38
  var _tigercatcore = require('@expcat/tigercat-core');
37
39
  var DropdownMenu = _vue.defineComponent.call(void 0, {
38
40
  name: "TigerDropdownMenu",
@@ -147,6 +149,15 @@ var Dropdown = _vue.defineComponent.call(void 0, {
147
149
  type: Boolean,
148
150
  default: true
149
151
  },
152
+ /**
153
+ * Render the menu into document.body (Teleport) so it is not clipped or
154
+ * covered by overflow/sticky ancestors (e.g. fixed table columns).
155
+ * @default true
156
+ */
157
+ portal: {
158
+ type: Boolean,
159
+ default: true
160
+ },
150
161
  /**
151
162
  * Additional CSS classes
152
163
  */
@@ -239,7 +250,7 @@ var Dropdown = _vue.defineComponent.call(void 0, {
239
250
  if (enabled) {
240
251
  cleanupClickOutside = _chunkEQW6IUHGjs.useVueClickOutside.call(void 0, {
241
252
  enabled: currentVisible,
242
- containerRef,
253
+ refs: [containerRef, floatingRef],
243
254
  onOutsideClick: () => setVisible(false),
244
255
  defer: true
245
256
  });
@@ -277,11 +288,12 @@ var Dropdown = _vue.defineComponent.call(void 0, {
277
288
  );
278
289
  const mergedStyle = _vue.computed.call(void 0, () => _tigercatcore.mergeStyleValues.call(void 0, attrsStyle, props.style));
279
290
  const triggerClasses = _vue.computed.call(void 0, () => _tigercatcore.getDropdownTriggerClasses.call(void 0, props.disabled));
280
- const menuWrapperClasses = _tigercatcore.classNames.call(void 0, "absolute z-50", _tigercatcore.DROPDOWN_ENTER_CLASS);
291
+ const menuWrapperClasses = _tigercatcore.classNames.call(void 0, "absolute", _tigercatcore.DROPDOWN_ENTER_CLASS);
281
292
  const menuWrapperStyles = _vue.computed.call(void 0, () => ({
282
293
  position: "absolute",
283
294
  left: `${x.value}px`,
284
295
  top: `${y.value}px`,
296
+ zIndex: _tigercatcore.FLOATING_OVERLAY_Z_INDEX,
285
297
  transformOrigin: _tigercatcore.getTransformOrigin.call(void 0, currentPlacement.value)
286
298
  }));
287
299
  _vue.provide.call(void 0, DropdownContextKey, {
@@ -329,12 +341,13 @@ var Dropdown = _vue.defineComponent.call(void 0, {
329
341
  },
330
342
  [triggerNode, chevronNode]
331
343
  ) : null;
332
- const menu = menuNode ? _vue.h.call(void 0,
344
+ const menuWrapper = menuNode ? _vue.h.call(void 0,
333
345
  "div",
334
346
  {
335
347
  ref: floatingRef,
336
348
  class: menuWrapperClasses,
337
349
  style: menuWrapperStyles.value,
350
+ "data-tiger-dropdown-menu": "",
338
351
  onMouseenter: handleMouseEnter,
339
352
  onMouseleave: handleMouseLeave,
340
353
  onKeydown: handleMenuKeyDown,
@@ -342,6 +355,7 @@ var Dropdown = _vue.defineComponent.call(void 0, {
342
355
  },
343
356
  [_vue.cloneVNode.call(void 0, menuNode, { id: menuId })]
344
357
  ) : null;
358
+ const menu = menuWrapper ? _chunkEQW6IUHGjs.renderVueBodyTeleport.call(void 0, menuWrapper, !props.portal) : null;
345
359
  const {
346
360
  class: _class,
347
361
  style: _style,
@@ -1,6 +1,18 @@
1
+ import {
2
+ Select
3
+ } from "./chunk-PYT5DTQQ.mjs";
4
+ import {
5
+ Radio
6
+ } from "./chunk-YZP4K6KI.mjs";
1
7
  import {
2
8
  useTigerConfig
3
9
  } from "./chunk-VG6E4NX6.mjs";
10
+ import {
11
+ Empty
12
+ } from "./chunk-WFISP42H.mjs";
13
+ import {
14
+ Checkbox
15
+ } from "./chunk-2BNQGU7E.mjs";
4
16
 
5
17
  // src/components/Table.ts
6
18
  import {
@@ -15,8 +27,11 @@ import {
15
27
  import {
16
28
  classNames as classNames3,
17
29
  createTableResizeObserverController,
30
+ formatTableSelectRowAriaLabel,
31
+ formatTableSortByText,
18
32
  getCardColumns,
19
33
  getImmediateTigerLocale,
34
+ getTableLabels,
20
35
  getTableWrapperClasses,
21
36
  getTableResponsiveCardListClasses,
22
37
  getTableResponsiveTableClasses,
@@ -48,6 +63,14 @@ var tableProps = {
48
63
  type: Array,
49
64
  default: () => []
50
65
  },
66
+ hiddenColumnKeys: {
67
+ type: Array,
68
+ default: void 0
69
+ },
70
+ defaultHiddenColumnKeys: {
71
+ type: Array,
72
+ default: void 0
73
+ },
51
74
  sort: {
52
75
  type: Object
53
76
  },
@@ -85,9 +108,15 @@ var tableProps = {
85
108
  type: Boolean,
86
109
  default: false
87
110
  },
111
+ locale: {
112
+ type: [Object, Function]
113
+ },
114
+ labels: {
115
+ type: Object
116
+ },
88
117
  emptyText: {
89
118
  type: String,
90
- default: "No data"
119
+ default: void 0
91
120
  },
92
121
  pagination: {
93
122
  type: [Object, Boolean],
@@ -132,6 +161,12 @@ var tableProps = {
132
161
  type: String,
133
162
  default: "sm"
134
163
  },
164
+ cardClassName: {
165
+ type: [String, Function]
166
+ },
167
+ renderCard: {
168
+ type: Function
169
+ },
135
170
  // --- v0.6.0 props ---
136
171
  virtual: { type: Boolean, default: false },
137
172
  autoVirtual: { type: Boolean, default: true },
@@ -157,6 +192,8 @@ var tableEmits = [
157
192
  "selection-change",
158
193
  "sort-change",
159
194
  "filter-change",
195
+ "update:hiddenColumnKeys",
196
+ "hidden-columns-change",
160
197
  "page-change",
161
198
  "expand-change",
162
199
  "cell-change",
@@ -176,7 +213,8 @@ import {
176
213
  filterDataAdvanced,
177
214
  groupDataByColumn,
178
215
  getFixedColumnOffsets,
179
- getFixedVirtualRange
216
+ getFixedVirtualRange,
217
+ filterHiddenColumns
180
218
  } from "@expcat/tigercat-core";
181
219
  import { exportTableData, downloadTableExport } from "@expcat/tigercat-core";
182
220
  function useTableState(props, emit, measuredColumnWidths) {
@@ -184,10 +222,14 @@ function useTableState(props, emit, measuredColumnWidths) {
184
222
  return props.pagination !== false && typeof props.pagination === "object" ? props.pagination : null;
185
223
  });
186
224
  const isSortControlled = computed(() => props.sort !== void 0);
225
+ const isHiddenColumnsControlled = computed(() => props.hiddenColumnKeys !== void 0);
187
226
  const isFiltersControlled = computed(() => props.filters !== void 0);
188
227
  const isSelectionControlled = computed(() => props.rowSelection?.selectedRowKeys !== void 0);
189
228
  const isExpandControlled = computed(() => props.expandable?.expandedRowKeys !== void 0);
190
229
  const uncontrolledSortState = ref(props.defaultSort ?? { key: null, direction: null });
230
+ const uncontrolledHiddenColumnKeys = ref(
231
+ props.defaultHiddenColumnKeys ?? props.hiddenColumnKeys ?? []
232
+ );
191
233
  const uncontrolledFilterState = ref(props.defaultFilters ?? {});
192
234
  const uncontrolledCurrentPage = ref(
193
235
  paginationConfig.value?.defaultCurrent ?? paginationConfig.value?.current ?? 1
@@ -202,6 +244,9 @@ function useTableState(props, emit, measuredColumnWidths) {
202
244
  props.expandable?.defaultExpandedRowKeys ?? props.expandable?.expandedRowKeys ?? []
203
245
  );
204
246
  const sortState = computed(() => props.sort ?? uncontrolledSortState.value);
247
+ const hiddenColumnKeys = computed(
248
+ () => props.hiddenColumnKeys ?? uncontrolledHiddenColumnKeys.value
249
+ );
205
250
  const filterState = computed(() => props.filters ?? uncontrolledFilterState.value);
206
251
  const currentPage = computed(() => {
207
252
  return paginationConfig.value?.current ?? uncontrolledCurrentPage.value;
@@ -231,6 +276,14 @@ function useTableState(props, emit, measuredColumnWidths) {
231
276
  }
232
277
  }
233
278
  );
279
+ watch(
280
+ () => props.hiddenColumnKeys,
281
+ (next) => {
282
+ if (next !== void 0) {
283
+ uncontrolledHiddenColumnKeys.value = next;
284
+ }
285
+ }
286
+ );
234
287
  watch(
235
288
  () => paginationConfig.value?.current,
236
289
  (next) => {
@@ -265,13 +318,14 @@ function useTableState(props, emit, measuredColumnWidths) {
265
318
  );
266
319
  const fixedOverrides = ref({});
267
320
  const displayColumns = computed(() => {
268
- return props.columns.map((column) => {
321
+ const mapped = props.columns.map((column) => {
269
322
  const hasOverride = column.key in fixedOverrides.value;
270
323
  return {
271
324
  ...column,
272
325
  fixed: hasOverride ? fixedOverrides.value[column.key] : column.fixed
273
326
  };
274
327
  });
328
+ return filterHiddenColumns(mapped, hiddenColumnKeys.value);
275
329
  });
276
330
  const fixedColumnsInfo = computed(() => {
277
331
  return getFixedColumnOffsets(displayColumns.value, measuredColumnWidths.value);
@@ -283,6 +337,13 @@ function useTableState(props, emit, measuredColumnWidths) {
283
337
  }
284
338
  return map;
285
339
  });
340
+ function handleSetHiddenColumns(hiddenKeys) {
341
+ if (!isHiddenColumnsControlled.value) {
342
+ uncontrolledHiddenColumnKeys.value = hiddenKeys;
343
+ }
344
+ emit("update:hiddenColumnKeys", hiddenKeys);
345
+ emit("hidden-columns-change", hiddenKeys);
346
+ }
286
347
  function toggleColumnLock(columnKey) {
287
348
  const original = props.columns.find((c) => c.key === columnKey)?.fixed;
288
349
  const hasOverride = columnKey in fixedOverrides.value;
@@ -333,6 +394,20 @@ function useTableState(props, emit, measuredColumnWidths) {
333
394
  const total = paginationConfig.value?.total !== void 0 && paginationConfig.value.total > 0 ? paginationConfig.value.total : processedData.value.length;
334
395
  return calculatePagination(total, currentPage.value, currentPageSize.value);
335
396
  });
397
+ function handleSetSort(nextSortState) {
398
+ if (!isSortControlled.value) {
399
+ uncontrolledSortState.value = nextSortState;
400
+ }
401
+ emit("sort-change", nextSortState);
402
+ emit("change", {
403
+ sort: nextSortState,
404
+ filters: filterState.value,
405
+ pagination: props.pagination !== false ? {
406
+ current: currentPage.value,
407
+ pageSize: currentPageSize.value
408
+ } : null
409
+ });
410
+ }
336
411
  function handleSort(columnKey) {
337
412
  const column = displayColumns.value.find((col) => col.key === columnKey);
338
413
  if (!column || !column.sortable) {
@@ -346,21 +421,9 @@ function useTableState(props, emit, measuredColumnWidths) {
346
421
  newDirection = null;
347
422
  }
348
423
  }
349
- const nextSortState = {
424
+ handleSetSort({
350
425
  key: newDirection ? columnKey : null,
351
426
  direction: newDirection
352
- };
353
- if (!isSortControlled.value) {
354
- uncontrolledSortState.value = nextSortState;
355
- }
356
- emit("sort-change", nextSortState);
357
- emit("change", {
358
- sort: nextSortState,
359
- filters: filterState.value,
360
- pagination: props.pagination !== false ? {
361
- current: currentPage.value,
362
- pageSize: currentPageSize.value
363
- } : null
364
427
  });
365
428
  }
366
429
  function handleFilter(columnKey, value) {
@@ -550,12 +613,15 @@ function useTableState(props, emit, measuredColumnWidths) {
550
613
  filterState,
551
614
  currentPage,
552
615
  currentPageSize,
616
+ hiddenColumnKeys,
553
617
  selectedRowKeys,
554
618
  expandedRowKeys,
555
619
  editingCell,
556
620
  editingValue,
557
621
  virtualScrollTop,
558
622
  toggleColumnLock,
623
+ handleSetHiddenColumns,
624
+ handleSetSort,
559
625
  handleSort,
560
626
  handleFilter,
561
627
  handlePageChange,
@@ -1191,11 +1257,14 @@ var Table = defineComponent({
1191
1257
  const measuredRowHeights = ref2([]);
1192
1258
  const ctx = useTableState(props, emit, measuredColumnWidths);
1193
1259
  const resolvedPaginationLocale = ref2();
1260
+ const resolvedTableLocale = ref2();
1194
1261
  let paginationLocaleResolveId = 0;
1262
+ let tableLocaleResolveId = 0;
1195
1263
  const paginationLocaleInput = computed2(
1196
1264
  () => props.pagination !== false && typeof props.pagination === "object" ? props.pagination.locale : void 0
1197
1265
  );
1198
1266
  const isPaginationI18nDisabled = computed2(() => paginationLocaleInput.value === false);
1267
+ const tableLocaleInput = computed2(() => props.locale);
1199
1268
  watch2(
1200
1269
  paginationLocaleInput,
1201
1270
  (locale) => {
@@ -1222,6 +1291,36 @@ var Table = defineComponent({
1222
1291
  const paginationLocale = computed2(
1223
1292
  () => isPaginationI18nDisabled.value ? void 0 : mergeTigerLocale(config.value.locale, resolvedPaginationLocale.value)
1224
1293
  );
1294
+ watch2(
1295
+ tableLocaleInput,
1296
+ (locale) => {
1297
+ const resolveId = ++tableLocaleResolveId;
1298
+ if (!locale) {
1299
+ resolvedTableLocale.value = void 0;
1300
+ return;
1301
+ }
1302
+ const immediateLocale = getImmediateTigerLocale(locale);
1303
+ resolvedTableLocale.value = immediateLocale;
1304
+ if (!isLazyTigerLocale(locale)) return;
1305
+ resolveTigerLocale(locale).then((nextLocale) => {
1306
+ if (resolveId === tableLocaleResolveId) {
1307
+ resolvedTableLocale.value = nextLocale;
1308
+ }
1309
+ }).catch(() => {
1310
+ if (resolveId === tableLocaleResolveId) {
1311
+ resolvedTableLocale.value = immediateLocale;
1312
+ }
1313
+ });
1314
+ },
1315
+ { immediate: true }
1316
+ );
1317
+ const tableLocale = computed2(
1318
+ () => mergeTigerLocale(config.value.locale, resolvedTableLocale.value)
1319
+ );
1320
+ const tableLabels = computed2(() => {
1321
+ const overrides = props.emptyText === void 0 ? props.labels : { ...props.labels, emptyText: props.emptyText };
1322
+ return getTableLabels(tableLocale.value, overrides);
1323
+ });
1225
1324
  const resizeController = createTableResizeObserverController({
1226
1325
  onResize: (snapshot) => {
1227
1326
  if (!areNumberRecordsEqual(measuredColumnWidths.value, snapshot.columnWidths)) {
@@ -1251,10 +1350,14 @@ var Table = defineComponent({
1251
1350
  const wrapperStyle = resolvedProps.maxHeight ? {
1252
1351
  maxHeight: typeof resolvedProps.maxHeight === "number" ? `${resolvedProps.maxHeight}px` : resolvedProps.maxHeight
1253
1352
  } : void 0;
1353
+ const renderProps = {
1354
+ ...resolvedProps,
1355
+ emptyText: tableLabels.value.emptyText
1356
+ };
1254
1357
  const tableChildren = [
1255
- renderTableHeader(ctx, resolvedProps, slots),
1256
- renderTableBody(ctx, resolvedProps, slots),
1257
- renderSummaryRow(ctx, resolvedProps)
1358
+ renderTableHeader(ctx, renderProps, slots),
1359
+ renderTableBody(ctx, renderProps, slots),
1360
+ renderSummaryRow(ctx, renderProps)
1258
1361
  ];
1259
1362
  const tableInner = h6(
1260
1363
  "table",
@@ -1282,83 +1385,192 @@ var Table = defineComponent({
1282
1385
  },
1283
1386
  [tableInner]
1284
1387
  ) : tableInner;
1285
- const cardContent = resolvedProps.responsiveMode === "card" ? h6(
1286
- "div",
1287
- {
1288
- class: getTableResponsiveCardListClasses(resolvedProps.cardBreakpoint),
1289
- "data-tiger-table-mobile": "card"
1290
- },
1291
- ctx.paginatedData.value.length === 0 ? [h6("div", { class: tableResponsiveCardClasses }, resolvedProps.emptyText)] : ctx.paginatedData.value.map((record, index) => {
1292
- const key = ctx.paginatedRowKeys.value[index];
1293
- const isExpanded = ctx.expandedRowKeySet.value.has(key);
1294
- const isRowExpandable = resolvedProps.expandable ? resolvedProps.expandable.rowExpandable ? resolvedProps.expandable.rowExpandable(record) : true : false;
1295
- const { titleColumn, bodyColumns } = getCardColumns(ctx.displayColumns.value);
1296
- const renderCardCellContent = (column) => {
1297
- const dataKey = column.dataKey || column.key;
1298
- return slots[`cell-${column.key}`]?.({ record, index }) ?? (column.render ? column.render(record, index) : record[dataKey]);
1299
- };
1300
- const titleNode = titleColumn ? h6("div", { class: tableResponsiveCardTitleClasses }, [
1301
- renderCardCellContent(titleColumn)
1302
- ]) : null;
1303
- const rows = bodyColumns.map(
1304
- (column) => h6("div", { key: column.key, class: tableResponsiveCardRowClasses }, [
1305
- h6("div", { class: tableResponsiveCardLabelClasses }, column.title),
1306
- h6("div", { class: tableResponsiveCardValueClasses }, [
1307
- renderCardCellContent(column)
1308
- ])
1309
- ])
1388
+ const cardContent = (() => {
1389
+ if (resolvedProps.responsiveMode !== "card") return null;
1390
+ const cardChildren = [];
1391
+ const sortableColumns = ctx.displayColumns.value.filter((column) => column.sortable);
1392
+ if (resolvedProps.rowSelection && resolvedProps.rowSelection.type !== "radio" && resolvedProps.rowSelection.showCheckbox !== false && ctx.paginatedData.value.length > 0) {
1393
+ cardChildren.push(
1394
+ h6(
1395
+ "div",
1396
+ {
1397
+ class: "flex items-center justify-between rounded-[var(--tiger-radius-md,0.5rem)] border border-[var(--tiger-border,#e5e7eb)] bg-[var(--tiger-surface,#ffffff)] px-3 py-2"
1398
+ },
1399
+ [
1400
+ h6(
1401
+ Checkbox,
1402
+ {
1403
+ size: "sm",
1404
+ modelValue: ctx.allSelected.value,
1405
+ indeterminate: ctx.someSelected.value,
1406
+ onChange: (checked) => ctx.handleSelectAll(checked)
1407
+ },
1408
+ { default: () => tableLabels.value.selectAllText }
1409
+ )
1410
+ ]
1411
+ )
1310
1412
  );
1311
- const controls = [];
1312
- if (resolvedProps.rowSelection && resolvedProps.rowSelection.showCheckbox !== false) {
1313
- const checkboxProps = resolvedProps.rowSelection.getCheckboxProps?.(record) || {};
1314
- controls.push(
1315
- h6("input", {
1316
- type: resolvedProps.rowSelection.type === "radio" ? "radio" : "checkbox",
1317
- checked: ctx.selectedRowKeySet.value.has(key),
1318
- disabled: checkboxProps.disabled,
1319
- onClick: (event) => event.stopPropagation(),
1320
- onChange: (event) => ctx.handleSelectRow(key, event.target.checked)
1413
+ }
1414
+ if (sortableColumns.length > 0) {
1415
+ cardChildren.push(
1416
+ h6("div", {
1417
+ class: "rounded-[var(--tiger-radius-md,0.5rem)] border border-[var(--tiger-border,#e5e7eb)] bg-[var(--tiger-surface,#ffffff)] px-3 py-2"
1418
+ }, [
1419
+ h6(Select, {
1420
+ size: "sm",
1421
+ modelValue: ctx.sortState.value.key && ctx.sortState.value.direction ? `${ctx.sortState.value.key}:${ctx.sortState.value.direction}` : "",
1422
+ options: [
1423
+ { label: tableLabels.value.clearSortText, value: "" },
1424
+ ...sortableColumns.flatMap((column) => [
1425
+ {
1426
+ label: `${formatTableSortByText(tableLabels.value.sortByText, column.title)} \u2191`,
1427
+ value: `${column.key}:asc`
1428
+ },
1429
+ {
1430
+ label: `${formatTableSortByText(tableLabels.value.sortByText, column.title)} \u2193`,
1431
+ value: `${column.key}:desc`
1432
+ }
1433
+ ])
1434
+ ],
1435
+ clearable: false,
1436
+ "onUpdate:modelValue": (value) => {
1437
+ const nextValue = String(value ?? "");
1438
+ if (!nextValue) {
1439
+ ctx.handleSetSort({ key: null, direction: null });
1440
+ return;
1441
+ }
1442
+ const separatorIndex = nextValue.lastIndexOf(":");
1443
+ const key = nextValue.slice(0, separatorIndex);
1444
+ const direction = nextValue.slice(separatorIndex + 1);
1445
+ ctx.handleSetSort({ key, direction });
1446
+ }
1321
1447
  })
1322
- );
1323
- }
1324
- if (resolvedProps.expandable && isRowExpandable) {
1325
- controls.push(
1326
- h6(
1327
- "button",
1448
+ ])
1449
+ );
1450
+ }
1451
+ if (ctx.paginatedData.value.length === 0) {
1452
+ cardChildren.push(
1453
+ h6("div", { class: tableResponsiveCardClasses }, [
1454
+ h6(Empty, { showImage: false, description: tableLabels.value.emptyText })
1455
+ ])
1456
+ );
1457
+ } else {
1458
+ cardChildren.push(
1459
+ ...ctx.paginatedData.value.map((record, index) => {
1460
+ const key = ctx.paginatedRowKeys.value[index];
1461
+ const isExpanded = ctx.expandedRowKeySet.value.has(key);
1462
+ const isSelected = ctx.selectedRowKeySet.value.has(key);
1463
+ const isRowExpandable = resolvedProps.expandable ? resolvedProps.expandable.rowExpandable ? resolvedProps.expandable.rowExpandable(record) : true : false;
1464
+ const { titleColumn, bodyColumns } = getCardColumns(ctx.displayColumns.value);
1465
+ const renderCardCellContent = (column) => {
1466
+ const dataKey = column.dataKey || column.key;
1467
+ return slots[`cell-${column.key}`]?.({ record, index }) ?? (column.render ? column.render(record, index) : record[dataKey]);
1468
+ };
1469
+ const titleNode = titleColumn ? h6("div", { class: tableResponsiveCardTitleClasses }, [
1470
+ renderCardCellContent(titleColumn)
1471
+ ]) : null;
1472
+ const rows = bodyColumns.map(
1473
+ (column) => h6("div", { key: column.key, class: tableResponsiveCardRowClasses }, [
1474
+ h6("div", { class: tableResponsiveCardLabelClasses }, column.title),
1475
+ h6("div", { class: tableResponsiveCardValueClasses }, [
1476
+ renderCardCellContent(column)
1477
+ ])
1478
+ ])
1479
+ );
1480
+ const controls = [];
1481
+ if (resolvedProps.rowSelection && resolvedProps.rowSelection.showCheckbox !== false) {
1482
+ const checkboxProps = resolvedProps.rowSelection.getCheckboxProps?.(record) || {};
1483
+ controls.push(
1484
+ h6(
1485
+ "span",
1486
+ { onClick: (event) => event.stopPropagation() },
1487
+ [
1488
+ resolvedProps.rowSelection.type === "radio" ? h6(Radio, {
1489
+ value: key,
1490
+ checked: isSelected,
1491
+ disabled: checkboxProps.disabled,
1492
+ "aria-label": formatTableSelectRowAriaLabel(
1493
+ tableLabels.value.selectRowAriaLabel,
1494
+ index + 1,
1495
+ tableLocale.value?.locale
1496
+ ),
1497
+ onChange: () => ctx.handleSelectRow(key, true)
1498
+ }) : h6(Checkbox, {
1499
+ size: "sm",
1500
+ modelValue: isSelected,
1501
+ disabled: checkboxProps.disabled,
1502
+ "aria-label": formatTableSelectRowAriaLabel(
1503
+ tableLabels.value.selectRowAriaLabel,
1504
+ index + 1,
1505
+ tableLocale.value?.locale
1506
+ ),
1507
+ onChange: (checked) => ctx.handleSelectRow(key, checked)
1508
+ })
1509
+ ]
1510
+ )
1511
+ );
1512
+ }
1513
+ if (resolvedProps.expandable && isRowExpandable) {
1514
+ controls.push(
1515
+ h6(
1516
+ "button",
1517
+ {
1518
+ type: "button",
1519
+ class: "text-sm text-[var(--tiger-primary,#2563eb)]",
1520
+ "aria-expanded": isExpanded,
1521
+ onClick: (event) => {
1522
+ event.stopPropagation();
1523
+ ctx.handleToggleExpand(key, record);
1524
+ }
1525
+ },
1526
+ isExpanded ? tableLabels.value.collapseText : tableLabels.value.expandText
1527
+ )
1528
+ );
1529
+ }
1530
+ const expandedContent = resolvedProps.expandable && isExpanded && isRowExpandable ? slots["expanded-row"]?.({ record, index }) ?? resolvedProps.expandable.expandedRowRender?.(record, index) : null;
1531
+ const cardContext = {
1532
+ record,
1533
+ index,
1534
+ columns: ctx.displayColumns.value,
1535
+ selected: isSelected,
1536
+ expanded: isExpanded,
1537
+ toggleExpand: () => ctx.handleToggleExpand(key, record),
1538
+ selectRow: (checked) => ctx.handleSelectRow(key, checked)
1539
+ };
1540
+ const customCard = slots.card?.(cardContext) ?? resolvedProps.renderCard?.(cardContext);
1541
+ const resolvedCardClassName = typeof resolvedProps.cardClassName === "function" ? resolvedProps.cardClassName(record, index) : resolvedProps.cardClassName;
1542
+ return h6(
1543
+ "div",
1328
1544
  {
1329
- type: "button",
1330
- class: "text-sm text-[var(--tiger-primary,#2563eb)]",
1331
- "aria-expanded": isExpanded,
1332
- onClick: (event) => {
1333
- event.stopPropagation();
1334
- ctx.handleToggleExpand(key, record);
1335
- }
1545
+ key,
1546
+ class: classNames3(tableResponsiveCardClasses, resolvedCardClassName),
1547
+ onClick: () => ctx.handleRowClick(record, index, key)
1336
1548
  },
1337
- isExpanded ? "Collapse" : "Expand"
1338
- )
1339
- );
1340
- }
1341
- const expandedContent = resolvedProps.expandable && isExpanded && isRowExpandable ? slots["expanded-row"]?.({ record, index }) ?? resolvedProps.expandable.expandedRowRender?.(record, index) : null;
1342
- return h6(
1343
- "div",
1344
- {
1345
- key,
1346
- class: tableResponsiveCardClasses,
1347
- onClick: () => ctx.handleRowClick(record, index, key)
1348
- },
1349
- [
1350
- controls.length ? h6("div", { class: "mb-2 flex items-center gap-3" }, controls) : null,
1351
- titleNode,
1352
- ...rows,
1353
- expandedContent ? h6(
1354
- "div",
1355
- { class: "mt-3 border-t border-[var(--tiger-border,#e5e7eb)] pt-3" },
1356
- [expandedContent]
1357
- ) : null
1358
- ]
1549
+ customCard !== void 0 && customCard !== null ? [customCard] : [
1550
+ controls.length ? h6("div", { class: "mb-2 flex items-center gap-3" }, controls) : null,
1551
+ titleNode,
1552
+ ...rows,
1553
+ expandedContent ? h6(
1554
+ "div",
1555
+ {
1556
+ class: "mt-3 border-t border-[var(--tiger-border,#e5e7eb)] pt-3"
1557
+ },
1558
+ [expandedContent]
1559
+ ) : null
1560
+ ]
1561
+ );
1562
+ })
1359
1563
  );
1360
- })
1361
- ) : null;
1564
+ }
1565
+ return h6(
1566
+ "div",
1567
+ {
1568
+ class: getTableResponsiveCardListClasses(resolvedProps.cardBreakpoint),
1569
+ "data-tiger-table-mobile": "card"
1570
+ },
1571
+ cardChildren
1572
+ );
1573
+ })();
1362
1574
  return h6(
1363
1575
  "div",
1364
1576
  {
@@ -1393,11 +1605,11 @@ var Table = defineComponent({
1393
1605
  class: tableLoadingOverlayClasses,
1394
1606
  role: "status",
1395
1607
  "aria-live": "polite",
1396
- "aria-label": "Loading"
1608
+ "aria-label": tableLabels.value.loadingText
1397
1609
  },
1398
- [LoadingSpinner(), h6("span", { class: "sr-only" }, "Loading")]
1610
+ [LoadingSpinner(), h6("span", { class: "sr-only" }, tableLabels.value.loadingText)]
1399
1611
  ),
1400
- renderPagination(ctx, resolvedProps, {
1612
+ renderPagination(ctx, renderProps, {
1401
1613
  locale: paginationLocale.value,
1402
1614
  disableI18n: isPaginationI18nDisabled.value
1403
1615
  })