@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
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@networkpro/web",
3
- "sideEffects": false,
4
- "version": "0.13.1",
5
3
  "private": false,
4
+ "sideEffects": false,
5
+ "version": "1.0.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": {
@@ -21,7 +20,7 @@
21
20
  },
22
21
  "repository": {
23
22
  "type": "git",
24
- "url": "git+https://github.com/netwk-pro/netwk-pro.github.io.git"
23
+ "url": "git+https://github.com/netwk-pro/dev-sveltekit.git"
25
24
  },
26
25
  "license": "CC-BY-4.0 OR GPL-3.0-or-later",
27
26
  "author": {
@@ -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/ .",
46
- "lint:fix": "eslint --ext .mjs,.js,.cjs --config eslint.config.mjs --ignore-pattern .cache/ . --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
- "astroturf": "^1.2.0",
66
- "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.0",
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",
67
74
  "autoprefixer": "^10.4.21",
68
- "babel-loader": "^9.2.1",
69
75
  "browserslist": "^4.24.5",
70
- "c8": "^10.1.3",
71
- "chai": "^5.2.0",
72
- "compression-webpack-plugin": "^11.1.0",
73
- "copy-webpack-plugin": "^11.0.0",
74
- "css-loader": "^7.1.2",
75
- "css-minimizer-webpack-plugin": "^7.0.0",
76
- "eslint": "^9.20.1",
77
- "eslint-config-prettier": "^10.0.1",
78
- "eslint-plugin-mocha": "^10.5.0",
79
- "globals": "^16.0.0",
80
- "html-webpack-plugin": "^5.6.3",
81
- "husky": "^9.1.7",
82
- "markdownlint": "^0.37.4",
83
- "markdownlint-cli2": "^0.17.2",
84
- "mini-css-extract-plugin": "^2.9.2",
85
- "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",
86
88
  "postcss": "^8.5.3",
87
89
  "postcss-html": "^1.8.0",
88
- "postcss-loader": "^8.1.1",
89
- "prettier": "^3.4.2",
90
- "style-loader": "^4.0.0",
91
- "stylelint": "^16.14.1",
92
- "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",
93
94
  "stylelint-config-recommended": "^16.0.0",
94
- "stylelint-processor-arbitrary-tags": "^0.1.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,81 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+
6
+ <!-- =====================================================================
7
+ SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
8
+ This file is part of Network Pro.
9
+ ===================================================================== -->
10
+
11
+ <title>%sveltekit.title%</title>
12
+ <meta name="description" content="%sveltekit.description%" />
13
+
14
+ <!-- Preconnect optimizations for LinkedIn -->
15
+ <link rel="preconnect" href="https://snap.licdn.com" crossorigin />
16
+ <link rel="preconnect" href="https://px.ads.linkedin.com" crossorigin />
17
+
18
+ <!-- FontAwesome is self-hosted, so its preconnect has been removed -->
19
+
20
+ <!-- Keep only the ICO favicon for maximum compatibility -->
21
+ <link
22
+ rel="icon"
23
+ href="%sveltekit.assets%/favicon.ico"
24
+ sizes="any"
25
+ type="image/x-icon" />
26
+
27
+ <!-- SVG and PNG favicons will be added by the layout component -->
28
+
29
+ <link rel="manifest" href="manifest.json" />
30
+ <meta name="theme-color" content="#ffc627" />
31
+
32
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
33
+
34
+ <meta name="author" content="Network Pro Strategies" />
35
+ <meta
36
+ name="robots"
37
+ content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1" />
38
+
39
+ %sveltekit.head%
40
+ </head>
41
+ <body>
42
+ <div id="svelte">%sveltekit.body%</div>
43
+
44
+ <!-- LinkedIn Insight Tag - Added 2025-05-14 10:05:06 by SunDevil311 -->
45
+ <!-- Load LinkedIn script only after page content is fully loaded -->
46
+ <script type="text/javascript">
47
+ // Wait for window load event for optimal performance
48
+ window.addEventListener("load", function () {
49
+ // LinkedIn Partner ID
50
+ window._linkedin_partner_id = "7223748";
51
+ window._linkedin_data_partner_ids =
52
+ window._linkedin_data_partner_ids || [];
53
+ window._linkedin_data_partner_ids.push(window._linkedin_partner_id);
54
+
55
+ // Initialize lintrk if not already initialized
56
+ if (!window.lintrk) {
57
+ window.lintrk = function (a, b) {
58
+ window.lintrk.q.push([a, b]);
59
+ };
60
+ window.lintrk.q = [];
61
+ }
62
+
63
+ // Create and insert script element
64
+ var s = document.getElementsByTagName("script")[0];
65
+ var b = document.createElement("script");
66
+ b.type = "text/javascript";
67
+ b.async = true;
68
+ b.src = "https://snap.licdn.com/li.lms-analytics/insight.min.js";
69
+ s.parentNode.insertBefore(b, s);
70
+ });
71
+ </script>
72
+ <noscript>
73
+ <img
74
+ height="1"
75
+ width="1"
76
+ style="display: none"
77
+ alt=""
78
+ src="https://px.ads.linkedin.com/collect/?pid=7223748&fmt=gif" />
79
+ </noscript>
80
+ </body>
81
+ </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 -->