apex-grid 1.0.1 → 2.0.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 (453) hide show
  1. package/LICENSE +76 -5
  2. package/README.md +520 -10
  3. package/components/cell.d.ts +74 -0
  4. package/components/cell.js +376 -0
  5. package/components/cell.js.map +1 -0
  6. package/{dist/src/components → components}/filter-row.d.ts +13 -12
  7. package/components/filter-row.js +396 -0
  8. package/components/filter-row.js.map +1 -0
  9. package/components/grid.d.ts +1173 -0
  10. package/components/grid.js +620 -0
  11. package/components/grid.js.map +1 -0
  12. package/components/header-row.d.ts +43 -0
  13. package/components/header-row.js +205 -0
  14. package/components/header-row.js.map +1 -0
  15. package/{dist/src/components → components}/header.d.ts +11 -5
  16. package/components/header.js +263 -0
  17. package/components/header.js.map +1 -0
  18. package/components/paginator.d.ts +56 -0
  19. package/components/paginator.js +148 -0
  20. package/components/paginator.js.map +1 -0
  21. package/components/row.d.ts +43 -0
  22. package/components/row.js +239 -0
  23. package/components/row.js.map +1 -0
  24. package/components/toolbar.d.ts +60 -0
  25. package/components/toolbar.js +275 -0
  26. package/components/toolbar.js.map +1 -0
  27. package/{dist/src/components → components}/virtualizer.d.ts +2 -3
  28. package/{dist/src/components → components}/virtualizer.js +3 -3
  29. package/components/virtualizer.js.map +1 -0
  30. package/controllers/data-operation.d.ts +31 -0
  31. package/controllers/data-operation.js +53 -0
  32. package/controllers/data-operation.js.map +1 -0
  33. package/controllers/dom.d.ts +55 -0
  34. package/controllers/dom.js +221 -0
  35. package/controllers/dom.js.map +1 -0
  36. package/controllers/editing.d.ts +130 -0
  37. package/controllers/editing.js +197 -0
  38. package/controllers/editing.js.map +1 -0
  39. package/controllers/expansion.d.ts +68 -0
  40. package/controllers/expansion.js +126 -0
  41. package/controllers/expansion.js.map +1 -0
  42. package/{dist/src/controllers → controllers}/filter.d.ts +2 -3
  43. package/controllers/filter.js +105 -0
  44. package/controllers/filter.js.map +1 -0
  45. package/{dist/src/controllers → controllers}/navigation.d.ts +18 -8
  46. package/{dist/src/controllers → controllers}/navigation.js +31 -20
  47. package/controllers/navigation.js.map +1 -0
  48. package/controllers/pagination.d.ts +102 -0
  49. package/controllers/pagination.js +106 -0
  50. package/controllers/pagination.js.map +1 -0
  51. package/controllers/reorder.d.ts +78 -0
  52. package/controllers/reorder.js +124 -0
  53. package/controllers/reorder.js.map +1 -0
  54. package/{dist/src/controllers → controllers}/resize.d.ts +2 -3
  55. package/controllers/resize.js +52 -0
  56. package/controllers/resize.js.map +1 -0
  57. package/controllers/selection.d.ts +109 -0
  58. package/controllers/selection.js +168 -0
  59. package/controllers/selection.js.map +1 -0
  60. package/{dist/src/controllers → controllers}/sort.d.ts +1 -2
  61. package/controllers/sort.js +122 -0
  62. package/controllers/sort.js.map +1 -0
  63. package/controllers/state.d.ts +56 -0
  64. package/controllers/state.js +74 -0
  65. package/controllers/state.js.map +1 -0
  66. package/controllers/tree.d.ts +87 -0
  67. package/controllers/tree.js +0 -0
  68. package/controllers/tree.js.map +1 -0
  69. package/custom-elements.json +6901 -1554
  70. package/{dist/src/define.d.ts → define.d.ts} +0 -1
  71. package/define.js.map +1 -0
  72. package/docs/assets/hierarchy.js +1 -0
  73. package/docs/assets/highlight.css +127 -0
  74. package/docs/assets/icons.js +18 -0
  75. package/docs/assets/icons.svg +1 -0
  76. package/docs/assets/main.js +60 -0
  77. package/docs/assets/navigation.js +1 -0
  78. package/docs/assets/search.js +1 -0
  79. package/docs/assets/style.css +1633 -0
  80. package/docs/classes/ApexGrid.html +371 -0
  81. package/docs/functions/setup.html +22 -0
  82. package/docs/hierarchy.html +1 -0
  83. package/docs/index.html +504 -0
  84. package/docs/interfaces/ApexCellValueChangedEvent.html +11 -0
  85. package/docs/interfaces/ApexCellValueChangingEvent.html +13 -0
  86. package/docs/interfaces/ApexColumnMovedEvent.html +8 -0
  87. package/docs/interfaces/ApexColumnMovingEvent.html +11 -0
  88. package/docs/interfaces/ApexColumnPinnedEvent.html +6 -0
  89. package/docs/interfaces/ApexColumnPinningEvent.html +8 -0
  90. package/docs/interfaces/ApexDetailContext.html +8 -0
  91. package/docs/interfaces/ApexFilteredEvent.html +6 -0
  92. package/docs/interfaces/ApexFilteringEvent.html +12 -0
  93. package/docs/interfaces/ApexGridEventMap.html +68 -0
  94. package/docs/interfaces/ApexHeaderContext.html +6 -0
  95. package/docs/interfaces/ApexPageChangedEvent.html +10 -0
  96. package/docs/interfaces/ApexPageChangingEvent.html +10 -0
  97. package/docs/interfaces/ApexQuickFilterChangedEvent.html +4 -0
  98. package/docs/interfaces/ApexQuickFilterChangingEvent.html +6 -0
  99. package/docs/interfaces/ApexRowEditEndedEvent.html +6 -0
  100. package/docs/interfaces/ApexRowEditStartedEvent.html +4 -0
  101. package/docs/interfaces/ApexRowExpandedEvent.html +8 -0
  102. package/docs/interfaces/ApexRowExpandingEvent.html +11 -0
  103. package/docs/interfaces/ApexRowSelectedEvent.html +8 -0
  104. package/docs/interfaces/ApexRowSelectingEvent.html +11 -0
  105. package/docs/interfaces/ApexTreeRowExpandedEvent.html +8 -0
  106. package/docs/interfaces/ApexTreeRowExpandingEvent.html +10 -0
  107. package/docs/interfaces/BaseApexCellContext.html +16 -0
  108. package/docs/interfaces/BaseApexEditorContext.html +19 -0
  109. package/docs/interfaces/BaseColumnConfiguration.html +83 -0
  110. package/docs/interfaces/BaseColumnSortConfiguration.html +6 -0
  111. package/docs/interfaces/BaseFilterExpression.html +15 -0
  112. package/docs/interfaces/BaseSortExpression.html +12 -0
  113. package/docs/interfaces/CSVExportOptions.html +22 -0
  114. package/docs/interfaces/ColumnFilterConfiguration.html +4 -0
  115. package/docs/interfaces/DataPipelineConfiguration.html +15 -0
  116. package/docs/interfaces/ExportOptions.html +15 -0
  117. package/docs/interfaces/GridEditingConfiguration.html +10 -0
  118. package/docs/interfaces/GridExpansionConfiguration.html +15 -0
  119. package/docs/interfaces/GridSelectionConfiguration.html +11 -0
  120. package/docs/interfaces/GridSortConfiguration.html +6 -0
  121. package/docs/interfaces/GridTreeConfiguration.html +33 -0
  122. package/docs/interfaces/PaginationConfiguration.html +18 -0
  123. package/docs/interfaces/PaginationState.html +10 -0
  124. package/docs/interfaces/XLSXExportOptions.html +17 -0
  125. package/docs/media/package.json +83 -0
  126. package/docs/media/publish.yml +111 -0
  127. package/docs/modules.html +1 -0
  128. package/docs/types/ApexCellContext.html +2 -0
  129. package/docs/types/ApexEditorContext.html +2 -0
  130. package/docs/types/BasePropertyType.html +2 -0
  131. package/docs/types/BaseSortComparer.html +2 -0
  132. package/docs/types/ColumnConfiguration.html +2 -0
  133. package/docs/types/ColumnDropPosition.html +2 -0
  134. package/docs/types/ColumnSortConfiguration.html +2 -0
  135. package/docs/types/DataPipelineHook.html +2 -0
  136. package/docs/types/DataPipelineParams.html +8 -0
  137. package/docs/types/DataType.html +30 -0
  138. package/docs/types/EditMode.html +6 -0
  139. package/docs/types/EditTrigger.html +4 -0
  140. package/docs/types/ExportCellValue.html +5 -0
  141. package/docs/types/ExportSource.html +8 -0
  142. package/docs/types/FilterCriteria.html +6 -0
  143. package/docs/types/FilterExpression.html +2 -0
  144. package/docs/types/Keys.html +2 -0
  145. package/docs/types/PaginationMode.html +6 -0
  146. package/docs/types/PinPosition.html +5 -0
  147. package/docs/types/PropertyType.html +2 -0
  148. package/docs/types/SelectionMode.html +7 -0
  149. package/docs/types/SortComparer.html +2 -0
  150. package/docs/types/SortExpression.html +2 -0
  151. package/docs/types/SortState.html +2 -0
  152. package/docs/types/SortingDirection.html +3 -0
  153. package/index.d.ts +11 -0
  154. package/{dist/src/index.js → index.js} +1 -0
  155. package/index.js.map +1 -0
  156. package/internal/column-types.d.ts +94 -0
  157. package/internal/column-types.js +268 -0
  158. package/internal/column-types.js.map +1 -0
  159. package/{dist/src/internal → internal}/constants.d.ts +0 -1
  160. package/internal/constants.js.map +1 -0
  161. package/internal/export.d.ts +106 -0
  162. package/internal/export.js +122 -0
  163. package/internal/export.js.map +1 -0
  164. package/internal/flip.d.ts +80 -0
  165. package/internal/flip.js +52 -0
  166. package/internal/flip.js.map +1 -0
  167. package/internal/icons.d.ts +24 -0
  168. package/internal/icons.js +134 -0
  169. package/internal/icons.js.map +1 -0
  170. package/{dist/src/internal → internal}/is-defined.d.ts +0 -1
  171. package/internal/is-defined.js.map +1 -0
  172. package/{dist/src/internal → internal}/mixins/event-emitter.d.ts +0 -1
  173. package/internal/mixins/event-emitter.js.map +1 -0
  174. package/{dist/src/internal → internal}/normalize-case.d.ts +0 -1
  175. package/internal/normalize-case.js.map +1 -0
  176. package/{dist/src/internal → internal}/part-map.d.ts +0 -1
  177. package/{dist/src/internal → internal}/part-map.js +1 -1
  178. package/internal/part-map.js.map +1 -0
  179. package/{dist/src/internal → internal}/register.d.ts +3 -4
  180. package/internal/register.js +9 -0
  181. package/internal/register.js.map +1 -0
  182. package/{dist/src/internal → internal}/tags.d.ts +2 -1
  183. package/{dist/src/internal → internal}/tags.js +2 -0
  184. package/internal/tags.js.map +1 -0
  185. package/internal/theming.d.ts +34 -0
  186. package/internal/theming.js +123 -0
  187. package/internal/theming.js.map +1 -0
  188. package/internal/types.d.ts +619 -0
  189. package/internal/types.js.map +1 -0
  190. package/internal/utils.d.ts +29 -0
  191. package/internal/utils.js +75 -0
  192. package/internal/utils.js.map +1 -0
  193. package/{dist/src/internal → internal}/watch.d.ts +0 -1
  194. package/{dist/src/internal → internal}/watch.js +2 -2
  195. package/internal/watch.js.map +1 -0
  196. package/internal/xlsx.d.ts +22 -0
  197. package/internal/xlsx.js +228 -0
  198. package/internal/xlsx.js.map +1 -0
  199. package/{dist/src/operations → operations}/base.d.ts +0 -1
  200. package/operations/base.js.map +1 -0
  201. package/{dist/src/operations → operations}/filter/operands/boolean.d.ts +0 -1
  202. package/{dist/src/operations → operations}/filter/operands/boolean.js +5 -5
  203. package/operations/filter/operands/boolean.js.map +1 -0
  204. package/{dist/src/operations → operations}/filter/operands/number.d.ts +0 -1
  205. package/{dist/src/operations → operations}/filter/operands/number.js +2 -2
  206. package/operations/filter/operands/number.js.map +1 -0
  207. package/{dist/src/operations → operations}/filter/operands/string.d.ts +0 -1
  208. package/{dist/src/operations → operations}/filter/operands/string.js +2 -2
  209. package/operations/filter/operands/string.js.map +1 -0
  210. package/{dist/src/operations → operations}/filter/state.d.ts +1 -2
  211. package/{dist/src/operations → operations}/filter/state.js +3 -4
  212. package/operations/filter/state.js.map +1 -0
  213. package/{dist/src/operations → operations}/filter/tree.d.ts +1 -2
  214. package/{dist/src/operations → operations}/filter/tree.js +5 -6
  215. package/operations/filter/tree.js.map +1 -0
  216. package/{dist/src/operations → operations}/filter/types.d.ts +0 -1
  217. package/operations/filter/types.js.map +1 -0
  218. package/{dist/src/operations → operations}/filter.d.ts +0 -1
  219. package/{dist/src/operations → operations}/filter.js +4 -7
  220. package/operations/filter.js.map +1 -0
  221. package/operations/pagination.d.ts +19 -0
  222. package/operations/pagination.js +12 -0
  223. package/operations/pagination.js.map +1 -0
  224. package/operations/quick-filter.d.ts +21 -0
  225. package/operations/quick-filter.js +26 -0
  226. package/operations/quick-filter.js.map +1 -0
  227. package/{dist/src/operations → operations}/sort/types.d.ts +0 -1
  228. package/operations/sort/types.js.map +1 -0
  229. package/{dist/src/operations → operations}/sort.d.ts +0 -1
  230. package/{dist/src/operations → operations}/sort.js +5 -5
  231. package/operations/sort.js.map +1 -0
  232. package/package.json +25 -83
  233. package/setup.d.ts +58 -0
  234. package/setup.js +29 -0
  235. package/setup.js.map +1 -0
  236. package/{dist/src/styles/body-row/body-row-styles.css.d.ts → styles/_common.css.d.ts} +0 -1
  237. package/styles/_common.css.js +3 -0
  238. package/styles/_common.css.js.map +1 -0
  239. package/{dist/src/styles/body-cell/body-cell-styles.css.d.ts → styles/body-cell/body-cell.css.d.ts} +0 -1
  240. package/styles/body-cell/body-cell.css.js +3 -0
  241. package/styles/body-cell/body-cell.css.js.map +1 -0
  242. package/{dist/src/styles/filter-row/filter-row-styles.css.d.ts → styles/body-row/body-row.css.d.ts} +0 -1
  243. package/styles/body-row/body-row.css.js +3 -0
  244. package/styles/body-row/body-row.css.js.map +1 -0
  245. package/{dist/src/styles/grid/themes/light/grid.fluent-styles.css.d.ts → styles/filter-row/filter-row.css.d.ts} +0 -1
  246. package/styles/filter-row/filter-row.css.js +3 -0
  247. package/styles/filter-row/filter-row.css.js.map +1 -0
  248. package/styles/grid/_grid.base.css.d.ts +1 -0
  249. package/styles/grid/_grid.base.css.js +3 -0
  250. package/styles/grid/_grid.base.css.js.map +1 -0
  251. package/styles/grid/themes/light/grid.bootstrap.css.d.ts +1 -0
  252. package/styles/grid/themes/light/grid.bootstrap.css.js +3 -0
  253. package/styles/grid/themes/light/grid.bootstrap.css.js.map +1 -0
  254. package/styles/grid/themes/light/grid.fluent.css.d.ts +1 -0
  255. package/styles/grid/themes/light/grid.fluent.css.js +3 -0
  256. package/styles/grid/themes/light/grid.fluent.css.js.map +1 -0
  257. package/styles/grid/themes/light/grid.indigo.css.d.ts +1 -0
  258. package/styles/grid/themes/light/grid.indigo.css.js +3 -0
  259. package/styles/grid/themes/light/grid.indigo.css.js.map +1 -0
  260. package/styles/grid/themes/light/grid.material.css.d.ts +1 -0
  261. package/styles/grid/themes/light/grid.material.css.js +3 -0
  262. package/styles/grid/themes/light/grid.material.css.js.map +1 -0
  263. package/styles/header-cell/header-cell.css.d.ts +1 -0
  264. package/styles/header-cell/header-cell.css.js +3 -0
  265. package/styles/header-cell/header-cell.css.js.map +1 -0
  266. package/styles/header-row/header-row.base.css.d.ts +1 -0
  267. package/styles/header-row/header-row.base.css.js +3 -0
  268. package/styles/header-row/header-row.base.css.js.map +1 -0
  269. package/styles/paginator/paginator.css.d.ts +1 -0
  270. package/styles/paginator/paginator.css.js +3 -0
  271. package/styles/paginator/paginator.css.js.map +1 -0
  272. package/styles/toolbar/toolbar.css.d.ts +1 -0
  273. package/styles/toolbar/toolbar.css.js +3 -0
  274. package/styles/toolbar/toolbar.css.js.map +1 -0
  275. package/styles.css +17 -0
  276. package/dist/bundle.js +0 -2194
  277. package/dist/docs/assets/highlight.css +0 -43
  278. package/dist/docs/assets/main.js +0 -58
  279. package/dist/docs/assets/search.js +0 -1
  280. package/dist/docs/assets/style.css +0 -1365
  281. package/dist/docs/classes/ApexGrid.html +0 -327
  282. package/dist/docs/index.html +0 -82
  283. package/dist/docs/interfaces/ApexFilteredEvent.html +0 -104
  284. package/dist/docs/interfaces/ApexFilteringEvent.html +0 -116
  285. package/dist/docs/interfaces/ApexGridEventMap.html +0 -127
  286. package/dist/docs/interfaces/ApexHeaderContext.html +0 -104
  287. package/dist/docs/interfaces/BaseApexCellContext.html +0 -120
  288. package/dist/docs/interfaces/BaseColumnConfiguration.html +0 -196
  289. package/dist/docs/interfaces/BaseColumnSortConfiguration.html +0 -106
  290. package/dist/docs/interfaces/BaseFilterExpression.html +0 -132
  291. package/dist/docs/interfaces/BaseSortExpression.html +0 -124
  292. package/dist/docs/interfaces/ColumnFilterConfiguration.html +0 -92
  293. package/dist/docs/interfaces/DataPipelineConfiguration.html +0 -104
  294. package/dist/docs/interfaces/GridSortConfiguration.html +0 -99
  295. package/dist/docs/modules.html +0 -102
  296. package/dist/docs/types/ApexCellContext.html +0 -74
  297. package/dist/docs/types/BasePropertyType.html +0 -74
  298. package/dist/docs/types/BaseSortComparer.html +0 -89
  299. package/dist/docs/types/ColumnConfiguration.html +0 -74
  300. package/dist/docs/types/ColumnSortConfiguration.html +0 -74
  301. package/dist/docs/types/DataPipelineHook.html +0 -85
  302. package/dist/docs/types/DataPipelineParams.html +0 -87
  303. package/dist/docs/types/DataType.html +0 -67
  304. package/dist/docs/types/FilterCriteria.html +0 -71
  305. package/dist/docs/types/FilterExpression.html +0 -74
  306. package/dist/docs/types/Keys.html +0 -72
  307. package/dist/docs/types/PropertyType.html +0 -74
  308. package/dist/docs/types/SortComparer.html +0 -74
  309. package/dist/docs/types/SortExpression.html +0 -74
  310. package/dist/docs/types/SortState.html +0 -72
  311. package/dist/docs/types/SortingDirection.html +0 -69
  312. package/dist/src/components/cell.d.ts +0 -36
  313. package/dist/src/components/cell.d.ts.map +0 -1
  314. package/dist/src/components/cell.js +0 -55
  315. package/dist/src/components/cell.js.map +0 -1
  316. package/dist/src/components/filter-row.d.ts.map +0 -1
  317. package/dist/src/components/filter-row.js +0 -316
  318. package/dist/src/components/filter-row.js.map +0 -1
  319. package/dist/src/components/grid.d.ts +0 -226
  320. package/dist/src/components/grid.d.ts.map +0 -1
  321. package/dist/src/components/grid.js +0 -309
  322. package/dist/src/components/grid.js.map +0 -1
  323. package/dist/src/components/header-row.d.ts +0 -24
  324. package/dist/src/components/header-row.d.ts.map +0 -1
  325. package/dist/src/components/header-row.js +0 -78
  326. package/dist/src/components/header-row.js.map +0 -1
  327. package/dist/src/components/header.d.ts.map +0 -1
  328. package/dist/src/components/header.js +0 -144
  329. package/dist/src/components/header.js.map +0 -1
  330. package/dist/src/components/row.d.ts +0 -25
  331. package/dist/src/components/row.d.ts.map +0 -1
  332. package/dist/src/components/row.js +0 -68
  333. package/dist/src/components/row.js.map +0 -1
  334. package/dist/src/components/virtualizer.d.ts.map +0 -1
  335. package/dist/src/components/virtualizer.js.map +0 -1
  336. package/dist/src/controllers/data-operation.d.ts +0 -18
  337. package/dist/src/controllers/data-operation.d.ts.map +0 -1
  338. package/dist/src/controllers/data-operation.js +0 -37
  339. package/dist/src/controllers/data-operation.js.map +0 -1
  340. package/dist/src/controllers/dom.d.ts +0 -20
  341. package/dist/src/controllers/dom.d.ts.map +0 -1
  342. package/dist/src/controllers/dom.js +0 -60
  343. package/dist/src/controllers/dom.js.map +0 -1
  344. package/dist/src/controllers/filter.d.ts.map +0 -1
  345. package/dist/src/controllers/filter.js +0 -119
  346. package/dist/src/controllers/filter.js.map +0 -1
  347. package/dist/src/controllers/navigation.d.ts.map +0 -1
  348. package/dist/src/controllers/navigation.js.map +0 -1
  349. package/dist/src/controllers/resize.d.ts.map +0 -1
  350. package/dist/src/controllers/resize.js +0 -70
  351. package/dist/src/controllers/resize.js.map +0 -1
  352. package/dist/src/controllers/sort.d.ts.map +0 -1
  353. package/dist/src/controllers/sort.js +0 -94
  354. package/dist/src/controllers/sort.js.map +0 -1
  355. package/dist/src/controllers/state.d.ts +0 -25
  356. package/dist/src/controllers/state.d.ts.map +0 -1
  357. package/dist/src/controllers/state.js +0 -40
  358. package/dist/src/controllers/state.js.map +0 -1
  359. package/dist/src/define.d.ts.map +0 -1
  360. package/dist/src/define.js.map +0 -1
  361. package/dist/src/index.d.ts +0 -9
  362. package/dist/src/index.d.ts.map +0 -1
  363. package/dist/src/index.js.map +0 -1
  364. package/dist/src/internal/constants.d.ts.map +0 -1
  365. package/dist/src/internal/constants.js.map +0 -1
  366. package/dist/src/internal/icon-registry.d.ts +0 -2
  367. package/dist/src/internal/icon-registry.d.ts.map +0 -1
  368. package/dist/src/internal/icon-registry.js +0 -29
  369. package/dist/src/internal/icon-registry.js.map +0 -1
  370. package/dist/src/internal/is-defined.d.ts.map +0 -1
  371. package/dist/src/internal/is-defined.js.map +0 -1
  372. package/dist/src/internal/mixins/event-emitter.d.ts.map +0 -1
  373. package/dist/src/internal/mixins/event-emitter.js.map +0 -1
  374. package/dist/src/internal/normalize-case.d.ts.map +0 -1
  375. package/dist/src/internal/normalize-case.js.map +0 -1
  376. package/dist/src/internal/part-map.d.ts.map +0 -1
  377. package/dist/src/internal/part-map.js.map +0 -1
  378. package/dist/src/internal/register.d.ts.map +0 -1
  379. package/dist/src/internal/register.js +0 -9
  380. package/dist/src/internal/register.js.map +0 -1
  381. package/dist/src/internal/tags.d.ts.map +0 -1
  382. package/dist/src/internal/tags.js.map +0 -1
  383. package/dist/src/internal/types.d.ts +0 -199
  384. package/dist/src/internal/types.d.ts.map +0 -1
  385. package/dist/src/internal/types.js.map +0 -1
  386. package/dist/src/internal/utils.d.ts +0 -7
  387. package/dist/src/internal/utils.d.ts.map +0 -1
  388. package/dist/src/internal/utils.js +0 -37
  389. package/dist/src/internal/utils.js.map +0 -1
  390. package/dist/src/internal/watch.d.ts.map +0 -1
  391. package/dist/src/internal/watch.js.map +0 -1
  392. package/dist/src/operations/base.d.ts.map +0 -1
  393. package/dist/src/operations/base.js.map +0 -1
  394. package/dist/src/operations/filter/operands/boolean.d.ts.map +0 -1
  395. package/dist/src/operations/filter/operands/boolean.js.map +0 -1
  396. package/dist/src/operations/filter/operands/number.d.ts.map +0 -1
  397. package/dist/src/operations/filter/operands/number.js.map +0 -1
  398. package/dist/src/operations/filter/operands/string.d.ts.map +0 -1
  399. package/dist/src/operations/filter/operands/string.js.map +0 -1
  400. package/dist/src/operations/filter/state.d.ts.map +0 -1
  401. package/dist/src/operations/filter/state.js.map +0 -1
  402. package/dist/src/operations/filter/tree.d.ts.map +0 -1
  403. package/dist/src/operations/filter/tree.js.map +0 -1
  404. package/dist/src/operations/filter/types.d.ts.map +0 -1
  405. package/dist/src/operations/filter/types.js.map +0 -1
  406. package/dist/src/operations/filter.d.ts.map +0 -1
  407. package/dist/src/operations/filter.js.map +0 -1
  408. package/dist/src/operations/sort/types.d.ts.map +0 -1
  409. package/dist/src/operations/sort/types.js.map +0 -1
  410. package/dist/src/operations/sort.d.ts.map +0 -1
  411. package/dist/src/operations/sort.js.map +0 -1
  412. package/dist/src/styles/body-cell/body-cell-styles.css.d.ts.map +0 -1
  413. package/dist/src/styles/body-cell/body-cell-styles.css.js +0 -71
  414. package/dist/src/styles/body-cell/body-cell-styles.css.js.map +0 -1
  415. package/dist/src/styles/body-row/body-row-styles.css.d.ts.map +0 -1
  416. package/dist/src/styles/body-row/body-row-styles.css.js +0 -38
  417. package/dist/src/styles/body-row/body-row-styles.css.js.map +0 -1
  418. package/dist/src/styles/filter-row/filter-row-styles.css.d.ts.map +0 -1
  419. package/dist/src/styles/filter-row/filter-row-styles.css.js +0 -96
  420. package/dist/src/styles/filter-row/filter-row-styles.css.js.map +0 -1
  421. package/dist/src/styles/grid/themes/light/grid.bootstrap-styles.css.d.ts +0 -2
  422. package/dist/src/styles/grid/themes/light/grid.bootstrap-styles.css.d.ts.map +0 -1
  423. package/dist/src/styles/grid/themes/light/grid.bootstrap-styles.css.js +0 -83
  424. package/dist/src/styles/grid/themes/light/grid.bootstrap-styles.css.js.map +0 -1
  425. package/dist/src/styles/grid/themes/light/grid.fluent-styles.css.d.ts.map +0 -1
  426. package/dist/src/styles/grid/themes/light/grid.fluent-styles.css.js +0 -83
  427. package/dist/src/styles/grid/themes/light/grid.fluent-styles.css.js.map +0 -1
  428. package/dist/src/styles/grid/themes/light/grid.indigo-styles.css.d.ts +0 -2
  429. package/dist/src/styles/grid/themes/light/grid.indigo-styles.css.d.ts.map +0 -1
  430. package/dist/src/styles/grid/themes/light/grid.indigo-styles.css.js +0 -83
  431. package/dist/src/styles/grid/themes/light/grid.indigo-styles.css.js.map +0 -1
  432. package/dist/src/styles/grid/themes/light/grid.material-styles.css.d.ts +0 -2
  433. package/dist/src/styles/grid/themes/light/grid.material-styles.css.d.ts.map +0 -1
  434. package/dist/src/styles/grid/themes/light/grid.material-styles.css.js +0 -83
  435. package/dist/src/styles/grid/themes/light/grid.material-styles.css.js.map +0 -1
  436. package/dist/src/styles/header-cell/header-cell-styles.css.d.ts +0 -2
  437. package/dist/src/styles/header-cell/header-cell-styles.css.d.ts.map +0 -1
  438. package/dist/src/styles/header-cell/header-cell-styles.css.js +0 -141
  439. package/dist/src/styles/header-cell/header-cell-styles.css.js.map +0 -1
  440. package/dist/src/styles/header-row/header-row.base-styles.css.d.ts +0 -2
  441. package/dist/src/styles/header-row/header-row.base-styles.css.d.ts.map +0 -1
  442. package/dist/src/styles/header-row/header-row.base-styles.css.js +0 -35
  443. package/dist/src/styles/header-row/header-row.base-styles.css.js.map +0 -1
  444. /package/{dist/src/define.js → define.js} +0 -0
  445. /package/{dist/docs → docs}/.nojekyll +0 -0
  446. /package/{dist/src/internal → internal}/constants.js +0 -0
  447. /package/{dist/src/internal → internal}/is-defined.js +0 -0
  448. /package/{dist/src/internal → internal}/mixins/event-emitter.js +0 -0
  449. /package/{dist/src/internal → internal}/normalize-case.js +0 -0
  450. /package/{dist/src/internal → internal}/types.js +0 -0
  451. /package/{dist/src/operations → operations}/base.js +0 -0
  452. /package/{dist/src/operations → operations}/filter/types.js +0 -0
  453. /package/{dist/src/operations → operations}/sort/types.js +0 -0
