linkfeed-pro 1.0.7

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 (65) hide show
  1. package/.claude/settings.local.json +9 -0
  2. package/.output/chrome-mv3/_locales/de/messages.json +214 -0
  3. package/.output/chrome-mv3/_locales/en/messages.json +214 -0
  4. package/.output/chrome-mv3/_locales/es/messages.json +214 -0
  5. package/.output/chrome-mv3/_locales/fr/messages.json +214 -0
  6. package/.output/chrome-mv3/_locales/hi/messages.json +214 -0
  7. package/.output/chrome-mv3/_locales/id/messages.json +214 -0
  8. package/.output/chrome-mv3/_locales/it/messages.json +214 -0
  9. package/.output/chrome-mv3/_locales/nl/messages.json +214 -0
  10. package/.output/chrome-mv3/_locales/pl/messages.json +214 -0
  11. package/.output/chrome-mv3/_locales/pt_BR/messages.json +214 -0
  12. package/.output/chrome-mv3/_locales/pt_PT/messages.json +214 -0
  13. package/.output/chrome-mv3/_locales/tr/messages.json +214 -0
  14. package/.output/chrome-mv3/assets/popup-Z_g1HFs5.css +1 -0
  15. package/.output/chrome-mv3/background.js +42 -0
  16. package/.output/chrome-mv3/chunks/popup-IxiPwS1E.js +42 -0
  17. package/.output/chrome-mv3/content-scripts/content.js +179 -0
  18. package/.output/chrome-mv3/icon-128.png +0 -0
  19. package/.output/chrome-mv3/icon-16.png +0 -0
  20. package/.output/chrome-mv3/icon-48.png +0 -0
  21. package/.output/chrome-mv3/icon.svg +9 -0
  22. package/.output/chrome-mv3/manifest.json +1 -0
  23. package/.output/chrome-mv3/popup.html +247 -0
  24. package/.wxt/eslint-auto-imports.mjs +56 -0
  25. package/.wxt/tsconfig.json +28 -0
  26. package/.wxt/types/globals.d.ts +15 -0
  27. package/.wxt/types/i18n.d.ts +593 -0
  28. package/.wxt/types/imports-module.d.ts +20 -0
  29. package/.wxt/types/imports.d.ts +50 -0
  30. package/.wxt/types/paths.d.ts +32 -0
  31. package/.wxt/wxt.d.ts +7 -0
  32. package/entrypoints/background.ts +112 -0
  33. package/entrypoints/content.ts +656 -0
  34. package/entrypoints/popup/main.ts +452 -0
  35. package/entrypoints/popup/modules/auth-modal.ts +219 -0
  36. package/entrypoints/popup/modules/settings.ts +78 -0
  37. package/entrypoints/popup/modules/ui-state.ts +95 -0
  38. package/entrypoints/popup/style.css +844 -0
  39. package/entrypoints/popup.html +261 -0
  40. package/lib/constants.ts +9 -0
  41. package/lib/device-meta.ts +173 -0
  42. package/lib/i18n.ts +201 -0
  43. package/lib/license.ts +470 -0
  44. package/lib/selectors.ts +24 -0
  45. package/lib/storage.ts +95 -0
  46. package/lib/telemetry.ts +94 -0
  47. package/package.json +30 -0
  48. package/public/_locales/de/messages.json +214 -0
  49. package/public/_locales/en/messages.json +214 -0
  50. package/public/_locales/es/messages.json +214 -0
  51. package/public/_locales/fr/messages.json +214 -0
  52. package/public/_locales/hi/messages.json +214 -0
  53. package/public/_locales/id/messages.json +214 -0
  54. package/public/_locales/it/messages.json +214 -0
  55. package/public/_locales/nl/messages.json +214 -0
  56. package/public/_locales/pl/messages.json +214 -0
  57. package/public/_locales/pt_BR/messages.json +214 -0
  58. package/public/_locales/pt_PT/messages.json +214 -0
  59. package/public/_locales/tr/messages.json +214 -0
  60. package/public/icon-128.png +0 -0
  61. package/public/icon-16.png +0 -0
  62. package/public/icon-48.png +0 -0
  63. package/public/icon.svg +9 -0
  64. package/tsconfig.json +3 -0
  65. package/wxt.config.ts +50 -0
