@networkpro/web 0.13.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (293) hide show
  1. package/CODE_OF_CONDUCT.md +172 -0
  2. package/LICENSE.md +4 -4
  3. package/README.md +13 -12
  4. package/_headers +2 -0
  5. package/assets/bin/contact.vcf +13 -0
  6. package/assets/bin/contact@s.neteng.pro.aexpk +17 -0
  7. package/assets/bin/contact@s.neteng.pro.asc +17 -0
  8. package/assets/bin/github@sl.neteng.cc.aexpk +29 -0
  9. package/assets/bin/github@sl.neteng.cc.asc +29 -0
  10. package/assets/bin/linksheet.json +8 -0
  11. package/assets/bin/support@neteng.pro.aexpk +47 -0
  12. package/assets/bin/support@neteng.pro.asc +47 -0
  13. package/assets/consulting-terms.pdf +0 -0
  14. package/eslint.config.mjs +112 -0
  15. package/jsconfig.json +28 -0
  16. package/netlify.toml +3 -0
  17. package/package.json +63 -60
  18. package/playwright.config.js +79 -0
  19. package/postcss.config.mjs +14 -0
  20. package/scripts/bundleCss.js +40 -0
  21. package/src/app.d.ts +15 -0
  22. package/src/app.html +83 -0
  23. package/src/demo.spec.js +14 -0
  24. package/src/lib/components/Badges.svelte +74 -0
  25. package/src/lib/components/ContainerSection.svelte +19 -0
  26. package/src/lib/components/FullWidthSection.svelte +13 -0
  27. package/src/lib/components/LegalNav.svelte +75 -0
  28. package/src/lib/components/Logo.svelte +110 -0
  29. package/src/lib/components/MetaTags.svelte +41 -0
  30. package/src/lib/components/SocialMedia.svelte +70 -0
  31. package/src/lib/components/foss/FossFeatures.svelte +24 -0
  32. package/src/lib/components/foss/FossItemContent.svelte +153 -0
  33. package/src/lib/components/layout/Footer.svelte +188 -0
  34. package/src/lib/components/layout/HeaderDefault.svelte +86 -0
  35. package/src/lib/components/layout/HeaderHome.svelte +84 -0
  36. package/src/lib/data/fossData.js +233 -0
  37. package/src/lib/images.js +77 -0
  38. package/src/lib/img/badges/cc-by-badge.png +0 -0
  39. package/src/lib/img/badges/gpl-badge.svg +1 -0
  40. package/src/lib/img/by.svg +1 -0
  41. package/src/lib/img/cc.svg +1 -0
  42. package/src/lib/img/logo-web.png +0 -0
  43. package/src/lib/img/logo-web.webp +0 -0
  44. package/src/lib/img/obtainium.webp +0 -0
  45. package/src/lib/img/posts/acode.png +0 -0
  46. package/src/lib/img/posts/acode.webp +0 -0
  47. package/src/lib/img/posts/linksheet.png +0 -0
  48. package/src/lib/img/posts/linksheet.webp +0 -0
  49. package/src/lib/img/posts/pmx.png +0 -0
  50. package/src/lib/img/posts/pmx.webp +0 -0
  51. package/src/lib/img/posts/tosdr.png +0 -0
  52. package/src/lib/img/posts/tosdr.webp +0 -0
  53. package/src/lib/img/posts/urlcheck.png +0 -0
  54. package/src/lib/img/posts/urlcheck.webp +0 -0
  55. package/src/lib/index.js +43 -0
  56. package/src/lib/meta.js +73 -0
  57. package/src/lib/pages/AboutContent.svelte +294 -0
  58. package/src/lib/pages/FossContent.svelte +109 -0
  59. package/src/lib/pages/HomeContent.svelte +120 -0
  60. package/src/lib/pages/LicenseContent.svelte +486 -0
  61. package/src/lib/pages/PrivacyContent.svelte +249 -0
  62. package/src/lib/pages/TermsConditionsContent.svelte +240 -0
  63. package/src/lib/pages/TermsUseContent.svelte +236 -0
  64. package/src/lib/registerServiceWorker.js +65 -0
  65. package/src/lib/styles/css/brands.css +76 -0
  66. package/src/lib/styles/css/brands.min.css +6 -0
  67. package/src/lib/styles/css/default.css +454 -0
  68. package/src/lib/styles/css/fontawesome.min.css +9 -0
  69. package/src/lib/styles/css/global.css +10 -0
  70. package/src/lib/styles/css/normalize.css +349 -0
  71. package/src/lib/styles/css/offline.css +120 -0
  72. package/src/lib/styles/css/solid.min.css +6 -0
  73. package/src/lib/styles/css/style.css +310 -0
  74. package/src/lib/styles/fa-global.css +10 -0
  75. package/src/lib/styles/global.min.css +9 -0
  76. package/src/lib/styles/index.js +11 -0
  77. package/src/lib/styles/webfonts/fa-brands-400.ttf +0 -0
  78. package/src/lib/styles/webfonts/fa-brands-400.woff2 +0 -0
  79. package/src/lib/styles/webfonts/fa-solid-900.ttf +0 -0
  80. package/src/lib/styles/webfonts/fa-solid-900.woff2 +0 -0
  81. package/src/routes/+error.svelte +43 -0
  82. package/src/routes/+layout.js +38 -0
  83. package/src/routes/+layout.svelte +113 -0
  84. package/src/routes/+page.server.js +27 -0
  85. package/src/routes/+page.svelte +82 -0
  86. package/src/routes/about/+page.server.js +17 -0
  87. package/src/routes/about/+page.svelte +66 -0
  88. package/src/routes/contact/+page.server.js +24 -0
  89. package/src/routes/example.svx +9 -0
  90. package/src/routes/foss-spotlight/+page.server.js +17 -0
  91. package/src/routes/foss-spotlight/+page.svelte +68 -0
  92. package/src/routes/license/+page.server.js +17 -0
  93. package/src/routes/license/+page.svelte +68 -0
  94. package/src/routes/page.svelte.test.js +29 -0
  95. package/src/routes/privacy-policy/+page.server.js +17 -0
  96. package/src/routes/privacy-policy/+page.svelte +68 -0
  97. package/src/routes/privacy-rights/+page.server.js +24 -0
  98. package/src/routes/terms-conditions/+page.server.js +17 -0
  99. package/src/routes/terms-conditions/+page.svelte +68 -0
  100. package/src/routes/terms-of-use/+page.server.js +17 -0
  101. package/src/routes/terms-of-use/+page.svelte +68 -0
  102. package/src/service-worker.d.ts +4 -0
  103. package/src/service-worker.js +90 -0
  104. package/static/icon-512x512-maskable.png +0 -0
  105. package/static/icon-contact.png +0 -0
  106. package/static/icon-services.png +0 -0
  107. package/static/img/qr/pgp-github.png +0 -0
  108. package/static/img/svelte.png +0 -0
  109. package/static/manifest.json +64 -0
  110. package/static/offline.html +79 -0
  111. package/static/offline.min.css +7 -0
  112. package/{robots.txt → static/robots.txt} +0 -2
  113. package/static/sitemap.xml +102 -0
  114. package/stylelint.config.js +118 -0
  115. package/svelte.config.js +56 -0
  116. package/tests/app.spec.js +67 -0
  117. package/tests/mobile.spec.js +58 -0
  118. package/tests-examples/demo-todo-app.spec.js +504 -0
  119. package/tsconfig.custom.json +39 -0
  120. package/vite.config.js +19 -0
  121. package/vitest-setup-client.js +33 -0
  122. package/vitest.config.client.js +34 -0
  123. package/vitest.config.server.js +30 -0
  124. package/404.html +0 -84
  125. package/about.html +0 -334
  126. package/about.html.br +0 -0
  127. package/about.html.gz +0 -0
  128. package/css/default.css +0 -1
  129. package/css/normalize.css +0 -1
  130. package/css/style.css +0 -1
  131. package/docs/404.html +0 -1187
  132. package/docs/assets/external/avatars.githubusercontent.com/u/170266279.png +0 -0
  133. package/docs/assets/external/img.shields.io/badge/GitHub_Package_Registry-white.ed8def48.svg +0 -1
  134. package/docs/assets/external/img.shields.io/badge/npmjs-white.681714c1.svg +0 -1
  135. package/docs/assets/external/mirrors.creativecommons.org/presskit/icons/by.svg +0 -20
  136. package/docs/assets/external/mirrors.creativecommons.org/presskit/icons/cc.svg +0 -27
  137. package/docs/assets/external/unpkg.com/mermaid@11/dist/mermaid.min.js +0 -2607
  138. package/docs/assets/images/favicon.png +0 -0
  139. package/docs/assets/javascripts/bundle.c8b220af.min.js +0 -16
  140. package/docs/assets/javascripts/bundle.c8b220af.min.js.map +0 -7
  141. package/docs/assets/javascripts/lunr/min/lunr.ar.min.js +0 -1
  142. package/docs/assets/javascripts/lunr/min/lunr.da.min.js +0 -18
  143. package/docs/assets/javascripts/lunr/min/lunr.de.min.js +0 -18
  144. package/docs/assets/javascripts/lunr/min/lunr.du.min.js +0 -18
  145. package/docs/assets/javascripts/lunr/min/lunr.el.min.js +0 -1
  146. package/docs/assets/javascripts/lunr/min/lunr.es.min.js +0 -18
  147. package/docs/assets/javascripts/lunr/min/lunr.fi.min.js +0 -18
  148. package/docs/assets/javascripts/lunr/min/lunr.fr.min.js +0 -18
  149. package/docs/assets/javascripts/lunr/min/lunr.he.min.js +0 -1
  150. package/docs/assets/javascripts/lunr/min/lunr.hi.min.js +0 -1
  151. package/docs/assets/javascripts/lunr/min/lunr.hu.min.js +0 -18
  152. package/docs/assets/javascripts/lunr/min/lunr.hy.min.js +0 -1
  153. package/docs/assets/javascripts/lunr/min/lunr.it.min.js +0 -18
  154. package/docs/assets/javascripts/lunr/min/lunr.ja.min.js +0 -1
  155. package/docs/assets/javascripts/lunr/min/lunr.jp.min.js +0 -1
  156. package/docs/assets/javascripts/lunr/min/lunr.kn.min.js +0 -1
  157. package/docs/assets/javascripts/lunr/min/lunr.ko.min.js +0 -1
  158. package/docs/assets/javascripts/lunr/min/lunr.multi.min.js +0 -1
  159. package/docs/assets/javascripts/lunr/min/lunr.nl.min.js +0 -18
  160. package/docs/assets/javascripts/lunr/min/lunr.no.min.js +0 -18
  161. package/docs/assets/javascripts/lunr/min/lunr.pt.min.js +0 -18
  162. package/docs/assets/javascripts/lunr/min/lunr.ro.min.js +0 -18
  163. package/docs/assets/javascripts/lunr/min/lunr.ru.min.js +0 -18
  164. package/docs/assets/javascripts/lunr/min/lunr.sa.min.js +0 -1
  165. package/docs/assets/javascripts/lunr/min/lunr.stemmer.support.min.js +0 -1
  166. package/docs/assets/javascripts/lunr/min/lunr.sv.min.js +0 -18
  167. package/docs/assets/javascripts/lunr/min/lunr.ta.min.js +0 -1
  168. package/docs/assets/javascripts/lunr/min/lunr.te.min.js +0 -1
  169. package/docs/assets/javascripts/lunr/min/lunr.th.min.js +0 -1
  170. package/docs/assets/javascripts/lunr/min/lunr.tr.min.js +0 -18
  171. package/docs/assets/javascripts/lunr/min/lunr.vi.min.js +0 -1
  172. package/docs/assets/javascripts/lunr/min/lunr.zh.min.js +0 -1
  173. package/docs/assets/javascripts/lunr/tinyseg.js +0 -206
  174. package/docs/assets/javascripts/lunr/wordcut.js +0 -6708
  175. package/docs/assets/javascripts/workers/search.f8cc74c7.min.js +0 -42
  176. package/docs/assets/javascripts/workers/search.f8cc74c7.min.js.map +0 -7
  177. package/docs/assets/stylesheets/main.2afb09e1.min.css +0 -1
  178. package/docs/assets/stylesheets/main.2afb09e1.min.css.map +0 -1
  179. package/docs/assets/stylesheets/palette.06af60db.min.css +0 -1
  180. package/docs/assets/stylesheets/palette.06af60db.min.css.map +0 -1
  181. package/docs/blog/2015/01/04/secure-secure-shell/index.html +0 -1771
  182. package/docs/blog/2025/04/30/our-blog-is-live/index.html +0 -1436
  183. package/docs/blog/archive/2015/index.html +0 -1303
  184. package/docs/blog/archive/2025/index.html +0 -1291
  185. package/docs/blog/category/security/index.html +0 -1303
  186. package/docs/blog/index.html +0 -1350
  187. package/docs/conduct/index.html +0 -1509
  188. package/docs/feed_json_created.json +0 -1
  189. package/docs/feed_json_updated.json +0 -1
  190. package/docs/feed_rss_created.xml +0 -1
  191. package/docs/feed_rss_updated.xml +0 -1
  192. package/docs/fontawesome/LICENSE.txt +0 -165
  193. package/docs/fontawesome/brands/facebook.svg +0 -1
  194. package/docs/fontawesome/brands/instagram.svg +0 -1
  195. package/docs/fontawesome/brands/linkedin.svg +0 -1
  196. package/docs/fontawesome/brands/mastodon.svg +0 -1
  197. package/docs/fontawesome/solid/at.svg +0 -1
  198. package/docs/index.html +0 -1395
  199. package/docs/legal/index.html +0 -1740
  200. package/docs/privacy/index.html +0 -1615
  201. package/docs/search/search_index.json +0 -1
  202. package/docs/sitemap.xml +0 -55
  203. package/docs/sitemap.xml.gz +0 -0
  204. package/docs/tags/index.html +0 -2084
  205. package/docs/terms-conditions/index.html +0 -1655
  206. package/docs/terms-use/index.html +0 -1584
  207. package/favicon-192.png +0 -0
  208. package/favicon-512.png +0 -0
  209. package/favicon.svg.br +0 -0
  210. package/favicon.svg.gz +0 -0
  211. package/html/spotlight.html +0 -516
  212. package/html/spotlight.html.br +0 -0
  213. package/html/spotlight.html.gz +0 -0
  214. package/img/banner-1440.png +0 -0
  215. package/img/favicon-template.png +0 -0
  216. package/img/fb-cover.png +0 -0
  217. package/img/fb-cover2.png +0 -0
  218. package/img/fsf-member.png +0 -0
  219. package/img/gh-logo.png +0 -0
  220. package/img/gpl3-small.png +0 -0
  221. package/img/gpl3.png +0 -0
  222. package/img/linkedin-banner-new.png +0 -0
  223. package/img/linkedin-banner.png +0 -0
  224. package/img/linkedin-banner2.png +0 -0
  225. package/img/logo-1024x1024.png +0 -0
  226. package/img/logo-alt.png +0 -0
  227. package/img/logo-elevated.png +0 -0
  228. package/img/logo-light-elevated.png +0 -0
  229. package/img/logo-light-slogan.png +0 -0
  230. package/img/logo-light.png +0 -0
  231. package/img/logo-slogan.png +0 -0
  232. package/img/logo-transparent-black-small.png +0 -0
  233. package/img/logo-transparent-black.png +0 -0
  234. package/img/logo-transparent-elevated.png +0 -0
  235. package/img/logo-transparent-slogan.png +0 -0
  236. package/img/mastodon-banner.png +0 -0
  237. package/img/netpro-logo-transparent.png +0 -0
  238. package/img/posts/acode.png +0 -0
  239. package/img/posts/linksheet.png +0 -0
  240. package/img/posts/pmx.png +0 -0
  241. package/img/posts/tosdr.png +0 -0
  242. package/img/posts/urlcheck.png +0 -0
  243. package/img/sd311.png +0 -0
  244. package/img/shield.png +0 -0
  245. package/img/shield.svg +0 -1
  246. package/img/shield.svg.br +0 -0
  247. package/img/shield.svg.gz +0 -0
  248. package/img/shield2.png +0 -0
  249. package/img/shield3-2000x2000.png +0 -0
  250. package/img/shield3-black-1024x1024.png +0 -0
  251. package/img/shield3-black.png +0 -0
  252. package/img/shield3-white.png +0 -0
  253. package/img/trademark.jpg +0 -0
  254. package/index.html +0 -268
  255. package/index.html.br +0 -0
  256. package/index.html.gz +0 -0
  257. package/js/app.d544156ea2ba85a7d486.mjs +0 -1
  258. package/js/runtime.52b1ac291305b90de3df.mjs +0 -1
  259. package/js/vendor/.gitkeep +0 -0
  260. package/legal.html +0 -535
  261. package/legal.html.br +0 -0
  262. package/legal.html.gz +0 -0
  263. package/privacy.html +0 -404
  264. package/privacy.html.br +0 -0
  265. package/privacy.html.gz +0 -0
  266. package/site.webmanifest +0 -25
  267. package/sitemap.xml +0 -177
  268. package/terms-and-conditions.html +0 -409
  269. package/terms-and-conditions.html.br +0 -0
  270. package/terms-and-conditions.html.gz +0 -0
  271. package/terms-of-use.html +0 -380
  272. package/terms-of-use.html.br +0 -0
  273. package/terms-of-use.html.gz +0 -0
  274. /package/{docs/assets/external/raw.githubusercontent.com/netwk-pro/netwk-pro.github.io/refs/heads/master/assets → assets}/nsa-happy-dance.png +0 -0
  275. /package/{favicon.svg → src/lib/img/favicon.svg} +0 -0
  276. /package/{favicon-180.png → src/lib/img/icon-180x180.png} +0 -0
  277. /package/{img/badge_obtainium.png → src/lib/img/obtainium.png} +0 -0
  278. /package/{docs/assets/external/raw.githubusercontent.com/netwk-pro/netwk-pro.github.io/refs/heads/master → src/lib}/img/qr/pgp-contact.png +0 -0
  279. /package/{img → src/lib/img}/qr/pgp-github.png +0 -0
  280. /package/{docs/assets/external/raw.githubusercontent.com/netwk-pro/netwk-pro.github.io/refs/heads/master → src/lib}/img/qr/pgp-support.png +0 -0
  281. /package/{docs/assets/external/raw.githubusercontent.com/netwk-pro/netwk-pro.github.io/refs/heads/master → src/lib}/img/qr/vcard.png +0 -0
  282. /package/{CNAME → static/CNAME} +0 -0
  283. /package/{favicon.ico → static/favicon.ico} +0 -0
  284. /package/{docs/img/favicon.png → static/icon-192x192.png} +0 -0
  285. /package/{docs/img/logo.png → static/icon-512x512.png} +0 -0
  286. /package/{favicon-splash.png → static/icon-splash.png} +0 -0
  287. /package/{img → static/img}/banner-1280x640.png +0 -0
  288. /package/{img → static/img}/banner-og-1200x630.png +0 -0
  289. /package/{img → static/img}/logo-transparent.png +0 -0
  290. /package/{img → static/img}/logo.png +0 -0
  291. /package/{img → static/img}/qr/pgp-contact.png +0 -0
  292. /package/{img → static/img}/qr/pgp-support.png +0 -0
  293. /package/{img → static/img}/qr/vcard.png +0 -0