@@ -0,0 +1,29 @@
1
+ import type { StyleInfo } from 'lit/directives/style-map.js';
2
+ import type { ColumnConfiguration, GridHost } from './types.js';
3
+ /** Width of the auto-rendered selection (checkbox) column in CSS pixels. */
4
+ export declare const SELECTION_COLUMN_WIDTH = 44;
5
+ /** Width of the auto-rendered expansion (chevron) column in CSS pixels. */
6
+ export declare const EXPANSION_COLUMN_WIDTH = 40;
7
+ export declare function applyColumnWidths<T extends object>(columns: Array<ColumnConfiguration<T>>, options?: {
8
+ showSelectionColumn?: boolean;
9
+ showExpansionColumn?: boolean;
10
+ }): StyleInfo;
11
+ /**
12
+ * Returns the visual render order of the columns: start-pinned columns first,
13
+ * then unpinned columns, then end-pinned columns. Within each group the
14
+ * original `columns` array order is preserved.
15
+ *
16
+ * @remarks
17
+ * The grid uses this order for rendering, navigation, and CSS grid track widths.
18
+ * The user-supplied `columns` array is never mutated; this returns a new array.
19
+ */
20
+ export declare function getDisplayColumns<T extends object>(columns: Array<ColumnConfiguration<T>>): Array<ColumnConfiguration<T>>;
21
+ /**
22
+ * Returns `'start'` for the last visible start-pinned column, `'end'` for the
23
+ * first visible end-pinned column, or `null` otherwise. The edge column gets a
24
+ * subtle shadow / border to separate the pinned region from the scrolling one.
25
+ */
26
+ export declare function getPinEdge<T extends object>(displayColumns: Array<ColumnConfiguration<T>>, index: number): 'start' | 'end' | null;
27
+ export declare function autoGenerateColumns<T extends object>(grid: GridHost<T>): void;
28
+ export declare function asArray<T>(value: T | T[]): T[];
29
+ export declare function getFilterOperandsFor<T extends object>(column: ColumnConfiguration<T>): Readonly<import("../operations/filter/types.js").FilterOperands<number, import("../operations/filter/operands/number.js").NumberKeys>> | Readonly<import("../operations/filter/types.js").FilterOperands<string, import("../operations/filter/operands/string.js").StringKeys>> | Readonly<import("../operations/filter/types.js").FilterOperands<boolean, import("../operations/filter/operands/boolean.js").BooleanKeys>>;
@@ -0,0 +1,75 @@
1
+ import { BooleanOperands } from '../operations/filter/operands/boolean.js';
2
+ import { NumberOperands } from '../operations/filter/operands/number.js';
3
+ import { StringOperands } from '../operations/filter/operands/string.js';
4
+ export const SELECTION_COLUMN_WIDTH = 44;
5
+ export const EXPANSION_COLUMN_WIDTH = 40;
6
+ export function applyColumnWidths(columns, options = {}) {
7
+ const tracks = columns
8
+ .filter((each) => !each.hidden)
9
+ .map(({ width }) => width ?? 'minmax(136px, 1fr)');
10
+ if (options.showExpansionColumn) {
11
+ tracks.unshift(`${EXPANSION_COLUMN_WIDTH}px`);
12
+ }
13
+ if (options.showSelectionColumn) {
14
+ tracks.unshift(`${SELECTION_COLUMN_WIDTH}px`);
15
+ }
16
+ return { 'grid-template-columns': tracks.join(' ') };
17
+ }
18
+ export function getDisplayColumns(columns) {
19
+ const start = [];
20
+ const middle = [];
21
+ const end = [];
22
+ for (const column of columns) {
23
+ if (column.pinned === 'start')
24
+ start.push(column);
25
+ else if (column.pinned === 'end')
26
+ end.push(column);
27
+ else
28
+ middle.push(column);
29
+ }
30
+ return [...start, ...middle, ...end];
31
+ }
32
+ export function getPinEdge(displayColumns, index) {
33
+ const column = displayColumns[index];
34
+ if (!column?.pinned)
35
+ return null;
36
+ if (column.pinned === 'start') {
37
+ for (let i = index + 1; i < displayColumns.length; i++) {
38
+ const next = displayColumns[i];
39
+ if (next.hidden)
40
+ continue;
41
+ return next.pinned === 'start' ? null : 'start';
42
+ }
43
+ return 'start';
44
+ }
45
+ for (let i = index - 1; i >= 0; i--) {
46
+ const prev = displayColumns[i];
47
+ if (prev.hidden)
48
+ continue;
49
+ return prev.pinned === 'end' ? null : 'end';
50
+ }
51
+ return 'end';
52
+ }
53
+ export function autoGenerateColumns(grid) {
54
+ if (grid.autoGenerate && grid.columns.length < 1) {
55
+ const record = grid.data[0] ?? {};
56
+ grid.columns = Object.entries(record).map(([key, value]) => {
57
+ const type = typeof value === 'boolean' ? 'boolean' : typeof value === 'number' ? 'number' : 'string';
58
+ return { key, type };
59
+ });
60
+ }
61
+ }
62
+ export function asArray(value) {
63
+ return Array.isArray(value) ? value : [value];
64
+ }
65
+ export function getFilterOperandsFor(column) {
66
+ switch (column.type) {
67
+ case 'boolean':
68
+ return BooleanOperands;
69
+ case 'number':
70
+ return NumberOperands;
71
+ default:
72
+ return StringOperands;
73
+ }
74
+ }
75
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/internal/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import type { StyleInfo } from 'lit/directives/style-map.js';\nimport { BooleanOperands } from '../operations/filter/operands/boolean.js';\nimport { NumberOperands } from '../operations/filter/operands/number.js';\nimport { StringOperands } from '../operations/filter/operands/string.js';\nimport type { ColumnConfiguration, DataType, GridHost } from './types.js';\n\n/** Width of the auto-rendered selection (checkbox) column in CSS pixels. */\nexport const SELECTION_COLUMN_WIDTH = 44;\n/** Width of the auto-rendered expansion (chevron) column in CSS pixels. */\nexport const EXPANSION_COLUMN_WIDTH = 40;\n\nexport function applyColumnWidths<T extends object>(\n columns: Array<ColumnConfiguration<T>>,\n options: { showSelectionColumn?: boolean; showExpansionColumn?: boolean } = {}\n): StyleInfo {\n const tracks = columns\n .filter((each) => !each.hidden)\n .map(({ width }) => width ?? 'minmax(136px, 1fr)');\n if (options.showExpansionColumn) {\n tracks.unshift(`${EXPANSION_COLUMN_WIDTH}px`);\n }\n if (options.showSelectionColumn) {\n tracks.unshift(`${SELECTION_COLUMN_WIDTH}px`);\n }\n return { 'grid-template-columns': tracks.join(' ') };\n}\n\n/**\n * Returns the visual render order of the columns: start-pinned columns first,\n * then unpinned columns, then end-pinned columns. Within each group the\n * original `columns` array order is preserved.\n *\n * @remarks\n * The grid uses this order for rendering, navigation, and CSS grid track widths.\n * The user-supplied `columns` array is never mutated; this returns a new array.\n */\nexport function getDisplayColumns<T extends object>(\n columns: Array<ColumnConfiguration<T>>\n): Array<ColumnConfiguration<T>> {\n const start: Array<ColumnConfiguration<T>> = [];\n const middle: Array<ColumnConfiguration<T>> = [];\n const end: Array<ColumnConfiguration<T>> = [];\n for (const column of columns) {\n if (column.pinned === 'start') start.push(column);\n else if (column.pinned === 'end') end.push(column);\n else middle.push(column);\n }\n return [...start, ...middle, ...end];\n}\n\n/**\n * Returns `'start'` for the last visible start-pinned column, `'end'` for the\n * first visible end-pinned column, or `null` otherwise. The edge column gets a\n * subtle shadow / border to separate the pinned region from the scrolling one.\n */\nexport function getPinEdge<T extends object>(\n displayColumns: Array<ColumnConfiguration<T>>,\n index: number\n): 'start' | 'end' | null {\n const column = displayColumns[index];\n if (!column?.pinned) return null;\n\n if (column.pinned === 'start') {\n for (let i = index + 1; i < displayColumns.length; i++) {\n const next = displayColumns[i];\n if (next.hidden) continue;\n return next.pinned === 'start' ? null : 'start';\n }\n return 'start';\n }\n\n for (let i = index - 1; i >= 0; i--) {\n const prev = displayColumns[i];\n if (prev.hidden) continue;\n return prev.pinned === 'end' ? null : 'end';\n }\n return 'end';\n}\n\nexport function autoGenerateColumns<T extends object>(grid: GridHost<T>) {\n if (grid.autoGenerate && grid.columns.length < 1) {\n const record = grid.data[0] ?? {};\n\n grid.columns = Object.entries(record).map(([key, value]) => {\n const type: DataType =\n typeof value === 'boolean' ? 'boolean' : typeof value === 'number' ? 'number' : 'string';\n return { key, type } as ColumnConfiguration<T>;\n });\n }\n}\n\nexport function asArray<T>(value: T | T[]) {\n return Array.isArray(value) ? value : [value];\n}\n\nexport function getFilterOperandsFor<T extends object>(column: ColumnConfiguration<T>) {\n // Check for custom class in the filter config\n switch (column.type) {\n case 'boolean':\n return BooleanOperands;\n case 'number':\n return NumberOperands;\n default:\n return StringOperands;\n }\n}\n"]}
@@ -3,4 +3,3 @@ interface WatchOptions {
3
3
  }
4
4
  export declare function watch(propName: string, options?: WatchOptions): (protoOrDescriptor: any, name: string) => any;
5
5
  export {};
6
- //# sourceMappingURL=watch.d.ts.map
@@ -1,14 +1,14 @@
1
1
  export function watch(propName, options) {
2
2
  return (protoOrDescriptor, name) => {
3
3
  const { willUpdate } = protoOrDescriptor;
4
- options = Object.assign({ waitUntilFirstUpdate: false }, options);
4
+ const _options = Object.assign({ waitUntilFirstUpdate: false }, options);
5
5
  protoOrDescriptor.willUpdate = function (changedProps) {
6
6
  willUpdate.call(this, changedProps);
7
7
  if (changedProps.has(propName)) {
8
8
  const oldValue = changedProps.get(propName);
9
9
  const newValue = this[propName];
10
10
  if (oldValue !== newValue) {
11
- if (!(options === null || options === void 0 ? void 0 : options.waitUntilFirstUpdate) || this.hasUpdated) {
11
+ if (!_options?.waitUntilFirstUpdate || this.hasUpdated) {
12
12
  this[name].call(this, oldValue, newValue);
13
13
  }
14
14
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/internal/watch.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,KAAK,CAAC,QAAgB,EAAE,OAAsB;IAC5D,OAAO,CAAC,iBAAsB,EAAE,IAAY,EAAO,EAAE;QACnD,MAAM,EAAE,UAAU,EAAE,GAAG,iBAAiB,CAAC;QAEzC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,oBAAoB,EAAE,KAAK,EAAE,EAAE,OAAO,CAAiB,CAAC;QAEzF,iBAAiB,CAAC,UAAU,GAAG,UAAU,YAA8B;YACrE,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAEpC,IAAI,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC/B,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAEhC,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;oBAC1B,IAAI,CAAC,QAAQ,EAAE,oBAAoB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;wBACvD,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;oBAC5C,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC","sourcesContent":["interface WatchOptions {\n waitUntilFirstUpdate?: boolean;\n}\n\nexport function watch(propName: string, options?: WatchOptions) {\n return (protoOrDescriptor: any, name: string): any => {\n const { willUpdate } = protoOrDescriptor;\n\n const _options = Object.assign({ waitUntilFirstUpdate: false }, options) as WatchOptions;\n\n protoOrDescriptor.willUpdate = function (changedProps: Map<string, any>) {\n willUpdate.call(this, changedProps);\n\n if (changedProps.has(propName)) {\n const oldValue = changedProps.get(propName);\n const newValue = this[propName];\n\n if (oldValue !== newValue) {\n if (!_options?.waitUntilFirstUpdate || this.hasUpdated) {\n this[name].call(this, oldValue, newValue);\n }\n }\n }\n };\n };\n}\n"]}
@@ -0,0 +1,22 @@
1
+ import type { ExportCellValue } from './export.js';
2
+ /** Excel column letter for zero-based column index (0 → A, 26 → AA). */
3
+ export declare function columnLetter(index: number): string;
4
+ /**
5
+ * Converts a `Date` to the Excel serial date number (days since the 1899-12-30
6
+ * epoch, with the day rolling over at the user's local midnight). Time of day
7
+ * is preserved as the fractional part.
8
+ */
9
+ export declare function toExcelSerial(date: Date): number;
10
+ /** A worksheet representation passed to {@link buildXLSX}. */
11
+ export interface XLSXSheetData {
12
+ /** Worksheet tab name. */
13
+ name?: string;
14
+ /** Header row labels (rendered with bold styling). */
15
+ headers: string[];
16
+ /** Data rows. Each row is an array of cell values, aligned to `headers`. */
17
+ rows: ExportCellValue[][];
18
+ }
19
+ /**
20
+ * Builds the complete `.xlsx` bytes for a single-sheet workbook.
21
+ */
22
+ export declare function buildXLSX(sheet: XLSXSheetData): Uint8Array;
@@ -0,0 +1,228 @@
1
+ const encoder = new TextEncoder();
2
+ let _crcTable = null;
3
+ function getCrcTable() {
4
+ if (_crcTable)
5
+ return _crcTable;
6
+ const table = new Uint32Array(256);
7
+ for (let i = 0; i < 256; i++) {
8
+ let c = i;
9
+ for (let k = 0; k < 8; k++) {
10
+ c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
11
+ }
12
+ table[i] = c >>> 0;
13
+ }
14
+ _crcTable = table;
15
+ return table;
16
+ }
17
+ function crc32(data) {
18
+ const table = getCrcTable();
19
+ let c = 0xffffffff;
20
+ for (let i = 0; i < data.length; i++) {
21
+ c = (c >>> 8) ^ table[(c ^ data[i]) & 0xff];
22
+ }
23
+ return (c ^ 0xffffffff) >>> 0;
24
+ }
25
+ function buildZip(files) {
26
+ const parts = [];
27
+ const entries = [];
28
+ let offset = 0;
29
+ for (const file of files) {
30
+ const nameBytes = encoder.encode(file.name);
31
+ const crc = crc32(file.data);
32
+ const header = new Uint8Array(30 + nameBytes.length);
33
+ const view = new DataView(header.buffer);
34
+ view.setUint32(0, 0x04034b50, true);
35
+ view.setUint16(4, 20, true);
36
+ view.setUint16(6, 0x0800, true);
37
+ view.setUint16(8, 0, true);
38
+ view.setUint16(10, 0, true);
39
+ view.setUint16(12, 0x0021, true);
40
+ view.setUint32(14, crc, true);
41
+ view.setUint32(18, file.data.length, true);
42
+ view.setUint32(22, file.data.length, true);
43
+ view.setUint16(26, nameBytes.length, true);
44
+ view.setUint16(28, 0, true);
45
+ header.set(nameBytes, 30);
46
+ parts.push(header, file.data);
47
+ entries.push({ ...file, crc, offset, nameBytes });
48
+ offset += header.length + file.data.length;
49
+ }
50
+ const centralStart = offset;
51
+ for (const entry of entries) {
52
+ const cd = new Uint8Array(46 + entry.nameBytes.length);
53
+ const view = new DataView(cd.buffer);
54
+ view.setUint32(0, 0x02014b50, true);
55
+ view.setUint16(4, 0x031e, true);
56
+ view.setUint16(6, 20, true);
57
+ view.setUint16(8, 0x0800, true);
58
+ view.setUint16(10, 0, true);
59
+ view.setUint16(12, 0, true);
60
+ view.setUint16(14, 0x0021, true);
61
+ view.setUint32(16, entry.crc, true);
62
+ view.setUint32(20, entry.data.length, true);
63
+ view.setUint32(24, entry.data.length, true);
64
+ view.setUint16(28, entry.nameBytes.length, true);
65
+ view.setUint16(30, 0, true);
66
+ view.setUint16(32, 0, true);
67
+ view.setUint16(34, 0, true);
68
+ view.setUint16(36, 0, true);
69
+ view.setUint32(38, 0, true);
70
+ view.setUint32(42, entry.offset, true);
71
+ cd.set(entry.nameBytes, 46);
72
+ parts.push(cd);
73
+ offset += cd.length;
74
+ }
75
+ const centralSize = offset - centralStart;
76
+ const eocd = new Uint8Array(22);
77
+ const eocdView = new DataView(eocd.buffer);
78
+ eocdView.setUint32(0, 0x06054b50, true);
79
+ eocdView.setUint16(8, entries.length, true);
80
+ eocdView.setUint16(10, entries.length, true);
81
+ eocdView.setUint32(12, centralSize, true);
82
+ eocdView.setUint32(16, centralStart, true);
83
+ parts.push(eocd);
84
+ let total = 0;
85
+ for (const part of parts)
86
+ total += part.length;
87
+ const result = new Uint8Array(total);
88
+ let pos = 0;
89
+ for (const part of parts) {
90
+ result.set(part, pos);
91
+ pos += part.length;
92
+ }
93
+ return result;
94
+ }
95
+ const XML_ESCAPES = {
96
+ '<': '&lt;',
97
+ '>': '&gt;',
98
+ '&': '&amp;',
99
+ '"': '&quot;',
100
+ "'": '&apos;',
101
+ };
102
+ function escapeXml(value) {
103
+ let out = '';
104
+ for (let i = 0; i < value.length; i++) {
105
+ const code = value.charCodeAt(i);
106
+ if (code < 0x20 && code !== 0x09 && code !== 0x0a && code !== 0x0d)
107
+ continue;
108
+ const ch = value[i];
109
+ out += XML_ESCAPES[ch] ?? ch;
110
+ }
111
+ return out;
112
+ }
113
+ export function columnLetter(index) {
114
+ let result = '';
115
+ let n = index;
116
+ while (n >= 0) {
117
+ result = String.fromCharCode(65 + (n % 26)) + result;
118
+ n = Math.floor(n / 26) - 1;
119
+ }
120
+ return result;
121
+ }
122
+ export function toExcelSerial(date) {
123
+ const localMs = date.getTime() - date.getTimezoneOffset() * 60_000 - Date.UTC(1899, 11, 30);
124
+ return localMs / 86_400_000;
125
+ }
126
+ const STYLE_DEFAULT = 0;
127
+ const STYLE_HEADER = 1;
128
+ const STYLE_DATE = 2;
129
+ function renderCell(ref, value, styleIndex) {
130
+ const s = styleIndex && styleIndex !== STYLE_DEFAULT ? ` s="${styleIndex}"` : '';
131
+ if (value === null || value === undefined || value === '') {
132
+ return styleIndex ? `<c r="${ref}"${s}/>` : '';
133
+ }
134
+ if (typeof value === 'boolean') {
135
+ return `<c r="${ref}"${s} t="b"><v>${value ? 1 : 0}</v></c>`;
136
+ }
137
+ if (value instanceof Date) {
138
+ return `<c r="${ref}" s="${STYLE_DATE}"><v>${toExcelSerial(value)}</v></c>`;
139
+ }
140
+ if (typeof value === 'number' && Number.isFinite(value)) {
141
+ return `<c r="${ref}"${s}><v>${value}</v></c>`;
142
+ }
143
+ return `<c r="${ref}"${s} t="inlineStr"><is><t xml:space="preserve">${escapeXml(String(value))}</t></is></c>`;
144
+ }
145
+ const SHEET_NAME_DISALLOWED = /[\\/?*[\]:]/g;
146
+ function sanitizeSheetName(raw) {
147
+ return raw.replace(SHEET_NAME_DISALLOWED, '_').slice(0, 31) || 'Sheet1';
148
+ }
149
+ export function buildXLSX(sheet) {
150
+ const sheetName = sanitizeSheetName(sheet.name ?? 'Sheet1');
151
+ const headerCount = sheet.headers.length;
152
+ const maxRowWidth = sheet.rows.reduce((acc, row) => Math.max(acc, row.length), 0);
153
+ const totalCols = Math.max(headerCount, maxRowWidth);
154
+ const totalRows = sheet.rows.length + (headerCount ? 1 : 0);
155
+ const sheetRows = [];
156
+ let rowNum = 1;
157
+ if (headerCount) {
158
+ const cells = [];
159
+ for (let c = 0; c < headerCount; c++) {
160
+ cells.push(renderCell(`${columnLetter(c)}${rowNum}`, sheet.headers[c], STYLE_HEADER));
161
+ }
162
+ sheetRows.push(`<row r="${rowNum}">${cells.join('')}</row>`);
163
+ rowNum++;
164
+ }
165
+ for (const row of sheet.rows) {
166
+ const cells = [];
167
+ for (let c = 0; c < row.length; c++) {
168
+ const cell = renderCell(`${columnLetter(c)}${rowNum}`, row[c]);
169
+ if (cell)
170
+ cells.push(cell);
171
+ }
172
+ sheetRows.push(`<row r="${rowNum}">${cells.join('')}</row>`);
173
+ rowNum++;
174
+ }
175
+ const dimension = totalRows > 0 && totalCols > 0 ? `A1:${columnLetter(totalCols - 1)}${totalRows}` : 'A1';
176
+ const sheetXml = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>` +
177
+ `<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">` +
178
+ `<dimension ref="${dimension}"/>` +
179
+ `<sheetData>${sheetRows.join('')}</sheetData>` +
180
+ '</worksheet>';
181
+ const styles = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>` +
182
+ `<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">` +
183
+ `<numFmts count="1"><numFmt numFmtId="164" formatCode="yyyy-mm-dd"/></numFmts>` +
184
+ `<fonts count="2">` +
185
+ `<font><sz val="11"/><name val="Calibri"/></font>` +
186
+ `<font><b/><sz val="11"/><name val="Calibri"/></font>` +
187
+ '</fonts>' +
188
+ `<fills count="1"><fill><patternFill patternType="none"/></fill></fills>` +
189
+ `<borders count="1"><border/></borders>` +
190
+ `<cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs>` +
191
+ `<cellXfs count="3">` +
192
+ `<xf numFmtId="0" fontId="0" fillId="0" borderId="0"/>` +
193
+ `<xf numFmtId="0" fontId="1" fillId="0" borderId="0" applyFont="1"/>` +
194
+ `<xf numFmtId="164" fontId="0" fillId="0" borderId="0" applyNumberFormat="1"/>` +
195
+ '</cellXfs>' +
196
+ '</styleSheet>';
197
+ const workbook = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>` +
198
+ `<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" ` +
199
+ `xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">` +
200
+ `<sheets><sheet name="${escapeXml(sheetName)}" sheetId="1" r:id="rId1"/></sheets>` +
201
+ '</workbook>';
202
+ const contentTypes = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>` +
203
+ `<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">` +
204
+ `<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/>` +
205
+ `<Default Extension="xml" ContentType="application/xml"/>` +
206
+ `<Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/>` +
207
+ `<Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>` +
208
+ `<Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/>` +
209
+ '</Types>';
210
+ const rootRels = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>` +
211
+ `<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">` +
212
+ `<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>` +
213
+ '</Relationships>';
214
+ const workbookRels = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>` +
215
+ `<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">` +
216
+ `<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/>` +
217
+ `<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/>` +
218
+ '</Relationships>';
219
+ return buildZip([
220
+ { name: '[Content_Types].xml', data: encoder.encode(contentTypes) },
221
+ { name: '_rels/.rels', data: encoder.encode(rootRels) },
222
+ { name: 'xl/workbook.xml', data: encoder.encode(workbook) },
223
+ { name: 'xl/_rels/workbook.xml.rels', data: encoder.encode(workbookRels) },
224
+ { name: 'xl/styles.xml', data: encoder.encode(styles) },
225
+ { name: 'xl/worksheets/sheet1.xml', data: encoder.encode(sheetXml) },
226
+ ]);
227
+ }
228
+ //# sourceMappingURL=xlsx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xlsx.js","sourceRoot":"","sources":["../../src/internal/xlsx.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExportCellValue } from './export.js';\n\n// Minimal write-only OOXML (XLSX) implementation. Produces a single-sheet\n// workbook with bold headers and a date cell format, packaged in a store-only\n// (no-compression) ZIP container. No external dependencies — the goal is to\n// keep the bundle footprint of the export feature near zero.\n\nconst encoder = new TextEncoder();\n\n// --- CRC-32 (IEEE 802.3) for ZIP entries -----------------------------------\n\nlet _crcTable: Uint32Array | null = null;\nfunction getCrcTable(): Uint32Array {\n if (_crcTable) return _crcTable;\n const table = new Uint32Array(256);\n for (let i = 0; i < 256; i++) {\n let c = i;\n for (let k = 0; k < 8; k++) {\n c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\n }\n table[i] = c >>> 0;\n }\n _crcTable = table;\n return table;\n}\n\nfunction crc32(data: Uint8Array): number {\n const table = getCrcTable();\n let c = 0xffffffff;\n for (let i = 0; i < data.length; i++) {\n c = (c >>> 8) ^ table[(c ^ data[i]) & 0xff];\n }\n return (c ^ 0xffffffff) >>> 0;\n}\n\n// --- Store-only ZIP writer -------------------------------------------------\n\ninterface ZipFile {\n name: string;\n data: Uint8Array;\n}\n\ninterface ZipEntry extends ZipFile {\n crc: number;\n offset: number;\n nameBytes: Uint8Array;\n}\n\n/**\n * Builds a store-only (no compression) ZIP archive containing the given\n * files. The XLSX format permits stored entries, which keeps this writer\n * ~100 lines without pulling in a deflate implementation.\n */\nfunction buildZip(files: ReadonlyArray<ZipFile>): Uint8Array {\n const parts: Uint8Array[] = [];\n const entries: ZipEntry[] = [];\n let offset = 0;\n\n for (const file of files) {\n const nameBytes = encoder.encode(file.name);\n const crc = crc32(file.data);\n const header = new Uint8Array(30 + nameBytes.length);\n const view = new DataView(header.buffer);\n view.setUint32(0, 0x04034b50, true);\n view.setUint16(4, 20, true); // version needed to extract\n view.setUint16(6, 0x0800, true); // flag bit 11: UTF-8 filename\n view.setUint16(8, 0, true); // compression: stored\n view.setUint16(10, 0, true); // mod time\n view.setUint16(12, 0x0021, true); // mod date: 1980-01-01\n view.setUint32(14, crc, true);\n view.setUint32(18, file.data.length, true);\n view.setUint32(22, file.data.length, true);\n view.setUint16(26, nameBytes.length, true);\n view.setUint16(28, 0, true);\n header.set(nameBytes, 30);\n parts.push(header, file.data);\n entries.push({ ...file, crc, offset, nameBytes });\n offset += header.length + file.data.length;\n }\n\n const centralStart = offset;\n for (const entry of entries) {\n const cd = new Uint8Array(46 + entry.nameBytes.length);\n const view = new DataView(cd.buffer);\n view.setUint32(0, 0x02014b50, true);\n view.setUint16(4, 0x031e, true); // version made by (unix, v3.0)\n view.setUint16(6, 20, true);\n view.setUint16(8, 0x0800, true);\n view.setUint16(10, 0, true);\n view.setUint16(12, 0, true);\n view.setUint16(14, 0x0021, true);\n view.setUint32(16, entry.crc, true);\n view.setUint32(20, entry.data.length, true);\n view.setUint32(24, entry.data.length, true);\n view.setUint16(28, entry.nameBytes.length, true);\n view.setUint16(30, 0, true);\n view.setUint16(32, 0, true);\n view.setUint16(34, 0, true);\n view.setUint16(36, 0, true);\n view.setUint32(38, 0, true);\n view.setUint32(42, entry.offset, true);\n cd.set(entry.nameBytes, 46);\n parts.push(cd);\n offset += cd.length;\n }\n\n const centralSize = offset - centralStart;\n const eocd = new Uint8Array(22);\n const eocdView = new DataView(eocd.buffer);\n eocdView.setUint32(0, 0x06054b50, true);\n eocdView.setUint16(8, entries.length, true);\n eocdView.setUint16(10, entries.length, true);\n eocdView.setUint32(12, centralSize, true);\n eocdView.setUint32(16, centralStart, true);\n parts.push(eocd);\n\n let total = 0;\n for (const part of parts) total += part.length;\n const result = new Uint8Array(total);\n let pos = 0;\n for (const part of parts) {\n result.set(part, pos);\n pos += part.length;\n }\n return result;\n}\n\n// --- XML helpers -----------------------------------------------------------\n\nconst XML_ESCAPES: Record<string, string> = {\n '<': '&lt;',\n '>': '&gt;',\n '&': '&amp;',\n '\"': '&quot;',\n \"'\": '&apos;',\n};\n\nfunction escapeXml(value: string): string {\n // XLSX is intolerant of control chars below 0x20 (except tab, LF, CR).\n // Strip them rather than letting Excel report a \"corrupt file\" warning.\n let out = '';\n for (let i = 0; i < value.length; i++) {\n const code = value.charCodeAt(i);\n if (code < 0x20 && code !== 0x09 && code !== 0x0a && code !== 0x0d) continue;\n const ch = value[i];\n out += XML_ESCAPES[ch] ?? ch;\n }\n return out;\n}\n\n/** Excel column letter for zero-based column index (0 → A, 26 → AA). */\nexport function columnLetter(index: number): string {\n let result = '';\n let n = index;\n while (n >= 0) {\n result = String.fromCharCode(65 + (n % 26)) + result;\n n = Math.floor(n / 26) - 1;\n }\n return result;\n}\n\n/**\n * Converts a `Date` to the Excel serial date number (days since the 1899-12-30\n * epoch, with the day rolling over at the user's local midnight). Time of day\n * is preserved as the fractional part.\n */\nexport function toExcelSerial(date: Date): number {\n const localMs = date.getTime() - date.getTimezoneOffset() * 60_000 - Date.UTC(1899, 11, 30);\n return localMs / 86_400_000;\n}\n\n// --- Sheet rendering -------------------------------------------------------\n\nconst STYLE_DEFAULT = 0;\nconst STYLE_HEADER = 1;\nconst STYLE_DATE = 2;\n\nfunction renderCell(ref: string, value: ExportCellValue, styleIndex?: number): string {\n const s = styleIndex && styleIndex !== STYLE_DEFAULT ? ` s=\"${styleIndex}\"` : '';\n if (value === null || value === undefined || value === '') {\n return styleIndex ? `<c r=\"${ref}\"${s}/>` : '';\n }\n if (typeof value === 'boolean') {\n return `<c r=\"${ref}\"${s} t=\"b\"><v>${value ? 1 : 0}</v></c>`;\n }\n if (value instanceof Date) {\n return `<c r=\"${ref}\" s=\"${STYLE_DATE}\"><v>${toExcelSerial(value)}</v></c>`;\n }\n if (typeof value === 'number' && Number.isFinite(value)) {\n return `<c r=\"${ref}\"${s}><v>${value}</v></c>`;\n }\n return `<c r=\"${ref}\"${s} t=\"inlineStr\"><is><t xml:space=\"preserve\">${escapeXml(\n String(value)\n )}</t></is></c>`;\n}\n\n/** A worksheet representation passed to {@link buildXLSX}. */\nexport interface XLSXSheetData {\n /** Worksheet tab name. */\n name?: string;\n /** Header row labels (rendered with bold styling). */\n headers: string[];\n /** Data rows. Each row is an array of cell values, aligned to `headers`. */\n rows: ExportCellValue[][];\n}\n\n/** Filename-illegal characters per the OOXML spec for sheet names. */\nconst SHEET_NAME_DISALLOWED = /[\\\\/?*[\\]:]/g;\n\nfunction sanitizeSheetName(raw: string): string {\n return raw.replace(SHEET_NAME_DISALLOWED, '_').slice(0, 31) || 'Sheet1';\n}\n\n/**\n * Builds the complete `.xlsx` bytes for a single-sheet workbook.\n */\nexport function buildXLSX(sheet: XLSXSheetData): Uint8Array {\n const sheetName = sanitizeSheetName(sheet.name ?? 'Sheet1');\n const headerCount = sheet.headers.length;\n const maxRowWidth = sheet.rows.reduce((acc, row) => Math.max(acc, row.length), 0);\n const totalCols = Math.max(headerCount, maxRowWidth);\n const totalRows = sheet.rows.length + (headerCount ? 1 : 0);\n\n const sheetRows: string[] = [];\n let rowNum = 1;\n if (headerCount) {\n const cells: string[] = [];\n for (let c = 0; c < headerCount; c++) {\n cells.push(renderCell(`${columnLetter(c)}${rowNum}`, sheet.headers[c], STYLE_HEADER));\n }\n sheetRows.push(`<row r=\"${rowNum}\">${cells.join('')}</row>`);\n rowNum++;\n }\n for (const row of sheet.rows) {\n const cells: string[] = [];\n for (let c = 0; c < row.length; c++) {\n const cell = renderCell(`${columnLetter(c)}${rowNum}`, row[c]);\n if (cell) cells.push(cell);\n }\n sheetRows.push(`<row r=\"${rowNum}\">${cells.join('')}</row>`);\n rowNum++;\n }\n\n const dimension =\n totalRows > 0 && totalCols > 0 ? `A1:${columnLetter(totalCols - 1)}${totalRows}` : 'A1';\n\n const sheetXml =\n `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>` +\n `<worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\">` +\n `<dimension ref=\"${dimension}\"/>` +\n `<sheetData>${sheetRows.join('')}</sheetData>` +\n '</worksheet>';\n\n const styles =\n `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>` +\n `<styleSheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\">` +\n `<numFmts count=\"1\"><numFmt numFmtId=\"164\" formatCode=\"yyyy-mm-dd\"/></numFmts>` +\n `<fonts count=\"2\">` +\n `<font><sz val=\"11\"/><name val=\"Calibri\"/></font>` +\n `<font><b/><sz val=\"11\"/><name val=\"Calibri\"/></font>` +\n '</fonts>' +\n `<fills count=\"1\"><fill><patternFill patternType=\"none\"/></fill></fills>` +\n `<borders count=\"1\"><border/></borders>` +\n `<cellStyleXfs count=\"1\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\"/></cellStyleXfs>` +\n `<cellXfs count=\"3\">` +\n `<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\"/>` +\n `<xf numFmtId=\"0\" fontId=\"1\" fillId=\"0\" borderId=\"0\" applyFont=\"1\"/>` +\n `<xf numFmtId=\"164\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyNumberFormat=\"1\"/>` +\n '</cellXfs>' +\n '</styleSheet>';\n\n const workbook =\n `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>` +\n `<workbook xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" ` +\n `xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">` +\n `<sheets><sheet name=\"${escapeXml(sheetName)}\" sheetId=\"1\" r:id=\"rId1\"/></sheets>` +\n '</workbook>';\n\n const contentTypes =\n `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>` +\n `<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">` +\n `<Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/>` +\n `<Default Extension=\"xml\" ContentType=\"application/xml\"/>` +\n `<Override PartName=\"/xl/workbook.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\"/>` +\n `<Override PartName=\"/xl/worksheets/sheet1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\"/>` +\n `<Override PartName=\"/xl/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\"/>` +\n '</Types>';\n\n const rootRels =\n `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>` +\n `<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">` +\n `<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"xl/workbook.xml\"/>` +\n '</Relationships>';\n\n const workbookRels =\n `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>` +\n `<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">` +\n `<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\" Target=\"worksheets/sheet1.xml\"/>` +\n `<Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\" Target=\"styles.xml\"/>` +\n '</Relationships>';\n\n return buildZip([\n { name: '[Content_Types].xml', data: encoder.encode(contentTypes) },\n { name: '_rels/.rels', data: encoder.encode(rootRels) },\n { name: 'xl/workbook.xml', data: encoder.encode(workbook) },\n { name: 'xl/_rels/workbook.xml.rels', data: encoder.encode(workbookRels) },\n { name: 'xl/styles.xml', data: encoder.encode(styles) },\n { name: 'xl/worksheets/sheet1.xml', data: encoder.encode(sheetXml) },\n ]);\n}\n"]}
@@ -4,4 +4,3 @@ export default abstract class DataOperation<T, K extends Keys<T> = Keys<T>> {
4
4
  protected resolveCase<U = T[K]>(value: U, caseSensitive?: boolean): U;
5
5
  abstract apply(...args: unknown[]): T[];
6
6
  }
7
- //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/operations/base.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAgB,aAAa;IAC/B,YAAY,CAAC,MAAS,EAAE,GAAM;QACtC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IAES,WAAW,CAAW,KAAQ,EAAE,aAAuB;QAC/D,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,aAAa,CAAC,CAAC,CAAE,KAAK,CAAC,WAAW,EAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;IAC1F,CAAC;CAGF","sourcesContent":["import type { Keys } from '../internal/types.js';\n\nexport default abstract class DataOperation<T, K extends Keys<T> = Keys<T>> {\n protected resolveValue(record: T, key: K) {\n return record[key];\n }\n\n protected resolveCase<U = T[K]>(value: U, caseSensitive?: boolean) {\n return typeof value === 'string' && !caseSensitive ? (value.toLowerCase() as U) : value;\n }\n\n public abstract apply(...args: unknown[]): T[];\n}\n"]}
@@ -1,4 +1,3 @@
1
1
  import type { FilterOperands } from '../types.js';
2
2
  export type BooleanKeys = 'all' | 'true' | 'false' | 'empty' | 'notEmpty';
3
3
  export declare const BooleanOperands: Readonly<FilterOperands<boolean, BooleanKeys>>;
4
- //# sourceMappingURL=boolean.d.ts.map
@@ -4,31 +4,31 @@ export const BooleanOperands = Object.freeze({
4
4
  name: 'all',
5
5
  label: 'All',
6
6
  unary: true,
7
- logic: _ => true,
7
+ logic: (_) => true,
8
8
  },
9
9
  true: {
10
10
  name: 'true',
11
11
  label: 'True',
12
12
  unary: true,
13
- logic: target => target === true,
13
+ logic: (target) => target === true,
14
14
  },
15
15
  false: {
16
16
  name: 'false',
17
17
  label: 'False',
18
18
  unary: true,
19
- logic: target => target === false,
19
+ logic: (target) => target === false,
20
20
  },
21
21
  empty: {
22
22
  name: 'empty',
23
23
  label: 'Empty',
24
24
  unary: true,
25
- logic: target => !isDefined(target),
25
+ logic: (target) => !isDefined(target),
26
26
  },
27
27
  notEmpty: {
28
28
  name: 'notEmpty',
29
29
  label: 'Not empty',
30
30
  unary: true,
31
- logic: target => isDefined(target),
31
+ logic: (target) => isDefined(target),
32
32
  },
33
33
  });
34
34
  //# sourceMappingURL=boolean.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boolean.js","sourceRoot":"","sources":["../../../../src/operations/filter/operands/boolean.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAK5D,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAuC;IACjF,GAAG,EAAE;QACH,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI;KACnB;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,IAAI;KACnC;IACD,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,OAAO;QACd,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,KAAK;KACpC;IACD,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,OAAO;QACd,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC;KACtC;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,WAAW;QAClB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC;KACrC;CACF,CAAC,CAAC","sourcesContent":["import { isDefined } from '../../../internal/is-defined.js';\nimport type { FilterOperands } from '../types.js';\n\nexport type BooleanKeys = 'all' | 'true' | 'false' | 'empty' | 'notEmpty';\n\nexport const BooleanOperands = Object.freeze<FilterOperands<boolean, BooleanKeys>>({\n all: {\n name: 'all',\n label: 'All',\n unary: true,\n logic: (_) => true,\n },\n true: {\n name: 'true',\n label: 'True',\n unary: true,\n logic: (target) => target === true,\n },\n false: {\n name: 'false',\n label: 'False',\n unary: true,\n logic: (target) => target === false,\n },\n empty: {\n name: 'empty',\n label: 'Empty',\n unary: true,\n logic: (target) => !isDefined(target),\n },\n notEmpty: {\n name: 'notEmpty',\n label: 'Not empty',\n unary: true,\n logic: (target) => isDefined(target),\n },\n});\n"]}
@@ -1,4 +1,3 @@
1
1
  import type { FilterOperands } from '../types.js';
2
2
  export type NumberKeys = 'equals' | 'doesNotEqual' | 'greaterThan' | 'lessThan' | 'greaterThanOrEqual' | 'lessThanOrEqual' | 'empty' | 'notEmpty';
3
3
  export declare const NumberOperands: Readonly<FilterOperands<number, NumberKeys>>;
4
- //# sourceMappingURL=number.d.ts.map
@@ -40,13 +40,13 @@ export const NumberOperands = Object.freeze({
40
40
  name: 'empty',
41
41
  label: 'Empty',
42
42
  unary: true,
43
- logic: target => !isDefined(target) || isNaN(target),
43
+ logic: (target) => !isDefined(target) || Number.isNaN(target),
44
44
  },
45
45
  notEmpty: {
46
46
  name: 'notEmpty',
47
47
  label: 'Not empty',
48
48
  unary: true,
49
- logic: target => isDefined(target) && !isNaN(target),
49
+ logic: (target) => isDefined(target) && !Number.isNaN(target),
50
50
  },
51
51
  });
52
52
  //# sourceMappingURL=number.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number.js","sourceRoot":"","sources":["../../../../src/operations/filter/operands/number.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAa5D,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAqC;IAC9E,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,KAAK,IAAI;KACzC;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,gBAAgB;QACvB,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,KAAK,IAAI;KACzC;IACD,WAAW,EAAE;QACX,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,cAAc;QACrB,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,GAAG,IAAI;KACvC;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,WAAW;QAClB,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,GAAG,IAAI;KACvC;IACD,kBAAkB,EAAE;QAClB,IAAI,EAAE,oBAAoB;QAC1B,KAAK,EAAE,uBAAuB;QAC9B,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,IAAI,IAAI;KACxC;IACD,eAAe,EAAE;QACf,IAAI,EAAE,iBAAiB;QACvB,KAAK,EAAE,oBAAoB;QAC3B,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,IAAI,IAAI;KACxC;IACD,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,OAAO;QACd,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;KAC9D;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,WAAW;QAClB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;KAC9D;CACF,CAAC,CAAC","sourcesContent":["import { isDefined } from '../../../internal/is-defined.js';\nimport type { FilterOperands } from '../types.js';\n\nexport type NumberKeys =\n | 'equals'\n | 'doesNotEqual'\n | 'greaterThan'\n | 'lessThan'\n | 'greaterThanOrEqual'\n | 'lessThanOrEqual'\n | 'empty'\n | 'notEmpty';\n\nexport const NumberOperands = Object.freeze<FilterOperands<number, NumberKeys>>({\n equals: {\n name: 'equals',\n label: 'Equals',\n unary: false,\n logic: (target, term) => target === term,\n },\n doesNotEqual: {\n name: 'doesNotEqual',\n label: 'Does not equal',\n unary: false,\n logic: (target, term) => target !== term,\n },\n greaterThan: {\n name: 'greaterThan',\n label: 'Greater than',\n unary: false,\n logic: (target, term) => target > term,\n },\n lessThan: {\n name: 'lessThan',\n label: 'Less than',\n unary: false,\n logic: (target, term) => target < term,\n },\n greaterThanOrEqual: {\n name: 'greaterThanOrEqual',\n label: 'Greater than or equal',\n unary: false,\n logic: (target, term) => target >= term,\n },\n lessThanOrEqual: {\n name: 'lessThanOrEqual',\n label: 'Less than or equal',\n unary: false,\n logic: (target, term) => target <= term,\n },\n empty: {\n name: 'empty',\n label: 'Empty',\n unary: true,\n logic: (target) => !isDefined(target) || Number.isNaN(target),\n },\n notEmpty: {\n name: 'notEmpty',\n label: 'Not empty',\n unary: true,\n logic: (target) => isDefined(target) && !Number.isNaN(target),\n },\n});\n"]}
@@ -1,4 +1,3 @@
1
1
  import type { FilterOperands } from '../types.js';
2
2
  export type StringKeys = 'contains' | 'doesNotContain' | 'startsWith' | 'endsWith' | 'equals' | 'doesNotEqual' | 'empty' | 'notEmpty';
3
3
  export declare const StringOperands: Readonly<FilterOperands<string, StringKeys>>;
4
- //# sourceMappingURL=string.d.ts.map
@@ -41,13 +41,13 @@ export const StringOperands = Object.freeze({
41
41
  name: 'empty',
42
42
  label: 'Empty',
43
43
  unary: true,
44
- logic: target => !isDefined(target) || target.length < 1,
44
+ logic: (target) => !isDefined(target) || target.length < 1,
45
45
  },
46
46
  notEmpty: {
47
47
  name: 'notEmpty',
48
48
  label: 'Not empty',
49
49
  unary: true,
50
- logic: target => isDefined(target) && target.length > 0,
50
+ logic: (target) => isDefined(target) && target.length > 0,
51
51
  },
52
52
  });
53
53
  //# sourceMappingURL=string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string.js","sourceRoot":"","sources":["../../../../src/operations/filter/operands/string.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAapE,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAqC;IAC9E,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,UAAU;QACjB,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,aAAc,EAAE,EAAE,CACtC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;KACpF;IACD,cAAc,EAAE;QACd,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,kBAAkB;QACzB,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,aAAc,EAAE,EAAE,CACtC,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;KACrF;IACD,UAAU,EAAE;QACV,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,aAAa;QACpB,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,aAAc,EAAE,EAAE,CAC5C,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;KAC5F;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,WAAW;QAClB,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,aAAc,EAAE,EAAE,CAC5C,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;KAC1F;IACD,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,EAAE,CAC3C,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC;KACpF;IAED,YAAY,EAAE;QACZ,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,gBAAgB;QACvB,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,EAAE,CAC3C,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC;KACpF;IAED,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,OAAO;QACd,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;KAC3D;IAED,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,WAAW;QAClB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;KAC1D;CACF,CAAC,CAAC","sourcesContent":["import { isDefined } from '../../../internal/is-defined.js';\nimport { normalizeCase } from '../../../internal/normalize-case.js';\nimport type { FilterOperands } from '../types.js';\n\nexport type StringKeys =\n | 'contains'\n | 'doesNotContain'\n | 'startsWith'\n | 'endsWith'\n | 'equals'\n | 'doesNotEqual'\n | 'empty'\n | 'notEmpty';\n\nexport const StringOperands = Object.freeze<FilterOperands<string, StringKeys>>({\n contains: {\n name: 'contains',\n label: 'Contains',\n unary: false,\n logic: (target, term, caseSensitive?) =>\n normalizeCase(target, caseSensitive).includes(normalizeCase(term, caseSensitive)),\n },\n doesNotContain: {\n name: 'doesNotContain',\n label: 'Does not contain',\n unary: false,\n logic: (target, term, caseSensitive?) =>\n !normalizeCase(target, caseSensitive).includes(normalizeCase(term, caseSensitive)),\n },\n startsWith: {\n name: 'startsWith',\n label: 'Starts with',\n unary: false,\n logic: (target, searchTerm, caseSensitive?) =>\n normalizeCase(target, caseSensitive).startsWith(normalizeCase(searchTerm, caseSensitive)),\n },\n endsWith: {\n name: 'endsWith',\n label: 'Ends with',\n unary: false,\n logic: (target, searchTerm, caseSensitive?) =>\n normalizeCase(target, caseSensitive).endsWith(normalizeCase(searchTerm, caseSensitive)),\n },\n equals: {\n name: 'equals',\n label: 'Equals',\n unary: false,\n logic: (target, searchTerm, caseSensitive) =>\n normalizeCase(target, caseSensitive) === normalizeCase(searchTerm, caseSensitive),\n },\n\n doesNotEqual: {\n name: 'doesNotEqual',\n label: 'Does not equal',\n unary: false,\n logic: (target, searchTerm, caseSensitive) =>\n normalizeCase(target, caseSensitive) !== normalizeCase(searchTerm, caseSensitive),\n },\n\n empty: {\n name: 'empty',\n label: 'Empty',\n unary: true,\n logic: (target) => !isDefined(target) || target.length < 1,\n },\n\n notEmpty: {\n name: 'notEmpty',\n label: 'Not empty',\n unary: true,\n logic: (target) => isDefined(target) && target.length > 0,\n },\n});\n"]}
@@ -1,5 +1,5 @@
1
- import { FilterExpressionTree } from './tree.js';
2
1
  import type { Keys } from '../../internal/types.js';
2
+ import { FilterExpressionTree } from './tree.js';
3
3
  import type { FilterExpression } from './types.js';
4
4
  export declare class FilterState<T> {
5
5
  protected state: Map<Keys<T>, FilterExpressionTree<T>>;
@@ -14,4 +14,3 @@ export declare class FilterState<T> {
14
14
  clear(): void;
15
15
  set(expression: FilterExpression<T>): void;
16
16
  }
17
- //# sourceMappingURL=state.d.ts.map
@@ -13,10 +13,10 @@ export class FilterState {
13
13
  return Array.from(this.state.values());
14
14
  }
15
15
  get ands() {
16
- return this.values.map(each => each.ands).flat();
16
+ return this.values.flatMap((each) => each.ands);
17
17
  }
18
18
  get ors() {
19
- return this.values.map(each => each.ors).flat();
19
+ return this.values.flatMap((each) => each.ors);
20
20
  }
21
21
  has(key) {
22
22
  return this.state.has(key);
@@ -31,9 +31,8 @@ export class FilterState {
31
31
  this.state.clear();
32
32
  }
33
33
  set(expression) {
34
- var _a;
35
34
  if (this.has(expression.key)) {
36
- (_a = this.get(expression.key)) === null || _a === void 0 ? void 0 : _a.add(expression);
35
+ this.get(expression.key)?.add(expression);
37
36
  return;
38
37
  }
39
38
  this.state.set(expression.key, new FilterExpressionTree(expression.key).add(expression));