@expcat/tigercat-vue 1.2.43 → 1.2.46

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 (185) hide show
  1. package/dist/{chunk-EWQJGR7E.js → chunk-6WM7E6C4.js} +46 -13
  2. package/dist/{chunk-CHDKJDZQ.mjs → chunk-BIDBJNTL.mjs} +93 -8
  3. package/dist/{chunk-GFQDHFAX.mjs → chunk-OHCC6NNC.mjs} +44 -11
  4. package/dist/{chunk-OFTAQ2A4.js → chunk-PXSV3J2H.js} +93 -8
  5. package/dist/components/ActivityFeed.d.mts +6 -6
  6. package/dist/components/ActivityFeed.d.ts +6 -6
  7. package/dist/components/Alert.d.mts +3 -3
  8. package/dist/components/Alert.d.ts +3 -3
  9. package/dist/components/Anchor.d.mts +1 -1
  10. package/dist/components/Anchor.d.ts +1 -1
  11. package/dist/components/AreaChart.d.mts +2 -2
  12. package/dist/components/AreaChart.d.ts +2 -2
  13. package/dist/components/AutoComplete.d.mts +2 -2
  14. package/dist/components/AutoComplete.d.ts +2 -2
  15. package/dist/components/Avatar.d.mts +1 -1
  16. package/dist/components/Avatar.d.ts +1 -1
  17. package/dist/components/Badge.d.mts +3 -3
  18. package/dist/components/Badge.d.ts +3 -3
  19. package/dist/components/BarChart.d.mts +1 -1
  20. package/dist/components/BarChart.d.ts +1 -1
  21. package/dist/components/Breadcrumb.d.mts +2 -2
  22. package/dist/components/Breadcrumb.d.ts +2 -2
  23. package/dist/components/Button.d.mts +3 -3
  24. package/dist/components/Button.d.ts +3 -3
  25. package/dist/components/ButtonGroup.d.mts +1 -1
  26. package/dist/components/ButtonGroup.d.ts +1 -1
  27. package/dist/components/Calendar.d.mts +1 -1
  28. package/dist/components/Calendar.d.ts +1 -1
  29. package/dist/components/Card.d.mts +2 -2
  30. package/dist/components/Card.d.ts +2 -2
  31. package/dist/components/ChartGrid.d.mts +1 -1
  32. package/dist/components/ChartGrid.d.ts +1 -1
  33. package/dist/components/ChatWindow.d.mts +3 -3
  34. package/dist/components/ChatWindow.d.ts +3 -3
  35. package/dist/components/CodeEditor.d.mts +2 -2
  36. package/dist/components/CodeEditor.d.ts +2 -2
  37. package/dist/components/Collapse.d.mts +1 -1
  38. package/dist/components/Collapse.d.ts +1 -1
  39. package/dist/components/CollapsePanel.d.mts +1 -1
  40. package/dist/components/CollapsePanel.d.ts +1 -1
  41. package/dist/components/ColorSwatch.d.mts +1 -1
  42. package/dist/components/ColorSwatch.d.ts +1 -1
  43. package/dist/components/CommentThread.d.mts +2 -2
  44. package/dist/components/CommentThread.d.ts +2 -2
  45. package/dist/components/ConfigProvider.d.mts +1 -1
  46. package/dist/components/ConfigProvider.d.ts +1 -1
  47. package/dist/components/DataTableWithToolbar.d.mts +33 -14
  48. package/dist/components/DataTableWithToolbar.d.ts +33 -14
  49. package/dist/components/DataTableWithToolbar.js +3 -3
  50. package/dist/components/DataTableWithToolbar.mjs +2 -2
  51. package/dist/components/DatePicker.d.mts +2 -2
  52. package/dist/components/DatePicker.d.ts +2 -2
  53. package/dist/components/Descriptions.d.mts +2 -2
  54. package/dist/components/Descriptions.d.ts +2 -2
  55. package/dist/components/DonutChart.d.mts +2 -2
  56. package/dist/components/DonutChart.d.ts +2 -2
  57. package/dist/components/Drawer.d.mts +5 -5
  58. package/dist/components/Drawer.d.ts +5 -5
  59. package/dist/components/FileManager.d.mts +1 -1
  60. package/dist/components/FileManager.d.ts +1 -1
  61. package/dist/components/FloatButton.d.mts +3 -3
  62. package/dist/components/FloatButton.d.ts +3 -3
  63. package/dist/components/Form.d.mts +1 -1
  64. package/dist/components/Form.d.ts +1 -1
  65. package/dist/components/FormWizard.d.mts +5 -5
  66. package/dist/components/FormWizard.d.ts +5 -5
  67. package/dist/components/FunnelChart.d.mts +1 -1
  68. package/dist/components/FunnelChart.d.ts +1 -1
  69. package/dist/components/Gantt.d.mts +1 -1
  70. package/dist/components/Gantt.d.ts +1 -1
  71. package/dist/components/GaugeChart.d.mts +1 -1
  72. package/dist/components/GaugeChart.d.ts +1 -1
  73. package/dist/components/HeatmapChart.d.mts +2 -2
  74. package/dist/components/HeatmapChart.d.ts +2 -2
  75. package/dist/components/Image.d.mts +2 -2
  76. package/dist/components/Image.d.ts +2 -2
  77. package/dist/components/ImageAnnotation.d.mts +4 -4
  78. package/dist/components/ImageAnnotation.d.ts +4 -4
  79. package/dist/components/InfiniteScroll.d.mts +2 -2
  80. package/dist/components/InfiniteScroll.d.ts +2 -2
  81. package/dist/components/Input.d.mts +4 -4
  82. package/dist/components/Input.d.ts +4 -4
  83. package/dist/components/InputGroup.d.mts +1 -1
  84. package/dist/components/InputGroup.d.ts +1 -1
  85. package/dist/components/InputNumber.d.mts +1 -1
  86. package/dist/components/InputNumber.d.ts +1 -1
  87. package/dist/components/Kanban.d.mts +1 -1
  88. package/dist/components/Kanban.d.ts +1 -1
  89. package/dist/components/LineChart.d.mts +2 -2
  90. package/dist/components/LineChart.d.ts +2 -2
  91. package/dist/components/Link.d.mts +1 -1
  92. package/dist/components/Link.d.ts +1 -1
  93. package/dist/components/List.d.mts +6 -6
  94. package/dist/components/List.d.ts +6 -6
  95. package/dist/components/Loading.d.mts +5 -5
  96. package/dist/components/Loading.d.ts +5 -5
  97. package/dist/components/MarkdownEditor.d.mts +2 -2
  98. package/dist/components/MarkdownEditor.d.ts +2 -2
  99. package/dist/components/Mentions.d.mts +2 -2
  100. package/dist/components/Mentions.d.ts +2 -2
  101. package/dist/components/Menu.d.mts +5 -5
  102. package/dist/components/Menu.d.ts +5 -5
  103. package/dist/components/Modal.d.mts +8 -8
  104. package/dist/components/Modal.d.ts +8 -8
  105. package/dist/components/NotificationCenter.d.mts +5 -5
  106. package/dist/components/NotificationCenter.d.ts +5 -5
  107. package/dist/components/NumberKeyboard.d.mts +2 -2
  108. package/dist/components/NumberKeyboard.d.ts +2 -2
  109. package/dist/components/OrgChart.d.mts +1 -1
  110. package/dist/components/OrgChart.d.ts +1 -1
  111. package/dist/components/Pagination.d.mts +4 -4
  112. package/dist/components/Pagination.d.ts +4 -4
  113. package/dist/components/PieChart.d.mts +2 -2
  114. package/dist/components/PieChart.d.ts +2 -2
  115. package/dist/components/Popconfirm.d.mts +2 -2
  116. package/dist/components/Popconfirm.d.ts +2 -2
  117. package/dist/components/Popover.d.mts +1 -1
  118. package/dist/components/Popover.d.ts +1 -1
  119. package/dist/components/Progress.d.mts +3 -3
  120. package/dist/components/Progress.d.ts +3 -3
  121. package/dist/components/QRCode.d.mts +1 -1
  122. package/dist/components/QRCode.d.ts +1 -1
  123. package/dist/components/RadarChart.d.mts +2 -2
  124. package/dist/components/RadarChart.d.ts +2 -2
  125. package/dist/components/RichTextEditor.d.mts +1 -1
  126. package/dist/components/RichTextEditor.d.ts +1 -1
  127. package/dist/components/Row.d.mts +1 -1
  128. package/dist/components/Row.d.ts +1 -1
  129. package/dist/components/ScatterChart.d.mts +1 -1
  130. package/dist/components/ScatterChart.d.ts +1 -1
  131. package/dist/components/ScrollSpy.d.mts +2 -2
  132. package/dist/components/ScrollSpy.d.ts +2 -2
  133. package/dist/components/Select.d.mts +1 -1
  134. package/dist/components/Select.d.ts +1 -1
  135. package/dist/components/Signature.d.mts +2 -2
  136. package/dist/components/Signature.d.ts +2 -2
  137. package/dist/components/Skeleton.d.mts +1 -1
  138. package/dist/components/Skeleton.d.ts +1 -1
  139. package/dist/components/Space.d.mts +2 -2
  140. package/dist/components/Space.d.ts +2 -2
  141. package/dist/components/Splitter.d.mts +1 -1
  142. package/dist/components/Splitter.d.ts +1 -1
  143. package/dist/components/Spotlight.d.mts +4 -4
  144. package/dist/components/Spotlight.d.ts +4 -4
  145. package/dist/components/Steps.d.mts +2 -2
  146. package/dist/components/Steps.d.ts +2 -2
  147. package/dist/components/SunburstChart.d.mts +1 -1
  148. package/dist/components/SunburstChart.d.ts +1 -1
  149. package/dist/components/Table.d.mts +16 -6
  150. package/dist/components/Table.d.ts +16 -6
  151. package/dist/components/Table.js +2 -2
  152. package/dist/components/Table.mjs +1 -1
  153. package/dist/components/Tabs.d.mts +2 -2
  154. package/dist/components/Tabs.d.ts +2 -2
  155. package/dist/components/Tag.d.mts +1 -1
  156. package/dist/components/Tag.d.ts +1 -1
  157. package/dist/components/TaskBoard.d.mts +2 -2
  158. package/dist/components/TaskBoard.d.ts +2 -2
  159. package/dist/components/Text.d.mts +3 -3
  160. package/dist/components/Text.d.ts +3 -3
  161. package/dist/components/Textarea.d.mts +1 -1
  162. package/dist/components/Textarea.d.ts +1 -1
  163. package/dist/components/TimePicker.d.mts +3 -3
  164. package/dist/components/TimePicker.d.ts +3 -3
  165. package/dist/components/Timeline.d.mts +3 -3
  166. package/dist/components/Timeline.d.ts +3 -3
  167. package/dist/components/Tooltip.d.mts +1 -1
  168. package/dist/components/Tooltip.d.ts +1 -1
  169. package/dist/components/Tour.d.mts +2 -2
  170. package/dist/components/Tour.d.ts +2 -2
  171. package/dist/components/Tree.d.mts +2 -2
  172. package/dist/components/Tree.d.ts +2 -2
  173. package/dist/components/TreeMapChart.d.mts +1 -1
  174. package/dist/components/TreeMapChart.d.ts +1 -1
  175. package/dist/components/Upload.d.mts +4 -4
  176. package/dist/components/Upload.d.ts +4 -4
  177. package/dist/components/VirtualTable.d.mts +2 -2
  178. package/dist/components/VirtualTable.d.ts +2 -2
  179. package/dist/components/Watermark.d.mts +1 -1
  180. package/dist/components/Watermark.d.ts +1 -1
  181. package/dist/index.d.mts +1 -1
  182. package/dist/index.d.ts +1 -1
  183. package/dist/index.js +3 -3
  184. package/dist/index.mjs +2 -2
  185. package/package.json +2 -2
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } 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 _chunkOFTAQ2A4js = require('./chunk-OFTAQ2A4.js');
3
+ var _chunkPXSV3J2Hjs = require('./chunk-PXSV3J2H.js');
4
4
 
