@rowsncolumns/toolkit 24.4.5 → 24.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/dist/cjs/autofilter-condition.d.ts +45 -1
  2. package/dist/cjs/autofilter-condition.d.ts.map +1 -1
  3. package/dist/cjs/autofilter-condition.js +135 -12
  4. package/dist/cjs/excel-parser/helpers.d.ts +15 -1
  5. package/dist/cjs/excel-parser/helpers.d.ts.map +1 -1
  6. package/dist/cjs/excel-parser/helpers.js +119 -5
  7. package/dist/cjs/excel-parser/interface.d.ts +3 -1
  8. package/dist/cjs/excel-parser/interface.d.ts.map +1 -1
  9. package/dist/cjs/excel-parser/plugins/ods/index.d.ts.map +1 -1
  10. package/dist/cjs/excel-parser/plugins/ods/index.js +186 -97
  11. package/dist/cjs/excel-parser/plugins/ods/styles.d.ts +15 -0
  12. package/dist/cjs/excel-parser/plugins/ods/styles.d.ts.map +1 -1
  13. package/dist/cjs/excel-parser/plugins/ods/styles.js +80 -6
  14. package/dist/cjs/excel-parser/plugins/xlsb/index.d.ts.map +1 -1
  15. package/dist/cjs/excel-parser/plugins/xlsb/index.js +107 -103
  16. package/dist/cjs/excel-parser/plugins/xlsx/charts.d.ts +77 -1
  17. package/dist/cjs/excel-parser/plugins/xlsx/charts.d.ts.map +1 -1
  18. package/dist/cjs/excel-parser/plugins/xlsx/charts.js +920 -122
  19. package/dist/cjs/excel-parser/plugins/xlsx/drawing.d.ts +7 -1
  20. package/dist/cjs/excel-parser/plugins/xlsx/drawing.d.ts.map +1 -1
  21. package/dist/cjs/excel-parser/plugins/xlsx/drawing.js +24 -9
  22. package/dist/cjs/excel-parser/plugins/xlsx/form-controls.d.ts +24 -3
  23. package/dist/cjs/excel-parser/plugins/xlsx/form-controls.d.ts.map +1 -1
  24. package/dist/cjs/excel-parser/plugins/xlsx/form-controls.js +25 -3
  25. package/dist/cjs/excel-parser/plugins/xlsx/index.d.ts +24 -1
  26. package/dist/cjs/excel-parser/plugins/xlsx/index.d.ts.map +1 -1
  27. package/dist/cjs/excel-parser/plugins/xlsx/index.js +561 -394
  28. package/dist/cjs/excel-parser/plugins/xlsx/pivots.d.ts +8 -2
  29. package/dist/cjs/excel-parser/plugins/xlsx/pivots.d.ts.map +1 -1
  30. package/dist/cjs/excel-parser/plugins/xlsx/pivots.js +312 -21
  31. package/dist/cjs/excel-parser/plugins/xlsx/relationships.d.ts +6 -0
  32. package/dist/cjs/excel-parser/plugins/xlsx/relationships.d.ts.map +1 -1
  33. package/dist/cjs/excel-parser/plugins/xlsx/relationships.js +9 -0
  34. package/dist/cjs/excel-parser/plugins/xlsx/theme.d.ts +1 -1
  35. package/dist/cjs/excel-parser/types.d.ts +9 -1
  36. package/dist/cjs/excel-parser/types.d.ts.map +1 -1
  37. package/dist/cjs/excel-parser/workbook.d.ts +1 -0
  38. package/dist/cjs/excel-parser/workbook.d.ts.map +1 -1
  39. package/dist/cjs/excel-parser/workbook.js +5 -0
  40. package/dist/cjs/excel-parser/worker.js +2 -0
  41. package/dist/cjs/exporter/ods/ods-export.d.ts.map +1 -1
  42. package/dist/cjs/exporter/ods/ods-export.js +255 -80
  43. package/dist/cjs/exporter/xlsx/chart-builder.d.ts +7 -1
  44. package/dist/cjs/exporter/xlsx/chart-builder.d.ts.map +1 -1
  45. package/dist/cjs/exporter/xlsx/chart-builder.js +902 -119
  46. package/dist/cjs/exporter/xlsx/form-controls-builder.d.ts +16 -3
  47. package/dist/cjs/exporter/xlsx/form-controls-builder.d.ts.map +1 -1
  48. package/dist/cjs/exporter/xlsx/form-controls-builder.js +30 -8
  49. package/dist/cjs/exporter/xlsx/pivot-builder.d.ts.map +1 -1
  50. package/dist/cjs/exporter/xlsx/pivot-builder.js +206 -162
  51. package/dist/cjs/exporter/xlsx/style-builder.d.ts +8 -2
  52. package/dist/cjs/exporter/xlsx/style-builder.d.ts.map +1 -1
  53. package/dist/cjs/exporter/xlsx/style-builder.js +25 -0
  54. package/dist/cjs/exporter/xlsx/xlsx-export.d.ts +2 -2
  55. package/dist/cjs/exporter/xlsx/xlsx-export.d.ts.map +1 -1
  56. package/dist/cjs/exporter/xlsx/xlsx-export.js +884 -470
  57. package/dist/esm/autofilter-condition.d.ts +45 -1
  58. package/dist/esm/autofilter-condition.d.ts.map +1 -1
  59. package/dist/esm/autofilter-condition.js +131 -11
  60. package/dist/esm/excel-parser/helpers.d.ts +15 -1
  61. package/dist/esm/excel-parser/helpers.d.ts.map +1 -1
  62. package/dist/esm/excel-parser/helpers.js +94 -4
  63. package/dist/esm/excel-parser/interface.d.ts +3 -1
  64. package/dist/esm/excel-parser/interface.d.ts.map +1 -1
  65. package/dist/esm/excel-parser/plugins/ods/index.d.ts.map +1 -1
  66. package/dist/esm/excel-parser/plugins/ods/index.js +105 -22
  67. package/dist/esm/excel-parser/plugins/ods/styles.d.ts +15 -0
  68. package/dist/esm/excel-parser/plugins/ods/styles.d.ts.map +1 -1
  69. package/dist/esm/excel-parser/plugins/ods/styles.js +79 -5
  70. package/dist/esm/excel-parser/plugins/xlsb/index.d.ts.map +1 -1
  71. package/dist/esm/excel-parser/plugins/xlsb/index.js +15 -7
  72. package/dist/esm/excel-parser/plugins/xlsx/charts.d.ts +77 -1
  73. package/dist/esm/excel-parser/plugins/xlsx/charts.d.ts.map +1 -1
  74. package/dist/esm/excel-parser/plugins/xlsx/charts.js +708 -16
  75. package/dist/esm/excel-parser/plugins/xlsx/drawing.d.ts +7 -1
  76. package/dist/esm/excel-parser/plugins/xlsx/drawing.d.ts.map +1 -1
  77. package/dist/esm/excel-parser/plugins/xlsx/drawing.js +23 -0
  78. package/dist/esm/excel-parser/plugins/xlsx/form-controls.d.ts +24 -3
  79. package/dist/esm/excel-parser/plugins/xlsx/form-controls.d.ts.map +1 -1
  80. package/dist/esm/excel-parser/plugins/xlsx/form-controls.js +21 -3
  81. package/dist/esm/excel-parser/plugins/xlsx/index.d.ts +24 -1
  82. package/dist/esm/excel-parser/plugins/xlsx/index.d.ts.map +1 -1
  83. package/dist/esm/excel-parser/plugins/xlsx/index.js +192 -54
  84. package/dist/esm/excel-parser/plugins/xlsx/pivots.d.ts +8 -2
  85. package/dist/esm/excel-parser/plugins/xlsx/pivots.d.ts.map +1 -1
  86. package/dist/esm/excel-parser/plugins/xlsx/pivots.js +220 -4
  87. package/dist/esm/excel-parser/plugins/xlsx/relationships.d.ts +6 -0
  88. package/dist/esm/excel-parser/plugins/xlsx/relationships.d.ts.map +1 -1
  89. package/dist/esm/excel-parser/plugins/xlsx/relationships.js +9 -0
  90. package/dist/esm/excel-parser/plugins/xlsx/theme.d.ts +1 -1
  91. package/dist/esm/excel-parser/types.d.ts +9 -1
  92. package/dist/esm/excel-parser/types.d.ts.map +1 -1
  93. package/dist/esm/excel-parser/workbook.d.ts +1 -0
  94. package/dist/esm/excel-parser/workbook.d.ts.map +1 -1
  95. package/dist/esm/excel-parser/workbook.js +4 -0
  96. package/dist/esm/excel-parser/worker.js +2 -0
  97. package/dist/esm/exporter/ods/ods-export.d.ts.map +1 -1
  98. package/dist/esm/exporter/ods/ods-export.js +238 -72
  99. package/dist/esm/exporter/xlsx/chart-builder.d.ts +7 -1
  100. package/dist/esm/exporter/xlsx/chart-builder.d.ts.map +1 -1
  101. package/dist/esm/exporter/xlsx/chart-builder.js +674 -58
  102. package/dist/esm/exporter/xlsx/form-controls-builder.d.ts +16 -3
  103. package/dist/esm/exporter/xlsx/form-controls-builder.d.ts.map +1 -1
  104. package/dist/esm/exporter/xlsx/form-controls-builder.js +29 -8
  105. package/dist/esm/exporter/xlsx/pivot-builder.d.ts.map +1 -1
  106. package/dist/esm/exporter/xlsx/pivot-builder.js +187 -139
  107. package/dist/esm/exporter/xlsx/style-builder.d.ts +8 -2
  108. package/dist/esm/exporter/xlsx/style-builder.d.ts.map +1 -1
  109. package/dist/esm/exporter/xlsx/style-builder.js +28 -0
  110. package/dist/esm/exporter/xlsx/xlsx-export.d.ts +2 -2
  111. package/dist/esm/exporter/xlsx/xlsx-export.d.ts.map +1 -1
  112. package/dist/esm/exporter/xlsx/xlsx-export.js +600 -206
  113. package/package.json +10 -5
