@linktr.ee/linkapp 0.0.48 → 0.0.49
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.
- package/README.md +1 -1
- package/dev-server/components/form/array-field.tsx +115 -0
- package/dev-server/components/form/file-field.tsx +48 -0
- package/dev-server/components/form/form-element.tsx +304 -0
- package/dev-server/components/form/link-behavior-field.tsx +68 -0
- package/dev-server/components/form/location-field.tsx +60 -0
- package/dev-server/components/settings-preview.tsx +138 -302
- package/dev-server/components/ui/checkbox.tsx +29 -0
- package/dev-server/components/ui/dialog.tsx +2 -10
- package/dev-server/components/ui/field.tsx +24 -49
- package/dev-server/components/ui/input.tsx +20 -21
- package/dev-server/components/ui/label.tsx +4 -4
- package/dev-server/components/ui/radio-group.tsx +37 -0
- package/dev-server/components/ui/select.tsx +153 -0
- package/dev-server/components/ui/switch.tsx +31 -0
- package/dev-server/components/ui/tabs.tsx +1 -1
- package/dev-server/components/ui/textarea.tsx +18 -19
- package/dev-server/env.d.ts +4 -1
- package/dev-server/expanded/main.tsx +20 -22
- package/dev-server/expanded.html +0 -1
- package/dev-server/featured/main.tsx +29 -36
- package/dev-server/featured-carousel.html +0 -1
- package/dev-server/featured.html +0 -1
- package/dev-server/index.html +1 -7
- package/dev-server/lib/utils.ts +3 -3
- package/dev-server/package.json +3 -3
- package/dev-server/postcss/tailwind-source-fallback.js +2 -7
- package/dev-server/postcss.config.mjs +2 -2
- package/dev-server/preview/Preview.tsx +310 -350
- package/dev-server/preview/main.tsx +8 -8
- package/dev-server/preview/preview.css +0 -1
- package/dev-server/public/site.webmanifest +1 -1
- package/dev-server/rsbuild.config.ts +1 -1
- package/dev-server/shared/dev-parent-simulator.ts +219 -0
- package/dev-server/shared/theme-presets.ts +71 -75
- package/dev-server/shared/theme-utils.ts +11 -11
- package/dist/cli.js +18 -12
- package/dist/cli.js.map +1 -1
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +27 -42
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +26 -16
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/deploy.d.ts +1 -11
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +3 -13
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +132 -388
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +17 -29
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.d.ts.map +1 -1
- package/dist/commands/logout.js +6 -11
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/rollback.d.ts +10 -0
- package/dist/commands/rollback.d.ts.map +1 -0
- package/dist/commands/rollback.js +148 -0
- package/dist/commands/rollback.js.map +1 -0
- package/dist/commands/status.d.ts +8 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +96 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/test-url-match-rules.d.ts.map +1 -1
- package/dist/commands/test-url-match-rules.js +20 -26
- package/dist/commands/test-url-match-rules.js.map +1 -1
- package/dist/lib/auth/device-flow.d.ts +1 -1
- package/dist/lib/auth/device-flow.d.ts.map +1 -1
- package/dist/lib/auth/device-flow.js +3 -3
- package/dist/lib/auth/device-flow.js.map +1 -1
- package/dist/lib/auth/token-storage.d.ts.map +1 -1
- package/dist/lib/auth/token-storage.js +14 -37
- package/dist/lib/auth/token-storage.js.map +1 -1
- package/dist/lib/build/detect-layouts.d.ts.map +1 -1
- package/dist/lib/build/detect-layouts.js +27 -13
- package/dist/lib/build/detect-layouts.js.map +1 -1
- package/dist/lib/config/load-config.d.ts.map +1 -1
- package/dist/lib/config/load-config.js +0 -2
- package/dist/lib/config/load-config.js.map +1 -1
- package/dist/lib/deploy/deploy-output.d.ts +2 -1
- package/dist/lib/deploy/deploy-output.d.ts.map +1 -1
- package/dist/lib/deploy/deploy-output.js +9 -1
- package/dist/lib/deploy/deploy-output.js.map +1 -1
- package/dist/lib/deploy/deploy-phases.d.ts +2 -0
- package/dist/lib/deploy/deploy-phases.d.ts.map +1 -1
- package/dist/lib/deploy/deploy-phases.js +9 -23
- package/dist/lib/deploy/deploy-phases.js.map +1 -1
- package/dist/lib/deploy/deploy-utils.d.ts +15 -7
- package/dist/lib/deploy/deploy-utils.d.ts.map +1 -1
- package/dist/lib/deploy/deploy-utils.js +49 -36
- package/dist/lib/deploy/deploy-utils.js.map +1 -1
- package/dist/lib/deploy/generate-manifest-files.d.ts.map +1 -1
- package/dist/lib/deploy/generate-manifest-files.js +13 -39
- package/dist/lib/deploy/generate-manifest-files.js.map +1 -1
- package/dist/lib/deploy/pack-project.d.ts.map +1 -1
- package/dist/lib/deploy/pack-project.js +34 -20
- package/dist/lib/deploy/pack-project.js.map +1 -1
- package/dist/lib/deploy/slot-manager.d.ts +54 -0
- package/dist/lib/deploy/slot-manager.d.ts.map +1 -0
- package/dist/lib/deploy/slot-manager.js +72 -0
- package/dist/lib/deploy/slot-manager.js.map +1 -0
- package/dist/lib/deploy/test-url-match-rules.d.ts +10 -2
- package/dist/lib/deploy/test-url-match-rules.d.ts.map +1 -1
- package/dist/lib/deploy/test-url-match-rules.js +1 -1
- package/dist/lib/deploy/test-url-match-rules.js.map +1 -1
- package/dist/lib/deploy/upload.d.ts +1 -0
- package/dist/lib/deploy/upload.d.ts.map +1 -1
- package/dist/lib/deploy/upload.js +15 -24
- package/dist/lib/deploy/upload.js.map +1 -1
- package/dist/lib/deploy/validation.d.ts.map +1 -1
- package/dist/lib/deploy/validation.js +43 -48
- package/dist/lib/deploy/validation.js.map +1 -1
- package/dist/lib/rsbuild/config-factory.d.ts.map +1 -1
- package/dist/lib/rsbuild/config-factory.js +10 -17
- package/dist/lib/rsbuild/config-factory.js.map +1 -1
- package/dist/lib/rsbuild/plugins/asset-versioning.d.ts.map +1 -1
- package/dist/lib/rsbuild/plugins/asset-versioning.js +4 -14
- package/dist/lib/rsbuild/plugins/asset-versioning.js.map +1 -1
- package/dist/lib/rsbuild/plugins/brotli-compression.d.ts.map +1 -1
- package/dist/lib/rsbuild/plugins/brotli-compression.js +4 -4
- package/dist/lib/rsbuild/plugins/brotli-compression.js.map +1 -1
- package/dist/lib/rsbuild/plugins/copy-public.d.ts.map +1 -1
- package/dist/lib/rsbuild/plugins/copy-public.js.map +1 -1
- package/dist/lib/rsbuild/postcss/tailwind-source-fallback.d.ts.map +1 -1
- package/dist/lib/rsbuild/postcss/tailwind-source-fallback.js +1 -3
- package/dist/lib/rsbuild/postcss/tailwind-source-fallback.js.map +1 -1
- package/dist/lib/utils/console.d.ts +8 -0
- package/dist/lib/utils/console.d.ts.map +1 -0
- package/dist/lib/utils/console.js +10 -0
- package/dist/lib/utils/console.js.map +1 -0
- package/dist/lib/utils/filesystem.d.ts +9 -0
- package/dist/lib/utils/filesystem.d.ts.map +1 -0
- package/dist/lib/utils/filesystem.js +30 -0
- package/dist/lib/utils/filesystem.js.map +1 -0
- package/dist/lib/utils/formatters.d.ts +8 -0
- package/dist/lib/utils/formatters.d.ts.map +1 -0
- package/dist/lib/utils/formatters.js +22 -0
- package/dist/lib/utils/formatters.js.map +1 -0
- package/dist/lib/utils/index.d.ts +7 -0
- package/dist/lib/utils/index.d.ts.map +1 -0
- package/dist/lib/utils/index.js +7 -0
- package/dist/lib/utils/index.js.map +1 -0
- package/dist/lib/utils/setup-runtime.d.ts.map +1 -1
- package/dist/lib/utils/setup-runtime.js +22 -63
- package/dist/lib/utils/setup-runtime.js.map +1 -1
- package/dist/schema/config.schema.d.ts +9 -48
- package/dist/schema/config.schema.d.ts.map +1 -1
- package/dist/schema/config.schema.js +119 -120
- package/dist/schema/config.schema.js.map +1 -1
- package/dist/sdk/hooks/mocks.d.ts +9 -0
- package/dist/sdk/hooks/mocks.d.ts.map +1 -0
- package/dist/sdk/hooks/mocks.js +17 -0
- package/dist/sdk/hooks/mocks.js.map +1 -0
- package/dist/sdk/hooks/use-audience-manager.d.ts +44 -0
- package/dist/sdk/hooks/use-audience-manager.d.ts.map +1 -0
- package/dist/sdk/hooks/use-audience-manager.js +109 -0
- package/dist/sdk/hooks/use-audience-manager.js.map +1 -0
- package/dist/sdk/hooks/use-ip.d.ts +45 -0
- package/dist/sdk/hooks/use-ip.d.ts.map +1 -0
- package/dist/sdk/hooks/use-ip.js +46 -0
- package/dist/sdk/hooks/use-ip.js.map +1 -0
- package/dist/sdk/hooks/use-sdk-request.d.ts +46 -0
- package/dist/sdk/hooks/use-sdk-request.d.ts.map +1 -0
- package/dist/sdk/hooks/use-sdk-request.js +65 -0
- package/dist/sdk/hooks/use-sdk-request.js.map +1 -0
- package/dist/sdk/hooks/use-theme.d.ts +45 -0
- package/dist/sdk/hooks/use-theme.d.ts.map +1 -0
- package/dist/sdk/hooks/use-theme.js +97 -0
- package/dist/sdk/hooks/use-theme.js.map +1 -0
- package/dist/sdk/hooks/use-visitor.d.ts +41 -0
- package/dist/sdk/hooks/use-visitor.d.ts.map +1 -0
- package/dist/sdk/hooks/use-visitor.js +42 -0
- package/dist/sdk/hooks/use-visitor.js.map +1 -0
- package/dist/sdk/hooks/validation.d.ts +8 -0
- package/dist/sdk/hooks/validation.d.ts.map +1 -0
- package/dist/sdk/hooks/validation.js +13 -0
- package/dist/sdk/hooks/validation.js.map +1 -0
- package/dist/sdk/index.d.ts +17 -5
- package/dist/sdk/index.d.ts.map +1 -1
- package/dist/sdk/index.js +16 -5
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/message-bus.d.ts +59 -0
- package/dist/sdk/message-bus.d.ts.map +1 -0
- package/dist/sdk/message-bus.js +152 -0
- package/dist/sdk/message-bus.js.map +1 -0
- package/dist/sdk/messages.d.ts +121 -0
- package/dist/sdk/messages.d.ts.map +1 -0
- package/dist/sdk/messages.js +9 -0
- package/dist/sdk/messages.js.map +1 -0
- package/dist/sdk/send-message.d.ts +1 -1
- package/dist/sdk/send-message.js +18 -18
- package/dist/sdk/send-message.js.map +1 -1
- package/dist/sdk/use-expand-link-app.d.ts +3 -3
- package/dist/sdk/use-expand-link-app.d.ts.map +1 -1
- package/dist/sdk/use-expand-link-app.js +9 -5
- package/dist/sdk/use-expand-link-app.js.map +1 -1
- package/dist/types.d.ts +235 -55
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +8 -3
- package/dist/types.js.map +1 -1
- package/package.json +3 -9
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { StrictMode } from
|
|
2
|
-
import { createRoot } from
|
|
3
|
-
import Preview from
|
|
4
|
-
import
|
|
1
|
+
import { StrictMode } from 'react'
|
|
2
|
+
import { createRoot } from 'react-dom/client'
|
|
3
|
+
import Preview from './preview'
|
|
4
|
+
import './preview.css'
|
|
5
5
|
|
|
6
|
-
const rootElement = document.getElementById(
|
|
6
|
+
const rootElement = document.getElementById('root')
|
|
7
7
|
if (!rootElement) {
|
|
8
|
-
throw new Error(
|
|
8
|
+
throw new Error('Root element not found')
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
createRoot(rootElement).render(
|
|
12
12
|
<StrictMode>
|
|
13
13
|
<Preview />
|
|
14
|
-
</StrictMode
|
|
15
|
-
)
|
|
14
|
+
</StrictMode>
|
|
15
|
+
)
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dev Parent Simulator - Simulates parent window behavior for SDK hooks in development
|
|
3
|
+
*
|
|
4
|
+
* This module handles messages from LinkApp iframes during development,
|
|
5
|
+
* returning mock data for visitor, IP, theme, and subscribe operations.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { THEME_PRESETS, ThemePreset } from './theme-presets'
|
|
9
|
+
|
|
10
|
+
interface SimulatorConfig {
|
|
11
|
+
/** Current theme from URL or settings */
|
|
12
|
+
getCurrentTheme: () => ThemePreset
|
|
13
|
+
/** Mock visitor settings */
|
|
14
|
+
mockVisitor?: {
|
|
15
|
+
mobileDetected?: boolean
|
|
16
|
+
isFollowing?: boolean
|
|
17
|
+
followerEmail?: string
|
|
18
|
+
}
|
|
19
|
+
/** Mock IP/geo settings */
|
|
20
|
+
mockIP?: {
|
|
21
|
+
countryCode?: string
|
|
22
|
+
city?: string
|
|
23
|
+
}
|
|
24
|
+
/** Simulate subscribe failure for testing */
|
|
25
|
+
simulateSubscribeFailure?: boolean
|
|
26
|
+
/** Simulate captcha failure for testing */
|
|
27
|
+
simulateCaptchaFailure?: boolean
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
interface DevParentSimulator {
|
|
31
|
+
/** Set up message listeners */
|
|
32
|
+
init: () => void
|
|
33
|
+
/** Clean up listeners */
|
|
34
|
+
destroy: () => void
|
|
35
|
+
/** Update mock settings */
|
|
36
|
+
updateConfig: (config: Partial<SimulatorConfig>) => void
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Creates a dev parent simulator that handles SDK messages from iframes
|
|
41
|
+
*/
|
|
42
|
+
export function createDevParentSimulator(initialConfig: SimulatorConfig): DevParentSimulator {
|
|
43
|
+
let config = { ...initialConfig }
|
|
44
|
+
let messageHandler: ((event: MessageEvent) => void) | null = null
|
|
45
|
+
|
|
46
|
+
const handleMessage = (event: MessageEvent) => {
|
|
47
|
+
const message = event.data
|
|
48
|
+
if (!message || message.source !== 'linkapp') return
|
|
49
|
+
|
|
50
|
+
const iframe = event.source as Window | null
|
|
51
|
+
if (!iframe) return
|
|
52
|
+
|
|
53
|
+
const { type, payload } = message
|
|
54
|
+
|
|
55
|
+
switch (type) {
|
|
56
|
+
case 'REQUEST_VISITOR': {
|
|
57
|
+
const visitorResponse = {
|
|
58
|
+
type: 'VISITOR_RESPONSE',
|
|
59
|
+
payload: {
|
|
60
|
+
requestId: payload.requestId,
|
|
61
|
+
visitor: {
|
|
62
|
+
mobileDetected:
|
|
63
|
+
config.mockVisitor?.mobileDetected ??
|
|
64
|
+
/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),
|
|
65
|
+
userAgent: navigator.userAgent,
|
|
66
|
+
isFollowing: config.mockVisitor?.isFollowing ?? false,
|
|
67
|
+
followerEmail: config.mockVisitor?.followerEmail,
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
}
|
|
71
|
+
iframe.postMessage(visitorResponse, '*')
|
|
72
|
+
console.log('[Dev Simulator] VISITOR_RESPONSE sent:', visitorResponse.payload.visitor)
|
|
73
|
+
break
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
case 'REQUEST_IP': {
|
|
77
|
+
const ipResponse = {
|
|
78
|
+
type: 'IP_RESPONSE',
|
|
79
|
+
payload: {
|
|
80
|
+
requestId: payload.requestId,
|
|
81
|
+
ip: {
|
|
82
|
+
countryCode: config.mockIP?.countryCode ?? 'US',
|
|
83
|
+
city: config.mockIP?.city ?? 'san francisco',
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
}
|
|
87
|
+
iframe.postMessage(ipResponse, '*')
|
|
88
|
+
console.log('[Dev Simulator] IP_RESPONSE sent:', ipResponse.payload.ip)
|
|
89
|
+
break
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
case 'REQUEST_CAPTCHA': {
|
|
93
|
+
// Simulate captcha with delay
|
|
94
|
+
setTimeout(
|
|
95
|
+
() => {
|
|
96
|
+
if (config.simulateCaptchaFailure) {
|
|
97
|
+
iframe.postMessage(
|
|
98
|
+
{
|
|
99
|
+
type: 'CAPTCHA_RESPONSE',
|
|
100
|
+
payload: {
|
|
101
|
+
requestId: payload.requestId,
|
|
102
|
+
success: false,
|
|
103
|
+
error: 'Simulated captcha failure',
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
'*'
|
|
107
|
+
)
|
|
108
|
+
console.log('[Dev Simulator] CAPTCHA_RESPONSE sent (simulated failure)')
|
|
109
|
+
} else {
|
|
110
|
+
iframe.postMessage(
|
|
111
|
+
{
|
|
112
|
+
type: 'CAPTCHA_RESPONSE',
|
|
113
|
+
payload: {
|
|
114
|
+
requestId: payload.requestId,
|
|
115
|
+
success: true,
|
|
116
|
+
token: `dev-captcha-token-${Date.now()}`,
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
'*'
|
|
120
|
+
)
|
|
121
|
+
console.log('[Dev Simulator] CAPTCHA_RESPONSE sent (success)')
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
500 // Simulate reCAPTCHA delay
|
|
125
|
+
)
|
|
126
|
+
break
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
case 'SUBMIT_SUBSCRIBE': {
|
|
130
|
+
// Simulate subscribe with delay
|
|
131
|
+
setTimeout(() => {
|
|
132
|
+
if (config.simulateSubscribeFailure) {
|
|
133
|
+
iframe.postMessage(
|
|
134
|
+
{
|
|
135
|
+
type: 'SUBSCRIBE_RESULT',
|
|
136
|
+
payload: {
|
|
137
|
+
requestId: payload.requestId,
|
|
138
|
+
success: false,
|
|
139
|
+
error: 'Simulated subscribe failure',
|
|
140
|
+
errorCode: 'RATE_LIMITED',
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
'*'
|
|
144
|
+
)
|
|
145
|
+
console.log('[Dev Simulator] SUBSCRIBE_RESULT sent (simulated failure)')
|
|
146
|
+
} else {
|
|
147
|
+
iframe.postMessage(
|
|
148
|
+
{
|
|
149
|
+
type: 'SUBSCRIBE_RESULT',
|
|
150
|
+
payload: {
|
|
151
|
+
requestId: payload.requestId,
|
|
152
|
+
success: true,
|
|
153
|
+
},
|
|
154
|
+
},
|
|
155
|
+
'*'
|
|
156
|
+
)
|
|
157
|
+
console.log('[Dev Simulator] SUBSCRIBE_RESULT sent (success) - Email:', payload.email)
|
|
158
|
+
}
|
|
159
|
+
}, 300)
|
|
160
|
+
break
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
case 'EXPAND_LINK_APP': {
|
|
164
|
+
// This is handled by Preview.tsx existing logic
|
|
165
|
+
console.log('[Dev Simulator] EXPAND_LINK_APP received:', payload)
|
|
166
|
+
break
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
default:
|
|
170
|
+
console.log('[Dev Simulator] Unknown message type:', type)
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
return {
|
|
175
|
+
init() {
|
|
176
|
+
if (messageHandler) return // Already initialized
|
|
177
|
+
messageHandler = handleMessage
|
|
178
|
+
window.addEventListener('message', messageHandler)
|
|
179
|
+
console.log('[Dev Simulator] Initialized - listening for SDK messages')
|
|
180
|
+
},
|
|
181
|
+
|
|
182
|
+
destroy() {
|
|
183
|
+
if (messageHandler) {
|
|
184
|
+
window.removeEventListener('message', messageHandler)
|
|
185
|
+
messageHandler = null
|
|
186
|
+
console.log('[Dev Simulator] Destroyed - stopped listening for SDK messages')
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
|
|
190
|
+
updateConfig(newConfig: Partial<SimulatorConfig>) {
|
|
191
|
+
config = { ...config, ...newConfig }
|
|
192
|
+
console.log('[Dev Simulator] Config updated:', newConfig)
|
|
193
|
+
},
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Broadcast a theme update to all iframes
|
|
199
|
+
*/
|
|
200
|
+
export function broadcastThemeUpdate(variables: Record<string, string>, name: string): void {
|
|
201
|
+
const iframes = document.querySelectorAll('iframe')
|
|
202
|
+
const message = {
|
|
203
|
+
type: 'THEME_UPDATE',
|
|
204
|
+
payload: {
|
|
205
|
+
name,
|
|
206
|
+
variables,
|
|
207
|
+
},
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
iframes.forEach((iframe) => {
|
|
211
|
+
try {
|
|
212
|
+
iframe.contentWindow?.postMessage(message, '*')
|
|
213
|
+
} catch {
|
|
214
|
+
// Iframe might be cross-origin, ignore
|
|
215
|
+
}
|
|
216
|
+
})
|
|
217
|
+
|
|
218
|
+
console.log('[Dev Simulator] Broadcast THEME_UPDATE to', iframes.length, 'iframes')
|
|
219
|
+
}
|
|
@@ -17,107 +17,103 @@ export type ThemePreset = {
|
|
|
17
17
|
|
|
18
18
|
export const THEME_PRESETS: Record<string, ThemePreset> = {
|
|
19
19
|
default: {
|
|
20
|
-
name:
|
|
20
|
+
name: 'Default (Light)',
|
|
21
21
|
variables: {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
"--button-style-skeleton-color": "rgba(0, 0, 0, 0.05)",
|
|
22
|
+
'--button-style-text': '#000000',
|
|
23
|
+
'--button-style-background': '#ffffff',
|
|
24
|
+
'--button-style-background-hover': 'color-mix(in srgb, #ffffff 93%, #000000 7%)',
|
|
25
|
+
'--button-style-border': 'none',
|
|
26
|
+
'--button-style-border-color': 'transparent',
|
|
27
|
+
'--button-style-shadow': 'none',
|
|
28
|
+
'--button-style-shadow-color': '#000000',
|
|
29
|
+
'--button-style-contrast-color': '#000000',
|
|
30
|
+
'--button-style-radius': '8px',
|
|
31
|
+
'--button-style-inner-radius': 'min(8px, max(4px, calc(8px - 8px)))',
|
|
32
|
+
'--button-style-skeleton-color': 'rgba(0, 0, 0, 0.05)',
|
|
34
33
|
},
|
|
35
34
|
font: {
|
|
36
|
-
fontFamily:
|
|
37
|
-
cssUrl:
|
|
35
|
+
fontFamily: 'Inter, sans-serif',
|
|
36
|
+
cssUrl: 'https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap',
|
|
38
37
|
},
|
|
39
38
|
},
|
|
40
39
|
dark: {
|
|
41
|
-
name:
|
|
40
|
+
name: 'Dark',
|
|
42
41
|
variables: {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
"--button-style-skeleton-color": "rgba(255, 255, 255, 0.1)",
|
|
42
|
+
'--button-style-text': '#ffffff',
|
|
43
|
+
'--button-style-background': '#1f2937',
|
|
44
|
+
'--button-style-background-hover': 'color-mix(in srgb, #1f2937 93%, #ffffff 7%)',
|
|
45
|
+
'--button-style-border': 'none',
|
|
46
|
+
'--button-style-border-color': 'transparent',
|
|
47
|
+
'--button-style-shadow': 'none',
|
|
48
|
+
'--button-style-shadow-color': '#000000',
|
|
49
|
+
'--button-style-contrast-color': '#ffffff',
|
|
50
|
+
'--button-style-radius': '8px',
|
|
51
|
+
'--button-style-inner-radius': 'min(8px, max(4px, calc(8px - 8px)))',
|
|
52
|
+
'--button-style-skeleton-color': 'rgba(255, 255, 255, 0.1)',
|
|
55
53
|
},
|
|
56
54
|
font: {
|
|
57
|
-
fontFamily:
|
|
58
|
-
cssUrl:
|
|
55
|
+
fontFamily: 'Roboto, sans-serif',
|
|
56
|
+
cssUrl: 'https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap',
|
|
59
57
|
},
|
|
60
58
|
},
|
|
61
59
|
purple: {
|
|
62
|
-
name:
|
|
60
|
+
name: 'Purple',
|
|
63
61
|
variables: {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
"--button-style-skeleton-color": "rgba(124, 58, 237, 0.1)",
|
|
62
|
+
'--button-style-text': '#ffffff',
|
|
63
|
+
'--button-style-background': '#7c3aed',
|
|
64
|
+
'--button-style-background-hover': 'color-mix(in srgb, #7c3aed 93%, #ffffff 7%)',
|
|
65
|
+
'--button-style-border': 'none',
|
|
66
|
+
'--button-style-border-color': 'transparent',
|
|
67
|
+
'--button-style-shadow': 'none',
|
|
68
|
+
'--button-style-shadow-color': '#000000',
|
|
69
|
+
'--button-style-contrast-color': '#ede9fe',
|
|
70
|
+
'--button-style-radius': '16px',
|
|
71
|
+
'--button-style-inner-radius': 'min(16px, max(4px, calc(16px - 8px)))',
|
|
72
|
+
'--button-style-skeleton-color': 'rgba(124, 58, 237, 0.1)',
|
|
76
73
|
},
|
|
77
74
|
font: {
|
|
78
|
-
fontFamily:
|
|
79
|
-
cssUrl:
|
|
75
|
+
fontFamily: 'Poppins, sans-serif',
|
|
76
|
+
cssUrl: 'https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700&display=swap',
|
|
80
77
|
},
|
|
81
78
|
},
|
|
82
79
|
outline: {
|
|
83
|
-
name:
|
|
80
|
+
name: 'Outline Style',
|
|
84
81
|
variables: {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
82
|
+
'--button-style-text': '#000000',
|
|
83
|
+
'--button-style-background': 'transparent',
|
|
84
|
+
'--button-style-background-hover': 'rgba(0, 0, 0, 0.05)',
|
|
85
|
+
'--button-style-border': '2px solid currentColor',
|
|
86
|
+
'--button-style-border-color': '#000000',
|
|
87
|
+
'--button-style-shadow': 'none',
|
|
88
|
+
'--button-style-shadow-color': '#000000',
|
|
89
|
+
'--button-style-contrast-color': '#ffffff',
|
|
90
|
+
'--button-style-radius': '24px',
|
|
91
|
+
'--button-style-inner-radius': 'min(24px, max(4px, calc(24px - 8px)))',
|
|
92
|
+
'--button-style-skeleton-color': 'rgba(0, 0, 0, 0.05)',
|
|
96
93
|
},
|
|
97
94
|
font: {
|
|
98
|
-
fontFamily:
|
|
99
|
-
cssUrl:
|
|
95
|
+
fontFamily: 'Montserrat, sans-serif',
|
|
96
|
+
cssUrl: 'https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;600;700&display=swap',
|
|
100
97
|
},
|
|
101
98
|
},
|
|
102
99
|
rounded: {
|
|
103
|
-
name:
|
|
100
|
+
name: 'Fully Rounded',
|
|
104
101
|
variables: {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
"--button-style-skeleton-color": "rgba(5, 150, 105, 0.1)",
|
|
102
|
+
'--button-style-text': '#ffffff',
|
|
103
|
+
'--button-style-background': '#059669',
|
|
104
|
+
'--button-style-background-hover': 'color-mix(in srgb, #059669 93%, #ffffff 7%)',
|
|
105
|
+
'--button-style-border': 'none',
|
|
106
|
+
'--button-style-border-color': 'transparent',
|
|
107
|
+
'--button-style-shadow': 'none',
|
|
108
|
+
'--button-style-shadow-color': '#000000',
|
|
109
|
+
'--button-style-contrast-color': '#d1fae5',
|
|
110
|
+
'--button-style-radius': '28px',
|
|
111
|
+
'--button-style-inner-radius': '28px',
|
|
112
|
+
'--button-style-skeleton-color': 'rgba(5, 150, 105, 0.1)',
|
|
117
113
|
},
|
|
118
114
|
font: {
|
|
119
|
-
fontFamily:
|
|
120
|
-
cssUrl:
|
|
115
|
+
fontFamily: 'Nunito, sans-serif',
|
|
116
|
+
cssUrl: 'https://fonts.googleapis.com/css2?family=Nunito:wght@400;500;600;700&display=swap',
|
|
121
117
|
},
|
|
122
118
|
},
|
|
123
|
-
}
|
|
119
|
+
}
|
|
@@ -17,22 +17,22 @@ export function mergeThemeProps(
|
|
|
17
17
|
theme: {
|
|
18
18
|
cssVariables: themeVariables,
|
|
19
19
|
// Legacy properties (deprecated) - derived from cssVariables
|
|
20
|
-
textColor: themeVariables[
|
|
21
|
-
backgroundColor: themeVariables[
|
|
22
|
-
borderRadius: themeVariables[
|
|
23
|
-
borderColor: themeVariables[
|
|
24
|
-
backgroundHover: themeVariables[
|
|
25
|
-
contrastColor: themeVariables[
|
|
26
|
-
textHoverColor: themeVariables[
|
|
20
|
+
textColor: themeVariables['--button-style-text'] || '#000000',
|
|
21
|
+
backgroundColor: themeVariables['--button-style-background'] || '#ffffff',
|
|
22
|
+
borderRadius: themeVariables['--button-style-inner-radius'] || '12px',
|
|
23
|
+
borderColor: themeVariables['--button-style-border-color'] || '#e5e7eb',
|
|
24
|
+
backgroundHover: themeVariables['--button-style-background-hover'] || '#f3f4f6',
|
|
25
|
+
contrastColor: themeVariables['--button-style-contrast-color'] || '#ffffff',
|
|
26
|
+
textHoverColor: themeVariables['--linkHoverText'] || '#111827',
|
|
27
27
|
},
|
|
28
|
-
}
|
|
28
|
+
}
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
/**
|
|
32
32
|
* Gets theme variables from URL parameters
|
|
33
33
|
*/
|
|
34
34
|
export function getThemeFromUrl(presets: Record<string, Record<string, string>>): Record<string, string> {
|
|
35
|
-
const params = new URLSearchParams(window.location.search)
|
|
36
|
-
const themeParam = params.get('theme') || 'default'
|
|
37
|
-
return presets[themeParam] || presets.default
|
|
35
|
+
const params = new URLSearchParams(window.location.search)
|
|
36
|
+
const themeParam = params.get('theme') || 'default'
|
|
37
|
+
return presets[themeParam] || presets.default
|
|
38
38
|
}
|
package/dist/cli.js
CHANGED
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { cac } from 'cac';
|
|
3
|
-
import {
|
|
3
|
+
import { addCommand } from './commands/add.js';
|
|
4
4
|
import { buildCommand } from './commands/build.js';
|
|
5
5
|
import { deployCommand } from './commands/deploy.js';
|
|
6
|
-
import {
|
|
6
|
+
import { devCommand } from './commands/dev.js';
|
|
7
7
|
import { loginCommand } from './commands/login.js';
|
|
8
8
|
import { logoutCommand } from './commands/logout.js';
|
|
9
|
+
import { rollbackCommand } from './commands/rollback.js';
|
|
10
|
+
import { statusCommand } from './commands/status.js';
|
|
9
11
|
import { testUrlMatchRulesCommand } from './commands/test-url-match-rules.js';
|
|
10
12
|
const cli = cac('linkapp');
|
|
11
|
-
// Package info
|
|
12
13
|
const version = '0.0.1';
|
|
13
14
|
cli.version(version).help();
|
|
14
|
-
// Dev command
|
|
15
15
|
cli
|
|
16
16
|
.command('dev', 'Start development server with preview')
|
|
17
|
-
.option('--port <port>', 'Preview server port (default: 3000)', {
|
|
17
|
+
.option('--port <port>', 'Preview server port (default: 3000)', {
|
|
18
|
+
default: 3000,
|
|
19
|
+
})
|
|
18
20
|
.action(devCommand);
|
|
19
|
-
// Build command
|
|
20
21
|
cli
|
|
21
22
|
.command('build', 'Build LinkApp for production')
|
|
22
23
|
.option('--analyze', 'Generate bundle analysis report (deprecated, use --profile)')
|
|
@@ -24,32 +25,37 @@ cli
|
|
|
24
25
|
.option('--sourcemap', 'Generate sourcemaps for production build')
|
|
25
26
|
.option('--compress', 'Generate Brotli-compressed (.br) files for optimal CDN delivery')
|
|
26
27
|
.action(buildCommand);
|
|
27
|
-
// Deploy command
|
|
28
28
|
cli
|
|
29
29
|
.command('deploy', 'Deploy LinkApp to Linktree')
|
|
30
30
|
.option('--qa', 'Deploy to QA environment instead of production')
|
|
31
|
+
.option('--canary', 'Deploy to canary path for testing before promotion')
|
|
31
32
|
.option('--skip-confirm', 'Skip deployment confirmation prompt')
|
|
32
33
|
.option('--force', 'Force deployment even if LinkApp is published')
|
|
33
34
|
.action(deployCommand);
|
|
34
|
-
|
|
35
|
+
cli
|
|
36
|
+
.command('rollback', 'Roll back to previous deployment version')
|
|
37
|
+
.option('--qa', 'Rollback in QA environment instead of production')
|
|
38
|
+
.option('--skip-confirm', 'Skip rollback confirmation prompt')
|
|
39
|
+
.option('--version <timestamp>', 'Specific version timestamp to roll back to')
|
|
40
|
+
.action(rollbackCommand);
|
|
41
|
+
cli
|
|
42
|
+
.command('status', 'Show deployment status and versions')
|
|
43
|
+
.option('--qa', 'Show QA environment status instead of production')
|
|
44
|
+
.action(statusCommand);
|
|
35
45
|
cli
|
|
36
46
|
.command('add [component]', 'Add a component from the registry')
|
|
37
47
|
.option('--yes', 'Skip confirmation prompts')
|
|
38
48
|
.option('--overwrite', 'Overwrite existing files')
|
|
39
49
|
.option('--registry <url>', 'Custom registry URL')
|
|
40
50
|
.action(addCommand);
|
|
41
|
-
// Login command
|
|
42
51
|
cli
|
|
43
52
|
.command('login', 'Authenticate with Linktree')
|
|
44
53
|
.option('--qa', 'Login to QA environment instead of production')
|
|
45
54
|
.action(loginCommand);
|
|
46
|
-
// Logout command
|
|
47
55
|
cli
|
|
48
56
|
.command('logout', 'Sign out of Linktree')
|
|
49
57
|
.option('--qa', 'Logout from QA environment instead of production')
|
|
50
58
|
.action(logoutCommand);
|
|
51
|
-
// Test URL match rules
|
|
52
59
|
cli.command('test-url-match-rules <url>', 'Test URL match rules against a URL').action(testUrlMatchRulesCommand);
|
|
53
|
-
// Parse and run
|
|
54
60
|
cli.parse();
|
|
55
61
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAA;AAE7E,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAA;AAE1B,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAOA,UAAU,UAAU;IAClB,SAAS,CAAC,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAOA,UAAU,UAAU;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAcD,wBAAsB,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB5F"}
|