angular-slickgrid 8.14.0 → 9.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 (419) hide show
  1. package/.gitbook.yaml +5 -0
  2. package/CHANGELOG.md +1691 -0
  3. package/CONTRIBUTING.md +17 -0
  4. package/README.md +13 -50
  5. package/angular.json +133 -0
  6. package/coverage/base.css +224 -0
  7. package/coverage/block-navigation.js +87 -0
  8. package/coverage/clover.xml +1620 -0
  9. package/coverage/coverage-final.json +9 -0
  10. package/coverage/favicon.png +0 -0
  11. package/coverage/index.html +176 -0
  12. package/coverage/library/components/angular-slickgrid.component.ts.html +5074 -0
  13. package/coverage/library/components/index.html +116 -0
  14. package/coverage/library/constants.ts.html +397 -0
  15. package/coverage/library/extensions/index.html +116 -0
  16. package/coverage/library/extensions/slickRowDetailView.ts.html +1261 -0
  17. package/coverage/library/index.html +116 -0
  18. package/coverage/library/modules/angular-slickgrid.module.ts.html +166 -0
  19. package/coverage/library/modules/index.html +116 -0
  20. package/coverage/library/services/angularUtil.service.ts.html +445 -0
  21. package/coverage/library/services/container.service.ts.html +163 -0
  22. package/coverage/library/services/index.html +161 -0
  23. package/coverage/library/services/translater.service.ts.html +199 -0
  24. package/coverage/library/services/utilities.ts.html +142 -0
  25. package/coverage/prettify.css +1 -0
  26. package/coverage/prettify.js +2 -0
  27. package/coverage/sort-arrow-sprite.png +0 -0
  28. package/coverage/sorter.js +196 -0
  29. package/dist/LICENSE +21 -0
  30. package/dist/README.md +142 -0
  31. package/{fesm2022 → dist/fesm2022}/angular-slickgrid.mjs +175 -198
  32. package/dist/fesm2022/angular-slickgrid.mjs.map +1 -0
  33. package/{i18n → dist/i18n}/en.json +2 -1
  34. package/{i18n → dist/i18n}/fr.json +2 -1
  35. package/{app/modules/angular-slickgrid → dist/library}/components/angular-slickgrid.component.d.ts +9 -9
  36. package/{app/modules/angular-slickgrid → dist/library}/extensions/slickRowDetailView.d.ts +4 -4
  37. package/{app/modules/angular-slickgrid → dist/library}/models/angularGridInstance.interface.d.ts +0 -2
  38. package/dist/library/models/index.d.ts +5 -0
  39. package/{app/modules/angular-slickgrid → dist/library}/models/rowDetailView.interface.d.ts +1 -1
  40. package/{app/modules/angular-slickgrid → dist/library}/modules/angular-slickgrid.module.d.ts +1 -1
  41. package/dist/public_api.d.ts +1 -0
  42. package/docs/README.md +5 -0
  43. package/docs/TOC.md +105 -0
  44. package/docs/backend-services/Custom-Backend-Service.md +50 -0
  45. package/docs/backend-services/GraphQL.md +276 -0
  46. package/docs/backend-services/OData.md +245 -0
  47. package/docs/backend-services/graphql/GraphQL-Filtering.md +156 -0
  48. package/docs/backend-services/graphql/GraphQL-JSON-Result.md +85 -0
  49. package/docs/backend-services/graphql/GraphQL-Pagination.md +77 -0
  50. package/docs/backend-services/graphql/GraphQL-Sorting.md +78 -0
  51. package/docs/column-functionalities/cell-menu.md +212 -0
  52. package/docs/column-functionalities/editors/autocomplete-editor.md +466 -0
  53. package/docs/column-functionalities/editors/date-editor-flatpickr.md +71 -0
  54. package/docs/column-functionalities/editors/date-editor-vanilla-calendar.md +91 -0
  55. package/docs/column-functionalities/editors/longtext-editor-textarea.md +80 -0
  56. package/docs/column-functionalities/editors/select-dropdown-editor.md +227 -0
  57. package/docs/column-functionalities/editors.md +604 -0
  58. package/docs/column-functionalities/filters/autocomplete-filter.md +183 -0
  59. package/docs/column-functionalities/filters/compound-filters.md +234 -0
  60. package/docs/column-functionalities/filters/custom-filter.md +117 -0
  61. package/docs/column-functionalities/filters/filter-intro.md +81 -0
  62. package/docs/column-functionalities/filters/input-filter.md +260 -0
  63. package/docs/column-functionalities/filters/range-filters.md +188 -0
  64. package/docs/column-functionalities/filters/select-filter.md +695 -0
  65. package/docs/column-functionalities/filters/single-search-filter.md +77 -0
  66. package/docs/column-functionalities/filters/styling-filled-filters.md +45 -0
  67. package/docs/column-functionalities/formatters.md +325 -0
  68. package/docs/column-functionalities/sorting.md +200 -0
  69. package/docs/developer-guides/csp-compliance.md +64 -0
  70. package/docs/events/Available-Events.md +223 -0
  71. package/docs/events/Grid-&-DataView-Events.md +211 -0
  72. package/docs/getting-started/quick-start.md +230 -0
  73. package/docs/getting-started/troubleshooting.md +80 -0
  74. package/docs/grid-functionalities/Column-Picker.md +22 -0
  75. package/docs/grid-functionalities/Composite-Editor-Modal.md +627 -0
  76. package/docs/grid-functionalities/Context-Menu.md +226 -0
  77. package/docs/grid-functionalities/Custom-Footer.md +80 -0
  78. package/docs/grid-functionalities/Custom-Tooltip-(plugin).md +258 -0
  79. package/docs/grid-functionalities/Export-to-Excel.md +457 -0
  80. package/docs/grid-functionalities/Export-to-Text-File.md +165 -0
  81. package/docs/grid-functionalities/FAQ.md +53 -0
  82. package/docs/grid-functionalities/Global-Options.md +29 -0
  83. package/docs/grid-functionalities/Grid-Auto-Resize.md +218 -0
  84. package/docs/grid-functionalities/Grid-Menu.md +134 -0
  85. package/docs/grid-functionalities/Grid-State-&-Preset.md +245 -0
  86. package/docs/grid-functionalities/Header-Menu-&-Header-Buttons.md +125 -0
  87. package/docs/grid-functionalities/Resize-by-Cell-Content.md +138 -0
  88. package/docs/grid-functionalities/Row-Selection.md +247 -0
  89. package/docs/grid-functionalities/Row-based-edit.md +71 -0
  90. package/docs/grid-functionalities/add-update-highlight.md +258 -0
  91. package/docs/grid-functionalities/column-row-spanning.md +74 -0
  92. package/docs/grid-functionalities/dynamic-item-metadata.md +124 -0
  93. package/docs/grid-functionalities/excel-copy-buffer.md +145 -0
  94. package/docs/grid-functionalities/frozen-columns-rows.md +164 -0
  95. package/docs/grid-functionalities/grouping-and-aggregators.md +269 -0
  96. package/docs/grid-functionalities/header-footer-slots.md +22 -0
  97. package/docs/grid-functionalities/infinite-scroll.md +150 -0
  98. package/docs/grid-functionalities/providing-grid-data.md +61 -0
  99. package/docs/grid-functionalities/row-detail.md +530 -0
  100. package/docs/grid-functionalities/tree-data-grid.md +391 -0
  101. package/docs/localization/Localization---Component-Sample.md +87 -0
  102. package/docs/localization/Localization-with-Custom-Locales.md +66 -0
  103. package/docs/localization/Localization-with-ngx-translate.md +148 -0
  104. package/docs/migrations/migration-to-2.x.md +304 -0
  105. package/docs/migrations/migration-to-3.x.md +295 -0
  106. package/docs/migrations/migration-to-4.x.md +83 -0
  107. package/docs/migrations/migration-to-5.x.md +160 -0
  108. package/docs/migrations/migration-to-6.x.md +128 -0
  109. package/docs/migrations/migration-to-7.x.md +294 -0
  110. package/docs/migrations/migration-to-8.x.md +316 -0
  111. package/docs/migrations/migration-to-9.x.md +219 -0
  112. package/docs/slick-grid-dataview-objects/slickgrid-dataview-objects.md +79 -0
  113. package/docs/styling/dark-mode.md +100 -0
  114. package/docs/styling/styling.md +250 -0
  115. package/docs/testing/testing-patterns.md +73 -0
  116. package/eslint.config.mjs +60 -0
  117. package/ng-package.json +10 -0
  118. package/package.json +24 -48
  119. package/src/assets/angular-logo.png +0 -0
  120. package/src/assets/angular-logo2.png +0 -0
  121. package/src/assets/data/collection_100_numbers.json +12 -0
  122. package/src/assets/data/collection_500_numbers.json +52 -0
  123. package/src/assets/data/countries.json +245 -0
  124. package/src/assets/data/country_names.json +245 -0
  125. package/src/assets/data/customers_100.json +102 -0
  126. package/src/assets/data/users.csv +5 -0
  127. package/src/assets/i18n/en.json +102 -0
  128. package/src/assets/i18n/fr.json +103 -0
  129. package/src/demos/app-routing.module.ts +108 -0
  130. package/src/demos/app.component.html +187 -0
  131. package/src/demos/app.component.scss +79 -0
  132. package/src/demos/app.component.ts +11 -0
  133. package/src/demos/app.module.ts +196 -0
  134. package/src/demos/environments/environment.dev.ts +3 -0
  135. package/src/demos/environments/environment.prod.ts +3 -0
  136. package/src/demos/environments/environment.ts +8 -0
  137. package/src/demos/examples/custom-angularComponentEditor.ts +187 -0
  138. package/src/demos/examples/custom-angularComponentFilter.ts +123 -0
  139. package/src/demos/examples/custom-buttonFormatter.component.ts +13 -0
  140. package/src/demos/examples/custom-inputEditor.ts +132 -0
  141. package/src/demos/examples/custom-inputFilter.ts +134 -0
  142. package/src/demos/examples/custom-titleFormatter.component.ts +9 -0
  143. package/src/demos/examples/data/collection_100_numbers.json +12 -0
  144. package/src/demos/examples/data/collection_500_numbers.json +52 -0
  145. package/src/demos/examples/data/countries.json +245 -0
  146. package/src/demos/examples/data/country_names.json +245 -0
  147. package/src/demos/examples/data/customers_100.json +102 -0
  148. package/src/demos/examples/data/users.csv +5 -0
  149. package/src/demos/examples/editor-ng-select.component.ts +38 -0
  150. package/src/demos/examples/example01.component.html +48 -0
  151. package/src/demos/examples/example01.component.ts +109 -0
  152. package/src/demos/examples/example02.component.html +45 -0
  153. package/src/demos/examples/example02.component.ts +218 -0
  154. package/src/demos/examples/example03.component.html +118 -0
  155. package/src/demos/examples/example03.component.ts +694 -0
  156. package/src/demos/examples/example04.component.html +87 -0
  157. package/src/demos/examples/example04.component.ts +326 -0
  158. package/src/demos/examples/example05.component.html +151 -0
  159. package/src/demos/examples/example05.component.ts +474 -0
  160. package/src/demos/examples/example06.component.html +163 -0
  161. package/src/demos/examples/example06.component.ts +446 -0
  162. package/src/demos/examples/example07.component.html +56 -0
  163. package/src/demos/examples/example07.component.scss +10 -0
  164. package/src/demos/examples/example07.component.ts +216 -0
  165. package/src/demos/examples/example08.component.html +51 -0
  166. package/src/demos/examples/example08.component.scss +23 -0
  167. package/src/demos/examples/example08.component.ts +195 -0
  168. package/src/demos/examples/example09.component.html +55 -0
  169. package/src/demos/examples/example09.component.scss +22 -0
  170. package/src/demos/examples/example09.component.ts +302 -0
  171. package/src/demos/examples/example10.component.html +103 -0
  172. package/src/demos/examples/example10.component.ts +309 -0
  173. package/src/demos/examples/example11.component.html +91 -0
  174. package/src/demos/examples/example11.component.ts +276 -0
  175. package/src/demos/examples/example12.component.html +98 -0
  176. package/src/demos/examples/example12.component.ts +317 -0
  177. package/src/demos/examples/example13.component.html +96 -0
  178. package/src/demos/examples/example13.component.ts +370 -0
  179. package/src/demos/examples/example14.component.html +50 -0
  180. package/src/demos/examples/example14.component.scss +11 -0
  181. package/src/demos/examples/example14.component.ts +156 -0
  182. package/src/demos/examples/example15.component.html +56 -0
  183. package/src/demos/examples/example15.component.ts +304 -0
  184. package/src/demos/examples/example16.component.html +77 -0
  185. package/src/demos/examples/example16.component.ts +277 -0
  186. package/src/demos/examples/example17.component.html +50 -0
  187. package/src/demos/examples/example17.component.ts +109 -0
  188. package/src/demos/examples/example18.component.html +132 -0
  189. package/src/demos/examples/example18.component.ts +445 -0
  190. package/src/demos/examples/example19-rowdetail.component.html +40 -0
  191. package/src/demos/examples/example19-rowdetail.component.ts +54 -0
  192. package/src/demos/examples/example19.component.html +79 -0
  193. package/src/demos/examples/example19.component.ts +316 -0
  194. package/src/demos/examples/example20.component.html +76 -0
  195. package/src/demos/examples/example20.component.scss +11 -0
  196. package/src/demos/examples/example20.component.ts +341 -0
  197. package/src/demos/examples/example21.component.html +86 -0
  198. package/src/demos/examples/example21.component.scss +16 -0
  199. package/src/demos/examples/example21.component.ts +140 -0
  200. package/src/demos/examples/example22.component.html +41 -0
  201. package/src/demos/examples/example22.component.ts +117 -0
  202. package/src/demos/examples/example23.component.html +111 -0
  203. package/src/demos/examples/example23.component.ts +323 -0
  204. package/src/demos/examples/example24.component.html +120 -0
  205. package/src/demos/examples/example24.component.scss +62 -0
  206. package/src/demos/examples/example24.component.ts +641 -0
  207. package/src/demos/examples/example25.component.html +60 -0
  208. package/src/demos/examples/example25.component.scss +8 -0
  209. package/src/demos/examples/example25.component.ts +255 -0
  210. package/src/demos/examples/example26.component.html +98 -0
  211. package/src/demos/examples/example26.component.scss +42 -0
  212. package/src/demos/examples/example26.component.ts +383 -0
  213. package/src/demos/examples/example27.component.html +138 -0
  214. package/src/demos/examples/example27.component.scss +10 -0
  215. package/src/demos/examples/example27.component.ts +369 -0
  216. package/src/demos/examples/example28.component.html +143 -0
  217. package/src/demos/examples/example28.component.scss +54 -0
  218. package/src/demos/examples/example28.component.ts +453 -0
  219. package/src/demos/examples/example29.component.html +30 -0
  220. package/src/demos/examples/example29.component.ts +70 -0
  221. package/src/demos/examples/example30.component.html +116 -0
  222. package/src/demos/examples/example30.component.scss +20 -0
  223. package/src/demos/examples/example30.component.ts +1070 -0
  224. package/src/demos/examples/example32.component.html +77 -0
  225. package/src/demos/examples/example32.component.scss +8 -0
  226. package/src/demos/examples/example32.component.ts +905 -0
  227. package/src/demos/examples/example33.component.html +50 -0
  228. package/src/demos/examples/example33.component.scss +46 -0
  229. package/src/demos/examples/example33.component.ts +571 -0
  230. package/src/demos/examples/example34.component.html +82 -0
  231. package/src/demos/examples/example34.component.scss +77 -0
  232. package/src/demos/examples/example34.component.ts +434 -0
  233. package/src/demos/examples/example35.component.html +77 -0
  234. package/src/demos/examples/example35.component.scss +18 -0
  235. package/src/demos/examples/example35.component.ts +264 -0
  236. package/src/demos/examples/example36.component.html +56 -0
  237. package/src/demos/examples/example36.component.scss +26 -0
  238. package/src/demos/examples/example36.component.ts +504 -0
  239. package/src/demos/examples/example37.component.html +30 -0
  240. package/src/demos/examples/example37.component.ts +123 -0
  241. package/src/demos/examples/example38.component.html +104 -0
  242. package/src/demos/examples/example38.component.scss +8 -0
  243. package/src/demos/examples/example38.component.ts +420 -0
  244. package/src/demos/examples/example39.component.html +112 -0
  245. package/src/demos/examples/example39.component.scss +8 -0
  246. package/src/demos/examples/example39.component.ts +371 -0
  247. package/src/demos/examples/example40.component.html +76 -0
  248. package/src/demos/examples/example40.component.ts +226 -0
  249. package/src/demos/examples/example41.component.html +50 -0
  250. package/src/demos/examples/example41.component.scss +42 -0
  251. package/src/demos/examples/example41.component.ts +229 -0
  252. package/src/demos/examples/example42.component.html +47 -0
  253. package/src/demos/examples/example42.component.ts +203 -0
  254. package/src/demos/examples/example43.component.html +94 -0
  255. package/src/demos/examples/example43.component.scss +30 -0
  256. package/src/demos/examples/example43.component.ts +449 -0
  257. package/src/demos/examples/example44.component.html +78 -0
  258. package/src/demos/examples/example44.component.scss +50 -0
  259. package/src/demos/examples/example44.component.ts +375 -0
  260. package/src/demos/examples/example45-detail.component.html +15 -0
  261. package/src/demos/examples/example45-detail.component.ts +97 -0
  262. package/src/demos/examples/example45.component.html +110 -0
  263. package/src/demos/examples/example45.component.scss +50 -0
  264. package/src/demos/examples/example45.component.ts +243 -0
  265. package/src/demos/examples/filter-ng-select.component.ts +33 -0
  266. package/src/demos/examples/grid-custom-pager.component.html +60 -0
  267. package/src/demos/examples/grid-custom-pager.component.scss +57 -0
  268. package/src/demos/examples/grid-custom-pager.component.ts +107 -0
  269. package/src/demos/examples/grid-remote.component.html +44 -0
  270. package/src/demos/examples/grid-remote.component.ts +164 -0
  271. package/src/demos/examples/home.component.html +39 -0
  272. package/src/demos/examples/home.component.ts +10 -0
  273. package/src/demos/examples/jsonp.ts +89 -0
  274. package/src/demos/examples/rowdetail-preload.component.ts +10 -0
  275. package/src/demos/examples/swt-common-grid-pagination.component.ts +160 -0
  276. package/src/demos/examples/swt-common-grid-test.component.html +37 -0
  277. package/src/demos/examples/swt-common-grid-test.component.ts +214 -0
  278. package/src/demos/examples/swt-common-grid.component.ts +436 -0
  279. package/src/demos/examples/swt-logger.service.ts +173 -0
  280. package/src/demos/examples/utilities.ts +9 -0
  281. package/src/favicon.ico +0 -0
  282. package/src/index.html +17 -0
  283. package/src/library/components/__tests__/angular-slickgrid.component.spec.ts +2638 -0
  284. package/src/library/components/angular-slickgrid.component.html +5 -0
  285. package/src/library/components/angular-slickgrid.component.ts +1662 -0
  286. package/src/library/constants.ts +105 -0
  287. package/src/library/extensions/__tests__/slickRowDetailView.spec.ts +751 -0
  288. package/src/library/extensions/index.ts +1 -0
  289. package/src/library/extensions/slickRowDetailView.ts +395 -0
  290. package/src/library/global-grid-options.ts +273 -0
  291. package/src/library/index.ts +11 -0
  292. package/src/library/models/angularComponentOutput.interface.ts +6 -0
  293. package/src/library/models/angularGridInstance.interface.ts +76 -0
  294. package/src/library/models/externalTestingDependencies.interface.ts +37 -0
  295. package/src/library/models/gridOption.interface.ts +15 -0
  296. package/src/library/models/index.ts +5 -0
  297. package/src/library/models/rowDetailView.interface.ts +16 -0
  298. package/src/library/modules/angular-slickgrid.module.spec.ts +25 -0
  299. package/src/library/modules/angular-slickgrid.module.ts +27 -0
  300. package/src/library/services/__tests__/angularUtilService.spec.ts +156 -0
  301. package/src/library/services/__tests__/container.service.spec.ts +25 -0
  302. package/src/library/services/__tests__/translater.service.spec.ts +43 -0
  303. package/src/library/services/__tests__/utilities.spec.ts +22 -0
  304. package/src/library/services/angularUtil.service.ts +120 -0
  305. package/src/library/services/container.service.ts +26 -0
  306. package/src/library/services/index.ts +4 -0
  307. package/src/library/services/translater.service.ts +38 -0
  308. package/src/library/services/utilities.ts +19 -0
  309. package/src/library/slickgrid-config.ts +10 -0
  310. package/src/main.ts +13 -0
  311. package/src/public_api.ts +1 -0
  312. package/src/styles.scss +178 -0
  313. package/test/cypress/e2e/example01.cy.ts +367 -0
  314. package/test/cypress/e2e/example02.cy.ts +60 -0
  315. package/test/cypress/e2e/example03.cy.ts +268 -0
  316. package/test/cypress/e2e/example04.cy.ts +254 -0
  317. package/test/cypress/e2e/example05.cy.ts +804 -0
  318. package/test/cypress/e2e/example06.cy.ts +890 -0
  319. package/test/cypress/e2e/example07.cy.ts +384 -0
  320. package/test/cypress/e2e/example08.cy.ts +190 -0
  321. package/test/cypress/e2e/example09.cy.ts +392 -0
  322. package/test/cypress/e2e/example10.cy.ts +650 -0
  323. package/test/cypress/e2e/example11.cy.ts +86 -0
  324. package/test/cypress/e2e/example12.cy.ts +269 -0
  325. package/test/cypress/e2e/example13.cy.ts +246 -0
  326. package/test/cypress/e2e/example14.cy.ts +122 -0
  327. package/test/cypress/e2e/example15.cy.ts +598 -0
  328. package/test/cypress/e2e/example16.cy.ts +427 -0
  329. package/test/cypress/e2e/example17.cy.ts +83 -0
  330. package/test/cypress/e2e/example18.cy.ts +431 -0
  331. package/test/cypress/e2e/example19.cy.ts +263 -0
  332. package/test/cypress/e2e/example20.cy.ts +264 -0
  333. package/test/cypress/e2e/example21.cy.ts +77 -0
  334. package/test/cypress/e2e/example22.cy.ts +94 -0
  335. package/test/cypress/e2e/example23.cy.ts +259 -0
  336. package/test/cypress/e2e/example24.cy.ts +707 -0
  337. package/test/cypress/e2e/example25.cy.ts +193 -0
  338. package/test/cypress/e2e/example26.cy.ts +111 -0
  339. package/test/cypress/e2e/example27.cy.ts +261 -0
  340. package/test/cypress/e2e/example28.cy.ts +740 -0
  341. package/test/cypress/e2e/example29.cy.ts +30 -0
  342. package/test/cypress/e2e/example30.cy.ts +757 -0
  343. package/test/cypress/e2e/example31.cy.ts +69 -0
  344. package/test/cypress/e2e/example32.cy.ts +272 -0
  345. package/test/cypress/e2e/example33.cy.ts +278 -0
  346. package/test/cypress/e2e/example34.cy.ts +84 -0
  347. package/test/cypress/e2e/example35.cy.ts +178 -0
  348. package/test/cypress/e2e/example36.cy.ts +219 -0
  349. package/test/cypress/e2e/example37.cy.ts +52 -0
  350. package/test/cypress/e2e/example38.cy.ts +160 -0
  351. package/test/cypress/e2e/example39.cy.ts +150 -0
  352. package/test/cypress/e2e/example40.cy.ts +126 -0
  353. package/test/cypress/e2e/example41.cy.ts +90 -0
  354. package/test/cypress/e2e/example42.cy.ts +82 -0
  355. package/test/cypress/e2e/example43.cy.ts +482 -0
  356. package/test/cypress/e2e/example44.cy.ts +458 -0
  357. package/test/cypress/e2e/example45.cy.ts +455 -0
  358. package/test/cypress/e2e/home.cy.ts +7 -0
  359. package/test/cypress/fixtures/example.json +5 -0
  360. package/test/cypress/plugins/index.ts +17 -0
  361. package/test/cypress/plugins/utilities.ts +28 -0
  362. package/test/cypress/support/commands.ts +88 -0
  363. package/test/cypress/support/common.ts +47 -0
  364. package/test/cypress/support/drag.ts +101 -0
  365. package/test/cypress/support/index.ts +20 -0
  366. package/test/cypress/tsconfig.json +9 -0
  367. package/test/cypress.config.ts +34 -0
  368. package/test/mockSlickEvent.ts +77 -0
  369. package/test/rxjsResourceStub.ts +69 -0
  370. package/test/test-setup.ts +6 -0
  371. package/test/translateServiceStub.ts +230 -0
  372. package/test/translaterServiceStub.ts +239 -0
  373. package/test/tsconfig.json +17 -0
  374. package/test/vitest-global-mocks.ts +41 -0
  375. package/test/vitest-global-setup.ts +3 -0
  376. package/test/vitest-pretest.ts +5 -0
  377. package/tsconfig.app.json +14 -0
  378. package/tsconfig.json +31 -0
  379. package/tsconfig.spec.json +11 -0
  380. package/types/sortablejs.d.ts +4 -0
  381. package/vite.config.mts +51 -0
  382. package/app/modules/angular-slickgrid/models/index.d.ts +0 -5
  383. package/esm2022/angular-slickgrid.mjs +0 -5
  384. package/esm2022/app/modules/angular-slickgrid/components/angular-slickgrid.component.mjs +0 -1407
  385. package/esm2022/app/modules/angular-slickgrid/constants.mjs +0 -96
  386. package/esm2022/app/modules/angular-slickgrid/extensions/index.mjs +0 -2
  387. package/esm2022/app/modules/angular-slickgrid/extensions/slickRowDetailView.mjs +0 -301
  388. package/esm2022/app/modules/angular-slickgrid/global-grid-options.mjs +0 -263
  389. package/esm2022/app/modules/angular-slickgrid/index.mjs +0 -8
  390. package/esm2022/app/modules/angular-slickgrid/models/angularComponentOutput.interface.mjs +0 -2
  391. package/esm2022/app/modules/angular-slickgrid/models/angularGridInstance.interface.mjs +0 -2
  392. package/esm2022/app/modules/angular-slickgrid/models/externalTestingDependencies.interface.mjs +0 -2
  393. package/esm2022/app/modules/angular-slickgrid/models/gridOption.interface.mjs +0 -2
  394. package/esm2022/app/modules/angular-slickgrid/models/index.mjs +0 -6
  395. package/esm2022/app/modules/angular-slickgrid/models/rowDetailView.interface.mjs +0 -2
  396. package/esm2022/app/modules/angular-slickgrid/modules/angular-slickgrid.module.mjs +0 -32
  397. package/esm2022/app/modules/angular-slickgrid/services/angularUtil.service.mjs +0 -88
  398. package/esm2022/app/modules/angular-slickgrid/services/container.service.mjs +0 -27
  399. package/esm2022/app/modules/angular-slickgrid/services/index.mjs +0 -5
  400. package/esm2022/app/modules/angular-slickgrid/services/translater.service.mjs +0 -45
  401. package/esm2022/app/modules/angular-slickgrid/services/utilities.mjs +0 -19
  402. package/esm2022/app/modules/angular-slickgrid/slickgrid-config.mjs +0 -8
  403. package/esm2022/public_api.mjs +0 -2
  404. package/fesm2022/angular-slickgrid.mjs.map +0 -1
  405. package/public_api.d.ts +0 -1
  406. /package/{index.d.ts → dist/index.d.ts} +0 -0
  407. /package/{app/modules/angular-slickgrid → dist/library}/constants.d.ts +0 -0
  408. /package/{app/modules/angular-slickgrid → dist/library}/extensions/index.d.ts +0 -0
  409. /package/{app/modules/angular-slickgrid → dist/library}/global-grid-options.d.ts +0 -0
  410. /package/{app/modules/angular-slickgrid → dist/library}/index.d.ts +0 -0
  411. /package/{app/modules/angular-slickgrid → dist/library}/models/angularComponentOutput.interface.d.ts +0 -0
  412. /package/{app/modules/angular-slickgrid → dist/library}/models/externalTestingDependencies.interface.d.ts +0 -0
  413. /package/{app/modules/angular-slickgrid → dist/library}/models/gridOption.interface.d.ts +0 -0
  414. /package/{app/modules/angular-slickgrid → dist/library}/services/angularUtil.service.d.ts +0 -0
  415. /package/{app/modules/angular-slickgrid → dist/library}/services/container.service.d.ts +0 -0
  416. /package/{app/modules/angular-slickgrid → dist/library}/services/index.d.ts +0 -0
  417. /package/{app/modules/angular-slickgrid → dist/library}/services/translater.service.d.ts +0 -0
  418. /package/{app/modules/angular-slickgrid → dist/library}/services/utilities.d.ts +0 -0
  419. /package/{app/modules/angular-slickgrid → dist/library}/slickgrid-config.d.ts +0 -0