@@ -21,10 +21,44 @@ export type AutoFilterCondition = {
21
21
  type: ConditionType;
22
22
  values: ConditionValue[];
23
23
  };
24
+ /**
25
+ * The condition part of a column's `filterCriteria` as `<filterColumn>`
26
+ * carries it: one clause, or two clauses joined by Excel's Custom AutoFilter
27
+ * And / Or (`<customFilters and="1">` with two `<customFilter>` children).
28
+ */
29
+ export type AutoFilterCriteriaConditions = {
30
+ condition: AutoFilterCondition;
31
+ condition2?: AutoFilterCondition;
32
+ conditionJoin?: "AND" | "OR";
33
+ };
24
34
  export type RawCustomFilter = {
25
35
  operator?: string;
26
36
  val?: string;
27
37
  };
38
+ /** `<top10 top percent val>` attributes as parsed from the sheet XML. */
39
+ export type RawTop10Filter = {
40
+ top?: string;
41
+ percent?: string;
42
+ val?: string;
43
+ };
44
+ /**
45
+ * `<filterColumn>` condition XML for a column's criteria: a two-clause Custom
46
+ * AutoFilter becomes `<customFilters [and="1"]>` with both clauses when each
47
+ * has a single-element form; otherwise the first clause alone is written the
48
+ * way `buildAutoFilterConditionXml` does (the second is dropped — say so in
49
+ * the PR when this asymmetry matters).
50
+ */
51
+ export declare const buildAutoFilterCriteriaXml: (criteria: {
52
+ condition?: {
53
+ type?: ConditionType | null;
54
+ values?: ConditionValue[] | null;
55
+ } | null;
56
+ condition2?: {
57
+ type?: ConditionType | null;
58
+ values?: ConditionValue[] | null;
59
+ } | null;
60
+ conditionJoin?: "AND" | "OR" | null;
61
+ }) => string | null;
28
62
  /**
29
63
  * Build the `<customFilters>` / `<dynamicFilter>` XML for a filter condition,
30
64
  * or `null` when the condition type has no AutoFilter representation (BLANK /
@@ -35,9 +69,19 @@ export declare const buildAutoFilterConditionXml: (condition: {
35
69
  type?: ConditionType | null;
36
70
  values?: ConditionValue[] | null;
37
71
  } | null | undefined) => string | null;
72
+ /** Map an Excel `<top10 top percent val>` back to a condition, or null. */
73
+ export declare const top10FilterToCondition: (raw: RawTop10Filter | undefined) => AutoFilterCondition | null;
38
74
  /** Map an Excel `<dynamicFilter type=…>` back to a condition, or null. */
