fontastic 0.1.3 → 0.2.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 (452) hide show
  1. package/.editorconfig +16 -16
  2. package/.github/FUNDING.yml +3 -12
  3. package/.github/ISSUE_TEMPLATE/bug_report.yml +41 -0
  4. package/.github/ISSUE_TEMPLATE/feature_request.yml +29 -0
  5. package/.github/dependabot.yml +6 -6
  6. package/.github/pull_request_template.md +21 -21
  7. package/.github/workflows/claude-code-review.yml +45 -0
  8. package/.github/workflows/claude.yml +46 -0
  9. package/.github/workflows/macos.yml +77 -58
  10. package/.github/workflows/release.yml +165 -0
  11. package/.github/workflows/ubuntu.yml +87 -70
  12. package/.github/workflows/windows.yml +81 -64
  13. package/.husky/pre-commit +1 -0
  14. package/.lintstagedrc.json +6 -0
  15. package/.node-version +1 -1
  16. package/.postcssrc.json +5 -0
  17. package/.prettierignore +8 -0
  18. package/.prettierrc +18 -0
  19. package/.vscode/launch.json +42 -45
  20. package/.vscode/tasks.json +48 -48
  21. package/CODE_OF_CONDUCT.md +128 -45
  22. package/HOW_TO.md +39 -0
  23. package/LICENSE.md +7 -0
  24. package/README.md +103 -111
  25. package/angular.json +166 -194
  26. package/app/Application.js +39 -39
  27. package/app/Application.ts +38 -38
  28. package/app/config/alert.ts +31 -31
  29. package/app/config/database.js +194 -202
  30. package/app/config/database.ts +194 -202
  31. package/app/config/index.js +19 -19
  32. package/app/config/index.ts +2 -2
  33. package/app/config/mimes.js +48 -48
  34. package/app/config/mimes.ts +53 -53
  35. package/app/config/system.js +578 -496
  36. package/app/config/system.ts +580 -498
  37. package/app/config/themes.ts +38 -38
  38. package/app/core/AppLogger.js +30 -30
  39. package/app/core/AppLogger.ts +37 -37
  40. package/app/core/ConfigManager.js +129 -113
  41. package/app/core/ConfigManager.ts +150 -137
  42. package/app/core/ConnectionManager.js +93 -82
  43. package/app/core/ConnectionManager.ts +107 -95
  44. package/app/core/FontCatalog.js +32 -50
  45. package/app/core/FontCatalog.ts +20 -42
  46. package/app/core/FontFinder.js +72 -85
  47. package/app/core/FontFinder.ts +75 -96
  48. package/app/core/FontManager.js +128 -164
  49. package/app/core/FontManager.ts +136 -172
  50. package/app/core/FontObject.js +53 -53
  51. package/app/core/FontObject.ts +62 -62
  52. package/app/core/MessageHandler.js +270 -271
  53. package/app/core/MessageHandler.ts +330 -337
  54. package/app/core/SystemManager.js +132 -139
  55. package/app/core/SystemManager.ts +160 -171
  56. package/app/core/menu/Example.ts +279 -279
  57. package/app/core/menu/MenuBuilder.js +43 -44
  58. package/app/core/menu/MenuBuilder.ts +51 -53
  59. package/app/core/menu/templates/DarwinTemplate.js +124 -126
  60. package/app/core/menu/templates/DarwinTemplate.ts +144 -142
  61. package/app/core/menu/templates/SystemTemplate.js +121 -123
  62. package/app/core/menu/templates/SystemTemplate.ts +136 -139
  63. package/app/database/entity/Collection.schema.js +98 -98
  64. package/app/database/entity/Collection.schema.ts +68 -68
  65. package/app/database/entity/Logger.schema.js +49 -49
  66. package/app/database/entity/Logger.schema.ts +26 -26
  67. package/app/database/entity/Store.schema.js +159 -164
  68. package/app/database/entity/Store.schema.ts +110 -116
  69. package/app/database/entity/index.js +19 -19
  70. package/app/database/entity/index.ts +2 -2
  71. package/app/database/repository/Collection.repository.js +277 -180
  72. package/app/database/repository/Collection.repository.ts +291 -190
  73. package/app/database/repository/Logger.repository.js +24 -24
  74. package/app/database/repository/Logger.repository.ts +10 -10
  75. package/app/database/repository/Store.repository.js +324 -327
  76. package/app/database/repository/Store.repository.ts +349 -358
  77. package/app/database/repository/User.repository.js +11 -11
  78. package/app/database/repository/User.repository.ts +8 -8
  79. package/app/database/repository/index.js +19 -19
  80. package/app/database/repository/index.ts +2 -2
  81. package/app/enums/ChannelType.js +62 -61
  82. package/app/enums/ChannelType.ts +67 -65
  83. package/app/enums/StorageType.js +19 -18
  84. package/app/enums/{storageType.ts → StorageType.ts} +15 -14
  85. package/app/enums/index.js +18 -18
  86. package/app/enums/index.ts +2 -2
  87. package/app/helpers/command.js +27 -27
  88. package/app/helpers/command.ts +19 -19
  89. package/app/helpers/random.js +15 -15
  90. package/app/helpers/random.ts +12 -12
  91. package/app/main.js +97 -81
  92. package/app/main.ts +114 -94
  93. package/app/package-lock.json +2240 -2649
  94. package/app/package.json +23 -35
  95. package/app/types/AppAlert.js +2 -2
  96. package/app/types/AppAlert.ts +8 -8
  97. package/app/types/AuthUser.js +6 -6
  98. package/app/types/AuthUser.ts +5 -5
  99. package/app/types/Breadcrumb.js +2 -2
  100. package/app/types/Breadcrumb.ts +4 -4
  101. package/app/types/FontMetrics.ts +7 -0
  102. package/app/types/ImportOptions.js +6 -6
  103. package/app/types/ImportOptions.ts +3 -3
  104. package/app/types/QueryOptions.js +2 -2
  105. package/app/types/QueryOptions.ts +12 -12
  106. package/app/types/SystemConfig.js +2 -2
  107. package/app/types/SystemConfig.ts +127 -132
  108. package/app/types/SystemStats.js +2 -2
  109. package/app/types/SystemStats.ts +6 -7
  110. package/app/types/SystemTheme.js +2 -2
  111. package/app/types/SystemTheme.ts +5 -5
  112. package/app/types/index.js +24 -24
  113. package/app/types/index.ts +9 -8
  114. package/commitlint.config.mjs +3 -0
  115. package/e2e/main.spec.ts +57 -59
  116. package/e2e/playwright.config.ts +20 -19
  117. package/e2e/tsconfig.e2e.json +13 -13
  118. package/electron-builder.json +34 -71
  119. package/eslint.config.mjs +111 -0
  120. package/package.json +122 -121
  121. package/src/app/app.component.html +1 -1
  122. package/src/app/app.component.spec.ts +21 -0
  123. package/src/app/app.component.ts +40 -37
  124. package/src/app/core/core.module.ts +8 -11
  125. package/src/app/core/services/database/database.service.ts +410 -286
  126. package/src/app/core/services/electron/electron.service.spec.ts +12 -12
  127. package/src/app/core/services/electron/electron.service.ts +62 -62
  128. package/src/app/core/services/index.ts +5 -14
  129. package/src/app/core/services/message/message.service.ts +291 -289
  130. package/src/app/core/services/news/news.service.ts +52 -94
  131. package/src/app/core/services/presentation/presentation.service.ts +253 -341
  132. package/src/app/home/home.component.html +7 -0
  133. package/src/app/home/home.component.spec.ts +31 -0
  134. package/src/app/home/home.component.ts +15 -0
  135. package/src/app/layout/aside/aside.component.html +35 -9
  136. package/src/app/layout/aside/aside.component.ts +60 -26
  137. package/src/app/layout/footer/footer.component.html +5 -11
  138. package/src/app/layout/footer/footer.component.ts +13 -32
  139. package/src/app/layout/header/header.component.html +118 -35
  140. package/src/app/layout/header/header.component.ts +52 -229
  141. package/src/app/layout/layout.component.html +32 -14
  142. package/src/app/layout/layout.component.ts +19 -23
  143. package/src/app/layout/main/main.component.html +46 -0
  144. package/src/app/layout/main/main.component.ts +20 -0
  145. package/src/app/layout/navigation/library/library.component.ts +51 -0
  146. package/src/app/layout/navigation/navigation.component.html +126 -142
  147. package/src/app/layout/navigation/navigation.component.ts +372 -302
  148. package/src/app/layout/navigation/stats/stats.component.ts +56 -0
  149. package/src/app/settings/ai-keys/ai-keys.component.html +56 -0
  150. package/src/app/settings/ai-keys/ai-keys.component.ts +44 -0
  151. package/src/app/settings/danger-zone/danger-zone.component.html +22 -0
  152. package/src/app/settings/danger-zone/danger-zone.component.ts +37 -0
  153. package/src/app/settings/logs/logs.component.html +41 -0
  154. package/src/app/settings/logs/logs.component.ts +43 -0
  155. package/src/app/settings/news-api/news-api.component.html +40 -0
  156. package/src/app/settings/news-api/news-api.component.ts +57 -0
  157. package/src/app/settings/pages/general/general.component.html +7 -0
  158. package/src/app/settings/pages/general/general.component.ts +20 -0
  159. package/src/app/settings/pages/logs/logs.component.html +1 -0
  160. package/src/app/settings/pages/logs/logs.component.ts +10 -0
  161. package/src/app/settings/pages/system/system.component.html +1 -0
  162. package/src/app/settings/pages/system/system.component.ts +10 -0
  163. package/src/app/settings/quick-actions/quick-actions.component.html +49 -0
  164. package/src/app/settings/quick-actions/quick-actions.component.ts +40 -0
  165. package/src/app/settings/settings.component.html +47 -0
  166. package/src/app/settings/settings.component.ts +10 -0
  167. package/src/app/settings/system-info/system-info.component.html +21 -0
  168. package/src/app/settings/system-info/system-info.component.ts +42 -0
  169. package/src/app/settings/theme/theme.component.html +15 -0
  170. package/src/app/settings/theme/theme.component.ts +22 -0
  171. package/src/app/shared/components/collapsible-panel/collapsible-panel.component.ts +43 -0
  172. package/src/app/shared/components/context-menu/context-menu.component.ts +67 -0
  173. package/src/app/shared/components/datagrid/datagrid.component.html +96 -0
  174. package/src/app/shared/components/datagrid/datagrid.component.ts +49 -0
  175. package/src/app/shared/components/index.ts +11 -16
  176. package/src/app/shared/components/inspector/inspector.component.html +140 -0
  177. package/src/app/shared/components/inspector/inspector.component.ts +41 -0
  178. package/src/app/shared/components/page-not-found/page-not-found.component.html +1 -3
  179. package/src/app/shared/components/page-not-found/page-not-found.component.spec.ts +22 -0
  180. package/src/app/shared/components/page-not-found/page-not-found.component.ts +14 -12
  181. package/src/app/shared/components/panel/panel.component.html +5 -0
  182. package/src/app/shared/components/panel/panel.component.ts +8 -0
  183. package/src/app/shared/components/preview/preview.component.html +36 -0
  184. package/src/app/shared/components/preview/preview.component.ts +68 -0
  185. package/src/app/shared/components/prompt-dialog/prompt-dialog.component.html +36 -0
  186. package/src/app/shared/components/prompt-dialog/prompt-dialog.component.ts +39 -0
  187. package/src/app/shared/components/search/search.component.html +329 -54
  188. package/src/app/shared/components/search/search.component.ts +221 -77
  189. package/src/app/shared/components/spinner/spinner.component.ts +10 -26
  190. package/src/app/shared/components/toolbar/toolbar.component.html +207 -0
  191. package/src/app/shared/components/toolbar/toolbar.component.ts +99 -0
  192. package/src/app/shared/components/waterfall/waterfall.component.html +119 -0
  193. package/src/app/shared/components/waterfall/waterfall.component.ts +119 -0
  194. package/src/app/shared/directives/autofocus/autofocus.directive.ts +14 -0
  195. package/src/app/shared/directives/index.ts +2 -2
  196. package/src/app/shared/directives/webview/webview.directive.spec.ts +8 -0
  197. package/src/app/shared/directives/webview/webview.directive.ts +9 -8
  198. package/src/app/shared/shared.module.ts +13 -92
  199. package/src/assets/background.jpg +0 -0
  200. package/src/assets/fonts/md/MaterialIcons-Regular.woff2 +0 -0
  201. package/src/assets/fonts/md/MaterialSymbolsOutlined.woff2 +0 -0
  202. package/src/assets/i18n/en.json +12 -12
  203. package/src/assets/icons/electron.bmp +0 -0
  204. package/src/assets/icons/favicon.256x256.png +0 -0
  205. package/src/assets/icons/favicon.512x512.png +0 -0
  206. package/src/assets/icons/favicon.icns +0 -0
  207. package/src/assets/icons/favicon.ico +0 -0
  208. package/src/assets/icons/favicon.png +0 -0
  209. package/src/environments/environment.dev.ts +4 -4
  210. package/src/environments/environment.prod.ts +4 -4
  211. package/src/environments/environment.ts +4 -4
  212. package/src/favicon.ico +0 -0
  213. package/src/index.html +19 -55
  214. package/src/main.ts +65 -15
  215. package/src/styles/base/reset.css +41 -0
  216. package/src/styles/base/variables.css +356 -0
  217. package/src/styles/components/buttons.css +108 -0
  218. package/src/styles/components/cards.css +60 -0
  219. package/src/styles/components/forms.css +70 -0
  220. package/src/styles/components/navigation.css +24 -0
  221. package/src/styles/components/scrollbox.css +50 -0
  222. package/src/styles/components/spinner.css +7 -0
  223. package/src/styles/components/splash.css +47 -0
  224. package/src/styles/components/toolbar.css +92 -0
  225. package/src/styles/fonts/md.css +39 -0
  226. package/src/styles/themes/dashboard.scss +293 -294
  227. package/src/styles/themes/euphoria.scss +284 -283
  228. package/src/styles/themes/mellow.scss +281 -280
  229. package/src/styles/themes/midnight.scss +284 -283
  230. package/src/styles/themes/passion.scss +281 -280
  231. package/src/styles/themes/swiss.scss +284 -283
  232. package/src/styles.css +17 -0
  233. package/src/tsconfig.app.json +11 -20
  234. package/src/tsconfig.spec.json +10 -23
  235. package/src/typings.d.ts +9 -9
  236. package/src/vitest.d.ts +1 -0
  237. package/tsconfig.json +38 -42
  238. package/tsconfig.serve.json +27 -27
  239. package/.eslintrc.json +0 -54
  240. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -29
  241. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  242. package/.github/stale.yml +0 -17
  243. package/CONTRIBUTING.md +0 -72
  244. package/LICENSE +0 -21
  245. package/angular.webpack.js +0 -32
  246. package/app/core/FontInstaller.js +0 -67
  247. package/app/core/FontInstaller.ts +0 -63
  248. package/docs/logo.png +0 -0
  249. package/docs/screenshots/readme.md +0 -7
  250. package/docs/screenshots/screen-grab1.png +0 -0
  251. package/docs/screenshots/screen-grab2.png +0 -0
  252. package/docs/screenshots/screen-grab3.png +0 -0
  253. package/src/app/app-routing.module.ts +0 -15
  254. package/src/app/app.component.scss +0 -0
  255. package/src/app/app.component.spec.ts.dist +0 -33
  256. package/src/app/app.module.ts +0 -63
  257. package/src/app/core/model/AuthUserModel.ts +0 -7
  258. package/src/app/core/model/CustomThemeModel.ts +0 -7
  259. package/src/app/core/model/DbConnectionModel.ts +0 -16
  260. package/src/app/core/model/ImportOptionsModel.ts +0 -5
  261. package/src/app/core/model/LatestNewsModel.ts +0 -7
  262. package/src/app/core/model/SearchFormModel.ts +0 -10
  263. package/src/app/core/model/index.ts +0 -6
  264. package/src/app/core/services/alert/alert.service.spec.ts +0 -22
  265. package/src/app/core/services/alert/alert.service.ts +0 -71
  266. package/src/app/core/services/auth/auth.service.ts +0 -30
  267. package/src/app/core/services/boot/boot.service.ts +0 -33
  268. package/src/app/core/services/breadcrumb/breadcrumb.service.spec.ts +0 -22
  269. package/src/app/core/services/breadcrumb/breadcrumb.service.ts +0 -30
  270. package/src/app/core/services/config/config.service.ts +0 -63
  271. package/src/app/core/services/font/font.service.ts +0 -79
  272. package/src/app/core/services/gravatar/gravatar.service.spec.ts +0 -16
  273. package/src/app/core/services/gravatar/gravatar.service.ts +0 -18
  274. package/src/app/core/services/modal/modal.service.spec.ts +0 -16
  275. package/src/app/core/services/modal/modal.service.ts +0 -34
  276. package/src/app/core/services/utils/utils.service.spec.ts +0 -12
  277. package/src/app/core/services/utils/utils.service.ts +0 -144
  278. package/src/app/layout/aside/aside.component.scss +0 -1
  279. package/src/app/layout/footer/footer.component.scss +0 -27
  280. package/src/app/layout/header/header.component.scss +0 -60
  281. package/src/app/layout/layout.component.scss +0 -119
  282. package/src/app/layout/layout.module.ts +0 -32
  283. package/src/app/layout/layout.service.ts +0 -13
  284. package/src/app/layout/navigation/navigation.component.scss +0 -0
  285. package/src/app/pages/main/grid/grid.component.html +0 -160
  286. package/src/app/pages/main/grid/grid.component.scss +0 -3
  287. package/src/app/pages/main/grid/grid.component.ts +0 -98
  288. package/src/app/pages/main/inspect/inspect.component.html +0 -7
  289. package/src/app/pages/main/inspect/inspect.component.scss +0 -3
  290. package/src/app/pages/main/inspect/inspect.component.ts +0 -66
  291. package/src/app/pages/main/main-routing.module.ts +0 -30
  292. package/src/app/pages/main/main.component.html +0 -6
  293. package/src/app/pages/main/main.component.scss +0 -191
  294. package/src/app/pages/main/main.component.ts +0 -35
  295. package/src/app/pages/main/main.module.ts +0 -28
  296. package/src/app/pages/main/preview/preview.component.html +0 -46
  297. package/src/app/pages/main/preview/preview.component.scss +0 -0
  298. package/src/app/pages/main/preview/preview.component.ts +0 -239
  299. package/src/app/pages/main/toolbar/toolbar.component.html +0 -78
  300. package/src/app/pages/main/toolbar/toolbar.component.scss +0 -3
  301. package/src/app/pages/main/toolbar/toolbar.component.ts +0 -132
  302. package/src/app/shared/components/alert/alert.component.html +0 -9
  303. package/src/app/shared/components/alert/alert.component.scss +0 -0
  304. package/src/app/shared/components/alert/alert.component.ts +0 -37
  305. package/src/app/shared/components/breadcrumbs/breadcrumbs.component.html +0 -14
  306. package/src/app/shared/components/breadcrumbs/breadcrumbs.component.scss +0 -0
  307. package/src/app/shared/components/breadcrumbs/breadcrumbs.component.ts +0 -36
  308. package/src/app/shared/components/button/button.component.html +0 -3
  309. package/src/app/shared/components/button/button.component.scss +0 -2
  310. package/src/app/shared/components/button/button.component.ts +0 -22
  311. package/src/app/shared/components/collection/create-collection/create-collection.component.html +0 -41
  312. package/src/app/shared/components/collection/create-collection/create-collection.component.scss +0 -0
  313. package/src/app/shared/components/collection/create-collection/create-collection.component.ts +0 -68
  314. package/src/app/shared/components/collection/form-collection/form-collection.component.html +0 -1
  315. package/src/app/shared/components/collection/form-collection/form-collection.component.scss +0 -0
  316. package/src/app/shared/components/collection/form-collection/form-collection.component.ts +0 -15
  317. package/src/app/shared/components/collection/update-collection/update-collection.component.html +0 -40
  318. package/src/app/shared/components/collection/update-collection/update-collection.component.scss +0 -0
  319. package/src/app/shared/components/collection/update-collection/update-collection.component.ts +0 -71
  320. package/src/app/shared/components/glyph-list/glyph-list.component.html +0 -40
  321. package/src/app/shared/components/glyph-list/glyph-list.component.scss +0 -1
  322. package/src/app/shared/components/glyph-list/glyph-list.component.ts +0 -165
  323. package/src/app/shared/components/glyph-view/glyph-view.component.html +0 -23
  324. package/src/app/shared/components/glyph-view/glyph-view.component.scss +0 -0
  325. package/src/app/shared/components/glyph-view/glyph-view.component.ts +0 -228
  326. package/src/app/shared/components/loading/loading.component.html +0 -1
  327. package/src/app/shared/components/loading/loading.component.scss +0 -0
  328. package/src/app/shared/components/loading/loading.component.ts +0 -26
  329. package/src/app/shared/components/modal/modal.component.html +0 -31
  330. package/src/app/shared/components/modal/modal.component.scss +0 -0
  331. package/src/app/shared/components/modal/modal.component.ts +0 -51
  332. package/src/app/shared/components/page-not-found/page-not-found.component.scss +0 -0
  333. package/src/app/shared/components/paginator/paginator.component.html +0 -21
  334. package/src/app/shared/components/paginator/paginator.component.scss +0 -3
  335. package/src/app/shared/components/paginator/paginator.component.ts +0 -133
  336. package/src/app/shared/components/pairing/pairing.component.html +0 -20
  337. package/src/app/shared/components/pairing/pairing.component.scss +0 -0
  338. package/src/app/shared/components/pairing/pairing.component.ts +0 -33
  339. package/src/app/shared/components/search/search.component.scss +0 -10
  340. package/src/app/shared/components/settings/database/database.component.html +0 -151
  341. package/src/app/shared/components/settings/database/database.component.scss +0 -0
  342. package/src/app/shared/components/settings/database/database.component.ts +0 -145
  343. package/src/app/shared/components/settings/general/general.component.html +0 -170
  344. package/src/app/shared/components/settings/general/general.component.scss +0 -0
  345. package/src/app/shared/components/settings/general/general.component.ts +0 -150
  346. package/src/app/shared/components/settings/logs/logs.component.html +0 -44
  347. package/src/app/shared/components/settings/logs/logs.component.scss +0 -0
  348. package/src/app/shared/components/settings/logs/logs.component.ts +0 -37
  349. package/src/app/shared/components/settings/news/news.component.html +0 -41
  350. package/src/app/shared/components/settings/news/news.component.scss +0 -0
  351. package/src/app/shared/components/settings/news/news.component.ts +0 -52
  352. package/src/app/shared/components/settings/settings.component.html +0 -46
  353. package/src/app/shared/components/settings/settings.component.scss +0 -0
  354. package/src/app/shared/components/settings/settings.component.ts +0 -23
  355. package/src/app/shared/components/settings/system/system.component.html +0 -30
  356. package/src/app/shared/components/settings/system/system.component.scss +0 -0
  357. package/src/app/shared/components/settings/system/system.component.ts +0 -43
  358. package/src/app/shared/components/settings/theme/theme.component.html +0 -22
  359. package/src/app/shared/components/settings/theme/theme.component.scss +0 -0
  360. package/src/app/shared/components/settings/theme/theme.component.ts +0 -50
  361. package/src/app/shared/components/spinner/spinner.component.html +0 -1
  362. package/src/app/shared/components/spinner/spinner.component.scss +0 -0
  363. package/src/app/shared/components/store/store.component.html +0 -22
  364. package/src/app/shared/components/store/store.component.scss +0 -10
  365. package/src/app/shared/components/store/store.component.ts +0 -58
  366. package/src/app/shared/components/tables/tables.component.html +0 -47
  367. package/src/app/shared/components/tables/tables.component.scss +0 -10
  368. package/src/app/shared/components/tables/tables.component.ts +0 -81
  369. package/src/app/shared/components/typescale/typescale.component.html +0 -53
  370. package/src/app/shared/components/typescale/typescale.component.scss +0 -0
  371. package/src/app/shared/components/typescale/typescale.component.ts +0 -168
  372. package/src/app/shared/directives/gravatar/gravatar.directive.ts +0 -29
  373. package/src/app/shared/pipes/installable.pipe.ts +0 -10
  374. package/src/app/shared/pipes/prettybytes.pipe.ts +0 -10
  375. package/src/app/shared/pipes/safehtml.pipe.ts +0 -10
  376. package/src/assets/fonts/fa/fa-brands-400.eot +0 -0
  377. package/src/assets/fonts/fa/fa-brands-400.svg +0 -3535
  378. package/src/assets/fonts/fa/fa-brands-400.ttf +0 -0
  379. package/src/assets/fonts/fa/fa-brands-400.woff +0 -0
  380. package/src/assets/fonts/fa/fa-brands-400.woff2 +0 -0
  381. package/src/assets/fonts/fa/fa-regular-400.eot +0 -0
  382. package/src/assets/fonts/fa/fa-regular-400.svg +0 -803
  383. package/src/assets/fonts/fa/fa-regular-400.ttf +0 -0
  384. package/src/assets/fonts/fa/fa-regular-400.woff +0 -0
  385. package/src/assets/fonts/fa/fa-regular-400.woff2 +0 -0
  386. package/src/assets/fonts/fa/fa-solid-900.eot +0 -0
  387. package/src/assets/fonts/fa/fa-solid-900.svg +0 -4700
  388. package/src/assets/fonts/fa/fa-solid-900.ttf +0 -0
  389. package/src/assets/fonts/fa/fa-solid-900.woff +0 -0
  390. package/src/assets/fonts/fa/fa-solid-900.woff2 +0 -0
  391. package/src/assets/fonts/md/MaterialIcons-Regular.eot +0 -0
  392. package/src/assets/fonts/md/MaterialIcons-Regular.ijmap +0 -1
  393. package/src/assets/fonts/md/MaterialIcons-Regular.svg +0 -2373
  394. package/src/assets/fonts/md/MaterialIcons-Regular.ttf +0 -0
  395. package/src/assets/fonts/md/MaterialIcons-Regular.woff +0 -0
  396. package/src/assets/fonts/md/README.md +0 -9
  397. package/src/assets/fonts/md/codepoints +0 -932
  398. package/src/assets/fonts/md/material-icons.css +0 -36
  399. package/src/assets/fonts/octicon/octicon.eot +0 -0
  400. package/src/assets/fonts/octicon/octicon.svg +0 -378
  401. package/src/assets/fonts/octicon/octicon.ttf +0 -0
  402. package/src/assets/fonts/octicon/octicon.woff +0 -0
  403. package/src/assets/fonts/octicon/octicon.woff2 +0 -0
  404. package/src/assets/fonts/roboto/Roboto-Bold-webfont.eot +0 -0
  405. package/src/assets/fonts/roboto/Roboto-Bold-webfont.svg +0 -607
  406. package/src/assets/fonts/roboto/Roboto-Bold-webfont.ttf +0 -0
  407. package/src/assets/fonts/roboto/Roboto-Bold-webfont.woff +0 -0
  408. package/src/assets/fonts/roboto/Roboto-Medium-webfont.eot +0 -0
  409. package/src/assets/fonts/roboto/Roboto-Medium-webfont.svg +0 -607
  410. package/src/assets/fonts/roboto/Roboto-Medium-webfont.ttf +0 -0
  411. package/src/assets/fonts/roboto/Roboto-Medium-webfont.woff +0 -0
  412. package/src/assets/fonts/roboto/Roboto-Regular-webfont.eot +0 -0
  413. package/src/assets/fonts/roboto/Roboto-Regular-webfont.svg +0 -635
  414. package/src/assets/fonts/roboto/Roboto-Regular-webfont.ttf +0 -0
  415. package/src/assets/fonts/roboto/Roboto-Regular-webfont.woff +0 -0
  416. package/src/assets/icons/android-chrome-192x192.png +0 -0
  417. package/src/assets/icons/android-chrome-512x512.png +0 -0
  418. package/src/assets/icons/apple-touch-icon.png +0 -0
  419. package/src/assets/icons/favicon-16x16.png +0 -0
  420. package/src/assets/icons/favicon-32x32.png +0 -0
  421. package/src/assets/icons/site.webmanifest +0 -1
  422. package/src/assets/images/electron.bmp +0 -0
  423. package/src/bin/activator +0 -0
  424. package/src/bin/activator.exe +0 -0
  425. package/src/environments/environment.web.prod.ts +0 -4
  426. package/src/environments/environment.web.ts +0 -4
  427. package/src/karma.conf.js +0 -50
  428. package/src/polyfills-test.ts +0 -1
  429. package/src/polyfills.ts +0 -53
  430. package/src/styles/base/loading.scss +0 -87
  431. package/src/styles/base/reset.scss +0 -408
  432. package/src/styles/components/alert.scss +0 -54
  433. package/src/styles/components/buttons.scss +0 -93
  434. package/src/styles/components/forms.scss +0 -96
  435. package/src/styles/components/inputs.scss +0 -113
  436. package/src/styles/components/modal.scss +0 -52
  437. package/src/styles/components/paginator.scss +0 -108
  438. package/src/styles/components/scrollbox.scss +0 -71
  439. package/src/styles/components/spinner.scss +0 -11
  440. package/src/styles/components/tables.scss +0 -42
  441. package/src/styles/components/tabs.scss +0 -44
  442. package/src/styles/components/toolbar.scss +0 -130
  443. package/src/styles/fonts/md.scss +0 -54
  444. package/src/styles/fonts/octicons.scss +0 -1351
  445. package/src/styles/fonts/roboto.scss +0 -32
  446. package/src/styles/tools/_functions.scss +0 -5
  447. package/src/styles/tools/_mixins.scss +0 -159
  448. package/src/styles/tools/_placeholders.scss +0 -17
  449. package/src/styles/tools/_variables.scss +0 -67
  450. package/src/styles.scss +0 -37
  451. package/src/test.ts +0 -22
  452. package/tailwind.config.js +0 -67