package/jsconfig.json ADDED
@@ -0,0 +1,28 @@
1
+ /* =========================================================================
2
+ jsconfig.json
3
+
4
+ SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
+ This file is part of Network Pro.
6
+ ========================================================================= */
7
+
8
+ {
9
+ "extends": "./.svelte-kit/tsconfig.json",
10
+ "compilerOptions": {
11
+ "allowJs": true,
12
+ "checkJs": true,
13
+ "esModuleInterop": true,
14
+ "forceConsistentCasingInFileNames": true,
15
+ "resolveJsonModule": true,
16
+ "skipLibCheck": true,
17
+ "sourceMap": true,
18
+ "strict": true,
19
+ "moduleResolution": "bundler"
20
+ },
21
+ "exclude": ["vite.config.js"] // Exclude the config file if needed
22
+
23
+ // Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias
24
+ // except $lib which is handled by https://svelte.dev/docs/kit/configuration#files
25
+
26
+ // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
27
+ // from the referenced tsconfig.json - TypeScript does not merge them in
28
+ }
package/netlify.toml ADDED
@@ -0,0 +1,3 @@
1
+ [build]
2
+ command = "npm run build"
3
+ publish = "build"
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@networkpro/web",
3
- "sideEffects": false,
4
- "version": "0.13.2",
5
3
  "private": false,