39
75
  export declare const dynamicFilterToCondition: (type: string | undefined) => AutoFilterCondition | null;
40
- /** Map Excel `<customFilters>` children back to a condition, or null. */
76
+ /**
77
+ * Map Excel `<customFilters>` children back to a column's condition(s), or
78
+ * null. Two children are a `NUMBER_BETWEEN` (`and`, `>=` then `<=`) or
79
+ * `NUMBER_NOT_BETWEEN` (or, `<` then `>`) range when they have that exact
80
+ * shape — the form the exporter writes for those types — and otherwise a
81
+ * Custom AutoFilter's two clauses joined by And / Or.
82
+ */
83
+ export declare const customFiltersToCriteria: (filters: RawCustomFilter[], and: boolean) => AutoFilterCriteriaConditions | null;
84
+ /** Map Excel `<customFilters>` children back to a single condition, or null. */
41
85
  export declare const customFiltersToCondition: (filters: RawCustomFilter[], and: boolean) => AutoFilterCondition | null;
42
86
  export {};
43
87
  //# sourceMappingURL=autofilter-condition.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"autofilter-condition.d.ts","sourceRoot":"","sources":["../../autofilter-condition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEhE;;;;;;;;;;;;;;GAcG;AAEH,KAAK,cAAc,GAAG;IAAE,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAAC;AACnD,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,cAAc,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAmElE;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,GACtC,WAAW;IAAE,IAAI,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,cAAc,EAAE,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,KAC9F,MAAM,GAAG,IA4BX,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,wBAAwB,GACnC,MAAM,MAAM,GAAG,SAAS,KACvB,mBAAmB,GAAG,IAIxB,CAAC;AAIF,yEAAyE;AACzE,eAAO,MAAM,wBAAwB,GACnC,SAAS,eAAe,EAAE,EAC1B,KAAK,OAAO,KACX,mBAAmB,GAAG,IA6CxB,CAAC"}
