keystone-design-bootstrap 1.0.3
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 +179 -0
- package/package.json +59 -0
- package/src/contexts/ThemeContext.tsx +34 -0
- package/src/contexts/index.ts +1 -0
- package/src/design_system/elements/IconComponent.tsx +98 -0
- package/src/design_system/elements/avatar/avatar-label-group.tsx +30 -0
- package/src/design_system/elements/avatar/avatar-profile-photo.tsx +125 -0
- package/src/design_system/elements/avatar/avatar.tsx +131 -0
- package/src/design_system/elements/avatar/base-components/avatar-add-button.tsx +34 -0
- package/src/design_system/elements/avatar/base-components/avatar-company-icon.tsx +26 -0
- package/src/design_system/elements/avatar/base-components/avatar-online-indicator.tsx +31 -0
- package/src/design_system/elements/avatar/base-components/index.tsx +4 -0
- package/src/design_system/elements/avatar/base-components/verified-tick.tsx +34 -0
- package/src/design_system/elements/avatar/utils.ts +12 -0
- package/src/design_system/elements/badges/avatar.tsx +132 -0
- package/src/design_system/elements/badges/badge-groups.tsx +176 -0
- package/src/design_system/elements/badges/badge-types.ts +266 -0
- package/src/design_system/elements/badges/badges.tsx +430 -0
- package/src/design_system/elements/breadcrumb/Breadcrumb.tsx +33 -0
- package/src/design_system/elements/button-group/button-group.tsx +106 -0
- package/src/design_system/elements/buttons/app-store-buttons-outline.tsx +378 -0
- package/src/design_system/elements/buttons/app-store-buttons.tsx +567 -0
- package/src/design_system/elements/buttons/button-utility.tsx +116 -0
- package/src/design_system/elements/buttons/button.aman.tsx +174 -0
- package/src/design_system/elements/buttons/button.tsx +271 -0
- package/src/design_system/elements/buttons/close-button.tsx +42 -0
- package/src/design_system/elements/buttons/round-button.tsx +29 -0
- package/src/design_system/elements/buttons/social-button.tsx +148 -0
- package/src/design_system/elements/buttons/social-logos.tsx +115 -0
- package/src/design_system/elements/carousel/carousel-base.tsx +308 -0
- package/src/design_system/elements/carousel/carousel.tsx +308 -0
- package/src/design_system/elements/checkbox/checkbox.tsx +120 -0
- package/src/design_system/elements/date-picker/calendar.tsx +101 -0
- package/src/design_system/elements/date-picker/cell.tsx +106 -0
- package/src/design_system/elements/date-picker/date-input.tsx +32 -0
- package/src/design_system/elements/date-picker/date-picker.tsx +86 -0
- package/src/design_system/elements/date-picker/date-range-picker.tsx +163 -0
- package/src/design_system/elements/date-picker/range-calendar.tsx +161 -0
- package/src/design_system/elements/date-picker/range-preset.tsx +28 -0
- package/src/design_system/elements/featured-icon/featured-icon.tsx +154 -0
- package/src/design_system/elements/form/form.tsx +10 -0
- package/src/design_system/elements/form/hook-form.tsx +75 -0
- package/src/design_system/elements/hint-text/hint-text.tsx +33 -0
- package/src/design_system/elements/index.tsx +158 -0
- package/src/design_system/elements/input/hint-text.tsx +33 -0
- package/src/design_system/elements/input/input-group.tsx +133 -0
- package/src/design_system/elements/input/input.aman.tsx +172 -0
- package/src/design_system/elements/input/input.tsx +271 -0
- package/src/design_system/elements/input/label.tsx +50 -0
- package/src/design_system/elements/label/label.tsx +50 -0
- package/src/design_system/elements/loading-indicator/loading-indicator.tsx +123 -0
- package/src/design_system/elements/map/GoogleMap.tsx +286 -0
- package/src/design_system/elements/markdown-renderer/MarkdownRenderer.tsx +155 -0
- package/src/design_system/elements/modals/modal.tsx +41 -0
- package/src/design_system/elements/pagination/pagination-base.tsx +378 -0
- package/src/design_system/elements/pagination/pagination-dot.tsx +54 -0
- package/src/design_system/elements/pagination/pagination-line.tsx +50 -0
- package/src/design_system/elements/pagination/pagination.tsx +330 -0
- package/src/design_system/elements/photo-fallback/photo-fallback.tsx +143 -0
- package/src/design_system/elements/progress-indicators/progress-circles.tsx +176 -0
- package/src/design_system/elements/progress-indicators/progress-indicators.tsx +123 -0
- package/src/design_system/elements/progress-indicators/simple-circle.tsx +29 -0
- package/src/design_system/elements/radio-buttons/radio-buttons.tsx +129 -0
- package/src/design_system/elements/rating/rating-badge.tsx +144 -0
- package/src/design_system/elements/rating/rating-stars.tsx +77 -0
- package/src/design_system/elements/select/combobox.tsx +152 -0
- package/src/design_system/elements/select/multi-select.tsx +363 -0
- package/src/design_system/elements/select/popover.tsx +34 -0
- package/src/design_system/elements/select/select-item.tsx +97 -0
- package/src/design_system/elements/select/select-native.tsx +69 -0
- package/src/design_system/elements/select/select.aman.tsx +75 -0
- package/src/design_system/elements/select/select.tsx +146 -0
- package/src/design_system/elements/shared-assets/credit-card/credit-card.tsx +237 -0
- package/src/design_system/elements/shared-assets/credit-card/icons.tsx +75 -0
- package/src/design_system/elements/shared-assets/iphone-mockup.tsx +172 -0
- package/src/design_system/elements/shared-assets/section-divider.tsx +12 -0
- package/src/design_system/elements/slideout-menus/slideout-menu.tsx +122 -0
- package/src/design_system/elements/tabs/tabs.tsx +225 -0
- package/src/design_system/elements/tags/base-components/tag-checkbox.tsx +45 -0
- package/src/design_system/elements/tags/base-components/tag-close-x.tsx +34 -0
- package/src/design_system/elements/tags/tags.tsx +176 -0
- package/src/design_system/elements/textarea/textarea.aman.tsx +52 -0
- package/src/design_system/elements/textarea/textarea.tsx +111 -0
- package/src/design_system/elements/toggle/toggle.tsx +140 -0
- package/src/design_system/elements/tooltip/tooltip.tsx +109 -0
- package/src/design_system/hooks/use-breakpoint.ts +37 -0
- package/src/design_system/hooks/use-resize-observer.ts +68 -0
- package/src/design_system/logo/keystone-logo-minimal.tsx +93 -0
- package/src/design_system/logo/keystone-logo.tsx +22 -0
- package/src/design_system/sections/about-home.aman.tsx +85 -0
- package/src/design_system/sections/about-home.tsx +115 -0
- package/src/design_system/sections/blog-cards.tsx +848 -0
- package/src/design_system/sections/blog-gallery.aman.tsx +77 -0
- package/src/design_system/sections/blog-gallery.tsx +204 -0
- package/src/design_system/sections/blog-home.aman.tsx +84 -0
- package/src/design_system/sections/blog-home.tsx +153 -0
- package/src/design_system/sections/blog-post.aman.tsx +74 -0
- package/src/design_system/sections/blog-post.tsx +301 -0
- package/src/design_system/sections/blog-section.aman.tsx +101 -0
- package/src/design_system/sections/blog-section.tsx +179 -0
- package/src/design_system/sections/contact-home.tsx +25 -0
- package/src/design_system/sections/contact-section.aman.tsx +173 -0
- package/src/design_system/sections/contact-section.tsx +143 -0
- package/src/design_system/sections/faq-grid.aman.tsx +79 -0
- package/src/design_system/sections/faq-grid.tsx +102 -0
- package/src/design_system/sections/faq-home.aman.tsx +92 -0
- package/src/design_system/sections/faq-home.tsx +134 -0
- package/src/design_system/sections/feature-tab.tsx +43 -0
- package/src/design_system/sections/feature-text.tsx +284 -0
- package/src/design_system/sections/footer-home.aman.tsx +62 -0
- package/src/design_system/sections/footer-home.tsx +259 -0
- package/src/design_system/sections/generic-header-component.tsx +103 -0
- package/src/design_system/sections/header-navigation.aman.tsx +360 -0
- package/src/design_system/sections/header-navigation.tsx +334 -0
- package/src/design_system/sections/hero-faq.aman.tsx +38 -0
- package/src/design_system/sections/hero-faq.tsx +55 -0
- package/src/design_system/sections/hero-generic-text.aman.tsx +49 -0
- package/src/design_system/sections/hero-generic-text.tsx +51 -0
- package/src/design_system/sections/hero-home.aman.tsx +84 -0
- package/src/design_system/sections/hero-home.tsx +246 -0
- package/src/design_system/sections/hero-location-detail.aman.tsx +33 -0
- package/src/design_system/sections/hero-location-detail.tsx +72 -0
- package/src/design_system/sections/hero-service-detail.aman.tsx +53 -0
- package/src/design_system/sections/hero-service-detail.tsx +51 -0
- package/src/design_system/sections/hero-social-media.aman.tsx +42 -0
- package/src/design_system/sections/hero-social-media.tsx +35 -0
- package/src/design_system/sections/hero-testimonials.aman.tsx +38 -0
- package/src/design_system/sections/hero-testimonials.tsx +55 -0
- package/src/design_system/sections/home-hero-component.tsx +228 -0
- package/src/design_system/sections/index.tsx +131 -0
- package/src/design_system/sections/job-gallery.aman.tsx +91 -0
- package/src/design_system/sections/job-gallery.tsx +183 -0
- package/src/design_system/sections/location-details-section.aman.tsx +179 -0
- package/src/design_system/sections/location-details-section.tsx +196 -0
- package/src/design_system/sections/location-grid.aman.tsx +76 -0
- package/src/design_system/sections/location-grid.tsx +123 -0
- package/src/design_system/sections/services-grid.aman.tsx +85 -0
- package/src/design_system/sections/services-grid.tsx +104 -0
- package/src/design_system/sections/services-home.aman.tsx +78 -0
- package/src/design_system/sections/services-home.tsx +131 -0
- package/src/design_system/sections/social-media-grid.aman.tsx +132 -0
- package/src/design_system/sections/social-media-grid.tsx +189 -0
- package/src/design_system/sections/statistics-section.aman.tsx +79 -0
- package/src/design_system/sections/statistics-section.tsx +97 -0
- package/src/design_system/sections/team-grid.aman.tsx +85 -0
- package/src/design_system/sections/team-grid.tsx +88 -0
- package/src/design_system/sections/testimonials-home.aman.tsx +113 -0
- package/src/design_system/sections/testimonials-home.tsx +90 -0
- package/src/design_system/sections/values-section.aman.tsx +73 -0
- package/src/design_system/sections/values-section.tsx +128 -0
- package/src/design_system/utils/icon-mapping.tsx +28 -0
- package/src/index.ts +7 -0
- package/src/lib/component-registry.ts +53 -0
- package/src/lib/hooks/index.ts +8 -0
- package/src/lib/hooks/use-breakpoint.ts +37 -0
- package/src/lib/hooks/use-clipboard.ts +79 -0
- package/src/lib/hooks/use-resize-observer.ts +68 -0
- package/src/lib/server-api.ts +115 -0
- package/src/styles/style-overrides.aman.css +101 -0
- package/src/styles/theme.css +224 -0
- package/src/styles/typography.css +430 -0
- package/src/themes/index.ts +23 -0
- package/src/types/api/blog-post.ts +53 -0
- package/src/types/api/company-information.ts +44 -0
- package/src/types/api/contact.ts +63 -0
- package/src/types/api/faq.ts +37 -0
- package/src/types/api/job-posting.ts +34 -0
- package/src/types/api/location.ts +36 -0
- package/src/types/api/photos.ts +28 -0
- package/src/types/api/service.ts +37 -0
- package/src/types/api/social-post.ts +28 -0
- package/src/types/api/team-member.ts +29 -0
- package/src/types/api/testimonial.ts +29 -0
- package/src/types/api/website-photos.ts +22 -0
- package/src/types/config.ts +21 -0
- package/src/types/index.ts +21 -0
- package/src/utils/countries.tsx +1351 -0
- package/src/utils/cx.ts +25 -0
- package/src/utils/gradient-placeholder.ts +59 -0
- package/src/utils/is-react-component.ts +33 -0
- package/src/utils/markdown-toc.ts +54 -0
- package/src/utils/photo-helpers.ts +94 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { PhotoAttachment } from './photos';
|
|
2
|
+
|
|
3
|
+
// Location type definitions (aligned with Rails LocationSerializer)
|
|
4
|
+
export interface Location {
|
|
5
|
+
id: number;
|
|
6
|
+
name: string;
|
|
7
|
+
slug: string;
|
|
8
|
+
address_line_1: string;
|
|
9
|
+
address_line_2?: string;
|
|
10
|
+
city: string;
|
|
11
|
+
state: string;
|
|
12
|
+
zip_code: string;
|
|
13
|
+
country?: string;
|
|
14
|
+
latitude?: number;
|
|
15
|
+
longitude?: number;
|
|
16
|
+
phone?: string;
|
|
17
|
+
email?: string;
|
|
18
|
+
description_markdown?: string;
|
|
19
|
+
business_hours?: string;
|
|
20
|
+
is_primary: boolean;
|
|
21
|
+
active: boolean;
|
|
22
|
+
sort_order: number;
|
|
23
|
+
created_at: string;
|
|
24
|
+
updated_at: string;
|
|
25
|
+
photo_attachments?: PhotoAttachment[];
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface LocationParams {
|
|
29
|
+
active?: boolean;
|
|
30
|
+
is_primary?: boolean;
|
|
31
|
+
sort_order?: number;
|
|
32
|
+
page?: number;
|
|
33
|
+
per_page?: number;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export type LocationResponse = Location[];
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Photo and PhotoAttachment type definitions
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
export interface Photo {
|
|
6
|
+
id: number;
|
|
7
|
+
title: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
alt_text?: string;
|
|
10
|
+
thumbnail_url?: string;
|
|
11
|
+
medium_url?: string;
|
|
12
|
+
large_url?: string;
|
|
13
|
+
original_url?: string;
|
|
14
|
+
generated: boolean;
|
|
15
|
+
created_at: string;
|
|
16
|
+
updated_at: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface PhotoAttachment {
|
|
20
|
+
id: number;
|
|
21
|
+
photo: Photo;
|
|
22
|
+
featured: boolean;
|
|
23
|
+
sort_order: number;
|
|
24
|
+
created_at: string;
|
|
25
|
+
updated_at: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// Service type definitions (aligned with Rails ServiceSerializer)
|
|
2
|
+
export interface Service {
|
|
3
|
+
id: number;
|
|
4
|
+
name: string;
|
|
5
|
+
slug: string;
|
|
6
|
+
description_markdown: string;
|
|
7
|
+
summary?: string;
|
|
8
|
+
pricing_info?: string;
|
|
9
|
+
features_markdown?: string;
|
|
10
|
+
featured: boolean;
|
|
11
|
+
sort_order: number;
|
|
12
|
+
photo_attachments?: Array<{
|
|
13
|
+
id: number;
|
|
14
|
+
featured: boolean;
|
|
15
|
+
attachable_id?: number;
|
|
16
|
+
attachable_type?: string;
|
|
17
|
+
photo?: {
|
|
18
|
+
id: number;
|
|
19
|
+
title: string;
|
|
20
|
+
thumbnail_url?: string;
|
|
21
|
+
medium_url?: string;
|
|
22
|
+
large_url?: string;
|
|
23
|
+
original_url?: string;
|
|
24
|
+
};
|
|
25
|
+
}>;
|
|
26
|
+
created_at: string;
|
|
27
|
+
updated_at: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface ServiceParams {
|
|
31
|
+
featured?: boolean;
|
|
32
|
+
q?: string;
|
|
33
|
+
page?: number;
|
|
34
|
+
per_page?: number;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export type ServiceResponse = Service[];
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// Social post type definitions
|
|
2
|
+
export interface SocialPost {
|
|
3
|
+
id: number;
|
|
4
|
+
platform: string;
|
|
5
|
+
content_markdown: string;
|
|
6
|
+
media_urls: {
|
|
7
|
+
images?: string[];
|
|
8
|
+
videos?: string[];
|
|
9
|
+
};
|
|
10
|
+
engagement_metrics: {
|
|
11
|
+
likes?: number;
|
|
12
|
+
comments?: number;
|
|
13
|
+
shares?: number;
|
|
14
|
+
views?: number;
|
|
15
|
+
};
|
|
16
|
+
posted_at: string;
|
|
17
|
+
created_at: string;
|
|
18
|
+
updated_at: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface SocialPostParams {
|
|
22
|
+
platform?: string;
|
|
23
|
+
featured?: boolean;
|
|
24
|
+
page?: number;
|
|
25
|
+
per_page?: number;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export type SocialPostResponse = SocialPost[];
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Photo, PhotoAttachment } from './photos';
|
|
2
|
+
|
|
3
|
+
// Team member type definitions
|
|
4
|
+
export interface TeamMember {
|
|
5
|
+
id: number;
|
|
6
|
+
name: string;
|
|
7
|
+
position: string;
|
|
8
|
+
bio_markdown: string;
|
|
9
|
+
experience_markdown: string;
|
|
10
|
+
email: string;
|
|
11
|
+
phone: string;
|
|
12
|
+
sort_order: number;
|
|
13
|
+
featured: boolean;
|
|
14
|
+
specialties_markdown: string;
|
|
15
|
+
education_markdown: string;
|
|
16
|
+
certifications_markdown: string;
|
|
17
|
+
linkedin_url: string;
|
|
18
|
+
twitter_url: string;
|
|
19
|
+
photo_attachments?: PhotoAttachment[];
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface TeamMemberParams {
|
|
23
|
+
featured?: boolean;
|
|
24
|
+
sort_order?: number;
|
|
25
|
+
page?: number;
|
|
26
|
+
per_page?: number;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export type TeamMemberResponse = TeamMember[];
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { PhotoAttachment } from './photos';
|
|
2
|
+
|
|
3
|
+
// Testimonial/Review type definitions (aligned with Rails ReviewSerializer)
|
|
4
|
+
export interface Testimonial {
|
|
5
|
+
id: number;
|
|
6
|
+
reviewer_name: string;
|
|
7
|
+
reviewer_title?: string;
|
|
8
|
+
company?: string;
|
|
9
|
+
rating?: number;
|
|
10
|
+
content_markdown: string;
|
|
11
|
+
source?: string;
|
|
12
|
+
source_url?: string;
|
|
13
|
+
featured: boolean;
|
|
14
|
+
reviewed_at: string;
|
|
15
|
+
created_at: string;
|
|
16
|
+
updated_at: string;
|
|
17
|
+
photo_attachments?: PhotoAttachment[];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface TestimonialParams {
|
|
21
|
+
source?: string;
|
|
22
|
+
rating?: number;
|
|
23
|
+
verified?: boolean;
|
|
24
|
+
featured?: boolean;
|
|
25
|
+
page?: number;
|
|
26
|
+
per_page?: number;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export type TestimonialResponse = Testimonial[];
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface WebsitePhoto {
|
|
2
|
+
id: number;
|
|
3
|
+
url: string;
|
|
4
|
+
thumbnail_url?: string;
|
|
5
|
+
medium_url?: string;
|
|
6
|
+
alt: string;
|
|
7
|
+
source: 'account' | 'industry';
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface WebsitePhotos {
|
|
11
|
+
logo?: WebsitePhoto | null;
|
|
12
|
+
favicon?: WebsitePhoto | null;
|
|
13
|
+
hero?: WebsitePhoto | null;
|
|
14
|
+
contact?: WebsitePhoto | null;
|
|
15
|
+
about?: WebsitePhoto | null;
|
|
16
|
+
careers?: WebsitePhoto | null;
|
|
17
|
+
stock_photos?: WebsitePhoto[]; // Array of 'none' type photos for stub mode fallback
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// ApiClient.get() extracts the inner 'data' from Rails responses,
|
|
21
|
+
// so WebsitePhotosResponse is just WebsitePhotos (not wrapped)
|
|
22
|
+
export type WebsitePhotosResponse = WebsitePhotos;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Theme } from '../themes';
|
|
2
|
+
|
|
3
|
+
export interface NavItem {
|
|
4
|
+
label: string;
|
|
5
|
+
href: string;
|
|
6
|
+
subtitle?: string;
|
|
7
|
+
children?: NavItem[];
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface SiteConfig {
|
|
11
|
+
site: {
|
|
12
|
+
title: string;
|
|
13
|
+
description: string;
|
|
14
|
+
theme: Theme;
|
|
15
|
+
};
|
|
16
|
+
navigation: {
|
|
17
|
+
header: NavItem[];
|
|
18
|
+
footer: NavItem[][]; // Array of columns, each column is array of links
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// TypeScript types for keystone-design-bootstrap
|
|
2
|
+
|
|
3
|
+
// Re-export Theme from themes (single source of truth)
|
|
4
|
+
export type { Theme } from '../themes';
|
|
5
|
+
|
|
6
|
+
// Re-export config types
|
|
7
|
+
export * from './config';
|
|
8
|
+
|
|
9
|
+
// Re-export API types
|
|
10
|
+
export * from './api/blog-post';
|
|
11
|
+
export * from './api/company-information';
|
|
12
|
+
export * from './api/contact';
|
|
13
|
+
export * from './api/faq';
|
|
14
|
+
export * from './api/job-posting';
|
|
15
|
+
export * from './api/location';
|
|
16
|
+
export * from './api/photos';
|
|
17
|
+
export * from './api/service';
|
|
18
|
+
export * from './api/social-post';
|
|
19
|
+
export * from './api/team-member';
|
|
20
|
+
export * from './api/testimonial';
|
|
21
|
+
export * from './api/website-photos';
|