@networkpro/web 0.13.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. package/CODE_OF_CONDUCT.md +172 -0
  2. package/LICENSE.md +4 -4
  3. package/README.md +11 -10
  4. package/assets/bin/contact.vcf +13 -0
  5. package/assets/bin/contact@s.neteng.pro.aexpk +17 -0
  6. package/assets/bin/contact@s.neteng.pro.asc +17 -0
  7. package/assets/bin/github@sl.neteng.cc.aexpk +29 -0
  8. package/assets/bin/github@sl.neteng.cc.asc +29 -0
  9. package/assets/bin/linksheet.json +8 -0
  10. package/assets/bin/support@neteng.pro.aexpk +47 -0
  11. package/assets/bin/support@neteng.pro.asc +47 -0
  12. package/assets/consulting-terms.pdf +0 -0
  13. package/eslint.config.mjs +112 -0
  14. package/jsconfig.json +28 -0
  15. package/netlify.toml +13 -0
  16. package/package.json +64 -61
  17. package/playwright.config.js +79 -0
  18. package/postcss.config.mjs +14 -0
  19. package/scripts/bundleCss.js +40 -0
  20. package/src/app.d.ts +15 -0
  21. package/src/app.html +81 -0
  22. package/src/demo.spec.js +14 -0
  23. package/src/lib/components/Badges.svelte +74 -0
  24. package/src/lib/components/ContainerSection.svelte +19 -0
  25. package/src/lib/components/FullWidthSection.svelte +13 -0
  26. package/src/lib/components/LegalNav.svelte +75 -0
  27. package/src/lib/components/Logo.svelte +110 -0
  28. package/src/lib/components/SocialMedia.svelte +70 -0
  29. package/src/lib/components/foss/FossFeatures.svelte +24 -0
  30. package/src/lib/components/foss/FossItemContent.svelte +153 -0
  31. package/src/lib/components/layout/Footer.svelte +188 -0
  32. package/src/lib/components/layout/HeaderDefault.svelte +86 -0
  33. package/src/lib/components/layout/HeaderHome.svelte +84 -0
  34. package/src/lib/data/fossData.js +233 -0
  35. package/src/lib/images.js +77 -0
  36. package/src/lib/img/badges/cc-by-badge.png +0 -0
  37. package/src/lib/img/badges/gpl-badge.svg +1 -0
  38. package/src/lib/img/by.svg +1 -0
  39. package/src/lib/img/cc.svg +1 -0
  40. package/src/lib/img/logo-web.png +0 -0
  41. package/src/lib/img/logo-web.webp +0 -0
  42. package/src/lib/img/obtainium.webp +0 -0
  43. package/src/lib/img/posts/acode.png +0 -0
  44. package/src/lib/img/posts/acode.webp +0 -0
  45. package/src/lib/img/posts/linksheet.png +0 -0
  46. package/src/lib/img/posts/linksheet.webp +0 -0
  47. package/src/lib/img/posts/pmx.png +0 -0
  48. package/src/lib/img/posts/pmx.webp +0 -0
  49. package/src/lib/img/posts/tosdr.png +0 -0
  50. package/src/lib/img/posts/tosdr.webp +0 -0
  51. package/src/lib/img/posts/urlcheck.png +0 -0
  52. package/src/lib/img/posts/urlcheck.webp +0 -0
  53. package/src/lib/index.js +43 -0
  54. package/src/lib/pages/AboutContent.svelte +294 -0
  55. package/src/lib/pages/FossContent.svelte +109 -0
  56. package/src/lib/pages/HomeContent.svelte +120 -0
  57. package/src/lib/pages/LicenseContent.svelte +486 -0
  58. package/src/lib/pages/PrivacyContent.svelte +249 -0
  59. package/src/lib/pages/TermsConditionsContent.svelte +240 -0
  60. package/src/lib/pages/TermsUseContent.svelte +236 -0
  61. package/src/lib/registerServiceWorker.js +65 -0
  62. package/src/lib/styles/css/brands.css +76 -0
  63. package/src/lib/styles/css/brands.min.css +6 -0
  64. package/src/lib/styles/css/default.css +454 -0
  65. package/src/lib/styles/css/fontawesome.min.css +9 -0
  66. package/src/lib/styles/css/global.css +10 -0
  67. package/src/lib/styles/css/normalize.css +349 -0
  68. package/src/lib/styles/css/offline.css +120 -0
  69. package/src/lib/styles/css/solid.min.css +6 -0
  70. package/src/lib/styles/css/style.css +310 -0
  71. package/src/lib/styles/fa-global.css +10 -0
  72. package/src/lib/styles/global.min.css +9 -0
  73. package/src/lib/styles/index.js +11 -0
  74. package/src/lib/styles/webfonts/fa-brands-400.ttf +0 -0
  75. package/src/lib/styles/webfonts/fa-brands-400.woff2 +0 -0
  76. package/src/lib/styles/webfonts/fa-solid-900.ttf +0 -0
  77. package/src/lib/styles/webfonts/fa-solid-900.woff2 +0 -0
  78. package/src/routes/+error.svelte +43 -0
  79. package/src/routes/+layout.js +94 -0
  80. package/src/routes/+layout.svelte +110 -0
  81. package/src/routes/+page.svelte +77 -0
  82. package/src/routes/about/+page.svelte +61 -0
  83. package/src/routes/contact/+page.server.js +24 -0
  84. package/src/routes/example.svx +9 -0
  85. package/src/routes/foss-spotlight/+page.svelte +63 -0
  86. package/src/routes/license/+page.svelte +63 -0
  87. package/src/routes/page.svelte.test.js +18 -0
  88. package/src/routes/privacy-policy/+page.svelte +63 -0
  89. package/src/routes/privacy-rights/+page.server.js +24 -0
  90. package/src/routes/terms-conditions/+page.svelte +63 -0
  91. package/src/routes/terms-of-use/+page.svelte +63 -0
  92. package/src/service-worker.d.ts +4 -0
  93. package/src/service-worker.js +90 -0
  94. package/static/icon-512x512-maskable.png +0 -0
  95. package/static/icon-contact.png +0 -0
  96. package/static/icon-services.png +0 -0
  97. package/static/img/svelte.png +0 -0
  98. package/static/manifest.json +64 -0
  99. package/static/offline.html +79 -0
  100. package/static/offline.min.css +7 -0
  101. package/{robots.txt → static/robots.txt} +0 -2
  102. package/static/sitemap.xml +102 -0
  103. package/stylelint.config.js +118 -0
  104. package/svelte.config.js +56 -0
  105. package/tests/app.spec.js +67 -0
  106. package/tests/mobile.spec.js +58 -0
  107. package/tests-examples/demo-todo-app.spec.js +504 -0
  108. package/tsconfig.custom.json +39 -0
  109. package/vite.config.js +19 -0
  110. package/vitest-setup-client.js +33 -0
  111. package/vitest.config.client.js +34 -0
  112. package/vitest.config.server.js +30 -0
  113. package/404.html +0 -84
  114. package/about.html +0 -334
  115. package/about.html.br +0 -0
  116. package/about.html.gz +0 -0
  117. package/bundle-report.html +0 -39
  118. package/css/default.css +0 -1
  119. package/css/normalize.css +0 -1
  120. package/css/style.css +0 -1
  121. package/docs/404.html +0 -1187
  122. package/docs/assets/external/avatars.githubusercontent.com/u/170266279.png +0 -0
  123. package/docs/assets/external/img.shields.io/badge/GitHub_Package_Registry-white.ed8def48.svg +0 -1
  124. package/docs/assets/external/img.shields.io/badge/npmjs-white.681714c1.svg +0 -1
  125. package/docs/assets/external/mirrors.creativecommons.org/presskit/icons/by.svg +0 -20
  126. package/docs/assets/external/mirrors.creativecommons.org/presskit/icons/cc.svg +0 -27
  127. package/docs/assets/external/unpkg.com/mermaid@11/dist/mermaid.min.js +0 -2607
  128. package/docs/assets/images/favicon.png +0 -0
  129. package/docs/assets/javascripts/bundle.c8b220af.min.js +0 -16
  130. package/docs/assets/javascripts/bundle.c8b220af.min.js.map +0 -7
  131. package/docs/assets/javascripts/lunr/min/lunr.ar.min.js +0 -1
  132. package/docs/assets/javascripts/lunr/min/lunr.da.min.js +0 -18
  133. package/docs/assets/javascripts/lunr/min/lunr.de.min.js +0 -18
  134. package/docs/assets/javascripts/lunr/min/lunr.du.min.js +0 -18
  135. package/docs/assets/javascripts/lunr/min/lunr.el.min.js +0 -1
  136. package/docs/assets/javascripts/lunr/min/lunr.es.min.js +0 -18
  137. package/docs/assets/javascripts/lunr/min/lunr.fi.min.js +0 -18
  138. package/docs/assets/javascripts/lunr/min/lunr.fr.min.js +0 -18
  139. package/docs/assets/javascripts/lunr/min/lunr.he.min.js +0 -1
  140. package/docs/assets/javascripts/lunr/min/lunr.hi.min.js +0 -1
  141. package/docs/assets/javascripts/lunr/min/lunr.hu.min.js +0 -18
  142. package/docs/assets/javascripts/lunr/min/lunr.hy.min.js +0 -1
  143. package/docs/assets/javascripts/lunr/min/lunr.it.min.js +0 -18
  144. package/docs/assets/javascripts/lunr/min/lunr.ja.min.js +0 -1
  145. package/docs/assets/javascripts/lunr/min/lunr.jp.min.js +0 -1
  146. package/docs/assets/javascripts/lunr/min/lunr.kn.min.js +0 -1
  147. package/docs/assets/javascripts/lunr/min/lunr.ko.min.js +0 -1
  148. package/docs/assets/javascripts/lunr/min/lunr.multi.min.js +0 -1
  149. package/docs/assets/javascripts/lunr/min/lunr.nl.min.js +0 -18
  150. package/docs/assets/javascripts/lunr/min/lunr.no.min.js +0 -18
  151. package/docs/assets/javascripts/lunr/min/lunr.pt.min.js +0 -18
  152. package/docs/assets/javascripts/lunr/min/lunr.ro.min.js +0 -18
  153. package/docs/assets/javascripts/lunr/min/lunr.ru.min.js +0 -18
  154. package/docs/assets/javascripts/lunr/min/lunr.sa.min.js +0 -1
  155. package/docs/assets/javascripts/lunr/min/lunr.stemmer.support.min.js +0 -1
  156. package/docs/assets/javascripts/lunr/min/lunr.sv.min.js +0 -18
  157. package/docs/assets/javascripts/lunr/min/lunr.ta.min.js +0 -1
  158. package/docs/assets/javascripts/lunr/min/lunr.te.min.js +0 -1
  159. package/docs/assets/javascripts/lunr/min/lunr.th.min.js +0 -1
  160. package/docs/assets/javascripts/lunr/min/lunr.tr.min.js +0 -18
  161. package/docs/assets/javascripts/lunr/min/lunr.vi.min.js +0 -1
  162. package/docs/assets/javascripts/lunr/min/lunr.zh.min.js +0 -1
  163. package/docs/assets/javascripts/lunr/tinyseg.js +0 -206
  164. package/docs/assets/javascripts/lunr/wordcut.js +0 -6708
  165. package/docs/assets/javascripts/workers/search.f8cc74c7.min.js +0 -42
  166. package/docs/assets/javascripts/workers/search.f8cc74c7.min.js.map +0 -7
  167. package/docs/assets/stylesheets/main.2afb09e1.min.css +0 -1
  168. package/docs/assets/stylesheets/main.2afb09e1.min.css.map +0 -1
  169. package/docs/assets/stylesheets/palette.06af60db.min.css +0 -1
  170. package/docs/assets/stylesheets/palette.06af60db.min.css.map +0 -1
  171. package/docs/blog/2015/01/04/secure-secure-shell/index.html +0 -1771
  172. package/docs/blog/2025/04/30/our-blog-is-live/index.html +0 -1436
  173. package/docs/blog/archive/2015/index.html +0 -1303
  174. package/docs/blog/archive/2025/index.html +0 -1291
  175. package/docs/blog/category/security/index.html +0 -1303
  176. package/docs/blog/index.html +0 -1350
  177. package/docs/conduct/index.html +0 -1509
  178. package/docs/feed_json_created.json +0 -1
  179. package/docs/feed_json_updated.json +0 -1
  180. package/docs/feed_rss_created.xml +0 -1
  181. package/docs/feed_rss_updated.xml +0 -1
  182. package/docs/fontawesome/LICENSE.txt +0 -165
  183. package/docs/fontawesome/brands/facebook.svg +0 -1
  184. package/docs/fontawesome/brands/instagram.svg +0 -1
  185. package/docs/fontawesome/brands/linkedin.svg +0 -1
  186. package/docs/fontawesome/brands/mastodon.svg +0 -1
  187. package/docs/fontawesome/solid/at.svg +0 -1
  188. package/docs/index.html +0 -1395
  189. package/docs/legal/index.html +0 -1740
  190. package/docs/privacy/index.html +0 -1615
  191. package/docs/search/search_index.json +0 -1
  192. package/docs/sitemap.xml +0 -55
  193. package/docs/sitemap.xml.gz +0 -0
  194. package/docs/tags/index.html +0 -2084
  195. package/docs/terms-conditions/index.html +0 -1655
  196. package/docs/terms-use/index.html +0 -1584
  197. package/favicon-192.png +0 -0
  198. package/favicon-512.png +0 -0
  199. package/favicon.svg.br +0 -0
  200. package/favicon.svg.gz +0 -0
  201. package/html/spotlight.html +0 -435
  202. package/html/spotlight.html.br +0 -0
  203. package/html/spotlight.html.gz +0 -0
  204. package/img/banner-1280x640.png +0 -0
  205. package/img/banner-1440.png +0 -0
  206. package/img/banner-og-1200x630.png +0 -0
  207. package/img/favicon-template.png +0 -0
  208. package/img/fb-cover.png +0 -0
  209. package/img/fb-cover2.png +0 -0
  210. package/img/fsf-member.png +0 -0
  211. package/img/gh-logo.png +0 -0
  212. package/img/gpl3-small.png +0 -0
  213. package/img/gpl3.png +0 -0
  214. package/img/linkedin-banner-new.png +0 -0
  215. package/img/linkedin-banner.png +0 -0
  216. package/img/linkedin-banner2.png +0 -0
  217. package/img/logo-1024x1024.png +0 -0
  218. package/img/logo-alt.png +0 -0
  219. package/img/logo-elevated.png +0 -0
  220. package/img/logo-light-elevated.png +0 -0
  221. package/img/logo-light-slogan.png +0 -0
  222. package/img/logo-light.png +0 -0
  223. package/img/logo-slogan.png +0 -0
  224. package/img/logo-transparent-black-small.png +0 -0
  225. package/img/logo-transparent-black.png +0 -0
  226. package/img/logo-transparent-elevated.png +0 -0
  227. package/img/logo-transparent-slogan.png +0 -0
  228. package/img/mastodon-banner.png +0 -0
  229. package/img/netpro-logo-transparent.png +0 -0
  230. package/img/posts/acode.png +0 -0
  231. package/img/posts/linksheet.png +0 -0
  232. package/img/posts/tosdr.png +0 -0
  233. package/img/posts/urlcheck.png +0 -0
  234. package/img/qr/pgp-github.png +0 -0
  235. package/img/qr/pgp-support.png +0 -0
  236. package/img/qr/vcard.png +0 -0
  237. package/img/sd311.png +0 -0
  238. package/img/shield.png +0 -0
  239. package/img/shield.svg +0 -1
  240. package/img/shield.svg.br +0 -0
  241. package/img/shield.svg.gz +0 -0
  242. package/img/shield2.png +0 -0
  243. package/img/shield3-2000x2000.png +0 -0
  244. package/img/shield3-black-1024x1024.png +0 -0
  245. package/img/shield3-black.png +0 -0
  246. package/img/shield3-white.png +0 -0
  247. package/img/trademark.jpg +0 -0
  248. package/index.html +0 -268
  249. package/index.html.br +0 -0
  250. package/index.html.gz +0 -0
  251. package/js/app.d544156ea2ba85a7d486.mjs +0 -1
  252. package/js/runtime.52b1ac291305b90de3df.mjs +0 -1
  253. package/js/vendor/.gitkeep +0 -0
  254. package/legal.html +0 -535
  255. package/legal.html.br +0 -0
  256. package/legal.html.gz +0 -0
  257. package/privacy.html +0 -404
  258. package/privacy.html.br +0 -0
  259. package/privacy.html.gz +0 -0
  260. package/site.webmanifest +0 -25
  261. package/sitemap.xml +0 -177
  262. package/terms-and-conditions.html +0 -409
  263. package/terms-and-conditions.html.br +0 -0
  264. package/terms-and-conditions.html.gz +0 -0
  265. package/terms-of-use.html +0 -380
  266. package/terms-of-use.html.br +0 -0
  267. package/terms-of-use.html.gz +0 -0
  268. /package/{docs/assets/external/raw.githubusercontent.com/netwk-pro/netwk-pro.github.io/refs/heads/master/assets → assets}/nsa-happy-dance.png +0 -0
  269. /package/{favicon.svg → src/lib/img/favicon.svg} +0 -0
  270. /package/{favicon-180.png → src/lib/img/icon-180x180.png} +0 -0
  271. /package/{img/badge_obtainium.png → src/lib/img/obtainium.png} +0 -0
  272. /package/{img → src/lib/img}/qr/pgp-contact.png +0 -0
  273. /package/{docs/assets/external/raw.githubusercontent.com/netwk-pro/netwk-pro.github.io/refs/heads/master → src/lib}/img/qr/pgp-github.png +0 -0
  274. /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
  275. /package/{docs/assets/external/raw.githubusercontent.com/netwk-pro/netwk-pro.github.io/refs/heads/master → src/lib}/img/qr/vcard.png +0 -0
  276. /package/{CNAME → static/CNAME} +0 -0
  277. /package/{favicon.ico → static/favicon.ico} +0 -0
  278. /package/{docs/img/favicon.png → static/icon-192x192.png} +0 -0
  279. /package/{docs/img/logo.png → static/icon-512x512.png} +0 -0
  280. /package/{favicon-splash.png → static/icon-splash.png} +0 -0
  281. /package/{img → static/img}/logo-transparent.png +0 -0
  282. /package/{img → static/img}/logo.png +0 -0
