@networkpro/web 1.6.5 → 1.7.2

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 (41) hide show
  1. package/CODE_OF_CONDUCT.md +2 -2
  2. package/LICENSE.md +20 -9
  3. package/README.md +57 -13
  4. package/_redirects +1 -0
  5. package/cspell.json +2 -0
  6. package/package.json +7 -7
  7. package/playwright.config.js +1 -0
  8. package/src/lib/components/FullWidthSection.svelte +19 -4
  9. package/src/lib/components/LegalNav.svelte +31 -29
  10. package/src/lib/components/PostHog.svelte +20 -8
  11. package/src/lib/components/layout/Footer.svelte +1 -1
  12. package/src/lib/components/layout/HeaderDefault.svelte +2 -2
  13. package/src/lib/components/layout/HeaderHome.svelte +2 -2
  14. package/src/lib/images.js +3 -2
  15. package/src/lib/index.js +2 -1
  16. package/src/lib/meta.js +6 -1
  17. package/src/lib/pages/LicenseContent.svelte +17 -17
  18. package/src/lib/pages/PrivacyContent.svelte +116 -6
  19. package/src/lib/pages/PrivacyDashboard.svelte +240 -0
  20. package/src/lib/pages/TermsUseContent.svelte +1 -1
  21. package/src/lib/styles/css/default.css +23 -10
  22. package/src/lib/styles/global.min.css +1 -3
  23. package/src/lib/utils/privacy.js +18 -3
  24. package/src/lib/utils/trackingCookies.js +40 -0
  25. package/src/lib/utils/trackingStatus.js +46 -0
  26. package/src/lib/utils/utm.js +8 -1
  27. package/src/routes/about/+page.svelte +1 -7
  28. package/src/routes/foss-spotlight/+page.svelte +1 -7
  29. package/src/routes/license/+page.svelte +2 -8
  30. package/src/routes/privacy/+page.server.js +18 -0
  31. package/src/routes/{privacy-policy → privacy}/+page.svelte +5 -11
  32. package/src/routes/{privacy-policy → privacy-dashboard}/+page.server.js +2 -2
  33. package/src/routes/privacy-dashboard/+page.svelte +69 -0
  34. package/src/routes/terms-conditions/+page.svelte +2 -8
  35. package/src/routes/terms-of-use/+page.svelte +2 -8
  36. package/src/service-worker.js +31 -6
  37. package/static/robots.txt +2 -1
  38. package/static/sitemap.xml +10 -22
  39. package/tests/e2e/app.spec.js +50 -68
  40. package/tests/e2e/mobile.spec.js +32 -42
  41. package/tests/e2e/shared/helpers.js +57 -0
@@ -155,7 +155,7 @@ For answers to common questions about this code of conduct, see the FAQ at
155
155
  <div style="font-size: 12px; font-weight: bold; text-align: center;">
156
156
 