1
+ {"version":3,"file":"autofilter-condition.d.ts","sourceRoot":"","sources":["../../autofilter-condition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEhE;;;;;;;;;;;;;;GAcG;AAEH,KAAK,cAAc,GAAG;IAAE,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAAC;AACnD,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,cAAc,EAAE,CAAC;CAC1B,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,4BAA4B,GAAG;IACzC,SAAS,EAAE,mBAAmB,CAAC;IAC/B,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,aAAa,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAClE,yEAAyE;AACzE,MAAM,MAAM,cAAc,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAoH9E;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,GAAI,UAAU;IACnD,SAAS,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;QAAC,MAAM,CAAC,EAAE,cAAc,EAAE,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IACrF,UAAU,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;QAAC,MAAM,CAAC,EAAE,cAAc,EAAE,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IACtF,aAAa,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;CACrC,KAAG,MAAM,GAAG,IAUZ,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,GACtC,WAAW;IAAE,IAAI,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,cAAc,EAAE,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,KAC9F,MAAM,GAAG,IAmCX,CAAC;AAEF,2EAA2E;AAC3E,eAAO,MAAM,sBAAsB,GACjC,KAAK,cAAc,GAAG,SAAS,KAC9B,mBAAmB,GAAG,IAexB,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,wBAAwB,GACnC,MAAM,MAAM,GAAG,SAAS,KACvB,mBAAmB,GAAG,IAIxB,CAAC;AAIF;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,GAClC,SAAS,eAAe,EAAE,EAC1B,KAAK,OAAO,KACX,4BAA4B,GAAG,IA8BjC,CAAC;AAEF,gFAAgF;AAChF,eAAO,MAAM,wBAAwB,GACnC,SAAS,eAAe,EAAE,EAC1B,KAAK,OAAO,KACX,mBAAmB,GAAG,IAAgE,CAAC"}
@@ -17,6 +17,36 @@ const DYNAMIC_BY_TYPE = {
17
17
  DATE_NEXT_MONTH: "nextMonth",
18
18
  NUMBER_ABOVE_AVERAGE: "aboveAverage",
19
19
  NUMBER_BELOW_AVERAGE: "belowAverage",
20
+ DATE_THIS_QUARTER: "thisQuarter",
21
+ DATE_LAST_QUARTER: "lastQuarter",
22
+ DATE_NEXT_QUARTER: "nextQuarter",
23
+ DATE_THIS_YEAR: "thisYear",
24
+ DATE_LAST_YEAR: "lastYear",
25
+ DATE_NEXT_YEAR: "nextYear",
26
+ DATE_YEAR_TO_DATE: "yearToDate",
27
+ DATE_IN_Q1: "Q1",
28
+ DATE_IN_Q2: "Q2",
29
+ DATE_IN_Q3: "Q3",
30
+ DATE_IN_Q4: "Q4",
31
+ DATE_IN_M1: "M1",
32
+ DATE_IN_M2: "M2",
33
+ DATE_IN_M3: "M3",
34
+ DATE_IN_M4: "M4",
35
+ DATE_IN_M5: "M5",
36
+ DATE_IN_M6: "M6",
37
+ DATE_IN_M7: "M7",
38
+ DATE_IN_M8: "M8",
39
+ DATE_IN_M9: "M9",
40
+ DATE_IN_M10: "M10",
41
+ DATE_IN_M11: "M11",
42
+ DATE_IN_M12: "M12",
43
+ };
44
+ // Excel's "Top 10…" AutoFilter: `<top10 top="1|0" percent="1|0" val="N"/>`.
45
+ const TOP10_BY_TYPE = {
46
+ NUMBER_TOP_N: { top: true, percent: false },
47
+ NUMBER_BOTTOM_N: { top: false, percent: false },
48
+ NUMBER_TOP_PERCENT: { top: true, percent: true },
49
+ NUMBER_BOTTOM_PERCENT: { top: false, percent: true },
20
50
  };
21
51
  const TYPE_BY_DYNAMIC = Object.fromEntries(Object.entries(DYNAMIC_BY_TYPE).map(([k, v]) => [v, k]));
22
52
  // condition type -> single customFilter operator (number + date comparisons)
@@ -52,6 +82,43 @@ const TEXT_WRAP = {
52
82
  TEXT_ENDS_WITH: { op: "equal", wrap: (v) => `*${v}` },
53
83
  };
54
84
  const customFilterXml = (operator, val) => `<customFilter operator="${operator}" val="${escapeXml(val)}"/>`;
85
+ /**
86
+ * A single `<customFilter>` for one comparison clause (number / date / text),
87
+ * or `null` when the clause has no single-element form (between, dynamic, …).
88
+ */
89
+ const singleCustomFilterXml = (condition) => {
90
+ const type = condition?.type;
91
+ if (!type)
92
+ return null;
93
+ const v0 = condition?.values?.[0]?.userEnteredValue;
94
+ if (v0 == null)
95
+ return null;
96
+ const op = OPERATOR_BY_TYPE[type];
97
+ if (op)
98
+ return customFilterXml(op, v0);
99
+ const text = TEXT_WRAP[type];
100
+ if (text)
101
+ return customFilterXml(text.op, text.wrap(v0));
102
+ return null;
103
+ };
104
+ /**
105
+ * `<filterColumn>` condition XML for a column's criteria: a two-clause Custom
106
+ * AutoFilter becomes `<customFilters [and="1"]>` with both clauses when each
107
+ * has a single-element form; otherwise the first clause alone is written the
108
+ * way `buildAutoFilterConditionXml` does (the second is dropped — say so in
109
+ * the PR when this asymmetry matters).
110
+ */
111
+ export const buildAutoFilterCriteriaXml = (criteria) => {
112
+ if (criteria.condition2?.type) {
113
+ const first = singleCustomFilterXml(criteria.condition);
114
+ const second = singleCustomFilterXml(criteria.condition2);
115
+ if (first && second) {
116
+ const and = criteria.conditionJoin === "OR" ? "" : ` and="1"`;
117
+ return `<customFilters${and}>${first}${second}</customFilters>`;
118
+ }
119
+ }
120
+ return buildAutoFilterConditionXml(criteria.condition);
121
+ };
55
122
  /**
56
123
  * Build the `<customFilters>` / `<dynamicFilter>` XML for a filter condition,
57
124
  * or `null` when the condition type has no AutoFilter representation (BLANK /
@@ -68,6 +135,13 @@ export const buildAutoFilterConditionXml = (condition) => {
68
135
  const dynamic = DYNAMIC_BY_TYPE[type];
69
136
  if (dynamic)
70
137
  return `<dynamicFilter type="${dynamic}"/>`;
138
+ const top10 = TOP10_BY_TYPE[type];
139
+ if (top10) {
140
+ const n = Number(v0);
141
+ if (!Number.isFinite(n) || n <= 0)
142
+ return null;
143
+ return `<top10 top="${top10.top ? 1 : 0}" percent="${top10.percent ? 1 : 0}" val="${n}"/>`;
144
+ }
71
145
  if (type === "NUMBER_BETWEEN" || type === "DATE_BETWEEN") {
72
146
  if (v0 == null || v1 == null)
73
147
  return null;
@@ -88,6 +162,25 @@ export const buildAutoFilterConditionXml = (condition) => {
88
162
  }
89
163
  return null;
90
164
  };
165
+ /** Map an Excel `<top10 top percent val>` back to a condition, or null. */
166
+ export const top10FilterToCondition = (raw) => {
167
+ if (!raw)
168
+ return null;
169
+ const n = Number(raw.val);
170
+ if (!Number.isFinite(n) || n <= 0)
171
+ return null;
172
+ // Both attributes default to true/false per the schema: `top` defaults to 1, `percent` to 0.
173
+ const top = raw.top === undefined || raw.top === "1" || raw.top === "true";
174
+ const percent = raw.percent === "1" || raw.percent === "true";
175
+ const type = top
176
+ ? percent
177
+ ? "NUMBER_TOP_PERCENT"
178
+ : "NUMBER_TOP_N"
179
+ : percent
180
+ ? "NUMBER_BOTTOM_PERCENT"
181
+ : "NUMBER_BOTTOM_N";
182
+ return { type, values: [{ userEnteredValue: String(n) }] };
183
+ };
91
184
  /** Map an Excel `<dynamicFilter type=…>` back to a condition, or null. */
92
185
  export const dynamicFilterToCondition = (type) => {
93
186
  if (!type)
@@ -96,22 +189,49 @@ export const dynamicFilterToCondition = (type) => {
96
189
  return conditionType ? { type: conditionType, values: [] } : null;
97
190
  };
98
191
  const isNumeric = (v) => v !== "" && !Number.isNaN(Number(v));
99
- /** Map Excel `<customFilters>` children back to a condition, or null. */
100
- export const customFiltersToCondition = (filters, and) => {
192
+ /**
193
+ * Map Excel `<customFilters>` children back to a column's condition(s), or
194
+ * null. Two children are a `NUMBER_BETWEEN` (`and`, `>=` then `<=`) or
195
+ * `NUMBER_NOT_BETWEEN` (or, `<` then `>`) range when they have that exact
196
+ * shape — the form the exporter writes for those types — and otherwise a
197
+ * Custom AutoFilter's two clauses joined by And / Or.
198
+ */
199
+ export const customFiltersToCriteria = (filters, and) => {
101
200
  const valid = filters.filter((f) => f && f.val !== undefined);
102
201
  if (valid.length === 0)
103
202
  return null;
104
- // Two filters => a range (between when AND, not-between when OR).
105
203
  if (valid.length >= 2) {
106
- const v0 = String(valid[0].val ?? "");
107
- const v1 = String(valid[1].val ?? "");
108
- return {
109
- type: and ? "NUMBER_BETWEEN" : "NUMBER_NOT_BETWEEN",
110
- values: [{ userEnteredValue: v0 }, { userEnteredValue: v1 }],
111
- };
204
+ const [first, second] = valid;
205
+ const v0 = String(first.val ?? "");
206
+ const v1 = String(second.val ?? "");
207
+ const isRange = and
208
+ ? first.operator === "greaterThanOrEqual" &&
209
+ second.operator === "lessThanOrEqual"
210
+ : first.operator === "lessThan" && second.operator === "greaterThan";
211
+ if (isRange && isNumeric(v0) && isNumeric(v1)) {
212
+ return {
213
+ condition: {
214
+ type: and ? "NUMBER_BETWEEN" : "NUMBER_NOT_BETWEEN",
215
+ values: [{ userEnteredValue: v0 }, { userEnteredValue: v1 }],
216
+ },
217
+ };
218
+ }
219
+ const condition = singleCustomFilterToCondition(first);
220
+ const condition2 = singleCustomFilterToCondition(second);
221
+ if (!condition)
222
+ return condition2 ? { condition: condition2 } : null;
223
+ return condition2
224
+ ? { condition, condition2, conditionJoin: and ? "AND" : "OR" }
225
+ : { condition };
112
226
  }
113
- const operator = valid[0].operator ?? "equal";
114
- const val = String(valid[0].val ?? "");
227
+ const condition = singleCustomFilterToCondition(valid[0]);
228
+ return condition ? { condition } : null;
229
+ };
230
+ /** Map Excel `<customFilters>` children back to a single condition, or null. */
231
+ export const customFiltersToCondition = (filters, and) => customFiltersToCriteria(filters, and)?.condition ?? null;
232
+ const singleCustomFilterToCondition = (filter) => {
233
+ const operator = filter.operator ?? "equal";
234
+ const val = String(filter.val ?? "");
115
235
  // Text wildcards: equal/notEqual carrying * map back to contains/starts/ends.
116
236
  if ((operator === "equal" || operator === "notEqual") && /[*?]/.test(val)) {
117
237
  const negated = operator === "notEqual";
@@ -1,5 +1,5 @@
1
1
  import type { GridRange } from "@rowsncolumns/common-types";
2
- import type { Column, FilterSpec, TableTotalsRowFunction } from "@rowsncolumns/spreadsheet";
2
+ import type { Column, FilterSpec, SortSpecs, TableTotalsRowFunction } from "@rowsncolumns/spreadsheet";
3
3
  export declare const getRangeFromAddressRef: (ref: string) => GridRange | undefined;
4
4
  /**
5
5
  * Convert an xlsx column width (in units of max-digit-width of the
@@ -29,6 +29,20 @@ export declare function createFilterSpecsFromAutoFilter(autoFilter: any,
29
29
  * (caller doesn't have access to workbook dxfs).
30
30
  */
31
31
  resolveDxfColor?: (dxfId: number, cellColor: boolean) => string | undefined): FilterSpec[];
32
+ /**
33
+ * The table-relative column ids whose header shows NO filter button —
34
+ * `<filterColumn colId="n" hiddenButton="1"/>` (Excel's per-column toggle;
35
+ * the table-level toggle is the presence of `<autoFilter>` itself).
36
+ */
37
+ export declare function hiddenFilterButtonColumns(autoFilter: any): Set<number>;
38
+ /**
39
+ * A table's persisted sort levels — `<sortState><sortCondition ref
40
+ * descending sortBy dxfId iconSet iconId customList/></sortState>` — as
41
+ * range-relative `SortSpecs` (the inverse of the exporter's
42
+ * `buildTableSortStateXml`). A colour level's `dxfId` resolves through
43
+ * `resolveDxfColor` (skipped when the caller has no dxf table).
44
+ */
45
+ export declare function createSortSpecsFromSortState(sortState: any, range: GridRange, resolveDxfColor?: (dxfId: number, cellColor: boolean) => string | undefined): SortSpecs[];
32
46
  /**
33
47
  * Reads an Excel file and extracts sheet metadata
34
48
  */
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../excel-parser/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAEV,MAAM,EACN,UAAU,EACV,sBAAsB,EACvB,MAAM,2BAA2B,CAAC;AASnC,eAAO,MAAM,sBAAsB,GAAI,KAAK,MAAM,KAAG,SAAS,GAAG,SAIhE,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,UAIrD;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,UAMpC;AAmBD,eAAO,MAAM,wBAAwB,GACnC,OAAO,OAAO,KACb,KAAK,IAAI,sBACwD,CAAC;AAErE;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GACjC,QAAQ,GAAG,KACV,IAAI,CAAC,MAAM,EAAE,mBAAmB,GAAG,gBAAgB,GAAG,kBAAkB,CAmB1E,CAAC;AAqBF,wBAAgB,+BAA+B,CAC7C,UAAU,EAAE,GAAG;AACf;;;;GAIG;AACH,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,gBA8F5E;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,WAAW,wBAkB3D"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../excel-parser/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAEV,MAAM,EACN,UAAU,EACV,SAAS,EACT,sBAAsB,EACvB,MAAM,2BAA2B,CAAC;AAUnC,eAAO,MAAM,sBAAsB,GAAI,KAAK,MAAM,KAAG,SAAS,GAAG,SAIhE,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,UAIrD;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,UAMpC;AAmBD,eAAO,MAAM,wBAAwB,GACnC,OAAO,OAAO,KACb,KAAK,IAAI,sBACwD,CAAC;AAErE;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GACjC,QAAQ,GAAG,KACV,IAAI,CAAC,MAAM,EAAE,mBAAmB,GAAG,gBAAgB,GAAG,kBAAkB,CAmB1E,CAAC;AAqBF,wBAAgB,+BAA+B,CAC7C,UAAU,EAAE,GAAG;AACf;;;;GAIG;AACH,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,gBA0G5E;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAgBtE;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,GAAG,EACd,KAAK,EAAE,SAAS,EAChB,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,GAC1E,SAAS,EAAE,CA2Cb;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,WAAW,wBAkB3D"}
@@ -1,4 +1,4 @@
1
- import { customFiltersToCondition, dynamicFilterToCondition, } from "../autofilter-condition";
1
+ import { customFiltersToCriteria, dynamicFilterToCondition, top10FilterToCondition, } from "../autofilter-condition";
2
2
  import { addressToSelection } from "@rowsncolumns/utils";
3
3
  export const getRangeFromAddressRef = (ref) => {
4
4
  const selection = addressToSelection(ref);
@@ -153,9 +153,9 @@ resolveDxfColor) {
153
153
  const a = f.a$ ?? f;
154
154
  return { operator: a?.operator, val: a?.val };
155
155
  });
156
- const condition = customFiltersToCondition(cfArray, and);
157
- if (condition)
158
- criteria.condition = condition;
156
+ const conditions = customFiltersToCriteria(cfArray, and);
157
+ if (conditions)
158
+ Object.assign(criteria, conditions);
159
159
  }
160
160
  // <dynamicFilter type="thisMonth"/> etc.
161
161
  const dynamicNode = col.dynamicFilter ?? col["x:dynamicFilter"];
@@ -165,12 +165,102 @@ resolveDxfColor) {
165
165
  if (condition)
166
166
  criteria.condition = condition;
167
167
  }
