exploreda 0.0.6 → 0.1.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 (208) hide show
  1. package/README.md +144 -0
  2. package/dist/ExplorEda.cjs +4608 -11288
  3. package/dist/ExplorEda.cjs.map +1 -1
  4. package/dist/ExplorEda.css +2282 -1689
  5. package/dist/ExplorEda.css.map +1 -1
  6. package/dist/ExplorEda.d.cts +124 -278
  7. package/dist/ExplorEda.d.ts +124 -278
  8. package/dist/ExplorEda.js +4479 -11166
  9. package/dist/ExplorEda.js.map +1 -1
  10. package/dist/calculations.cjs +18 -0
  11. package/dist/calculations.cjs.map +1 -0
  12. package/dist/calculations.d.cts +63 -0
  13. package/dist/calculations.d.ts +63 -0
  14. package/dist/calculations.js +3 -0
  15. package/dist/calculations.js.map +1 -0
  16. package/dist/charts/bar.cjs +27 -0
  17. package/dist/charts/bar.cjs.map +1 -0
  18. package/dist/charts/bar.d.cts +2 -0
  19. package/dist/charts/bar.d.ts +2 -0
  20. package/dist/charts/bar.js +18 -0
  21. package/dist/charts/bar.js.map +1 -0
  22. package/dist/charts/box-plot.cjs +26 -0
  23. package/dist/charts/box-plot.cjs.map +1 -0
  24. package/dist/charts/box-plot.d.cts +2 -0
  25. package/dist/charts/box-plot.d.ts +2 -0
  26. package/dist/charts/box-plot.js +17 -0
  27. package/dist/charts/box-plot.js.map +1 -0
  28. package/dist/charts/color-legend.cjs +22 -0
  29. package/dist/charts/color-legend.cjs.map +1 -0
  30. package/dist/charts/color-legend.d.cts +2 -0
  31. package/dist/charts/color-legend.d.ts +2 -0
  32. package/dist/charts/color-legend.js +13 -0
  33. package/dist/charts/color-legend.js.map +1 -0
  34. package/dist/charts/data-table.cjs +22 -0
  35. package/dist/charts/data-table.cjs.map +1 -0
  36. package/dist/charts/data-table.d.cts +2 -0
  37. package/dist/charts/data-table.d.ts +2 -0
  38. package/dist/charts/data-table.js +13 -0
  39. package/dist/charts/data-table.js.map +1 -0
  40. package/dist/charts/line.cjs +30 -0
  41. package/dist/charts/line.cjs.map +1 -0
  42. package/dist/charts/line.d.cts +2 -0
  43. package/dist/charts/line.d.ts +2 -0
  44. package/dist/charts/line.js +17 -0
  45. package/dist/charts/line.js.map +1 -0
  46. package/dist/charts/markdown.cjs +16 -0
  47. package/dist/charts/markdown.cjs.map +1 -0
  48. package/dist/charts/markdown.css +77 -0
  49. package/dist/charts/markdown.css.map +1 -0
  50. package/dist/charts/markdown.d.cts +2 -0
  51. package/dist/charts/markdown.d.ts +2 -0
  52. package/dist/charts/markdown.js +7 -0
  53. package/dist/charts/markdown.js.map +1 -0
  54. package/dist/charts/pivot-table.cjs +23 -0
  55. package/dist/charts/pivot-table.cjs.map +1 -0
  56. package/dist/charts/pivot-table.d.cts +2 -0
  57. package/dist/charts/pivot-table.d.ts +2 -0
  58. package/dist/charts/pivot-table.js +14 -0
  59. package/dist/charts/pivot-table.js.map +1 -0
  60. package/dist/charts/row.cjs +27 -0
  61. package/dist/charts/row.cjs.map +1 -0
  62. package/dist/charts/row.d.cts +6 -0
  63. package/dist/charts/row.d.ts +6 -0
  64. package/dist/charts/row.js +18 -0
  65. package/dist/charts/row.js.map +1 -0
  66. package/dist/charts/scatter.cjs +24 -0
  67. package/dist/charts/scatter.cjs.map +1 -0
  68. package/dist/charts/scatter.d.cts +2 -0
  69. package/dist/charts/scatter.d.ts +2 -0
  70. package/dist/charts/scatter.js +15 -0
  71. package/dist/charts/scatter.js.map +1 -0
  72. package/dist/charts/summary-table.cjs +19 -0
  73. package/dist/charts/summary-table.cjs.map +1 -0
  74. package/dist/charts/summary-table.d.cts +2 -0
  75. package/dist/charts/summary-table.d.ts +2 -0
  76. package/dist/charts/summary-table.js +10 -0
  77. package/dist/charts/summary-table.js.map +1 -0
  78. package/dist/charts/three-d-scatter.cjs +24 -0
  79. package/dist/charts/three-d-scatter.cjs.map +1 -0
  80. package/dist/charts/three-d-scatter.d.cts +6 -0
  81. package/dist/charts/three-d-scatter.d.ts +6 -0
  82. package/dist/charts/three-d-scatter.js +15 -0
  83. package/dist/charts/three-d-scatter.js.map +1 -0
  84. package/dist/chunk-3PGYFLE3.cjs +499 -0
  85. package/dist/chunk-3PGYFLE3.cjs.map +1 -0
  86. package/dist/chunk-4HNDKMWF.js +167 -0
  87. package/dist/chunk-4HNDKMWF.js.map +1 -0
  88. package/dist/chunk-4QNENKTV.cjs +1214 -0
  89. package/dist/chunk-4QNENKTV.cjs.map +1 -0
  90. package/dist/chunk-54M32JJB.js +132 -0
  91. package/dist/chunk-54M32JJB.js.map +1 -0
  92. package/dist/chunk-5B23JVH3.cjs +2238 -0
  93. package/dist/chunk-5B23JVH3.cjs.map +1 -0
  94. package/dist/chunk-5LH6NSNL.js +456 -0
  95. package/dist/chunk-5LH6NSNL.js.map +1 -0
  96. package/dist/chunk-6DOKKCJ5.cjs +313 -0
  97. package/dist/chunk-6DOKKCJ5.cjs.map +1 -0
  98. package/dist/chunk-6HZX5CBT.cjs +1074 -0
  99. package/dist/chunk-6HZX5CBT.cjs.map +1 -0
  100. package/dist/chunk-6U5DOIQM.js +1071 -0
  101. package/dist/chunk-6U5DOIQM.js.map +1 -0
  102. package/dist/chunk-7GBZIK2R.cjs +80 -0
  103. package/dist/chunk-7GBZIK2R.cjs.map +1 -0
  104. package/dist/chunk-7PTJNIOD.js +520 -0
  105. package/dist/chunk-7PTJNIOD.js.map +1 -0
  106. package/dist/chunk-AHZYQ7FN.js +319 -0
  107. package/dist/chunk-AHZYQ7FN.js.map +1 -0
  108. package/dist/chunk-AOODAOL4.cjs +55 -0
  109. package/dist/chunk-AOODAOL4.cjs.map +1 -0
  110. package/dist/chunk-ASKFIRMC.cjs +165 -0
  111. package/dist/chunk-ASKFIRMC.cjs.map +1 -0
  112. package/dist/chunk-B7OQUBH4.cjs +171 -0
  113. package/dist/chunk-B7OQUBH4.cjs.map +1 -0
  114. package/dist/chunk-BIMEHDLB.js +72 -0
  115. package/dist/chunk-BIMEHDLB.js.map +1 -0
  116. package/dist/chunk-C62KHV7S.js +1225 -0
  117. package/dist/chunk-C62KHV7S.js.map +1 -0
  118. package/dist/chunk-C7GQT65O.cjs +1119 -0
  119. package/dist/chunk-C7GQT65O.cjs.map +1 -0
  120. package/dist/chunk-CGDWDV4Z.js +1211 -0
  121. package/dist/chunk-CGDWDV4Z.js.map +1 -0
  122. package/dist/chunk-CJQQFNEY.js +69 -0
  123. package/dist/chunk-CJQQFNEY.js.map +1 -0
  124. package/dist/chunk-DHYLSXNR.js +964 -0
  125. package/dist/chunk-DHYLSXNR.js.map +1 -0
  126. package/dist/chunk-DKFA4KOJ.cjs +87 -0
  127. package/dist/chunk-DKFA4KOJ.cjs.map +1 -0
  128. package/dist/chunk-DS5BS7PP.cjs +357 -0
  129. package/dist/chunk-DS5BS7PP.cjs.map +1 -0
  130. package/dist/chunk-EGMFQSGK.js +909 -0
  131. package/dist/chunk-EGMFQSGK.js.map +1 -0
  132. package/dist/chunk-EU5EFHO5.cjs +53 -0
  133. package/dist/chunk-EU5EFHO5.cjs.map +1 -0
  134. package/dist/chunk-FM46QSDM.js +837 -0
  135. package/dist/chunk-FM46QSDM.js.map +1 -0
  136. package/dist/chunk-GV2LRR32.cjs +843 -0
  137. package/dist/chunk-GV2LRR32.cjs.map +1 -0
  138. package/dist/chunk-H3XKFSA5.cjs +322 -0
  139. package/dist/chunk-H3XKFSA5.cjs.map +1 -0
  140. package/dist/chunk-H5AVMMCE.js +347 -0
  141. package/dist/chunk-H5AVMMCE.js.map +1 -0
  142. package/dist/chunk-JDMUN4VK.cjs +986 -0
  143. package/dist/chunk-JDMUN4VK.cjs.map +1 -0
  144. package/dist/chunk-JNO7OXCC.js +2171 -0
  145. package/dist/chunk-JNO7OXCC.js.map +1 -0
  146. package/dist/chunk-JQMG4ZR7.js +111 -0
  147. package/dist/chunk-JQMG4ZR7.js.map +1 -0
  148. package/dist/chunk-L2Q2R43U.cjs +118 -0
  149. package/dist/chunk-L2Q2R43U.cjs.map +1 -0
  150. package/dist/chunk-LBTZVERO.js +466 -0
  151. package/dist/chunk-LBTZVERO.js.map +1 -0
  152. package/dist/chunk-LUUGGTTK.cjs +1227 -0
  153. package/dist/chunk-LUUGGTTK.cjs.map +1 -0
  154. package/dist/chunk-MEEPH7ZC.cjs +911 -0
  155. package/dist/chunk-MEEPH7ZC.cjs.map +1 -0
  156. package/dist/chunk-MJPDJ5AS.js +184 -0
  157. package/dist/chunk-MJPDJ5AS.js.map +1 -0
  158. package/dist/chunk-MJROUIDZ.cjs +219 -0
  159. package/dist/chunk-MJROUIDZ.cjs.map +1 -0
  160. package/dist/chunk-MUWSBYJS.js +528 -0
  161. package/dist/chunk-MUWSBYJS.js.map +1 -0
  162. package/dist/chunk-NDF5LCST.js +1088 -0
  163. package/dist/chunk-NDF5LCST.js.map +1 -0
  164. package/dist/chunk-NGWTPED4.js +311 -0
  165. package/dist/chunk-NGWTPED4.js.map +1 -0
  166. package/dist/chunk-PP4VCONW.js +739 -0
  167. package/dist/chunk-PP4VCONW.js.map +1 -0
  168. package/dist/chunk-PRMC2A6P.cjs +488 -0
  169. package/dist/chunk-PRMC2A6P.cjs.map +1 -0
  170. package/dist/chunk-PST6UU6S.cjs +742 -0
  171. package/dist/chunk-PST6UU6S.cjs.map +1 -0
  172. package/dist/chunk-Q7LK2UWH.js +33 -0
  173. package/dist/chunk-Q7LK2UWH.js.map +1 -0
  174. package/dist/chunk-SFV5LZPD.js +162 -0
  175. package/dist/chunk-SFV5LZPD.js.map +1 -0
  176. package/dist/chunk-SKXGYJJG.cjs +370 -0
  177. package/dist/chunk-SKXGYJJG.cjs.map +1 -0
  178. package/dist/chunk-SWLNKY6R.js +477 -0
  179. package/dist/chunk-SWLNKY6R.js.map +1 -0
  180. package/dist/chunk-TGVLNHUB.cjs +483 -0
  181. package/dist/chunk-TGVLNHUB.cjs.map +1 -0
  182. package/dist/chunk-TLLRW6S3.js +74 -0
  183. package/dist/chunk-TLLRW6S3.js.map +1 -0
  184. package/dist/chunk-TRAIXZ6M.cjs +140 -0
  185. package/dist/chunk-TRAIXZ6M.cjs.map +1 -0
  186. package/dist/chunk-U74A5VK5.cjs +74 -0
  187. package/dist/chunk-U74A5VK5.cjs.map +1 -0
  188. package/dist/chunk-UAVDLBTA.cjs +74 -0
  189. package/dist/chunk-UAVDLBTA.cjs.map +1 -0
  190. package/dist/chunk-UJWS6TRV.js +354 -0
  191. package/dist/chunk-UJWS6TRV.js.map +1 -0
  192. package/dist/chunk-UUJMUPB3.cjs +531 -0
  193. package/dist/chunk-UUJMUPB3.cjs.map +1 -0
  194. package/dist/chunk-VTKHZIJB.cjs +549 -0
  195. package/dist/chunk-VTKHZIJB.cjs.map +1 -0
  196. package/dist/chunk-YXPAWUXO.js +51 -0
  197. package/dist/chunk-YXPAWUXO.js.map +1 -0
  198. package/dist/chunk-ZD64SCZB.js +80 -0
  199. package/dist/chunk-ZD64SCZB.js.map +1 -0
  200. package/dist/core.cjs +28 -0
  201. package/dist/core.cjs.map +1 -0
  202. package/dist/core.d.cts +22 -0
  203. package/dist/core.d.ts +22 -0
  204. package/dist/core.js +3 -0
  205. package/dist/core.js.map +1 -0
  206. package/dist/dataLayerState-B4XmQjQN.d.cts +258 -0
  207. package/dist/dataLayerState-B4XmQjQN.d.ts +258 -0
  208. package/package.json +30 -52
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/charts/PivotTable/utils/calculations.ts","../src/components/charts/PivotTable/PivotTable.tsx","../src/components/charts/PivotTable/PivotTableSettingsPanel.tsx","../src/components/charts/PivotTable/definition.ts"],"names":["value","FilterIcon","jsxs","jsx"],"mappings":"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","file":"chunk-EGMFQSGK.js","sourcesContent":["import {\n categoryEqual,\n categoryKey,\n categoryLabel,\n categoryValue,\n} from \"@/lib/categories\";\nimport { datum } from \"@/types/FilterTypes\";\nimport {\n PivotCell,\n PivotContributor,\n PivotHeader,\n PivotNumericExclusion,\n PivotRow,\n PivotSourceId,\n PivotTableData,\n RowKey,\n} from \"../types\";\nimport { PivotTableSettings } from \"../definition\";\nimport { numericInputs } from \"@/lib/aggregates\";\n\nexport type PivotInputRow = Record<string, datum> & {\n __ID?: PivotSourceId;\n};\n\ntype AggregateResult = {\n value: datum;\n includedIndexes: Set<number>;\n numericExclusions: Array<{ index: number; reason: string }>;\n};\n\nconst numericAggregations = new Set([\n \"sum\",\n \"avg\",\n \"min\",\n \"max\",\n \"median\",\n \"stddev\",\n \"variance\",\n]);\n\nfunction aggregate(name: string, values: datum[]): AggregateResult {\n const includedIndexes = new Set<number>();\n const numeric = numericAggregations.has(name)\n ? numericInputs(values)\n : { inputs: [], exclusions: [] };\n numeric.inputs.forEach(({ index }) => includedIndexes.add(index));\n\n if (name === \"count\") {\n values.forEach((_, index) => includedIndexes.add(index));\n return { value: values.length, includedIndexes, numericExclusions: [] };\n }\n if (name === \"countUnique\") {\n values.forEach((_, index) => includedIndexes.add(index));\n return {\n value: new Set(values).size,\n includedIndexes,\n numericExclusions: [],\n };\n }\n if (name === \"mode\") {\n values.forEach((_, index) => includedIndexes.add(index));\n const counts = new Map<string | number | boolean | null, number>();\n values.forEach((value) => {\n const key = value ?? null;\n counts.set(key, (counts.get(key) || 0) + 1);\n });\n let maxCount = 0;\n let value: datum = undefined;\n counts.forEach((count, candidate) => {\n if (count > maxCount) {\n maxCount = count;\n value = candidate === null ? undefined : candidate;\n }\n });\n return { value, includedIndexes, numericExclusions: [] };\n }\n if (name === \"singleValue\") {\n if (values.length === 0) {\n return { value: undefined, includedIndexes, numericExclusions: [] };\n }\n const uniqueValues = new Set(values.map((value) => categoryKey(value)));\n if (uniqueValues.size !== 1) {\n throw new Error(\"Multiple values found when single value expected\");\n }\n values.forEach((_, index) => includedIndexes.add(index));\n return { value: values[0], includedIndexes, numericExclusions: [] };\n }\n if (!numericAggregations.has(name)) {\n throw new Error(`Unsupported aggregation: ${name}`);\n }\n\n const numbers = numeric.inputs.map(({ value }) => value);\n if (numbers.length === 0) {\n return {\n value: undefined,\n includedIndexes,\n numericExclusions: numeric.exclusions,\n };\n }\n if (name === \"sum\") {\n return {\n value: numbers.reduce((sum, value) => sum + value, 0),\n includedIndexes,\n numericExclusions: numeric.exclusions,\n };\n }\n if (name === \"avg\") {\n return {\n value: numbers.reduce((sum, value) => sum + value, 0) / numbers.length,\n includedIndexes,\n numericExclusions: numeric.exclusions,\n };\n }\n if (name === \"min\") {\n return {\n value: Math.min(...numbers),\n includedIndexes,\n numericExclusions: numeric.exclusions,\n };\n }\n if (name === \"max\") {\n return {\n value: Math.max(...numbers),\n includedIndexes,\n numericExclusions: numeric.exclusions,\n };\n }\n if (name === \"median\") {\n const sorted = [...numbers].sort((a, b) => a - b);\n const mid = Math.floor(sorted.length / 2);\n return {\n value:\n sorted.length % 2 ? sorted[mid] : (sorted[mid - 1]! + sorted[mid]!) / 2,\n includedIndexes,\n numericExclusions: numeric.exclusions,\n };\n }\n\n const average =\n numbers.reduce((sum, value) => sum + value, 0) / numbers.length;\n const squareDiffs = numbers.map((value) => (value - average) ** 2);\n const variance =\n squareDiffs.reduce((sum, value) => sum + value, 0) / squareDiffs.length;\n return {\n value: name === \"stddev\" ? Math.sqrt(variance) : variance,\n includedIndexes,\n numericExclusions: numeric.exclusions,\n };\n}\n\nfunction generateHeaders(data: PivotInputRow[], field: string): PivotHeader[] {\n if (!field) {\n return [];\n }\n const uniqueValues = new Map<string, datum>();\n data.forEach((row) => {\n const value = categoryValue(row[field]);\n const key = categoryKey(value);\n if (!uniqueValues.has(key)) {\n uniqueValues.set(key, value);\n }\n });\n return Array.from(uniqueValues.values())\n .sort((left, right) => categoryKey(left).localeCompare(categoryKey(right)))\n .map((value) => ({\n label: categoryLabel(value),\n field,\n value,\n children: [],\n span: 1,\n depth: 0,\n }));\n}\n\nfunction makeContributors(\n rows: PivotInputRow[],\n groupingKeys: RowKey[],\n valueField: string,\n result: AggregateResult\n): {\n contributors: PivotContributor[];\n numericExclusions: PivotNumericExclusion[];\n} {\n const exclusionByIndex = new Map(\n result.numericExclusions.map((exclusion) => [\n exclusion.index,\n exclusion.reason,\n ])\n );\n const contributors = rows.map((row, index) => ({\n sourceId: row.__ID,\n groupingKeys,\n input: row[valueField],\n included: result.includedIndexes.has(index),\n exclusionReason: exclusionByIndex.get(index),\n }));\n return {\n contributors,\n numericExclusions: result.numericExclusions.map(({ index, reason }) => ({\n sourceId: rows[index]?.__ID,\n value: rows[index]?.[valueField],\n reason,\n })),\n };\n}\n\nfunction generateCell(\n rows: PivotInputRow[],\n groupingKeys: RowKey[],\n columnField: string,\n columnValue: datum,\n isTotal: boolean,\n valueField: PivotTableSettings[\"valueFields\"][number]\n): PivotCell {\n const values = rows.map((row) => row[valueField.field]);\n let result: AggregateResult;\n let error: string | undefined;\n try {\n result = aggregate(valueField.aggregation, values);\n } catch (caught) {\n result = {\n value: undefined,\n includedIndexes: new Set(),\n numericExclusions: [],\n };\n error = caught instanceof Error ? caught.message : \"Aggregation failed\";\n }\n const { contributors, numericExclusions } = makeContributors(\n rows,\n groupingKeys,\n valueField.field,\n result\n );\n const status = error\n ? \"error\"\n : rows.length === 0\n ? \"empty\"\n : result.numericExclusions.length > 0 && result.includedIndexes.size === 0\n ? \"invalid\"\n : \"ok\";\n return {\n key: {\n columnField,\n columnValue,\n valueField: valueField.field,\n isTotal,\n },\n value: result.value,\n rawValue: result.value,\n aggregation: valueField.aggregation,\n status,\n error,\n contributors,\n numericExclusions,\n };\n}\n\nfunction generateCells(\n rowData: PivotInputRow[],\n columnHeaders: PivotHeader[],\n rowKeys: RowKey[],\n hasColumnField: boolean,\n valueFields: PivotTableSettings[\"valueFields\"]\n): PivotCell[] {\n const cells: PivotCell[] = [];\n const headers = hasColumnField\n ? columnHeaders\n : [{ field: \"total\", value: \"total\" as datum }];\n headers.forEach((header) => {\n const columnData = hasColumnField\n ? rowData.filter((row) =>\n categoryEqual(categoryValue(row[header.field]), header.value)\n )\n : rowData;\n const groupingKeys = !hasColumnField\n ? rowKeys\n : [...rowKeys, { field: header.field, value: header.value }];\n valueFields.forEach((valueField) => {\n cells.push(\n generateCell(\n columnData,\n groupingKeys,\n hasColumnField ? header.field : \"total\",\n header.value,\n !hasColumnField,\n valueField\n )\n );\n });\n });\n return cells;\n}\n\nfunction generateRows(\n data: PivotInputRow[],\n rowFields: string[],\n columnField: string,\n valueFields: PivotTableSettings[\"valueFields\"]\n): PivotRow[] {\n const rows: PivotRow[] = [];\n const columnHeaders = generateHeaders(data, columnField);\n const rowGroups = new Map<string, PivotInputRow[]>();\n data.forEach((item) => {\n const keyString = JSON.stringify(\n rowFields.map((field) => categoryKey(categoryValue(item[field])))\n );\n if (!rowGroups.has(keyString)) {\n rowGroups.set(keyString, []);\n }\n rowGroups.get(keyString)!.push(item);\n });\n rowGroups.forEach((groupData) => {\n const keys = rowFields.map((field) => ({\n field,\n value: categoryValue(groupData[0]![field]),\n }));\n const headers = keys.map((key, index) => ({\n label: categoryLabel(key.value),\n field: key.field,\n value: key.value,\n span: 1,\n depth: index,\n }));\n rows.push({\n keys,\n headers,\n cells: generateCells(\n groupData,\n columnHeaders,\n keys,\n Boolean(columnField),\n valueFields\n ),\n });\n });\n return rows;\n}\n\nexport function calculatePivotData(\n data: PivotInputRow[],\n settings: PivotTableSettings\n): PivotTableData {\n return {\n headers: generateHeaders(data, settings.columnField),\n rows: generateRows(\n data,\n settings.rowFields,\n settings.columnField,\n settings.valueFields\n ),\n };\n}\n","import { ActionTooltip } from \"@/components/ui/tooltip\";\nimport { categoryIncludes, categoryKey } from \"@/lib/categories\";\nimport { calculatePivotData } from \"@/components/charts/PivotTable/utils/calculations\";\nimport { cn } from \"@/lib/utils\";\nimport { useDataLayer } from \"@/providers/DataLayerProvider\";\nimport { BaseChartProps } from \"@/types/ChartTypes\";\nimport { Filter, ValueFilter, datum } from \"@/types/FilterTypes\";\nimport { Filter as FilterIcon } from \"lucide-react\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useGetLiveIds } from \"../useGetLiveData\";\nimport { PivotCell, PivotHeader, PivotRow, CellKey } from \"./types\";\nimport { applyFilter } from \"@/hooks/applyFilter\";\nimport { PivotTableSettings } from \"./definition\";\nimport { getChartSummary } from \"../chartAccessibility\";\nimport { hasFieldDisplayFormat } from \"@/lib/fieldSettings\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"@/components/ui/dialog\";\n\ntype PivotTableProps = BaseChartProps & {\n settings: PivotTableSettings;\n};\n\ntype SelectedCell = { cell: PivotCell; rowHeaders: PivotHeader[] };\n\nfunction displayValue(value: datum): string {\n if (value === undefined || value === null || value === \"\") {\n return \"Missing\";\n }\n if (typeof value === \"number\") {\n return String(value);\n }\n if (typeof value === \"string\") {\n return JSON.stringify(value);\n }\n return String(value);\n}\n\nfunction displayExactValue(value: datum): string {\n if (value === undefined) {\n return \"undefined\";\n }\n if (value === null) {\n return \"null\";\n }\n if (typeof value === \"string\") {\n return JSON.stringify(value);\n }\n return String(value);\n}\n\nfunction displayCellValue(cell: PivotCell): string {\n if (cell.status === \"empty\") {\n return \"No rows\";\n }\n if (cell.status === \"error\") {\n return \"Conflict\";\n }\n if (cell.status === \"invalid\") {\n return \"No valid numbers\";\n }\n return displayValue(cell.value);\n}\n\nfunction cellName(cell: PivotCell, rowHeaders: PivotHeader[]): string {\n const rowLabel = rowHeaders.map((header) => header.label).join(\" / \");\n const columnLabel = cell.key.isTotal\n ? \"Total\"\n : displayValue(cell.key.columnValue);\n return [rowLabel, columnLabel, cell.key.valueField]\n .filter(Boolean)\n .join(\" · \");\n}\n\nexport function PivotTable({ settings, height, facetIds }: PivotTableProps) {\n const getColumnData = useDataLayer((state) => state.getColumnData);\n const getFieldLabel = useDataLayer((state) => state.getFieldLabel);\n const formatFieldValue = useDataLayer((state) => state.formatFieldValue);\n const fieldSettings = useDataLayer((state) => state.fieldSettings);\n const updateChart = useDataLayer((state) => state.updateChart);\n void fieldSettings;\n\n const allLiveIds = useGetLiveIds(settings);\n\n // Get all required field data\n const pivotData = useMemo(() => {\n // Use facetIds if provided, otherwise use liveItems\n const liveIds = facetIds\n ? allLiveIds.filter((id) => facetIds.includes(id))\n : allLiveIds;\n\n // Gather all required fields\n const allFields = new Set([\n ...settings.rowFields,\n settings.columnField,\n ...settings.valueFields.map((f) => f.field),\n ]);\n\n // Get column data for each field\n const fieldData: Record<string, Record<string | number, datum>> = {};\n allFields.forEach((field) => {\n fieldData[field] = getColumnData(field);\n });\n\n // Create data array for pivot calculations\n const data = liveIds.map((id: string | number) => {\n const row: Record<string, datum> & { __ID: string | number } = {\n __ID: id,\n };\n allFields.forEach((field) => {\n row[field] = fieldData[field]?.[id];\n });\n return row;\n });\n\n return calculatePivotData(data, settings);\n }, [facetIds, allLiveIds, settings, getColumnData]);\n\n const [selectedCell, setSelectedCell] = useState<SelectedCell | null>(null);\n const lastTrigger = useRef<HTMLButtonElement | null>(null);\n const [contributorPage, setContributorPage] = useState(0);\n useEffect(() => {\n setSelectedCell(null);\n }, [pivotData, settings]);\n useEffect(() => {\n setContributorPage(0);\n }, [selectedCell]);\n\n const handleFilterClick = useCallback(\n (field: string, value: datum) => {\n const currentFilters = settings.filters || [];\n const existingFilterIndex = currentFilters.findIndex(\n (f): f is ValueFilter =>\n f.type === \"value\" &&\n f.field === field &&\n categoryIncludes(f.values, value)\n );\n\n let newFilters: Filter[];\n if (existingFilterIndex >= 0) {\n // Remove the filter if it exists\n newFilters = [\n ...currentFilters.slice(0, existingFilterIndex),\n ...currentFilters.slice(existingFilterIndex + 1),\n ];\n } else {\n // Add new filter\n const newFilter: ValueFilter = {\n type: \"value\",\n field,\n values: [value],\n };\n newFilters = [...currentFilters, newFilter];\n }\n\n updateChart(settings.id, {\n ...settings,\n filters: newFilters,\n });\n },\n [settings, updateChart]\n );\n\n const isValueFiltered = useCallback(\n (field: string, value: datum) => {\n const currentFilters = settings.filters || [];\n const fieldFilters = currentFilters.filter((f) => f.field === field);\n\n // If no filters for this field, return false\n if (fieldFilters.length === 0) {\n return false;\n }\n\n // Check if the value matches any of the filters for this field\n return fieldFilters.some((filter) => applyFilter(value, filter));\n },\n [settings.filters]\n );\n\n const isCellFiltered = useCallback(\n (rowHeaders: PivotHeader[], cellKey: CellKey) => {\n const currentFilters = settings.filters || [];\n\n if (currentFilters.length === 0) {\n return false;\n }\n\n // Get all row field filters\n const rowFieldFilters = rowHeaders.map((header) => {\n const fieldFilters = currentFilters.filter(\n (f) => f.field === header.field\n );\n return {\n header,\n filters: fieldFilters,\n };\n });\n\n // Check if any row header matches its field's filters\n const hasRowFilters = rowFieldFilters.some((rf) => rf.filters.length > 0);\n const rowMatches =\n !hasRowFilters ||\n rowFieldFilters.every(\n ({ header, filters }) =>\n filters.length === 0 ||\n filters.some((filter) => applyFilter(header.value, filter))\n );\n\n // Get column filters\n const columnFilters = currentFilters.filter(\n (f) => !cellKey.isTotal && f.field === cellKey.columnField\n );\n\n // Check if column matches its filters\n const hasColumnFilters = columnFilters.length > 0;\n const columnMatches =\n !hasColumnFilters ||\n columnFilters.some((filter) =>\n applyFilter(cellKey.columnValue, filter)\n );\n\n // Cell is highlighted if both row and column conditions are met\n return rowMatches && columnMatches;\n },\n [settings.filters]\n );\n\n const filterButton = (header: PivotHeader) => (\n <button\n type=\"button\"\n className=\"eda-pivot-filter\"\n aria-label={`Filter ${header.field} by ${header.label}`}\n aria-pressed={isValueFiltered(header.field, header.value)}\n onClick={() => handleFilterClick(header.field, header.value)}\n >\n <span>\n {hasFieldDisplayFormat(fieldSettings[header.field])\n ? (formatFieldValue?.(header.field, header.value) ?? header.label)\n : header.label}\n </span>\n <FilterIcon aria-hidden=\"true\" />\n </button>\n );\n\n const valueLabel = (field: string, aggregation: string, label?: string) =>\n label || `${getFieldLabel?.(field) ?? field} (${aggregation})`;\n const displayPivotCell = (cell: PivotCell) => {\n if (cell.status !== \"ok\") return displayCellValue(cell);\n return hasFieldDisplayFormat(fieldSettings[cell.key.valueField!])\n ? (formatFieldValue?.(cell.key.valueField!, cell.value) ??\n displayCellValue(cell))\n : displayCellValue(cell);\n };\n\n const selectedCellName = selectedCell\n ? cellName(selectedCell.cell, selectedCell.rowHeaders)\n : \"\";\n const valueColumnCount =\n settings.valueFields.length *\n (settings.columnField ? pivotData.headers.length : 1);\n const contributorPageSize = 50;\n const contributorCount = selectedCell?.cell.contributors.length ?? 0;\n const contributorPageCount = Math.max(\n 1,\n Math.ceil(contributorCount / contributorPageSize)\n );\n const contributorStart = contributorPage * contributorPageSize;\n const visibleContributors =\n selectedCell?.cell.contributors.slice(\n contributorStart,\n contributorStart + contributorPageSize\n ) ?? [];\n\n return (\n <div\n className=\"w-full min-h-0 overflow-auto\"\n style={{ height }}\n tabIndex={0}\n aria-label=\"Pivot table, scroll to see more\"\n >\n <table\n className=\"eda-pivot-table\"\n style={{\n minWidth: settings.rowFields.length * 140 + valueColumnCount * 112,\n }}\n >\n <caption className=\"sr-only\">{getChartSummary(settings)}</caption>\n <colgroup>\n {settings.rowFields.map((field) => (\n <col key={field} style={{ width: 140 }} />\n ))}\n {Array.from({ length: valueColumnCount }, (_, index) => (\n <col key={index} />\n ))}\n </colgroup>\n <thead className=\"sticky top-0 z-30\">\n <tr>\n {settings.rowFields.map((field, index) => (\n <th\n key={field}\n scope=\"col\"\n rowSpan={settings.columnField ? 2 : 1}\n className=\"eda-pivot-row-label\"\n style={{ left: index * 140, zIndex: 20 - index }}\n >\n {getFieldLabel?.(field) ?? field}\n </th>\n ))}\n {settings.columnField\n ? pivotData.headers.map((header) => (\n <th\n key={`${header.field}-${categoryKey(header.value)}`}\n scope=\"colgroup\"\n colSpan={settings.valueFields.length}\n >\n {filterButton(header)}\n </th>\n ))\n : settings.valueFields.map((valueField) => (\n <th key={valueField.field} scope=\"col\">\n {valueLabel(\n valueField.field,\n valueField.aggregation,\n valueField.label\n )}\n </th>\n ))}\n </tr>\n {settings.columnField && (\n <tr>\n {pivotData.headers.flatMap((header) =>\n settings.valueFields.map((valueField) => (\n <th\n key={`${header.field}-${categoryKey(header.value)}-${valueField.field}`}\n scope=\"col\"\n >\n {valueLabel(\n valueField.field,\n valueField.aggregation,\n valueField.label\n )}\n </th>\n ))\n )}\n </tr>\n )}\n </thead>\n <tbody>\n {pivotData.rows.map((row: PivotRow) => (\n <tr\n key={JSON.stringify(\n row.keys.map((key) => [key.field, categoryKey(key.value)])\n )}\n >\n {row.headers.map((header, index) => (\n <th\n key={`${header.field}-${categoryKey(header.value)}`}\n scope=\"row\"\n className=\"eda-pivot-row-label\"\n style={{ left: index * 140, zIndex: 10 - index }}\n >\n {filterButton(header)}\n </th>\n ))}\n {row.cells.map((cell: PivotCell) => (\n <td\n key={`${cell.key.isTotal ? \"total\" : cell.key.columnField}-${categoryKey(cell.key.columnValue)}-${cell.key.valueField}`}\n className={cn(\n isCellFiltered(row.headers, cell.key) && \"is-selected\"\n )}\n >\n <div className=\"flex items-center justify-end gap-2\">\n <ActionTooltip\n content={cell.error ?? cellName(cell, row.headers)}\n >\n <span tabIndex={cell.error ? 0 : undefined}>\n {displayPivotCell(cell)}\n </span>\n </ActionTooltip>\n <button\n type=\"button\"\n className=\"rounded px-1 text-[10px] text-muted-foreground underline-offset-2 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n aria-haspopup=\"dialog\"\n aria-label={`Inspect ${cellName(cell, row.headers)}`}\n onClick={(event) => {\n lastTrigger.current = event.currentTarget;\n setSelectedCell({ cell, rowHeaders: row.headers });\n }}\n >\n Inspect\n </button>\n </div>\n </td>\n ))}\n </tr>\n ))}\n {pivotData.rows.length === 0 && (\n <tr>\n <td\n colSpan={settings.rowFields.length + valueColumnCount}\n className=\"text-muted-foreground\"\n >\n No matching rows\n </td>\n </tr>\n )}\n </tbody>\n </table>\n\n <Dialog\n open={selectedCell !== null}\n onOpenChange={(open) => {\n if (!open) {\n setSelectedCell(null);\n window.setTimeout(() => lastTrigger.current?.focus(), 0);\n }\n }}\n >\n <DialogContent className=\"max-h-[80vh] max-w-3xl overflow-y-auto\">\n {selectedCell && (\n <>\n <DialogHeader>\n <DialogTitle>Inspect {selectedCellName}</DialogTitle>\n <DialogDescription>\n This cell uses the current filtered rows and the same\n aggregation as the table.\n </DialogDescription>\n </DialogHeader>\n <div className=\"grid gap-2 text-sm sm:grid-cols-3\">\n <div>\n <div className=\"text-muted-foreground\">Aggregation</div>\n <div>{selectedCell.cell.aggregation}</div>\n </div>\n <div>\n <div className=\"text-muted-foreground\">Result</div>\n <div>{displayPivotCell(selectedCell.cell)}</div>\n </div>\n <div>\n <div className=\"text-muted-foreground\">Contributors</div>\n <div>{selectedCell.cell.contributors.length}</div>\n </div>\n </div>\n {selectedCell.cell.error && (\n <p\n role=\"alert\"\n className=\"rounded border border-destructive/50 p-2 text-sm text-destructive\"\n >\n {selectedCell.cell.error}. The other pivot cells remain\n available.\n </p>\n )}\n {selectedCell.cell.numericExclusions.length > 0 && (\n <p className=\"text-sm text-muted-foreground\">\n {selectedCell.cell.numericExclusions.length} numeric value(s)\n excluded; the result uses the{\" \"}\n {\n selectedCell.cell.contributors.filter(\n (contributor) => contributor.included\n ).length\n }{\" \"}\n valid value(s).\n </p>\n )}\n <div className=\"overflow-auto rounded border\">\n <table className=\"w-full text-left text-sm\">\n <caption className=\"sr-only\">Pivot cell contributors</caption>\n <thead className=\"bg-muted\">\n <tr>\n <th className=\"p-2\" scope=\"col\">\n Source row ID (zero-based)\n </th>\n <th className=\"p-2\" scope=\"col\">\n Grouping keys\n </th>\n <th className=\"p-2\" scope=\"col\">\n Input\n </th>\n <th className=\"p-2\" scope=\"col\">\n Used\n </th>\n </tr>\n </thead>\n <tbody>\n {visibleContributors.map((contributor, index) => (\n <tr\n key={`${contributor.sourceId ?? \"unknown\"}-${index}`}\n className=\"border-t\"\n >\n <td className=\"p-2\">\n {contributor.sourceId ?? \"Unknown\"}\n </td>\n <td className=\"p-2\">\n {contributor.groupingKeys\n .map(\n (key) => `${key.field}=${displayValue(key.value)}`\n )\n .join(\", \")}\n </td>\n <td className=\"p-2\">\n {displayExactValue(contributor.input)}\n </td>\n <td className=\"p-2\">\n {contributor.included\n ? \"Yes\"\n : contributor.exclusionReason || \"No\"}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n {contributorCount === 0 && (\n <p className=\"p-3 text-sm text-muted-foreground\">\n No rows match this cell.\n </p>\n )}\n </div>\n <div className=\"flex items-center justify-between gap-3 text-sm text-muted-foreground\">\n <span>\n Showing {contributorCount === 0 ? 0 : contributorStart + 1}–\n {Math.min(\n contributorStart + contributorPageSize,\n contributorCount\n )}{\" \"}\n of {contributorCount} source rows\n </span>\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n className=\"rounded border px-2 py-1 disabled:cursor-not-allowed disabled:opacity-50\"\n disabled={contributorPage === 0}\n onClick={() => setContributorPage((page) => page - 1)}\n >\n Previous\n </button>\n <button\n type=\"button\"\n className=\"rounded border px-2 py-1 disabled:cursor-not-allowed disabled:opacity-50\"\n disabled={contributorPage >= contributorPageCount - 1}\n onClick={() => setContributorPage((page) => page + 1)}\n >\n Next\n </button>\n </div>\n </div>\n </>\n )}\n </DialogContent>\n </Dialog>\n </div>\n );\n}\n","import { ComboBox } from \"@/components/ComboBox\";\nimport { Label } from \"@/components/ui/label\";\nimport MultiSelect, { Option } from \"@/components/ui/multi-select\";\nimport { ChartSettingsPanelProps } from \"@/types/ChartTypes\";\nimport { PivotTableSettings } from \"./definition\";\nimport { useColumnNames } from \"./useColumnNames\";\nimport { FieldSelector } from \"@/components/FieldSelector\";\n\nconst AGGREGATION_OPTIONS: Array<{\n label: string;\n value: PivotTableSettings[\"valueFields\"][number][\"aggregation\"];\n}> = [\n { label: \"Sum\", value: \"sum\" },\n { label: \"Count\", value: \"count\" },\n { label: \"Average\", value: \"avg\" },\n { label: \"Min\", value: \"min\" },\n { label: \"Max\", value: \"max\" },\n { label: \"Median\", value: \"median\" },\n { label: \"Mode\", value: \"mode\" },\n { label: \"StdDev\", value: \"stddev\" },\n { label: \"Variance\", value: \"variance\" },\n { label: \"Count Unique\", value: \"countUnique\" },\n { label: \"Single Value\", value: \"singleValue\" },\n];\n\nexport function PivotTableSettingsPanel({\n settings,\n onSettingsChange,\n}: ChartSettingsPanelProps<PivotTableSettings>) {\n const availableFields = useColumnNames();\n\n const fieldOptions = availableFields.map((f) => ({\n label: f,\n value: f,\n }));\n\n return (\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <Label>Row Fields</Label>\n <div className=\"max-w-[400px]\">\n <MultiSelect\n options={fieldOptions}\n value={settings.rowFields.map((f) => ({\n label: f,\n value: f,\n }))}\n onChange={(values: Option[]) =>\n onSettingsChange({\n ...settings,\n rowFields: values.map((v) => v.value),\n })\n }\n />\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <div className=\"max-w-[400px]\">\n <FieldSelector\n label=\"Column Field\"\n value={settings.columnField}\n onChange={(value) =>\n onSettingsChange({ ...settings, columnField: value })\n }\n />\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <Label>Value Fields</Label>\n <div className=\"max-w-[400px] space-y-2\">\n {settings.valueFields.map((valueField, index) => (\n <div key={index} className=\"flex items-center gap-2\">\n <div className=\"flex-1\">\n <ComboBox\n options={fieldOptions}\n value={fieldOptions.find((f) => f.value === valueField.field)}\n onChange={(option) => {\n const newValueFields = [...settings.valueFields];\n newValueFields[index] = {\n ...valueField,\n field: option?.value || valueField.field,\n };\n onSettingsChange({\n ...settings,\n valueFields: newValueFields,\n });\n }}\n optionToString={(option) => option.label}\n />\n </div>\n <div className=\"flex-1\">\n <ComboBox\n options={AGGREGATION_OPTIONS}\n value={AGGREGATION_OPTIONS.find(\n (o) => o.value === valueField.aggregation\n )}\n onChange={(option) => {\n if (!option) {\n return;\n }\n const newValueFields = [...settings.valueFields];\n newValueFields[index] = {\n ...valueField,\n aggregation: option.value,\n };\n onSettingsChange({\n ...settings,\n valueFields: newValueFields,\n });\n }}\n optionToString={(option) => option.label}\n />\n </div>\n <button\n className=\"p-2 hover:bg-accent rounded\"\n onClick={() => {\n const newValueFields = settings.valueFields.filter(\n (_, i) => i !== index\n );\n onSettingsChange({\n ...settings,\n valueFields: newValueFields,\n });\n }}\n >\n ×\n </button>\n </div>\n ))}\n <button\n className=\"text-sm text-primary hover:text-primary/80\"\n onClick={() => {\n const field = availableFields[0];\n if (!field) {\n return;\n }\n\n onSettingsChange({\n ...settings,\n valueFields: [\n ...settings.valueFields,\n {\n field,\n aggregation: \"count\",\n },\n ],\n });\n }}\n >\n + Add Value Field\n </button>\n </div>\n </div>\n </div>\n );\n}\n","import { BaseChartSettings, ChartDefinition, datum } from \"@/types/ChartTypes\";\nimport { ValueFilter } from \"@/types/FilterTypes\";\nimport { DEFAULT_CHART_SETTINGS } from \"@/utils/defaultSettings\";\nimport { Table } from \"lucide-react\";\n\nimport { applyFilter } from \"@/hooks/applyFilter\";\nimport { IdType } from \"@/providers/DataLayerProvider\";\nimport { PivotTable } from \"./PivotTable\";\nimport { PivotTableSettingsPanel } from \"./PivotTableSettingsPanel\";\n\nexport interface PivotTableSettings extends BaseChartSettings {\n type: \"pivot\";\n rowFields: string[];\n columnField: string;\n valueFields: Array<{\n field: string;\n aggregation:\n | \"sum\"\n | \"count\"\n | \"avg\"\n | \"min\"\n | \"max\"\n | \"median\"\n | \"mode\"\n | \"stddev\"\n | \"variance\"\n | \"countUnique\"\n | \"singleValue\";\n label?: string;\n }>;\n}\n\nconst VALID_AGGREGATIONS: ReadonlySet<\n PivotTableSettings[\"valueFields\"][number][\"aggregation\"]\n> = new Set([\n \"sum\",\n \"count\",\n \"avg\",\n \"min\",\n \"max\",\n \"median\",\n \"mode\",\n \"stddev\",\n \"variance\",\n \"countUnique\",\n \"singleValue\",\n]);\n\nexport const pivotTableDefinition: ChartDefinition<PivotTableSettings> = {\n type: \"pivot\",\n name: \"Pivot Table\",\n description: \"Interactive pivot table for data analysis\",\n icon: Table,\n\n component: PivotTable,\n settingsPanel: PivotTableSettingsPanel,\n\n createDefaultSettings: (layout) => ({\n ...DEFAULT_CHART_SETTINGS,\n id: crypto.randomUUID(),\n type: \"pivot\",\n title: \"Pivot Table\",\n layout,\n margin: { top: 0, right: 0, bottom: 0, left: 0 },\n rowFields: [],\n columnField: \"\",\n valueFields: [],\n filters: [],\n }),\n\n validateSettings: (settings) => {\n const rowFields =\n Array.isArray(settings.rowFields) &&\n settings.rowFields.every(\n (field) => typeof field === \"string\" && field.trim().length > 0\n );\n const columnField =\n typeof settings.columnField === \"string\" &&\n (settings.columnField === \"\" || settings.columnField.trim().length > 0);\n const valueFields =\n Array.isArray(settings.valueFields) &&\n settings.valueFields.length > 0 &&\n settings.valueFields.every(\n (valueField) =>\n typeof valueField.field === \"string\" &&\n valueField.field.trim().length > 0 &&\n VALID_AGGREGATIONS.has(valueField.aggregation)\n );\n\n return (\n rowFields &&\n columnField &&\n valueFields &&\n new Set(settings.rowFields).size === settings.rowFields.length &&\n (!settings.columnField ||\n !settings.rowFields.includes(settings.columnField))\n );\n },\n\n getFilterFunction: (\n settings: PivotTableSettings,\n fieldGetter: (name: string) => Record<IdType, datum>\n ) => {\n const fields = [...settings.rowFields, settings.columnField];\n const filters = settings.filters.filter(\n (filter): filter is ValueFilter =>\n filter.type === \"value\" && fields.includes(filter.field)\n );\n const activeFields = [...new Set(filters.map((filter) => filter.field))];\n const groups = activeFields.map((field) => ({\n data: fieldGetter(field),\n filters: filters.filter((filter) => filter.field === field),\n }));\n // Alternatives within one field; intersection across different fields.\n return (id) =>\n groups.every((group) =>\n group.filters.some((filter) => applyFilter(group.data[id], filter))\n );\n },\n};\n"]}
@@ -0,0 +1,53 @@
1
+ 'use strict';
2
+
3
+ var chunk5B23JVH3_cjs = require('./chunk-5B23JVH3.cjs');
4
+
5
+ // src/hooks/applyFilter.ts
6
+ function applyFilter(value, filter) {
7
+ switch (filter.type) {
8
+ case "value":
9
+ return chunk5B23JVH3_cjs.categoryIncludes(filter.values, value);
10
+ case "range":
11
+ if (typeof value === "number" || typeof value === "string" && value.trim() !== "") {
12
+ const number = Number(value);
13
+ if (!Number.isFinite(number)) {
14
+ return false;
15
+ }
16
+ return (filter.min === void 0 || number >= filter.min) && (filter.max === void 0 || number <= filter.max);
17
+ }
18
+ break;
19
+ case "text":
20
+ if (typeof value === "string") {
21
+ const lower = value.toLowerCase();
22
+ const search = filter.value.toLowerCase();
23
+ switch (filter.operator) {
24
+ case "contains":
25
+ return lower.includes(search);
26
+ case "equals":
27
+ return lower === search;
28
+ case "startsWith":
29
+ return lower.startsWith(search);
30
+ case "endsWith":
31
+ return lower.endsWith(search);
32
+ }
33
+ }
34
+ break;
35
+ case "date-range": {
36
+ if (typeof value !== "string") {
37
+ return false;
38
+ }
39
+ const timestamp = chunk5B23JVH3_cjs.dateTimestamp(value);
40
+ if (Number.isNaN(timestamp)) {
41
+ return false;
42
+ }
43
+ const min = filter.min === void 0 ? void 0 : chunk5B23JVH3_cjs.dateTimestamp(filter.min);
44
+ const max = filter.max === void 0 ? void 0 : filter.max.length === 10 ? chunk5B23JVH3_cjs.dateTimestamp(`${filter.max}T23:59:59.999Z`) : chunk5B23JVH3_cjs.dateTimestamp(filter.max);
45
+ return (min === void 0 || !Number.isNaN(min) && timestamp >= min) && (max === void 0 || !Number.isNaN(max) && timestamp <= max);
46
+ }
47
+ }
48
+ return false;
49
+ }
50
+
51
+ exports.applyFilter = applyFilter;
52
+ //# sourceMappingURL=chunk-EU5EFHO5.cjs.map
53
+ //# sourceMappingURL=chunk-EU5EFHO5.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/applyFilter.ts"],"names":["categoryIncludes","dateTimestamp"],"mappings":";;;;;AAIO,SAAS,WAAA,CAAY,OAAc,MAAyB,EAAA;AACjE,EAAA,QAAQ,OAAO,IAAM;AAAA,IACnB,KAAK,OAAA;AACH,MAAO,OAAAA,kCAAA,CAAiB,MAAO,CAAA,MAAA,EAAQ,KAAK,CAAA;AAAA,IAC9C,KAAK,OAAA;AACH,MACE,IAAA,OAAO,UAAU,QAChB,IAAA,OAAO,UAAU,QAAY,IAAA,KAAA,CAAM,IAAK,EAAA,KAAM,EAC/C,EAAA;AACA,QAAM,MAAA,MAAA,GAAS,OAAO,KAAK,CAAA;AAC3B,QAAA,IAAI,CAAC,MAAA,CAAO,QAAS,CAAA,MAAM,CAAG,EAAA;AAC5B,UAAO,OAAA,KAAA;AAAA;AAET,QACG,OAAA,CAAA,MAAA,CAAO,GAAQ,KAAA,MAAA,IAAa,MAAU,IAAA,MAAA,CAAO,SAC7C,MAAO,CAAA,GAAA,KAAQ,MAAa,IAAA,MAAA,IAAU,MAAO,CAAA,GAAA,CAAA;AAAA;AAGlD,MAAA;AAAA,IACF,KAAK,MAAA;AACH,MAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,QAAM,MAAA,KAAA,GAAQ,MAAM,WAAY,EAAA;AAChC,QAAM,MAAA,MAAA,GAAS,MAAO,CAAA,KAAA,CAAM,WAAY,EAAA;AAExC,QAAA,QAAQ,OAAO,QAAU;AAAA,UACvB,KAAK,UAAA;AACH,YAAO,OAAA,KAAA,CAAM,SAAS,MAAM,CAAA;AAAA,UAC9B,KAAK,QAAA;AACH,YAAA,OAAO,KAAU,KAAA,MAAA;AAAA,UACnB,KAAK,YAAA;AACH,YAAO,OAAA,KAAA,CAAM,WAAW,MAAM,CAAA;AAAA,UAChC,KAAK,UAAA;AACH,YAAO,OAAA,KAAA,CAAM,SAAS,MAAM,CAAA;AAAA;AAChC;AAEF,MAAA;AAAA,IACF,KAAK,YAAc,EAAA;AACjB,MAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,QAAO,OAAA,KAAA;AAAA;AAGT,MAAM,MAAA,SAAA,GAAYC,gCAAc,KAAK,CAAA;AACrC,MAAI,IAAA,MAAA,CAAO,KAAM,CAAA,SAAS,CAAG,EAAA;AAC3B,QAAO,OAAA,KAAA;AAAA;AAGT,MAAA,MAAM,MACJ,MAAO,CAAA,GAAA,KAAQ,SAAY,MAAY,GAAAA,+BAAA,CAAc,OAAO,GAAG,CAAA;AACjE,MAAA,MAAM,MACJ,MAAO,CAAA,GAAA,KAAQ,MACX,GAAA,MAAA,GACA,OAAO,GAAI,CAAA,MAAA,KAAW,EACpB,GAAAA,+BAAA,CAAc,GAAG,MAAO,CAAA,GAAG,gBAAgB,CAC3C,GAAAA,+BAAA,CAAc,OAAO,GAAG,CAAA;AAEhC,MAAA,OAAA,CACG,QAAQ,MAAc,IAAA,CAAC,MAAO,CAAA,KAAA,CAAM,GAAG,CAAK,IAAA,SAAA,IAAa,GACzD,MAAA,GAAA,KAAQ,UAAc,CAAC,MAAA,CAAO,KAAM,CAAA,GAAG,KAAK,SAAa,IAAA,GAAA,CAAA;AAAA;AAE9D;AAGF,EAAO,OAAA,KAAA;AACT","file":"chunk-EU5EFHO5.cjs","sourcesContent":["import { dateTimestamp } from \"@/lib/dateTime\";\nimport { categoryIncludes } from \"@/lib/categories\";\nimport { datum, Filter } from \"@/types/FilterTypes\";\n\nexport function applyFilter(value: datum, filter: Filter): boolean {\n switch (filter.type) {\n case \"value\":\n return categoryIncludes(filter.values, value);\n case \"range\":\n if (\n typeof value === \"number\" ||\n (typeof value === \"string\" && value.trim() !== \"\")\n ) {\n const number = Number(value);\n if (!Number.isFinite(number)) {\n return false;\n }\n return (\n (filter.min === undefined || number >= filter.min) &&\n (filter.max === undefined || number <= filter.max)\n );\n }\n break;\n case \"text\":\n if (typeof value === \"string\") {\n const lower = value.toLowerCase();\n const search = filter.value.toLowerCase();\n\n switch (filter.operator) {\n case \"contains\":\n return lower.includes(search);\n case \"equals\":\n return lower === search;\n case \"startsWith\":\n return lower.startsWith(search);\n case \"endsWith\":\n return lower.endsWith(search);\n }\n }\n break;\n case \"date-range\": {\n if (typeof value !== \"string\") {\n return false;\n }\n\n const timestamp = dateTimestamp(value);\n if (Number.isNaN(timestamp)) {\n return false;\n }\n\n const min =\n filter.min === undefined ? undefined : dateTimestamp(filter.min);\n const max =\n filter.max === undefined\n ? undefined\n : filter.max.length === 10\n ? dateTimestamp(`${filter.max}T23:59:59.999Z`)\n : dateTimestamp(filter.max);\n\n return (\n (min === undefined || (!Number.isNaN(min) && timestamp >= min)) &&\n (max === undefined || (!Number.isNaN(max) && timestamp <= max))\n );\n }\n }\n\n return false;\n}\n"]}