4
+ "sideEffects": false,
5
+ "version": "1.1.0",
6
6
  "description": "Locking Down Networks, Unlocking Confidence | Security, Networking, Privacy — Network Pro Strategies",
7
7
  "keywords": [
8
8
  "security",
@@ -12,8 +12,7 @@
12
12
  "advisory",
13
13
  "consulting",
14
14
  "android",
15
- "linux",
16
- "blog"
15
+ "linux"
17
16
  ],
18
17
  "homepage": "https://netwk.pro",
19
18
  "bugs": {
@@ -30,73 +29,77 @@
30
29
  "url": "https://bio.neteng.pro"
31
30
  },
32
31
  "type": "module",
33
- "main": "index.html",
34
- "directories": {
35
- "test": "test"
32
+ "engines": {
33
+ "node": ">=22"
36
34
  },
35
+ "main": "src/app.html",
36
+ "style": "src/lib/styles/global.min.css",
37
37
  "scripts": {
38
- "start": "webpack serve --open --config webpack.config.dev.mjs",
39
- "build": "webpack --config webpack.config.prod.mjs",
40
- "test": "mocha test/**/*.mjs",
41
- "test:coverage": "c8 mocha test/**/*.mjs",
42
- "clean": "rm -rf dist/* node_modules package-lock.json && npm install",
38
+ "upgrade": "npx npm-check-updates -u",
39
+ "dev": "vite dev",
40
+ "build": "vite build",
41
+ "build:netlify": "netlify build",
42
+ "preview": "vite preview",
43
+ "prepare": "svelte-kit sync || echo ''",
44
+ "check": "svelte-kit sync && svelte-check --tsconfig ./jsconfig.json",
45
+ "check:watch": "svelte-kit sync && svelte-check --tsconfig ./jsconfig.json --watch",
46
+ "clean": "rm -rf build/* node_modules package-lock.json && npm install",
43
47
  "format": "prettier --check .",
44
48
  "format:fix": "prettier --write .",
45
- "lint": "eslint --ext .mjs,.js,.cjs --config eslint.config.mjs --ignore-pattern .cache/ --ignore-pattern dist/ .",
46
- "lint:fix": "eslint --ext .mjs,.js,.cjs --config eslint.config.mjs --ignore-pattern .cache/ --ignore-pattern dist/ . --fix",
47
- "lint:md": "npx markdownlint-cli2 \"**/*.{md,markdown}\" \"#node_modules/**\" \"#dist/**\" \"#.cache/**\"",
48
- "lint:css": "stylelint '**/*.{css,html}' --ignore-path .stylelintignore",
49
+ "lint": "eslint --ext .mjs,.js,.svelte --config eslint.config.mjs .",
50
+ "lint:fix": "eslint --ext .mjs,.js,.svelte --config eslint.config.mjs . --fix",
51
+ "lint:md": "npx markdownlint-cli2 \"**/*.{md,markdown}\" \"#node_modules/**\" \"#build/**\"",
52
+ "lint:css": "stylelint \"**/*.{css,svelte}\" --ignore-path .stylelintignore",
49
53
  "lint:all": "npm run lint && npm run lint:md && npm run lint:css && npm run format",
50
- "checkout": "npm run test && npm run lint:all",
51
- "prepare": "husky"
52
- },
53
- "dependencies": {
54
- "@babel/runtime": "^7.27.0",
55
- "glob": "^11.0.1",
56
- "globalthis": "^1.0.4",
57
- "normalize.css": "^8.0.1",
58
- "safe-stable-stringify": "^2.5.0"
54
+ "test": "npm run test:all",
55
+ "test:all": "npm run test:client -- --run && npm run test:server -- --run",
56
+ "test:client": "vitest --config vitest.config.client.js",
57
+ "test:server": "vitest --config vitest.config.server.js",
58
+ "test:watch": "vitest --config vitest.config.client.js --watch",
59
+ "test:coverage": "npm run test:client -- --run --coverage && npm run test:server -- --run --coverage",
60
+ "css:bundle": "node scripts/bundleCss.js",
61
+ "checkout": "npm run test:all && npm run lint:all && npm run check"
59
62
  },
60
63
  "devDependencies": {
61
- "@babel/core": "^7.26.9",
62
- "@babel/plugin-transform-runtime": "^7.26.10",
63
- "@babel/preset-env": "^7.26.9",
64
- "@eslint/js": "^9.20.0",
65
- "@mapbox/stylelint-processor-arbitrary-tags": "^0.4.0",
66
- "astroturf": "^1.2.0",
67
- "astroturf-loader": "^1.0.0",
64
+ "@eslint/compat": "^1.2.9",
65
+ "@eslint/js": "^9.27.0",
66
+ "@netlify/plugin-sitemap": "^0.8.1",
67
+ "@playwright/test": "^1.52.0",
68
+ "@sveltejs/adapter-netlify": "^5.0.2",
69
+ "@sveltejs/kit": "^2.21.1",
70
+ "@sveltejs/vite-plugin-svelte": "^5.0.3",
71
+ "@testing-library/jest-dom": "^6.6.3",
72
+ "@testing-library/svelte": "^5.2.7",
73
+ "@vitest/coverage-v8": "^3.1.3",
68
74
  "autoprefixer": "^10.4.21",
69
- "babel-loader": "^9.2.1",
70
75
  "browserslist": "^4.24.5",
71
- "c8": "^10.1.3",
72
- "chai": "^5.2.0",
73
- "compression-webpack-plugin": "^11.1.0",
74
- "copy-webpack-plugin": "^11.0.0",
75
- "css-loader": "^7.1.2",
76
- "css-minimizer-webpack-plugin": "^7.0.0",
77
- "eslint": "^9.20.1",
78
- "eslint-config-prettier": "^10.0.1",
79
- "eslint-plugin-mocha": "^10.5.0",
80
- "globals": "^16.0.0",
81
- "html-webpack-plugin": "^5.6.3",
82
- "husky": "^9.1.7",
83
- "markdownlint": "^0.37.4",
84
- "markdownlint-cli2": "^0.17.2",
85
- "mini-css-extract-plugin": "^2.9.2",
86
- "mocha": "^11.0.1",
76
+ "eslint": "^9.27.0",
77
+ "eslint-config-prettier": "^10.1.5",
78
+ "eslint-plugin-jsdoc": "^50.6.17",
79
+ "eslint-plugin-svelte": "^3.8.1",
80
+ "globals": "^16.1.0",
81
+ "jsdom": "^26.1.0",
82
+ "lightningcss": "^1.30.1",
83
+ "lightningcss-cli": "^1.30.1",
84
+ "markdownlint": "^0.38.0",
85
+ "markdownlint-cli2": "^0.18.1",
86
+ "mdsvex": "^0.12.6",
87
+ "normalize.css": "^8.0.1",
87
88
  "postcss": "^8.5.3",
88
89
  "postcss-html": "^1.8.0",
89
- "postcss-loader": "^8.1.1",
90
- "prettier": "^3.4.2",
91
- "style-loader": "^4.0.0",
92
- "stylelint": "^16.14.1",
93
- "stylelint-config-alphabetical-order": "^1.0.0",
90
+ "prettier": "^3.5.3",
91
+ "prettier-plugin-svelte": "^3.4.0",
92
+ "stylelint": "^16.19.1",
93
+ "stylelint-config-html": "^1.1.0",
94
94
  "stylelint-config-recommended": "^16.0.0",
95
- "terser-webpack-plugin": "^5.3.11",
96
- "webpack": "^5.98.0",
97
- "webpack-bundle-analyzer": "^4.10.2",
98
- "webpack-cli": "^6.0.1",
99
- "webpack-dev-server": "^5.2.0",
100
- "webpack-merge": "^5.10.0"
95
+ "stylelint-order": "^7.0.0",
96
+ "svelte": "^5.30.2",
97
+ "svelte-check": "^4.2.1",
98
+ "svelte-eslint-parser": "^1.2.0",
99
+ "svelte-preprocess": "^6.0.3",
100
+ "typescript": "^5.8.3",
101
+ "vite": "^6.3.5",
102
+ "vite-plugin-lightningcss": "^0.0.5",
103
+ "vitest": "^3.1.3"
101
104
  }
102
105
  }