168
+ // <top10 top="1" percent="0" val="10"/> (Excel's "Top 10…")
169
+ const top10Node = col.top10 ?? col["x:top10"];
170
+ if (top10Node && !criteria.condition) {
171
+ const a = top10Node.a$ ?? top10Node;
172
+ const condition = top10FilterToCondition({
173
+ top: a?.top !== undefined ? String(a.top) : undefined,
174
+ percent: a?.percent !== undefined ? String(a.percent) : undefined,
175
+ val: a?.val !== undefined ? String(a.val) : undefined,
176
+ });
177
+ if (condition)
178
+ criteria.condition = condition;
179
+ }
168
180
  if (Object.keys(criteria).length > 0) {
169
181
  filterSpecs.push({ columnIndex, filterCriteria: criteria });
170
182
  }
171
183
  }
172
184
  return filterSpecs.sort((a, b) => a.columnIndex - b.columnIndex);
173
185
  }
186
+ /**
187
+ * The table-relative column ids whose header shows NO filter button —
188
+ * `<filterColumn colId="n" hiddenButton="1"/>` (Excel's per-column toggle;
189
+ * the table-level toggle is the presence of `<autoFilter>` itself).
190
+ */
191
+ export function hiddenFilterButtonColumns(autoFilter) {
192
+ const hidden = new Set();
193
+ const filterColumn = autoFilter?.filterColumn ?? autoFilter?.["x:filterColumn"];
194
+ if (!filterColumn)
195
+ return hidden;
196
+ const filterColumns = Array.isArray(filterColumn)
197
+ ? filterColumn
198
+ : [filterColumn];
199
+ for (const col of filterColumns) {
200
+ const attrs = col?.a$ ?? {};
201
+ const hiddenButton = attrs.hiddenButton;
202
+ if (hiddenButton !== "1" && hiddenButton !== "true")
203
+ continue;
204
+ const columnIndex = parseInt(String(attrs.colId), 10);
205
+ if (Number.isFinite(columnIndex))
206
+ hidden.add(columnIndex);
207
+ }
208
+ return hidden;
209
+ }
210
+ /**
211
+ * A table's persisted sort levels — `<sortState><sortCondition ref
212
+ * descending sortBy dxfId iconSet iconId customList/></sortState>` — as
213
+ * range-relative `SortSpecs` (the inverse of the exporter's
214
+ * `buildTableSortStateXml`). A colour level's `dxfId` resolves through
215
+ * `resolveDxfColor` (skipped when the caller has no dxf table).
216
+ */
217
+ export function createSortSpecsFromSortState(sortState, range, resolveDxfColor) {
218
+ const raw = sortState?.sortCondition ?? sortState?.["x:sortCondition"];
219
+ if (!raw)
220
+ return [];
221
+ const conditions = Array.isArray(raw) ? raw : [raw];
222
+ const specs = [];
223
+ for (const condition of conditions) {
224
+ const attrs = condition?.a$ ?? {};
225
+ const conditionRange = attrs.ref
226
+ ? getRangeFromAddressRef(String(attrs.ref))
227
+ : undefined;
228
+ if (!conditionRange)
229
+ continue;
230
+ const dimensionIndex = conditionRange.startColumnIndex - range.startColumnIndex;
231
+ if (dimensionIndex < 0)
232
+ continue;
233
+ const spec = {
234
+ dimensionIndex,
235
+ sortOrder: attrs.descending === "1" || attrs.descending === "true"
236
+ ? "DESCENDING"
237
+ : "ASCENDING",
238
+ };
239
+ const sortBy = attrs.sortBy;
240
+ if (sortBy === "cellColor" || sortBy === "fontColor") {
241
+ spec.sortBy = sortBy;
242
+ const dxfId = parseInt(String(attrs.dxfId), 10);
243
+ const color = Number.isFinite(dxfId)
244
+ ? resolveDxfColor?.(dxfId, sortBy === "cellColor")
245
+ : undefined;
246
+ if (color)
247
+ spec.sortColor = color;
248
+ }
249
+ else if (sortBy === "icon" && typeof attrs.iconSet === "string") {
250
+ const iconId = parseInt(String(attrs.iconId ?? 0), 10);
251
+ spec.sortBy = "icon";
252
+ spec.sortIcon = {
253
+ iconSet: attrs.iconSet,
254
+ iconId: Number.isFinite(iconId) ? iconId : 0,
255
+ };
256
+ }
257
+ if (typeof attrs.customList === "string" && attrs.customList.length) {
258
+ spec.customList = attrs.customList.split(",");
259
+ }
260
+ specs.push(spec);
261
+ }
262
+ return specs;
263
+ }
174
264
  /**
175
265
  * Reads an Excel file and extracts sheet metadata
176
266
  */
