fontastic 0.1.3

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 (370) hide show
  1. package/.editorconfig +16 -0
  2. package/.eslintrc.json +54 -0
  3. package/.github/FUNDING.yml +12 -0
  4. package/.github/ISSUE_TEMPLATE/bug_report.md +29 -0
  5. package/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  6. package/.github/dependabot.yml +6 -0
  7. package/.github/pull_request_template.md +21 -0
  8. package/.github/stale.yml +17 -0
  9. package/.github/workflows/macos.yml +58 -0
  10. package/.github/workflows/ubuntu.yml +70 -0
  11. package/.github/workflows/windows.yml +64 -0
  12. package/.node-version +1 -0
  13. package/.vscode/launch.json +46 -0
  14. package/.vscode/tasks.json +49 -0
  15. package/CODE_OF_CONDUCT.md +45 -0
  16. package/CONTRIBUTING.md +72 -0
  17. package/LICENSE +21 -0
  18. package/README.md +111 -0
  19. package/_config.yml +1 -0
  20. package/angular.json +194 -0
  21. package/angular.webpack.js +32 -0
  22. package/app/Application.js +40 -0
  23. package/app/Application.ts +38 -0
  24. package/app/config/alert.ts +32 -0
  25. package/app/config/database.js +203 -0
  26. package/app/config/database.ts +202 -0
  27. package/app/config/index.js +20 -0
  28. package/app/config/index.ts +3 -0
  29. package/app/config/mimes.js +49 -0
  30. package/app/config/mimes.ts +54 -0
  31. package/app/config/system.js +497 -0
  32. package/app/config/system.ts +498 -0
  33. package/app/config/themes.ts +38 -0
  34. package/app/core/AppLogger.js +31 -0
  35. package/app/core/AppLogger.ts +38 -0
  36. package/app/core/ConfigManager.js +114 -0
  37. package/app/core/ConfigManager.ts +137 -0
  38. package/app/core/ConnectionManager.js +83 -0
  39. package/app/core/ConnectionManager.ts +95 -0
  40. package/app/core/FontCatalog.js +51 -0
  41. package/app/core/FontCatalog.ts +42 -0
  42. package/app/core/FontFinder.js +86 -0
  43. package/app/core/FontFinder.ts +96 -0
  44. package/app/core/FontInstaller.js +67 -0
  45. package/app/core/FontInstaller.ts +63 -0
  46. package/app/core/FontManager.js +165 -0
  47. package/app/core/FontManager.ts +172 -0
  48. package/app/core/FontObject.js +54 -0
  49. package/app/core/FontObject.ts +62 -0
  50. package/app/core/MessageHandler.js +272 -0
  51. package/app/core/MessageHandler.ts +337 -0
  52. package/app/core/SystemManager.js +140 -0
  53. package/app/core/SystemManager.ts +171 -0
  54. package/app/core/menu/Example.ts +280 -0
  55. package/app/core/menu/MenuBuilder.js +45 -0
  56. package/app/core/menu/MenuBuilder.ts +53 -0
  57. package/app/core/menu/templates/DarwinTemplate.js +127 -0
  58. package/app/core/menu/templates/DarwinTemplate.ts +142 -0
  59. package/app/core/menu/templates/SystemTemplate.js +124 -0
  60. package/app/core/menu/templates/SystemTemplate.ts +139 -0
  61. package/app/database/entity/Collection.schema.js +99 -0
  62. package/app/database/entity/Collection.schema.ts +68 -0
  63. package/app/database/entity/Logger.schema.js +50 -0
  64. package/app/database/entity/Logger.schema.ts +26 -0
  65. package/app/database/entity/Store.schema.js +165 -0
  66. package/app/database/entity/Store.schema.ts +116 -0
  67. package/app/database/entity/index.js +20 -0
  68. package/app/database/entity/index.ts +3 -0
  69. package/app/database/repository/Collection.repository.js +181 -0
  70. package/app/database/repository/Collection.repository.ts +190 -0
  71. package/app/database/repository/Logger.repository.js +25 -0
  72. package/app/database/repository/Logger.repository.ts +11 -0
  73. package/app/database/repository/Store.repository.js +328 -0
  74. package/app/database/repository/Store.repository.ts +358 -0
  75. package/app/database/repository/User.repository.js +12 -0
  76. package/app/database/repository/User.repository.ts +8 -0
  77. package/app/database/repository/index.js +20 -0
  78. package/app/database/repository/index.ts +3 -0
  79. package/app/enums/ChannelType.js +62 -0
  80. package/app/enums/ChannelType.ts +65 -0
  81. package/app/enums/StorageType.js +19 -0
  82. package/app/enums/index.js +19 -0
  83. package/app/enums/index.ts +2 -0
  84. package/app/enums/storageType.ts +14 -0
  85. package/app/helpers/command.js +28 -0
  86. package/app/helpers/command.ts +20 -0
  87. package/app/helpers/random.js +16 -0
  88. package/app/helpers/random.ts +12 -0
  89. package/app/main.js +82 -0
  90. package/app/main.ts +94 -0
  91. package/app/package-lock.json +2649 -0
  92. package/app/package.json +35 -0
  93. package/app/types/AppAlert.js +3 -0
  94. package/app/types/AppAlert.ts +8 -0
  95. package/app/types/AuthUser.js +7 -0
  96. package/app/types/AuthUser.ts +5 -0
  97. package/app/types/Breadcrumb.js +3 -0
  98. package/app/types/Breadcrumb.ts +5 -0
  99. package/app/types/ImportOptions.js +7 -0
  100. package/app/types/ImportOptions.ts +3 -0
  101. package/app/types/QueryOptions.js +3 -0
  102. package/app/types/QueryOptions.ts +12 -0
  103. package/app/types/SystemConfig.js +3 -0
  104. package/app/types/SystemConfig.ts +132 -0
  105. package/app/types/SystemStats.js +3 -0
  106. package/app/types/SystemStats.ts +7 -0
  107. package/app/types/SystemTheme.js +3 -0
  108. package/app/types/SystemTheme.ts +5 -0
  109. package/app/types/index.js +25 -0
  110. package/app/types/index.ts +8 -0
  111. package/docs/logo.png +0 -0
  112. package/docs/screenshots/readme.md +7 -0
  113. package/docs/screenshots/screen-grab1.png +0 -0
  114. package/docs/screenshots/screen-grab2.png +0 -0
  115. package/docs/screenshots/screen-grab3.png +0 -0
  116. package/e2e/main.spec.ts +59 -0
  117. package/e2e/playwright.config.ts +19 -0
  118. package/e2e/tsconfig.e2e.json +13 -0
  119. package/electron-builder.json +71 -0
  120. package/package.json +121 -0
  121. package/src/app/app-routing.module.ts +15 -0
  122. package/src/app/app.component.html +1 -0
  123. package/src/app/app.component.scss +0 -0
  124. package/src/app/app.component.spec.ts.dist +33 -0
  125. package/src/app/app.component.ts +37 -0
  126. package/src/app/app.module.ts +63 -0
  127. package/src/app/core/core.module.ts +11 -0
  128. package/src/app/core/model/AuthUserModel.ts +7 -0
  129. package/src/app/core/model/CustomThemeModel.ts +7 -0
  130. package/src/app/core/model/DbConnectionModel.ts +16 -0
  131. package/src/app/core/model/ImportOptionsModel.ts +5 -0
  132. package/src/app/core/model/LatestNewsModel.ts +7 -0
  133. package/src/app/core/model/SearchFormModel.ts +10 -0
  134. package/src/app/core/model/index.ts +6 -0
  135. package/src/app/core/services/alert/alert.service.spec.ts +22 -0
  136. package/src/app/core/services/alert/alert.service.ts +71 -0
  137. package/src/app/core/services/auth/auth.service.ts +30 -0
  138. package/src/app/core/services/boot/boot.service.ts +33 -0
  139. package/src/app/core/services/breadcrumb/breadcrumb.service.spec.ts +22 -0
  140. package/src/app/core/services/breadcrumb/breadcrumb.service.ts +30 -0
  141. package/src/app/core/services/config/config.service.ts +63 -0
  142. package/src/app/core/services/database/database.service.ts +286 -0
  143. package/src/app/core/services/electron/electron.service.spec.ts +12 -0
  144. package/src/app/core/services/electron/electron.service.ts +62 -0
  145. package/src/app/core/services/font/font.service.ts +79 -0
  146. package/src/app/core/services/gravatar/gravatar.service.spec.ts +16 -0
  147. package/src/app/core/services/gravatar/gravatar.service.ts +18 -0
  148. package/src/app/core/services/index.ts +14 -0
  149. package/src/app/core/services/message/message.service.ts +289 -0
  150. package/src/app/core/services/modal/modal.service.spec.ts +16 -0
  151. package/src/app/core/services/modal/modal.service.ts +34 -0
  152. package/src/app/core/services/news/news.service.ts +94 -0
  153. package/src/app/core/services/presentation/presentation.service.ts +341 -0
  154. package/src/app/core/services/utils/utils.service.spec.ts +12 -0
  155. package/src/app/core/services/utils/utils.service.ts +144 -0
  156. package/src/app/layout/aside/aside.component.html +9 -0
  157. package/src/app/layout/aside/aside.component.scss +1 -0
  158. package/src/app/layout/aside/aside.component.ts +26 -0
  159. package/src/app/layout/footer/footer.component.html +11 -0
  160. package/src/app/layout/footer/footer.component.scss +27 -0
  161. package/src/app/layout/footer/footer.component.ts +32 -0
  162. package/src/app/layout/header/header.component.html +35 -0
  163. package/src/app/layout/header/header.component.scss +60 -0
  164. package/src/app/layout/header/header.component.ts +229 -0
  165. package/src/app/layout/layout.component.html +14 -0
  166. package/src/app/layout/layout.component.scss +119 -0
  167. package/src/app/layout/layout.component.ts +23 -0
  168. package/src/app/layout/layout.module.ts +32 -0
  169. package/src/app/layout/layout.service.ts +13 -0
  170. package/src/app/layout/navigation/navigation.component.html +142 -0
  171. package/src/app/layout/navigation/navigation.component.scss +0 -0
  172. package/src/app/layout/navigation/navigation.component.ts +302 -0
  173. package/src/app/pages/main/grid/grid.component.html +160 -0
  174. package/src/app/pages/main/grid/grid.component.scss +3 -0
  175. package/src/app/pages/main/grid/grid.component.ts +98 -0
  176. package/src/app/pages/main/inspect/inspect.component.html +7 -0
  177. package/src/app/pages/main/inspect/inspect.component.scss +3 -0
  178. package/src/app/pages/main/inspect/inspect.component.ts +66 -0
  179. package/src/app/pages/main/main-routing.module.ts +30 -0
  180. package/src/app/pages/main/main.component.html +6 -0
  181. package/src/app/pages/main/main.component.scss +191 -0
  182. package/src/app/pages/main/main.component.ts +35 -0
  183. package/src/app/pages/main/main.module.ts +28 -0
  184. package/src/app/pages/main/preview/preview.component.html +46 -0
  185. package/src/app/pages/main/preview/preview.component.scss +0 -0
  186. package/src/app/pages/main/preview/preview.component.ts +239 -0
  187. package/src/app/pages/main/toolbar/toolbar.component.html +78 -0
  188. package/src/app/pages/main/toolbar/toolbar.component.scss +3 -0
  189. package/src/app/pages/main/toolbar/toolbar.component.ts +132 -0
  190. package/src/app/shared/components/alert/alert.component.html +9 -0
  191. package/src/app/shared/components/alert/alert.component.scss +0 -0
  192. package/src/app/shared/components/alert/alert.component.ts +37 -0
  193. package/src/app/shared/components/breadcrumbs/breadcrumbs.component.html +14 -0
  194. package/src/app/shared/components/breadcrumbs/breadcrumbs.component.scss +0 -0
  195. package/src/app/shared/components/breadcrumbs/breadcrumbs.component.ts +36 -0
  196. package/src/app/shared/components/button/button.component.html +3 -0
  197. package/src/app/shared/components/button/button.component.scss +2 -0
  198. package/src/app/shared/components/button/button.component.ts +22 -0
  199. package/src/app/shared/components/collection/create-collection/create-collection.component.html +41 -0
  200. package/src/app/shared/components/collection/create-collection/create-collection.component.scss +0 -0
  201. package/src/app/shared/components/collection/create-collection/create-collection.component.ts +68 -0
  202. package/src/app/shared/components/collection/form-collection/form-collection.component.html +1 -0
  203. package/src/app/shared/components/collection/form-collection/form-collection.component.scss +0 -0
  204. package/src/app/shared/components/collection/form-collection/form-collection.component.ts +15 -0
  205. package/src/app/shared/components/collection/update-collection/update-collection.component.html +40 -0
  206. package/src/app/shared/components/collection/update-collection/update-collection.component.scss +0 -0
  207. package/src/app/shared/components/collection/update-collection/update-collection.component.ts +71 -0
  208. package/src/app/shared/components/glyph-list/glyph-list.component.html +40 -0
  209. package/src/app/shared/components/glyph-list/glyph-list.component.scss +1 -0
  210. package/src/app/shared/components/glyph-list/glyph-list.component.ts +165 -0
  211. package/src/app/shared/components/glyph-view/glyph-view.component.html +23 -0
  212. package/src/app/shared/components/glyph-view/glyph-view.component.scss +0 -0
  213. package/src/app/shared/components/glyph-view/glyph-view.component.ts +228 -0
  214. package/src/app/shared/components/index.ts +16 -0
  215. package/src/app/shared/components/loading/loading.component.html +1 -0
  216. package/src/app/shared/components/loading/loading.component.scss +0 -0
  217. package/src/app/shared/components/loading/loading.component.ts +26 -0
  218. package/src/app/shared/components/modal/modal.component.html +31 -0
  219. package/src/app/shared/components/modal/modal.component.scss +0 -0
  220. package/src/app/shared/components/modal/modal.component.ts +51 -0
  221. package/src/app/shared/components/page-not-found/page-not-found.component.html +3 -0
  222. package/src/app/shared/components/page-not-found/page-not-found.component.scss +0 -0
  223. package/src/app/shared/components/page-not-found/page-not-found.component.ts +12 -0
  224. package/src/app/shared/components/paginator/paginator.component.html +21 -0
  225. package/src/app/shared/components/paginator/paginator.component.scss +3 -0
  226. package/src/app/shared/components/paginator/paginator.component.ts +133 -0
  227. package/src/app/shared/components/pairing/pairing.component.html +20 -0
  228. package/src/app/shared/components/pairing/pairing.component.scss +0 -0
  229. package/src/app/shared/components/pairing/pairing.component.ts +33 -0
  230. package/src/app/shared/components/search/search.component.html +54 -0
  231. package/src/app/shared/components/search/search.component.scss +10 -0
  232. package/src/app/shared/components/search/search.component.ts +77 -0
  233. package/src/app/shared/components/settings/database/database.component.html +151 -0
  234. package/src/app/shared/components/settings/database/database.component.scss +0 -0
  235. package/src/app/shared/components/settings/database/database.component.ts +145 -0
  236. package/src/app/shared/components/settings/general/general.component.html +170 -0
  237. package/src/app/shared/components/settings/general/general.component.scss +0 -0
  238. package/src/app/shared/components/settings/general/general.component.ts +150 -0
  239. package/src/app/shared/components/settings/logs/logs.component.html +44 -0
  240. package/src/app/shared/components/settings/logs/logs.component.scss +0 -0
  241. package/src/app/shared/components/settings/logs/logs.component.ts +37 -0
  242. package/src/app/shared/components/settings/news/news.component.html +41 -0
  243. package/src/app/shared/components/settings/news/news.component.scss +0 -0
  244. package/src/app/shared/components/settings/news/news.component.ts +52 -0
  245. package/src/app/shared/components/settings/settings.component.html +46 -0
  246. package/src/app/shared/components/settings/settings.component.scss +0 -0
  247. package/src/app/shared/components/settings/settings.component.ts +23 -0
  248. package/src/app/shared/components/settings/system/system.component.html +30 -0
  249. package/src/app/shared/components/settings/system/system.component.scss +0 -0
  250. package/src/app/shared/components/settings/system/system.component.ts +43 -0
  251. package/src/app/shared/components/settings/theme/theme.component.html +22 -0
  252. package/src/app/shared/components/settings/theme/theme.component.scss +0 -0
  253. package/src/app/shared/components/settings/theme/theme.component.ts +50 -0
  254. package/src/app/shared/components/spinner/spinner.component.html +1 -0
  255. package/src/app/shared/components/spinner/spinner.component.scss +0 -0
  256. package/src/app/shared/components/spinner/spinner.component.ts +26 -0
  257. package/src/app/shared/components/store/store.component.html +22 -0
  258. package/src/app/shared/components/store/store.component.scss +10 -0
  259. package/src/app/shared/components/store/store.component.ts +58 -0
  260. package/src/app/shared/components/tables/tables.component.html +47 -0
  261. package/src/app/shared/components/tables/tables.component.scss +10 -0
  262. package/src/app/shared/components/tables/tables.component.ts +81 -0
  263. package/src/app/shared/components/typescale/typescale.component.html +53 -0
  264. package/src/app/shared/components/typescale/typescale.component.scss +0 -0
  265. package/src/app/shared/components/typescale/typescale.component.ts +168 -0
  266. package/src/app/shared/directives/gravatar/gravatar.directive.ts +29 -0
  267. package/src/app/shared/directives/index.ts +2 -0
  268. package/src/app/shared/directives/webview/webview.directive.ts +8 -0
  269. package/src/app/shared/pipes/installable.pipe.ts +10 -0
  270. package/src/app/shared/pipes/prettybytes.pipe.ts +10 -0
  271. package/src/app/shared/pipes/safehtml.pipe.ts +10 -0
  272. package/src/app/shared/shared.module.ts +92 -0
  273. package/src/assets/.gitkeep +0 -0
  274. package/src/assets/fonts/fa/fa-brands-400.eot +0 -0
  275. package/src/assets/fonts/fa/fa-brands-400.svg +3535 -0
  276. package/src/assets/fonts/fa/fa-brands-400.ttf +0 -0
  277. package/src/assets/fonts/fa/fa-brands-400.woff +0 -0
  278. package/src/assets/fonts/fa/fa-brands-400.woff2 +0 -0
  279. package/src/assets/fonts/fa/fa-regular-400.eot +0 -0
  280. package/src/assets/fonts/fa/fa-regular-400.svg +803 -0
  281. package/src/assets/fonts/fa/fa-regular-400.ttf +0 -0
  282. package/src/assets/fonts/fa/fa-regular-400.woff +0 -0
  283. package/src/assets/fonts/fa/fa-regular-400.woff2 +0 -0
  284. package/src/assets/fonts/fa/fa-solid-900.eot +0 -0
  285. package/src/assets/fonts/fa/fa-solid-900.svg +4700 -0
  286. package/src/assets/fonts/fa/fa-solid-900.ttf +0 -0
  287. package/src/assets/fonts/fa/fa-solid-900.woff +0 -0
  288. package/src/assets/fonts/fa/fa-solid-900.woff2 +0 -0
  289. package/src/assets/fonts/md/MaterialIcons-Regular.eot +0 -0
  290. package/src/assets/fonts/md/MaterialIcons-Regular.ijmap +1 -0
  291. package/src/assets/fonts/md/MaterialIcons-Regular.svg +2373 -0
  292. package/src/assets/fonts/md/MaterialIcons-Regular.ttf +0 -0
  293. package/src/assets/fonts/md/MaterialIcons-Regular.woff +0 -0
  294. package/src/assets/fonts/md/MaterialIcons-Regular.woff2 +0 -0
  295. package/src/assets/fonts/md/README.md +9 -0
  296. package/src/assets/fonts/md/codepoints +932 -0
  297. package/src/assets/fonts/md/material-icons.css +36 -0
  298. package/src/assets/fonts/octicon/octicon.eot +0 -0
  299. package/src/assets/fonts/octicon/octicon.svg +378 -0
  300. package/src/assets/fonts/octicon/octicon.ttf +0 -0
  301. package/src/assets/fonts/octicon/octicon.woff +0 -0
  302. package/src/assets/fonts/octicon/octicon.woff2 +0 -0
  303. package/src/assets/fonts/roboto/Roboto-Bold-webfont.eot +0 -0
  304. package/src/assets/fonts/roboto/Roboto-Bold-webfont.svg +607 -0
  305. package/src/assets/fonts/roboto/Roboto-Bold-webfont.ttf +0 -0
  306. package/src/assets/fonts/roboto/Roboto-Bold-webfont.woff +0 -0
  307. package/src/assets/fonts/roboto/Roboto-Medium-webfont.eot +0 -0
  308. package/src/assets/fonts/roboto/Roboto-Medium-webfont.svg +607 -0
  309. package/src/assets/fonts/roboto/Roboto-Medium-webfont.ttf +0 -0
  310. package/src/assets/fonts/roboto/Roboto-Medium-webfont.woff +0 -0
  311. package/src/assets/fonts/roboto/Roboto-Regular-webfont.eot +0 -0
  312. package/src/assets/fonts/roboto/Roboto-Regular-webfont.svg +635 -0
  313. package/src/assets/fonts/roboto/Roboto-Regular-webfont.ttf +0 -0
  314. package/src/assets/fonts/roboto/Roboto-Regular-webfont.woff +0 -0
  315. package/src/assets/i18n/en.json +12 -0
  316. package/src/assets/icons/android-chrome-192x192.png +0 -0
  317. package/src/assets/icons/android-chrome-512x512.png +0 -0
  318. package/src/assets/icons/apple-touch-icon.png +0 -0
  319. package/src/assets/icons/favicon-16x16.png +0 -0
  320. package/src/assets/icons/favicon-32x32.png +0 -0
  321. package/src/assets/icons/favicon.ico +0 -0
  322. package/src/assets/icons/site.webmanifest +1 -0
  323. package/src/assets/images/electron.bmp +0 -0
  324. package/src/bin/activator +0 -0
  325. package/src/bin/activator.exe +0 -0
  326. package/src/environments/environment.dev.ts +4 -0
  327. package/src/environments/environment.prod.ts +4 -0
  328. package/src/environments/environment.ts +4 -0
  329. package/src/environments/environment.web.prod.ts +4 -0
  330. package/src/environments/environment.web.ts +4 -0
  331. package/src/favicon.ico +0 -0
  332. package/src/index.html +55 -0
  333. package/src/karma.conf.js +50 -0
  334. package/src/main.ts +15 -0
  335. package/src/polyfills-test.ts +1 -0
  336. package/src/polyfills.ts +53 -0
  337. package/src/styles/base/loading.scss +87 -0
  338. package/src/styles/base/reset.scss +408 -0
  339. package/src/styles/components/alert.scss +54 -0
  340. package/src/styles/components/buttons.scss +93 -0
  341. package/src/styles/components/forms.scss +96 -0
  342. package/src/styles/components/inputs.scss +113 -0
  343. package/src/styles/components/modal.scss +52 -0
  344. package/src/styles/components/paginator.scss +108 -0
  345. package/src/styles/components/scrollbox.scss +71 -0
  346. package/src/styles/components/spinner.scss +11 -0
  347. package/src/styles/components/tables.scss +42 -0
  348. package/src/styles/components/tabs.scss +44 -0
  349. package/src/styles/components/toolbar.scss +130 -0
  350. package/src/styles/fonts/md.scss +54 -0
  351. package/src/styles/fonts/octicons.scss +1351 -0
  352. package/src/styles/fonts/roboto.scss +32 -0
  353. package/src/styles/themes/dashboard.scss +294 -0
  354. package/src/styles/themes/euphoria.scss +283 -0
  355. package/src/styles/themes/mellow.scss +280 -0
  356. package/src/styles/themes/midnight.scss +283 -0
  357. package/src/styles/themes/passion.scss +280 -0
  358. package/src/styles/themes/swiss.scss +283 -0
  359. package/src/styles/tools/_functions.scss +5 -0
  360. package/src/styles/tools/_mixins.scss +159 -0
  361. package/src/styles/tools/_placeholders.scss +17 -0
  362. package/src/styles/tools/_variables.scss +67 -0
  363. package/src/styles.scss +37 -0
  364. package/src/test.ts +22 -0
  365. package/src/tsconfig.app.json +20 -0
  366. package/src/tsconfig.spec.json +23 -0
  367. package/src/typings.d.ts +9 -0
  368. package/tailwind.config.js +67 -0
  369. package/tsconfig.json +42 -0
  370. package/tsconfig.serve.json +27 -0