@@ -0,0 +1,79 @@
1
+ // @ts-check
2
+ import { defineConfig, devices } from "@playwright/test";
3
+
4
+ /**
5
+ * @see https://playwright.dev/docs/test-configuration
6
+ */
7
+ export default defineConfig({
8
+ testDir: "./tests",
9
+
10
+ /* Run tests in files in parallel */
11
+ fullyParallel: true,
12
+
13
+ /* Fail the build on CI if you accidentally left test.only in the source code. */
14
+ forbidOnly: !!process.env.CI,
15
+
16
+ /* Retry on CI only */
17
+ retries: process.env.CI ? 2 : 0,
18
+
19
+ /* Opt out of parallel tests on CI. */
20
+ workers: process.env.CI ? 1 : undefined,
21
+
22
+ /* Reporter to use. See https://playwright.dev/docs/test-reporters */
23
+ reporter: "html",
24
+
25
+ /* Shared settings for all projects */
26
+ use: {
27
+ /* Base URL to use in actions like `await page.goto('/')`. */
28
+ baseURL: "http://localhost:5173",
29
+
30
+ /* Collect trace when retrying the failed test. */
31
+ trace: "on-first-retry",
32
+ },
33
+
34
+ /* Configure projects */
35
+ projects: [
36
+ // Desktop Browsers
37
+ {
38
+ name: "chromium",
39
+ use: {
40
+ browserName: "chromium", // Use Chromium browser
41
+ headless: true, // Enable true headless mode
42
+ },
43
+ },
44
+ {
45
+ name: "firefox",
46
+ use: {
47
+ ...devices["Desktop Firefox"], // Use default Firefox settings
48
+ },
49
+ },
50
+ {
51
+ name: "webkit",
52
+ use: {
53
+ ...devices["Desktop Safari"], // Use default WebKit settings
54
+ },
55
+ },
56
+
57
+ // Mobile Browsers
58
+ {
59
+ name: "Mobile Chrome",
60
+ use: {
61
+ ...devices["Galaxy S9+"], // Use the Galaxy S9+ device profile
62
+ headless: true, // Enable true headless mode
63
+ },
64
+ },
65
+ {
66
+ name: "Mobile Safari",
67
+ use: {
68
+ ...devices["iPhone 14"], // Use the iPhone 14 device profile
69
+ },
70
+ },
71
+ ],
72
+
73
+ /* Run your local dev server before starting the tests */
74
+ webServer: {
75
+ command: "npm run dev",
76
+ url: "http://localhost:5173",
77
+ reuseExistingServer: !process.env.CI,
78
+ },
79
+ });
@@ -0,0 +1,14 @@
1
+ /* ==========================================================================
2
+ postcss.config.mjs
3
+
4
+ SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
+ This file is part of Network Pro.
6
+ ========================================================================== */
7
+
8
+ import autoprefixer from "autoprefixer";
9
+
10
+ export default {
11
+ plugins: [
12
+ autoprefixer(), // Useful for compatibility
13
+ ],
14
+ };
@@ -0,0 +1,40 @@
1
+ /* ==========================================================================
2
+ scripts/bundleCss.js
3
+
4
+ SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
+ This file is part of Network Pro.
6
+ ========================================================================== */
7
+
8
+ /**
9
+ * LightningCSS transform and minification utility
10
+ * Transforms and minifies CSS files using LightningCSS (single file)
11
+ *
12
+ * @module scripts/
13
+ * @author SunDevil311
14
+ * @updated 2025-05-16
15
+ */
16
+
17
+ import fs from "fs";
18
+ import { bundle } from "lightningcss";
19
+ import path from "path";
20
+
21
+ // Define the path to your input CSS file
22
+ const inputFilePath = path.resolve("src/lib/styles/css/offline.css");
23
+
24
+ // Define the path for the output CSS file
25
+ const outputFilePath = path.resolve("static/offline.min.css");
26
+
27
+ // Bundle and minify the CSS
28
+ const { code, map } = bundle({
29
+ filename: inputFilePath,
30
+ minify: true,
31
+ sourceMap: true,
32
+ });
33
+
34
+ // Write the bundled CSS to the output file
35
+ fs.writeFileSync(outputFilePath, code);
36
+
37
+ // Only write the source map if it exists
38
+ if (map) {
39
+ fs.writeFileSync(`${outputFilePath}.map`, map);
40
+ }
package/src/app.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ /// <reference types="svelte" />
2
+ // See https://svelte.dev/docs/kit/types#app.d.ts
3
+ // for information about these interfaces
4
+ declare global {
5
+ namespace App {
6
+ // interface Error {}
7
+ // interface Locals {}
8
+ // interface PageData {}
9
+ // interface PageState {}
10
+ // interface Platform {}
11
+ }
12
+ }
13
+
14
+ export { };
15
+
package/src/app.html ADDED
@@ -0,0 +1,83 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+
7
+ <!-- =====================================================================
8
+ SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
9
+ This file is part of Network Pro.
10
+ ====================================================================== -->
11
+
12
+ <title>%sveltekit.title%</title>
13
+ <meta name="description" content="%sveltekit.description%" />
14
+ <meta
15
+ name="robots"
16
+ content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1" />
17
+ <meta name="author" content="Network Pro Strategies" />
18
+
19
+ <!-- Optional CSP for Dev -->
20
+ <meta
21
+ http-equiv="Content-Security-Policy"
22
+ content="default-src 'self'; script-src 'self' 'unsafe-inline' https://snap.licdn.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https://px.ads.linkedin.com; connect-src 'self' https://px.ads.linkedin.com;" />
23
+
24
+ <!-- Favicon: Keep only ICO for max compatibility -->
25
+ <link
26
+ rel="icon"
27
+ href="%sveltekit.assets%/favicon.ico"
28
+ sizes="any"
29
+ type="image/x-icon" />
30
+
31
+ <!-- Preconnects (placed early to optimize connection time) -->
32
+ <link rel="preconnect" href="https://snap.licdn.com" crossorigin />
33
+ <link rel="preconnect" href="https://px.ads.linkedin.com" crossorigin />
34
+
35
+ <!-- Manifest + theme color -->
36
+ <link rel="manifest" href="manifest.json" />
37
+ <meta name="theme-color" content="#ffc627" />
38
+
39
+ <meta name="generator" content="SvelteKit 2.21.1" />
40
+
41
+ %sveltekit.head%
42
+ </head>
43
+ <body>
44
+ <div id="svelte">%sveltekit.body%</div>
45
+
46
+ <!-- LinkedIn Insight Tag - Added 2025-05-14 10:05:06 by SunDevil311 -->
47
+ <!-- Load LinkedIn script only after page content is fully loaded -->
48
+ <script type="text/javascript">
49
+ // Wait for window load event for optimal performance
50
+ window.addEventListener("load", function () {
51
+ // LinkedIn Partner ID
52
+ window._linkedin_partner_id = "7223748";
53
+ window._linkedin_data_partner_ids =
54
+ window._linkedin_data_partner_ids || [];
55
+ window._linkedin_data_partner_ids.push(window._linkedin_partner_id);
56
+
57
+ // Initialize lintrk if not already initialized
58
+ if (!window.lintrk) {
59
+ window.lintrk = function (a, b) {
60
+ window.lintrk.q.push([a, b]);
61
+ };
62
+ window.lintrk.q = [];
63
+ }
64
+
65
+ // Create and insert script element
66
+ var s = document.getElementsByTagName("script")[0];
67
+ var b = document.createElement("script");
68
+ b.type = "text/javascript";
69
+ b.async = true;
70
+ b.src = "https://snap.licdn.com/li.lms-analytics/insight.min.js";
71
+ s.parentNode.insertBefore(b, s);
72
+ });
73
+ </script>
74
+ <noscript>
75
+ <img
76
+ height="1"
77
+ width="1"
78
+ style="display: none"
79
+ alt=""
80
+ src="https://px.ads.linkedin.com/collect/?pid=7223748&fmt=gif" />
81
+ </noscript>
82
+ </body>
83
+ </html>
@@ -0,0 +1,14 @@
1
+ /* ==========================================================================
2
+ src/demo.spec.js
3
+
4
+ SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
+ This file is part of Network Pro.
6
+ ========================================================================== */
7
+
8
+ import { describe, expect, it } from "vitest";
9
+
10
+ describe("sum test", () => {
11
+ it("adds 1 + 2 to equal 3", () => {
12
+ expect(1 + 2).toBe(3);
13
+ });
14
+ });
@@ -0,0 +1,74 @@
1
+ <!-- ==========================================================================
2
+ src/lib/components/Badges.svelte
3
+
4
+ SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
+ This file is part of Network Pro.
6
+ ========================================================================== -->
7
+
8
+ <script>
9
+ import { base } from "$app/paths";
10
+ // Import badges for licenses
11
+ import { ccBadge, gplBadge } from "$lib";
12
+
13
+ // Log the base path to verify its value
14
+ //console.log("Base path:", base);
15
+
16
+ const ccbyLink = `${base}/license#cc-by`;
17
+ const gplLink = `${base}/license#gnu-gpl`;
18
+
19
+ /**
20
+ * Badge link object.
21
+ * @typedef {Object} Badge
22
+ * @property {string} href - The URL the badge links to.
23
+ * @property {string} src - The source URL of the badge image.
24
+ * @property {string} alt - The alt text for the badge image.
25
+ * @property {string} [class] - The CSS class for styling the badge (optional).
26
+ * @property {string} width - The width of the badge (CSS value).
27
+ * @property {string} height - The height of the badge (CSS value).
28
+ */
29
+
30
+ /**
31
+ * Array of badges with their properties.
32
+ * @type {Badge[]}
33
+ */
34
+ const badges = [
35
+ {
36
+ href: ccbyLink,
37
+ src: ccBadge,
38
+ alt: "Creative Commons BY",
39
+ width: "160px",
40
+ height: "24px",
41
+ },
42
+ {
43
+ href: gplLink,
44
+ src: gplBadge,
45
+ alt: "GPL 3.0 or Later",
46
+ width: "120px",
47
+ height: "24px",
48
+ },
49
+ ];
50
+ </script>
51
+
52
+ <!-- BEGIN BADGES -->
53
+ <!-- Updated 2025-05-15 02:12:35 by SunDevil311 -->
54
+ <div class="bnav2-wrap">
55
+ <table class="bnav2">
56
+ <tbody>
57
+ <tr>
58
+ {#each badges as badge}
59
+ <td class="bnav2-nav">
60
+ <a href={badge.href} target="_self">
61
+ <img
62
+ decoding="async"
63
+ loading="lazy"
64
+ src={badge.src}
65
+ alt={badge.alt}
66
+ style="width: {badge.width}; height: {badge.height};" />
67
+ </a>
68
+ </td>
69
+ {/each}
70
+ </tr>
71
+ </tbody>
72
+ </table>
73
+ </div>
74
+ <!-- END BADGES -->
@@ -0,0 +1,19 @@
1
+ <!-- ==========================================================================
2
+ src/lib/components/ContainerSection.svelte
3
+
4
+ SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
+ This file is part of Network Pro.
6
+ ========================================================================== -->
7
+
8
+ <script>
9
+ /**
10
+ * Optional: Allows passing additional classes to the container.
11
+ * @type {string}
12
+ */
13
+ export let className = "";
14
+ </script>
15
+
16
+ <div class={`container ${className}`}>
17
+ <slot></slot>
18
+ <!-- Slot to allow child content -->
19
+ </div>
@@ -0,0 +1,13 @@
1
+ <!-- ==========================================================================
2
+ src/lib/components/FullWidthSection.svelte
3
+
4
+ SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
+ This file is part of Network Pro.
6
+ ========================================================================== -->
7
+
8
+ <div class="full-width-section">
9
+ <div class="container">
10
+ <slot></slot>
11
+ <!-- Slot to allow child content -->
12
+ </div>
13
+ </div>
@@ -0,0 +1,75 @@
1
+ <!-- ==========================================================================
2
+ src/lib/components/LegalNav.svelte
3
+
4
+ SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
+ This file is part of Network Pro.
6
+ ========================================================================== -->
7
+
8
+ <script>
9
+ import { base } from "$app/paths";
10
+
11
+ // Log the base path to verify its value
12
+ //console.log("Base path:", base);
13
+
14
+ const termsLink = `${base}/terms-of-use`;
15
+ const privacyLink = `${base}/privacy-policy`;
16
+ const licenseLink = `${base}/license`;
17
+
18
+ /**
19
+ * Navigation link object.
20
+ * @typedef {Object} NavLink
21
+ * @property {string} href - The URL the link points to.
22
+ * @property {string} text - The text displayed for the link.
23
+ * @property {string} target - Specifies where to open the link (e.g., "_self" or "_blank").
24
+ * @property {number} [colspan] - Optional property to specify column span for the table cell.
25
+ */
26
+
27
+ /**
28
+ * Rows of navigation links, where each row is an array of NavLink objects.
29
+ * @type {NavLink[][]}
30
+ */
31
+ const rows = [
32
+ [
33
+ {
34
+ href: termsLink,
35
+ text: "Terms of Use",
36
+ target: "_self",
37
+ },
38
+ {
39
+ href: privacyLink,
40
+ text: "Privacy Policy",
41
+ target: "_self",
42
+ },
43
+ ],
44
+ [
45
+ {
46
+ href: licenseLink,
47
+ text: "Legal",
48
+ target: "_self",
49
+ colspan: 2,
50
+ },
51
+ ],
52
+ ];
53
+ </script>
54
+
55
+ <!-- BEGIN LEGAL NAVIGATION -->
56
+ <div class="bnav-wrap">
57
+ <table class="bnav">
58
+ <tbody>
59
+ {#each rows as row}
60
+ <tr>
61
+ {#each row as link}
62
+ <td
63
+ class={link.colspan ? "bnav-cell" : "bnav-nav"}
64
+ colspan={link.colspan || 1}>
65
+ <a href={link.href} target={link.target}>
66
+ {link.text}
67
+ </a>
68
+ </td>
69
+ {/each}
70
+ </tr>
71
+ {/each}
72
+ </tbody>
73
+ </table>
74
+ </div>
75
+ <!-- END LEGAL NAVIGATION -->