157
157
  [Home](https://netwk.pro) &nbsp; | &nbsp; [Terms of Use](https://netwk.pro/terms-of-use)
158
- [Privacy Policy](https://netwk.pro/privacy-policy) &nbsp; | &nbsp; [Legal](https://netwk.pro/legal)
158
+ [Privacy Policy](https://netwk.pro/privacy) &nbsp; | &nbsp; [Legal](https://netwk.pro/license)
159
159
 
160
160
  </div>
161
161
 
@@ -166,7 +166,7 @@ For answers to common questions about this code of conduct, see the FAQ at
166
166
  Copyright &copy; 2025
167
167
  **[Network Pro Strategies](https://netwk.pro/)** (Network Pro&trade;)
168
168
 
169
- Network Pro&trade;, the shield logo, and the "Locking Down Networks&trade;" slogan are [trademarks](https://netwk.pro/legal#trademark) of Network Pro Strategies.
169
+ Network Pro&trade;, the shield logo, and the "Locking Down Networks&trade;" slogan are [trademarks](https://netwk.pro/license#trademark) of Network Pro Strategies.
170
170
 
171
171
  Licensed under **[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)** and the **[GNU GPL](https://spdx.org/licenses/GPL-3.0-or-later.html)**, as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
172
172
 
package/LICENSE.md CHANGED
@@ -1,4 +1,4 @@
1
- <!-- =========================================================================
1
+ <!-- =====================================================================
2
2
  LICENSE.md
3
3
 
4
4
  Copyright © 2025 Network Pro Strategies (Network Pro™)
@@ -14,7 +14,7 @@ This file is part of Network Pro.
14
14
  # Legal, Copyright, and Licensing
15
15
 
16
16
  **Network Pro Strategies**
17
- **Effective Date:** May 18, 2025
17
+ **Effective Date:** May 28, 2025
18
18
 
19
19
  **Official Version Notice**
20
20
  This document is provided for convenience only. In the event of any discrepancy, the authoritative version is the one published at [https://netwk.pro](https://netwk.pro).
@@ -38,8 +38,9 @@ This document is provided for convenience only. In the event of any discrepancy,
38
38
  9. [Third-Party Code and Licenses](#third-party)
39
39
  10. [Prohibited Uses](#prohibited-uses)
40
40
  11. [Modifications and Liability Disclaimer](#disclaimer)
41
- 12. [Contact](#contact)
41
+ 12. [Authoritative Version Clause](#version)
42
42
  13. [Revisions](#revisions)
43
+ 14. [Contact](#contact)
43
44
 
44
45
  ---
45
46
 
@@ -191,12 +192,13 @@ Modifications, redistribution, or any use of the Licensed Material are performed
191
192
 
192
193
  <sub>[Back to top](#top)</sub>
193
194
 
194
- <a name="contact"></a>
195
+ <a name="version"></a>
195
196
 
196
- ## 12. Contact
197
+ ## 12. Authoritative Version Clause
197
198
 
198
- The Company may be contacted via our [contact form](https://netwk.pro/contact) or by email at:
199
- 📧 `contact (at) s.neteng.pro`
199
+ In the event of any discrepancy between different versions, formats, or distributions of any legal document issued by the Company&mdash;including but not limited to license terms, policies, notices, or agreements&mdash;the version published on the Company's primary website at [https://netwk.pro](https://netwk.pro) shall be deemed the official and controlling version.
200
+
201
+ It is your responsibility to review the most current version of any applicable legal document before relying on its contents. Continued use of the Company's materials, services, or Licensed Material constitutes acceptance of the most current version then in effect.
200
202
 
201
203
  <sub>[Back to top](#top)</sub>
202
204
 
@@ -208,14 +210,21 @@ This legal page may be updated to comply with legal or operational changes. The
208
210
 
209
211
  <sub>[Back to top](#top)</sub>
210
212
 
211
- <a name="attribution"></a>
213
+ <a name="contact"></a>
214
+
215
+ ## 14. Contact
216
+
217
+ The Company may be contacted via our [contact form](https://netwk.pro/contact) or by email at:
218
+ 📧 `contact (at) s.neteng.pro`
219
+
220
+ <sub>[Back to top](#top)</sub>
212
221
 
213
222
  ---
214
223
 
215
224
  <div style="font-size: 12px; font-weight: bold; text-align: center;">
216
225
 
217
226
  [Home](https://netwk.pro) &nbsp; | &nbsp; [Terms of Use](https://netwk.pro/terms-of-use)
218
- [Privacy Policy](https://netwk.pro/privacy-policy) &nbsp; | &nbsp; Legal
227
+ [Privacy Policy](https://netwk.pro/privacy) &nbsp; | &nbsp; Legal
219
228
 
220
229
  </div>
221
230
 
@@ -231,3 +240,5 @@ Network Pro&trade;, the shield logo, and the "Locking Down Networks&trade;" slog
231
240
  Licensed under **[CC BY 4.0](#cc-by)** and the **[GNU GPL](#gnu-gpl)**, as published by the [Free Software Foundation](https://www.fsf.org), either version 3 of the License, or (at your option) any later version.
232
241
 
233
242
  </div>
243
+
244
+ <!-- cspell:ignore dlnotes >
package/README.md CHANGED
@@ -31,10 +31,14 @@ All infrastructure and data flows are designed with **maximum transparency, self
31
31
  ```bash
32
32
  .
33
33
  ├── .github/workflows/ # CI workflows and automation
34
- ├── .vscode/ # Recommended VS Code settings, extensions
34
+ ├── .vscode/
35
+ │ ├── customData.json # Custom CSS data for FontAwesome icons
36
+ │ ├── extensions.json # Recommended VSCodium / VS Code extensions
37
+ │ ├── extensions.jsonc # Commented version of extensions.json for reference
38
+ │ └── settings.json # User settings for VSCodium / VS Code
35
39
  ├── netlify-functions/
36
40
  │ └── cspReport.js # Serverless function to receive and log CSP violation reports
37
- ├── scripts/ # Utility scripts
41
+ ├── scripts/ # General utility scripts
38
42
  ├── src/
39
43
  │ ├── lib/ # Reusable components, styles, utilities
40
44
  │ ├── routes/ # SvelteKit routes (+page.svelte, +page.server.js)
@@ -43,13 +47,33 @@ All infrastructure and data flows are designed with **maximum transparency, self
43
47
  │ ├── app.html # SvelteKit entry HTML with CSP/meta/bootentry
44
48
  │ └── service-worker.js # Custom Service Worker
45
49
  ├── static/ # Static assets served at root
50
+ │ ├── manifest.json # Manifest file for PWA configuration
51
+ │ ├── robots.txt # Instructions for web robots
52
+ │ └── sitemap.xml # Sitemap for search engines
46
53
  ├── tests/
47
54
  │ ├── e2e/ # End-to-end Playwright tests
48
55
  │ └── unit/ # Vite unit tests
56
+ ├── _redirects # Netlify redirects
49
57
  ├── netlify.toml # Netlify configuration
50
58
  └── ...
51
59
  ```
52
60
 
61
+ &nbsp;
62
+
63
+ ### E2E Test Structure
64
+
65
+ End-to-end tests are located in `tests/e2e/` and organized by feature or route:
66
+
67
+ ```bash
68
+ tests/
69
+ ├── e2e/
70
+ │ ├── app.spec.js # Desktop and mobile route tests
71
+ │ ├── mobile.spec.js # Mobile-specific assertions
72
+ │ └── shared/
73
+ │ └── helpers.js # Shared test utilities (e.g., getFooter, setDesktopView, setMobileView)
74
+ └── ...
75
+ ```
76
+
53
77
  ---
54
78
 
55
79
  ## 🛠 Getting Started
@@ -180,7 +204,7 @@ Located at `src/hooks.server.js`, this file is responsible for injecting dynamic
180
204
  To re-enable nonce generation for inline scripts in the future:
181
205
 
182
206
  1. Uncomment the nonce generation and injection logic in `hooks.server.js`.
183
- 2. Add `nonce="**cspNonce**"` to inline `<script>` blocks in `app.html` or route templates.
207
+ 2. Add `nonce="__cspNonce__"` to inline `<script>` blocks in `app.html` or route templates.
184
208
 
185
209
  > 💡 The `[headers]` block in `netlify.toml` has been deprecated — all headers are now set dynamically from within SvelteKit.
186
210
 
@@ -244,6 +268,24 @@ This project uses a mix of automated performance, accessibility, and end-to-end
244
268
 
245
269
  &nbsp;
246
270
 
271
+ ### E2E Setup
272
+
273
+ Playwright is included in `devDependencies` and installed automatically with:
274
+
275
+ ```bash
276
+ npm install
277
+ ```
278
+
279
+ To install browser dependencies (required once):
280
+
281
+ ```bash
282
+ npx playwright install
283
+ ```
284
+
285
+ > This downloads the browser binaries (Chromium, Firefox, WebKit) used for testing. You only need to run this once per machine or after a fresh clone.
286
+
287
+ &nbsp;
288
+
247
289
  ### Running Tests
248
290
 
249
291
  Local testing via Vitest and Playwright:
@@ -254,9 +296,11 @@ npm run test:server # Run server-side unit tests with Vitest
254
296
  npm run test:all # Run full test suite
255
297
  npm run test:watch # Watch mode for client tests
256
298
  npm run test:coverage # Collect code coverage reports
257
- npm run test:e2e # Runs Playwright E2E tests
299
+ npm run test:e2e # Runs Playwright E2E tests (with one retry on failure)
258
300
  ```
259
301
 
302
+ > Playwright will retry failed tests once `(--retries=1)` to reduce false negatives from transient flakiness (network, render delay, etc.).
303
+
260
304
  Audit your app using Lighthouse:
261
305
 
262
306
  ```bash
@@ -399,15 +443,15 @@ The following CLI commands are available via `npm run <script>` or `pnpm run <sc
399
443
 
400
444
  <!-- markdownlint-enable MD024 -->
401
445
 
402
- | Script | Description |
403
- | --------------- | -------------------------------------------- |
404
- | `test` | Alias for `test:all` |
405
- | `test:all` | Run both client and server test suites |
406
- | `test:client` | Run client tests with Vitest |
407
- | `test:server` | Run server-side tests with Vitest |
408
- | `test:watch` | Watch mode for client tests |
409
- | `test:coverage` | Collect coverage from both client and server |
410
- | `test:e2e` | Run Playwright E2E tests |
446
+ | Script | Description |
447
+ | --------------- | ------------------------------------------------------ |
448
+ | `test` | Alias for `test:all` |
449
+ | `test:all` | Run both client and server test suites |
450
+ | `test:client` | Run client tests with Vitest |
451
+ | `test:server` | Run server-side tests with Vitest |
452
+ | `test:watch` | Watch mode for client tests |
453
+ | `test:coverage` | Collect coverage from both client and server |
454
+ | `test:e2e` | Runs E2E tests with up to 1 automatic retry on failure |
411
455
 
412
456
  ---
413
457
 
package/_redirects CHANGED
@@ -1 +1,2 @@
1
1
  https://www.netwk.pro/* https://netwk.pro/:splat 301
2
+ /privacy-policy /privacy 301
package/cspell.json CHANGED
@@ -3,9 +3,11 @@
3
3
  "language": "en",
4
4
  "words": [
5
5
  "acode",
6
+ "autocapture",
6
7
  "autorun",
7
8
  "beforeinstallprompt",
8
9
  "bootentry",
10
+ "ccby",
9
11
  "Embedder",
10
12
  "Ente",
11
13
  "esbuild",
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "sideEffects": [
5
5
  "./.netlify/shims.js"
6
6
  ],
7
- "version": "1.6.5",
7
+ "version": "1.7.2",
8
8
  "description": "Locking Down Networks, Unlocking Confidence | Security, Networking, Privacy — Network Pro Strategies",
9
9
  "keywords": [
10
10
  "advisory",
@@ -60,7 +60,7 @@
60
60
  "test:server": "vitest --config vitest.config.server.js",
61
61
  "test:watch": "vitest --config vitest.config.client.js --watch",
62
62
  "test:coverage": "npm run test:client -- --run --coverage && npm run test:server -- --run --coverage",
63
- "test:e2e": "npx playwright test",
63
+ "test:e2e": "npx playwright test --retries=1",
64
64
  "lint": "eslint . --ext .mjs,.js,.svelte",
65
65
  "lint:fix": "eslint . --ext .mjs,.js,.svelte --fix",
66
66
  "lint:jsdoc": "eslint . --ext .js,.mjs,.svelte --max-warnings=0",
@@ -78,9 +78,9 @@
78
78
  },
79
79
  "dependencies": {
80
80
  "nodemailer": "^7.0.3",
81
- "posthog-js": "^1.246.0",
81
+ "posthog-js": "^1.248.1",
82
82
  "semver": "^7.7.2",
83
- "svelte": "5.33.4"
83
+ "svelte": "5.33.10"
84
84
  },
85
85
  "devDependencies": {
86
86
  "@eslint/compat": "^1.2.9",
@@ -94,7 +94,7 @@
94
94
  "@testing-library/svelte": "^5.2.8",
95
95
  "@vitest/coverage-v8": "^3.1.4",
96
96
  "autoprefixer": "^10.4.21",
97
- "browserslist": "^4.24.5",
97
+ "browserslist": "^4.25.0",
98
98
  "eslint": "^9.27.0",
99
99
  "eslint-config-prettier": "^10.1.5",
100
100
  "eslint-plugin-jsdoc": "^50.6.17",
@@ -106,10 +106,10 @@
106
106
  "markdownlint-cli2": "^0.18.1",
107
107
  "mdsvex": "^0.12.6",
108
108
  "playwright": "^1.52.0",
109
- "postcss": "^8.5.3",
109
+ "postcss": "^8.5.4",
110
110
  "prettier": "^3.5.3",
111
111
  "prettier-plugin-svelte": "^3.4.0",
112
- "stylelint": "^16.19.1",
112
+ "stylelint": "^16.20.0",
113
113
  "stylelint-config-html": "^1.1.0",
114
114
  "stylelint-config-recommended": "^16.0.0",
115
115
  "stylelint-order": "^7.0.0",
@@ -36,6 +36,7 @@ export default defineConfig({
36
36
  baseURL: "http://localhost:4173?nosw", // Update to use preview server URL
37
37
  trace: "on-first-retry",
38
38
  timeout: 60000, // Default action timeout of 60 seconds for each step
39
+ navigationTimeout: 60000, // Timeout for navigation operations
39
40
  },
40
41
 
41
42
  /* Configure projects */
@@ -7,13 +7,28 @@ This file is part of Network Pro.
7
7
  ========================================================================== -->
8
8
 
9
9
  <script>
10
- export let centered = false; // this prop lets us control vertical centering
10
+ /**
11
+ * Optional: Allows vertical centering of the section
12
+ * @type {boolean}
13
+ */
14
+ export let centered = false;
15
+
16
+ /**
17
+ * Additional classes for the outer full-width wrapper
18
+ * @type {string}
19
+ */
20
+ export let outerClass = "";
21
+
22
+ /**
23
+ * Additional classes for the inner container
24
+ * @type {string}
25
+ */
26
+ export let containerClass = "";
11
27
  </script>
12
28
 
13
- <div class="full-width-section {centered ? 'centered' : ''}">
14
- <div class="container">
29
+ <div class={`full-width-section ${centered ? "centered" : ""} ${outerClass}`}>
30
+ <div class={`container ${containerClass}`}>
15
31
  <slot></slot>
16
- <!-- Slot to allow child content -->
17
32
  </div>
18
33
  </div>
19
34
 
@@ -13,15 +13,15 @@ This file is part of Network Pro.
13
13
  //console.log("Base path:", base);
14
14
 
15
15
  const termsLink = `${base}/terms-of-use`;
16
- const privacyLink = `${base}/privacy-policy`;
16
+ const privacyLink = `${base}/privacy`;
17
17
  const licenseLink = `${base}/license`;
18
+ const pdashLink = `${base}/privacy-dashboard`;
18
19
 
19
20
  /**
20
21
  * Navigation link object.
21
22
  * @typedef {Object} NavLink
22
23
  * @property {string} href - The URL the link points to.
23
24
  * @property {string} text - The text displayed for the link.
24
- * @property {string} target - Specifies where to open the link (e.g., "_self" or "_blank").
25
25
  * @property {number} [colspan] - Optional property to specify column span for the table cell.
26
26
  */
27
27
 
@@ -31,46 +31,48 @@ This file is part of Network Pro.
31
31
  */
32
32
  const rows = [
33
33
  [
34
- {
35
- href: termsLink,
36
- text: "Terms of Use",
37
- target: "_self",
38
- },
39
34
  {
40
35
  href: privacyLink,
41
36
  text: "Privacy Policy",
42
- target: "_self",
37
+ },
38
+ {
39
+ href: pdashLink,
40
+ text: "Privacy Dashboard",
43
41
  },
44
42
  ],
45
43
  [
44
+ {
45
+ href: termsLink,
46
+ text: "Terms of Use",
47
+ },
46
48
  {
47
49
  href: licenseLink,
48
50
  text: "Legal",
49
- target: "_self",
50
- colspan: 2,
51
51
  },
52
52
  ],
53
53
  ];
54
54
  </script>
55
55
 
56
56
  <!-- BEGIN LEGAL NAVIGATION -->
57
- <div class="bnav-wrap">
58
- <table class="bnav">
59
- <tbody>
60
- {#each rows as row}
61
- <tr>
62
- {#each row as link}
63
- <td
64
- class={link.colspan ? "bnav-cell" : "bnav-nav"}
65
- colspan={link.colspan || 1}>
66
- <a href={link.href} target={link.target}>
67
- {link.text}
68
- </a>
69
- </td>
70
- {/each}
71
- </tr>
72
- {/each}
73
- </tbody>
74
- </table>
75
- </div>
57
+ <nav aria-label="Legal navigation">
58
+ <div class="bnav-wrap">
59
+ <table class="bnav">
60
+ <tbody>
61
+ {#each rows as row}
62
+ <tr>
63
+ {#each row as link}
64
+ <td class="bnav-cell" colspan={link.colspan || 1}>
65
+ <a href={link.href} target="_self">
66
+ {link.text}
67
+ </a>
68
+ </td>
69
+ {/each}
70
+ </tr>
71
+ {/each}
72
+ </tbody>
73
+ </table>
74
+ </div>
75
+ </nav>
76
76
  <!-- END LEGAL NAVIGATION -->
77
+
78
+ <!-- cspell:ignore pdash bnav -->
@@ -10,15 +10,27 @@ This file is part of Network Pro.
10
10
  import posthog from "posthog-js";
11
11
  import { onMount } from "svelte";
12
12
  import { browser } from "$app/environment";
13
+ import { shouldTrackUser } from "$lib/utils/privacy.js";
13
14
 
14
- // cspell:disable
15
15
  onMount(() => {
16
- if (browser) {
17
- posthog.init("phc_Qshfo6AXzh4pS7aPigfqyeo4qj1qlyh7gDuHDeVMSR0", {
18
- api_host: "https://us.i.posthog.com",
19
- person_profiles: "identified_only",
20
- });
21
- }
16
+ if (!browser) return;
17
+
18
+ const allowTracking = shouldTrackUser();
19
+
20
+ // cspell:disable-next-line
21
+ posthog.init("phc_Qshfo6AXzh4pS7aPigfqyeo4qj1qlyh7gDuHDeVMSR0", {
22
+ api_host: "https://us.i.posthog.com",
23
+ loaded: (ph) => {
24
+ if (!allowTracking) {
25
+ console.log("[PostHog] ⛔ User opted out — disabling tracking");
26
+ ph.opt_out_capturing(); // Fully disable any tracking
27
+ } else {
28
+ console.log("[PostHog] ✅ Tracking enabled");
29
+ }
30
+ },
31
+ autocapture: allowTracking, // Optional: Disable autocapture
32
+ capture_pageview: allowTracking, // Optional: Disable initial pageview
33
+ person_profiles: "identified_only",
34
+ });
22
35
  });
23
- //cspell:enable
24
36
  </script>
@@ -14,7 +14,7 @@ This file is part of Network Pro.
14
14
  import { bySvg, ccSvg } from "$lib";
15
15
 
16
16
  // Log the base path to verify its value
17
- console.log("Base path:", base);
17
+ //console.log("Base path:", base);
18
18
 
19
19
  // Dynamic links for licensing and trademark
20
20
  const ccbyLink = `${base}/license#cc-by`;
@@ -10,7 +10,7 @@ This file is part of Network Pro.
10
10
  import { base } from "$app/paths";
11
11
 
12
12
  // Log the base path to verify its value
13
- console.log("Base path:", base);
13
+ //console.log("Base path:", base);
14
14
 
15
15
  const homeLink = base || "/";
16
16
  const aboutLink = `${base}/about`;
@@ -62,7 +62,7 @@ This file is part of Network Pro.
62
62
  </script>
63
63
 
64
64
  <!-- BEGIN DEFAULT HEADER -->
65
- <nav class="center-nav">
65
+ <nav class="center-nav" aria-label="Site navigation">
66
66
  {#each nav as { label, href, target, external }, index}
67
67
  <a {href} {target} rel={external ? rel : undefined}>
68
68
  {label}
@@ -10,7 +10,7 @@ This file is part of Network Pro.
10
10
  import { base } from "$app/paths";
11
11
 
12
12
  // Log the base path to verify its value
13
- console.log("Base path:", base);
13
+ //console.log("Base path:", base);
14
14
 
15
15
  const aboutLink = `${base}/about`;
16
16
  const fossLink = `${base}/foss-spotlight`;
@@ -60,7 +60,7 @@ This file is part of Network Pro.
60
60
  </script>
61
61
 
62
62
  <!-- BEGIN HOME HEADER -->
63
- <nav class="center-nav">
63
+ <nav class="center-nav" aria-label="Homepage navigation">
64
64
  {#each nav as { label, href, target, external }, index}
65
65
  <a {href} {target} rel={external ? rel : undefined}>
66
66
  {label}
package/src/lib/images.js CHANGED
@@ -10,11 +10,12 @@ This file is part of Network Pro.
10
10
 
11
11
  /**
12
12
  * Image import utility
13
- * Provides convenient access to images in the src/lib/img directory
14
13
  *
14
+ * @file images.js
15
+ * @description Provides convenient access to images in the src/lib/img directory
15
16
  * @module src/lib
16
17
  * @author SunDevil311
17
- * @updated 2025-05-24
18
+ * @updated 2025-05-28
18
19
  */
19
20
 
20
21
  // Import favicon images
package/src/lib/index.js CHANGED
@@ -8,8 +8,9 @@ This file is part of Network Pro.
8
8
 
9
9
  /**
10
10
  * Library index file
11
- * Main export point for library components, utilities, and assets
12
11
  *
12
+ * @file index.js
13
+ * @description Main export point for library components, utilities, and assets
13
14
  * @module src/lib
14
15
  * @author SunDevil311
15
16
  * @updated 2025-05-14
package/src/lib/meta.js CHANGED
@@ -26,7 +26,7 @@ const meta = {
26
26
  title: "About Us — Network Pro™",
27
27
  description: "About Us | Security, Networking, Privacy — Network Pro™",
28
28
  },
29
- "/privacy-policy": {
29
+ "/privacy": {
30
30
  title: "Privacy Policy — Network Pro™",
31
31
  description:
32
32
  "Privacy Policy | Security, Networking, Privacy — Network Pro™",
@@ -51,6 +51,11 @@ const meta = {
51
51
  description:
52
52
  "FOSS Spotlight | Security, Networking, Privacy — Network Pro™",
53
53
  },
54
+ "/privacy-dashboard": {
55
+ title: "Privacy Dashboard — Network Pro™",
56
+ description:
57
+ "Privacy Dashboard | Security, Networking, Privacy — Network Pro™",
58
+ },
54
59
  // Excludes redirect-only routes like /contact, /consultation, /privacy-rights
55
60
  };
56
61
 
@@ -51,9 +51,9 @@ This file is part of Network Pro.
51
51
  { id: "third-party", text: "Third-Party Code and Licenses" },
52
52
  { id: "prohibited-uses", text: "Prohibited Uses" },
53
53
  { id: "disclaimer", text: "Modifications and Liability Disclaimer" },
54
- { id: "contact", text: "Contact" },
55
- { id: "revisions", text: "Revisions" },
56
54
  { id: "authoritative", text: "Authoritative Version Clause" },
55
+ { id: "revisions", text: "Revisions" },
56
+ { id: "contact", text: "Contact" },
57
57
  ];
58
58
 
59
59
  /**
@@ -62,7 +62,7 @@ This file is part of Network Pro.
62
62
  */
63
63
  const constants = {
64
64
  company: "Network Pro Strategies",
65
- effectiveDate: "May 24, 2025",
65
+ effectiveDate: "May 28, 2025",
66
66
  classSmall: "small-text",
67
67
  rel: "noopener noreferrer",
68
68
  hrefTop: "#top",
@@ -472,20 +472,6 @@ This file is part of Network Pro.
472
472
  —including, without limitation, any claims or disputes brought by third parties,
473
473
  whether in contract, tort, or otherwise.
474
474
  </p>
475
- {:else if link.id === "contact"}
476
- <p>
477
- The Company can be contacted via our
478
- <a rel={constants.rel} href={contactLink} target={constants.targetBlank}
479
- >contact form</a>
480
- or by email at:<br />
481
- 📧 <code>contact (at) s.neteng.pro</code>
482
- </p>
483
- {:else if link.id === "revisions"}
484
- <p>
485
- This legal page may be updated to comply with legal or operational
486
- changes. The current effective date is listed at the top of this
487
- document.
488
- </p>
489
475
  {:else if link.id === "authoritative"}
490
476
  <p>
491
477
  In the event of any discrepancy between different versions, formats, or
@@ -504,6 +490,20 @@ This file is part of Network Pro.
504
490
  of the Company's materials, services, or Licensed Material constitutes
505
491
  acceptance of the most current version then in effect.
506
492
  </p>
493
+ {:else if link.id === "revisions"}
494
+ <p>
495
+ This legal page may be updated to comply with legal or operational
496
+ changes. The current effective date is listed at the top of this
497
+ document.
498
+ </p>
499
+ {:else if link.id === "contact"}
500
+ <p>
501
+ The Company can be contacted via our
502
+ <a rel={constants.rel} href={contactLink} target={constants.targetBlank}
503
+ >contact form</a>
504
+ or by email at:<br />
505
+ 📧 <code>contact (at) s.neteng.pro</code>
506
+ </p>
507
507
  {/if}
508
508
 
509
509
  <span class={constants.classSmall}>