@@ -0,0 +1,60 @@
1
+ <div id="demo-container" class="container-fluid">
2
+ <h2>
3
+ Example 25: GraphQL Basic API without Pagination
4
+ <span class="float-end">
5
+ <a
6
+ style="font-size: 18px"
7
+ target="_blank"
8
+ href="https://github.com/ghiscoding/slickgrid-universal/blob/master/frameworks/angular-slickgrid/src/demos/examples/grid-graphql-nopage.component.ts"
9
+ >
10
+ <span class="mdi mdi-link-variant"></span> code
11
+ </a>
12
+ </span>
13
+ </h2>
14
+ <div class="subtitle row">
15
+ <div class="col-12">
16
+ Use basic GraphQL query with any external public APIs (<a
17
+ href="https://ghiscoding.gitbook.io/angular-slickgrid/backend-services/graphql"
18
+ target="_blank"
19
+ >Wiki docs</a
20
+ >).
21
+ <ul>
22
+ <li>
23
+ This Examples uses a Public GraphQL API that you can find at this link
24
+ <a href="https://countries.trevorblades.com/" target="_blank">https://countries.trevorblades.com/</a>
25
+ </li>
26
+ <li>Compare to the regular and default GraphQL implementation, you will find the following differences</li>
27
+ <ul>
28
+ <li>
29
+ There are no Pagination and we only use GraphQL <b>once</b> to load the data, then we use the grid as a regular local in-memory
30
+ grid
31
+ </li>
32
+ <li>
33
+ We enabled the following 2 flags "useLocalFiltering" and "useLocalSorting" to use regular (in memory) DataView filtering/sorting
34
+ </li>
35
+ </ul>
36
+ <li>
37
+ NOTE - This Example calls multiple GraphQL queries, this is <b>ONLY</b> for demo purposes, you would typically only call 1 query
38
+ (which is what GraphQL is good at)
39
+ </li>
40
+ <li>
41
+ This example is mainly to demo the use of GraphqlService to build the query and retrieve the data but also to demo how to mix that
42
+ with local (in-memory) Filtering/Sorting strategies
43
+ </li>
44
+ </ul>
45
+ </div>
46
+ </div>
47
+
48
+ <div class="row">
49
+ <div class="col-xs-6 col-sm-3">
50
+ <div [class]="status.class" role="alert" data-test="status">
51
+ <strong>Status: </strong> {{ status.text }}
52
+ <span [hidden]="!processing">
53
+ <i class="mdi mdi-sync mdi-spin-1s"></i>
54
+ </span>
55
+ </div>
56
+ </div>
57
+ </div>
58
+
59
+ <angular-slickgrid gridId="grid25" [columns]="columnDefinitions" [options]="gridOptions" [dataset]="dataset"> </angular-slickgrid>
60
+ </div>
@@ -0,0 +1,8 @@
1
+ // @use '@slickgrid-universal/common/dist/styles/sass/slickgrid-theme-bootstrap.scss' with (
2
+ // $slick-preheader-font-size: 18px,
3
+ // $slick-preheader-border-right: 1px solid lightgrey,
4
+ // );
5
+
6
+ .alert {
7
+ padding: 8px;
8
+ }
@@ -0,0 +1,255 @@
1
+ import { Component, OnInit, ViewEncapsulation } from '@angular/core';
2
+ import { HttpClient } from '@angular/common/http';
3
+ import { GraphqlService, GraphqlResult, GraphqlServiceApi } from '@slickgrid-universal/graphql';
4
+
5
+ import {
6
+ AngularGridInstance,
7
+ Column,
8
+ Filters,
9
+ Formatters,
10
+ GridOption,
11
+ Metrics,
12
+ type MultipleSelectOption,
13
+ OperatorType,
14
+ } from '../../library';
15
+ import { Observable } from 'rxjs';
16
+
17
+ const COUNTRIES_API = 'https://countries.trevorblades.com/';
18
+
19
+ export interface Country {
20
+ countryCode: string;
21
+ countryName: string;
22
+ countryNative: string;
23
+ countryPhone: number;
24
+ countryCurrency: string;
25
+ countryEmoji: string;
26
+ continentCode: string;
27
+ continentName: string;
28
+ languageCode: string;
29
+ languageName: string;
30
+ languageNative: string;
31
+ }
32
+
33
+ @Component({
34
+ templateUrl: './example25.component.html',
35
+ styleUrls: ['./example25.component.scss'],
36
+ encapsulation: ViewEncapsulation.None,
37
+ standalone: false,
38
+ })
39
+ export class Example25Component implements OnInit {
40
+ angularGrid!: AngularGridInstance;
41
+ columnDefinitions!: Column[];
42
+ gridOptions!: GridOption;
43
+ dataset = [];
44
+ metrics!: Metrics;
45
+
46
+ graphqlQuery = '';
47
+ processing = true;
48
+ status = { text: 'processing...', class: 'alert alert-danger' };
49
+ isDataLoaded = false;
50
+
51
+ constructor(private http: HttpClient) {}
52
+
53
+ ngOnInit(): void {
54
+ this.columnDefinitions = [
55
+ { id: 'countryCode', field: 'code', name: 'Code', maxWidth: 90, sortable: true, filterable: true, columnGroup: 'Country' },
56
+ { id: 'countryName', field: 'name', name: 'Name', width: 60, sortable: true, filterable: true, columnGroup: 'Country' },
57
+ { id: 'countryNative', field: 'native', name: 'Native', width: 60, sortable: true, filterable: true, columnGroup: 'Country' },
58
+ {
59
+ id: 'countryPhone',
60
+ field: 'phone',
61
+ name: 'Phone Area Code',
62
+ maxWidth: 110,
63
+ sortable: true,
64
+ filterable: true,
65
+ columnGroup: 'Country',
66
+ },
67
+ {
68
+ id: 'countryCurrency',
69
+ field: 'currency',
70
+ name: 'Currency',
71
+ maxWidth: 90,
72
+ sortable: true,
73
+ filterable: true,
74
+ columnGroup: 'Country',
75
+ },
76
+ { id: 'countryEmoji', field: 'emoji', name: 'Emoji', maxWidth: 90, sortable: true, columnGroup: 'Country' },
77
+ {
78
+ id: 'languageName',
79
+ field: 'languages.name',
80
+ name: 'Names',
81
+ width: 60,
82
+ formatter: Formatters.arrayObjectToCsv,
83
+ columnGroup: 'Language',
84
+ params: { propertyNames: ['name'], useFormatterOuputToFilter: true },
85
+ filterable: true,
86
+ // this Filter is a bit more tricky than others since the values are an array of objects
87
+ // what we can do is use the Formatter to search from the CSV string coming from the Formatter (with "useFormatterOuputToFilter: true")
88
+ // we also need to use the Operator IN_CONTAINS
89
+ filter: {
90
+ model: Filters.multipleSelect,
91
+ collectionAsync: this.getLanguages(),
92
+ operator: OperatorType.inContains,
93
+ collectionOptions: {
94
+ addBlankEntry: true,
95
+ // the data is not at the root of the array, so we must tell the Select Filter where to pull the data
96
+ collectionInsideObjectProperty: 'data.languages',
97
+ },
98
+ collectionFilterBy: [
99
+ // filter out any empty values
100
+ { property: 'name', value: '', operator: 'NE' },
101
+ { property: 'name', value: null, operator: 'NE' },
102
+ ],
103
+ collectionSortBy: { property: 'name' },
104
+ customStructure: { value: 'name', label: 'name' },
105
+ options: { filter: true } as MultipleSelectOption,
106
+ },
107
+ },
108
+ {
109
+ id: 'languageNative',
110
+ field: 'languages.native',
111
+ name: 'Native',
112
+ width: 60,
113
+ formatter: Formatters.arrayObjectToCsv,
114
+ params: { propertyNames: ['native'], useFormatterOuputToFilter: true },
115
+ columnGroup: 'Language',
116
+ filterable: true,
117
+ filter: {
118
+ model: Filters.multipleSelect,
119
+ collectionAsync: this.getLanguages(),
120
+ operator: OperatorType.inContains,
121
+ collectionOptions: {
122
+ addBlankEntry: true,
123
+ // the data is not at the root of the array, so we must tell the Select Filter where to pull the data
124
+ collectionInsideObjectProperty: 'data.languages',
125
+ },
126
+ collectionFilterBy: [
127
+ // filter out any empty values
128
+ { property: 'native', value: '', operator: 'NE' },
129
+ { property: 'native', value: null, operator: 'NE' },
130
+ ],
131
+ collectionSortBy: { property: 'native' },
132
+ customStructure: { value: 'native', label: 'native' },
133
+ options: { filter: true } as MultipleSelectOption,
134
+ },
135
+ },
136
+ {
137
+ id: 'languageCode',
138
+ field: 'languages.code',
139
+ name: 'Codes',
140
+ maxWidth: 100,
141
+ formatter: Formatters.arrayObjectToCsv,
142
+ params: { propertyNames: ['code'], useFormatterOuputToFilter: true },
143
+ columnGroup: 'Language',
144
+ filterable: true,
145
+ },
146
+ {
147
+ id: 'continentName',
148
+ field: 'continent.name',
149
+ name: 'Name',
150
+ width: 60,
151
+ sortable: true,
152
+ filterable: true,
153
+ formatter: Formatters.complexObject,
154
+ columnGroup: 'Continent',
155
+ },
156
+ {
157
+ id: 'continentCode',
158
+ field: 'continent.code',
159
+ name: 'Code',
160
+ maxWidth: 90,
161
+ sortable: true,
162
+ filterable: true,
163
+ filter: {
164
+ model: Filters.singleSelect,
165
+ collectionAsync: this.getContinents(),
166
+ collectionOptions: {
167
+ // the data is not at the root of the array, so we must tell the Select Filter where to pull the data
168
+ collectionInsideObjectProperty: 'data.continents',
169
+ addBlankEntry: true,
170
+ separatorBetweenTextLabels: ': ',
171
+ },
172
+ customStructure: {
173
+ value: 'code',
174
+ label: 'code',
175
+ labelSuffix: 'name',
176
+ },
177
+ },
178
+ formatter: Formatters.complexObject,
179
+ columnGroup: 'Continent',
180
+ },
181
+ ];
182
+
183
+ this.gridOptions = {
184
+ autoResize: {
185
+ container: '#demo-container',
186
+ rightPadding: 10,
187
+ },
188
+ enableFiltering: true,
189
+ enableCellNavigation: true,
190
+ enablePagination: false,
191
+ createPreHeaderPanel: true,
192
+ showPreHeaderPanel: true,
193
+ preHeaderPanelHeight: 28,
194
+ datasetIdPropertyName: 'code',
195
+ showCustomFooter: true, // display some metrics in the bottom custom footer
196
+ backendServiceApi: {
197
+ // use the GraphQL Service to build the query but use local (in memory) Filtering/Sorting strategies
198
+ // the useLocalFiltering/useLocalSorting flags can be enabled independently
199
+ service: new GraphqlService(),
200
+ useLocalFiltering: true,
201
+ useLocalSorting: true,
202
+
203
+ options: {
204
+ datasetName: 'countries', // the only REQUIRED property
205
+ },
206
+ // you can define the onInit callback OR enable the "executeProcessCommandOnInit" flag in the service init
207
+ preProcess: () => (!this.isDataLoaded ? this.displaySpinner(true) : ''),
208
+ process: (query: string) => this.getCountries(query),
209
+ postProcess: (result: GraphqlResult<Country>) => {
210
+ this.metrics = result.metrics as Metrics;
211
+ this.displaySpinner(false);
212
+ this.isDataLoaded = true;
213
+ },
214
+ } as GraphqlServiceApi,
215
+ };
216
+ }
217
+
218
+ displaySpinner(isProcessing: boolean) {
219
+ this.processing = isProcessing;
220
+ this.status = isProcessing
221
+ ? { text: 'processing...', class: 'alert alert-danger' }
222
+ : { text: 'finished', class: 'alert alert-success' };
223
+ }
224
+
225
+ // --
226
+ // NOTE - Demo Code ONLY
227
+ // This Example calls multiple GraphQL queries, this is ONLY for demo purposes, you would typically only call 1 query (which is what GraphQL is good at)
228
+ // This demo is mainly to show the use of GraphqlService to build the query and retrieve the data but also to show how to mix that with usage of local Filtering/Sorting strategies
229
+ // --
230
+
231
+ /** Calling the GraphQL backend API to get the Countries with the Query created by the "process" method of GraphqlService */
232
+ getCountries(query: string): Observable<GraphqlResult<Country>> {
233
+ return this.http.post<GraphqlResult<Country>>(COUNTRIES_API, { query });
234
+ }
235
+
236
+ /**
237
+ * Calling again the GraphQL backend API, however in this case we cannot use the GraphQL Service to build the query
238
+ * So we will have to write, by hand, the query to get the continents code & name
239
+ * We also need to resolve the data in a flat array (singleSelect/multipleSelect Filters only accept data at the root of the array)
240
+ */
241
+ getContinents(): Observable<GraphqlResult<{ code: string; name: string }>> {
242
+ const continentQuery = `query { continents { code, name }}`;
243
+ return this.http.post<GraphqlResult<{ code: string; name: string }>>(COUNTRIES_API, { query: continentQuery });
244
+ }
245
+
246
+ /**
247
+ * Calling again the GraphQL backend API, however in this case we cannot use the GraphQL Service to build the query
248
+ * So we will have to write, by hand, the query to get the languages code & name
249
+ * We also need to resolve the data in a flat array (singleSelect/multipleSelect Filters only accept data at the root of the array)
250
+ */
251
+ getLanguages(): Observable<GraphqlResult<{ code: string; name: string; native: string }>> {
252
+ const languageQuery = `query { languages { code, name, native }}`;
253
+ return this.http.post<GraphqlResult<{ code: string; name: string; native: string }>>(COUNTRIES_API, { query: languageQuery });
254
+ }
255
+ }
@@ -0,0 +1,98 @@
1
+ <div id="demo-container" class="container-fluid">
2
+ <h2>
3
+ Example 26: Use of Angular Components
4
+ <span class="float-end">
5
+ <a
6
+ style="font-size: 18px"
7
+ target="_blank"
8
+ href="https://github.com/ghiscoding/slickgrid-universal/blob/master/frameworks/angular-slickgrid/src/demos/examples/grid-angular.component.ts"
9
+ >
10
+ <span class="mdi mdi-link-variant"></span> code
11
+ </a>
12
+ </span>
13
+ </h2>
14
+ <div class="subtitle">
15
+ <h3>Filters, Editors, AsyncPostRender with Angular Components</h3>
16
+ Grid with usage of Angular Components as Editor &amp; AsyncPostRender (similar to Formatter).
17
+ <ul>
18
+ <li>Support of Angular Component as Custom Editor (click on any "Assignee" name cell)</li>
19
+ <ul>
20
+ <li>
21
+ That column uses <a href="https://github.com/ng-select/ng-select" target="_blank">ng-select</a> as a custom editor as an Angular
22
+ Component
23
+ </li>
24
+ <li>
25
+ Increased Grid Options "rowHeight" &amp; "headerRowHeight" to 45 so that the "ng-select" fits in the cell. Ideally it would be
26
+ better to override the ng-select css styling to change it's max height
27
+ </li>
28
+ </ul>
29
+ <li>Support of Angular Component as Custom Filter ("Assignee" columns), which also uses "ng-select"</li>
30
+ <li>The 2nd "Assignee" column (showing in bold text) uses "asyncPostRender" with an Angular Component</li>
31
+ <ul>
32
+ <li>Why can't we use Angular Component as Customer Formatter and why do I see a slight delay in loading the data?</li>
33
+ <li>
34
+ It's totally normal since SlickGrid Formatters only accept strings (synchronously), so we cannot use that (Angular requires at
35
+ least 1 full cycle to render the element), so we are left with SlickGrid "asyncPostRender" and it works but as the name suggest
36
+ it's async users might see noticeable delay in loading the data
37
+ </li>
38
+ </ul>
39
+ <li>
40
+ The 2nd "Title" showing an interactive component, which is not destroyed after first rendering but stays active. Click on the button
41
+ to see the title alerted
42
+ </li>
43
+ </ul>
44
+ </div>
45
+
46
+ <div class="col-sm-6">
47
+ <label>autoEdit setting: </label>
48
+ <span id="radioAutoEdit">
49
+ <label class="radio-inline control-label" for="radioTrue">
50
+ <input type="radio" name="inlineRadioOptions" id="radioTrue" checked [value]="isAutoEdit" (change)="setAutoEdit(true)" /> ON
51
+ (single-click)
52
+ </label>
53
+ <label class="radio-inline control-label" for="radioFalse">
54
+ <input type="radio" name="inlineRadioOptions" id="radioFalse" [value]="isAutoEdit" (change)="setAutoEdit(false)" /> OFF
55
+ (double-click)
56
+ </label>
57
+ </span>
58
+ <div class="row col-sm-12">
59
+ <span>
60
+ <button class="btn btn-outline-secondary btn-sm btn-icon" (click)="undo()">
61
+ <i class="mdi mdi-undo"></i>
62
+ Undo last edit(s)
63
+ </button>
64
+ <button class="btn btn-outline-secondary btn-sm btn-icon" (click)="angularGrid.filterService.clearFilters()">Clear Filters</button>
65
+ <button class="btn btn-outline-secondary btn-sm btn-icon" (click)="angularGrid.sortService.clearSorting()">Clear Sorting</button>
66
+ <label class="checkbox-inline control-label" for="autoCommitEdit">
67
+ <input
68
+ type="checkbox"
69
+ id="autoCommitEdit"
70
+ data-test="auto-commit"
71
+ [checked]="gridOptions.autoCommitEdit"
72
+ (click)="changeAutoCommit()"
73
+ />
74
+ Auto Commit Edit
75
+ </label>
76
+ </span>
77
+ </div>
78
+ </div>
79
+
80
+ <div class="col-sm-6">
81
+ <div class="alert alert-info" *ngIf="updatedObject"><strong>Updated Item:</strong> {{ updatedObject | json }}</div>
82
+ <div class="alert alert-warning" *ngIf="alertWarning"><strong>Updated Item:</strong> {{ alertWarning }}</div>
83
+ </div>
84
+
85
+ <div class="col-sm-12">
86
+ <angular-slickgrid
87
+ gridId="grid26"
88
+ [columns]="columnDefinitions"
89
+ [options]="gridOptions"
90
+ [dataset]="dataset"
91
+ (onAngularGridCreated)="angularGridReady($event.detail)"
92
+ (onCellChange)="onCellChanged($event.detail.eventData, $event.detail.args)"
93
+ (onClick)="onCellClicked($event.detail.eventData, $event.detail.args)"
94
+ (onValidationError)="onCellValidationError($event.detail.eventData, $event.detail.args)"
95
+ >
96
+ </angular-slickgrid>
97
+ </div>
98
+ </div>
@@ -0,0 +1,42 @@
1
+ h3 {
2
+ font-style: normal;
3
+ color: #3d3d3d;
4
+ }
5
+
6
+ #slickGridContainer-grid22 {
7
+ /* you can change all filters heights via CSS variable */
8
+ --slick-header-input-height: 34px;
9
+
10
+ .slickgrid-container {
11
+ .slick-headerrow-column {
12
+ .ng-input {
13
+ input {
14
+ height: 100%;
15
+ }
16
+ }
17
+ }
18
+ }
19
+ }
20
+
21
+ .ng-select-focused {
22
+ box-shadow: 0 0 0 0.25rem #0d6efd40;
23
+ }
24
+
25
+ .cell-menu-dropdown {
26
+ border: 1px solid #a3a3a3;
27
+ border-radius: 5px;
28
+ display: flex;
29
+ align-items: center;
30
+ height: 100%;
31
+ width: max-content;
32
+ padding: 0 14px;
33
+ cursor: pointer;
34
+ &:hover {
35
+ background-color: #a3a3a3;
36
+ color: #ffffff;
37
+ }
38
+
39
+ .mdi-chevron-down {
40
+ margin-left: 5px;
41
+ }
42
+ }