keystone-design-bootstrap 1.0.99 → 1.0.101
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 +4 -0
- package/package.json +1 -1
- package/src/next/routes/consumer-auth.ts +11 -3
- package/src/tracking/PostHogProvider.tsx +40 -1
- package/dist/blog-post-vWzW8yFb.d.ts +0 -50
- package/dist/contexts/index.d.ts +0 -13
- package/dist/contexts/index.js +0 -173
- package/dist/contexts/index.js.map +0 -1
- package/dist/design_system/components/DynamicFormFields.d.ts +0 -15
- package/dist/design_system/components/DynamicFormFields.js +0 -5176
- package/dist/design_system/components/DynamicFormFields.js.map +0 -1
- package/dist/design_system/elements/index.d.ts +0 -383
- package/dist/design_system/elements/index.js +0 -4007
- package/dist/design_system/elements/index.js.map +0 -1
- package/dist/design_system/logo/keystone-logo.d.ts +0 -6
- package/dist/design_system/logo/keystone-logo.js +0 -145
- package/dist/design_system/logo/keystone-logo.js.map +0 -1
- package/dist/design_system/sections/index.d.ts +0 -233
- package/dist/design_system/sections/index.js +0 -20048
- package/dist/design_system/sections/index.js.map +0 -1
- package/dist/form-C94A_PX_.d.ts +0 -36
- package/dist/index.d.ts +0 -70
- package/dist/index.js +0 -20608
- package/dist/index.js.map +0 -1
- package/dist/lib/component-registry.d.ts +0 -13
- package/dist/lib/component-registry.js +0 -36
- package/dist/lib/component-registry.js.map +0 -1
- package/dist/lib/hooks/index.d.ts +0 -83
- package/dist/lib/hooks/index.js +0 -182
- package/dist/lib/hooks/index.js.map +0 -1
- package/dist/lib/server-api.d.ts +0 -67
- package/dist/lib/server-api.js +0 -195
- package/dist/lib/server-api.js.map +0 -1
- package/dist/package-DeHKpQp7.d.ts +0 -121
- package/dist/photos-CmBdWiuZ.d.ts +0 -27
- package/dist/themes/index.d.ts +0 -17
- package/dist/themes/index.js +0 -29
- package/dist/themes/index.js.map +0 -1
- package/dist/tracking/index.d.ts +0 -254
- package/dist/tracking/index.js +0 -550
- package/dist/tracking/index.js.map +0 -1
- package/dist/types/index.d.ts +0 -313
- package/dist/types/index.js +0 -1
- package/dist/types/index.js.map +0 -1
- package/dist/utils/cx.d.ts +0 -15
- package/dist/utils/cx.js +0 -18
- package/dist/utils/cx.js.map +0 -1
- package/dist/utils/gradient-placeholder.d.ts +0 -7
- package/dist/utils/gradient-placeholder.js +0 -59
- package/dist/utils/gradient-placeholder.js.map +0 -1
- package/dist/utils/is-react-component.d.ts +0 -21
- package/dist/utils/is-react-component.js +0 -20
- package/dist/utils/is-react-component.js.map +0 -1
- package/dist/utils/markdown-toc.d.ts +0 -14
- package/dist/utils/markdown-toc.js +0 -29
- package/dist/utils/markdown-toc.js.map +0 -1
- package/dist/utils/phone-helpers.d.ts +0 -24
- package/dist/utils/phone-helpers.js +0 -26
- package/dist/utils/phone-helpers.js.map +0 -1
- package/dist/utils/photo-helpers.d.ts +0 -38
- package/dist/utils/photo-helpers.js +0 -41
- package/dist/utils/photo-helpers.js.map +0 -1
- package/dist/website-photos-Cl1YqAno.d.ts +0 -21
package/dist/types/index.d.ts
DELETED
|
@@ -1,313 +0,0 @@
|
|
|
1
|
-
import { Theme } from '../themes/index.js';
|
|
2
|
-
export { B as BlogPost, a as BlogPostAuthor, b as BlogPostParams, c as BlogPostResponse, d as BlogPostTag } from '../blog-post-vWzW8yFb.js';
|
|
3
|
-
export { C as CompanyInformation, a as CompanyInformationResponse, O as OfferPublic, P as Package, b as PackageItem, S as Service, c as ServiceItem, d as ServiceParams, e as ServiceResponse } from '../package-DeHKpQp7.js';
|
|
4
|
-
import { P as PhotoAttachment } from '../photos-CmBdWiuZ.js';
|
|
5
|
-
export { a as Photo } from '../photos-CmBdWiuZ.js';
|
|
6
|
-
export { F as FormDefinition, a as FormFieldDefinition, b as FormFieldItem, c as FormFieldOption, d as FormType } from '../form-C94A_PX_.js';
|
|
7
|
-
export { a as WebsitePhoto, W as WebsitePhotos, b as WebsitePhotosResponse } from '../website-photos-Cl1YqAno.js';
|
|
8
|
-
|
|
9
|
-
interface NavItem {
|
|
10
|
-
label: string;
|
|
11
|
-
href: string;
|
|
12
|
-
subtitle?: string;
|
|
13
|
-
children?: NavItem[];
|
|
14
|
-
}
|
|
15
|
-
interface SiteConfig {
|
|
16
|
-
site: {
|
|
17
|
-
title: string;
|
|
18
|
-
description: string;
|
|
19
|
-
theme: Theme;
|
|
20
|
-
};
|
|
21
|
-
navigation: {
|
|
22
|
-
header: NavItem[];
|
|
23
|
-
footer: NavItem[][];
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
interface Testimonial {
|
|
28
|
-
id: number;
|
|
29
|
-
reviewer_name: string;
|
|
30
|
-
reviewer_title?: string;
|
|
31
|
-
company?: string;
|
|
32
|
-
rating?: number;
|
|
33
|
-
content_markdown: string;
|
|
34
|
-
source?: string;
|
|
35
|
-
source_url?: string;
|
|
36
|
-
featured: boolean;
|
|
37
|
-
reviewed_at: string;
|
|
38
|
-
created_at: string;
|
|
39
|
-
updated_at: string;
|
|
40
|
-
photo_attachments?: PhotoAttachment[];
|
|
41
|
-
}
|
|
42
|
-
interface TestimonialParams {
|
|
43
|
-
source?: string;
|
|
44
|
-
rating?: number;
|
|
45
|
-
verified?: boolean;
|
|
46
|
-
featured?: boolean;
|
|
47
|
-
page?: number;
|
|
48
|
-
per_page?: number;
|
|
49
|
-
}
|
|
50
|
-
type TestimonialResponse = Testimonial[];
|
|
51
|
-
|
|
52
|
-
interface TeamMember {
|
|
53
|
-
id: number;
|
|
54
|
-
name: string;
|
|
55
|
-
position: string;
|
|
56
|
-
bio_markdown: string;
|
|
57
|
-
experience_markdown: string;
|
|
58
|
-
email: string;
|
|
59
|
-
phone: string;
|
|
60
|
-
sort_order: number;
|
|
61
|
-
featured: boolean;
|
|
62
|
-
specialties_markdown: string;
|
|
63
|
-
education_markdown: string;
|
|
64
|
-
certifications_markdown: string;
|
|
65
|
-
linkedin_url: string;
|
|
66
|
-
twitter_url: string;
|
|
67
|
-
photo_attachments?: PhotoAttachment[];
|
|
68
|
-
}
|
|
69
|
-
interface TeamMemberParams {
|
|
70
|
-
featured?: boolean;
|
|
71
|
-
sort_order?: number;
|
|
72
|
-
page?: number;
|
|
73
|
-
per_page?: number;
|
|
74
|
-
}
|
|
75
|
-
type TeamMemberResponse = TeamMember[];
|
|
76
|
-
|
|
77
|
-
interface Location {
|
|
78
|
-
id: number;
|
|
79
|
-
name: string;
|
|
80
|
-
slug: string;
|
|
81
|
-
address_line_1: string;
|
|
82
|
-
address_line_2?: string;
|
|
83
|
-
city: string;
|
|
84
|
-
state: string;
|
|
85
|
-
zip_code: string;
|
|
86
|
-
country?: string;
|
|
87
|
-
latitude?: number;
|
|
88
|
-
longitude?: number;
|
|
89
|
-
phone?: string;
|
|
90
|
-
email?: string;
|
|
91
|
-
description_markdown?: string;
|
|
92
|
-
business_hours?: string;
|
|
93
|
-
is_primary: boolean;
|
|
94
|
-
active: boolean;
|
|
95
|
-
sort_order: number;
|
|
96
|
-
created_at: string;
|
|
97
|
-
updated_at: string;
|
|
98
|
-
photo_attachments?: PhotoAttachment[];
|
|
99
|
-
}
|
|
100
|
-
interface LocationParams {
|
|
101
|
-
active?: boolean;
|
|
102
|
-
is_primary?: boolean;
|
|
103
|
-
sort_order?: number;
|
|
104
|
-
page?: number;
|
|
105
|
-
per_page?: number;
|
|
106
|
-
}
|
|
107
|
-
type LocationResponse = Location[];
|
|
108
|
-
|
|
109
|
-
interface SocialPost {
|
|
110
|
-
id: number;
|
|
111
|
-
platform: string;
|
|
112
|
-
content_markdown: string;
|
|
113
|
-
posted_at: string;
|
|
114
|
-
status?: string;
|
|
115
|
-
created_at: string;
|
|
116
|
-
updated_at: string;
|
|
117
|
-
/** Image URLs from photo_attachments (preferred for display) */
|
|
118
|
-
image_urls?: string[];
|
|
119
|
-
/** Video URLs from photo_attachments (exclude these when choosing img src) */
|
|
120
|
-
video_urls?: string[];
|
|
121
|
-
/** Photo attachments (same pattern as blog post, team member, etc.) */
|
|
122
|
-
photo_attachments?: PhotoAttachment[];
|
|
123
|
-
/** Legacy; prefer image_urls / photo_attachments */
|
|
124
|
-
media_urls?: {
|
|
125
|
-
images?: string[];
|
|
126
|
-
videos?: string[];
|
|
127
|
-
};
|
|
128
|
-
engagement_metrics?: {
|
|
129
|
-
likes?: number;
|
|
130
|
-
comments?: number;
|
|
131
|
-
shares?: number;
|
|
132
|
-
views?: number;
|
|
133
|
-
};
|
|
134
|
-
/** Permalink to the post on the platform when available; only link when present to avoid broken links */
|
|
135
|
-
external_post_url?: string | null;
|
|
136
|
-
}
|
|
137
|
-
interface SocialPostParams {
|
|
138
|
-
platform?: string;
|
|
139
|
-
featured?: boolean;
|
|
140
|
-
page?: number;
|
|
141
|
-
per_page?: number;
|
|
142
|
-
}
|
|
143
|
-
type SocialPostResponse = SocialPost[];
|
|
144
|
-
|
|
145
|
-
interface FaqQuestion {
|
|
146
|
-
id: number;
|
|
147
|
-
question: string;
|
|
148
|
-
answer: string;
|
|
149
|
-
answer_markdown?: string;
|
|
150
|
-
category_slug?: string;
|
|
151
|
-
featured: boolean;
|
|
152
|
-
sort_order: number;
|
|
153
|
-
created_at: string;
|
|
154
|
-
updated_at: string;
|
|
155
|
-
photo_attachments?: PhotoAttachment[];
|
|
156
|
-
}
|
|
157
|
-
interface FaqCategory {
|
|
158
|
-
id: number;
|
|
159
|
-
name: string;
|
|
160
|
-
slug: string;
|
|
161
|
-
description?: string;
|
|
162
|
-
active: boolean;
|
|
163
|
-
sort_order: number;
|
|
164
|
-
questions_count: number;
|
|
165
|
-
}
|
|
166
|
-
interface FaqParams {
|
|
167
|
-
category_slug?: string;
|
|
168
|
-
featured?: boolean;
|
|
169
|
-
q?: string;
|
|
170
|
-
page?: number;
|
|
171
|
-
per_page?: number;
|
|
172
|
-
}
|
|
173
|
-
type FaqResponse = FaqQuestion[];
|
|
174
|
-
type FaqCategoryResponse = FaqCategory[];
|
|
175
|
-
|
|
176
|
-
interface JobPosting {
|
|
177
|
-
id: number;
|
|
178
|
-
title: string;
|
|
179
|
-
slug: string;
|
|
180
|
-
description_markdown: string;
|
|
181
|
-
requirements_markdown?: string;
|
|
182
|
-
benefits_markdown?: string;
|
|
183
|
-
employment_type: string;
|
|
184
|
-
location: string;
|
|
185
|
-
experience_level?: string;
|
|
186
|
-
remote_ok?: boolean;
|
|
187
|
-
salary_range?: string;
|
|
188
|
-
posted_at: string;
|
|
189
|
-
expires_at?: string;
|
|
190
|
-
status: 'active' | 'inactive' | 'expired';
|
|
191
|
-
featured: boolean;
|
|
192
|
-
created_at: string;
|
|
193
|
-
updated_at: string;
|
|
194
|
-
photo_attachments?: PhotoAttachment[];
|
|
195
|
-
}
|
|
196
|
-
interface JobPostingParams {
|
|
197
|
-
featured?: boolean;
|
|
198
|
-
employment_type?: string;
|
|
199
|
-
location?: string;
|
|
200
|
-
q?: string;
|
|
201
|
-
page?: number;
|
|
202
|
-
per_page?: number;
|
|
203
|
-
}
|
|
204
|
-
type JobPostingResponse = JobPosting[];
|
|
205
|
-
|
|
206
|
-
/** Consumer and messaging types (aligned with Rails ConsumerSerializer and conversation endpoints). */
|
|
207
|
-
interface Consumer {
|
|
208
|
-
id: number;
|
|
209
|
-
email: string | null;
|
|
210
|
-
phone: string | null;
|
|
211
|
-
primary_identifier: string | null;
|
|
212
|
-
contacts?: ConsumerContact[];
|
|
213
|
-
}
|
|
214
|
-
interface ConsumerContact {
|
|
215
|
-
id: number;
|
|
216
|
-
display_name: string;
|
|
217
|
-
account?: {
|
|
218
|
-
id: number;
|
|
219
|
-
name: string;
|
|
220
|
-
slug?: string;
|
|
221
|
-
};
|
|
222
|
-
}
|
|
223
|
-
interface ConversationSummary {
|
|
224
|
-
contact_id: number;
|
|
225
|
-
business?: {
|
|
226
|
-
id: number;
|
|
227
|
-
name: string;
|
|
228
|
-
company_name?: string;
|
|
229
|
-
};
|
|
230
|
-
last_message_at: string | null;
|
|
231
|
-
last_message_preview?: string | null;
|
|
232
|
-
message_count: number;
|
|
233
|
-
}
|
|
234
|
-
interface Message {
|
|
235
|
-
id: number;
|
|
236
|
-
body: string | null;
|
|
237
|
-
/** "outbound" = sent by the business; "inbound" = sent by the contact/member. */
|
|
238
|
-
direction: 'inbound' | 'outbound';
|
|
239
|
-
sender_type: 'contact' | 'agent' | 'human';
|
|
240
|
-
sender_display_name?: string;
|
|
241
|
-
created_at: string;
|
|
242
|
-
}
|
|
243
|
-
interface ContactSummary {
|
|
244
|
-
id: number;
|
|
245
|
-
display_name: string;
|
|
246
|
-
business?: {
|
|
247
|
-
id: number;
|
|
248
|
-
name: string;
|
|
249
|
-
company_name?: string;
|
|
250
|
-
};
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
interface ContactInfo {
|
|
254
|
-
id?: number;
|
|
255
|
-
about_text_markdown?: string;
|
|
256
|
-
business_hours?: Record<string, {
|
|
257
|
-
open: string;
|
|
258
|
-
close: string;
|
|
259
|
-
}>;
|
|
260
|
-
company_name?: string;
|
|
261
|
-
description_markdown?: string;
|
|
262
|
-
facebook_url?: string;
|
|
263
|
-
favicon_url?: string;
|
|
264
|
-
founded_year?: string;
|
|
265
|
-
google_my_business_url?: string;
|
|
266
|
-
google_reviews_url?: string;
|
|
267
|
-
instagram_url?: string;
|
|
268
|
-
linkedin_url?: string;
|
|
269
|
-
mission_statement_markdown?: string;
|
|
270
|
-
pinterest_url?: string;
|
|
271
|
-
primary_address_line_1?: string;
|
|
272
|
-
primary_address_line_2?: string;
|
|
273
|
-
primary_city?: string;
|
|
274
|
-
primary_country?: string;
|
|
275
|
-
primary_email?: string;
|
|
276
|
-
primary_phone?: string;
|
|
277
|
-
primary_state?: string;
|
|
278
|
-
primary_zip_code?: string;
|
|
279
|
-
sales_email?: string;
|
|
280
|
-
stats_markdown?: string;
|
|
281
|
-
support_email?: string;
|
|
282
|
-
tagline?: string;
|
|
283
|
-
tiktok_url?: string;
|
|
284
|
-
tripadvisor_url?: string;
|
|
285
|
-
twitter_url?: string;
|
|
286
|
-
values_markdown?: string;
|
|
287
|
-
yelp_url?: string;
|
|
288
|
-
youtube_url?: string;
|
|
289
|
-
photo_attachments?: PhotoAttachment[];
|
|
290
|
-
}
|
|
291
|
-
interface ContactFormSubmission {
|
|
292
|
-
id: number;
|
|
293
|
-
name: string;
|
|
294
|
-
email: string;
|
|
295
|
-
phone?: string;
|
|
296
|
-
message: string;
|
|
297
|
-
source: string;
|
|
298
|
-
created_at: string;
|
|
299
|
-
}
|
|
300
|
-
interface ContactFormData {
|
|
301
|
-
name: string;
|
|
302
|
-
email: string;
|
|
303
|
-
phone?: string;
|
|
304
|
-
message: string;
|
|
305
|
-
source?: string;
|
|
306
|
-
}
|
|
307
|
-
type ContactResponse = ContactInfo | null;
|
|
308
|
-
interface ContactFormResponse {
|
|
309
|
-
message: string;
|
|
310
|
-
data: ContactFormSubmission;
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
export { type Consumer, type ConsumerContact, type ContactFormData, type ContactFormResponse, type ContactFormSubmission, type ContactInfo, type ContactResponse, type ContactSummary, type ConversationSummary, type FaqCategory, type FaqCategoryResponse, type FaqParams, type FaqQuestion, type FaqResponse, type JobPosting, type JobPostingParams, type JobPostingResponse, type Location, type LocationParams, type LocationResponse, type Message, type NavItem, PhotoAttachment, type SiteConfig, type SocialPost, type SocialPostParams, type SocialPostResponse, type TeamMember, type TeamMemberParams, type TeamMemberResponse, type Testimonial, type TestimonialParams, type TestimonialResponse, Theme };
|
package/dist/types/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=index.js.map
|
package/dist/types/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/utils/cx.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import * as tailwind_merge from 'tailwind-merge';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* This function is a wrapper around the twMerge function.
|
|
5
|
-
* It is used to merge the classes inside style objects.
|
|
6
|
-
*/
|
|
7
|
-
declare const cx: (...classLists: tailwind_merge.ClassNameValue[]) => string;
|
|
8
|
-
/**
|
|
9
|
-
* This function does nothing besides helping us to be able to
|
|
10
|
-
* sort the classes inside style objects which is not supported
|
|
11
|
-
* by the Tailwind IntelliSense by default.
|
|
12
|
-
*/
|
|
13
|
-
declare function sortCx<T extends Record<string, string | number | Record<string, string | number | Record<string, string | number>>>>(classes: T): T;
|
|
14
|
-
|
|
15
|
-
export { cx, sortCx };
|
package/dist/utils/cx.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
// src/utils/cx.ts
|
|
2
|
-
import { extendTailwindMerge } from "tailwind-merge";
|
|
3
|
-
var twMerge = extendTailwindMerge({
|
|
4
|
-
extend: {
|
|
5
|
-
theme: {
|
|
6
|
-
text: ["display-xs", "display-sm", "display-md", "display-lg", "display-xl", "display-2xl"]
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
});
|
|
10
|
-
var cx = twMerge;
|
|
11
|
-
function sortCx(classes) {
|
|
12
|
-
return classes;
|
|
13
|
-
}
|
|
14
|
-
export {
|
|
15
|
-
cx,
|
|
16
|
-
sortCx
|
|
17
|
-
};
|
|
18
|
-
//# sourceMappingURL=cx.js.map
|
package/dist/utils/cx.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/cx.ts"],"sourcesContent":["import { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({\n extend: {\n theme: {\n text: [\"display-xs\", \"display-sm\", \"display-md\", \"display-lg\", \"display-xl\", \"display-2xl\"],\n },\n },\n});\n\n/**\n * This function is a wrapper around the twMerge function.\n * It is used to merge the classes inside style objects.\n */\nexport const cx = twMerge;\n\n/**\n * This function does nothing besides helping us to be able to\n * sort the classes inside style objects which is not supported\n * by the Tailwind IntelliSense by default.\n */\nexport function sortCx<T extends Record<string, string | number | Record<string, string | number | Record<string, string | number>>>>(classes: T): T {\n return classes;\n}\n\n"],"mappings":";AAAA,SAAS,2BAA2B;AAEpC,IAAM,UAAU,oBAAoB;AAAA,EAChC,QAAQ;AAAA,IACJ,OAAO;AAAA,MACH,MAAM,CAAC,cAAc,cAAc,cAAc,cAAc,cAAc,aAAa;AAAA,IAC9F;AAAA,EACJ;AACJ,CAAC;AAMM,IAAM,KAAK;AAOX,SAAS,OAAsH,SAAe;AACjJ,SAAO;AACX;","names":[]}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
// src/utils/gradient-placeholder.ts
|
|
2
|
-
var getGradientUrl = (seed) => {
|
|
3
|
-
const gradients = [
|
|
4
|
-
// Purple gradients (like from-purple-200 to-purple-300)
|
|
5
|
-
["rgb(233, 213, 255)", "rgb(221, 214, 254)", "rgb(196, 181, 253)"],
|
|
6
|
-
// purple-200 to purple-300
|
|
7
|
-
["rgb(250, 232, 255)", "rgb(251, 207, 232)", "rgb(244, 114, 182)"],
|
|
8
|
-
// pink-200 to pink-300 via pink-400
|
|
9
|
-
// Blue gradients (like from-blue-200 to-blue-300)
|
|
10
|
-
["rgb(191, 219, 254)", "rgb(147, 197, 253)", "rgb(96, 165, 250)"],
|
|
11
|
-
// blue-200 to blue-300 to blue-400
|
|
12
|
-
// Green gradients (like from-green-200 to-green-300)
|
|
13
|
-
["rgb(187, 247, 208)", "rgb(134, 239, 172)", "rgb(74, 222, 128)"],
|
|
14
|
-
// green-200 to green-300 to green-400
|
|
15
|
-
// Pink to Purple (like from-pink-400 to-purple-500)
|
|
16
|
-
["rgb(244, 114, 182)", "rgb(217, 70, 239)", "rgb(168, 85, 247)"],
|
|
17
|
-
// pink-400 to purple-500
|
|
18
|
-
// Blue to Purple (like from-blue-500 to-purple-600)
|
|
19
|
-
["rgb(59, 130, 246)", "rgb(147, 51, 234)", "rgb(147, 51, 234)"],
|
|
20
|
-
// blue-500 to purple-600
|
|
21
|
-
// Indigo to Purple (like from-indigo-500 to-purple-600)
|
|
22
|
-
["rgb(99, 102, 241)", "rgb(139, 92, 246)", "rgb(147, 51, 234)"],
|
|
23
|
-
// indigo-500 to purple-600
|
|
24
|
-
// Orange gradients (like from-orange-200 to-orange-300)
|
|
25
|
-
["rgb(254, 215, 170)", "rgb(253, 186, 116)", "rgb(251, 146, 60)"],
|
|
26
|
-
// orange-200 to orange-300 to orange-400
|
|
27
|
-
// Purple to Pink (like from-purple-400 to-pink-400)
|
|
28
|
-
["rgb(192, 132, 252)", "rgb(232, 121, 249)", "rgb(244, 114, 182)"],
|
|
29
|
-
// purple-400 to pink-400
|
|
30
|
-
// Softer blue-green blend
|
|
31
|
-
["rgb(165, 243, 252)", "rgb(103, 232, 249)", "rgb(134, 239, 172)"],
|
|
32
|
-
// cyan-300 to green-400
|
|
33
|
-
// Warm pink-orange
|
|
34
|
-
["rgb(251, 207, 232)", "rgb(254, 202, 202)", "rgb(253, 186, 116)"],
|
|
35
|
-
// pink-200 to orange-300
|
|
36
|
-
// Cool indigo-blue
|
|
37
|
-
["rgb(199, 210, 254)", "rgb(165, 180, 252)", "rgb(129, 140, 248)"]
|
|
38
|
-
// indigo-200 to indigo-400
|
|
39
|
-
];
|
|
40
|
-
const index = typeof seed === "string" ? seed.split("").reduce((acc, char) => acc + char.charCodeAt(0), 0) % gradients.length : Number(seed) % gradients.length;
|
|
41
|
-
const [color1, color2, color3] = gradients[index];
|
|
42
|
-
const svg = `
|
|
43
|
-
<svg width="600" height="400" xmlns="http://www.w3.org/2000/svg">
|
|
44
|
-
<defs>
|
|
45
|
-
<linearGradient id="grad${index}" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
46
|
-
<stop offset="0%" style="stop-color:${color1};stop-opacity:1" />
|
|
47
|
-
<stop offset="50%" style="stop-color:${color2};stop-opacity:1" />
|
|
48
|
-
<stop offset="100%" style="stop-color:${color3};stop-opacity:1" />
|
|
49
|
-
</linearGradient>
|
|
50
|
-
</defs>
|
|
51
|
-
<rect width="600" height="400" fill="url(#grad${index})" />
|
|
52
|
-
</svg>
|
|
53
|
-
`.trim();
|
|
54
|
-
return `data:image/svg+xml;base64,${btoa(svg)}`;
|
|
55
|
-
};
|
|
56
|
-
export {
|
|
57
|
-
getGradientUrl
|
|
58
|
-
};
|
|
59
|
-
//# sourceMappingURL=gradient-placeholder.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/gradient-placeholder.ts"],"sourcesContent":["/**\n * Generates a beautiful gradient SVG data URL using the full color palette\n * Each seed (post ID or index) will consistently return the same gradient\n */\nexport const getGradientUrl = (seed: string | number): string => {\n // Colors match Tailwind's default palette (purple, pink, blue, green, orange, indigo)\n const gradients = [\n // Purple gradients (like from-purple-200 to-purple-300)\n ['rgb(233, 213, 255)', 'rgb(221, 214, 254)', 'rgb(196, 181, 253)'], // purple-200 to purple-300\n ['rgb(250, 232, 255)', 'rgb(251, 207, 232)', 'rgb(244, 114, 182)'], // pink-200 to pink-300 via pink-400\n // Blue gradients (like from-blue-200 to-blue-300)\n ['rgb(191, 219, 254)', 'rgb(147, 197, 253)', 'rgb(96, 165, 250)'], // blue-200 to blue-300 to blue-400\n // Green gradients (like from-green-200 to-green-300)\n ['rgb(187, 247, 208)', 'rgb(134, 239, 172)', 'rgb(74, 222, 128)'], // green-200 to green-300 to green-400\n // Pink to Purple (like from-pink-400 to-purple-500)\n ['rgb(244, 114, 182)', 'rgb(217, 70, 239)', 'rgb(168, 85, 247)'], // pink-400 to purple-500\n // Blue to Purple (like from-blue-500 to-purple-600)\n ['rgb(59, 130, 246)', 'rgb(147, 51, 234)', 'rgb(147, 51, 234)'], // blue-500 to purple-600\n // Indigo to Purple (like from-indigo-500 to-purple-600)\n ['rgb(99, 102, 241)', 'rgb(139, 92, 246)', 'rgb(147, 51, 234)'], // indigo-500 to purple-600\n // Orange gradients (like from-orange-200 to-orange-300)\n ['rgb(254, 215, 170)', 'rgb(253, 186, 116)', 'rgb(251, 146, 60)'], // orange-200 to orange-300 to orange-400\n // Purple to Pink (like from-purple-400 to-pink-400)\n ['rgb(192, 132, 252)', 'rgb(232, 121, 249)', 'rgb(244, 114, 182)'], // purple-400 to pink-400\n // Softer blue-green blend\n ['rgb(165, 243, 252)', 'rgb(103, 232, 249)', 'rgb(134, 239, 172)'], // cyan-300 to green-400\n // Warm pink-orange\n ['rgb(251, 207, 232)', 'rgb(254, 202, 202)', 'rgb(253, 186, 116)'], // pink-200 to orange-300\n // Cool indigo-blue\n ['rgb(199, 210, 254)', 'rgb(165, 180, 252)', 'rgb(129, 140, 248)'], // indigo-200 to indigo-400\n ];\n \n // Calculate consistent index from seed\n const index = typeof seed === 'string' \n ? seed.split('').reduce((acc, char) => acc + char.charCodeAt(0), 0) % gradients.length\n : Number(seed) % gradients.length;\n \n const [color1, color2, color3] = gradients[index];\n \n // Generate SVG with gradient (diagonal like bg-gradient-to-br)\n const svg = `\n <svg width=\"600\" height=\"400\" xmlns=\"http://www.w3.org/2000/svg\">\n <defs>\n <linearGradient id=\"grad${index}\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">\n <stop offset=\"0%\" style=\"stop-color:${color1};stop-opacity:1\" />\n <stop offset=\"50%\" style=\"stop-color:${color2};stop-opacity:1\" />\n <stop offset=\"100%\" style=\"stop-color:${color3};stop-opacity:1\" />\n </linearGradient>\n </defs>\n <rect width=\"600\" height=\"400\" fill=\"url(#grad${index})\" />\n </svg>\n `.trim();\n \n // Convert to base64 data URL\n return `data:image/svg+xml;base64,${btoa(svg)}`;\n};\n\n"],"mappings":";AAIO,IAAM,iBAAiB,CAAC,SAAkC;AAE/D,QAAM,YAAY;AAAA;AAAA,IAEhB,CAAC,sBAAsB,sBAAsB,oBAAoB;AAAA;AAAA,IACjE,CAAC,sBAAsB,sBAAsB,oBAAoB;AAAA;AAAA;AAAA,IAEjE,CAAC,sBAAsB,sBAAsB,mBAAmB;AAAA;AAAA;AAAA,IAEhE,CAAC,sBAAsB,sBAAsB,mBAAmB;AAAA;AAAA;AAAA,IAEhE,CAAC,sBAAsB,qBAAqB,mBAAmB;AAAA;AAAA;AAAA,IAE/D,CAAC,qBAAqB,qBAAqB,mBAAmB;AAAA;AAAA;AAAA,IAE9D,CAAC,qBAAqB,qBAAqB,mBAAmB;AAAA;AAAA;AAAA,IAE9D,CAAC,sBAAsB,sBAAsB,mBAAmB;AAAA;AAAA;AAAA,IAEhE,CAAC,sBAAsB,sBAAsB,oBAAoB;AAAA;AAAA;AAAA,IAEjE,CAAC,sBAAsB,sBAAsB,oBAAoB;AAAA;AAAA;AAAA,IAEjE,CAAC,sBAAsB,sBAAsB,oBAAoB;AAAA;AAAA;AAAA,IAEjE,CAAC,sBAAsB,sBAAsB,oBAAoB;AAAA;AAAA,EACnE;AAGA,QAAM,QAAQ,OAAO,SAAS,WAC1B,KAAK,MAAM,EAAE,EAAE,OAAO,CAAC,KAAK,SAAS,MAAM,KAAK,WAAW,CAAC,GAAG,CAAC,IAAI,UAAU,SAC9E,OAAO,IAAI,IAAI,UAAU;AAE7B,QAAM,CAAC,QAAQ,QAAQ,MAAM,IAAI,UAAU,KAAK;AAGhD,QAAM,MAAM;AAAA;AAAA;AAAA,kCAGoB,KAAK;AAAA,gDACS,MAAM;AAAA,iDACL,MAAM;AAAA,kDACL,MAAM;AAAA;AAAA;AAAA,sDAGF,KAAK;AAAA;AAAA,IAEvD,KAAK;AAGP,SAAO,6BAA6B,KAAK,GAAG,CAAC;AAC/C;","names":[]}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import React__default from 'react';
|
|
2
|
-
|
|
3
|
-
type ReactComponent = React__default.FC<unknown> | React__default.ComponentClass<unknown, unknown>;
|
|
4
|
-
/**
|
|
5
|
-
* Checks if a given value is a function component.
|
|
6
|
-
*/
|
|
7
|
-
declare const isFunctionComponent: (component: unknown) => component is React__default.FC<unknown>;
|
|
8
|
-
/**
|
|
9
|
-
* Checks if a given value is a class component.
|
|
10
|
-
*/
|
|
11
|
-
declare const isClassComponent: (component: unknown) => component is React__default.ComponentClass<unknown, unknown>;
|
|
12
|
-
/**
|
|
13
|
-
* Checks if a given value is a forward ref component.
|
|
14
|
-
*/
|
|
15
|
-
declare const isForwardRefComponent: (component: unknown) => component is React__default.ForwardRefExoticComponent<unknown>;
|
|
16
|
-
/**
|
|
17
|
-
* Checks if a given value is a valid React component.
|
|
18
|
-
*/
|
|
19
|
-
declare const isReactComponent: (component: unknown) => component is ReactComponent;
|
|
20
|
-
|
|
21
|
-
export { isClassComponent, isForwardRefComponent, isFunctionComponent, isReactComponent };
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
// src/utils/is-react-component.ts
|
|
2
|
-
var isFunctionComponent = (component) => {
|
|
3
|
-
return typeof component === "function";
|
|
4
|
-
};
|
|
5
|
-
var isClassComponent = (component) => {
|
|
6
|
-
return typeof component === "function" && typeof component === "function" && component.prototype !== void 0 && component.prototype !== null && (!!component.prototype.isReactComponent || !!component.prototype.render);
|
|
7
|
-
};
|
|
8
|
-
var isForwardRefComponent = (component) => {
|
|
9
|
-
return typeof component === "object" && component !== null && "$$typeof" in component && component.$$typeof !== void 0 && component.$$typeof !== null && component.$$typeof.toString() === "Symbol(react.forward_ref)";
|
|
10
|
-
};
|
|
11
|
-
var isReactComponent = (component) => {
|
|
12
|
-
return isFunctionComponent(component) || isForwardRefComponent(component) || isClassComponent(component);
|
|
13
|
-
};
|
|
14
|
-
export {
|
|
15
|
-
isClassComponent,
|
|
16
|
-
isForwardRefComponent,
|
|
17
|
-
isFunctionComponent,
|
|
18
|
-
isReactComponent
|
|
19
|
-
};
|
|
20
|
-
//# sourceMappingURL=is-react-component.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/is-react-component.ts"],"sourcesContent":["import type React from \"react\";\n\n// Use unknown for inputs since we're checking if an unknown value is a React component\n// The return types use proper type guards to narrow the type after validation\ntype ReactComponent = React.FC<unknown> | React.ComponentClass<unknown, unknown>;\n\n/**\n * Checks if a given value is a function component.\n */\nexport const isFunctionComponent = (component: unknown): component is React.FC<unknown> => {\n return typeof component === \"function\";\n};\n\n/**\n * Checks if a given value is a class component.\n */\nexport const isClassComponent = (component: unknown): component is React.ComponentClass<unknown, unknown> => {\n return typeof component === \"function\" && \n typeof component === \"function\" && \n component.prototype !== undefined && \n component.prototype !== null &&\n (!!component.prototype.isReactComponent || !!component.prototype.render);\n};\n\n/**\n * Checks if a given value is a forward ref component.\n */\nexport const isForwardRefComponent = (component: unknown): component is React.ForwardRefExoticComponent<unknown> => {\n return typeof component === \"object\" && \n component !== null && \n '$$typeof' in component &&\n component.$$typeof !== undefined &&\n component.$$typeof !== null &&\n component.$$typeof.toString() === \"Symbol(react.forward_ref)\";\n};\n\n/**\n * Checks if a given value is a valid React component.\n */\nexport const isReactComponent = (component: unknown): component is ReactComponent => {\n return isFunctionComponent(component) || isForwardRefComponent(component) || isClassComponent(component);\n};\n"],"mappings":";AASO,IAAM,sBAAsB,CAAC,cAAuD;AACvF,SAAO,OAAO,cAAc;AAChC;AAKO,IAAM,mBAAmB,CAAC,cAA4E;AACzG,SAAO,OAAO,cAAc,cACrB,OAAO,cAAc,cACrB,UAAU,cAAc,UACxB,UAAU,cAAc,SACvB,CAAC,CAAC,UAAU,UAAU,oBAAoB,CAAC,CAAC,UAAU,UAAU;AAC5E;AAKO,IAAM,wBAAwB,CAAC,cAA8E;AAChH,SAAO,OAAO,cAAc,YACrB,cAAc,QACd,cAAc,aACd,UAAU,aAAa,UACvB,UAAU,aAAa,QACvB,UAAU,SAAS,SAAS,MAAM;AAC7C;AAKO,IAAM,mBAAmB,CAAC,cAAoD;AACjF,SAAO,oBAAoB,SAAS,KAAK,sBAAsB,SAAS,KAAK,iBAAiB,SAAS;AAC3G;","names":[]}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Utility functions for extracting table of contents from markdown
|
|
3
|
-
*/
|
|
4
|
-
interface TableOfContentsItem {
|
|
5
|
-
id: string;
|
|
6
|
-
title: string;
|
|
7
|
-
level: number;
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Extract headings from markdown content and generate table of contents
|
|
11
|
-
*/
|
|
12
|
-
declare function extractTableOfContents(markdown: string): TableOfContentsItem[];
|
|
13
|
-
|
|
14
|
-
export { type TableOfContentsItem, extractTableOfContents };
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
// src/utils/markdown-toc.ts
|
|
2
|
-
function slugify(text) {
|
|
3
|
-
return text.toLowerCase().trim().replace(/[^\w\s-]/g, "").replace(/[\s_-]+/g, "-").replace(/^-+|-+$/g, "");
|
|
4
|
-
}
|
|
5
|
-
function extractTableOfContents(markdown) {
|
|
6
|
-
if (!markdown) return [];
|
|
7
|
-
const toc = [];
|
|
8
|
-
const lines = markdown.split("\n");
|
|
9
|
-
for (const line of lines) {
|
|
10
|
-
const headingMatch = line.match(/^(#{1,6})\s+(.+)$/);
|
|
11
|
-
if (headingMatch) {
|
|
12
|
-
const level = headingMatch[1].length;
|
|
13
|
-
const title = headingMatch[2].trim();
|
|
14
|
-
if (level >= 2 && level <= 3) {
|
|
15
|
-
const id = slugify(title);
|
|
16
|
-
toc.push({
|
|
17
|
-
id,
|
|
18
|
-
title,
|
|
19
|
-
level
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
return toc;
|
|
25
|
-
}
|
|
26
|
-
export {
|
|
27
|
-
extractTableOfContents
|
|
28
|
-
};
|
|
29
|
-
//# sourceMappingURL=markdown-toc.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/markdown-toc.ts"],"sourcesContent":["/**\n * Utility functions for extracting table of contents from markdown\n */\n\nexport interface TableOfContentsItem {\n id: string;\n title: string;\n level: number;\n}\n\n/**\n * Generate a URL-friendly ID from a heading text\n */\nfunction slugify(text: string): string {\n return text\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, '') // Remove special characters\n .replace(/[\\s_-]+/g, '-') // Replace spaces and underscores with hyphens\n .replace(/^-+|-+$/g, ''); // Remove leading/trailing hyphens\n}\n\n/**\n * Extract headings from markdown content and generate table of contents\n */\nexport function extractTableOfContents(markdown: string): TableOfContentsItem[] {\n if (!markdown) return [];\n\n const toc: TableOfContentsItem[] = [];\n const lines = markdown.split('\\n');\n\n for (const line of lines) {\n // Match markdown headings (##, ###, etc.)\n const headingMatch = line.match(/^(#{1,6})\\s+(.+)$/);\n if (headingMatch) {\n const level = headingMatch[1].length;\n const title = headingMatch[2].trim();\n \n // Only include h2 and h3 headings in TOC\n if (level >= 2 && level <= 3) {\n const id = slugify(title);\n toc.push({\n id,\n title,\n level,\n });\n }\n }\n }\n\n return toc;\n}\n\n\n"],"mappings":";AAaA,SAAS,QAAQ,MAAsB;AACrC,SAAO,KACJ,YAAY,EACZ,KAAK,EACL,QAAQ,aAAa,EAAE,EACvB,QAAQ,YAAY,GAAG,EACvB,QAAQ,YAAY,EAAE;AAC3B;AAKO,SAAS,uBAAuB,UAAyC;AAC9E,MAAI,CAAC,SAAU,QAAO,CAAC;AAEvB,QAAM,MAA6B,CAAC;AACpC,QAAM,QAAQ,SAAS,MAAM,IAAI;AAEjC,aAAW,QAAQ,OAAO;AAExB,UAAM,eAAe,KAAK,MAAM,mBAAmB;AACnD,QAAI,cAAc;AAChB,YAAM,QAAQ,aAAa,CAAC,EAAE;AAC9B,YAAM,QAAQ,aAAa,CAAC,EAAE,KAAK;AAGnC,UAAI,SAAS,KAAK,SAAS,GAAG;AAC5B,cAAM,KAAK,QAAQ,KAAK;AACxB,YAAI,KAAK;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* List of countries with their respective country code, flag, phone code, and phone mask.
|
|
3
|
-
*/
|
|
4
|
-
declare const countries: ({
|
|
5
|
-
name: string;
|
|
6
|
-
code: string;
|
|
7
|
-
flag: string;
|
|
8
|
-
phoneCode: string;
|
|
9
|
-
phoneMask: string;
|
|
10
|
-
} | {
|
|
11
|
-
name: string;
|
|
12
|
-
code: string;
|
|
13
|
-
flag: string;
|
|
14
|
-
phoneCode: string;
|
|
15
|
-
phoneMask?: undefined;
|
|
16
|
-
})[];
|
|
17
|
-
|
|
18
|
-
type Country = (typeof countries)[0];
|
|
19
|
-
/** Get national-format mask from country by stripping the country code prefix (e.g. "+1 (###) ###-####" → "(###) ###-####"). */
|
|
20
|
-
declare function getNationalMask(country: Country | undefined): string;
|
|
21
|
-
/** Format a raw digit string into a mask pattern where '#' represents one digit. No trailing literals so backspace works naturally. */
|
|
22
|
-
declare function formatDigitsToMask(digits: string, mask: string): string;
|
|
23
|
-
|
|
24
|
-
export { formatDigitsToMask, getNationalMask };
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
// src/utils/phone-helpers.ts
|
|
2
|
-
function getNationalMask(country) {
|
|
3
|
-
if (!(country == null ? void 0 : country.phoneMask)) return "";
|
|
4
|
-
const code = country.phoneCode.startsWith("+") ? country.phoneCode : `+${country.phoneCode}`;
|
|
5
|
-
const escaped = code.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
6
|
-
return country.phoneMask.replace(new RegExp(`^\\s*${escaped}[\\s-]*`), "").trim();
|
|
7
|
-
}
|
|
8
|
-
function formatDigitsToMask(digits, mask) {
|
|
9
|
-
if (digits.length === 0) return "";
|
|
10
|
-
let i = 0;
|
|
11
|
-
let out = "";
|
|
12
|
-
for (const c of mask) {
|
|
13
|
-
if (c === "#") {
|
|
14
|
-
if (i < digits.length) out += digits[i++];
|
|
15
|
-
else break;
|
|
16
|
-
} else if (i < digits.length) {
|
|
17
|
-
out += c;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
return out;
|
|
21
|
-
}
|
|
22
|
-
export {
|
|
23
|
-
formatDigitsToMask,
|
|
24
|
-
getNationalMask
|
|
25
|
-
};
|
|
26
|
-
//# sourceMappingURL=phone-helpers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/phone-helpers.ts"],"sourcesContent":["import type countries from './countries';\n\ntype Country = (typeof countries)[0];\n\n/** Get national-format mask from country by stripping the country code prefix (e.g. \"+1 (###) ###-####\" → \"(###) ###-####\"). */\nexport function getNationalMask(country: Country | undefined): string {\n if (!country?.phoneMask) return '';\n const code = country.phoneCode.startsWith('+') ? country.phoneCode : `+${country.phoneCode}`;\n const escaped = code.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n return country.phoneMask.replace(new RegExp(`^\\\\s*${escaped}[\\\\s-]*`), '').trim();\n}\n\n/** Format a raw digit string into a mask pattern where '#' represents one digit. No trailing literals so backspace works naturally. */\nexport function formatDigitsToMask(digits: string, mask: string): string {\n if (digits.length === 0) return '';\n let i = 0;\n let out = '';\n for (const c of mask) {\n if (c === '#') {\n if (i < digits.length) out += digits[i++];\n else break;\n } else if (i < digits.length) {\n out += c;\n }\n }\n return out;\n}\n"],"mappings":";AAKO,SAAS,gBAAgB,SAAsC;AACpE,MAAI,EAAC,mCAAS,WAAW,QAAO;AAChC,QAAM,OAAO,QAAQ,UAAU,WAAW,GAAG,IAAI,QAAQ,YAAY,IAAI,QAAQ,SAAS;AAC1F,QAAM,UAAU,KAAK,QAAQ,uBAAuB,MAAM;AAC1D,SAAO,QAAQ,UAAU,QAAQ,IAAI,OAAO,QAAQ,OAAO,SAAS,GAAG,EAAE,EAAE,KAAK;AAClF;AAGO,SAAS,mBAAmB,QAAgB,MAAsB;AACvE,MAAI,OAAO,WAAW,EAAG,QAAO;AAChC,MAAI,IAAI;AACR,MAAI,MAAM;AACV,aAAW,KAAK,MAAM;AACpB,QAAI,MAAM,KAAK;AACb,UAAI,IAAI,OAAO,OAAQ,QAAO,OAAO,GAAG;AAAA,UACnC;AAAA,IACP,WAAW,IAAI,OAAO,QAAQ;AAC5B,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;","names":[]}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { P as PhotoAttachment } from '../photos-CmBdWiuZ.js';
|
|
2
|
-
import { W as WebsitePhotos } from '../website-photos-Cl1YqAno.js';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Helper functions for extracting photo URLs from photo associations
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* True if the URL looks like a video by path extension. Used to avoid using video URLs in img src.
|
|
10
|
-
*/
|
|
11
|
-
declare function isVideoUrl(url: string | null | undefined): boolean;
|
|
12
|
-
/**
|
|
13
|
-
* Get the best available photo URL from a photos array
|
|
14
|
-
* Priority: featured photo > first photo > fallback
|
|
15
|
-
*/
|
|
16
|
-
declare function getPhotoUrl(photos?: PhotoAttachment[]): string | null;
|
|
17
|
-
/**
|
|
18
|
-
* Get avatar URL for team members or authors.
|
|
19
|
-
* Returns a URL only when there is a real photo in attachments; otherwise null.
|
|
20
|
-
* Callers should use PhotoWithFallback (gradient fallback) or Avatar with initials when null.
|
|
21
|
-
*/
|
|
22
|
-
/** Optional fallbackId/name reserved for future use (e.g. deterministic fallback). */
|
|
23
|
-
declare function getAvatarUrl(photos?: PhotoAttachment[], _fallbackId?: number | string, _name?: string): string | null;
|
|
24
|
-
/**
|
|
25
|
-
* Get featured image URL for blog posts
|
|
26
|
-
*/
|
|
27
|
-
declare function getFeaturedImageUrl(photos?: PhotoAttachment[]): string | null;
|
|
28
|
-
/**
|
|
29
|
-
* Get logo URL from website_photos API (which aggregates from account_photos)
|
|
30
|
-
*
|
|
31
|
-
* The website_photos API endpoint returns logos from account_photos with photo_type: 'logo',
|
|
32
|
-
* with industry fallback. This is the primary and only source for logos.
|
|
33
|
-
*
|
|
34
|
-
* Returns undefined if no logo is available (for PhotoWithFallback gradient fallback)
|
|
35
|
-
*/
|
|
36
|
-
declare function getLogoUrl(websitePhotos?: WebsitePhotos | null): string | undefined;
|
|
37
|
-
|
|
38
|
-
export { PhotoAttachment, getAvatarUrl, getFeaturedImageUrl, getLogoUrl, getPhotoUrl, isVideoUrl };
|