@@ -0,0 +1,247 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <title>LinkFeed Pro Settings</title>
7
+ <script type="module" crossorigin src="/chunks/popup-IxiPwS1E.js"></script>
8
+ <link rel="stylesheet" crossorigin href="/assets/popup-Z_g1HFs5.css">
9
+ </head>
10
+
11
+ <body>
12
+ <div class="header">
13
+ <a href="https://linkfeed.pro" target="_blank" class="brand">
14
+ <div class="brand-text">
15
+ <h1>LinkFeed <span id="status-badge" class="status-badge free">Free</span></h1>
16
+ </div>
17
+ </a>
18
+ <div class="header-actions">
19
+ <button id="open-hide-btn" class="icon-btn header-btn" type="button" title="Hide">
20
+ <svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
21
+ <path d="M2 12s3.5-6 10-6 10 6 10 6-3.5 6-10 6-10-6-10-6z" />
22
+ <circle cx="12" cy="12" r="3" />
23
+ <line x1="3" y1="3" x2="21" y2="21" />
24
+ </svg>
25
+ </button>
26
+ <button id="open-display-btn" class="icon-btn header-btn" type="button" title="Display">
27
+ <svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
28
+ <polyline points="9 3 3 3 3 9" />
29
+ <polyline points="15 3 21 3 21 9" />
30
+ <polyline points="15 21 21 21 21 15" />
31
+ <polyline points="9 21 3 21 3 15" />
32
+ <line x1="3" y1="3" x2="10" y2="10" />
33
+ <line x1="21" y1="3" x2="14" y2="10" />
34
+ <line x1="21" y1="21" x2="14" y2="14" />
35
+ <line x1="3" y1="21" x2="10" y2="14" />
36
+ </svg>
37
+ </button>
38
+ <button id="open-settings-btn" class="icon-btn header-btn" type="button" title="Settings">
39
+ <svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
40
+ <path d="M12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z" />
41
+ <path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 1 1-4 0v-.09a1.65 1.65 0 0 0-1-1.51 1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 1 1 0-4h.09a1.65 1.65 0 0 0 1.51-1 1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33h.01a1.65 1.65 0 0 0 1-1.51V3a2 2 0 1 1 4 0v.09a1.65 1.65 0 0 0 1 1.51h.01a1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82v.01a1.65 1.65 0 0 0 1.51 1H21a2 2 0 1 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z">
42
+ </path>
43
+ </svg>
44
+ </button>
45
+ <label id="global-toggle-label" class="global-toggle-btn" title="Enable/Disable all features">
46
+ <input type="checkbox" id="globalEnabled" checked>
47
+ <div class="icon-btn header-btn">
48
+ <svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-power">
49
+ <path d="M12 2v10" />
50
+ <path d="M18.36 6.64a9 9 0 1 1-12.73 0" />
51
+ </svg>
52
+ </div>
53
+ </label>
54
+ </div>
55
+ </div>
56
+
57
+ <div id="hide-view" class="settings-view">
58
+ <div class="settings-container feature-container">
59
+ <!-- FEATURE: Hide Navigation Bar (Free) -->
60
+ <label class="setting-card" data-feature="free">
61
+ <input type="checkbox" id="hideNavBar">
62
+ <span class="setting-label">Hide Navigation Bar</span>
63
+ <span class="icon-btn">
64
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
65
+ <rect x="3" y="4" width="18" height="4" rx="1" />
66
+ <rect x="3" y="10" width="18" height="10" rx="1" />
67
+ </svg>
68
+ </span>
69
+ </label>
70
+
71
+ <!-- FEATURE: Hide Sidebars (Free) -->
72
+ <label class="setting-card" data-feature="free">
73
+ <input type="checkbox" id="hideSidebars">
74
+ <span class="setting-label">Hide Side Bar</span>
75
+ <span class="icon-btn">
76
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
77
+ <rect x="3" y="3" width="7" height="18" rx="1" />
78
+ <rect x="14" y="3" width="7" height="18" rx="1" />
79
+ </svg>
80
+ </span>
81
+ </label>
82
+
83
+ <!-- FEATURE: Hide Messenger (Free) -->
84
+ <label class="setting-card" data-feature="free">
85
+ <input type="checkbox" id="hideMessenger">
86
+ <span class="setting-label">Hide Messenger</span>
87
+ <span class="icon-btn">
88
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
89
+ <path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z" />
90
+ <line x1="4" y1="4" x2="20" y2="20" />
91
+ </svg>
92
+ </span>
93
+ </label>
94
+
95
+ <!-- FEATURE: Hide Start a Post (Free) -->
96
+ <label class="setting-card" data-feature="free">
97
+ <input type="checkbox" id="hideStartPost">
98
+ <span class="setting-label">Hide 'Start Post'</span>
99
+ <span class="icon-btn">
100
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
101
+ <path d="M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z" />
102
+ <line x1="2" y1="2" x2="22" y2="22" />
103
+ </svg>
104
+ </span>
105
+ </label>
106
+
107
+ <!-- FEATURE: Hide Promoted (Free) -->
108
+ <label class="setting-card" data-feature="free">
109
+ <input type="checkbox" id="hidePromoted">
110
+ <span class="setting-label">Hide 'Promoted'</span>
111
+ <span class="icon-btn">
112
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
113
+ <path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" />
114
+ <line x1="4" y1="4" x2="20" y2="20" />
115
+ </svg>
116
+ </span>
117
+ </label>
118
+
119
+ <!-- FEATURE: Hide Removed Cards (Premium) -->
120
+ <div class="setting-card premium-feature" data-feature="premium" id="hideRemovedFeedCardsCard">
121
+ <input type="checkbox" id="hideRemovedFeedCards">
122
+ <span class="setting-label">Hide 'Post Removed'</span>
123
+ <span class="pro-badge">PRO</span>
124
+ <span class="icon-btn">
125
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
126
+ <line x1="4" y1="4" x2="20" y2="20" />
127
+ <line x1="20" y1="4" x2="4" y2="20" />
128
+ </svg>
129
+ </span>
130
+ </div>
131
+ </div>
132
+ </div>
133
+
134
+ <div id="display-view" class="settings-view hidden">
135
+ <div class="settings-container feature-container">
136
+ <!-- FEATURE: Auto-Expand Posts (Premium) -->
137
+ <div class="setting-card premium-feature" data-feature="premium" id="autoExpandCard">
138
+ <input type="checkbox" id="autoExpandPosts">
139
+ <span class="setting-label">Auto-Expand Posts</span>
140
+ <span class="pro-badge">PRO</span>
141
+ <span class="icon-btn">
142
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
143
+ <polyline points="7 13 12 18 17 13" />
144
+ <polyline points="7 6 12 11 17 6" />
145
+ </svg>
146
+ </span>
147
+ </div>
148
+ <!-- FEATURE: Text Size (Premium) -->
149
+ <div class="slider-section premium-feature" data-feature="premium">
150
+ <div class="section-top">
151
+ <label class="section-label">Text Size</label>
152
+ <span class="pro-badge">PRO</span>
153
+ <span id="fontSize-value" class="value-display">20px</span>
154
+ </div>
155
+ <input type="range" id="fontSize" min="14" max="32" step="1">
156
+ </div>
157
+
158
+ <!-- FEATURE: Feed Width (Premium) -->
159
+ <div class="slider-section premium-feature" data-feature="premium">
160
+ <div class="section-top">
161
+ <label class="section-label">Feed Width</label>
162
+ <span class="pro-badge">PRO</span>
163
+ <span id="feedWidth-value" class="value-display">1500px</span>
164
+ </div>
165
+ <input type="range" id="feedWidth" min="600" max="2500" step="50">
166
+ </div>
167
+
168
+ <!-- FEATURE: Post Spacing (Premium) -->
169
+ <div class="slider-section premium-feature" data-feature="premium">
170
+ <div class="section-top">
171
+ <label class="section-label">Post Spacing</label>
172
+ <span class="pro-badge">PRO</span>
173
+ <span id="feedSpacing-value" class="value-display">40px</span>
174
+ </div>
175
+ <input type="range" id="feedSpacing" min="0" max="80" step="2">
176
+ </div>
177
+ </div>
178
+ </div>
179
+
180
+ <div id="settings-view" class="settings-view hidden">
181
+ <div class="settings-panel">
182
+ <h2 id="settings-title">Settings</h2>
183
+ <label id="settings-language-label" class="settings-label" for="locale-select">Language</label>
184
+ <div class="locale-select-wrap">
185
+ <select id="locale-select" class="locale-select"></select>
186
+ <span class="locale-select-caret" aria-hidden="true">
187
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round">
188
+ <polyline points="6 9 12 15 18 9" />
189
+ </svg>
190
+ </span>
191
+ </div>
192
+ <p id="settings-language-help" class="settings-help">Force the popup language. Auto follows your browser language.</p>
193
+ </div>
194
+ <div class="settings-panel">
195
+ <h2 id="settings-subscription-title">Subscription</h2>
196
+ <div class="subscription-row">
197
+ <span id="settings-subscription-status-label" class="settings-label">Status</span>
198
+ <span id="settings-subscription-status" class="subscription-status-badge subscription-status-free">Free</span>
199
+ </div>
200
+ <p id="settings-subscription-detail" class="settings-help"></p>
201
+ <div class="settings-actions">
202
+ <button id="settings-account-btn" class="settings-btn secondary" type="button">My Account</button>
203
+ <button id="settings-upgrade-btn" class="settings-btn primary hidden" type="button">Upgrade now</button>
204
+ </div>
205
+ </div>
206
+ <div class="settings-footer">
207
+ <span id="settings-version-value">-</span>
208
+ </div>
209
+ </div>
210
+
211
+ <!-- Modal Overlay for Trial Activation -->
212
+ <div id="trial-modal" class="modal-overlay hidden">
213
+ <div class="modal-content">
214
+ <button id="modal-close-btn" class="modal-close">×</button>
215
+
216
+ <!-- Step 1: Email Input -->
217
+ <div id="modal-email-step" class="modal-step">
218
+ <h2>Unlock Pro Features</h2>
219
+ <p class="modal-desc">Enter your email to link this device and unlock Pro.</p>
220
+ <input type="email" id="modal-email" placeholder="Enter your email">
221
+ <button id="modal-send-link-btn" class="modal-btn primary">Send Magic Link</button>
222
+ <p id="modal-email-error" class="modal-error hidden"></p>
223
+ </div>
224
+
225
+ <!-- Step 2: Email Confirmation -->
226
+ <div id="modal-check-email-step" class="modal-step hidden">
227
+ <h2>Check Your Email</h2>
228
+ <p class="modal-desc">We sent a confirmation link to <span id="modal-email-display"></span></p>
229
+
230
+ <button id="modal-verify-btn" class="modal-btn primary">I've clicked the link</button>
231
+ <p id="modal-check-email-error" class="modal-error hidden"></p>
232
+ <button id="modal-back-btn" class="modal-link-btn">Use a different email</button>
233
+ </div>
234
+
235
+ <!-- Step 3: Trial Expired -->
236
+ <div id="modal-expired-step" class="modal-step hidden">
237
+ <h2>Trial Expired</h2>
238
+ <p class="modal-desc">To use Pro features please upgrade.</p>
239
+ <button id="modal-upgrade-btn" class="modal-btn primary">See Plans</button>
240
+ </div>
241
+
242
+ </div>
243
+ </div>
244
+
245
+ </body>
246
+
247
+ </html>
@@ -0,0 +1,56 @@
1
+ const globals = {
2
+ "AutoMount": true,
3
+ "AutoMountOptions": true,
4
+ "Browser": true,
5
+ "ContentScriptAnchoredOptions": true,
6
+ "ContentScriptAppendMode": true,
7
+ "ContentScriptContext": true,
8
+ "ContentScriptInlinePositioningOptions": true,
9
+ "ContentScriptModalPositioningOptions": true,
10
+ "ContentScriptOverlayAlignment": true,
11
+ "ContentScriptOverlayPositioningOptions": true,
12
+ "ContentScriptPositioningOptions": true,
13
+ "ContentScriptUi": true,
14
+ "ContentScriptUiOptions": true,
15
+ "IframeContentScriptUi": true,
16
+ "IframeContentScriptUiOptions": true,
17
+ "InjectScriptOptions": true,
18
+ "IntegratedContentScriptUi": true,
19
+ "IntegratedContentScriptUiOptions": true,
20
+ "InvalidMatchPattern": true,
21
+ "MatchPattern": true,
22
+ "MigrationError": true,
23
+ "ScriptPublicPath": true,
24
+ "ShadowRootContentScriptUi": true,
25
+ "ShadowRootContentScriptUiOptions": true,
26
+ "StopAutoMount": true,
27
+ "StorageArea": true,
28
+ "StorageAreaChanges": true,
29
+ "StorageItemKey": true,
30
+ "WxtAppConfig": true,
31
+ "WxtStorage": true,
32
+ "WxtStorageItem": true,
33
+ "WxtWindowEventMap": true,
34
+ "browser": true,
35
+ "createIframeUi": true,
36
+ "createIntegratedUi": true,
37
+ "createShadowRootUi": true,
38
+ "defineAppConfig": true,
39
+ "defineBackground": true,
40
+ "defineContentScript": true,
41
+ "defineUnlistedScript": true,
42
+ "defineWxtPlugin": true,
43
+ "fakeBrowser": true,
44
+ "injectScript": true,
45
+ "storage": true,
46
+ "useAppConfig": true
47
+ }
48
+
49
+ export default {
50
+ name: "wxt/auto-imports",
51
+ languageOptions: {
52
+ globals,
53
+ /** @type {import('eslint').Linter.SourceType} */
54
+ sourceType: "module",
55
+ },
56
+ };
@@ -0,0 +1,28 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ESNext",
4
+ "module": "ESNext",
5
+ "moduleResolution": "Bundler",
6
+ "noEmit": true,
7
+ "esModuleInterop": true,
8
+ "forceConsistentCasingInFileNames": true,
9
+ "resolveJsonModule": true,
10
+ "strict": true,
11
+ "skipLibCheck": true,
12
+ "paths": {
13
+ "@": [".."],
14
+ "@/*": ["../*"],
15
+ "~": [".."],
16
+ "~/*": ["../*"],
17
+ "@@": [".."],
18
+ "@@/*": ["../*"],
19
+ "~~": [".."],
20
+ "~~/*": ["../*"]
21
+ }
22
+ },
23
+ "include": [
24
+ "../**/*",
25
+ "./wxt.d.ts"
26
+ ],
27
+ "exclude": ["../.output"]
28
+ }
@@ -0,0 +1,15 @@
1
+ // Generated by wxt
2
+ interface ImportMetaEnv {
3
+ readonly MANIFEST_VERSION: 2 | 3;
4
+ readonly BROWSER: string;
5
+ readonly CHROME: boolean;
6
+ readonly FIREFOX: boolean;
7
+ readonly SAFARI: boolean;
8
+ readonly EDGE: boolean;
9
+ readonly OPERA: boolean;
10
+ readonly COMMAND: "build" | "serve";
11
+ readonly ENTRYPOINT: string;
12
+ }
13
+ interface ImportMeta {
14
+ readonly env: ImportMetaEnv
15
+ }