@@ -0,0 +1,79 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <!-- ======================================================================
6
+ SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
7
+ This file is part of Network Pro.
8
+ ============================================+========================== -->
9
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
10
+ <title>Offline | Site Unavailable</title>
11
+ <link rel="stylesheet" href="/offline.min.css" />
12
+ </head>
13
+ <body>
14
+ <div class="container">
15
+ <div class="icon">📶</div>
16
+ <h1>You're offline</h1>
17
+ <p
18
+ >It looks like you've lost your internet connection. The page you're
19
+ trying to view requires an active connection.</p
20
+ >
21
+
22
+ <div class="status">
23
+ Network status: Offline<br />
24
+ Last checked: <span id="timestamp">Just now</span>
25
+ </div>
26
+
27
+ <button class="retry-button" onclick="window.location.reload()">
28
+ Try Again
29
+ </button>
30
+
31
+ <div class="help-text">
32
+ Need help? Visit our
33
+ <a href="https://netwk.pro/contact" id="contact-link">contact page</a>
34
+ when you're back online.
35
+ </div>
36
+ </div>
37
+
38
+ <script>
39
+ // Update timestamp every minute
40
+ function updateTimestamp() {
41
+ const now = new Date();
42
+ const timeStr = now.toLocaleTimeString([], {
43
+ hour: "2-digit",
44
+ minute: "2-digit",
45
+ });
46
+ document.getElementById("timestamp").textContent = timeStr;
47
+ }
48
+
49
+ // Check connection status periodically
50
+ function checkConnection() {
51
+ if (navigator.onLine) {
52
+ window.location.reload();
53
+ }
54
+ }
55
+
56
+ // Initial timestamp
57
+ updateTimestamp();
58
+
59
+ // Check connection every 30 seconds
60
+ setInterval(checkConnection, 30000);
61
+ setInterval(updateTimestamp, 60000);
62
+
63
+ // Also listen for online event
64
+ window.addEventListener("online", () => {
65
+ window.location.reload();
66
+ });
67
+
68
+ // Prevent default action for offline links
69
+ document
70
+ .getElementById("contact-link")
71
+ .addEventListener("click", function (e) {
72
+ if (!navigator.onLine) {
73
+ e.preventDefault();
74
+ alert("This link will be available when you are back online.");
75
+ }
76
+ });
77
+ </script>
78
+ </body>
79
+ </html>
@@ -0,0 +1,7 @@
1
+ /*! ==========================================================================
2
+ src/lib/styles/css/offline.css
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
+ html,body{height:100%;margin:0;padding:0}body{color:#fafafa;text-align:center;background-color:#191919;flex-direction:column;justify-content:center;align-items:center;margin:10px;padding:0 1rem;font-family:Arial,Helvetica,sans-serif;display:flex}.container{max-width:600px;margin:0 auto}h1{color:#fafafa;margin-bottom:1rem;font-size:2rem}p{margin-bottom:1.5rem;font-size:1.1rem;line-height:1.5}.icon{color:#ff5252;margin-bottom:1rem;font-size:4rem}.retry-button{color:#fafafa;cursor:pointer;background-color:#2e7d32;border:none;border-radius:4px;margin-top:1rem;padding:12px 24px;font-family:Arial,Helvetica,sans-serif;font-size:1rem;transition:background-color .2s}.retry-button:hover{background-color:#388e3c}.status{color:#bdbdbd;background-color:#ffffff0d;border-radius:4px;margin:1rem 0;padding:1rem;font-size:.9rem}a{text-decoration:none}a:link{color:#ffc627}a:hover,a:active{color:#ffc627;text-decoration:underline}a:focus{color:#191919;background-color:#ffc627}a:visited,a:visited:hover{color:#7f6227}.help-text{color:#bdbdbd;margin-top:2rem;font-size:.9rem}
@@ -9,6 +9,4 @@ User-agent: *
9
9
  Disallow: *.jsonc$
10
10
  Disallow: *.json$
11
11
  Disallow: *.mjs$
12
- Disallow: *.cjs
13
12
  Disallow: *.js$
14
- Disallow: /js
@@ -0,0 +1,102 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!-- Sitemap last updated on 2025-05-18 -->
3
+
4
+ <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
5
+
6
+ <url>
7
+
8
+ <loc>https://netwk.pro</loc>
9
+
10
+ <lastmod>2025-05-16</lastmod>
11
+
12
+ <changefreq>weekly</changefreq>
13
+
14
+ <priority>1.0</priority>
15
+
16
+ </url>
17
+
18
+ <url>
19
+
20
+ <loc>https://netwk.pro/foss-spotlight</loc>
21
+
22
+ <lastmod>2025-05-15</lastmod>
23
+
24
+ <changefreq>weekly</changefreq>
25
+
26
+ <priority>0.8</priority>
27
+
28
+ </url>
29
+
30
+ <url>
31
+
32
+ <loc>https://netwk.pro/contact</loc>
33
+
34
+ <lastmod>2025-05-16</lastmod>
35
+
36
+ <changefreq>monthly</changefreq>
37
+
38
+ <priority>0.7</priority>
39
+
40
+ </url>
41
+
42
+ <url>
43
+
44
+ <loc>https://netwk.pro/privacy-rights</loc>
45
+
46
+ <lastmod>2025-05-16</lastmod>
47
+
48
+ <changefreq>monthly</changefreq>
49
+
50
+ <priority>0.7</priority>
51
+
52
+ </url>
53
+
54
+ <url>
55
+
56
+ <loc>https://netwk.pro/privacy-policy</loc>
57
+
58
+ <lastmod>2025-05-16</lastmod>
59
+
60
+ <changefreq>monthly</changefreq>
61
+
62
+ <priority>0.6</priority>
63
+
64
+ </url>
65
+
66
+ <url>
67
+
68
+ <loc>https://netwk.pro/license</loc>
69
+
70
+ <lastmod>2025-05-16</lastmod>
71
+
72
+ <changefreq>monthly</changefreq>
73
+
74
+ <priority>0.6</priority>
75
+
76
+ </url>
77
+
78
+ <url>
79
+
80
+ <loc>https://netwk.pro/terms-of-use</loc>
81
+
82
+ <lastmod>2025-05-15</lastmod>
83
+
84
+ <changefreq>monthly</changefreq>
85
+
86
+ <priority>0.6</priority>
87
+
88
+ </url>
89
+
90
+ <url>
91
+
92
+ <loc>https://netwk.pro/terms-conditions</loc>
93
+
94
+ <lastmod>2025-05-15</lastmod>
95
+
96
+ <changefreq>monthly</changefreq>
97
+
98
+ <priority>0.5</priority>
99
+
100
+ </url>
101
+
102
+ </urlset>
@@ -0,0 +1,118 @@
1
+ /* =========================================================================
2
+ stylelint.config.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
+ /** @type {import('stylelint').Config} */
9
+ export default {
10
+ extends: [
11
+ "stylelint-config-recommended", // Base recommended config
12
+ "stylelint-config-html/html", // For linting HTML files
13
+ "stylelint-config-html/svelte", // For linting HTML within Svelte or similar frameworks
14
+ "stylelint-config-html", // For linting HTML files
15
+ ],
16
+ plugins: ["stylelint-order"], // Add stylelint-order plugin
17
+ ignoreFiles: [
18
+ "./src/lib/styles/fa-global.css", // Ignore CSS import files
19
+ "./src/lib/styles/css/global.css", // Ignore CSS import files
20
+ "./src/lib/styles/css/brands.css", // Ignore FontAwesome CSS files
21
+ "**/*.min.css", // Also ignore minified CSS files as a best practice
22
+ ],
23
+ overrides: [
24
+ {
25
+ files: ["**/*.html", "**/*.svelte"], // Use postcss-html for HTML and Svelte files
26
+ customSyntax: "postcss-html",
27
+ },
28
+ ],
29
+ rules: {
30
+ "selector-pseudo-class-no-unknown": [
31
+ true,
32
+ {
33
+ ignorePseudoClasses: [":global"], // Allow :global for Svelte scoped styles
34
+ },
35
+ ],
36
+ "property-no-vendor-prefix": null, // Allow vendor prefixes
37
+ "selector-no-vendor-prefix": null,
38
+ "selector-pseudo-element-colon-notation": [
39
+ "double",
40
+ {
41
+ severity: "warning",
42
+ },
43
+ ],
44
+ "media-feature-name-no-vendor-prefix": null,
45
+ "font-family-no-duplicate-names": [
46
+ true,
47
+ {
48
+ ignoreFontFamilyNames: ["monospace"],
49
+ },
50
+ ],
51
+ "selector-class-pattern": [
52
+ "^(?!fa-).*$", // Disallow classes starting with "fa-"
53
+ {
54
+ message:
55
+ "Class names must not start with 'fa-' (FontAwesome classes are ignored)",
56
+ },
57
+ ],
58
+ "order/properties-order": [
59
+ [
60
+ {
61
+ groupName: "Positioning",
62
+ properties: ["position", "top", "right", "bottom", "left", "z-index"],
63
+ },
64
+ {
65
+ groupName: "Box Model",
66
+ properties: [
67
+ "display",
68
+ "flex",
69
+ "flex-grow",
70
+ "flex-shrink",
71
+ "flex-basis",
72
+ "justify-content",
73
+ "align-items",
74
+ "align-self",
75
+ "width",
76
+ "height",
77
+ "padding",
78
+ "margin",
79
+ "border",
80
+ "box-shadow",
81
+ ],
82
+ },
83
+ {
84
+ groupName: "Typography",
85
+ properties: [
86
+ "font",
87
+ "font-size",
88
+ "font-weight",
89
+ "line-height",
90
+ "letter-spacing",
91
+ "color",
92
+ "text-align",
93
+ ],
94
+ },
95
+ {
96
+ groupName: "Visual",
97
+ properties: [
98
+ "background",
99
+ "background-color",
100
+ "background-image",
101
+ "opacity",
102
+ "visibility",
103
+ ],
104
+ },
105
+ {
106
+ groupName: "Animation & Transform",
107
+ properties: ["transition", "transform", "animation"],
108
+ },
109
+ ],
110
+ {
111
+ unspecified: "bottomAlphabetical", // Place unspecified properties alphabetically at the bottom
112
+ },
113
+ ],
114
+ },
115
+ reportDescriptionlessDisables: false, // Do not report disables without descriptions
116
+ reportInvalidScopeDisables: true, // Report invalid scope disables
117
+ reportNeedlessDisables: true, // Report unnecessary disables
118
+ };
@@ -0,0 +1,56 @@
1
+ /* =========================================================================
2
+ svelte.config.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 adapter from "@sveltejs/adapter-netlify"; // Netlify adapter for deployment
9
+ import { vitePreprocess } from "@sveltejs/vite-plugin-svelte"; // Vite preprocessor for Svelte
10
+
11
+ const config = {
12
+ // Preprocessors for enhanced functionality (vitePreprocess + mdsvex for Markdown support + svelte-preprocess for PostCSS)
13
+ preprocess: [
14
+ vitePreprocess({
15
+ postcss: true,
16
+ mdsvex: {
17
+ extensions: [".svx", ".md"],
18
+ },
19
+ }),
20
+ ],
21
+
22
+ kit: {
23
+ // Netlify adapter configuration
24
+ adapter: adapter({
25
+ edge: false, // Disable edge functions (optional, enable if needed)
26
+ split: false, // Disable splitting function files (optional, enable if needed),
27
+ }),
28
+ // Paths configuration for deployment
29
+ paths: {
30
+ base: "", // Always deploy to the root of the domain
31
+ },
32
+ prerender: {
33
+ // Handle HTTP errors during prerendering
34
+ handleHttpError: ({ path, _referrer, message }) => {
35
+ // Paths to ignore and warn about
36
+ const warnList = ["/...404"];
37
+
38
+ if (warnList.includes(path)) {
39
+ console.warn(`Prerender error at path: ${path}, message: ${message}`);
40
+ return;
41
+ }
42
+
43
+ // Otherwise, fail the build
44
+ throw new Error(message);
45
+ },
46
+ },
47
+ },
48
+ // File extensions for Svelte and mdsvex
49
+ extensions: [".svelte", ".svx", ".md"], // Added .md for Markdown support
50
+ };
51
+
52
+ export default config;
53
+
54
+ // PostCSS configuration is handled separately in postcss.config.cjs
55
+ // Consult https://svelte.dev/docs#compile-time-svelte-preprocess
56
+ // for more information about preprocessors
@@ -0,0 +1,67 @@
1
+ /* ==========================================================================
2
+ src/app.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
+ // @ts-check
9
+ import { expect, test } from "@playwright/test";
10
+
11
+ test.describe("Desktop Tests", () => {
12
+ // Test for correct title on desktop with partial match
13
+ test("should load successfully with the correct title", async ({ page }) => {
14
+ // Simulate a desktop viewport
15
+ await page.setViewportSize({ width: 1280, height: 720 });
16
+ await page.goto("/");
17
+
18
+ // Wait for the title to be updated (not `%sveltekit.title%`)
19
+ await page.waitForFunction(() => document.title !== "%sveltekit.title%");
20
+
21
+ // Verify the page title contains the expected partial match
22
+ const title = await page.title();
23
+ expect(title).toContain("Locking Down Networks, Unlocking Confidence");
24
+ });
25
+
26
+ // Test for navigation bar visibility and "about" route
27
+ test("should display the navigation bar with an 'about' route", async ({
28
+ page,
29
+ }) => {
30
+ // Simulate a desktop viewport
31
+ await page.setViewportSize({ width: 1280, height: 720 });
32
+ await page.goto("/");
33
+
34
+ // Check that the navigation bar is visible
35
+ const nav = page.locator("nav");
36
+ await expect(nav).toBeVisible();
37
+
38
+ // Check for the "about" route in the navigation bar
39
+ const aboutLink = nav.locator("a", { hasText: "about" });
40
+ await expect(aboutLink).toBeVisible();
41
+ await expect(aboutLink).toHaveAttribute("href", "/about"); // Ensure it points to the correct route
42
+ });
43
+
44
+ // Test for footer visibility on desktop
45
+ test("should display the footer correctly", async ({ page }) => {
46
+ // Simulate a desktop viewport
47
+ await page.setViewportSize({ width: 1280, height: 720 });
48
+ await page.goto("/");
49
+
50
+ // Verify the footer is visible
51
+ const footer = page.locator("footer");
52
+ await expect(footer).toBeVisible();
53
+ });
54
+
55
+ // Test for clickable links on desktop
56
+ test("should ensure links are clickable", async ({ page }) => {
57
+ // Simulate a desktop viewport
58
+ await page.setViewportSize({ width: 1280, height: 720 });
59
+ await page.goto("/");
60
+
61
+ // Check the "about" link is visible and clickable
62
+ const aboutLink = page.locator("a", { hasText: "about" });
63
+ await expect(aboutLink).toBeVisible();
64
+ await aboutLink.click();
65
+ await expect(page).toHaveURL(/\/about/);
66
+ });
67
+ });
@@ -0,0 +1,58 @@
1
+ /* ==========================================================================
2
+ src/mobile.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
+ // @ts-check
9
+ import { expect, test } from "@playwright/test";
10
+
11
+ test.describe("Mobile Responsiveness", () => {
12
+ test("should display main content correctly on mobile", async ({ page }) => {
13
+ // Simulate a mobile device
14
+ await page.setViewportSize({ width: 375, height: 812 });
15
+ await page.goto("/");
16
+
17
+ // Wait for the title to be updated (not `%sveltekit.title%`)
18
+ await page.waitForFunction(() => document.title !== "%sveltekit.title%");
19
+
20
+ // Verify the main heading is visible
21
+ const mainHeading = page.locator("h2");
22
+ await expect(mainHeading).toHaveText(/Security \| Networking \| Privacy/);
23
+
24
+ // Check that the layout adjusts properly
25
+ const nav = page.locator("nav");
26
+ await expect(nav).toBeVisible();
27
+ });
28
+
29
+ test("should ensure no overlapping content on mobile", async ({ page }) => {
30
+ await page.setViewportSize({ width: 375, height: 812 });
31
+ await page.goto("/");
32
+
33
+ // Wait for the title to be updated (not `%sveltekit.title%`)
34
+ await page.waitForFunction(() => document.title !== "%sveltekit.title%");
35
+
36
+ // Check that there are no overlapping elements
37
+ const body = await page.locator("body").boundingBox();
38
+ const header = await page.locator("header").boundingBox();
39
+
40
+ if (body && header) {
41
+ expect(header.y + header.height).toBeLessThanOrEqual(body.height);
42
+ }
43
+ });
44
+
45
+ test("should ensure links are tappable", async ({ page }) => {
46
+ await page.setViewportSize({ width: 375, height: 812 });
47
+ await page.goto("/");
48
+
49
+ // Wait for the title to be updated (not `%sveltekit.title%`)
50
+ await page.waitForFunction(() => document.title !== "%sveltekit.title%");
51
+
52
+ // Check the "about" link is tappable and visible
53
+ const aboutLink = page.locator("a", { hasText: "about" });
54
+ await expect(aboutLink).toBeVisible();
55
+ await aboutLink.click();
56
+ await expect(page).toHaveURL(/\/about/);
57
+ });
58
+ });