package/README.md ADDED
@@ -0,0 +1,111 @@
1
+ # Fontastic
2
+
3
+ ![Maintained][maintained-badge]
4
+ [![Make a pull request][prs-badge]][prs]
5
+ [![License][license-badge]](LICENSE.md)
6
+
7
+ [![Linux Build][linux-build-badge]][linux-build]
8
+ [![MacOS Build][macos-build-badge]][macos-build]
9
+ [![Windows Build][windows-build-badge]][windows-build]
10
+
11
+ [![Watch on GitHub][github-watch-badge]][github-watch]
12
+ [![Star on GitHub][github-star-badge]][github-star]
13
+ [![Tweet][twitter-badge]][twitter]
14
+
15
+ Fontastic is a stunning font management and cataloging application.
16
+
17
+ - A gorgeous interface.
18
+ - Font cataloging and management.
19
+ - Multi platform font installation.
20
+ - Multi database support.
21
+ - Imports to catalog or inplace.
22
+ - A selection of gorgeous themes.
23
+ - Open source and completely free.
24
+
25
+ ## Getting Started
26
+
27
+ 🔧 Fontastic is under active development, some features may break or change over time.
28
+
29
+ *Clone this repository locally:*
30
+
31
+ ``` bash
32
+ git clone https://github.com/tomshaw/fontastic.git
33
+ ```
34
+
35
+ Please use `npm` as dependencies manager.
36
+
37
+ Install dependencies with npm.
38
+
39
+ ``` bash
40
+ npm install
41
+ ```
42
+
43
+ Run the application in development mode.
44
+
45
+ ``` bash
46
+ npm start
47
+ ```
48
+
49
+ ---
50
+
51
+ ## Activator
52
+
53
+ Fontastic uses [Activator](https://github.com/tomshaw/activator) a multi platform Go executable for font installation and management. 📡
54
+
55
+ ## Screen Shots
56
+
57
+ As part of the documentation you can check out [screenshots here.](docs/screenshots/readme.md)
58
+
59
+ ## Libraries Used
60
+
61
+ Fontastic was created with [Angular Electron](https://github.com/maximegris/angular-electron) an excellent boilerplate for Angular Electron applications
62
+
63
+ + [Electron.js](https://electronjs.org) - Build cross platform desktop apps with JavaScript, HTML, and CSS.
64
+ + [Angular.js](https://github.com/angular/angular) - Development platform for building web and desktop applications
65
+ + [Typeorm](https://github.com/typeorm/typeorm) - Data-Mapper ORM for TypeScript, ES7, ES6, ES5 with multi database support.
66
+ + [opentype.js](https://github.com/opentypejs/opentype.js) - JavaScript parser and writer for TrueType and OpenType fonts.
67
+
68
+ ## Resources
69
+ Need free fonts for testing?
70
+
71
+ + [IBM Plex](https://github.com/IBM/plex) Meet the IBM Plex typeface, our new corporate typeface family.
72
+ + [Inter](https://github.com/rsms/inter/releases/tag/v3.19) A typeface carefully crafted & designed for computer screens.
73
+ + [Type Wolf](https://www.typewolf.com/google-fonts) An outstanding typography resource for designers.
74
+ + [Font Squirrell](https://www.fontsquirrel.com/) Great resource of hand-picked, high-quality, commercial-use fonts.
75
+ + [Google Fonts](https://github.com/google/fonts) Download all 3K Google Fonts. Great for testing processing speeds.
76
+
77
+ If you're using Fontastic, consider 🌟 [starring or contributing][repo] on GitHub! 🎉
78
+
79
+ ## Contributing
80
+
81
+ The contribution guide can be found here [Contribution Guide](CONTRIBUTING.md).
82
+
83
+ ## Code of Conduct
84
+
85
+ Please review and abide by the [Code of Conduct](CODE_OF_CONDUCT.md). 🚫
86
+
87
+ ## License
88
+
89
+ Fontastic is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT).
90
+
91
+ [repo]: https://github.com/tomshaw/fontastic
92
+
93
+ [maintained-badge]: https://img.shields.io/badge/maintained-yes-brightgreen
94
+ [license-badge]: https://img.shields.io/badge/license-MIT-blue.svg
95
+ [license]: https://github.com/tomshaw/fontastic/blob/main/LICENSE.md
96
+ [prs-badge]: https://img.shields.io/badge/PRs-welcome-red.svg
97
+ [prs]: http://makeapullrequest.com
98
+
99
+ [linux-build-badge]: https://github.com/tomshaw/fontastic/workflows/Linux%20Build/badge.svg
100
+ [linux-build]: https://github.com/tomshaw/fontastic/actions?query=workflow%3A%22Linux+Build%22
101
+ [macos-build-badge]: https://github.com/tomshaw/fontastic/workflows/MacOS%20Build/badge.svg
102
+ [macos-build]: https://github.com/tomshaw/fontastic/actions?query=workflow%3A%22MacOS+Build%22
103
+ [windows-build-badge]: https://github.com/tomshaw/fontastic/workflows/Windows%20Build/badge.svg
104
+ [windows-build]: https://github.com/tomshaw/fontastic/actions?query=workflow%3A%22Windows+Build%22
105
+
106
+ [github-watch-badge]: https://img.shields.io/github/watchers/tomshaw/fontastic.svg?style=social
107
+ [github-watch]: https://github.com/tomshaw/fontastic/watchers
108
+ [github-star-badge]: https://img.shields.io/github/stars/tomshaw/fontastic.svg?style=social
109
+ [github-star]: https://github.com/tomshaw/fontastic/stargazers
110
+ [twitter]: https://twitter.com/intent/tweet?text=Check%20out%20fontastic!%20https://github.com/tomshaw/fontastic%20%F0%9F%91%8D
111
+ [twitter-badge]: https://img.shields.io/twitter/url/https/github.com/tomshaw/fontastic.svg?style=social
package/_config.yml ADDED
@@ -0,0 +1 @@
1
+ theme: jekyll-theme-architect
package/angular.json ADDED
@@ -0,0 +1,194 @@
1
+ {
2
+ "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
3
+ "cli": {
4
+ "defaultCollection": "@angular-eslint/schematics",
5
+ "analytics": false
6
+ },
7
+ "version": 1,
8
+ "newProjectRoot": "projects",
9
+ "projects": {
10
+ "angular-electron": {
11
+ "root": "",
12
+ "sourceRoot": "src",
13
+ "projectType": "application",
14
+ "schematics": {
15
+ "@schematics/angular:application": {
16
+ "strict": true
17
+ },
18
+ "@schematics/angular:component": {
19
+ "style": "scss"
20
+ }
21
+ },
22
+ "prefix": "app",
23
+ "architect": {
24
+ "build": {
25
+ "builder": "@angular-builders/custom-webpack:browser",
26
+ "options": {
27
+ "outputPath": "dist",
28
+ "index": "src/index.html",
29
+ "main": "src/main.ts",
30
+ "tsConfig": "src/tsconfig.app.json",
31
+ "polyfills": "src/polyfills.ts",
32
+ "inlineStyleLanguage": "scss",
33
+ "assets": [
34
+ "src/favicon.ico",
35
+ "src/assets"
36
+ ],
37
+ "styles": [
38
+ "src/styles/fonts/roboto.scss",
39
+ "src/styles/fonts/md.scss",
40
+ "src/styles.scss"
41
+ ],
42
+ "scripts": [],
43
+ "customWebpackConfig": {
44
+ "path": "./angular.webpack.js",
45
+ "replaceDuplicatePlugins": true
46
+ },
47
+ "allowedCommonJsDependencies": [
48
+ "rxjs",
49
+ "opentype.js"
50
+ ]
51
+ },
52
+ "configurations": {
53
+ "dev": {
54
+ "optimization": false,
55
+ "outputHashing": "none",
56
+ "sourceMap": true,
57
+ "namedChunks": false,
58
+ "aot": false,
59
+ "extractLicenses": true,
60
+ "vendorChunk": false,
61
+ "buildOptimizer": false,
62
+ "fileReplacements": [
63
+ {
64
+ "replace": "src/environments/environment.ts",
65
+ "with": "src/environments/environment.dev.ts"
66
+ }
67
+ ]
68
+ },
69
+ "production": {
70
+ "optimization": true,
71
+ "outputHashing": "all",
72
+ "sourceMap": false,
73
+ "namedChunks": false,
74
+ "aot": true,
75
+ "extractLicenses": true,
76
+ "vendorChunk": false,
77
+ "buildOptimizer": true,
78
+ "fileReplacements": [
79
+ {
80
+ "replace": "src/environments/environment.ts",
81
+ "with": "src/environments/environment.prod.ts"
82
+ }
83
+ ]
84
+ },
85
+ "web": {
86
+ "optimization": false,
87
+ "outputHashing": "none",
88
+ "sourceMap": true,
89
+ "namedChunks": false,
90
+ "aot": false,
91
+ "extractLicenses": true,
92
+ "vendorChunk": false,
93
+ "buildOptimizer": false,
94
+ "fileReplacements": [
95
+ {
96
+ "replace": "src/environments/environment.ts",
97
+ "with": "src/environments/environment.web.ts"
98
+ }
99
+ ]
100
+ },
101
+ "web-production": {
102
+ "optimization": true,
103
+ "outputHashing": "all",
104
+ "sourceMap": false,
105
+ "namedChunks": false,
106
+ "aot": true,
107
+ "extractLicenses": true,
108
+ "vendorChunk": false,
109
+ "buildOptimizer": true,
110
+ "fileReplacements": [
111
+ {
112
+ "replace": "src/environments/environment.ts",
113
+ "with": "src/environments/environment.web.prod.ts"
114
+ }
115
+ ]
116
+ }
117
+ }
118
+ },
119
+ "serve": {
120
+ "builder": "@angular-builders/custom-webpack:dev-server",
121
+ "options": {
122
+ "browserTarget": "angular-electron:build"
123
+ },
124
+ "configurations": {
125
+ "dev": {
126
+ "browserTarget": "angular-electron:build:dev"
127
+ },
128
+ "production": {
129
+ "browserTarget": "angular-electron:build:production"
130
+ },
131
+ "web": {
132
+ "browserTarget": "angular-electron:build:web"
133
+ },
134
+ "web-production": {
135
+ "browserTarget": "angular-electron:build:web-production"
136
+ }
137
+ }
138
+ },
139
+ "extract-i18n": {
140
+ "builder": "@angular-devkit/build-angular:extract-i18n",
141
+ "options": {
142
+ "browserTarget": "angular-electron:build"
143
+ }
144
+ },
145
+ "test": {
146
+ "builder": "@angular-builders/custom-webpack:karma",
147
+ "options": {
148
+ "main": "src/test.ts",
149
+ "polyfills": "src/polyfills-test.ts",
150
+ "tsConfig": "src/tsconfig.spec.json",
151
+ "karmaConfig": "src/karma.conf.js",
152
+ "inlineStyleLanguage": "scss",
153
+ "scripts": [],
154
+ "styles": [
155
+ "src/styles.scss"
156
+ ],
157
+ "assets": [
158
+ "src/favicon.ico",
159
+ "src/assets"
160
+ ],
161
+ "customWebpackConfig": {
162
+ "path": "./angular.webpack.js",
163
+ "replaceDuplicatePlugins": true
164
+ }
165
+ }
166
+ },
167
+ "lint": {
168
+ "builder": "@angular-eslint/builder:lint",
169
+ "options": {
170
+ "lintFilePatterns": [
171
+ "src/**/*.ts",
172
+ "src/**/*.html"
173
+ ]
174
+ }
175
+ }
176
+ }
177
+ },
178
+ "angular-electron-e2e": {
179
+ "root": "e2e",
180
+ "projectType": "application",
181
+ "architect": {
182
+ "lint": {
183
+ "builder": "@angular-eslint/builder:lint",
184
+ "options": {
185
+ "lintFilePatterns": [
186
+ "e2e/**/*.ts"
187
+ ]
188
+ }
189
+ }
190
+ }
191
+ }
192
+ },
193
+ "defaultProject": "angular-electron"
194
+ }
@@ -0,0 +1,32 @@
1
+ //Polyfill Node.js core modules in Webpack. This module is only needed for webpack 5+.
2
+ const NodePolyfillPlugin = require("node-polyfill-webpack-plugin");
3
+
4
+ /**
5
+ * Custom angular webpack configuration
6
+ */
7
+ module.exports = (config, options) => {
8
+ config.target = 'electron-renderer';
9
+
10
+ if (options.fileReplacements) {
11
+ for(let fileReplacement of options.fileReplacements) {
12
+ if (fileReplacement.replace !== 'src/environments/environment.ts') {
13
+ continue;
14
+ }
15
+
16
+ let fileReplacementParts = fileReplacement['with'].split('.');
17
+ if (fileReplacementParts.length > 1 && ['web'].indexOf(fileReplacementParts[1]) >= 0) {
18
+ config.target = 'web';
19
+ }
20
+ break;
21
+ }
22
+ }
23
+
24
+ config.plugins = [
25
+ ...config.plugins,
26
+ new NodePolyfillPlugin({
27
+ excludeAliases: ["console"]
28
+ })
29
+ ];
30
+
31
+ return config;
32
+ }
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const SystemManager_1 = require("./core/SystemManager");
13
+ const ConfigManager_1 = require("./core/ConfigManager");
14
+ const ConnectionManager_1 = require("./core/ConnectionManager");
15
+ const FontManager_1 = require("./core/FontManager");
16
+ const MessageHandler_1 = require("./core/MessageHandler");
17
+ const MenuBuilder_1 = require("./core/menu/MenuBuilder");
18
+ class Application {
19
+ constructor(machineId, isProduction, mainWindow) {
20
+ this.machineId = machineId;
21
+ this.isProduction = isProduction;
22
+ this.mainWindow = mainWindow;
23
+ }
24
+ initialize() {
25
+ return __awaiter(this, void 0, void 0, function* () {
26
+ const systemManager = new SystemManager_1.default(this.machineId, this.isProduction);
27
+ const configManager = new ConfigManager_1.default(systemManager);
28
+ configManager.initialize();
29
+ const connectionManager = new ConnectionManager_1.default(configManager);
30
+ yield connectionManager.initialize();
31
+ const fontManager = new FontManager_1.default(systemManager, configManager, connectionManager);
32
+ const menuBuilder = new MenuBuilder_1.default(this.mainWindow, this.isProduction);
33
+ menuBuilder.initialize();
34
+ const messageHandler = new MessageHandler_1.default(systemManager, configManager, connectionManager, fontManager);
35
+ messageHandler.initialize();
36
+ });
37
+ }
38
+ }
39
+ exports.default = Application;
40
+ //# sourceMappingURL=Application.js.map
@@ -0,0 +1,38 @@
1
+ import SystemManager from "./core/SystemManager";
2
+ import ConfigManager from "./core/ConfigManager";
3
+ import ConnectionManager from "./core/ConnectionManager";
4
+ import FontManager from "./core/FontManager";
5
+ import MessageHandler from "./core/MessageHandler";
6
+ import MenuBuilder from "./core/menu/MenuBuilder";
7
+ import { BrowserWindow } from "electron";
8
+
9
+ export default class Application {
10
+
11
+ machineId: string;
12
+ isProduction: boolean;
13
+ mainWindow: BrowserWindow;
14
+
15
+ constructor(machineId: string, isProduction: boolean, mainWindow: BrowserWindow) {
16
+ this.machineId = machineId;
17
+ this.isProduction = isProduction;
18
+ this.mainWindow = mainWindow;
19
+ }
20
+
21
+ async initialize() {
22
+ const systemManager = new SystemManager(this.machineId, this.isProduction);
23
+
24
+ const configManager = new ConfigManager(systemManager);
25
+ configManager.initialize();
26
+
27
+ const connectionManager = new ConnectionManager(configManager);
28
+ await connectionManager.initialize()
29
+
30
+ const fontManager = new FontManager(systemManager, configManager, connectionManager);
31
+
32
+ const menuBuilder = new MenuBuilder(this.mainWindow, this.isProduction);
33
+ menuBuilder.initialize();
34
+
35
+ const messageHandler = new MessageHandler(systemManager, configManager, connectionManager, fontManager);
36
+ messageHandler.initialize();
37
+ }
38
+ }
@@ -0,0 +1,32 @@
1
+ export const AlertTimeout = 5e3;
2
+
3
+ export const AlertProps = {
4
+ type: '',
5
+ message: '',
6
+ icon: '',
7
+ class: '',
8
+ keep: false,
9
+ timeout: 10e3
10
+ }
11
+
12
+ export const AlertTypes: any[] = [{
13
+ type: 'info',
14
+ icon: 'check_circle',
15
+ class: 'app-alert-info',
16
+ }, {
17
+ type: 'success',
18
+ icon: 'done',
19
+ class: 'app-alert-success',
20
+ }, {
21
+ type: 'error',
22
+ icon: 'error',
23
+ class: 'app-alert-error',
24
+ }, {
25
+ type: 'warning',
26
+ icon: 'warning',
27
+ class: 'app-alert-warning',
28
+ }, {
29
+ type: 'danger',
30
+ icon: 'error_outline',
31
+ class: 'app-alert-danger',
32
+ }];
@@ -0,0 +1,203 @@
1
+ "use strict";
2
+ /**
3
+ * @see https://typeorm.io/logging
4
+ * @see https://github.com/typeorm/typeorm/issues/390
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.searchDbColumns = exports.dbColumns = exports.database = void 0;
8
+ exports.database = {
9
+ drivers: [
10
+ "sqlite",
11
+ "mysql",
12
+ "sqlserver",
13
+ "oracle",
14
+ "hana",
15
+ "sqljs"
16
+ ],
17
+ connections: [{
18
+ name: "default",
19
+ type: "sqlite",
20
+ title: "Default Database.",
21
+ description: "The default application database.",
22
+ enabled: true,
23
+ synchronize: true,
24
+ database: "fontastic.sqlite",
25
+ charset: "utf8mb4_unicode_ci",
26
+ logger: "simple-console",
27
+ logging: false
28
+ }, {
29
+ name: "mysql",
30
+ type: "mysql",
31
+ title: "Development Database.",
32
+ description: "An example MySQL database.",
33
+ enabled: false,
34
+ host: "localhost",
35
+ port: 3306,
36
+ username: "root",
37
+ password: "password",
38
+ database: "project_fontastic",
39
+ charset: "utf8mb4_unicode_ci",
40
+ synchronize: true,
41
+ logger: "simple-console",
42
+ logging: false
43
+ }],
44
+ loggers: [
45
+ {
46
+ title: "Simple Console",
47
+ value: "simple-console"
48
+ },
49
+ {
50
+ title: "Advanced Console",
51
+ value: "advanced-console"
52
+ },
53
+ {
54
+ title: "File Logging",
55
+ value: "file"
56
+ },
57
+ {
58
+ title: "Debug Logging",
59
+ value: "debug"
60
+ }
61
+ ]
62
+ };
63
+ exports.dbColumns = [
64
+ {
65
+ name: 'id',
66
+ searchable: false,
67
+ },
68
+ {
69
+ name: 'collection_id',
70
+ searchable: false,
71
+ },
72
+ {
73
+ name: 'file_name',
74
+ searchable: true,
75
+ },
76
+ {
77
+ name: 'file_path',
78
+ searchable: true,
79
+ },
80
+ {
81
+ name: 'file_size',
82
+ searchable: false,
83
+ },
84
+ {
85
+ name: 'file_size_pretty',
86
+ searchable: false,
87
+ },
88
+ {
89
+ name: 'file_type',
90
+ searchable: false,
91
+ },
92
+ {
93
+ name: 'installable',
94
+ searchable: false,
95
+ },
96
+ {
97
+ name: 'activated',
98
+ searchable: false,
99
+ },
100
+ {
101
+ name: 'temporary',
102
+ searchable: false,
103
+ },
104
+ {
105
+ name: 'favorite',
106
+ searchable: false,
107
+ },
108
+ {
109
+ name: 'system',
110
+ searchable: false,
111
+ },
112
+ {
113
+ name: 'compatible_full_name',
114
+ searchable: true,
115
+ },
116
+ {
117
+ name: 'copyright',
118
+ searchable: true,
119
+ },
120
+ {
121
+ name: 'description',
122
+ searchable: true,
123
+ },
124
+ {
125
+ name: 'designer',
126
+ searchable: true,
127
+ },
128
+ {
129
+ name: 'designer_url',
130
+ searchable: true,
131
+ },
132
+ {
133
+ name: 'font_family',
134
+ searchable: true,
135
+ },
136
+ {
137
+ name: 'font_subfamily',
138
+ searchable: true,
139
+ },
140
+ {
141
+ name: 'full_name',
142
+ searchable: true,
143
+ },
144
+ {
145
+ name: 'license',
146
+ searchable: true,
147
+ },
148
+ {
149
+ name: 'license_url',
150
+ searchable: true,
151
+ },
152
+ {
153
+ name: 'manufacturer',
154
+ searchable: true,
155
+ },
156
+ {
157
+ name: 'manufacturer',
158
+ searchable: true,
159
+ },
160
+ {
161
+ name: 'post_script_name',
162
+ searchable: true,
163
+ },
164
+ {
165
+ name: 'preferred_family',
166
+ searchable: true,
167
+ },
168
+ {
169
+ name: 'preferred_sub_family',
170
+ searchable: true,
171
+ },
172
+ {
173
+ name: 'sample_text',
174
+ searchable: true,
175
+ },
176
+ {
177
+ name: 'trademark',
178
+ searchable: true,
179
+ },
180
+ {
181
+ name: 'unique_id',
182
+ searchable: true,
183
+ },
184
+ {
185
+ name: 'version',
186
+ searchable: true,
187
+ },
188
+ {
189
+ name: 'created_at',
190
+ searchable: false,
191
+ },
192
+ {
193
+ name: 'updated_at',
194
+ searchable: false,
195
+ }
196
+ ];
197
+ exports.searchDbColumns = exports.dbColumns.reduce((prev, curr) => {
198
+ if (curr.searchable) {
199
+ prev.push(curr.name);
200
+ }
201
+ return prev;
202
+ }, []);
203
+ //# sourceMappingURL=database.js.map