@coreui/data-grid 0.1.0-rc.0 → 0.2.0-rc.0

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 (137) hide show
  1. package/README.md +5 -4
  2. package/dist/css/data-grid.css +149 -31
  3. package/dist/css/data-grid.css.map +1 -1
  4. package/dist/css/data-grid.min.css +2 -2
  5. package/dist/css/data-grid.min.css.map +1 -1
  6. package/dist/js/clipboard.cjs +56 -0
  7. package/dist/js/clipboard.cjs.map +1 -0
  8. package/dist/js/clipboard.mjs +54 -0
  9. package/dist/js/clipboard.mjs.map +1 -0
  10. package/dist/js/csv.cjs +36 -59
  11. package/dist/js/csv.cjs.map +1 -1
  12. package/dist/js/csv.mjs +35 -55
  13. package/dist/js/csv.mjs.map +1 -1
  14. package/dist/js/data-grid.esm.js +14078 -9332
  15. package/dist/js/data-grid.esm.js.map +1 -1
  16. package/dist/js/data-grid.esm.min.js +6 -6
  17. package/dist/js/data-grid.esm.min.js.map +1 -1
  18. package/dist/js/data-grid.js +14377 -9634
  19. package/dist/js/data-grid.js.map +1 -1
  20. package/dist/js/data-grid.lite.esm.js +10476 -0
  21. package/dist/js/data-grid.lite.esm.js.map +1 -0
  22. package/dist/js/data-grid.lite.esm.min.js +8 -0
  23. package/dist/js/data-grid.lite.esm.min.js.map +1 -0
  24. package/dist/js/data-grid.lite.js +10489 -0
  25. package/dist/js/data-grid.lite.js.map +1 -0
  26. package/dist/js/data-grid.lite.min.js +8 -0
  27. package/dist/js/data-grid.lite.min.js.map +1 -0
  28. package/dist/js/data-grid.lite.mjs +10476 -0
  29. package/dist/js/data-grid.lite.mjs.map +1 -0
  30. package/dist/js/data-grid.min.js +6 -6
  31. package/dist/js/data-grid.min.js.map +1 -1
  32. package/dist/js/data-grid.mjs +14078 -9332
  33. package/dist/js/data-grid.mjs.map +1 -1
  34. package/dist/js/drag.cjs +459 -0
  35. package/dist/js/drag.cjs.map +1 -0
  36. package/dist/js/drag.mjs +456 -0
  37. package/dist/js/drag.mjs.map +1 -0
  38. package/dist/js/export-table-CNAKStzj.mjs +26 -0
  39. package/dist/js/export-table-CNAKStzj.mjs.map +1 -0
  40. package/dist/js/export-table-doIwvE5U.cjs +55 -0
  41. package/dist/js/export-table-doIwvE5U.cjs.map +1 -0
  42. package/dist/js/filters.cjs +89 -132
  43. package/dist/js/filters.cjs.map +1 -1
  44. package/dist/js/filters.mjs +88 -128
  45. package/dist/js/filters.mjs.map +1 -1
  46. package/dist/js/labels.cjs +65 -70
  47. package/dist/js/labels.cjs.map +1 -1
  48. package/dist/js/labels.mjs +64 -66
  49. package/dist/js/labels.mjs.map +1 -1
  50. package/dist/js/print.cjs +66 -0
  51. package/dist/js/print.cjs.map +1 -0
  52. package/dist/js/print.mjs +64 -0
  53. package/dist/js/print.mjs.map +1 -0
  54. package/dist/js/validate.cjs +43 -0
  55. package/dist/js/validate.cjs.map +1 -0
  56. package/dist/js/validate.mjs +42 -0
  57. package/dist/js/validate.mjs.map +1 -0
  58. package/dist/js/xlsx.cjs +240 -0
  59. package/dist/js/xlsx.cjs.map +1 -0
  60. package/dist/js/xlsx.mjs +238 -0
  61. package/dist/js/xlsx.mjs.map +1 -0
  62. package/dist/types/base-component.d.ts +28 -18
  63. package/dist/types/data-grid.d.ts +26 -13
  64. package/dist/types/dom/data.d.ts +15 -0
  65. package/dist/types/dom/event-handler.d.ts +21 -10
  66. package/dist/types/dom/manipulator.d.ts +15 -8
  67. package/dist/types/engine/data-source.d.ts +1 -1
  68. package/dist/types/engine/features-lite.d.ts +25 -0
  69. package/dist/types/engine/features.d.ts +35 -0
  70. package/dist/types/engine/table.d.ts +3 -3
  71. package/dist/types/engine/validate.d.mts +1 -0
  72. package/dist/types/engine/validate.d.ts +20 -0
  73. package/dist/types/engine/virtualizer.d.ts +2 -0
  74. package/dist/types/icons.d.ts +6 -4
  75. package/dist/types/index-lite.d.mts +1 -0
  76. package/dist/types/index-lite.d.ts +19 -0
  77. package/dist/types/index.d.ts +11 -2
  78. package/dist/types/types.d.ts +53 -31
  79. package/dist/types/ui/body.d.ts +6 -3
  80. package/dist/types/ui/header.d.ts +3 -2
  81. package/dist/types/ui/loading.d.ts +1 -1
  82. package/dist/types/ui/pinning.d.ts +1 -1
  83. package/dist/types/ui/toolbar.d.ts +10 -2
  84. package/dist/types/util/clipboard.d.mts +1 -0
  85. package/dist/types/util/clipboard.d.ts +29 -0
  86. package/dist/types/util/config.d.ts +27 -10
  87. package/dist/types/util/csv.d.ts +5 -5
  88. package/dist/types/util/drag.d.mts +1 -0
  89. package/dist/types/util/drag.d.ts +48 -0
  90. package/dist/types/util/export-table.d.ts +47 -0
  91. package/dist/types/util/index.d.ts +66 -10
  92. package/dist/types/util/print.d.mts +1 -0
  93. package/dist/types/util/print.d.ts +32 -0
  94. package/dist/types/util/sanitizer.d.ts +15 -11
  95. package/dist/types/util/xlsx.d.mts +1 -0
  96. package/dist/types/util/xlsx.d.ts +17 -0
  97. package/dist/types/util/zip.d.ts +11 -0
  98. package/package.json +88 -10
  99. package/scss/data-grid.scss +204 -16
  100. package/src/{base-component.js → base-component.ts} +21 -17
  101. package/src/data-grid.ts +507 -200
  102. package/src/dom/{data.js → data.ts} +13 -10
  103. package/src/dom/event-handler.ts +380 -0
  104. package/src/dom/{manipulator.js → manipulator.ts} +11 -11
  105. package/src/engine/data-source.ts +7 -3
  106. package/src/engine/features-lite.ts +47 -0
  107. package/src/engine/features.ts +68 -0
  108. package/src/engine/table.ts +80 -47
  109. package/src/engine/validate.ts +64 -0
  110. package/src/engine/virtualizer.ts +17 -1
  111. package/src/icons.ts +11 -5
  112. package/src/index-lite.ts +85 -0
  113. package/src/index.ts +30 -2
  114. package/src/labels.ts +6 -4
  115. package/src/types.ts +87 -32
  116. package/src/ui/body.ts +73 -17
  117. package/src/ui/header.ts +51 -26
  118. package/src/ui/loading.ts +2 -2
  119. package/src/ui/pinning.ts +16 -16
  120. package/src/ui/toolbar.ts +27 -3
  121. package/src/util/clipboard.ts +112 -0
  122. package/src/util/{config.js → config.ts} +25 -11
  123. package/src/util/csv.ts +11 -30
  124. package/src/util/drag.ts +798 -0
  125. package/src/util/export-table.ts +86 -0
  126. package/src/util/{index.js → index.ts} +55 -35
  127. package/src/util/print.ts +125 -0
  128. package/src/util/{sanitizer.js → sanitizer.ts} +17 -13
  129. package/src/util/xlsx.ts +183 -0
  130. package/src/util/zip.ts +170 -0
  131. package/src/base-component.d.ts +0 -19
  132. package/src/dom/event-handler.d.ts +0 -11
  133. package/src/dom/event-handler.js +0 -331
  134. package/src/dom/manipulator.d.ts +0 -9
  135. package/src/util/config.d.ts +0 -11
  136. package/src/util/index.d.ts +0 -10
  137. package/src/util/sanitizer.d.ts +0 -11