@@ -1,4 +1,4 @@
1
- import type { ConditionalFormatRule, DataValidationRuleRecord, EmbeddedChart, NamedRange, ProtectedRange, Sheet, Slicer, SpreadsheetTheme, TableView } from "@rowsncolumns/spreadsheet";
1
+ import type { ConditionalFormatRule, DataValidationRuleRecord, EmbeddedChart, NamedRange, ProtectedRange, Sheet, Slicer, SpreadsheetTheme, TableView, CustomTableStyle } from "@rowsncolumns/spreadsheet";
2
2
  import type { CommentThread, IterativeCalculationOptions, NamedCellStyle, TextFormat, TextFormatRun } from "@rowsncolumns/common-types";
3
3
  import type { EmbeddedObjectWithPosition, ExternalLink, ProcessSheetDataForSheetOptions, ProcessSheetDataResult, SheetCatalogEntry, WorkbookProperties } from "./types";
4
4
  export interface IWorkbookPlugin {
@@ -62,6 +62,8 @@ export interface IWorkbookPlugin {
62
62
  * Workbook named cell styles (`<cellStyles>`) resolved to cell formats.
63
63
  */
64
64
  getNamedCellStyles?(): NamedCellStyle[];
65
+ /** Custom `<tableStyle>`s resolved to banding — the `customTableStyles` facet (#668 T-103). */
66
+ getCustomTableStyles?(): CustomTableStyle[];
65
67
  /**
66
68
  * Get the workbook default font (styles.xml fonts[0]) when the source
67
69
  * format has one; null/undefined otherwise.
@@ -1 +1 @@
1
- {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../excel-parser/interface.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../excel-parser/interface.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../excel-parser/plugins/ods/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../excel-parser/plugins/ods/index.ts"],"names":[],"mappings":"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"}