5
5
 
6
6
  var _chunkBGMAWKWVjs = require('./chunk-BGMAWKWV.js');
@@ -139,6 +139,10 @@ var DataTableWithToolbar = _vue.defineComponent.call(void 0, {
139
139
  type: String,
140
140
  default: "sm"
141
141
  },
142
+ cardLayout: {
143
+ type: Array,
144
+ default: void 0
145
+ },
142
146
  toolbar: {
143
147
  type: Object,
144
148
  default: void 0
@@ -171,7 +175,7 @@ var DataTableWithToolbar = _vue.defineComponent.call(void 0, {
171
175
  "update:hiddenColumnKeys": (_hiddenKeys) => true,
172
176
  "hidden-columns-change": (_hiddenKeys) => true
173
177
  },
174
- setup(props, { attrs, emit }) {
178
+ setup(props, { attrs, emit, slots }) {
175
179
  const config = _chunk25EYT2CBjs.useTigerConfig.call(void 0, );
176
180
  const internalSearch = _vue.ref.call(void 0, _nullishCoalesce(_optionalChain([props, 'access', _ => _.toolbar, 'optionalAccess', _2 => _2.defaultSearchValue]), () => ( "")));
177
181
  const internalHiddenKeys = _vue.ref.call(void 0,
@@ -254,7 +258,7 @@ var DataTableWithToolbar = _vue.defineComponent.call(void 0, {
254
258
  () => _optionalChain([props, 'access', _9 => _9.toolbar, 'optionalAccess', _10 => _10.searchValue]) !== void 0 ? props.toolbar.searchValue : internalSearch.value
255
259
  );
256
260
  const resolvedFilters = _vue.computed.call(void 0, () => {
257
- const next = {};
261
+ const next = { ...internalFilters.value };
258
262
  _optionalChain([props, 'access', _11 => _11.toolbar, 'optionalAccess', _12 => _12.filters, 'optionalAccess', _13 => _13.forEach, 'call', _14 => _14((filter) => {
259
263
  next[filter.key] = filter.value !== void 0 ? filter.value : _nullishCoalesce(_nullishCoalesce(internalFilters.value[filter.key], () => ( filter.defaultValue)), () => ( null));
260
264
  })]);
@@ -267,6 +271,7 @@ var DataTableWithToolbar = _vue.defineComponent.call(void 0, {
267
271
  );
268
272
  });
269
273
  const hasFilters = _vue.computed.call(void 0, () => Boolean(_optionalChain([props, 'access', _15 => _15.toolbar, 'optionalAccess', _16 => _16.filters, 'optionalAccess', _17 => _17.length])));
274
+ const hasFiltersExtra = _vue.computed.call(void 0, () => Boolean(slots["filters-extra"]));
270
275
  const hasBulkActions = _vue.computed.call(void 0, () => Boolean(_optionalChain([props, 'access', _18 => _18.toolbar, 'optionalAccess', _19 => _19.bulkActions, 'optionalAccess', _20 => _20.length])));
271
276
  const hasColumnSettings = _vue.computed.call(void 0, () => Boolean(_optionalChain([props, 'access', _21 => _21.toolbar, 'optionalAccess', _22 => _22.showColumnSettings])));
272
277
  const resolvedHiddenKeys = _vue.computed.call(void 0, () => _nullishCoalesce(props.hiddenColumnKeys, () => ( internalHiddenKeys.value)));
@@ -309,19 +314,22 @@ var DataTableWithToolbar = _vue.defineComponent.call(void 0, {
309
314
  const handleSearchSubmit = () => {
310
315
  emit("search", _nullishCoalesce(searchValue.value, () => ( "")));
311
316
  };
312
- const handleFilterSelect = (filter, value) => {
317
+ const setFilterValue = (key, value, filter) => {
313
318
  const nextFilters = {
314
319
  ...resolvedFilters.value,
315
- [filter.key]: value
320
+ [key]: value
316
321
  };
317
- if (filter.value === void 0) {
322
+ if (!filter || filter.value === void 0) {
318
323
  internalFilters.value = {
319
324
  ...internalFilters.value,
320
- [filter.key]: value
325
+ [key]: value
321
326
  };
322
327
  }
323
328
  emit("filters-change", nextFilters);
324
329
  };
330
+ const handleFilterSelect = (filter, value) => {
331
+ setFilterValue(filter.key, value, filter);
332
+ };
325
333
  const handleBulkAction = (action) => {
326
334
  const keys = _nullishCoalesce(selectedKeys.value, () => ( []));
327
335
  _optionalChain([action, 'access', _33 => _33.onClick, 'optionalCall', _34 => _34(keys)]);
@@ -404,7 +412,7 @@ var DataTableWithToolbar = _vue.defineComponent.call(void 0, {
404
412
  );
405
413
  };
406
414
  const renderToolbar = () => {
407
- if (!hasSearch.value && !hasFilters.value && !hasBulkActions.value && !hasColumnSettings.value)
415
+ if (!hasSearch.value && !hasFilters.value && !hasFiltersExtra.value && !hasBulkActions.value && !hasColumnSettings.value)
408
416
  return null;
409
417
  const leftNodes = [];
410
418
  if (hasSearch.value) {
@@ -470,15 +478,32 @@ var DataTableWithToolbar = _vue.defineComponent.call(void 0, {
470
478
  _optionalChain([props, 'access', _47 => _47.toolbar, 'optionalAccess', _48 => _48.filters, 'optionalAccess', _49 => _49.forEach, 'call', _50 => _50((filter) => {
471
479
  const currentValue = resolvedFilters.value[filter.key];
472
480
  const clearable = filter.clearable !== false;
481
+ if (filter.render) {
482
+ const filterNode = filter.render({
483
+ filter,
484
+ value: currentValue,
485
+ filters: resolvedFilters.value,
486
+ setValue: (value) => setFilterValue(filter.key, value, filter),
487
+ setFilter: (key, value) => setFilterValue(key, value)
488
+ });
489
+ leftNodes.push(
490
+ _vue.h.call(void 0,
491
+ "div",
492
+ { key: filter.key, class: "w-full sm:w-auto" },
493
+ filterNode == null ? [] : [filterNode]
494
+ )
495
+ );
496
+ return;
497
+ }
473
498
  leftNodes.push(
474
- _vue.h.call(void 0, "div", { class: "w-full sm:w-auto sm:min-w-[120px] sm:max-w-[180px]" }, [
499
+ _vue.h.call(void 0, "div", { key: filter.key, class: "w-full sm:w-auto sm:min-w-[120px] sm:max-w-[180px]" }, [
475
500
  _vue.h.call(void 0, _chunkBGMAWKWVjs.Select, {
476
501
  size: "sm",
477
- options: filter.options.map((opt) => ({
502
+ options: (_nullishCoalesce(filter.options, () => ( []))).map((opt) => ({
478
503
  label: opt.label,
479
504
  value: opt.value
480
505
  })),
481
- modelValue: _nullishCoalesce(currentValue, () => ( void 0)),
506
+ modelValue: typeof currentValue === "string" || typeof currentValue === "number" ? currentValue : void 0,
482
507
  placeholder: _nullishCoalesce(filter.placeholder, () => ( filter.label)),
483
508
  clearable,
484
509
  "onUpdate:modelValue": (value) => {
@@ -489,6 +514,13 @@ var DataTableWithToolbar = _vue.defineComponent.call(void 0, {
489
514
  );
490
515
  })]);
491
516
  }
517
+ const filtersExtra = _optionalChain([slots, 'access', _51 => _51["filters-extra"], 'optionalCall', _52 => _52({
518
+ filters: resolvedFilters.value,
519
+ setFilter: (key, value) => setFilterValue(key, value)
520
+ })]);
521
+ if (_optionalChain([filtersExtra, 'optionalAccess', _53 => _53.length])) {
522
+ leftNodes.push(...filtersExtra);
523
+ }
492
524
  const bulkChildren = [];
493
525
  if (hasBulkActions.value) {
494
526
  if (selectedCount.value > 0) {
@@ -512,7 +544,7 @@ var DataTableWithToolbar = _vue.defineComponent.call(void 0, {
512
544
  );
513
545
  }
514
546
  ;
515
- (_nullishCoalesce(_optionalChain([props, 'access', _51 => _51.toolbar, 'optionalAccess', _52 => _52.bulkActions]), () => ( []))).forEach((action) => {
547
+ (_nullishCoalesce(_optionalChain([props, 'access', _54 => _54.toolbar, 'optionalAccess', _55 => _55.bulkActions]), () => ( []))).forEach((action) => {
516
548
  bulkChildren.push(
517
549
  _vue.h.call(void 0,
518
550
  _chunk4VLNT2EDjs.Button,
@@ -580,6 +612,7 @@ var DataTableWithToolbar = _vue.defineComponent.call(void 0, {
580
612
  tableLayout: props.tableLayout,
581
613
  responsiveMode: props.responsiveMode,
582
614
  cardBreakpoint: props.cardBreakpoint,
615
+ cardLayout: props.cardLayout,
583
616
  class: props.bordered ? "border-none rounded-none shadow-none" : void 0,
584
617
  onSelectionChange: (keys) => emit("selection-change", keys),
585
618
  onPageChange: handleTablePageChange
@@ -591,7 +624,7 @@ var DataTableWithToolbar = _vue.defineComponent.call(void 0, {
591
624
  style: wrapperStyle.value,
592
625
  "data-tiger-data-table-with-toolbar": ""
593
626
  },
594
- [renderToolbar(), _vue.h.call(void 0, _chunkOFTAQ2A4js.Table, tableProps)]
627
+ [renderToolbar(), _vue.h.call(void 0, _chunkPXSV3J2Hjs.Table, tableProps)]
595
628
  );
596
629
  };
597
630
  }
@@ -30,6 +30,7 @@ import {
30
30
  formatTableSelectRowAriaLabel,
31
31
  formatTableSortByText,
32
32
  getCardColumns,
33
+ getCardGridInfo,
33
34
  getImmediateTigerLocale,
34
35
  getTableLabels,
35
36
  getTableWrapperClasses,
@@ -184,7 +185,11 @@ var tableProps = {
184
185
  groupBy: { type: String },
185
186
  exportable: { type: Boolean, default: false },
186
187
  exportFormat: { type: String, default: "csv" },
187
- exportFilename: { type: String, default: "export" }
188
+ exportFilename: { type: String, default: "export" },
189
+ cardLayout: {
190
+ type: Array,
191
+ default: void 0
192
+ }
188
193
  };
189
194
  var tableEmits = [
190
195
  "change",
@@ -1321,6 +1326,18 @@ var Table = defineComponent({
1321
1326
  const overrides = props.emptyText === void 0 ? props.labels : { ...props.labels, emptyText: props.emptyText };
1322
1327
  return getTableLabels(tableLocale.value, overrides);
1323
1328
  });
1329
+ const cardLayoutMap = computed2(() => {
1330
+ const map = /* @__PURE__ */ new Map();
1331
+ if (props.cardLayout) {
1332
+ for (const item of props.cardLayout) {
1333
+ map.set(item.key, item);
1334
+ }
1335
+ }
1336
+ return map;
1337
+ });
1338
+ const hasCustomCardLayout = computed2(() => {
1339
+ return ctx.displayColumns.value.some((col) => col.cardGrid) || props.cardLayout && props.cardLayout.length > 0;
1340
+ });
1324
1341
  const resizeController = createTableResizeObserverController({
1325
1342
  onResize: (snapshot) => {
1326
1343
  if (!areNumberRecordsEqual(measuredColumnWidths.value, snapshot.columnWidths)) {
@@ -1469,13 +1486,81 @@ var Table = defineComponent({
1469
1486
  const titleNode = titleColumn ? h6("div", { class: tableResponsiveCardTitleClasses }, [
1470
1487
  renderCardCellContent(titleColumn)
1471
1488
  ]) : 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
- ])
1489
+ const rows = hasCustomCardLayout.value ? [
1490
+ h6(
1491
+ "div",
1492
+ { class: "grid grid-cols-12 gap-3 mt-2" },
1493
+ bodyColumns.map((column) => {
1494
+ const layoutItem = cardLayoutMap.value.get(column.key);
1495
+ const gridInfo = getCardGridInfo(column, layoutItem);
1496
+ if (gridInfo.hideLabel) {
1497
+ return h6(
1498
+ "div",
1499
+ { key: column.key, class: gridInfo.className },
1500
+ [renderCardCellContent(column)]
1501
+ );
1502
+ }
1503
+ if (gridInfo.labelPosition === "top") {
1504
+ return h6(
1505
+ "div",
1506
+ { key: column.key, class: gridInfo.className },
1507
+ [
1508
+ h6(
1509
+ "div",
1510
+ {
1511
+ class: "text-xs font-medium uppercase tracking-wider text-[var(--tiger-text-muted,#6b7280)] mb-1"
1512
+ },
1513
+ column.title
1514
+ ),
1515
+ h6(
1516
+ "div",
1517
+ {
1518
+ class: "min-w-0 text-sm text-[var(--tiger-text,#111827)] break-words"
1519
+ },
1520
+ [renderCardCellContent(column)]
1521
+ )
1522
+ ]
1523
+ );
1524
+ }
1525
+ return h6(
1526
+ "div",
1527
+ {
1528
+ key: column.key,
1529
+ class: classNames3(
1530
+ gridInfo.className,
1531
+ "grid grid-cols-[auto_1fr] gap-2 items-baseline"
1532
+ )
1533
+ },
1534
+ [
1535
+ h6(
1536
+ "div",
1537
+ {
1538
+ class: "text-xs font-medium uppercase tracking-wider text-[var(--tiger-text-muted,#6b7280)] shrink-0"
1539
+ },
1540
+ column.title
1541
+ ),
1542
+ h6(
1543
+ "div",
1544
+ {
1545
+ class: "min-w-0 text-sm text-[var(--tiger-text,#111827)] break-words"
1546
+ },
1547
+ [renderCardCellContent(column)]
1548
+ )
1549
+ ]
1550
+ );
1551
+ })
1552
+ )
1553
+ ] : bodyColumns.map(
1554
+ (column) => h6(
1555
+ "div",
1556
+ { key: column.key, class: tableResponsiveCardRowClasses },
1557
+ [
1558
+ h6("div", { class: tableResponsiveCardLabelClasses }, column.title),
1559
+ h6("div", { class: tableResponsiveCardValueClasses }, [
1560
+ renderCardCellContent(column)
1561
+ ])
1562
+ ]
1563
+ )
1479
1564
  );
1480
1565
  const controls = [];
1481
1566
  if (resolvedProps.rowSelection && resolvedProps.rowSelection.showCheckbox !== false) {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Table
3
- } from "./chunk-CHDKJDZQ.mjs";
3
+ } from "./chunk-BIDBJNTL.mjs";
4
4
  import {
5
5
  Select
6
6
  } from "./chunk-PYT5DTQQ.mjs";
@@ -139,6 +139,10 @@ var DataTableWithToolbar = defineComponent({
139
139
  type: String,
140
140
  default: "sm"
141
141
  },
142
+ cardLayout: {
143
+ type: Array,
144
+ default: void 0
145
+ },
142
146
  toolbar: {
143
147
  type: Object,
144
148
  default: void 0
@@ -171,7 +175,7 @@ var DataTableWithToolbar = defineComponent({
171
175
  "update:hiddenColumnKeys": (_hiddenKeys) => true,
172
176
  "hidden-columns-change": (_hiddenKeys) => true
173
177
  },
174
- setup(props, { attrs, emit }) {
178
+ setup(props, { attrs, emit, slots }) {
175
179
  const config = useTigerConfig();
176
180
  const internalSearch = ref(props.toolbar?.defaultSearchValue ?? "");
177
181
  const internalHiddenKeys = ref(
@@ -254,7 +258,7 @@ var DataTableWithToolbar = defineComponent({
254
258
  () => props.toolbar?.searchValue !== void 0 ? props.toolbar.searchValue : internalSearch.value
255
259
  );
256
260
  const resolvedFilters = computed(() => {
257
- const next = {};
261
+ const next = { ...internalFilters.value };
258
262
  props.toolbar?.filters?.forEach((filter) => {
259
263
  next[filter.key] = filter.value !== void 0 ? filter.value : internalFilters.value[filter.key] ?? filter.defaultValue ?? null;
260
264
  });
@@ -267,6 +271,7 @@ var DataTableWithToolbar = defineComponent({
267
271
  );
268
272
  });
269
273
  const hasFilters = computed(() => Boolean(props.toolbar?.filters?.length));
274
+ const hasFiltersExtra = computed(() => Boolean(slots["filters-extra"]));
270
275
  const hasBulkActions = computed(() => Boolean(props.toolbar?.bulkActions?.length));
271
276
  const hasColumnSettings = computed(() => Boolean(props.toolbar?.showColumnSettings));
272
277
  const resolvedHiddenKeys = computed(() => props.hiddenColumnKeys ?? internalHiddenKeys.value);
@@ -309,19 +314,22 @@ var DataTableWithToolbar = defineComponent({
309
314
  const handleSearchSubmit = () => {
310
315
  emit("search", searchValue.value ?? "");
311
316
  };
312
- const handleFilterSelect = (filter, value) => {
317
+ const setFilterValue = (key, value, filter) => {
313
318
  const nextFilters = {
314
319
  ...resolvedFilters.value,
315
- [filter.key]: value
320
+ [key]: value
316
321
  };
317
- if (filter.value === void 0) {
322
+ if (!filter || filter.value === void 0) {
318
323
  internalFilters.value = {
319
324
  ...internalFilters.value,
320
- [filter.key]: value
325
+ [key]: value
321
326
  };
322
327
  }
323
328
  emit("filters-change", nextFilters);
324
329
  };
330
+ const handleFilterSelect = (filter, value) => {
331
+ setFilterValue(filter.key, value, filter);
332
+ };
325
333
  const handleBulkAction = (action) => {
326
334
  const keys = selectedKeys.value ?? [];
327
335
  action.onClick?.(keys);
@@ -404,7 +412,7 @@ var DataTableWithToolbar = defineComponent({
404
412
  );
405
413
  };
406
414
  const renderToolbar = () => {
407
- if (!hasSearch.value && !hasFilters.value && !hasBulkActions.value && !hasColumnSettings.value)
415
+ if (!hasSearch.value && !hasFilters.value && !hasFiltersExtra.value && !hasBulkActions.value && !hasColumnSettings.value)
408
416
  return null;
409
417
  const leftNodes = [];
410
418
  if (hasSearch.value) {
@@ -470,15 +478,32 @@ var DataTableWithToolbar = defineComponent({
470
478
  props.toolbar?.filters?.forEach((filter) => {
471
479
  const currentValue = resolvedFilters.value[filter.key];
472
480
  const clearable = filter.clearable !== false;
481
+ if (filter.render) {
482
+ const filterNode = filter.render({
483
+ filter,
484
+ value: currentValue,
485
+ filters: resolvedFilters.value,
486
+ setValue: (value) => setFilterValue(filter.key, value, filter),
487
+ setFilter: (key, value) => setFilterValue(key, value)
488
+ });
489
+ leftNodes.push(
490
+ h(
491
+ "div",
492
+ { key: filter.key, class: "w-full sm:w-auto" },
493
+ filterNode == null ? [] : [filterNode]
494
+ )
495
+ );
496
+ return;
497
+ }
473
498
  leftNodes.push(
474
- h("div", { class: "w-full sm:w-auto sm:min-w-[120px] sm:max-w-[180px]" }, [
499
+ h("div", { key: filter.key, class: "w-full sm:w-auto sm:min-w-[120px] sm:max-w-[180px]" }, [
475
500
  h(Select, {
476
501
  size: "sm",
477
- options: filter.options.map((opt) => ({
502
+ options: (filter.options ?? []).map((opt) => ({
478
503
  label: opt.label,
479
504
  value: opt.value
480
505
  })),
481
- modelValue: currentValue ?? void 0,
506
+ modelValue: typeof currentValue === "string" || typeof currentValue === "number" ? currentValue : void 0,
482
507
  placeholder: filter.placeholder ?? filter.label,
483
508
  clearable,
484
509
  "onUpdate:modelValue": (value) => {
@@ -489,6 +514,13 @@ var DataTableWithToolbar = defineComponent({
489
514
  );
490
515
  });
491
516
  }
517
+ const filtersExtra = slots["filters-extra"]?.({
518
+ filters: resolvedFilters.value,
519
+ setFilter: (key, value) => setFilterValue(key, value)
520
+ });
521
+ if (filtersExtra?.length) {
522
+ leftNodes.push(...filtersExtra);
523
+ }
492
524
  const bulkChildren = [];
493
525
  if (hasBulkActions.value) {
494
526
  if (selectedCount.value > 0) {
@@ -580,6 +612,7 @@ var DataTableWithToolbar = defineComponent({
580
612
  tableLayout: props.tableLayout,
581
613
  responsiveMode: props.responsiveMode,
582
614
  cardBreakpoint: props.cardBreakpoint,
615
+ cardLayout: props.cardLayout,
583
616
  class: props.bordered ? "border-none rounded-none shadow-none" : void 0,
584
617
  onSelectionChange: (keys) => emit("selection-change", keys),
585
618
  onPageChange: handleTablePageChange
@@ -44,6 +44,7 @@ var _vue = require('vue');
44
44
 
45
45
 
46
46
 
47
+
47
48
 
48
49
 
49
50
  var _tigercatcore = require('@expcat/tigercat-core');
@@ -184,7 +185,11 @@ var tableProps = {
184
185
  groupBy: { type: String },
185
186
  exportable: { type: Boolean, default: false },
186
187
  exportFormat: { type: String, default: "csv" },
187
- exportFilename: { type: String, default: "export" }
188
+ exportFilename: { type: String, default: "export" },
189
+ cardLayout: {
190
+ type: Array,
191
+ default: void 0
192
+ }
188
193
  };
189
194
  var tableEmits = [
190
195
  "change",
@@ -1321,6 +1326,18 @@ var Table = _vue.defineComponent.call(void 0, {
1321
1326
  const overrides = props.emptyText === void 0 ? props.labels : { ...props.labels, emptyText: props.emptyText };
1322
1327
  return _tigercatcore.getTableLabels.call(void 0, tableLocale.value, overrides);
1323
1328
  });
1329
+ const cardLayoutMap = _vue.computed.call(void 0, () => {
1330
+ const map = /* @__PURE__ */ new Map();
1331
+ if (props.cardLayout) {
1332
+ for (const item of props.cardLayout) {
1333
+ map.set(item.key, item);
1334
+ }
1335
+ }
1336
+ return map;
1337
+ });
1338
+ const hasCustomCardLayout = _vue.computed.call(void 0, () => {
1339
+ return ctx.displayColumns.value.some((col) => col.cardGrid) || props.cardLayout && props.cardLayout.length > 0;
1340
+ });
1324
1341
  const resizeController = _tigercatcore.createTableResizeObserverController.call(void 0, {
1325
1342
  onResize: (snapshot) => {
1326
1343
  if (!areNumberRecordsEqual(measuredColumnWidths.value, snapshot.columnWidths)) {
@@ -1469,13 +1486,81 @@ var Table = _vue.defineComponent.call(void 0, {
1469
1486
  const titleNode = titleColumn ? _vue.h.call(void 0, "div", { class: _tigercatcore.tableResponsiveCardTitleClasses }, [
1470
1487
  renderCardCellContent(titleColumn)
1471
1488
  ]) : null;
1472
- const rows = bodyColumns.map(
1473
- (column) => _vue.h.call(void 0, "div", { key: column.key, class: _tigercatcore.tableResponsiveCardRowClasses }, [
1474
- _vue.h.call(void 0, "div", { class: _tigercatcore.tableResponsiveCardLabelClasses }, column.title),
1475
- _vue.h.call(void 0, "div", { class: _tigercatcore.tableResponsiveCardValueClasses }, [
1476
- renderCardCellContent(column)
1477
- ])
1478
- ])
1489
+ const rows = hasCustomCardLayout.value ? [
1490
+ _vue.h.call(void 0,
1491
+ "div",
1492
+ { class: "grid grid-cols-12 gap-3 mt-2" },
1493
+ bodyColumns.map((column) => {
1494
+ const layoutItem = cardLayoutMap.value.get(column.key);
1495
+ const gridInfo = _tigercatcore.getCardGridInfo.call(void 0, column, layoutItem);
1496
+ if (gridInfo.hideLabel) {
1497
+ return _vue.h.call(void 0,
1498
+ "div",
1499
+ { key: column.key, class: gridInfo.className },
1500
+ [renderCardCellContent(column)]
1501
+ );
1502
+ }
1503
+ if (gridInfo.labelPosition === "top") {
1504
+ return _vue.h.call(void 0,
1505
+ "div",
1506
+ { key: column.key, class: gridInfo.className },
1507
+ [
1508
+ _vue.h.call(void 0,
1509
+ "div",
1510
+ {
1511
+ class: "text-xs font-medium uppercase tracking-wider text-[var(--tiger-text-muted,#6b7280)] mb-1"
1512
+ },
1513
+ column.title
1514
+ ),
1515
+ _vue.h.call(void 0,
1516
+ "div",
1517
+ {
1518
+ class: "min-w-0 text-sm text-[var(--tiger-text,#111827)] break-words"
1519
+ },
1520
+ [renderCardCellContent(column)]
1521
+ )
1522
+ ]
1523
+ );
1524
+ }
1525
+ return _vue.h.call(void 0,
1526
+ "div",
1527
+ {
1528
+ key: column.key,
1529
+ class: _tigercatcore.classNames.call(void 0,
1530
+ gridInfo.className,
1531
+ "grid grid-cols-[auto_1fr] gap-2 items-baseline"
1532
+ )
1533
+ },
1534
+ [
1535
+ _vue.h.call(void 0,
1536
+ "div",
1537
+ {
1538
+ class: "text-xs font-medium uppercase tracking-wider text-[var(--tiger-text-muted,#6b7280)] shrink-0"
1539
+ },
1540
+ column.title
1541
+ ),
1542
+ _vue.h.call(void 0,
1543
+ "div",
1544
+ {
1545
+ class: "min-w-0 text-sm text-[var(--tiger-text,#111827)] break-words"
1546
+ },
1547
+ [renderCardCellContent(column)]
1548
+ )
1549
+ ]
1550
+ );
1551
+ })
1552
+ )
1553
+ ] : bodyColumns.map(
1554
+ (column) => _vue.h.call(void 0,
1555
+ "div",
1556
+ { key: column.key, class: _tigercatcore.tableResponsiveCardRowClasses },
1557
+ [
1558
+ _vue.h.call(void 0, "div", { class: _tigercatcore.tableResponsiveCardLabelClasses }, column.title),
1559
+ _vue.h.call(void 0, "div", { class: _tigercatcore.tableResponsiveCardValueClasses }, [
1560
+ renderCardCellContent(column)
1561
+ ])
1562
+ ]
1563
+ )
1479
1564
  );
1480
1565
  const controls = [];
1481
1566
  if (resolvedProps.rowSelection && resolvedProps.rowSelection.showCheckbox !== false) {
@@ -107,18 +107,18 @@ declare const ActivityFeed: vue.DefineComponent<vue.ExtractPropTypes<{
107
107
  default: undefined;
108
108
  };
109
109
  }>> & Readonly<{}>, {
110
- loadingText: string;
111
- emptyText: string;
112
- className: string;
113
- style: Record<string, string | number>;
114
- loading: boolean;
115
- groupBy: (item: ActivityItem) => string;
116
110
  items: ActivityItem[];
117
111
  groups: ActivityGroup[];
112
+ groupBy: (item: ActivityItem) => string;
118
113
  groupOrder: string[];
114
+ loading: boolean;
115
+ loadingText: string;
116
+ emptyText: string;
119
117
  showAvatar: boolean;
120
118
  showTime: boolean;
121
119
  showGroupTitle: boolean;
120
+ className: string;
121
+ style: Record<string, string | number>;
122
122
  }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
123
123
 
124
124
  export { ActivityFeed, type VueActivityFeedProps, ActivityFeed as default };
@@ -107,18 +107,18 @@ declare const ActivityFeed: vue.DefineComponent<vue.ExtractPropTypes<{
107
107
  default: undefined;
108
108
  };
109
109
  }>> & Readonly<{}>, {
110
- loadingText: string;
111
- emptyText: string;
112
- className: string;
113
- style: Record<string, string | number>;
114
- loading: boolean;
115
- groupBy: (item: ActivityItem) => string;
116
110
  items: ActivityItem[];
117
111
  groups: ActivityGroup[];
112
+ groupBy: (item: ActivityItem) => string;
118
113
  groupOrder: string[];
114
+ loading: boolean;
115
+ loadingText: string;
116
+ emptyText: string;
119
117
  showAvatar: boolean;
120
118
  showTime: boolean;
121
119
  showGroupTitle: boolean;
120
+ className: string;
121
+ style: Record<string, string | number>;
122
122
  }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
123
123
 
124
124
  export { ActivityFeed, type VueActivityFeedProps, ActivityFeed as default };
@@ -204,14 +204,14 @@ declare const Alert: vue.DefineComponent<vue.ExtractPropTypes<{
204
204
  }>> & Readonly<{
205
205
  onClose?: ((...args: any[]) => any) | undefined;
206
206
  }>, {
207
- type: AlertType;
208
- closeAriaLabel: string;
209
207
  size: AlertSize;
210
208
  className: string;
211
209
  style: Record<string, string | number>;
210
+ type: AlertType;
212
211
  title: string;
213
- description: string;
214
212
  closable: boolean;
213
+ closeAriaLabel: string;
214
+ description: string;
215
215
  showIcon: boolean;
216
216
  duration: number;
217
217
  banner: boolean;
@@ -204,14 +204,14 @@ declare const Alert: vue.DefineComponent<vue.ExtractPropTypes<{
204
204
  }>> & Readonly<{
205
205
  onClose?: ((...args: any[]) => any) | undefined;
206
206
  }>, {
207
- type: AlertType;
208
- closeAriaLabel: string;
209
207
  size: AlertSize;
210
208
  className: string;
211
209
  style: Record<string, string | number>;
210
+ type: AlertType;
212
211
  title: string;
213
- description: string;
214
212
  closable: boolean;
213
+ closeAriaLabel: string;
214
+ description: string;
215
215
  showIcon: boolean;
216
216
  duration: number;
217
217
  banner: boolean;
@@ -236,9 +236,9 @@ declare const Anchor: vue.DefineComponent<vue.ExtractPropTypes<{
236
236
  onChange?: ((...args: any[]) => any) | undefined;
237
237
  onClick?: ((...args: any[]) => any) | undefined;
238
238
  }>, {
239
- direction: AnchorDirection;
240
239
  className: string;
241
240
  style: Record<string, unknown>;
241
+ direction: AnchorDirection;
242
242
  offsetTop: number;
243
243
  targetOffset: number;
244
244
  bounds: number;
@@ -236,9 +236,9 @@ declare const Anchor: vue.DefineComponent<vue.ExtractPropTypes<{
236
236
  onChange?: ((...args: any[]) => any) | undefined;
237
237
  onClick?: ((...args: any[]) => any) | undefined;
238
238
  }>, {
239
- direction: AnchorDirection;
240
239
  className: string;
241
240
  style: Record<string, unknown>;
241
+ direction: AnchorDirection;
242
242
  offsetTop: number;
243
243
  targetOffset: number;
244
244
  bounds: number;