@@ -1,76 +1,71 @@
1
1
  /*!
2
- * CoreUI PRO data-grid v0.1.0-rc.0 (https://coreui.io)
3
- * Copyright 2026 The CoreUI Team (https://github.com/orgs/coreui/people)
4
- * License (https://coreui.io/pro/license/)
5
- */
6
- 'use strict';
7
-
8
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
9
-
10
- /**
11
- * --------------------------------------------------------------------------
12
- * CoreUI PRO data-grid labels.ts
13
- * License (https://coreui.io/pro/license/)
14
- * --------------------------------------------------------------------------
15
- */
2
+ * CoreUI PRO data-grid v0.2.0-rc.0 (https://coreui.io)
3
+ * Copyright 2026 The CoreUI Team (https://github.com/orgs/coreui/people)
4
+ * License (https://coreui.io/pro/license/)
5
+ */
6
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
7
+ //#region src/labels.ts
16
8
  const DEFAULT_LABELS = {
17
- addCondition: 'Add condition',
18
- applyFilter: 'Apply',
19
- clearFilter: 'Clear filter',
20
- clearSort: 'Unsort',
21
- columnMenu: 'Column options for {column}',
22
- filterAction: 'Filter…',
23
- filterColumn: 'Filter {column}',
24
- firstPage: 'First page',
25
- globalFilterLabel: 'Search',
26
- globalFilterPlaceholder: 'Search',
27
- hideColumn: 'Hide column',
28
- itemsInfo: '{first}–{last} of {total}',
29
- joinAnd: 'AND',
30
- joinOr: 'OR',
31
- lastPage: 'Last page',
32
- loadError: 'Failed to load data',
33
- loading: 'Loading…',
34
- moveLeft: 'Move left',
35
- moveRight: 'Move right',
36
- nextPage: 'Next page',
37
- operatorBetween: 'Between',
38
- operatorBlank: 'Blank',
39
- operatorContains: 'Contains',
40
- operatorEndsWith: 'Ends with',
41
- operatorEquals: 'Equals',
42
- operatorGreaterThan: 'Greater than',
43
- operatorGreaterThanOrEqual: 'Greater than or equal',
44
- operatorLessThan: 'Less than',
45
- operatorLessThanOrEqual: 'Less than or equal',
46
- operatorNotBlank: 'Not blank',
47
- operatorNotContains: 'Does not contain',
48
- operatorNotEquals: 'Not equals',
49
- operatorStartsWith: 'Starts with',
50
- pageSizeLabel: 'Rows per page',
51
- paginationLabel: 'Pagination',
52
- pinLeft: 'Pin left',
53
- pinRight: 'Pin right',
54
- previousPage: 'Previous page',
55
- redoneAnnouncement: 'Change redone',
56
- resetColumns: 'Reset',
57
- resultsAnnouncement: '{count} results',
58
- searchValues: 'Search values',
59
- selectAllRows: 'Select all rows',
60
- selectAllValues: 'Select all',
61
- selectRow: 'Select row',
62
- showAllColumns: 'Show all',
63
- sortAscending: 'Sort ascending',
64
- sortDescending: 'Sort descending',
65
- toolbarColumns: 'Columns',
66
- toolbarExport: 'Export',
67
- toolbarRedo: 'Redo',
68
- toolbarUndo: 'Undo',
69
- undoneAnnouncement: 'Change undone',
70
- unpin: 'Unpin'
9
+ addCondition: "Add condition",
10
+ applyFilter: "Apply",
11
+ clearFilter: "Clear filter",
12
+ clearSort: "Unsort",
13
+ columnMenu: "Column options for {column}",
14
+ filterAction: "Filter…",
15
+ filterColumn: "Filter {column}",
16
+ firstPage: "First page",
17
+ globalFilterLabel: "Search",
18
+ globalFilterPlaceholder: "Search",
19
+ hideColumn: "Hide column",
20
+ itemsInfo: "{first}–{last} of {total}",
21
+ joinAnd: "AND",
22
+ joinOr: "OR",
23
+ lastPage: "Last page",
24
+ loadError: "Failed to load data",
25
+ loading: "Loading…",
26
+ moveEnd: "Move to end",
27
+ moveStart: "Move to start",
28
+ nextPage: "Next page",
29
+ operatorBetween: "Between",
30
+ operatorBlank: "Blank",
31
+ operatorContains: "Contains",
32
+ operatorEndsWith: "Ends with",
33
+ operatorEquals: "Equals",
34
+ operatorGreaterThan: "Greater than",
35
+ operatorGreaterThanOrEqual: "Greater than or equal",
36
+ operatorLessThan: "Less than",
37
+ operatorLessThanOrEqual: "Less than or equal",
38
+ operatorNotBlank: "Not blank",
39
+ operatorNotContains: "Does not contain",
40
+ operatorNotEquals: "Not equals",
41
+ operatorStartsWith: "Starts with",
42
+ pageSizeLabel: "Rows per page",
43
+ paginationLabel: "Pagination",
44
+ pinEnd: "Pin to end",
45
+ pinStart: "Pin to start",
46
+ previousPage: "Previous page",
47
+ redoneAnnouncement: "Change redone",
48
+ reorderRow: "Reorder row",
49
+ resetColumns: "Reset",
50
+ resultsAnnouncement: "{count} results",
51
+ searchValues: "Search values",
52
+ selectAllRows: "Select all rows",
53
+ selectAllValues: "Select all",
54
+ selectRow: "Select row",
55
+ showAllColumns: "Show all",
56
+ sortAscending: "Sort ascending",
57
+ sortDescending: "Sort descending",
58
+ toolbarColumns: "Columns",
59
+ toolbarExport: "Export",
60
+ toolbarPrint: "Print",
61
+ toolbarRedo: "Redo",
62
+ toolbarUndo: "Undo",
63
+ undoneAnnouncement: "Change undone",
64
+ unpin: "Unpin"
71
65
  };
72
66
  const interpolate = (template, tokens) => template.replace(/\{(\w+)\}/g, (match, token) => token in tokens ? String(tokens[token]) : match);
73
-
67
+ //#endregion
74
68
  exports.DEFAULT_LABELS = DEFAULT_LABELS;
75
69
  exports.interpolate = interpolate;
76
- //# sourceMappingURL=labels.cjs.map
70
+
71
+ //# sourceMappingURL=labels.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"labels.cjs","sources":["../../src/labels.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;AAAA;;;;;AAKG;AAII,MAAM,cAAc,GAAmB;AAC5C,IAAA,YAAY,EAAE,eAAe;AAC7B,IAAA,WAAW,EAAE,OAAO;AACpB,IAAA,WAAW,EAAE,cAAc;AAC3B,IAAA,SAAS,EAAE,QAAQ;AACnB,IAAA,UAAU,EAAE,6BAA6B;AACzC,IAAA,YAAY,EAAE,SAAS;AACvB,IAAA,YAAY,EAAE,iBAAiB;AAC/B,IAAA,SAAS,EAAE,YAAY;AACvB,IAAA,iBAAiB,EAAE,QAAQ;AAC3B,IAAA,uBAAuB,EAAE,QAAQ;AACjC,IAAA,UAAU,EAAE,aAAa;AACzB,IAAA,SAAS,EAAE,2BAA2B;AACtC,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,QAAQ,EAAE,WAAW;AACrB,IAAA,SAAS,EAAE,qBAAqB;AAChC,IAAA,OAAO,EAAE,UAAU;AACnB,IAAA,QAAQ,EAAE,WAAW;AACrB,IAAA,SAAS,EAAE,YAAY;AACvB,IAAA,QAAQ,EAAE,WAAW;AACrB,IAAA,eAAe,EAAE,SAAS;AAC1B,IAAA,aAAa,EAAE,OAAO;AACtB,IAAA,gBAAgB,EAAE,UAAU;AAC5B,IAAA,gBAAgB,EAAE,WAAW;AAC7B,IAAA,cAAc,EAAE,QAAQ;AACxB,IAAA,mBAAmB,EAAE,cAAc;AACnC,IAAA,0BAA0B,EAAE,uBAAuB;AACnD,IAAA,gBAAgB,EAAE,WAAW;AAC7B,IAAA,uBAAuB,EAAE,oBAAoB;AAC7C,IAAA,gBAAgB,EAAE,WAAW;AAC7B,IAAA,mBAAmB,EAAE,kBAAkB;AACvC,IAAA,iBAAiB,EAAE,YAAY;AAC/B,IAAA,kBAAkB,EAAE,aAAa;AACjC,IAAA,aAAa,EAAE,eAAe;AAC9B,IAAA,eAAe,EAAE,YAAY;AAC7B,IAAA,OAAO,EAAE,UAAU;AACnB,IAAA,QAAQ,EAAE,WAAW;AACrB,IAAA,YAAY,EAAE,eAAe;AAC7B,IAAA,kBAAkB,EAAE,eAAe;AACnC,IAAA,YAAY,EAAE,OAAO;AACrB,IAAA,mBAAmB,EAAE,iBAAiB;AACtC,IAAA,YAAY,EAAE,eAAe;AAC7B,IAAA,aAAa,EAAE,iBAAiB;AAChC,IAAA,eAAe,EAAE,YAAY;AAC7B,IAAA,SAAS,EAAE,YAAY;AACvB,IAAA,cAAc,EAAE,UAAU;AAC1B,IAAA,aAAa,EAAE,gBAAgB;AAC/B,IAAA,cAAc,EAAE,iBAAiB;AACjC,IAAA,cAAc,EAAE,SAAS;AACzB,IAAA,aAAa,EAAE,QAAQ;AACvB,IAAA,WAAW,EAAE,MAAM;AACnB,IAAA,WAAW,EAAE,MAAM;AACnB,IAAA,kBAAkB,EAAE,eAAe;AACnC,IAAA,KAAK,EAAE;;AAGF,MAAM,WAAW,GAAG,CAAC,QAAgB,EAAE,MAAuC,KACnF,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,KAAa,EAAE,KAAa,KAC1D,KAAK,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK;;;;;"}
1
+ {"version":3,"file":"labels.cjs","names":[],"sources":["../../src/labels.ts"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * CoreUI PRO data-grid labels.ts\n * License (https://coreui.io/pro/license/)\n * --------------------------------------------------------------------------\n */\n\nimport type { DataGridLabels } from './types'\n\nexport const DEFAULT_LABELS: DataGridLabels = {\n addCondition: 'Add condition',\n applyFilter: 'Apply',\n clearFilter: 'Clear filter',\n clearSort: 'Unsort',\n columnMenu: 'Column options for {column}',\n filterAction: 'Filter…',\n filterColumn: 'Filter {column}',\n firstPage: 'First page',\n globalFilterLabel: 'Search',\n globalFilterPlaceholder: 'Search',\n hideColumn: 'Hide column',\n itemsInfo: '{first}–{last} of {total}',\n joinAnd: 'AND',\n joinOr: 'OR',\n lastPage: 'Last page',\n loadError: 'Failed to load data',\n loading: 'Loading…',\n moveEnd: 'Move to end',\n moveStart: 'Move to start',\n nextPage: 'Next page',\n operatorBetween: 'Between',\n operatorBlank: 'Blank',\n operatorContains: 'Contains',\n operatorEndsWith: 'Ends with',\n operatorEquals: 'Equals',\n operatorGreaterThan: 'Greater than',\n operatorGreaterThanOrEqual: 'Greater than or equal',\n operatorLessThan: 'Less than',\n operatorLessThanOrEqual: 'Less than or equal',\n operatorNotBlank: 'Not blank',\n operatorNotContains: 'Does not contain',\n operatorNotEquals: 'Not equals',\n operatorStartsWith: 'Starts with',\n pageSizeLabel: 'Rows per page',\n paginationLabel: 'Pagination',\n pinEnd: 'Pin to end',\n pinStart: 'Pin to start',\n previousPage: 'Previous page',\n redoneAnnouncement: 'Change redone',\n reorderRow: 'Reorder row',\n resetColumns: 'Reset',\n resultsAnnouncement: '{count} results',\n searchValues: 'Search values',\n selectAllRows: 'Select all rows',\n selectAllValues: 'Select all',\n selectRow: 'Select row',\n showAllColumns: 'Show all',\n sortAscending: 'Sort ascending',\n sortDescending: 'Sort descending',\n toolbarColumns: 'Columns',\n toolbarExport: 'Export',\n toolbarPrint: 'Print',\n toolbarRedo: 'Redo',\n toolbarUndo: 'Undo',\n undoneAnnouncement: 'Change undone',\n unpin: 'Unpin'\n}\n\nexport const interpolate = (template: string, tokens: Record<string, string | number>): string =>\n template.replace(/\\{(\\w+)\\}/g, (match: string, token: string) =>\n token in tokens ? String(tokens[token]) : match\n )\n"],"mappings":";;;;;;;AASA,MAAa,iBAAiC;CAC5C,cAAc;CACd,aAAa;CACb,aAAa;CACb,WAAW;CACX,YAAY;CACZ,cAAc;CACd,cAAc;CACd,WAAW;CACX,mBAAmB;CACnB,yBAAyB;CACzB,YAAY;CACZ,WAAW;CACX,SAAS;CACT,QAAQ;CACR,UAAU;CACV,WAAW;CACX,SAAS;CACT,SAAS;CACT,WAAW;CACX,UAAU;CACV,iBAAiB;CACjB,eAAe;CACf,kBAAkB;CAClB,kBAAkB;CAClB,gBAAgB;CAChB,qBAAqB;CACrB,4BAA4B;CAC5B,kBAAkB;CAClB,yBAAyB;CACzB,kBAAkB;CAClB,qBAAqB;CACrB,mBAAmB;CACnB,oBAAoB;CACpB,eAAe;CACf,iBAAiB;CACjB,QAAQ;CACR,UAAU;CACV,cAAc;CACd,oBAAoB;CACpB,YAAY;CACZ,cAAc;CACd,qBAAqB;CACrB,cAAc;CACd,eAAe;CACf,iBAAiB;CACjB,WAAW;CACX,gBAAgB;CAChB,eAAe;CACf,gBAAgB;CAChB,gBAAgB;CAChB,eAAe;CACf,cAAc;CACd,aAAa;CACb,aAAa;CACb,oBAAoB;CACpB,OAAO;AACT;AAEA,MAAa,eAAe,UAAkB,WAC5C,SAAS,QAAQ,eAAe,OAAe,UAC7C,SAAS,SAAS,OAAO,OAAO,MAAM,IAAI,KAC5C"}
@@ -1,71 +1,69 @@
1
1
  /*!
2
- * CoreUI PRO data-grid v0.1.0-rc.0 (https://coreui.io)
3
- * Copyright 2026 The CoreUI Team (https://github.com/orgs/coreui/people)
4
- * License (https://coreui.io/pro/license/)
5
- */
6
- /**
7
- * --------------------------------------------------------------------------
8
- * CoreUI PRO data-grid labels.ts
9
- * License (https://coreui.io/pro/license/)
10
- * --------------------------------------------------------------------------
11
- */
2
+ * CoreUI PRO data-grid v0.2.0-rc.0 (https://coreui.io)
3
+ * Copyright 2026 The CoreUI Team (https://github.com/orgs/coreui/people)
4
+ * License (https://coreui.io/pro/license/)
5
+ */
6
+ //#region src/labels.ts
12
7
  const DEFAULT_LABELS = {
13
- addCondition: 'Add condition',
14
- applyFilter: 'Apply',
15
- clearFilter: 'Clear filter',
16
- clearSort: 'Unsort',
17
- columnMenu: 'Column options for {column}',
18
- filterAction: 'Filter…',
19
- filterColumn: 'Filter {column}',
20
- firstPage: 'First page',
21
- globalFilterLabel: 'Search',
22
- globalFilterPlaceholder: 'Search',
23
- hideColumn: 'Hide column',
24
- itemsInfo: '{first}–{last} of {total}',
25
- joinAnd: 'AND',
26
- joinOr: 'OR',
27
- lastPage: 'Last page',
28
- loadError: 'Failed to load data',
29
- loading: 'Loading…',
30
- moveLeft: 'Move left',
31
- moveRight: 'Move right',
32
- nextPage: 'Next page',
33
- operatorBetween: 'Between',
34
- operatorBlank: 'Blank',
35
- operatorContains: 'Contains',
36
- operatorEndsWith: 'Ends with',
37
- operatorEquals: 'Equals',
38
- operatorGreaterThan: 'Greater than',
39
- operatorGreaterThanOrEqual: 'Greater than or equal',
40
- operatorLessThan: 'Less than',
41
- operatorLessThanOrEqual: 'Less than or equal',
42
- operatorNotBlank: 'Not blank',
43
- operatorNotContains: 'Does not contain',
44
- operatorNotEquals: 'Not equals',
45
- operatorStartsWith: 'Starts with',
46
- pageSizeLabel: 'Rows per page',
47
- paginationLabel: 'Pagination',
48
- pinLeft: 'Pin left',
49
- pinRight: 'Pin right',
50
- previousPage: 'Previous page',
51
- redoneAnnouncement: 'Change redone',
52
- resetColumns: 'Reset',
53
- resultsAnnouncement: '{count} results',
54
- searchValues: 'Search values',
55
- selectAllRows: 'Select all rows',
56
- selectAllValues: 'Select all',
57
- selectRow: 'Select row',
58
- showAllColumns: 'Show all',
59
- sortAscending: 'Sort ascending',
60
- sortDescending: 'Sort descending',
61
- toolbarColumns: 'Columns',
62
- toolbarExport: 'Export',
63
- toolbarRedo: 'Redo',
64
- toolbarUndo: 'Undo',
65
- undoneAnnouncement: 'Change undone',
66
- unpin: 'Unpin'
8
+ addCondition: "Add condition",
9
+ applyFilter: "Apply",
10
+ clearFilter: "Clear filter",
11
+ clearSort: "Unsort",
12
+ columnMenu: "Column options for {column}",
13
+ filterAction: "Filter…",
14
+ filterColumn: "Filter {column}",
15
+ firstPage: "First page",
16
+ globalFilterLabel: "Search",
17
+ globalFilterPlaceholder: "Search",
18
+ hideColumn: "Hide column",
19
+ itemsInfo: "{first}–{last} of {total}",
20
+ joinAnd: "AND",
21
+ joinOr: "OR",
22
+ lastPage: "Last page",
23
+ loadError: "Failed to load data",
24
+ loading: "Loading…",
25
+ moveEnd: "Move to end",
26
+ moveStart: "Move to start",
27
+ nextPage: "Next page",
28
+ operatorBetween: "Between",
29
+ operatorBlank: "Blank",
30
+ operatorContains: "Contains",
31
+ operatorEndsWith: "Ends with",
32
+ operatorEquals: "Equals",
33
+ operatorGreaterThan: "Greater than",
34
+ operatorGreaterThanOrEqual: "Greater than or equal",
35
+ operatorLessThan: "Less than",
36
+ operatorLessThanOrEqual: "Less than or equal",
37
+ operatorNotBlank: "Not blank",
38
+ operatorNotContains: "Does not contain",
39
+ operatorNotEquals: "Not equals",
40
+ operatorStartsWith: "Starts with",
41
+ pageSizeLabel: "Rows per page",
42
+ paginationLabel: "Pagination",
43
+ pinEnd: "Pin to end",
44
+ pinStart: "Pin to start",
45
+ previousPage: "Previous page",
46
+ redoneAnnouncement: "Change redone",
47
+ reorderRow: "Reorder row",
48
+ resetColumns: "Reset",
49
+ resultsAnnouncement: "{count} results",
50
+ searchValues: "Search values",
51
+ selectAllRows: "Select all rows",
52
+ selectAllValues: "Select all",
53
+ selectRow: "Select row",
54
+ showAllColumns: "Show all",
55
+ sortAscending: "Sort ascending",
56
+ sortDescending: "Sort descending",
57
+ toolbarColumns: "Columns",
58
+ toolbarExport: "Export",
59
+ toolbarPrint: "Print",
60
+ toolbarRedo: "Redo",
61
+ toolbarUndo: "Undo",
62
+ undoneAnnouncement: "Change undone",
63
+ unpin: "Unpin"
67
64
  };
68
65
  const interpolate = (template, tokens) => template.replace(/\{(\w+)\}/g, (match, token) => token in tokens ? String(tokens[token]) : match);
69
-
66
+ //#endregion
70
67
  export { DEFAULT_LABELS, interpolate };
71
- //# sourceMappingURL=labels.mjs.map
68
+
69
+ //# sourceMappingURL=labels.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"labels.mjs","sources":["../../src/labels.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAAA;;;;;AAKG;AAII,MAAM,cAAc,GAAmB;AAC5C,IAAA,YAAY,EAAE,eAAe;AAC7B,IAAA,WAAW,EAAE,OAAO;AACpB,IAAA,WAAW,EAAE,cAAc;AAC3B,IAAA,SAAS,EAAE,QAAQ;AACnB,IAAA,UAAU,EAAE,6BAA6B;AACzC,IAAA,YAAY,EAAE,SAAS;AACvB,IAAA,YAAY,EAAE,iBAAiB;AAC/B,IAAA,SAAS,EAAE,YAAY;AACvB,IAAA,iBAAiB,EAAE,QAAQ;AAC3B,IAAA,uBAAuB,EAAE,QAAQ;AACjC,IAAA,UAAU,EAAE,aAAa;AACzB,IAAA,SAAS,EAAE,2BAA2B;AACtC,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,QAAQ,EAAE,WAAW;AACrB,IAAA,SAAS,EAAE,qBAAqB;AAChC,IAAA,OAAO,EAAE,UAAU;AACnB,IAAA,QAAQ,EAAE,WAAW;AACrB,IAAA,SAAS,EAAE,YAAY;AACvB,IAAA,QAAQ,EAAE,WAAW;AACrB,IAAA,eAAe,EAAE,SAAS;AAC1B,IAAA,aAAa,EAAE,OAAO;AACtB,IAAA,gBAAgB,EAAE,UAAU;AAC5B,IAAA,gBAAgB,EAAE,WAAW;AAC7B,IAAA,cAAc,EAAE,QAAQ;AACxB,IAAA,mBAAmB,EAAE,cAAc;AACnC,IAAA,0BAA0B,EAAE,uBAAuB;AACnD,IAAA,gBAAgB,EAAE,WAAW;AAC7B,IAAA,uBAAuB,EAAE,oBAAoB;AAC7C,IAAA,gBAAgB,EAAE,WAAW;AAC7B,IAAA,mBAAmB,EAAE,kBAAkB;AACvC,IAAA,iBAAiB,EAAE,YAAY;AAC/B,IAAA,kBAAkB,EAAE,aAAa;AACjC,IAAA,aAAa,EAAE,eAAe;AAC9B,IAAA,eAAe,EAAE,YAAY;AAC7B,IAAA,OAAO,EAAE,UAAU;AACnB,IAAA,QAAQ,EAAE,WAAW;AACrB,IAAA,YAAY,EAAE,eAAe;AAC7B,IAAA,kBAAkB,EAAE,eAAe;AACnC,IAAA,YAAY,EAAE,OAAO;AACrB,IAAA,mBAAmB,EAAE,iBAAiB;AACtC,IAAA,YAAY,EAAE,eAAe;AAC7B,IAAA,aAAa,EAAE,iBAAiB;AAChC,IAAA,eAAe,EAAE,YAAY;AAC7B,IAAA,SAAS,EAAE,YAAY;AACvB,IAAA,cAAc,EAAE,UAAU;AAC1B,IAAA,aAAa,EAAE,gBAAgB;AAC/B,IAAA,cAAc,EAAE,iBAAiB;AACjC,IAAA,cAAc,EAAE,SAAS;AACzB,IAAA,aAAa,EAAE,QAAQ;AACvB,IAAA,WAAW,EAAE,MAAM;AACnB,IAAA,WAAW,EAAE,MAAM;AACnB,IAAA,kBAAkB,EAAE,eAAe;AACnC,IAAA,KAAK,EAAE;;AAGF,MAAM,WAAW,GAAG,CAAC,QAAgB,EAAE,MAAuC,KACnF,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,KAAa,EAAE,KAAa,KAC1D,KAAK,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK;;;;"}
1
+ {"version":3,"file":"labels.mjs","names":[],"sources":["../../src/labels.ts"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * CoreUI PRO data-grid labels.ts\n * License (https://coreui.io/pro/license/)\n * --------------------------------------------------------------------------\n */\n\nimport type { DataGridLabels } from './types'\n\nexport const DEFAULT_LABELS: DataGridLabels = {\n addCondition: 'Add condition',\n applyFilter: 'Apply',\n clearFilter: 'Clear filter',\n clearSort: 'Unsort',\n columnMenu: 'Column options for {column}',\n filterAction: 'Filter…',\n filterColumn: 'Filter {column}',\n firstPage: 'First page',\n globalFilterLabel: 'Search',\n globalFilterPlaceholder: 'Search',\n hideColumn: 'Hide column',\n itemsInfo: '{first}–{last} of {total}',\n joinAnd: 'AND',\n joinOr: 'OR',\n lastPage: 'Last page',\n loadError: 'Failed to load data',\n loading: 'Loading…',\n moveEnd: 'Move to end',\n moveStart: 'Move to start',\n nextPage: 'Next page',\n operatorBetween: 'Between',\n operatorBlank: 'Blank',\n operatorContains: 'Contains',\n operatorEndsWith: 'Ends with',\n operatorEquals: 'Equals',\n operatorGreaterThan: 'Greater than',\n operatorGreaterThanOrEqual: 'Greater than or equal',\n operatorLessThan: 'Less than',\n operatorLessThanOrEqual: 'Less than or equal',\n operatorNotBlank: 'Not blank',\n operatorNotContains: 'Does not contain',\n operatorNotEquals: 'Not equals',\n operatorStartsWith: 'Starts with',\n pageSizeLabel: 'Rows per page',\n paginationLabel: 'Pagination',\n pinEnd: 'Pin to end',\n pinStart: 'Pin to start',\n previousPage: 'Previous page',\n redoneAnnouncement: 'Change redone',\n reorderRow: 'Reorder row',\n resetColumns: 'Reset',\n resultsAnnouncement: '{count} results',\n searchValues: 'Search values',\n selectAllRows: 'Select all rows',\n selectAllValues: 'Select all',\n selectRow: 'Select row',\n showAllColumns: 'Show all',\n sortAscending: 'Sort ascending',\n sortDescending: 'Sort descending',\n toolbarColumns: 'Columns',\n toolbarExport: 'Export',\n toolbarPrint: 'Print',\n toolbarRedo: 'Redo',\n toolbarUndo: 'Undo',\n undoneAnnouncement: 'Change undone',\n unpin: 'Unpin'\n}\n\nexport const interpolate = (template: string, tokens: Record<string, string | number>): string =>\n template.replace(/\\{(\\w+)\\}/g, (match: string, token: string) =>\n token in tokens ? String(tokens[token]) : match\n )\n"],"mappings":";;;;;;AASA,MAAa,iBAAiC;CAC5C,cAAc;CACd,aAAa;CACb,aAAa;CACb,WAAW;CACX,YAAY;CACZ,cAAc;CACd,cAAc;CACd,WAAW;CACX,mBAAmB;CACnB,yBAAyB;CACzB,YAAY;CACZ,WAAW;CACX,SAAS;CACT,QAAQ;CACR,UAAU;CACV,WAAW;CACX,SAAS;CACT,SAAS;CACT,WAAW;CACX,UAAU;CACV,iBAAiB;CACjB,eAAe;CACf,kBAAkB;CAClB,kBAAkB;CAClB,gBAAgB;CAChB,qBAAqB;CACrB,4BAA4B;CAC5B,kBAAkB;CAClB,yBAAyB;CACzB,kBAAkB;CAClB,qBAAqB;CACrB,mBAAmB;CACnB,oBAAoB;CACpB,eAAe;CACf,iBAAiB;CACjB,QAAQ;CACR,UAAU;CACV,cAAc;CACd,oBAAoB;CACpB,YAAY;CACZ,cAAc;CACd,qBAAqB;CACrB,cAAc;CACd,eAAe;CACf,iBAAiB;CACjB,WAAW;CACX,gBAAgB;CAChB,eAAe;CACf,gBAAgB;CAChB,gBAAgB;CAChB,eAAe;CACf,cAAc;CACd,aAAa;CACb,aAAa;CACb,oBAAoB;CACpB,OAAO;AACT;AAEA,MAAa,eAAe,UAAkB,WAC5C,SAAS,QAAQ,eAAe,OAAe,UAC7C,SAAS,SAAS,OAAO,OAAO,MAAM,IAAI,KAC5C"}
@@ -0,0 +1,66 @@
1
+ /*!
2
+ * CoreUI PRO data-grid v0.2.0-rc.0 (https://coreui.io)
3
+ * Copyright 2026 The CoreUI Team (https://github.com/orgs/coreui/people)
4
+ * License (https://coreui.io/pro/license/)
5
+ */
6
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
7
+ //#region src/util/print.ts
8
+ const CLASS_NAME_PRINT_ROOT = "data-grid-print-root";
9
+ const printRows = (table) => {
10
+ if (typeof table.getSortedRowModel === "function") return table.getSortedRowModel().rows;
11
+ if (typeof table.getFilteredRowModel === "function") return table.getFilteredRowModel().rows;
12
+ return table.getCoreRowModel().rows;
13
+ };
14
+ const createPrintTable = (table, columns, options = {}) => {
15
+ const root = document.createElement("div");
16
+ root.className = CLASS_NAME_PRINT_ROOT;
17
+ if (options.title) {
18
+ const heading = document.createElement("h1");
19
+ heading.textContent = options.title;
20
+ root.append(heading);
21
+ }
22
+ const tableElement = document.createElement("table");
23
+ tableElement.classList.add("table");
24
+ const head = document.createElement("thead");
25
+ const headRow = document.createElement("tr");
26
+ for (const column of columns) {
27
+ const cell = document.createElement("th");
28
+ cell.scope = "col";
29
+ cell.textContent = column.label;
30
+ headRow.append(cell);
31
+ }
32
+ head.append(headRow);
33
+ const body = document.createElement("tbody");
34
+ for (const row of printRows(table)) {
35
+ const rowElement = document.createElement("tr");
36
+ for (const column of columns) {
37
+ const cell = document.createElement("td");
38
+ const value = row.getValue(column.id);
39
+ cell.textContent = column.formatter ? column.formatter(value, row.original) : String(value ?? "");
40
+ rowElement.append(cell);
41
+ }
42
+ body.append(rowElement);
43
+ }
44
+ tableElement.append(head, body);
45
+ root.append(tableElement);
46
+ return root;
47
+ };
48
+ const printGrid = (table, columns, options = {}) => {
49
+ const root = createPrintTable(table, columns, options);
50
+ document.body.append(root);
51
+ const cleanup = () => {
52
+ root.remove();
53
+ window.removeEventListener("afterprint", cleanup);
54
+ };
55
+ window.addEventListener("afterprint", cleanup);
56
+ try {
57
+ window.print();
58
+ } finally {
59
+ cleanup();
60
+ }
61
+ };
62
+ //#endregion
63
+ exports.createPrintTable = createPrintTable;
64
+ exports.printGrid = printGrid;
65
+
66
+ //# sourceMappingURL=print.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"print.cjs","names":[],"sources":["../../src/util/print.ts"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * CoreUI PRO data-grid util/print.ts\n * License (https://coreui.io/pro/license/)\n * --------------------------------------------------------------------------\n */\n\nimport type { DataGridItem } from '../types'\n\n// Printing a virtualized grid straight from the DOM would print the twenty\n// rows that happen to be in the window, and a paginated one would print the\n// current page. Neither is what anyone means by \"print this table\", so the\n// grid renders a plain, complete table into the document, prints that, and\n// throws it away. The print stylesheet hides everything else on the page.\n\nconst CLASS_NAME_PRINT_ROOT = 'data-grid-print-root'\n\nexport interface PrintColumn {\n id: string\n label: string\n formatter?: (value: unknown, item: DataGridItem) => string\n}\n\nexport interface PrintRow {\n getValue: (columnId: string) => unknown\n original: DataGridItem\n}\n\nexport interface PrintTable {\n // The rows BEFORE pagination: the whole result of the user's sorting and\n // filtering, which is the table they think they are printing.\n getSortedRowModel?: () => { rows: PrintRow[] }\n getFilteredRowModel?: () => { rows: PrintRow[] }\n getCoreRowModel: () => { rows: PrintRow[] }\n}\n\nexport interface PrintOptions {\n // Printed above the table. Omitted entirely when not set.\n title?: string\n}\n\n// The widest row model the registered features expose — feature sets without\n// sorting or filtering fall back to the core one.\nconst printRows = (table: PrintTable): PrintRow[] => {\n if (typeof table.getSortedRowModel === 'function') {\n return table.getSortedRowModel().rows\n }\n\n if (typeof table.getFilteredRowModel === 'function') {\n return table.getFilteredRowModel().rows\n }\n\n return table.getCoreRowModel().rows\n}\n\nexport const createPrintTable = (\n table: PrintTable,\n columns: PrintColumn[],\n options: PrintOptions = {}\n): HTMLElement => {\n const root = document.createElement('div')\n root.className = CLASS_NAME_PRINT_ROOT\n\n if (options.title) {\n const heading = document.createElement('h1')\n heading.textContent = options.title\n root.append(heading)\n }\n\n const tableElement = document.createElement('table')\n tableElement.classList.add('table')\n\n const head = document.createElement('thead')\n const headRow = document.createElement('tr')\n for (const column of columns) {\n const cell = document.createElement('th')\n cell.scope = 'col'\n cell.textContent = column.label\n headRow.append(cell)\n }\n\n head.append(headRow)\n\n const body = document.createElement('tbody')\n for (const row of printRows(table)) {\n const rowElement = document.createElement('tr')\n for (const column of columns) {\n const cell = document.createElement('td')\n const value = row.getValue(column.id)\n // textContent, never innerHTML: a custom cell renderer's markup is not\n // reachable here, and the printed page must not become an injection\n // surface for the data.\n cell.textContent = column.formatter ? column.formatter(value, row.original) : String(value ?? '')\n rowElement.append(cell)\n }\n\n body.append(rowElement)\n }\n\n tableElement.append(head, body)\n root.append(tableElement)\n\n return root\n}\n\nexport const printGrid = (table: PrintTable, columns: PrintColumn[], options: PrintOptions = {}): void => {\n const root = createPrintTable(table, columns, options)\n document.body.append(root)\n\n // afterprint fires on every browser we support; the finally is the safety\n // net for a print dialog that never opens (a headless or blocked context),\n // where leaving the clone in the document would be worse than a flicker.\n const cleanup = () => {\n root.remove()\n window.removeEventListener('afterprint', cleanup)\n }\n\n window.addEventListener('afterprint', cleanup)\n\n try {\n window.print()\n } finally {\n cleanup()\n }\n}\n"],"mappings":";;;;;;;AAeA,MAAM,wBAAwB;AA4B9B,MAAM,aAAa,UAAkC;CACnD,IAAI,OAAO,MAAM,sBAAsB,YACrC,OAAO,MAAM,kBAAkB,CAAC,CAAC;CAGnC,IAAI,OAAO,MAAM,wBAAwB,YACvC,OAAO,MAAM,oBAAoB,CAAC,CAAC;CAGrC,OAAO,MAAM,gBAAgB,CAAC,CAAC;AACjC;AAEA,MAAa,oBACX,OACA,SACA,UAAwB,CAAC,MACT;CAChB,MAAM,OAAO,SAAS,cAAc,KAAK;CACzC,KAAK,YAAY;CAEjB,IAAI,QAAQ,OAAO;EACjB,MAAM,UAAU,SAAS,cAAc,IAAI;EAC3C,QAAQ,cAAc,QAAQ;EAC9B,KAAK,OAAO,OAAO;CACrB;CAEA,MAAM,eAAe,SAAS,cAAc,OAAO;CACnD,aAAa,UAAU,IAAI,OAAO;CAElC,MAAM,OAAO,SAAS,cAAc,OAAO;CAC3C,MAAM,UAAU,SAAS,cAAc,IAAI;CAC3C,KAAK,MAAM,UAAU,SAAS;EAC5B,MAAM,OAAO,SAAS,cAAc,IAAI;EACxC,KAAK,QAAQ;EACb,KAAK,cAAc,OAAO;EAC1B,QAAQ,OAAO,IAAI;CACrB;CAEA,KAAK,OAAO,OAAO;CAEnB,MAAM,OAAO,SAAS,cAAc,OAAO;CAC3C,KAAK,MAAM,OAAO,UAAU,KAAK,GAAG;EAClC,MAAM,aAAa,SAAS,cAAc,IAAI;EAC9C,KAAK,MAAM,UAAU,SAAS;GAC5B,MAAM,OAAO,SAAS,cAAc,IAAI;GACxC,MAAM,QAAQ,IAAI,SAAS,OAAO,EAAE;GAIpC,KAAK,cAAc,OAAO,YAAY,OAAO,UAAU,OAAO,IAAI,QAAQ,IAAI,OAAO,SAAS,EAAE;GAChG,WAAW,OAAO,IAAI;EACxB;EAEA,KAAK,OAAO,UAAU;CACxB;CAEA,aAAa,OAAO,MAAM,IAAI;CAC9B,KAAK,OAAO,YAAY;CAExB,OAAO;AACT;AAEA,MAAa,aAAa,OAAmB,SAAwB,UAAwB,CAAC,MAAY;CACxG,MAAM,OAAO,iBAAiB,OAAO,SAAS,OAAO;CACrD,SAAS,KAAK,OAAO,IAAI;CAKzB,MAAM,gBAAgB;EACpB,KAAK,OAAO;EACZ,OAAO,oBAAoB,cAAc,OAAO;CAClD;CAEA,OAAO,iBAAiB,cAAc,OAAO;CAE7C,IAAI;EACF,OAAO,MAAM;CACf,UAAU;EACR,QAAQ;CACV;AACF"}
@@ -0,0 +1,64 @@
1
+ /*!
2
+ * CoreUI PRO data-grid v0.2.0-rc.0 (https://coreui.io)
3
+ * Copyright 2026 The CoreUI Team (https://github.com/orgs/coreui/people)
4
+ * License (https://coreui.io/pro/license/)
5
+ */
6
+ //#region src/util/print.ts
7
+ const CLASS_NAME_PRINT_ROOT = "data-grid-print-root";
8
+ const printRows = (table) => {
9
+ if (typeof table.getSortedRowModel === "function") return table.getSortedRowModel().rows;
10
+ if (typeof table.getFilteredRowModel === "function") return table.getFilteredRowModel().rows;
11
+ return table.getCoreRowModel().rows;
12
+ };
13
+ const createPrintTable = (table, columns, options = {}) => {
14
+ const root = document.createElement("div");
15
+ root.className = CLASS_NAME_PRINT_ROOT;
16
+ if (options.title) {
17
+ const heading = document.createElement("h1");
18
+ heading.textContent = options.title;
19
+ root.append(heading);
20
+ }
21
+ const tableElement = document.createElement("table");
22
+ tableElement.classList.add("table");
23
+ const head = document.createElement("thead");
24
+ const headRow = document.createElement("tr");
25
+ for (const column of columns) {
26
+ const cell = document.createElement("th");
27
+ cell.scope = "col";
28
+ cell.textContent = column.label;
29
+ headRow.append(cell);
30
+ }
31
+ head.append(headRow);
32
+ const body = document.createElement("tbody");
33
+ for (const row of printRows(table)) {
34
+ const rowElement = document.createElement("tr");
35
+ for (const column of columns) {
36
+ const cell = document.createElement("td");
37
+ const value = row.getValue(column.id);
38
+ cell.textContent = column.formatter ? column.formatter(value, row.original) : String(value ?? "");
39
+ rowElement.append(cell);
40
+ }
41
+ body.append(rowElement);
42
+ }
43
+ tableElement.append(head, body);
44
+ root.append(tableElement);
45
+ return root;
46
+ };
47
+ const printGrid = (table, columns, options = {}) => {
48
+ const root = createPrintTable(table, columns, options);
49
+ document.body.append(root);
50
+ const cleanup = () => {
51
+ root.remove();
52
+ window.removeEventListener("afterprint", cleanup);
53
+ };
54
+ window.addEventListener("afterprint", cleanup);
55
+ try {
56
+ window.print();
57
+ } finally {
58
+ cleanup();
59
+ }
60
+ };
61
+ //#endregion
62
+ export { createPrintTable, printGrid };
63
+
64
+ //# sourceMappingURL=print.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"print.mjs","names":[],"sources":["../../src/util/print.ts"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * CoreUI PRO data-grid util/print.ts\n * License (https://coreui.io/pro/license/)\n * --------------------------------------------------------------------------\n */\n\nimport type { DataGridItem } from '../types'\n\n// Printing a virtualized grid straight from the DOM would print the twenty\n// rows that happen to be in the window, and a paginated one would print the\n// current page. Neither is what anyone means by \"print this table\", so the\n// grid renders a plain, complete table into the document, prints that, and\n// throws it away. The print stylesheet hides everything else on the page.\n\nconst CLASS_NAME_PRINT_ROOT = 'data-grid-print-root'\n\nexport interface PrintColumn {\n id: string\n label: string\n formatter?: (value: unknown, item: DataGridItem) => string\n}\n\nexport interface PrintRow {\n getValue: (columnId: string) => unknown\n original: DataGridItem\n}\n\nexport interface PrintTable {\n // The rows BEFORE pagination: the whole result of the user's sorting and\n // filtering, which is the table they think they are printing.\n getSortedRowModel?: () => { rows: PrintRow[] }\n getFilteredRowModel?: () => { rows: PrintRow[] }\n getCoreRowModel: () => { rows: PrintRow[] }\n}\n\nexport interface PrintOptions {\n // Printed above the table. Omitted entirely when not set.\n title?: string\n}\n\n// The widest row model the registered features expose — feature sets without\n// sorting or filtering fall back to the core one.\nconst printRows = (table: PrintTable): PrintRow[] => {\n if (typeof table.getSortedRowModel === 'function') {\n return table.getSortedRowModel().rows\n }\n\n if (typeof table.getFilteredRowModel === 'function') {\n return table.getFilteredRowModel().rows\n }\n\n return table.getCoreRowModel().rows\n}\n\nexport const createPrintTable = (\n table: PrintTable,\n columns: PrintColumn[],\n options: PrintOptions = {}\n): HTMLElement => {\n const root = document.createElement('div')\n root.className = CLASS_NAME_PRINT_ROOT\n\n if (options.title) {\n const heading = document.createElement('h1')\n heading.textContent = options.title\n root.append(heading)\n }\n\n const tableElement = document.createElement('table')\n tableElement.classList.add('table')\n\n const head = document.createElement('thead')\n const headRow = document.createElement('tr')\n for (const column of columns) {\n const cell = document.createElement('th')\n cell.scope = 'col'\n cell.textContent = column.label\n headRow.append(cell)\n }\n\n head.append(headRow)\n\n const body = document.createElement('tbody')\n for (const row of printRows(table)) {\n const rowElement = document.createElement('tr')\n for (const column of columns) {\n const cell = document.createElement('td')\n const value = row.getValue(column.id)\n // textContent, never innerHTML: a custom cell renderer's markup is not\n // reachable here, and the printed page must not become an injection\n // surface for the data.\n cell.textContent = column.formatter ? column.formatter(value, row.original) : String(value ?? '')\n rowElement.append(cell)\n }\n\n body.append(rowElement)\n }\n\n tableElement.append(head, body)\n root.append(tableElement)\n\n return root\n}\n\nexport const printGrid = (table: PrintTable, columns: PrintColumn[], options: PrintOptions = {}): void => {\n const root = createPrintTable(table, columns, options)\n document.body.append(root)\n\n // afterprint fires on every browser we support; the finally is the safety\n // net for a print dialog that never opens (a headless or blocked context),\n // where leaving the clone in the document would be worse than a flicker.\n const cleanup = () => {\n root.remove()\n window.removeEventListener('afterprint', cleanup)\n }\n\n window.addEventListener('afterprint', cleanup)\n\n try {\n window.print()\n } finally {\n cleanup()\n }\n}\n"],"mappings":";;;;;;AAeA,MAAM,wBAAwB;AA4B9B,MAAM,aAAa,UAAkC;CACnD,IAAI,OAAO,MAAM,sBAAsB,YACrC,OAAO,MAAM,kBAAkB,CAAC,CAAC;CAGnC,IAAI,OAAO,MAAM,wBAAwB,YACvC,OAAO,MAAM,oBAAoB,CAAC,CAAC;CAGrC,OAAO,MAAM,gBAAgB,CAAC,CAAC;AACjC;AAEA,MAAa,oBACX,OACA,SACA,UAAwB,CAAC,MACT;CAChB,MAAM,OAAO,SAAS,cAAc,KAAK;CACzC,KAAK,YAAY;CAEjB,IAAI,QAAQ,OAAO;EACjB,MAAM,UAAU,SAAS,cAAc,IAAI;EAC3C,QAAQ,cAAc,QAAQ;EAC9B,KAAK,OAAO,OAAO;CACrB;CAEA,MAAM,eAAe,SAAS,cAAc,OAAO;CACnD,aAAa,UAAU,IAAI,OAAO;CAElC,MAAM,OAAO,SAAS,cAAc,OAAO;CAC3C,MAAM,UAAU,SAAS,cAAc,IAAI;CAC3C,KAAK,MAAM,UAAU,SAAS;EAC5B,MAAM,OAAO,SAAS,cAAc,IAAI;EACxC,KAAK,QAAQ;EACb,KAAK,cAAc,OAAO;EAC1B,QAAQ,OAAO,IAAI;CACrB;CAEA,KAAK,OAAO,OAAO;CAEnB,MAAM,OAAO,SAAS,cAAc,OAAO;CAC3C,KAAK,MAAM,OAAO,UAAU,KAAK,GAAG;EAClC,MAAM,aAAa,SAAS,cAAc,IAAI;EAC9C,KAAK,MAAM,UAAU,SAAS;GAC5B,MAAM,OAAO,SAAS,cAAc,IAAI;GACxC,MAAM,QAAQ,IAAI,SAAS,OAAO,EAAE;GAIpC,KAAK,cAAc,OAAO,YAAY,OAAO,UAAU,OAAO,IAAI,QAAQ,IAAI,OAAO,SAAS,EAAE;GAChG,WAAW,OAAO,IAAI;EACxB;EAEA,KAAK,OAAO,UAAU;CACxB;CAEA,aAAa,OAAO,MAAM,IAAI;CAC9B,KAAK,OAAO,YAAY;CAExB,OAAO;AACT;AAEA,MAAa,aAAa,OAAmB,SAAwB,UAAwB,CAAC,MAAY;CACxG,MAAM,OAAO,iBAAiB,OAAO,SAAS,OAAO;CACrD,SAAS,KAAK,OAAO,IAAI;CAKzB,MAAM,gBAAgB;EACpB,KAAK,OAAO;EACZ,OAAO,oBAAoB,cAAc,OAAO;CAClD;CAEA,OAAO,iBAAiB,cAAc,OAAO;CAE7C,IAAI;EACF,OAAO,MAAM;CACf,UAAU;EACR,QAAQ;CACV;AACF"}
@@ -0,0 +1,43 @@
1
+ /*!
2
+ * CoreUI PRO data-grid v0.2.0-rc.0 (https://coreui.io)
3
+ * Copyright 2026 The CoreUI Team (https://github.com/orgs/coreui/people)
4
+ * License (https://coreui.io/pro/license/)
5
+ */
6
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
7
+ //#region src/engine/validate.ts
8
+ const FLAG_FEATURES = [
9
+ ["cellSelection", ["cellSelectionFeature"]],
10
+ ["columnFilters", ["columnFilteringFeature", "filteredRowModel"]],
11
+ ["columnOrder", ["columnOrderingFeature"]],
12
+ ["columnPinning", [
13
+ "columnPinningFeature",
14
+ "columnSizingFeature",
15
+ "columnVisibilityFeature"
16
+ ]],
17
+ ["columnSizing", ["columnResizingFeature", "columnSizingFeature"]],
18
+ ["columnVisibility", ["columnVisibilityFeature"]],
19
+ ["globalFilter", [
20
+ "filteredRowModel",
21
+ "filterFns",
22
+ "globalFilteringFeature"
23
+ ]],
24
+ ["pagination", ["paginatedRowModel", "rowPaginationFeature"]],
25
+ ["rowSelection", ["rowSelectionFeature"]],
26
+ ["selectFilters", [
27
+ "columnFacetingFeature",
28
+ "facetedRowModel",
29
+ "facetedUniqueValues"
30
+ ]],
31
+ ["sorting", ["rowSortingFeature", "sortedRowModel"]]
32
+ ];
33
+ const assertFeatureCoverage = (componentName, features, flags) => {
34
+ for (const [flag, requiredKeys] of FLAG_FEATURES) {
35
+ if (!flags[flag]) continue;
36
+ const label = flag === "selectFilters" ? "columnFilters (filterType \"select\")" : flag;
37
+ for (const key of requiredKeys) if (!(key in features)) throw new TypeError(`${componentName.toUpperCase()}: Option "${label}" requires feature "${key}" in "features".`);
38
+ }
39
+ };
40
+ //#endregion
41
+ exports.assertFeatureCoverage = assertFeatureCoverage;
42
+
43
+ //# sourceMappingURL=validate.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.cjs","names":[],"sources":["../../src/engine/validate.ts"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * CoreUI PRO data-grid engine/validate.ts\n * License (https://coreui.io/pro/license/)\n * --------------------------------------------------------------------------\n */\n\n// v9 exposes an API only when its feature is registered - a config flag whose\n// feature is missing from a custom `features` set would otherwise surface as\n// an undefined-method crash deep in a render. This maps each flag to the\n// registration keys its code paths reach and fails fast at construction with\n// the flag/feature pair spelled out.\nexport interface FeatureCoverageFlags {\n cellSelection: boolean\n columnFilters: boolean\n columnOrder: boolean\n columnPinning: boolean\n columnSizing: boolean\n columnVisibility: boolean\n globalFilter: boolean\n pagination: boolean\n rowSelection: boolean\n // columnFilters with a filterType: 'select' column - the value list comes\n // from faceting.\n selectFilters: boolean\n sorting: boolean\n}\n\nconst FLAG_FEATURES: ReadonlyArray<[keyof FeatureCoverageFlags, readonly string[]]> = [\n ['cellSelection', ['cellSelectionFeature']],\n ['columnFilters', ['columnFilteringFeature', 'filteredRowModel']],\n ['columnOrder', ['columnOrderingFeature']],\n // Pinning offsets come from column.getSize() and the edge classes from\n // getIsVisible(), so pinning drags sizing + visibility in with it.\n ['columnPinning', ['columnPinningFeature', 'columnSizingFeature', 'columnVisibilityFeature']],\n ['columnSizing', ['columnResizingFeature', 'columnSizingFeature']],\n ['columnVisibility', ['columnVisibilityFeature']],\n ['globalFilter', ['filteredRowModel', 'filterFns', 'globalFilteringFeature']],\n ['pagination', ['paginatedRowModel', 'rowPaginationFeature']],\n ['rowSelection', ['rowSelectionFeature']],\n ['selectFilters', ['columnFacetingFeature', 'facetedRowModel', 'facetedUniqueValues']],\n ['sorting', ['rowSortingFeature', 'sortedRowModel']]\n]\n\nexport const assertFeatureCoverage = (\n componentName: string,\n features: object,\n flags: FeatureCoverageFlags\n): void => {\n for (const [flag, requiredKeys] of FLAG_FEATURES) {\n if (!flags[flag]) {\n continue\n }\n\n const label = flag === 'selectFilters' ? 'columnFilters (filterType \"select\")' : flag\n for (const key of requiredKeys) {\n if (!(key in features)) {\n throw new TypeError(\n `${componentName.toUpperCase()}: Option \"${label}\" requires feature \"${key}\" in \"features\".`\n )\n }\n }\n }\n}\n"],"mappings":";;;;;;;AA4BA,MAAM,gBAAgF;CACpF,CAAC,iBAAiB,CAAC,sBAAsB,CAAC;CAC1C,CAAC,iBAAiB,CAAC,0BAA0B,kBAAkB,CAAC;CAChE,CAAC,eAAe,CAAC,uBAAuB,CAAC;CAGzC,CAAC,iBAAiB;EAAC;EAAwB;EAAuB;CAAyB,CAAC;CAC5F,CAAC,gBAAgB,CAAC,yBAAyB,qBAAqB,CAAC;CACjE,CAAC,oBAAoB,CAAC,yBAAyB,CAAC;CAChD,CAAC,gBAAgB;EAAC;EAAoB;EAAa;CAAwB,CAAC;CAC5E,CAAC,cAAc,CAAC,qBAAqB,sBAAsB,CAAC;CAC5D,CAAC,gBAAgB,CAAC,qBAAqB,CAAC;CACxC,CAAC,iBAAiB;EAAC;EAAyB;EAAmB;CAAqB,CAAC;CACrF,CAAC,WAAW,CAAC,qBAAqB,gBAAgB,CAAC;AACrD;AAEA,MAAa,yBACX,eACA,UACA,UACS;CACT,KAAK,MAAM,CAAC,MAAM,iBAAiB,eAAe;EAChD,IAAI,CAAC,MAAM,OACT;EAGF,MAAM,QAAQ,SAAS,kBAAkB,0CAAwC;EACjF,KAAK,MAAM,OAAO,cAChB,IAAI,EAAE,OAAO,WACX,MAAM,IAAI,UACR,GAAG,cAAc,YAAY,EAAE,YAAY,MAAM,sBAAsB,IAAI,iBAC7E;CAGN;AACF"}
@@ -0,0 +1,42 @@
1
+ /*!
2
+ * CoreUI PRO data-grid v0.2.0-rc.0 (https://coreui.io)
3
+ * Copyright 2026 The CoreUI Team (https://github.com/orgs/coreui/people)
4
+ * License (https://coreui.io/pro/license/)
5
+ */
6
+ //#region src/engine/validate.ts
7
+ const FLAG_FEATURES = [
8
+ ["cellSelection", ["cellSelectionFeature"]],
9
+ ["columnFilters", ["columnFilteringFeature", "filteredRowModel"]],
10
+ ["columnOrder", ["columnOrderingFeature"]],
11
+ ["columnPinning", [
12
+ "columnPinningFeature",
13
+ "columnSizingFeature",
14
+ "columnVisibilityFeature"
15
+ ]],
16
+ ["columnSizing", ["columnResizingFeature", "columnSizingFeature"]],
17
+ ["columnVisibility", ["columnVisibilityFeature"]],
18
+ ["globalFilter", [
19
+ "filteredRowModel",
20
+ "filterFns",
21
+ "globalFilteringFeature"
22
+ ]],
23
+ ["pagination", ["paginatedRowModel", "rowPaginationFeature"]],
24
+ ["rowSelection", ["rowSelectionFeature"]],
25
+ ["selectFilters", [
26
+ "columnFacetingFeature",
27
+ "facetedRowModel",
28
+ "facetedUniqueValues"
29
+ ]],
30
+ ["sorting", ["rowSortingFeature", "sortedRowModel"]]
31
+ ];
32
+ const assertFeatureCoverage = (componentName, features, flags) => {
33
+ for (const [flag, requiredKeys] of FLAG_FEATURES) {
34
+ if (!flags[flag]) continue;
35
+ const label = flag === "selectFilters" ? "columnFilters (filterType \"select\")" : flag;
36
+ for (const key of requiredKeys) if (!(key in features)) throw new TypeError(`${componentName.toUpperCase()}: Option "${label}" requires feature "${key}" in "features".`);
37
+ }
38
+ };
39
+ //#endregion
40
+ export { assertFeatureCoverage };
41
+
42
+ //# sourceMappingURL=validate.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.mjs","names":[],"sources":["../../src/engine/validate.ts"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * CoreUI PRO data-grid engine/validate.ts\n * License (https://coreui.io/pro/license/)\n * --------------------------------------------------------------------------\n */\n\n// v9 exposes an API only when its feature is registered - a config flag whose\n// feature is missing from a custom `features` set would otherwise surface as\n// an undefined-method crash deep in a render. This maps each flag to the\n// registration keys its code paths reach and fails fast at construction with\n// the flag/feature pair spelled out.\nexport interface FeatureCoverageFlags {\n cellSelection: boolean\n columnFilters: boolean\n columnOrder: boolean\n columnPinning: boolean\n columnSizing: boolean\n columnVisibility: boolean\n globalFilter: boolean\n pagination: boolean\n rowSelection: boolean\n // columnFilters with a filterType: 'select' column - the value list comes\n // from faceting.\n selectFilters: boolean\n sorting: boolean\n}\n\nconst FLAG_FEATURES: ReadonlyArray<[keyof FeatureCoverageFlags, readonly string[]]> = [\n ['cellSelection', ['cellSelectionFeature']],\n ['columnFilters', ['columnFilteringFeature', 'filteredRowModel']],\n ['columnOrder', ['columnOrderingFeature']],\n // Pinning offsets come from column.getSize() and the edge classes from\n // getIsVisible(), so pinning drags sizing + visibility in with it.\n ['columnPinning', ['columnPinningFeature', 'columnSizingFeature', 'columnVisibilityFeature']],\n ['columnSizing', ['columnResizingFeature', 'columnSizingFeature']],\n ['columnVisibility', ['columnVisibilityFeature']],\n ['globalFilter', ['filteredRowModel', 'filterFns', 'globalFilteringFeature']],\n ['pagination', ['paginatedRowModel', 'rowPaginationFeature']],\n ['rowSelection', ['rowSelectionFeature']],\n ['selectFilters', ['columnFacetingFeature', 'facetedRowModel', 'facetedUniqueValues']],\n ['sorting', ['rowSortingFeature', 'sortedRowModel']]\n]\n\nexport const assertFeatureCoverage = (\n componentName: string,\n features: object,\n flags: FeatureCoverageFlags\n): void => {\n for (const [flag, requiredKeys] of FLAG_FEATURES) {\n if (!flags[flag]) {\n continue\n }\n\n const label = flag === 'selectFilters' ? 'columnFilters (filterType \"select\")' : flag\n for (const key of requiredKeys) {\n if (!(key in features)) {\n throw new TypeError(\n `${componentName.toUpperCase()}: Option \"${label}\" requires feature \"${key}\" in \"features\".`\n )\n }\n }\n }\n}\n"],"mappings":";;;;;;AA4BA,MAAM,gBAAgF;CACpF,CAAC,iBAAiB,CAAC,sBAAsB,CAAC;CAC1C,CAAC,iBAAiB,CAAC,0BAA0B,kBAAkB,CAAC;CAChE,CAAC,eAAe,CAAC,uBAAuB,CAAC;CAGzC,CAAC,iBAAiB;EAAC;EAAwB;EAAuB;CAAyB,CAAC;CAC5F,CAAC,gBAAgB,CAAC,yBAAyB,qBAAqB,CAAC;CACjE,CAAC,oBAAoB,CAAC,yBAAyB,CAAC;CAChD,CAAC,gBAAgB;EAAC;EAAoB;EAAa;CAAwB,CAAC;CAC5E,CAAC,cAAc,CAAC,qBAAqB,sBAAsB,CAAC;CAC5D,CAAC,gBAAgB,CAAC,qBAAqB,CAAC;CACxC,CAAC,iBAAiB;EAAC;EAAyB;EAAmB;CAAqB,CAAC;CACrF,CAAC,WAAW,CAAC,qBAAqB,gBAAgB,CAAC;AACrD;AAEA,MAAa,yBACX,eACA,UACA,UACS;CACT,KAAK,MAAM,CAAC,MAAM,iBAAiB,eAAe;EAChD,IAAI,CAAC,MAAM,OACT;EAGF,MAAM,QAAQ,SAAS,kBAAkB,0CAAwC;EACjF,KAAK,MAAM,OAAO,cAChB,IAAI,EAAE,OAAO,WACX,MAAM,IAAI,UACR,GAAG,cAAc,YAAY,EAAE,YAAY,MAAM,sBAAsB,IAAI,iBAC7E;CAGN;AACF"}