@@ -1,165 +0,0 @@
1
- import { Component, Input, OnChanges, OnInit } from '@angular/core';
2
- import { ModalService, PresentationService } from '@app/core/services';
3
-
4
- @Component({
5
- selector: 'app-glyph-list',
6
- templateUrl: './glyph-list.component.html',
7
- styleUrls: ['./glyph-list.component.scss']
8
- })
9
- export class GlyphListComponent implements OnInit, OnChanges {
10
-
11
- @Input() fontObject: opentype.Font;
12
- @Input() fontColor: string;
13
-
14
- //fontColor: string;
15
- fontScale: number;
16
- fontSize: number;
17
- fontBaseline: number;
18
-
19
- cellCount = 200;
20
- cellWidth = 30;
21
- cellHeight = 30;
22
- cellMarginTop = 1;
23
- cellMarginBottom = 1;
24
- cellMarginLeftRight = 1;
25
-
26
- glyphName = '';
27
-
28
- page = 0;
29
- numPages = 0;
30
- numGlyphs = 0;
31
- paginatorOptions: any[] = [];
32
-
33
- cellSizeOptions: any[] = [30, 40, 50, 60, 80, 100, 120, 140, 160, 180, 200, 250, 300, 400, 500, 600, 700, 800];
34
- cellCountOptions: any[] = [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000];
35
-
36
- constructor(
37
- private presentationService: PresentationService,
38
- private modalService: ModalService,
39
- ) { }
40
-
41
- ngOnInit() {
42
- const root = document.documentElement as HTMLElement;
43
- this.fontColor = root.style.getPropertyValue('--font-color');
44
- }
45
-
46
- ngOnChanges() {
47
- if (this.fontObject?.tables) {
48
- this.initialize();
49
- }
50
- }
51
-
52
- initialize() {
53
- const w = this.cellWidth - this.cellMarginLeftRight * 2;
54
- const h = this.cellHeight - this.cellMarginTop - this.cellMarginBottom;
55
- const head = this.fontObject.tables.head;
56
- const maxHeight = head.yMax - head.yMin;
57
-
58
- this.fontScale = Math.min(w / (head.xMax - head.xMin), h / maxHeight);
59
- this.fontSize = this.fontScale * this.fontObject.unitsPerEm;
60
- this.fontBaseline = this.cellMarginTop + h * head.yMax / maxHeight;
61
-
62
- this.paginate().then(() => this.initGlyphList(0));
63
- }
64
-
65
- async paginate() {
66
- const numGlyphs: number = this.fontObject.numGlyphs;
67
- const numPages: number = Math.ceil(numGlyphs / this.cellCount);
68
-
69
- const data = [];
70
- for (let i = 0; i < numPages; i++) {
71
- const lastIndex = Math.min(numGlyphs - 1, (i + 1) * this.cellCount - 1);
72
- const text = i * this.cellCount + '-' + lastIndex;
73
- data.push({
74
- key: i,
75
- value: text
76
- });
77
- }
78
-
79
- this.paginatorOptions = data;
80
- this.numGlyphs = numGlyphs - 1;
81
- this.numPages = numPages;
82
-
83
- return data;
84
- }
85
-
86
- initGlyphList(page: number = 0) {
87
- const firstGlyph = page * this.cellCount;
88
- for (let i = 0; i < this.cellCount; i++) {
89
- const el = document.getElementById('g' + i) as HTMLCanvasElement;
90
- if (el) {
91
- this.renderGlyphItem(el, firstGlyph + i);
92
- }
93
- }
94
- }
95
-
96
- renderGlyphItem(canvas: HTMLCanvasElement, glyphIndex: any) {
97
- const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;
98
- ctx.clearRect(0, 0, this.cellWidth, this.cellHeight);
99
-
100
- if (glyphIndex >= this.fontObject.numGlyphs) {
101
- return;
102
- }
103
-
104
- const glyph = this.fontObject.glyphs.get(glyphIndex);
105
- const glyphWidth = glyph.advanceWidth * this.fontScale;
106
- const xmin = (this.cellWidth - glyphWidth) / 2;
107
- const xmax = (this.cellWidth + glyphWidth) / 2;
108
-
109
- const path = glyph.getPath(xmin, this.fontBaseline, this.fontSize);
110
- path.fill = this.fontColor;
111
- path.draw(ctx);
112
- }
113
-
114
- createRange(range: number) {
115
- const items = [];
116
- for (let i = 0; i < range + 1; i++) {
117
- items.push(i);
118
- }
119
- return items;
120
- }
121
-
122
- onCellHover(event: any) {
123
- const firstGlyphIndex = Number(this.page * this.cellCount);
124
- const cellIndex = Number(event.target.id.substr(1));
125
- const glyphIndex = firstGlyphIndex + cellIndex;
126
- this.glyphName = (glyphIndex <= this.numGlyphs) ? this.fontObject.glyphs.get(glyphIndex).name : '';
127
- }
128
-
129
- onCellSelect(event: any) {
130
- const firstGlyphIndex = this.page * this.cellCount;
131
- const cellIndex = parseInt(event.target.id.substr(1), 10);
132
- const glyphIndex = firstGlyphIndex + cellIndex;
133
- if (glyphIndex < this.fontObject.numGlyphs) {
134
- this.presentationService.setGlyphIndex(glyphIndex);
135
- this.modalService.open('glyph-view');
136
- }
137
- }
138
-
139
- onChangePage(event: Event) {
140
- const target = event.target as HTMLInputElement;
141
- this.page = Number(target.value);
142
- this.initGlyphList(this.page);
143
- }
144
-
145
- onChangeSize(event: Event) {
146
- const target = event.target as HTMLInputElement;
147
- const size = Number(target.value);
148
- this.cellHeight = size;
149
- this.cellWidth = size;
150
- setTimeout(() => this.initialize(), 1e3 / 3);
151
- }
152
-
153
- onChangeCount(event: Event) {
154
- const target = event.target as HTMLInputElement;
155
- const count = Number(target.value);
156
- if (count < this.numGlyphs) {
157
- this.cellCount = count;
158
- setTimeout(() => this.initialize(), 1e3 / 3);
159
- }
160
- }
161
-
162
- onComponentSwitch() {
163
- this.presentationService.setInspectComponent('typescale');
164
- }
165
- }
@@ -1,23 +0,0 @@
1
- <app-modal id="glyph-view" title="Glyph Viewer" size="sm" shadow="shadow-md" [showHeader]="false" [showFooter]="false">
2
-
3
- <div class="controls flex justify-between items-center border-bottom">
4
- <div class="controls__item flex justify-start items-center">
5
- <div>
6
- <h2 class="glyph-info">Glyph name: {{this.glyph?.name}}</h2>
7
- </div>
8
- </div>
9
- <div class="controls__item flex justify-end items-center">
10
- <i class="material-icons" (click)="modalService.close();">close</i>
11
- </div>
12
- </div>
13
-
14
- <div class="hover-scrollbox-y">
15
- <div class="glyph-display">
16
- <div class="glyph-display-wrapper">
17
- <canvas id="glyph-bg" width="400" height="400"></canvas>
18
- <canvas id="glyph-fg" width="400" height="400"></canvas>
19
- </div>
20
- </div>
21
- </div>
22
-
23
- </app-modal>
@@ -1,228 +0,0 @@
1
- import { Component, OnInit } from '@angular/core';
2
- import { FontService, ModalService, PresentationService } from '@app/core/services';
3
- import { Glyph, Metrics, Path, RenderOptions } from 'opentype.js';
4
-
5
- @Component({
6
- selector: 'app-glyph',
7
- templateUrl: './glyph-view.component.html',
8
- styleUrls: ['./glyph-view.component.scss']
9
- })
10
- export class GlyphViewComponent implements OnInit {
11
-
12
- fontObject: opentype.Font;
13
-
14
- glyphIndex: number;
15
-
16
- fillColor: string;
17
- strokeColor: string;
18
-
19
- fontScale: number;
20
- fontSize: number;
21
- fontBaseline: number;
22
-
23
- glyph: Glyph;
24
- metrics: Metrics;
25
- path: Path;
26
-
27
- glyphMargin = 5;
28
- glyphScale: number;
29
- glyphSize: number;
30
- glyphBaseline: number;
31
- glyphMarkSize = 10;
32
-
33
- arrowLength = 10;
34
- arrowAperture = 4;
35
-
36
- height = 400;
37
- width = 400;
38
-
39
- pixelRatio = window.devicePixelRatio || 1;
40
-
41
- constructor(
42
- private fontService: FontService,
43
- public modalService: ModalService,
44
- private presentationService: PresentationService
45
- ) {
46
- const root = document.documentElement as HTMLElement;
47
- this.fillColor = root.style.getPropertyValue('--fill-color');
48
- this.strokeColor = root.style.getPropertyValue('--stroke-color');
49
- }
50
-
51
- ngOnInit() {
52
- this.presentationService.watchGlyphIndex$.subscribe((result: number) => {
53
- setTimeout(() => {
54
- this.initialize(result);
55
- }, 1e3/3);
56
- });
57
- this.fontService.watchFontObject$.subscribe((result: opentype.Font) => this.fontObject = result);
58
- }
59
-
60
- onComponentSwitch() {
61
- this.presentationService.setInspectComponent('glyph-list');
62
- }
63
-
64
- getElement(id: string): HTMLCanvasElement {
65
- return document.getElementById(id) as HTMLCanvasElement;
66
- }
67
-
68
- getContext(element: HTMLCanvasElement): CanvasRenderingContext2D {
69
- return element.getContext('2d') as CanvasRenderingContext2D;
70
- }
71
-
72
- getGlyphById(glyphIndex: number): Glyph {
73
- return this.fontObject.glyphs.get(glyphIndex);
74
- }
75
-
76
- getPath(x?: number, y?: number, fontSize?: number, options?: RenderOptions, font?: opentype.Font): Path {
77
- return this.glyph.getPath(x, y, fontSize, options, font);
78
- }
79
-
80
- getMetrics(): Metrics {
81
- return this.glyph.getMetrics();
82
- }
83
-
84
- initialize(glyphIndex: number) {
85
- this.glyphIndex = glyphIndex;
86
-
87
- if (!this.glyphIndex || !this.fontObject) {
88
- return;
89
- }
90
-
91
- const element = this.getElement('glyph-bg');
92
- if (!element) {
93
- return;
94
- }
95
-
96
- const ctx = this.getContext(element);
97
- ctx.clearRect(0, 0, this.width, this.height);
98
-
99
- this.glyph = this.getGlyphById(this.glyphIndex);
100
- this.metrics = this.glyph.getMetrics();
101
-
102
- const glyphW = this.width - this.glyphMargin * 2;
103
- const glyphH = this.height - this.glyphMargin * 2;
104
-
105
- const head = this.fontObject.tables.head;
106
- const maxHeight = head.yMax - head.yMin;
107
-
108
- this.glyphScale = Math.min(glyphW / (head.xMax - head.xMin), glyphH / maxHeight);
109
- this.glyphSize = this.glyphScale * this.fontObject.unitsPerEm;
110
- this.glyphBaseline = this.glyphMargin + glyphH * head.yMax / maxHeight;
111
-
112
- ctx.fillStyle = this.strokeColor;
113
-
114
- this.drawLine(ctx, 'Baseline', 0);
115
- this.drawLine(ctx, 'yMax', this.fontObject.tables.head.yMax);
116
- this.drawLine(ctx, 'yMin', this.fontObject.tables.head.yMin);
117
- this.drawLine(ctx, 'Ascender', this.fontObject.tables.hhea.ascender + 100);
118
- this.drawLine(ctx, 'Descender', this.fontObject.tables.hhea.descender + 100);
119
- this.drawLine(ctx, 'Typo Ascender', this.fontObject.tables.os2.sTypoAscender + 150);
120
- this.drawLine(ctx, 'Typo Descender', this.fontObject.tables.os2.sTypoDescender + 150);
121
-
122
- this.displayGlyph();
123
- }
124
-
125
- drawLine(ctx: CanvasRenderingContext2D, text: string, yunits: number): void {
126
- const ypx = this.glyphBaseline - yunits * this.glyphScale;
127
- ctx.fillText(text, 2, ypx + 3);
128
- ctx.fillRect(80, ypx, this.width, 1);
129
- }
130
-
131
- displayGlyph(): void {
132
- const ctx = this.getContext(this.getElement('glyph-fg'));
133
- ctx.clearRect(0, 0, this.width, this.height);
134
-
135
- const glyphWidth = this.glyph.advanceWidth * this.glyphScale;
136
-
137
- const xmin = (this.width - glyphWidth) / 2;
138
- const xmax = (this.width + glyphWidth) / 2;
139
-
140
- ctx.fillRect(xmin - this.glyphMarkSize + 1, this.glyphBaseline, this.glyphMarkSize, 1);
141
- ctx.fillRect(xmin, this.glyphBaseline, 1, this.glyphMarkSize);
142
- ctx.fillRect(xmax, this.glyphBaseline, this.glyphMarkSize, 1);
143
- ctx.fillRect(xmax, this.glyphBaseline, 1, this.glyphMarkSize);
144
-
145
- ctx.fillText('0', xmin, this.glyphBaseline + this.glyphMarkSize + 10);
146
- ctx.fillText(`${this.glyph.advanceWidth}`, xmax, this.glyphBaseline + this.glyphMarkSize + 10);
147
-
148
- ctx.fillStyle = this.strokeColor;
149
- ctx.textAlign = 'center';
150
-
151
- const path = this.getPath(xmin, this.glyphBaseline, this.glyphSize);
152
-
153
- path.fill = this.fillColor; // Glyph fill color
154
- path.stroke = this.strokeColor; // Glyph stroke color
155
- path.strokeWidth = 1.5;
156
-
157
- this.drawPathWithArrows(ctx, path);
158
-
159
- this.glyph.drawPoints(ctx, xmin, this.glyphBaseline, this.glyphSize);
160
- }
161
-
162
- drawArrow(ctx: CanvasRenderingContext2D, x1: number, y1: number, x2: number, y2: number): void {
163
- const dx = x2 - x1;
164
- const dy = y2 - y1;
165
- const segmentLength = Math.sqrt(dx * dx + dy * dy);
166
- const unitx = dx / segmentLength;
167
- const unity = dy / segmentLength;
168
- const basex = x2 - this.arrowLength * unitx;
169
- const basey = y2 - this.arrowLength * unity;
170
- const normalx = this.arrowAperture * unity;
171
- const normaly = -this.arrowAperture * unitx;
172
- ctx.beginPath();
173
- ctx.moveTo(x2, y2);
174
- ctx.lineTo(basex + normalx, basey + normaly);
175
- ctx.lineTo(basex - normalx, basey - normaly);
176
- ctx.lineTo(x2, y2);
177
- ctx.closePath();
178
- ctx.fill();
179
- }
180
-
181
- drawPathWithArrows(ctx: CanvasRenderingContext2D, path: any): void {
182
- let x1: any;
183
- let y1: any;
184
- let x2: any;
185
- let y2: any;
186
-
187
- ctx.beginPath();
188
-
189
- const arrows = [];
190
- for (const cmd of path.commands) {
191
- if (cmd.type === 'M') {
192
- if (x1 !== undefined) {
193
- arrows.push([ctx, x1, y1, x2, y2]);
194
- }
195
- ctx.moveTo(cmd.x, cmd.y);
196
- } else if (cmd.type === 'L') {
197
- ctx.lineTo(cmd.x, cmd.y);
198
- x1 = x2;
199
- y1 = y2;
200
- } else if (cmd.type === 'C') {
201
- ctx.bezierCurveTo(cmd.x1, cmd.y1, cmd.x2, cmd.y2, cmd.x, cmd.y);
202
- x1 = cmd.x2;
203
- y1 = cmd.y2;
204
- } else if (cmd.type === 'Q') {
205
- ctx.quadraticCurveTo(cmd.x1, cmd.y1, cmd.x, cmd.y);
206
- x1 = cmd.x1;
207
- y1 = cmd.y1;
208
- } else if (cmd.type === 'Z') {
209
- arrows.push([ctx, x1, y1, x2, y2]);
210
- ctx.closePath();
211
- }
212
- x2 = cmd.x;
213
- y2 = cmd.y;
214
- }
215
- if (path.fill) {
216
- ctx.fillStyle = path.fill;
217
- ctx.fill();
218
- }
219
- if (path.stroke) {
220
- ctx.strokeStyle = path.stroke;
221
- ctx.lineWidth = path.strokeWidth;
222
- ctx.stroke();
223
- }
224
- ctx.fillStyle = this.strokeColor;
225
-
226
- arrows.forEach((arrow) => this.drawArrow(arrow[0], arrow[1], arrow[2], arrow[3], arrow[4]));
227
- }
228
- }
@@ -1 +0,0 @@
1
- <div class="app-loading"></div>
@@ -1,26 +0,0 @@
1
- import { Component, OnInit } from '@angular/core';
2
- import { PresentationService } from '@app/core/services';
3
-
4
- @Component({
5
- selector: 'app-loading',
6
- templateUrl: './loading.component.html',
7
- styleUrls: ['./loading.component.scss']
8
- })
9
- export class LoadingComponent implements OnInit {
10
-
11
- isActivated = false;
12
-
13
- constructor(
14
- private presentationService: PresentationService
15
- ) { }
16
-
17
- ngOnInit() {
18
- this.presentationService._loadingScreen.subscribe((status: boolean) => {
19
- if (status) {
20
- this.isActivated = status;
21
- } else {
22
- setTimeout(() => this.isActivated = status, 1e3 / 3);
23
- }
24
- });
25
- }
26
- }
@@ -1,31 +0,0 @@
1
- <div id="{{id}}" class="modal" role="dialog" aria-labelledby="modal-title" aria-modal="true" *ngIf="enabled">
2
-
3
- <!-- Modal dialog -->
4
- <div class="modal__dialog" [class]="size">
5
-
6
- <!-- Modal content -->
7
- <div class="modal__content" [ngClass]="addContentStyles()">
8
-
9
- <!-- Modal header -->
10
- <div class="modal__header border-bottom" *ngIf="showHeader">
11
- <h4 class="modal__header-title" id="modal-title">{{title}}</h4>
12
- <button type="button" (click)="close()"><span class="material-icons">close</span></button>
13
- </div>
14
-
15
- <!-- Modal body -->
16
- <div class="modal__body">
17
- <ng-content></ng-content>
18
- </div>
19
-
20
- <!-- Modal footer -->
21
- <div class="modal__footer border-top" *ngIf="showFooter">
22
- <button type="button" class="btn btn-default" (click)="close()">Close</button>
23
- </div>
24
-
25
- </div>
26
-
27
- </div>
28
-
29
- </div>
30
-
31
- <div class="modal-bg" *ngIf="enabled"></div>
@@ -1,51 +0,0 @@
1
- import { Component, ElementRef, Input, OnDestroy, OnInit } from '@angular/core';
2
- import { ModalService } from '@app/core/services';
3
-
4
- @Component({
5
- selector: 'app-modal',
6
- templateUrl: './modal.component.html',
7
- styleUrls: ['./modal.component.scss']
8
- })
9
- export class ModalComponent implements OnInit, OnDestroy {
10
- @Input() id?: string;
11
- @Input() title = 'Modal';
12
- @Input() size = 'sm';
13
- @Input() rounded = 'rounded-none';
14
- @Input() shadow = 'shadow-none';
15
-
16
- @Input() showHeader = true;
17
- @Input() showFooter = true;
18
-
19
- enabled = false;
20
-
21
- private element: any;
22
-
23
- constructor(
24
- private modalService: ModalService,
25
- private el: ElementRef
26
- ) {
27
- this.element = el.nativeElement;
28
- }
29
-
30
- ngOnInit() {
31
- this.modalService.add(this);
32
- document.body.appendChild(this.element);
33
- }
34
-
35
- ngOnDestroy() {
36
- this.modalService.remove(this);
37
- this.element.remove();
38
- }
39
-
40
- addContentStyles() {
41
- return [this.rounded, this.shadow];
42
- }
43
-
44
- open() {
45
- this.enabled = true;
46
- }
47
-
48
- close() {
49
- this.enabled = false;
50
- }
51
- }
@@ -1,21 +0,0 @@
1
- <div class="paginator">
2
- <div class="paginator-block">
3
-
4
- <div class="paginator-panel">
5
- <a href="#" class="prev" title="Prev" [class.page-disabled]="deactivatePrev" (click)="onButtonClick('prev')"><i class="material-icons">arrow_left</i></a>
6
- <input type="text" class="form-control form-control-reset" maxlength="5" value="{{page}}" (keyup.enter)="handlePageInput($event)" (change)="handlePageInput($event)">
7
- <a href="#" class="next" title="Next" [class.page-disabled]="deactivateNext" (click)="onButtonClick('next')"><i class="material-icons">arrow_right</i></a>
8
- </div>
9
-
10
- <span class="paginator-counts" [attr.title]="resultSetCount"> Page {{page}} of {{pages}} - {{ resultSetTotal }} total.</span>
11
-
12
- <div class="paginator-results">
13
- <label>
14
- <select class="form-control form-control-reset" [(ngModel)]="limit" (change)="onSelectChange($event)">
15
- <option *ngFor="let item of limitOptions" [value]="item.value">{{item.title}}</option>
16
- </select>
17
- </label>
18
- </div>
19
-
20
- </div>
21
- </div>
@@ -1,3 +0,0 @@
1
- :host {
2
- flex-grow: 1;
3
- }
@@ -1,133 +0,0 @@
1
- import { Component, OnInit } from '@angular/core';
2
- import { DatabaseService } from '@app/core/services';
3
- import { QueryOptions } from '@main/types';
4
-
5
- @Component({
6
- selector: 'app-paginator',
7
- templateUrl: './paginator.component.html',
8
- styleUrls: ['./paginator.component.scss']
9
- })
10
- export class PaginatorComponent implements OnInit {
11
-
12
- resultSetCount = 0;
13
- resultSetTotal = 0;
14
-
15
- page = 1;
16
- pages = 1;
17
- limit = 100;
18
- offset = 0;
19
-
20
- deactivatePrev = false;
21
- deactivateNext = false;
22
-
23
- limitOptions: any[] = [
24
- { value: 100, title: '100' },
25
- { value: 150, title: '150' },
26
- { value: 200, title: '200' },
27
- { value: 250, title: '250' },
28
- { value: 300, title: '300' }
29
- ];
30
-
31
- constructor(
32
- private databaseService: DatabaseService
33
- ) { }
34
-
35
- ngOnInit(): void {
36
- this.databaseService.watchActivePage$.subscribe((result) => this.page = result);
37
-
38
- this.databaseService.watchResultSetCount$.subscribe((result) => this.resultSetCount = result);
39
-
40
- this.databaseService.watchResultSetTotal$.subscribe((result) => {
41
- this.resultSetTotal = result;
42
- const pages = Math.ceil(this.resultSetTotal / this.limit);
43
- this.pages = (pages) ? pages : 1;
44
- this.checkButtonStatus();
45
- });
46
- }
47
-
48
- getQueryOptions(): QueryOptions {
49
- return this.databaseService.getQueryOptions();
50
- }
51
-
52
- handlePageInput(event: any): void {
53
- const el = event.srcElement;
54
- const target = event.target;
55
- const page = target.value;
56
-
57
- if (page < 1) {
58
- this.page = 1;
59
- } else if (page > this.pages) {
60
- this.page = this.pages;
61
- } else {
62
- this.page = page;
63
- }
64
-
65
- this.calculateOffset();
66
-
67
- this.checkButtonStatus();
68
-
69
- this.paginate();
70
-
71
- if (event.keyCode === 13) {
72
- el.blur();
73
- }
74
- }
75
-
76
- onButtonClick(direction: string) {
77
- if (direction === 'next') {
78
- this.page++;
79
- } else {
80
- this.page--;
81
- }
82
-
83
- this.calculateOffset();
84
- this.checkButtonStatus();
85
- this.paginate();
86
- }
87
-
88
- onSelectChange(event: Event): void {
89
- const target = event.target as HTMLInputElement;
90
- this.limit = Number(target.value);
91
- this.databaseService.resetPage(1);
92
- this.calculateOffset();
93
- this.checkButtonStatus();
94
- this.paginate();
95
- }
96
-
97
- paginate(): void {
98
- const options: QueryOptions = {
99
- ...this.getQueryOptions(),
100
- skip: this.offset,
101
- take: this.limit
102
- };
103
-
104
- this.databaseService.execute(options);
105
- }
106
-
107
- checkButtonStatus(): void {
108
- if (this.resultSetTotal > this.limit) {
109
- if (this.page === 1) {
110
- this.setButtonStatus(true, false);
111
- } else if (this.page > 1 && this.page < this.pages) {
112
- this.setButtonStatus(false, false);
113
- } else {
114
- this.setButtonStatus(false, true);
115
- }
116
- } else {
117
- this.setButtonStatus(true, true);
118
- }
119
- }
120
-
121
- setButtonStatus(prev: boolean, next: boolean): void {
122
- this.deactivatePrev = prev;
123
- this.deactivateNext = next;
124
- }
125
-
126
- calculateOffset(): void {
127
- if (this.page === 1) {
128
- this.offset = 0;
129
- } else {
130
- this.offset = (this.page - 1) * this.limit;
131
- }
132
- }
133
- }