diff --git a/bun.lockb b/bun.lockb index fe7c4344b..f479aac6b 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/customtypes/page/index.json b/customtypes/page/index.json index 4d1264756..8651fe54f 100644 --- a/customtypes/page/index.json +++ b/customtypes/page/index.json @@ -33,11 +33,31 @@ "type": "Text", "config": { "label": "Landing url", "placeholder": "" } }, + "padding_bottom": { + "type": "Text", + "config": { "label": "Padding Bottom", "placeholder": "" } + }, + "transparent": { + "type": "Boolean", + "config": { + "label": "Transparent", + "default_value": false, + "placeholder_true": "true", + "placeholder_false": "false" + } + }, + "background": { + "type": "Color", + "config": { "label": "Background", "placeholder": "" } + }, "slices": { "type": "Slices", "fieldset": "Slice Zone", "config": { "choices": { + "faqs": { "type": "SharedSlice" }, + "pricing_cards": { "type": "SharedSlice" }, + "multiple_column_card": { "type": "SharedSlice" }, "info_cards": { "type": "SharedSlice" }, "trust_cards": { "type": "SharedSlice" }, "title_introduction": { "type": "SharedSlice" }, diff --git a/prismicio-types.d.ts b/prismicio-types.d.ts index dde0be148..e6378c8e9 100644 --- a/prismicio-types.d.ts +++ b/prismicio-types.d.ts @@ -6,6 +6,9 @@ import type * as prismicClient from "@prismicio/client"; type Simplify = { [KeyType in keyof T]: T[KeyType] }; type PageDocumentDataSlicesSlice = + | FaqsSlice + | PricingCardsSlice + | MultipleColumnCardSlice | InfoCardsSlice | TrustCardsSlice | TitleIntroductionSlice @@ -80,6 +83,40 @@ interface PageDocumentData { */ landing_url: prismic.KeyTextField; + /** + * Padding Bottom field in *Page* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: page.padding_bottom + * - **Tab**: Main + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + padding_bottom: prismic.KeyTextField; + + /** + * Transparent field in *Page* + * + * - **Field Type**: Boolean + * - **Placeholder**: *None* + * - **Default Value**: false + * - **API ID Path**: page.transparent + * - **Tab**: Main + * - **Documentation**: https://prismic.io/docs/field#boolean + */ + transparent: prismic.BooleanField; + + /** + * Background field in *Page* + * + * - **Field Type**: Color + * - **Placeholder**: *None* + * - **API ID Path**: page.background + * - **Tab**: Main + * - **Documentation**: https://prismic.io/docs/field#color + */ + background: prismic.ColorField; + /** * Slice Zone field in *Page* * @@ -181,6 +218,233 @@ export type EventCardsSlice = prismic.SharedSlice< EventCardsSliceVariation >; +/** + * Primary content in *Faqs → Primary* + */ +export interface FaqsSliceDefaultPrimary { + /** + * Title field in *Faqs → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: faqs.primary.title + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + title: prismic.KeyTextField; + + /** + * Background Color field in *Faqs → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: faqs.primary.background_color + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + background_color: prismic.KeyTextField; + + /** + * Margin Bottom field in *Faqs → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: faqs.primary.margin_bottom + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + margin_bottom: prismic.KeyTextField; + + /** + * Id key field in *Faqs → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: faqs.primary.id_key + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + id_key: prismic.KeyTextField; + + /** + * Title Font Size field in *Faqs → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: faqs.primary.title_font_size + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + title_font_size: prismic.KeyTextField; + + /** + * Title Line Height field in *Faqs → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: faqs.primary.title_line_height + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + title_line_height: prismic.KeyTextField; + + /** + * Title Font Weight field in *Faqs → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: faqs.primary.title_font_weight + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + title_font_weight: prismic.KeyTextField; + + /** + * Title Color field in *Faqs → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: faqs.primary.title_color + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + title_color: prismic.KeyTextField; + + /** + * Margin Top field in *Faqs → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: faqs.primary.margin_top + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + margin_top: prismic.KeyTextField; + + /** + * Max Width field in *Faqs → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: faqs.primary.max_width + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + max_width: prismic.KeyTextField; + + /** + * As element field in *Faqs → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: faqs.primary.as_element + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + as_element: prismic.KeyTextField; + + /** + * Label Weight field in *Faqs → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: faqs.primary.label_weight + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + label_weight: prismic.KeyTextField; + + /** + * Label Font Size field in *Faqs → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: faqs.primary.label_font_size + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + label_font_size: prismic.KeyTextField; + + /** + * Label Line Height field in *Faqs → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: faqs.primary.label_line_height + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + label_line_height: prismic.KeyTextField; + + /** + * Answer Weight field in *Faqs → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: faqs.primary.answer_weight + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + answer_weight: prismic.KeyTextField; + + /** + * Answer Font Size field in *Faqs → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: faqs.primary.answer_font_size + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + answer_font_size: prismic.KeyTextField; + + /** + * Answer Line Height field in *Faqs → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: faqs.primary.answer_line_height + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + answer_line_height: prismic.KeyTextField; +} + +/** + * Primary content in *Faqs → Items* + */ +export interface FaqsSliceDefaultItem { + /** + * Label field in *Faqs → Items* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: faqs.items[].label + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + label: prismic.KeyTextField; + + /** + * Answer field in *Faqs → Items* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: faqs.items[].answer + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + answer: prismic.KeyTextField; +} + +/** + * Default variation for Faqs Slice + * + * - **API ID**: `default` + * - **Description**: Default + * - **Documentation**: https://prismic.io/docs/slice + */ +export type FaqsSliceDefault = prismic.SharedSliceVariation< + "default", + Simplify, + Simplify +>; + +/** + * Slice variation for *Faqs* + */ +type FaqsSliceVariation = FaqsSliceDefault; + +/** + * Faqs Shared Slice + * + * - **API ID**: `faqs` + * - **Description**: Faqs + * - **Documentation**: https://prismic.io/docs/slice + */ +export type FaqsSlice = prismic.SharedSlice<"faqs", FaqsSliceVariation>; + /** * Primary content in *InfoCards → Primary* */ @@ -543,6 +807,136 @@ export type MarkdownSlice = prismic.SharedSlice< MarkdownSliceVariation >; +/** + * Primary content in *MultipleColumnCard → Primary* + */ +export interface MultipleColumnCardSliceDefaultPrimary { + /** + * Title field in *MultipleColumnCard → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: multiple_column_card.primary.title + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + title: prismic.KeyTextField; + + /** + * Id key field in *MultipleColumnCard → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: multiple_column_card.primary.id_key + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + id_key: prismic.KeyTextField; + + /** + * Font Family Title field in *MultipleColumnCard → Primary* + * + * - **Field Type**: Select + * - **Placeholder**: *None* + * - **API ID Path**: multiple_column_card.primary.font_family_title + * - **Documentation**: https://prismic.io/docs/field#select + */ + font_family_title: prismic.SelectField<"Lato" | "Space Grotesk Variable">; + + /** + * Margin Bottom field in *MultipleColumnCard → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: multiple_column_card.primary.margin_bottom + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + margin_bottom: prismic.KeyTextField; + + /** + * Margin Top field in *MultipleColumnCard → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: multiple_column_card.primary.margin_top + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + margin_top: prismic.KeyTextField; + + /** + * Max Width field in *MultipleColumnCard → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: multiple_column_card.primary.max_width + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + max_width: prismic.KeyTextField; +} + +/** + * Primary content in *MultipleColumnCard → Items* + */ +export interface MultipleColumnCardSliceDefaultItem { + /** + * Column Title field in *MultipleColumnCard → Items* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: multiple_column_card.items[].column_title + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + column_title: prismic.KeyTextField; + + /** + * Column Description field in *MultipleColumnCard → Items* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: multiple_column_card.items[].column_description + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + column_description: prismic.KeyTextField; + + /** + * Font Family Column field in *MultipleColumnCard → Items* + * + * - **Field Type**: Select + * - **Placeholder**: *None* + * - **API ID Path**: multiple_column_card.items[].font_family_column + * - **Documentation**: https://prismic.io/docs/field#select + */ + font_family_column: prismic.SelectField<"Lato" | "Space Grotesk Variable">; +} + +/** + * Default variation for MultipleColumnCard Slice + * + * - **API ID**: `default` + * - **Description**: Default + * - **Documentation**: https://prismic.io/docs/slice + */ +export type MultipleColumnCardSliceDefault = prismic.SharedSliceVariation< + "default", + Simplify, + Simplify +>; + +/** + * Slice variation for *MultipleColumnCard* + */ +type MultipleColumnCardSliceVariation = MultipleColumnCardSliceDefault; + +/** + * MultipleColumnCard Shared Slice + * + * - **API ID**: `multiple_column_card` + * - **Description**: MultipleColumnCard + * - **Documentation**: https://prismic.io/docs/slice + */ +export type MultipleColumnCardSlice = prismic.SharedSlice< + "multiple_column_card", + MultipleColumnCardSliceVariation +>; + /** * Primary content in *OneColumn → Primary* */ @@ -557,6 +951,87 @@ export interface OneColumnSliceDefaultPrimary { */ id_key: prismic.KeyTextField; + /** + * padding field in *OneColumn → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: one_column.primary.padding + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + padding: prismic.KeyTextField; + + /** + * Grid Column field in *OneColumn → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: one_column.primary.grid_column + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + grid_column: prismic.KeyTextField; + + /** + * Width field in *OneColumn → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: one_column.primary.width + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + width: prismic.KeyTextField; + + /** + * Margin Top field in *OneColumn → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: one_column.primary.margin_top + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + margin_top: prismic.KeyTextField; + + /** + * Margin Bottom field in *OneColumn → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: one_column.primary.margin_bottom + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + margin_bottom: prismic.KeyTextField; + + /** + * Max Width field in *OneColumn → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: one_column.primary.max_width + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + max_width: prismic.KeyTextField; + + /** + * Border Radius field in *OneColumn → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: one_column.primary.border_radius + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + border_radius: prismic.KeyTextField; + + /** + * Font Family field in *OneColumn → Primary* + * + * - **Field Type**: Select + * - **Placeholder**: *None* + * - **Default Value**: Lato + * - **API ID Path**: one_column.primary.font_family + * - **Documentation**: https://prismic.io/docs/field#select + */ + font_family: prismic.SelectField<"Lato" | "Space Grotesk Variable", "filled">; + /** * Title field in *OneColumn → Primary* * @@ -567,6 +1042,16 @@ export interface OneColumnSliceDefaultPrimary { */ title: prismic.KeyTextField; + /** + * Title Font Size field in *OneColumn → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: one_column.primary.title_font_size + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + title_font_size: prismic.KeyTextField; + /** * SubTitle field in *OneColumn → Primary* * @@ -575,27 +1060,97 @@ export interface OneColumnSliceDefaultPrimary { * - **API ID Path**: one_column.primary.subtitle * - **Documentation**: https://prismic.io/docs/field#key-text */ - subtitle: prismic.KeyTextField; + subtitle: prismic.KeyTextField; + + /** + * Description field in *OneColumn → Primary* + * + * - **Field Type**: Rich Text + * - **Placeholder**: *None* + * - **API ID Path**: one_column.primary.description + * - **Documentation**: https://prismic.io/docs/field#rich-text-title + */ + description: prismic.RichTextField; + + /** + * Description Font Size field in *OneColumn → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: one_column.primary.description_font_size + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + description_font_size: prismic.KeyTextField; + + /** + * Description Text Align field in *OneColumn → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: one_column.primary.description_text_align + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + description_text_align: prismic.KeyTextField; + + /** + * Description Justify Items field in *OneColumn → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: one_column.primary.description_justify_items + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + description_justify_items: prismic.KeyTextField; + + /** + * Description Line Height field in *OneColumn → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: one_column.primary.description_line_height + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + description_line_height: prismic.KeyTextField; + + /** + * Button label field in *OneColumn → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: one_column.primary.button_label + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + button_label: prismic.KeyTextField; + + /** + * Button Background Color field in *OneColumn → Primary* + * + * - **Field Type**: Color + * - **Placeholder**: *None* + * - **API ID Path**: one_column.primary.button_background_color + * - **Documentation**: https://prismic.io/docs/field#color + */ + button_background_color: prismic.ColorField; /** - * Description field in *OneColumn → Primary* + * Button Font Color field in *OneColumn → Primary* * - * - **Field Type**: Rich Text + * - **Field Type**: Color * - **Placeholder**: *None* - * - **API ID Path**: one_column.primary.description - * - **Documentation**: https://prismic.io/docs/field#rich-text-title + * - **API ID Path**: one_column.primary.button_font_color + * - **Documentation**: https://prismic.io/docs/field#color */ - description: prismic.RichTextField; + button_font_color: prismic.ColorField; /** - * Button label field in *OneColumn → Primary* + * Button Font Size field in *OneColumn → Primary* * * - **Field Type**: Text * - **Placeholder**: *None* - * - **API ID Path**: one_column.primary.button_label + * - **API ID Path**: one_column.primary.button_font_size * - **Documentation**: https://prismic.io/docs/field#key-text */ - button_label: prismic.KeyTextField; + button_font_size: prismic.KeyTextField; /** * Button url field in *OneColumn → Primary* @@ -618,6 +1173,16 @@ export interface OneColumnSliceDefaultPrimary { */ link_button: prismic.BooleanField; + /** + * Justify Items field in *OneColumn → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: one_column.primary.justify_items + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + justify_items: prismic.KeyTextField; + /** * Font color field in *OneColumn → Primary* * @@ -803,6 +1368,16 @@ export interface PartnersSliceDefaultPrimary { */ title: prismic.KeyTextField; + /** + * Description field in *Partners → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: partners.primary.description + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + description: prismic.KeyTextField; + /** * images field in *Partners → Primary* * @@ -822,6 +1397,26 @@ export interface PartnersSliceDefaultPrimary { * - **Documentation**: https://prismic.io/docs/field#key-text */ margin: prismic.KeyTextField; + + /** + * Images Content field in *Partners → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: partners.primary.images_content + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + images_content: prismic.KeyTextField; + + /** + * Title Size field in *Partners → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: partners.primary.title_size + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + title_size: prismic.KeyTextField; } /** @@ -854,6 +1449,91 @@ export type PartnersSlice = prismic.SharedSlice< PartnersSliceVariation >; +/** + * Primary content in *PricingCards → Primary* + */ +export interface PricingCardsSliceDefaultPrimary { + /** + * Id key field in *PricingCards → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: pricing_cards.primary.id_key + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + id_key: prismic.KeyTextField; + + /** + * Title field in *PricingCards → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: pricing_cards.primary.title + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + title: prismic.KeyTextField; + + /** + * Url field in *PricingCards → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: pricing_cards.primary.url + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + url: prismic.KeyTextField; + + /** + * Max Width field in *PricingCards → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: pricing_cards.primary.max_width + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + max_width: prismic.KeyTextField; + + /** + * Margin field in *PricingCards → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: pricing_cards.primary.margin + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + margin: prismic.KeyTextField; +} + +/** + * Default variation for PricingCards Slice + * + * - **API ID**: `default` + * - **Description**: Default + * - **Documentation**: https://prismic.io/docs/slice + */ +export type PricingCardsSliceDefault = prismic.SharedSliceVariation< + "default", + Simplify, + never +>; + +/** + * Slice variation for *PricingCards* + */ +type PricingCardsSliceVariation = PricingCardsSliceDefault; + +/** + * PricingCards Shared Slice + * + * - **API ID**: `pricing_cards` + * - **Description**: PricingCards + * - **Documentation**: https://prismic.io/docs/slice + */ +export type PricingCardsSlice = prismic.SharedSlice< + "pricing_cards", + PricingCardsSliceVariation +>; + /** * Primary content in *RecommendedCourses → Primary* */ @@ -1282,6 +1962,27 @@ export interface TestimonialsSliceDefaultPrimary { * - **Documentation**: https://prismic.io/docs/field#key-text */ margin: prismic.KeyTextField; + + /** + * Background Color field in *Testimonials → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: testimonials.primary.background_color + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + background_color: prismic.KeyTextField; + + /** + * Version field in *Testimonials → Primary* + * + * - **Field Type**: Select + * - **Placeholder**: *None* + * - **Default Value**: v1 + * - **API ID Path**: testimonials.primary.version + * - **Documentation**: https://prismic.io/docs/field#select + */ + version: prismic.SelectField<"v1" | "v2", "filled">; } /** @@ -1571,6 +2272,16 @@ export interface TwoColumnSliceDefaultPrimary { */ id_key: prismic.KeyTextField; + /** + * Padding field in *TwoColumn → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: two_column.primary.padding + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + padding: prismic.KeyTextField; + /** * Information Size field in *TwoColumn → Primary* * @@ -1581,6 +2292,56 @@ export interface TwoColumnSliceDefaultPrimary { */ information_size: prismic.SelectField<"Small" | "Medium" | "Large">; + /** + * Border Radius field in *TwoColumn → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: two_column.primary.border_radius + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + border_radius: prismic.KeyTextField; + + /** + * Max Width field in *TwoColumn → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: two_column.primary.max_width + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + max_width: prismic.KeyTextField; + + /** + * Margin field in *TwoColumn → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: top, right, bottom, left + * - **API ID Path**: two_column.primary.margin + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + margin: prismic.KeyTextField; + + /** + * Margin Top field in *TwoColumn → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: two_column.primary.margin_top + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + margin_top: prismic.KeyTextField; + + /** + * Margin Bottom field in *TwoColumn → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: two_column.primary.margin_bottom + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + margin_bottom: prismic.KeyTextField; + /** * Text Background Color field in *TwoColumn → Primary* * @@ -1601,6 +2362,27 @@ export interface TwoColumnSliceDefaultPrimary { */ title: prismic.KeyTextField; + /** + * Custom Title Size field in *TwoColumn → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: two_column.primary.custom_title_size + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + custom_title_size: prismic.KeyTextField; + + /** + * Font Family Title field in *TwoColumn → Primary* + * + * - **Field Type**: Select + * - **Placeholder**: *None* + * - **Default Value**: Lato + * - **API ID Path**: two_column.primary.fontFamily + * - **Documentation**: https://prismic.io/docs/field#select + */ + fontFamily: prismic.SelectField<"Lato" | "Space Grotesk Variable", "filled">; + /** * Title Color field in *TwoColumn → Primary* * @@ -1621,6 +2403,26 @@ export interface TwoColumnSliceDefaultPrimary { */ subtitle: prismic.KeyTextField; + /** + * Custom Subtitle Size field in *TwoColumn → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: two_column.primary.custom_subtitle_size + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + custom_subtitle_size: prismic.KeyTextField; + + /** + * Font Family Subtitle field in *TwoColumn → Primary* + * + * - **Field Type**: Select + * - **Placeholder**: *None* + * - **API ID Path**: two_column.primary.font_family_subtitle + * - **Documentation**: https://prismic.io/docs/field#select + */ + font_family_subtitle: prismic.SelectField<"Lato" | "Space Grotesk Variable">; + /** * Subtitle Color field in *TwoColumn → Primary* * @@ -1631,6 +2433,16 @@ export interface TwoColumnSliceDefaultPrimary { */ subtitle_color: prismic.ColorField; + /** + * Description Title field in *TwoColumn → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: two_column.primary.description_title + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + description_title: prismic.KeyTextField; + /** * Description field in *TwoColumn → Primary* * @@ -1651,6 +2463,16 @@ export interface TwoColumnSliceDefaultPrimary { */ description_color: prismic.ColorField; + /** + * Description Font Size field in *TwoColumn → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: two_column.primary.description_font_size + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + description_font_size: prismic.KeyTextField; + /** * image field in *TwoColumn → Primary* * @@ -1661,6 +2483,26 @@ export interface TwoColumnSliceDefaultPrimary { */ image: prismic.ImageField; + /** + * Students Avatars field in *TwoColumn → Primary* + * + * - **Field Type**: Rich Text + * - **Placeholder**: *None* + * - **API ID Path**: two_column.primary.students_avatars + * - **Documentation**: https://prismic.io/docs/field#rich-text-title + */ + students_avatars: prismic.RichTextField; + + /** + * Students Avatars Descriptions field in *TwoColumn → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: two_column.primary.student_avatar_description + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + student_avatar_description: prismic.KeyTextField; + /** * Button label field in *TwoColumn → Primary* * @@ -1671,6 +2513,16 @@ export interface TwoColumnSliceDefaultPrimary { */ button_label: prismic.KeyTextField; + /** + * Button Label Size field in *TwoColumn → Primary* + * + * - **Field Type**: Text + * - **Placeholder**: *None* + * - **API ID Path**: two_column.primary.button_label_size + * - **Documentation**: https://prismic.io/docs/field#key-text + */ + button_label_size: prismic.KeyTextField; + /** * Button url field in *TwoColumn → Primary* * @@ -1720,7 +2572,7 @@ export interface TwoColumnSliceDefaultPrimary { * - **API ID Path**: two_column.primary.button_color * - **Documentation**: https://prismic.io/docs/field#select */ - button_color: prismic.SelectField<"Blue" | "White">; + button_color: prismic.SelectField<"Blue" | "White" | "Dark Blue">; /** * Background color field in *TwoColumn → Primary* @@ -1753,35 +2605,50 @@ export interface TwoColumnSliceDefaultPrimary { image_position: prismic.SelectField<"left" | "right">; /** - * Margin field in *TwoColumn → Primary* + * Grid gap field in *TwoColumn → Primary* * * - **Field Type**: Text - * - **Placeholder**: top, right, bottom, left - * - **API ID Path**: two_column.primary.margin + * - **Placeholder**: *None* + * - **API ID Path**: two_column.primary.grid_gap * - **Documentation**: https://prismic.io/docs/field#key-text */ - margin: prismic.KeyTextField; + grid_gap: prismic.KeyTextField; /** - * Grid gap field in *TwoColumn → Primary* + * Transparent field in *TwoColumn → Primary* + * + * - **Field Type**: Boolean + * - **Placeholder**: *None* + * - **Default Value**: false + * - **API ID Path**: two_column.primary.transparent + * - **Documentation**: https://prismic.io/docs/field#boolean + */ + transparent: prismic.BooleanField; +} + +/** + * Primary content in *TwoColumn → Items* + */ +export interface TwoColumnSliceDefaultItem { + /** + * Multi Description Title field in *TwoColumn → Items* * * - **Field Type**: Text * - **Placeholder**: *None* - * - **API ID Path**: two_column.primary.grid_gap + * - **API ID Path**: two_column.items[].multi_description_title * - **Documentation**: https://prismic.io/docs/field#key-text */ - grid_gap: prismic.KeyTextField; + multi_description_title: prismic.KeyTextField; /** - * Font Family field in *TwoColumn → Primary* + * Multi Description Content field in *TwoColumn → Items* * - * - **Field Type**: Select + * - **Field Type**: Text * - **Placeholder**: *None* - * - **Default Value**: Lato - * - **API ID Path**: two_column.primary.fontFamily - * - **Documentation**: https://prismic.io/docs/field#select + * - **API ID Path**: two_column.items[].multi_description_content + * - **Documentation**: https://prismic.io/docs/field#key-text */ - fontFamily: prismic.SelectField<"Lato" | "Space Grotesk Variable", "filled">; + multi_description_content: prismic.KeyTextField; } /** @@ -1794,7 +2661,7 @@ export interface TwoColumnSliceDefaultPrimary { export type TwoColumnSliceDefault = prismic.SharedSliceVariation< "default", Simplify, - never + Simplify >; /** @@ -1832,6 +2699,11 @@ declare module "@prismicio/client" { EventCardsSliceDefaultPrimary, EventCardsSliceVariation, EventCardsSliceDefault, + FaqsSlice, + FaqsSliceDefaultPrimary, + FaqsSliceDefaultItem, + FaqsSliceVariation, + FaqsSliceDefault, InfoCardsSlice, InfoCardsSliceDefaultPrimary, InfoCardsSliceVariation, @@ -1840,6 +2712,11 @@ declare module "@prismicio/client" { MarkdownSliceDefaultPrimary, MarkdownSliceVariation, MarkdownSliceDefault, + MultipleColumnCardSlice, + MultipleColumnCardSliceDefaultPrimary, + MultipleColumnCardSliceDefaultItem, + MultipleColumnCardSliceVariation, + MultipleColumnCardSliceDefault, OneColumnSlice, OneColumnSliceDefaultPrimary, OneColumnSliceVariation, @@ -1848,6 +2725,10 @@ declare module "@prismicio/client" { PartnersSliceDefaultPrimary, PartnersSliceVariation, PartnersSliceDefault, + PricingCardsSlice, + PricingCardsSliceDefaultPrimary, + PricingCardsSliceVariation, + PricingCardsSliceDefault, RecommendedCoursesSlice, RecommendedCoursesSliceDefaultPrimary, RecommendedCoursesSliceVariation, @@ -1882,6 +2763,7 @@ declare module "@prismicio/client" { TrustCardsSliceDefault, TwoColumnSlice, TwoColumnSliceDefaultPrimary, + TwoColumnSliceDefaultItem, TwoColumnSliceVariation, TwoColumnSliceDefault, }; diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 8f53f6916..9e98cef55 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -163,6 +163,7 @@ "continue-exercise": "Continue from a previous session", "open-locally": "Open locally on your computer", "start-asset": "Start interactive {{asset_type}}", + "continue-asset": "Continue this {{asset_type}}", "asset_types": { "project": "project", "exercise": "exercise" diff --git a/public/locales/en/profile.json b/public/locales/en/profile.json index 7d5c49ede..f16ceda2d 100644 --- a/public/locales/en/profile.json +++ b/public/locales/en/profile.json @@ -72,6 +72,7 @@ }, "subscription": { "what-you-will-get": "What you will get:", + "bootcamp-mentorships": "You have unlimited access to those mentorship services with this icon ∞ because you belong to the bootcamp", "mentoring-available": "Mentoring sessions available", "your-mentoring-available": "Your mentoring services available", "workshop-available": "Workshop sessions available", diff --git a/public/locales/en/signup.json b/public/locales/en/signup.json index 0b61bfd10..ac0c91752 100644 --- a/public/locales/en/signup.json +++ b/public/locales/en/signup.json @@ -12,6 +12,7 @@ "read-more" :"Read the science behind it.", "read-more-link": "https://4geeks.com/mastering-technical-knowledge" }, + "added-features-title": "+ You can also add", "fixed-price-disclaimer":"Fixed price discounts will only be applied to the first month when financed for more than one month. Percentage discounts will be applied to all months.", "total": "Total", "total-now": "Total now", diff --git a/public/locales/es/common.json b/public/locales/es/common.json index 202919562..b650e5da5 100644 --- a/public/locales/es/common.json +++ b/public/locales/es/common.json @@ -159,6 +159,7 @@ "continue-exercise": "Continuar desde una sesión anterior", "open-locally": "Abrir localmente en tu computadora", "start-asset": "Empezar {{asset_type}} interactivo", + "continue-asset": "Continuar este {{asset_type}}", "asset_types": { "project": "proyecto", "exercise": "ejercicio" diff --git a/public/locales/es/profile.json b/public/locales/es/profile.json index 3378fa00c..4724802a8 100644 --- a/public/locales/es/profile.json +++ b/public/locales/es/profile.json @@ -72,6 +72,7 @@ }, "subscription": { "what-you-will-get": "Lo que obtendrás:", + "bootcamp-mentorships": "Tienes acceso ilimitado a los servicios de mentoría con este ícono ∞ porque perteneces al bootcamp", "mentoring-available": "Sesiones de mentorías disponibles", "your-mentoring-available": "Tus servicios de mentorías disponibles", "workshop-available": "Sesiones de workshops disponibles", diff --git a/public/locales/es/signup.json b/public/locales/es/signup.json index b47490fcb..89e05ddb6 100644 --- a/public/locales/es/signup.json +++ b/public/locales/es/signup.json @@ -12,6 +12,7 @@ "read-more" :"Lee la ciencia detrás de esto.", "read-more-link": "https://4geeks.com/es/mastering-technical-knowledge" }, + "added-features-title": "+ También puedes agregar", "fixed-price-disclaimer":"Los descuentos de precio fijo se aplicarán solo al primer mes cuando se financie por más de un mes. Los descuentos porcentuales se aplicarán a todos los meses.", "total": "Total", "total-now": "Total ahora", diff --git a/public/plans-info.es.json b/public/plans-info.es.json new file mode 100644 index 000000000..6fbd03d71 --- /dev/null +++ b/public/plans-info.es.json @@ -0,0 +1,319 @@ +[ + { + "planType": "custom", + "price": "Gratis", + "type": "Experiencia Ilimitada", + "period_label": "", + "title": "Plan Jumpstart", + "description": "Impulsa tu carrera con nuestro paquete JOBSTART gratuito, que incluye recursos esenciales para tu búsqueda de empleo.", + "subtitle": "Programa de Bootcamp", + "sub-description": "Únete a un grupo en un entorno de aula en vivo y recibe soporte ilimitado hasta encontrar un trabajo.", + "ask": "", + "button": { + "background": "#0084FF", + "title": "Obtener Plan" + }, + "button_link": "https://4geeks.com/es/checkout?plan=jump-start", + "featured_info": [ + { + "service": { + "slug": "ats-resume", + "title": "Plantilla de currículum ATS", + "icon": "verified2", + "icon_color": "#06AB52" + }, + "features": [ + { + "description": "Una plantilla de currículum ATS gratuita para garantizar que los empleadores se fijen en tu currículum" + } + ] + }, + { + "service": { + "slug": "job-hunting", + "title": "Seguimiento de búsqueda de empleo", + "icon": "verified2", + "icon_color": "#06AB52" + }, + "features": [ + { + "description": "Un rastreador de búsqueda de empleo para mantenerte organizado y al tanto de tus solicitudes" + } + ] + }, + { + "service": { + "slug": "salary-negotiation", + "title": "Guía de negociación salarial", + "icon": "verified2", + "icon_color": "#06AB52" + }, + "features": [ + { + "description": "Una Guía de Negociación Salarial para ayudarte a asegurar la compensación que mereces." + } + ] + }, + { + "service": { + "slug": "elevator-pitch", + "title": "Consejos para tu Elevator Pitch", + "icon": "verified2", + "icon_color": "#06AB52" + }, + "features": [ + { + "description": "Consejos para crear un Elevator Pitch que deje una impresión duradera." + } + ] + } + ], + "service_items": { + "title_icon": "star", + "title_color": "#0084FF", + "title_size": "xl", + "title": "Perfecto para", + "items": [ + { + "label": "Personas en búsqueda de empleo que buscan recursos gratuitos valiosos para mejorar su búsqueda laboral y avanzar en su desarrollo profesional.", + "icon": null + } + ] + } + }, + { + "planType": "custom", + "price": "$50", + "type": "Experiencia ilimitada", + "period_label": "", + "title": "Plan Básico", + "description": "Toma el control de tus materiales profesionales con todas las herramientas y recursos que necesitas para tener éxito.", + "subtitle": "Programa de Bootcamp", + "sub-description": "Únete a un grupo en un entorno de aula en vivo y recibe soporte ilimitado hasta que consigas un empleo.", + "ask": "", + "button": { + "background": "#0084FF", + "title": "Obtener Plan" + }, + "button_link": "https://4geeks.com/es/checkout?plan=basic-plan", + "featured_info": [ + { + "service": { + "slug": "career-tools", + "title": "Herramientas Profesionales", + "icon": "verified2", + "icon_color": "#06AB52" + }, + "features": [ + { + "description": "Acceso a nuestro conjunto completo de tutoriales y guías para crear tu CV, perfil de LinkedIn y prepararte para entrevistas." + } + ] + }, + { + "service": { + "slug": "video-tutorials", + "title": "Tutoriales paso a paso", + "icon": "verified2", + "icon_color": "#06AB52" + }, + "features": [ + { + "description": "Tutoriales en video paso a paso para crear un currículum destacado, optimizar tu LinkedIn y triunfar en tus entrevistas." + } + ] + }, + { + "service": { + "slug": "advisory-sessions", + "title": "Sesiones de asesoría", + "icon": "verified2", + "icon_color": "#06AB52" + }, + "features": [ + { + "description": "No se incluyen sesiones de asesoría, pero siempre puedes comprar sesiones de consulta adicionales si necesitas orientación experta." + } + ] + } + ], + "service_items": { + "title_icon": "star", + "title_color": "#0084FF", + "title_size": "xl", + "title": "Perfecto para", + "items": [ + { + "label": "Iniciadores que desean crear sus propios materiales con recursos profesionales y videos.", + "icon": null + } + ] + }, + "added_features": { + "items": [ + { + "label": "Sesión adicional de mentoría", + "price": "$49" + } + ] + } + }, + { + "planType": "custom", + "price": "$150", + "type": "Experiencia Ilimitada", + "period_label": "", + "title": "Plan Estandar", + "description": "¡Nosotros creamos todo por ti, sin estrés! Prepara tu CV y LinkedIn para el éxito!", + "subtitle": "programa de Bootcamp", + "sub-description": "Únete a un grupo en un entorno de aula en vivo y recibe soporte ilimitado hasta que consigas un empleo", + "ask": "", + "button": { + "variant": "deafult", + "color": "#0084FF", + "background": "white", + "title": "Obtener Plan" + }, + "button_link": "https://4geeks.com/es/checkout?plan=standard-plan", + "featured_card": { + "color": "#0084FF" + }, + "featured_info": [ + { + "service": { + "slug": "cv-and-linkedin", + "title": "CV y LinkedIn", + "icon": "verified2", + "icon_color": "#06AB52" + }, + "features": [ + { + "description": "Creamos tu CV y perfil de LinkedIn basados en tu experiencia y metas profesionales." + } + ] + }, + { + "service": { + "slug": "no-meetings-required", + "title": "No se requieren reuniones", + "icon": "verified2", + "icon_color": "#06AB52" + }, + "features": [ + { + "description": "No se requieren reuniones, pero está disponible una sesión opcional para aclarar cualquier duda que puedas tener." + } + ] + } + ], + "service_items": { + "title_icon": "star", + "title_color": "#0084FF", + "title_size": "xl", + "title": "Perfecto para", + "items": [ + { + "label": "Individuos que buscan un enfoque sin intervención, pero que aún desean recibir documentos profesionales que los ayuden a destacarse.", + "icon": null + } + ] + }, + "added_features": { + "items": [ + { + "label": "Cambio de idioma", + "price": "$49" + }, + { + "label": "Sesión adicional de mentoría", + "price": "$49" + } + ] + } + }, + { + "planType": "custom", + "price": "$250", + "type": "Experience Ilimitada", + "period_label": "", + "title": "Premium Plan", + "description": "¡Todo lo que necesitas para tener éxito, incluyendo entrevistas y coaching personalizado!", + "subtitle": "Programa de Bootcamp", + "sub-description": "Únete a un grupo en un entorno de aula en vivo y recibe soporte ilimitado hasta que consigas un empleo.", + "ask": "", + "button": { + "background": "#0084FF", + "title": "Obtener Plan" + }, + "button_link": "https://4geeks.com/es/checkout?plan=premium-plan", + "featured_info": [ + { + "service": { + "slug": "interview-preparation", + "title": "Preparación para entrevistas", + "icon": "verified2", + "icon_color": "#06AB52" + }, + "features": [ + { + "description": "Te ayudaremos a prepararte para las entrevistas con preguntas personalizadas y consejos." + } + ] + }, + { + "service": { + "slug": "coaching-sessions", + "title": "Sesiones de Mentoria", + "icon": "verified2", + "icon_color": "#06AB52" + }, + "features": [ + { + "description": "Dos sesiones de coaching con un asesor experimentado, que trabajará contigo en técnicas de entrevista y consejos profesionales." + } + ] + }, + { + "service": { + "slug": "additional-support", + "title": "Soporte adicional", + "icon": "verified2", + "icon_color": "#06AB52" + }, + "features": [ + { + "description": "Soporte adicional de idioma para tu CV y LinkedIn." + } + ] + } + ], + "service_items": { + "title_icon": "star", + "title_color": "#0084FF", + "title_size": "xl", + "title": "Perfecto para", + "items": [ + { + "label": "Personas en búsqueda de empleo que buscan soporte integral y coaching personalizado para asegurar su próximo puesto.", + "icon": null + } + ] + }, + "added_features": { + "items": [ + { + "label": "Cambio de idioma", + "price": "$49" + }, + { + "label": "Sesión adicional de mentoría", + "price": "$49" + }, + { + "label": "Idiomas adicionales", + "price": "$100" + } + ] + } + } + ] diff --git a/public/plans-info.json b/public/plans-info.json new file mode 100644 index 000000000..64641ef56 --- /dev/null +++ b/public/plans-info.json @@ -0,0 +1,319 @@ +[ + { + "planType": "custom", + "price": "Free", + "type": "Unlimited Experience", + "period_label": "", + "title": "Jumpstart Plan", + "description": "Jumpstart your career with our free JOBSTART package, featuring essential resources for your job search.", + "subtitle": "Bootcamp Program", + "sub-description": "Join a cohort in a live classroom environment and unlimited support until you find a job.", + "ask": "", + "button": { + "background": "#0084FF", + "title": "Get Plan" + }, + "button_link": "https://4geeks.com/checkout?plan=jump-start", + "featured_info": [ + { + "service": { + "slug": "ats-resume", + "title": "ATS Resume Template", + "icon": "verified2", + "icon_color": "#06AB52" + }, + "features": [ + { + "description": "A Free ATS Resume Template to ensure your resume gets noticed by employers." + } + ] + }, + { + "service": { + "slug": "job-hunting", + "title": "Job Hunting Tracker", + "icon": "verified2", + "icon_color": "#06AB52" + }, + "features": [ + { + "description": "A Job Hunting Tracker to keep you organized and on top of your applications." + } + ] + }, + { + "service": { + "slug": "salary-negotiation", + "title": "Salary Negotiation Guide", + "icon": "verified2", + "icon_color": "#06AB52" + }, + "features": [ + { + "description": "A Salary Negotiation Guide to help you secure the compensation you deserve." + } + ] + }, + { + "service": { + "slug": "elevator-pitch", + "title": "Elevator Pitch Tips", + "icon": "verified2", + "icon_color": "#06AB52" + }, + "features": [ + { + "description": "Tips on how to build an Elevator Pitch that makes a lasting impression." + } + ] + } + ], + "service_items": { + "title_icon": "star", + "title_color": "#0084FF", + "title_size": "xl", + "title": "Perfect for", + "items": [ + { + "label": "Job seekers seeking valuable free resources to enhance their job search and advance their career development.", + "icon": null + } + ] + } + }, + { + "planType": "custom", + "price": "$50", + "type": "Unlimited Experience", + "period_label": "", + "title": "Basic Plan", + "description": "Take control of your career materials with all the tools and resources you need to succeed.", + "subtitle": "Bootcamp Program", + "sub-description": "Join a cohort in a live classroom environment and unlimited support until you find a job.", + "ask": "", + "button": { + "background": "#0084FF", + "title": "Get Plan" + }, + "button_link": "https://4geeks.com/checkout?plan=basic-plan", + "featured_info": [ + { + "service": { + "slug": "career-tools", + "title": "Career Tools", + "icon": "verified2", + "icon_color": "#06AB52" + }, + "features": [ + { + "description": "Access to our complete set of tutorials and guides to create your CV, LinkedIn profile, and prepare for interviews." + } + ] + }, + { + "service": { + "slug": "video-tutorials", + "title": "Step-by-step Tutorials", + "icon": "verified2", + "icon_color": "#06AB52" + }, + "features": [ + { + "description": "Step-by-step video tutorials for creating a standout resume, optimizing your LinkedIn, and acing your interviews." + } + ] + }, + { + "service": { + "slug": "advisory-sessions", + "title": "Advisory Sessions", + "icon": "verified2", + "icon_color": "#06AB52" + }, + "features": [ + { + "description": "No advisory sessions are included, but you can always purchase additional consultation sessions if you need expert guidance." + } + ] + } + ], + "service_items": { + "title_icon": "star", + "title_color": "#0084FF", + "title_size": "xl", + "title": "Perfect for", + "items": [ + { + "label": "Self-starters who want to create their own materials with professional resources and videos.", + "icon": null + } + ] + }, + "added_features": { + "items": [ + { + "label": "Additional mentorship session", + "price": "$49" + } + ] + } + }, + { + "planType": "custom", + "price": "$150", + "type": "Unlimited Experience", + "period_label": "", + "title": "Standard Plan", + "description": "We create everything for you, no stress involved! Get your CV and LinkedIn ready for success.", + "subtitle": "Bootcamp Program", + "sub-description": "Join a cohort in a live classroom environment and unlimited support until you find a job.", + "ask": "", + "button": { + "variant": "deafult", + "color": "#0084FF", + "background": "white", + "title": "Get Plan" + }, + "button_link": "https://4geeks.com/checkout?plan=standard-plan", + "featured_card": { + "color": "#0084FF" + }, + "featured_info": [ + { + "service": { + "slug": "cv-and-linkedin", + "title": "CV and LinkedIn", + "icon": "verified2", + "icon_color": "#06AB52" + }, + "features": [ + { + "description": "We create your CV and LinkedIn profile for you based on your experience and career goals." + } + ] + }, + { + "service": { + "slug": "no-meetings-required", + "title": "No Meetings Required", + "icon": "verified2", + "icon_color": "#06AB52" + }, + "features": [ + { + "description": "No meetings required, but an optional session is available to clarify any doubts you may have." + } + ] + } + ], + "service_items": { + "title_icon": "star", + "title_color": "#0084FF", + "title_size": "xl", + "title": "Perfect for", + "items": [ + { + "label": "Individuals seeking a hands-off approach while still receiving professionally crafted documents that help them stand out.", + "icon": null + } + ] + }, + "added_features": { + "items": [ + { + "label": "Language shift ", + "price": "$49" + }, + { + "label": "Additional mentorship session", + "price": "$49" + } + ] + } + }, + { + "planType": "custom", + "price": "$250", + "type": "Unlimited Experience", + "period_label": "", + "title": "Premium Plan", + "description": "Everything you need to succeed, including interviews and personalized coaching!", + "subtitle": "Bootcamp Program", + "sub-description": "Join a cohort in a live classroom environment and unlimited support until you find a job.", + "ask": "", + "button": { + "background": "#0084FF", + "title": "Get Plan" + }, + "button_link": "https://4geeks.com/checkout?plan=premium-plan", + "featured_info": [ + { + "service": { + "slug": "interview-preparation", + "title": "Interview Preparation", + "icon": "verified2", + "icon_color": "#06AB52" + }, + "features": [ + { + "description": "We'll help you prepare for interviews with tailored questions and tips." + } + ] + }, + { + "service": { + "slug": "coaching-sessions", + "title": "Coaching Sessions", + "icon": "verified2", + "icon_color": "#06AB52" + }, + "features": [ + { + "description": "Two coaching sessions with an experienced advisor, who will work with you on interview techniques and career advice." + } + ] + }, + { + "service": { + "slug": "additional-support", + "title": "Additional Support", + "icon": "verified2", + "icon_color": "#06AB52" + }, + "features": [ + { + "description": "Additional language support for your resume and LinkedIn." + } + ] + } + ], + "service_items": { + "title_icon": "star", + "title_color": "#0084FF", + "title_size": "xl", + "title": "Perfect for", + "items": [ + { + "label": "Job seekers seeking comprehensive support and personalized coaching to secure their next role.", + "icon": null + } + ] + }, + "added_features": { + "items": [ + { + "label": "Language shift", + "price": "$49" + }, + { + "label": "Additional mentorship session", + "price": "$49" + }, + { + "label": "Additional languages", + "price": "$100" + } + ] + } + } +] diff --git a/slices/Faqs/index.js b/slices/Faqs/index.js new file mode 100644 index 000000000..30deda1b3 --- /dev/null +++ b/slices/Faqs/index.js @@ -0,0 +1,44 @@ +import PropTypes from 'prop-types'; +import React from 'react'; +import Faq from '../../src/common/components/Faq'; +/** + * @typedef {import("@prismicio/client").Content.FaqsSlice} FaqsSlice + * @typedef {import("@prismicio/react").SliceComponentProps} FaqsProps + * @param {FaqsProps} + */ +function Faqs({ slice }) { + return ( + + ); +} + +Faqs.propTypes = { + slice: PropTypes.objectOf(PropTypes.oneOfType([PropTypes.any])), +}; + +Faqs.defaultProps = { + slice: {}, +}; + +export default Faqs; diff --git a/slices/Faqs/mocks.json b/slices/Faqs/mocks.json new file mode 100644 index 000000000..d428c9535 --- /dev/null +++ b/slices/Faqs/mocks.json @@ -0,0 +1,116 @@ +[ + { + "__TYPE__": "SharedSliceContent", + "variation": "default", + "primary": { + "title": { + "__TYPE__": "FieldContent", + "value": "did", + "type": "Text" + }, + "id_key": { + "__TYPE__": "FieldContent", + "value": "mostly", + "type": "Text" + }, + "title_font_size": { + "__TYPE__": "FieldContent", + "value": "white", + "type": "Text" + }, + "title_line_height": { + "__TYPE__": "FieldContent", + "value": "decide", + "type": "Text" + }, + "title_font_weight": { + "__TYPE__": "FieldContent", + "value": "aside", + "type": "Text" + }, + "title_color": { + "__TYPE__": "FieldContent", + "value": "foot", + "type": "Text" + }, + "background_color": { + "__TYPE__": "FieldContent", + "value": "whatever", + "type": "Text" + }, + "margin_bottom": { + "__TYPE__": "FieldContent", + "value": "tune", + "type": "Text" + }, + "margin_top": { + "__TYPE__": "FieldContent", + "value": "universe", + "type": "Text" + }, + "max_width": { + "__TYPE__": "FieldContent", + "value": "some", + "type": "Text" + }, + "as_element": { + "__TYPE__": "FieldContent", + "value": "city", + "type": "Text" + }, + "label_weight": { + "__TYPE__": "FieldContent", + "value": "remove", + "type": "Text" + }, + "label_font_size": { + "__TYPE__": "FieldContent", + "value": "allow", + "type": "Text" + }, + "label_line_height": { + "__TYPE__": "FieldContent", + "value": "mother", + "type": "Text" + }, + "answer_weight": { + "__TYPE__": "FieldContent", + "value": "engine", + "type": "Text" + }, + "answer_font_size": { + "__TYPE__": "FieldContent", + "value": "rather", + "type": "Text" + }, + "answer_line_height": { + "__TYPE__": "FieldContent", + "value": "order", + "type": "Text" + } + }, + "items": [ + { + "__TYPE__": "GroupItemContent", + "value": [ + [ + "label", + { + "__TYPE__": "FieldContent", + "value": "push", + "type": "Text" + } + ], + [ + "answer", + { + "__TYPE__": "FieldContent", + "value": "discovery", + "type": "Text" + } + ] + ] + } + ] + } +] \ No newline at end of file diff --git a/slices/Faqs/model.json b/slices/Faqs/model.json new file mode 100644 index 000000000..ad99d8b87 --- /dev/null +++ b/slices/Faqs/model.json @@ -0,0 +1,96 @@ +{ + "id": "faqs", + "type": "SharedSlice", + "name": "Faqs", + "description": "Faqs", + "variations": [ + { + "id": "default", + "name": "Default", + "docURL": "...", + "version": "initial", + "description": "Default", + "imageUrl": "", + "primary": { + "title": { + "type": "Text", + "config": { "label": "Title", "placeholder": "" } + }, + "background_color": { + "type": "Text", + "config": { "label": "Background Color", "placeholder": "" } + }, + "margin_bottom": { + "type": "Text", + "config": { "label": "Margin Bottom", "placeholder": "" } + }, + "id_key": { + "type": "Text", + "config": { "label": "Id key", "placeholder": "" } + }, + "title_font_size": { + "type": "Text", + "config": { "label": "Title Font Size", "placeholder": "" } + }, + "title_line_height": { + "type": "Text", + "config": { "label": "Title Line Height", "placeholder": "" } + }, + "title_font_weight": { + "type": "Text", + "config": { "label": "Title Font Weight", "placeholder": "" } + }, + "title_color": { + "type": "Text", + "config": { "label": "Title Color", "placeholder": "" } + }, + "margin_top": { + "type": "Text", + "config": { "label": "Margin Top", "placeholder": "" } + }, + "max_width": { + "type": "Text", + "config": { "label": "Max Width", "placeholder": "" } + }, + "as_element": { + "type": "Text", + "config": { "label": "As element", "placeholder": "" } + }, + "label_weight": { + "type": "Text", + "config": { "label": "Label Weight", "placeholder": "" } + }, + "label_font_size": { + "type": "Text", + "config": { "label": "Label Font Size", "placeholder": "" } + }, + "label_line_height": { + "type": "Text", + "config": { "label": "Label Line Height", "placeholder": "" } + }, + "answer_weight": { + "type": "Text", + "config": { "label": "Answer Weight", "placeholder": "" } + }, + "answer_font_size": { + "type": "Text", + "config": { "label": "Answer Font Size", "placeholder": "" } + }, + "answer_line_height": { + "type": "Text", + "config": { "label": "Answer Line Height", "placeholder": "" } + } + }, + "items": { + "label": { + "type": "Text", + "config": { "label": "Label", "placeholder": "" } + }, + "answer": { + "type": "Text", + "config": { "label": "Answer", "placeholder": "" } + } + } + } + ] +} diff --git a/slices/Faqs/screenshot-default.png b/slices/Faqs/screenshot-default.png new file mode 100644 index 000000000..d95eb6bd4 Binary files /dev/null and b/slices/Faqs/screenshot-default.png differ diff --git a/slices/MultipleColumnCard/index.js b/slices/MultipleColumnCard/index.js new file mode 100644 index 000000000..e41d4b86b --- /dev/null +++ b/slices/MultipleColumnCard/index.js @@ -0,0 +1,30 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import MktMultipleColumnCard from '../../src/common/components/MktMultipleColumnCard'; +/** + * @typedef {import("@prismicio/client").Content.MultipleColumnCardSlice} MultipleColumnCardSlice + * @typedef {import("@prismicio/react").SliceComponentProps} MultipleColumnCardProps + * @param {MultipleColumnCardProps} + */ +function MultipleColumnCard({ slice }) { + return ( + + ); +} + +MultipleColumnCard.propTypes = { + slice: PropTypes.objectOf(PropTypes.oneOfType([PropTypes.any])), +}; + +MultipleColumnCard.defaultProps = { + slice: {}, +}; + +export default MultipleColumnCard; diff --git a/slices/MultipleColumnCard/mocks.json b/slices/MultipleColumnCard/mocks.json new file mode 100644 index 000000000..154ea3e91 --- /dev/null +++ b/slices/MultipleColumnCard/mocks.json @@ -0,0 +1,69 @@ +[ + { + "__TYPE__": "SharedSliceContent", + "variation": "default", + "primary": { + "title": { + "__TYPE__": "FieldContent", + "value": "appropriate", + "type": "Text" + }, + "id_key": { + "__TYPE__": "FieldContent", + "value": "familiar", + "type": "Text" + }, + "font_family_title": { + "__TYPE__": "FieldContent", + "value": "Space Grotesk Variable", + "type": "Select" + }, + "margin_bottom": { + "__TYPE__": "FieldContent", + "value": "palace", + "type": "Text" + }, + "margin_top": { + "__TYPE__": "FieldContent", + "value": "becoming", + "type": "Text" + }, + "max_width": { + "__TYPE__": "FieldContent", + "value": "leaving", + "type": "Text" + } + }, + "items": [ + { + "__TYPE__": "GroupItemContent", + "value": [ + [ + "column_title", + { + "__TYPE__": "FieldContent", + "value": "wish", + "type": "Text" + } + ], + [ + "column_description", + { + "__TYPE__": "FieldContent", + "value": "class", + "type": "Text" + } + ], + [ + "font_family_column", + { + "__TYPE__": "FieldContent", + "value": "Lato", + "type": "Select" + } + ] + ] + } + ] + } +] \ No newline at end of file diff --git a/slices/MultipleColumnCard/model.json b/slices/MultipleColumnCard/model.json new file mode 100644 index 000000000..fd63b5355 --- /dev/null +++ b/slices/MultipleColumnCard/model.json @@ -0,0 +1,64 @@ +{ + "id": "multiple_column_card", + "type": "SharedSlice", + "name": "MultipleColumnCard", + "description": "MultipleColumnCard", + "variations": [ + { + "id": "default", + "name": "Default", + "docURL": "...", + "version": "initial", + "description": "Default", + "imageUrl": "", + "primary": { + "title": { + "type": "Text", + "config": { "label": "Title", "placeholder": "" } + }, + "id_key": { + "type": "Text", + "config": { "label": "Id key", "placeholder": "" } + }, + "font_family_title": { + "type": "Select", + "config": { + "label": "Font Family Title", + "placeholder": "", + "options": ["Lato", "Space Grotesk Variable"] + } + }, + "margin_bottom": { + "type": "Text", + "config": { "label": "Margin Bottom", "placeholder": "" } + }, + "margin_top": { + "type": "Text", + "config": { "label": "Margin Top", "placeholder": "" } + }, + "max_width": { + "type": "Text", + "config": { "label": "Max Width", "placeholder": "" } + } + }, + "items": { + "column_title": { + "type": "Text", + "config": { "label": "Column Title", "placeholder": "" } + }, + "column_description": { + "type": "Text", + "config": { "label": "Column Description", "placeholder": "" } + }, + "font_family_column": { + "type": "Select", + "config": { + "label": "Font Family Column", + "placeholder": "", + "options": ["Lato", "Space Grotesk Variable"] + } + } + } + } + ] +} diff --git a/slices/MultipleColumnCard/screenshot-default.png b/slices/MultipleColumnCard/screenshot-default.png new file mode 100644 index 000000000..0208c7ccf Binary files /dev/null and b/slices/MultipleColumnCard/screenshot-default.png differ diff --git a/slices/OneColumn/index.jsx b/slices/OneColumn/index.jsx index 2d375862f..584a8819d 100644 --- a/slices/OneColumn/index.jsx +++ b/slices/OneColumn/index.jsx @@ -1,5 +1,6 @@ /* eslint-disable react/prop-types */ import React from 'react'; +// import { SliderFilledTrack } from '@chakra-ui/react'; import MktOneColumnKPI from '../../src/common/components/MktOneColumnKPI'; /** @@ -30,14 +31,31 @@ function OneColumn({ slice }) { ); } diff --git a/slices/OneColumn/mocks.json b/slices/OneColumn/mocks.json index 1066e0f2c..36fda1bc0 100644 --- a/slices/OneColumn/mocks.json +++ b/slices/OneColumn/mocks.json @@ -104,6 +104,91 @@ "__TYPE__": "FieldContent", "value": "#000000", "type": "Color" + }, + "title_font_size": { + "__TYPE__": "FieldContent", + "value": "jar", + "type": "Text" + }, + "description_font_size": { + "__TYPE__": "FieldContent", + "value": "ice", + "type": "Text" + }, + "description_text_align": { + "__TYPE__": "FieldContent", + "value": "sheep", + "type": "Text" + }, + "description_justify_items": { + "__TYPE__": "FieldContent", + "value": "hot", + "type": "Text" + }, + "button_background_color": { + "__TYPE__": "FieldContent", + "value": "#87d790", + "type": "Color" + }, + "button_font_color": { + "__TYPE__": "FieldContent", + "value": "#eb30de", + "type": "Color" + }, + "button_font_size": { + "__TYPE__": "FieldContent", + "value": "whose", + "type": "Text" + }, + "justify_items": { + "__TYPE__": "FieldContent", + "value": "begun", + "type": "Text" + }, + "font_family": { + "__TYPE__": "FieldContent", + "value": "Lato", + "type": "Select" + }, + "description_line_height": { + "__TYPE__": "FieldContent", + "value": "field", + "type": "Text" + }, + "border_radius": { + "__TYPE__": "FieldContent", + "value": "tales", + "type": "Text" + }, + "margin_top": { + "__TYPE__": "FieldContent", + "value": "safe", + "type": "Text" + }, + "margin_bottom": { + "__TYPE__": "FieldContent", + "value": "word", + "type": "Text" + }, + "max_width": { + "__TYPE__": "FieldContent", + "value": "kill", + "type": "Text" + }, + "width": { + "__TYPE__": "FieldContent", + "value": "rear", + "type": "Text" + }, + "padding": { + "__TYPE__": "FieldContent", + "value": "half", + "type": "Text" + }, + "grid_column": { + "__TYPE__": "FieldContent", + "value": "reason", + "type": "Text" } }, "items": [ diff --git a/slices/OneColumn/model.json b/slices/OneColumn/model.json index 2fdf33440..6d7180d68 100644 --- a/slices/OneColumn/model.json +++ b/slices/OneColumn/model.json @@ -15,10 +15,51 @@ "type": "Text", "config": { "label": "ID Key", "placeholder": "" } }, + "padding": { + "type": "Text", + "config": { "label": "padding", "placeholder": "" } + }, + "grid_column": { + "type": "Text", + "config": { "label": "Grid Column", "placeholder": "" } + }, + "width": { + "type": "Text", + "config": { "label": "Width", "placeholder": "" } + }, + "margin_top": { + "type": "Text", + "config": { "label": "Margin Top", "placeholder": "" } + }, + "margin_bottom": { + "type": "Text", + "config": { "label": "Margin Bottom", "placeholder": "" } + }, + "max_width": { + "type": "Text", + "config": { "label": "Max Width", "placeholder": "" } + }, + "border_radius": { + "type": "Text", + "config": { "label": "Border Radius", "placeholder": "" } + }, + "font_family": { + "type": "Select", + "config": { + "label": "Font Family", + "placeholder": "", + "options": ["Lato", "Space Grotesk Variable"], + "default_value": "Lato" + } + }, "title": { "type": "Text", "config": { "label": "Title", "placeholder": "" } }, + "title_font_size": { + "type": "Text", + "config": { "label": "Title Font Size", "placeholder": "" } + }, "subtitle": { "type": "Text", "config": { "label": "SubTitle", "placeholder": "" } @@ -32,10 +73,38 @@ "single": "paragraph,preformatted,heading1,heading2,heading3,heading4,heading5,heading6,strong,em,hyperlink,image,embed,list-item,o-list-item,rtl" } }, + "description_font_size": { + "type": "Text", + "config": { "label": "Description Font Size", "placeholder": "" } + }, + "description_text_align": { + "type": "Text", + "config": { "label": "Description Text Align", "placeholder": "" } + }, + "description_justify_items": { + "type": "Text", + "config": { "label": "Description Justify Items", "placeholder": "" } + }, + "description_line_height": { + "type": "Text", + "config": { "label": "Description Line Height", "placeholder": "" } + }, "button_label": { "type": "Text", "config": { "label": "Button label", "placeholder": "" } }, + "button_background_color": { + "type": "Color", + "config": { "label": "Button Background Color", "placeholder": "" } + }, + "button_font_color": { + "type": "Color", + "config": { "label": "Button Font Color", "placeholder": "" } + }, + "button_font_size": { + "type": "Text", + "config": { "label": "Button Font Size", "placeholder": "" } + }, "button_url": { "type": "Text", "config": { "label": "Button url", "placeholder": "" } @@ -49,6 +118,10 @@ "default_value": false } }, + "justify_items": { + "type": "Text", + "config": { "label": "Justify Items", "placeholder": "" } + }, "font_color": { "type": "Color", "config": { diff --git a/slices/Partners/index.js b/slices/Partners/index.js index 3893b29f2..2217d7eb6 100644 --- a/slices/Partners/index.js +++ b/slices/Partners/index.js @@ -10,7 +10,13 @@ import MktPartners from '../../src/common/components/MktPartners'; * @param { PartnersProps } */ const Partners = ({ slice }) => ( - + ); export default Partners; diff --git a/slices/Partners/mocks.json b/slices/Partners/mocks.json index 6bb5b8245..a8f9ff00c 100644 --- a/slices/Partners/mocks.json +++ b/slices/Partners/mocks.json @@ -1,40 +1,55 @@ [ - { - "__TYPE__": "SharedSliceContent", - "variation": "default", - "primary": { - "id_key": { - "__TYPE__": "FieldContent", - "value": "diameter", - "type": "Text" - }, - "title": { - "__TYPE__": "FieldContent", - "value": "balloon", - "type": "Text" - }, - "images": { - "__TYPE__": "StructuredTextContent", - "value": [ - { - "type": "paragraph", - "content": { - "text": "Aliquip eu eu cupidatat id. Irure sit nisi ipsum magna proident sint ipsum." - } - } - ] - }, - "margin": { - "__TYPE__": "FieldContent", - "value": "solve", - "type": "Text" - } - }, - "items": [ - { - "__TYPE__": "GroupItemContent", - "value": [] - } - ] - } + { + "__TYPE__": "SharedSliceContent", + "variation": "default", + "primary": { + "id_key": { + "__TYPE__": "FieldContent", + "value": "diameter", + "type": "Text" + }, + "title": { + "__TYPE__": "FieldContent", + "value": "balloon", + "type": "Text" + }, + "images": { + "__TYPE__": "StructuredTextContent", + "value": [ + { + "type": "paragraph", + "content": { + "text": "Aliquip eu eu cupidatat id. Irure sit nisi ipsum magna proident sint ipsum." + } + } + ] + }, + "margin": { + "__TYPE__": "FieldContent", + "value": "solve", + "type": "Text" + }, + "description": { + "__TYPE__": "FieldContent", + "value": "throw", + "type": "Text" + }, + "images_content": { + "__TYPE__": "FieldContent", + "value": "some", + "type": "Text" + }, + "title_size": { + "__TYPE__": "FieldContent", + "value": "strip", + "type": "Text" + } + }, + "items": [ + { + "__TYPE__": "GroupItemContent", + "value": [] + } + ] + } ] \ No newline at end of file diff --git a/slices/Partners/model.json b/slices/Partners/model.json index 2859b669b..85ffdd212 100644 --- a/slices/Partners/model.json +++ b/slices/Partners/model.json @@ -13,17 +13,15 @@ "primary": { "id_key": { "type": "Text", - "config": { - "label": "ID Key", - "placeholder": "" - } + "config": { "label": "ID Key", "placeholder": "" } }, "title": { "type": "Text", - "config": { - "label": "title", - "placeholder": "" - } + "config": { "label": "title", "placeholder": "" } + }, + "description": { + "type": "Text", + "config": { "label": "Description", "placeholder": "" } }, "images": { "type": "StructuredText", @@ -40,10 +38,18 @@ "label": "Margin", "placeholder": "top, right, bottom, left" } + }, + "images_content": { + "type": "Text", + "config": { "label": "Images Content", "placeholder": "" } + }, + "title_size": { + "type": "Text", + "config": { "label": "Title Size", "placeholder": "" } } }, "items": {}, "imageUrl": "https://images.prismic.io/slice-machine/621a5ec4-0387-4bc5-9860-2dd46cbc07cd_default_ss.png?auto=compress,format" } ] -} \ No newline at end of file +} diff --git a/slices/PricingCards/index.js b/slices/PricingCards/index.js new file mode 100644 index 000000000..e74671c7d --- /dev/null +++ b/slices/PricingCards/index.js @@ -0,0 +1,30 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import MktPricingCards from '../../src/common/components/MktPricingCards'; + +/** + * @typedef {import("@prismicio/client").Content.PricingCardsSlice} PricingCardsSlice + * @typedef {import("@prismicio/react").SliceComponentProps} PricingCardsProps + * @param {PricingCardsProps} + */ +function PricingCards({ slice }) { + return ( + + ); +} + +PricingCards.propTypes = { + slice: PropTypes.objectOf(PropTypes.oneOfType([PropTypes.any])), +}; + +PricingCards.defaultProps = { + slice: {}, +}; + +export default PricingCards; diff --git a/slices/PricingCards/mocks.json b/slices/PricingCards/mocks.json new file mode 100644 index 000000000..32a7ba68b --- /dev/null +++ b/slices/PricingCards/mocks.json @@ -0,0 +1,34 @@ +[ + { + "__TYPE__": "SharedSliceContent", + "variation": "default", + "primary": { + "id_key": { + "__TYPE__": "FieldContent", + "value": "expect", + "type": "Text" + }, + "title": { + "__TYPE__": "FieldContent", + "value": "even", + "type": "Text" + }, + "url": { + "__TYPE__": "FieldContent", + "value": "composition", + "type": "Text" + }, + "max_width": { + "__TYPE__": "FieldContent", + "value": "nice", + "type": "Text" + }, + "margin": { + "__TYPE__": "FieldContent", + "value": "each", + "type": "Text" + } + }, + "items": [] + } +] \ No newline at end of file diff --git a/slices/PricingCards/model.json b/slices/PricingCards/model.json new file mode 100644 index 000000000..bc8a44713 --- /dev/null +++ b/slices/PricingCards/model.json @@ -0,0 +1,39 @@ +{ + "id": "pricing_cards", + "type": "SharedSlice", + "name": "PricingCards", + "description": "PricingCards", + "variations": [ + { + "id": "default", + "name": "Default", + "docURL": "...", + "version": "initial", + "description": "Default", + "imageUrl": "", + "primary": { + "id_key": { + "type": "Text", + "config": { "label": "Id key", "placeholder": "" } + }, + "title": { + "type": "Text", + "config": { "label": "Title", "placeholder": "" } + }, + "url": { + "type": "Text", + "config": { "label": "Url", "placeholder": "" } + }, + "max_width": { + "type": "Text", + "config": { "label": "Max Width", "placeholder": "" } + }, + "margin": { + "type": "Text", + "config": { "label": "Margin", "placeholder": "" } + } + }, + "items": {} + } + ] +} diff --git a/slices/PricingCards/screenshot-default.png b/slices/PricingCards/screenshot-default.png new file mode 100644 index 000000000..fd4fe19c6 Binary files /dev/null and b/slices/PricingCards/screenshot-default.png differ diff --git a/slices/Testimonials/index.jsx b/slices/Testimonials/index.jsx index a45417529..dad0e53cc 100644 --- a/slices/Testimonials/index.jsx +++ b/slices/Testimonials/index.jsx @@ -14,6 +14,7 @@ const Testimonials = ({ slice }) => ( endpoint={slice?.primary?.endpoint} margin={slice?.primary?.margin || '0 auto 20px auto'} px={{ base: '20px', md: '0px' }} + version={slice?.primary?.version || 'v1'} /> ); Testimonials.propTypes = { diff --git a/slices/Testimonials/mocks.json b/slices/Testimonials/mocks.json index 1459725de..4e20ec5ae 100644 --- a/slices/Testimonials/mocks.json +++ b/slices/Testimonials/mocks.json @@ -1,34 +1,44 @@ [ - { - "__TYPE__": "SharedSliceContent", - "variation": "default", - "primary": { - "id_key": { - "__TYPE__": "FieldContent", - "value": "dead", - "type": "Text" - }, - "title": { - "__TYPE__": "FieldContent", - "value": "cow", - "type": "Text" - }, - "endpoint": { - "__TYPE__": "FieldContent", - "value": "girl", - "type": "Text" - }, - "margin": { - "__TYPE__": "FieldContent", - "value": "missing", - "type": "Text" - } - }, - "items": [ - { - "__TYPE__": "GroupItemContent", - "value": [] - } - ] - } + { + "__TYPE__": "SharedSliceContent", + "variation": "default", + "primary": { + "id_key": { + "__TYPE__": "FieldContent", + "value": "dead", + "type": "Text" + }, + "title": { + "__TYPE__": "FieldContent", + "value": "cow", + "type": "Text" + }, + "endpoint": { + "__TYPE__": "FieldContent", + "value": "girl", + "type": "Text" + }, + "margin": { + "__TYPE__": "FieldContent", + "value": "missing", + "type": "Text" + }, + "version": { + "__TYPE__": "FieldContent", + "value": "v2", + "type": "Select" + }, + "background_color": { + "__TYPE__": "FieldContent", + "value": "southern", + "type": "Text" + } + }, + "items": [ + { + "__TYPE__": "GroupItemContent", + "value": [] + } + ] + } ] \ No newline at end of file diff --git a/slices/Testimonials/model.json b/slices/Testimonials/model.json index 737e6ff90..7a3045478 100644 --- a/slices/Testimonials/model.json +++ b/slices/Testimonials/model.json @@ -13,24 +13,15 @@ "primary": { "id_key": { "type": "Text", - "config": { - "label": "ID Key", - "placeholder": "" - } + "config": { "label": "ID Key", "placeholder": "" } }, "title": { "type": "Text", - "config": { - "label": "Title", - "placeholder": "" - } + "config": { "label": "Title", "placeholder": "" } }, "endpoint": { "type": "Text", - "config": { - "label": "Endpoint", - "placeholder": "" - } + "config": { "label": "Endpoint", "placeholder": "" } }, "margin": { "type": "Text", @@ -38,10 +29,23 @@ "label": "Margin", "placeholder": "top, right, bottom, left" } + }, + "background_color": { + "type": "Text", + "config": { "label": "Background Color", "placeholder": "" } + }, + "version": { + "type": "Select", + "config": { + "label": "Version", + "placeholder": "", + "options": ["v1", "v2"], + "default_value": "v1" + } } }, "items": {}, "imageUrl": "https://images.prismic.io/slice-machine/621a5ec4-0387-4bc5-9860-2dd46cbc07cd_default_ss.png?auto=compress,format" } ] -} \ No newline at end of file +} diff --git a/slices/TwoColumn/index.jsx b/slices/TwoColumn/index.jsx index 1b20026ad..185b78cb1 100644 --- a/slices/TwoColumn/index.jsx +++ b/slices/TwoColumn/index.jsx @@ -14,14 +14,18 @@ function TwoColumn({ slice }) { title={slice?.primary?.title} subTitle={slice?.primary?.subtitle} slice={slice} + descriptionTitle={slice?.primary?.description_title} + descriptionFontSize={slice?.primary?.description_font_size} background={slice?.primary?.background_color} linkButton={slice?.primary?.link_button} buttonUrl={slice?.primary?.button_url?.url || slice.primary.button_url} buttonLabel={slice?.primary?.button_label} + buttonLabelSize={slice?.primary?.button_label_size} imageUrl={slice?.primary?.image?.url} imageAlt={slice?.primary?.image?.alt} imagePosition={slice?.primary?.image_position} margin={slice?.primary?.margin || ''} + maxwidth={slice?.primary?.max_width} gridGap={slice?.primary?.grid_gap || '24px'} informationSize={slice?.primary?.information_size} titleColor={slice.primary?.title_color} @@ -29,6 +33,17 @@ function TwoColumn({ slice }) { textBackgroundColor={slice?.primary?.text_background_color} buttonColor={slice?.primary?.button_color} fontFamily={slice?.primary?.fontFamily} + fontFamilySubtitle={slice?.primary?.font_family_subtitle} + customTitleSize={slice?.primary?.custom_title_size} + customSubTitleSize={slice?.primary?.custom_subtitle_size} + studentsAvatars={slice?.primary?.students_avatars} + studentsAvatarsDescriptions={slice?.primary?.student_avatar_description} + multiDescription={slice?.items} + transparent={slice?.primary?.transparent} + marginTop={slice?.primary?.margin_top} + marginBottom={slice?.primary?.margin_bottom} + borderRadius={slice?.primary?.border_radius} + padding={slice?.primary?.padding} /> ); } diff --git a/slices/TwoColumn/mocks.json b/slices/TwoColumn/mocks.json index 1dd64e7c0..a87eb4312 100644 --- a/slices/TwoColumn/mocks.json +++ b/slices/TwoColumn/mocks.json @@ -30,7 +30,7 @@ }, "button_color": { "__TYPE__": "FieldContent", - "value": "Blue", + "value": "White", "type": "Select" }, "title": { @@ -133,14 +133,106 @@ }, "fontFamily": { "__TYPE__": "FieldContent", - "value": "Lato", + "value": "Space Grotesk Variable", "type": "Select" + }, + "custom_title_size": { + "__TYPE__": "FieldContent", + "value": "gave", + "type": "Text" + }, + "custom_subtitle_size": { + "__TYPE__": "FieldContent", + "value": "steady", + "type": "Text" + }, + "font_family_subtitle": { + "__TYPE__": "FieldContent", + "value": "Space Grotesk Variable", + "type": "Select" + }, + "students_avatars": { + "__TYPE__": "StructuredTextContent", + "value": [ + { + "type": "paragraph", + "content": { + "text": "Consequat enim consequat quis consequat fugiat cupidatat veniam dolor irure ea ad." + } + } + ] + }, + "student_avatar_description": { + "__TYPE__": "FieldContent", + "value": "rising", + "type": "Text" + }, + "description_title": { + "__TYPE__": "FieldContent", + "value": "children", + "type": "Text" + }, + "transparent": { + "__TYPE__": "BooleanContent", + "value": true + }, + "button_label_size": { + "__TYPE__": "FieldContent", + "value": "actual", + "type": "Text" + }, + "description_font_size": { + "__TYPE__": "FieldContent", + "value": "success", + "type": "Text" + }, + "margin_top": { + "__TYPE__": "FieldContent", + "value": "pie", + "type": "Text" + }, + "margin_bottom": { + "__TYPE__": "FieldContent", + "value": "here", + "type": "Text" + }, + "max_width": { + "__TYPE__": "FieldContent", + "value": "we", + "type": "Text" + }, + "border_radius": { + "__TYPE__": "FieldContent", + "value": "onto", + "type": "Text" + }, + "padding": { + "__TYPE__": "FieldContent", + "value": "sets", + "type": "Text" } }, "items": [ { "__TYPE__": "GroupItemContent", - "value": [] + "value": [ + [ + "multi_description_title", + { + "__TYPE__": "FieldContent", + "value": "afternoon", + "type": "Text" + } + ], + [ + "multi_description_content", + { + "__TYPE__": "FieldContent", + "value": "snow", + "type": "Text" + } + ] + ] } ] } diff --git a/slices/TwoColumn/model.json b/slices/TwoColumn/model.json index 8d4d7aba3..c52c8f665 100644 --- a/slices/TwoColumn/model.json +++ b/slices/TwoColumn/model.json @@ -15,6 +15,10 @@ "type": "Text", "config": { "label": "ID Key", "placeholder": "" } }, + "padding": { + "type": "Text", + "config": { "label": "Padding", "placeholder": "" } + }, "information_size": { "type": "Select", "config": { @@ -23,6 +27,29 @@ "options": ["Small", "Medium", "Large"] } }, + "border_radius": { + "type": "Text", + "config": { "label": "Border Radius", "placeholder": "" } + }, + "max_width": { + "type": "Text", + "config": { "label": "Max Width", "placeholder": "" } + }, + "margin": { + "type": "Text", + "config": { + "label": "Margin", + "placeholder": "top, right, bottom, left" + } + }, + "margin_top": { + "type": "Text", + "config": { "label": "Margin Top", "placeholder": "" } + }, + "margin_bottom": { + "type": "Text", + "config": { "label": "Margin Bottom", "placeholder": "" } + }, "text_background_color": { "type": "Color", "config": { "label": "Text Background Color", "placeholder": "" } @@ -31,6 +58,19 @@ "type": "Text", "config": { "label": "Title", "placeholder": "" } }, + "custom_title_size": { + "type": "Text", + "config": { "label": "Custom Title Size", "placeholder": "" } + }, + "fontFamily": { + "type": "Select", + "config": { + "label": "Font Family Title", + "placeholder": "", + "options": ["Lato", "Space Grotesk Variable"], + "default_value": "Lato" + } + }, "title_color": { "type": "Color", "config": { "label": "Title Color", "placeholder": "" } @@ -39,10 +79,26 @@ "type": "Text", "config": { "label": "Subtitle", "placeholder": "" } }, + "custom_subtitle_size": { + "type": "Text", + "config": { "label": "Custom Subtitle Size", "placeholder": "" } + }, + "font_family_subtitle": { + "type": "Select", + "config": { + "label": "Font Family Subtitle", + "placeholder": "", + "options": ["Lato", "Space Grotesk Variable"] + } + }, "subtitle_color": { "type": "Color", "config": { "label": "Subtitle Color", "placeholder": "" } }, + "description_title": { + "type": "Text", + "config": { "label": "Description Title", "placeholder": "" } + }, "description": { "type": "StructuredText", "config": { @@ -56,14 +112,38 @@ "type": "Color", "config": { "label": "Description Color", "placeholder": "" } }, + "description_font_size": { + "type": "Text", + "config": { "label": "Description Font Size", "placeholder": "" } + }, "image": { "type": "Image", "config": { "label": "image", "constraint": {}, "thumbnails": [] } }, + "students_avatars": { + "type": "StructuredText", + "config": { + "label": "Students Avatars", + "placeholder": "", + "allowTargetBlank": true, + "single": "paragraph,preformatted,heading1,heading2,heading3,heading4,heading5,heading6,strong,em,hyperlink,image,embed,list-item,o-list-item,rtl" + } + }, + "student_avatar_description": { + "type": "Text", + "config": { + "label": "Students Avatars Descriptions", + "placeholder": "" + } + }, "button_label": { "type": "Text", "config": { "label": "Button label", "placeholder": "" } }, + "button_label_size": { + "type": "Text", + "config": { "label": "Button Label Size", "placeholder": "" } + }, "button_url": { "type": "Text", "config": { "label": "Button url", "placeholder": "" } @@ -90,7 +170,7 @@ "config": { "label": "Button Color", "placeholder": "", - "options": ["Blue", "White"] + "options": ["Blue", "White", "Dark Blue"] } }, "background_color": { @@ -112,28 +192,30 @@ "options": ["left", "right"] } }, - "margin": { - "type": "Text", - "config": { - "label": "Margin", - "placeholder": "top, right, bottom, left" - } - }, "grid_gap": { "type": "Text", "config": { "label": "Grid gap", "placeholder": "" } }, - "fontFamily": { - "type": "Select", + "transparent": { + "type": "Boolean", "config": { - "label": "Font Family", - "placeholder": "", - "options": ["Lato", "Space Grotesk Variable"], - "default_value": "Lato" + "label": "Transparent", + "default_value": false, + "placeholder_true": "true", + "placeholder_false": "false" } } }, - "items": {}, + "items": { + "multi_description_title": { + "type": "Text", + "config": { "label": "Multi Description Title", "placeholder": "" } + }, + "multi_description_content": { + "type": "Text", + "config": { "label": "Multi Description Content", "placeholder": "" } + } + }, "imageUrl": "https://images.prismic.io/slice-machine/621a5ec4-0387-4bc5-9860-2dd46cbc07cd_default_ss.png?auto=compress,format" } ] diff --git a/slices/index.js b/slices/index.js index 5e212ca4a..8ef49e2b6 100644 --- a/slices/index.js +++ b/slices/index.js @@ -4,10 +4,13 @@ import dynamic from "next/dynamic"; export const components = { event_cards: dynamic(() => import("./EventCards")), + faqs: dynamic(() => import("./Faqs")), info_cards: dynamic(() => import("./InfoCards")), markdown: dynamic(() => import("./Markdown")), + multiple_column_card: dynamic(() => import("./MultipleColumnCard")), one_column: dynamic(() => import("./OneColumn")), partners: dynamic(() => import("./Partners")), + pricing_cards: dynamic(() => import("./PricingCards")), recommended_courses: dynamic(() => import("./RecommendedCourses")), road_map: dynamic(() => import("./RoadMap")), show_prices: dynamic(() => import("./ShowPrices")), diff --git a/src/common/components/Faq.jsx b/src/common/components/Faq.jsx index e1d5db75d..11ad69e7b 100644 --- a/src/common/components/Faq.jsx +++ b/src/common/components/Faq.jsx @@ -12,26 +12,53 @@ import Heading from './Heading'; import Text from './Text'; import useStyle from '../hooks/useStyle'; -function Faq({ items, hideLastBorder, headingStyle, highlightColor, acordionContainerStyle, ...rest }) { +function Faq({ id, + title, + items, + hideLastBorder, + headingStyle, + highlightColor, + acordionContainerStyle, + titleFontSize, + titleLineHeight, + titleFontWeight, + titleColor, + faqBackgroundColor, + faqMarginBottom, + maxWidth, + marginTop, + labelWeight, + labelFontSize, + labelLineHeight, + answerWeight, + answerFontSize, + answerlineHeight, + asElement, + ...rest }) { const { hexColor } = useStyle(); - + const allHeadingStyle = { + ...headingStyle, + lineHeight: titleLineHeight, + fontWeight: titleFontWeight, + as: asElement, + }; return ( - - - FAQ + + + {title || 'FAQ'} - {items.map((item, i) => ( + {items?.map((item, i) => ( i) ? '1px solid #DADADA' : '0px'}> - + {item.label} - + ))} @@ -45,12 +72,46 @@ Faq.propTypes = { headingStyle: PropTypes.objectOf(PropTypes.oneOfType([PropTypes.string, PropTypes.any])), hideLastBorder: PropTypes.bool, highlightColor: PropTypes.string, + title: PropTypes.string, + id: PropTypes.string, + titleFontSize: PropTypes.string, + titleFontWeight: PropTypes.string, + titleLineHeight: PropTypes.string, + titleColor: PropTypes.string, + faqBackgroundColor: PropTypes.string, + faqMarginBottom: PropTypes.string, + maxWidth: PropTypes.string, + marginTop: PropTypes.string, + labelWeight: PropTypes.string, + labelFontSize: PropTypes.string, + labelLineHeight: PropTypes.string, + asElement: PropTypes.string, + answerWeight: PropTypes.string, + answerFontSize: PropTypes.string, + answerlineHeight: PropTypes.string, }; Faq.defaultProps = { acordionContainerStyle: {}, headingStyle: {}, hideLastBorder: false, highlightColor: '', + title: '', + id: '', + titleFontSize: '', + titleFontWeight: '', + titleLineHeight: '', + titleColor: '', + faqBackgroundColor: '', + faqMarginBottom: '', + maxWidth: '', + marginTop: '', + labelWeight: '', + labelFontSize: '', + labelLineHeight: '', + asElement: '', + answerWeight: '', + answerFontSize: '', + answerlineHeight: '', }; export default Faq; diff --git a/src/common/components/GridContainer.jsx b/src/common/components/GridContainer.jsx index e11f5b520..2af45794d 100644 --- a/src/common/components/GridContainer.jsx +++ b/src/common/components/GridContainer.jsx @@ -1,11 +1,12 @@ import { Box } from '@chakra-ui/react'; +// import { max } from 'date-fns'; import PropTypes from 'prop-types'; -function GridContainer({ children, gridTemplateColumns, childrenStyle, gridGap, gridColumn, withContainer, ...rest }) { +function GridContainer({ children, gridTemplateColumns, childrenStyle, gridGap, gridColumn, withContainer, maxWidth, ...rest }) { return ( ( + + + +); + +export default star; diff --git a/src/common/components/MktMultipleColumnCard.jsx b/src/common/components/MktMultipleColumnCard.jsx new file mode 100644 index 000000000..508ffab10 --- /dev/null +++ b/src/common/components/MktMultipleColumnCard.jsx @@ -0,0 +1,71 @@ +import { Box, Grid } from '@chakra-ui/react'; +import PropTypes from 'prop-types'; +import Text from './Text'; +import useStyle from '../hooks/useStyle'; + +function MktMultipleColumnCard({ id, title, columns, fontFamily, marginBottom, marginTop, maxWidth, ...rest }) { + const limitedColumns = columns.slice(0, 5); + const { navbarBackground } = useStyle(); + + return ( + + {/* Título principal */} + + {title} + + + + {limitedColumns.map((column, index) => { + const idKey = `column-${index}`; + return ( + + + {index + 1} + . + {column.column_title} + + + {column.column_description} + + + ); + })} + + + ); +} +MktMultipleColumnCard.propTypes = { + id: PropTypes.string, + title: PropTypes.string, + columns: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.any])), + columnBackground: PropTypes.string, + fontFamily: PropTypes.string, + marginBottom: PropTypes.string, + marginTop: PropTypes.string, + maxWidth: PropTypes.string, +}; + +MktMultipleColumnCard.defaultProps = { + id: '', + title: null, + columns: [], + columnBackground: null, + fontFamily: 'Lato', + marginTop: '', + marginBottom: '', + maxWidth: '', +}; + +export default MktMultipleColumnCard; diff --git a/src/common/components/MktOneColumnKPI.jsx b/src/common/components/MktOneColumnKPI.jsx index afd2d129a..bf04370dc 100644 --- a/src/common/components/MktOneColumnKPI.jsx +++ b/src/common/components/MktOneColumnKPI.jsx @@ -43,28 +43,47 @@ function MktKPI({ kpiTitle, kpiDescription, color }) { function MktOneColumnKPI({ id, + fontFamily, + borderRadius, title, subTitle, description, paddingMd, buttonUrl, buttonLabel, + buttonBackgroundColor, + buttonFontColor, + buttonFontSize, linkButton, + justifyItems, kpiList, slice, + titleFontSize, + descriptionFontSize, + descriptionTextAlign, + descriptionLineHeight, + marginBottom, + marginTop, + maxWidth, + width, + gridColumn, + padding, ...rest }) { const { fontColor2, hexColor } = useStyle(); - return ( - + + {/* maxWidth={maxWidth} margin={`${marginTop} auto ${marginBottom} auto`} */} - + {subTitle && ( {subTitle} @@ -77,14 +96,16 @@ function MktOneColumnKPI({ ))} )} - + {title} {slice?.primary?.description ? ( ) : ( {buttonLabel} @@ -116,29 +144,55 @@ function MktOneColumnKPI({ } MktOneColumnKPI.propTypes = { + fontFamily: PropTypes.string, title: PropTypes.string, subTitle: PropTypes.string, description: PropTypes.string, + descriptionLineHeight: PropTypes.string, paddingMd: PropTypes.string, buttonUrl: PropTypes.string, buttonLabel: PropTypes.string, + buttonBackgroundColor: PropTypes.string, + buttonFontColor: PropTypes.string, + buttonFontSize: PropTypes.string, linkButton: PropTypes.bool, + justifyItems: PropTypes.string, kpiList: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.any])), slice: PropTypes.oneOfType([PropTypes.object, PropTypes.any]), id: PropTypes.string, + titleFontSize: PropTypes.string, + descriptionFontSize: PropTypes.string, + marginBottom: PropTypes.string, + marginTop: PropTypes.string, + maxWidth: PropTypes.string, + width: PropTypes.string, + gridColumn: PropTypes.string, }; MktOneColumnKPI.defaultProps = { + fontFamily: 'Lato', title: null, subTitle: null, description: null, + descriptionLineHeight: null, paddingMd: null, buttonUrl: null, buttonLabel: null, + buttonBackgroundColor: null, + buttonFontColor: null, + buttonFontSize: null, linkButton: false, + justifyItems: null, kpiList: [], slice: null, id: '', + titleFontSize: null, + descriptionFontSize: null, + marginBottom: '', + marginTop: '', + maxWidth: '', + width: '', + gridColumn: '', }; export default MktOneColumnKPI; diff --git a/src/common/components/MktPartners.jsx b/src/common/components/MktPartners.jsx index 54e330195..6c8333675 100644 --- a/src/common/components/MktPartners.jsx +++ b/src/common/components/MktPartners.jsx @@ -2,7 +2,7 @@ // import { useRef, useCallback } from 'react'; import PropTypes from 'prop-types'; import { - Box, Img, + Box, Img, Text, } from '@chakra-ui/react'; // import { motion, useAnimation } from 'framer-motion'; import { useRef } from 'react'; @@ -11,13 +11,42 @@ import GridContainer from './GridContainer'; import useGrabToScroll from '../hooks/useGrabToScroll'; import { toCapitalize } from '../../utils'; -function MktPartners({ id, title, images, ...rest }) { +function MktPartners({ id, title, titleSize, images, description, imagesContent, ...rest }) { const scrollContainerRef = useRef(null); const { grabToScroll } = useGrabToScroll({ ref: scrollContainerRef, horizontal: true }); // const bgColor = useColorModeValue('', 'white'); const cleanImages = images.length > 0 && typeof images[0] === 'string' ? images : images.map((obj) => obj.text); const limitedImages = cleanImages.splice(0, 5); + + const imagesContentStyles = { + compact: { + gridContainer: { + px: '0px', + }, + image: { + margin: '0px', + padding: '34px 41px', + 'background-color': 'white', + height: '139px', + width: '172.8px', + }, + boxImages: { + gridColumn: '1 / span 12', + }, + }, + default: { + gridContainer: { + px: { base: '10px', md: '2rem' }, + }, + image: { + margin: '0 auto', + }, + boxImages: { + gridColumn: '2 / span 8', + }, + }, + }; // const controls = useAnimation(); // const observer = useRef(); // const motionRef = useRef(false); @@ -50,20 +79,37 @@ function MktPartners({ id, title, images, ...rest }) { id={id} gridTemplateColumns="repeat(10, 1fr)" maxWidth="1280px" - px={{ base: '10px', md: '2rem' }} + {...imagesContentStyles[imagesContent]?.gridContainer} {...rest} > - {title} + + {title} + + + + + {description} + ) : ( {altTitle} )); })} @@ -122,12 +168,18 @@ MktPartners.propTypes = { title: PropTypes.string, images: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.any])), id: PropTypes.string, + description: PropTypes.string, + imagesContent: PropTypes.string, + titleSize: PropTypes.string, }; MktPartners.defaultProps = { title: null, images: [], id: '', + description: null, + imagesContent: 'default', + titleSize: '', }; export default MktPartners; diff --git a/src/common/components/MktPricingCards.jsx b/src/common/components/MktPricingCards.jsx new file mode 100644 index 000000000..7ace87cc0 --- /dev/null +++ b/src/common/components/MktPricingCards.jsx @@ -0,0 +1,46 @@ +import { useEffect, useState } from 'react'; +import PropTypes from 'prop-types'; +import { Flex } from '@chakra-ui/react'; +import PricingCard from './PricingCard'; + +function MktPricingCards({ margin, maxWidth, url, id }) { + const [plans, setPlans] = useState([]); + useEffect(() => { + if (!url) return; + + fetch(`/${url}.json`) + .then((response) => response.json()) + .then((data) => { + setPlans(data); + }) + .catch((error) => console.error('Error al cargar el JSON:', error)); + }, [url]); + + return ( + + {plans?.map((plan) => ( + + ))} + + ); +} + +MktPricingCards.propTypes = { + margin: PropTypes.string, + maxWidth: PropTypes.string, + url: PropTypes.string.isRequired, + id: PropTypes.string, +}; + +MktPricingCards.defaultProps = { + margin: '', + maxWidth: '', + id: '', +}; + +export default MktPricingCards; diff --git a/src/common/components/MktTestimonials.jsx b/src/common/components/MktTestimonials.jsx index 7a1928154..a681b3cbc 100644 --- a/src/common/components/MktTestimonials.jsx +++ b/src/common/components/MktTestimonials.jsx @@ -15,36 +15,124 @@ import { lengthOfString } from '../../utils'; import axios from '../../axios'; import { BREATHECODE_HOST } from '../../utils/variables'; -function TestimonialBox({ picture, name, rating, description }) { - const { fontColor2, backgroundColor, hexColor } = useStyle(); +function TestimonialBox({ picture, name, rating, description, version }) { + const { fontColor2, backgroundColor, backgroundColor2, backgroundColor5, hexColor } = useStyle(); const limit = 160; const descriptionLength = lengthOfString(description); const truncatedDescription = descriptionLength > limit ? `${description?.substring(0, limit)}...` : description; + const styles = { + v1: { + box: { + background: backgroundColor, + border: '1px solid #dadada', + width: '250px', + }, + textName: { + fontWeight: '900', + lineHeight: '16px', + marginTop: '15px', + }, + imageStyles: { + borderRadius: '50%', + margin: '0 auto', + }, + }, + v2: { + textName: { + height: '62px', + fontSize: '18px', + backgroundColor: backgroundColor5, + pt: '24px', + pb: '16px', + borderRadius: '8px 8px 0 0', + fontWeight: 400, + lineHeight: '21.6px', + // marginTop: '70px', + }, + box: { + width: '306px', + position: 'relative', + padding: '0px', + marginTop: '45px', + justifyContent: 'start', + height: 'auto', + // height: '253px', + }, + imageStyles: { + border: '2px solid #00041A', + position: 'absolute', + borderRadius: '50%', + top: '-45px', + left: 'calc(50% - 35px)', + }, + imageBrand: { + border: '2px solid none', + borderRadius: '16px', + margin: '10px auto', + width: '59px', + height: '19px', + position: 'absolute', + top: '-15px', + left: '166px', + padding: '4px', + backgroundColor: '#EEF9FE', + }, + textDescription: { + backgroundColor: backgroundColor2, + style: { + borderRadius: '0 0 8px 8px', + padding: '8px', + width: '306px', + fontSize: '12px', + textAlign: 'center', + lineHeight: '14.4px', + marginTop: '0', + whiteSpace: 'pre-wrap', + wordBreak: 'break-word', + }, + }, + }, + }; return ( - {`${name} - + {`${name} + {version === 'v2' ? ( + {`${name} + ) : null } + {name} - + {version === 'v1' ? ( + + ) : null} - {`“${truncatedDescription}”`} + {version === 'v2' ? `“${description}”` : `“${truncatedDescription}”`} ); @@ -64,6 +153,7 @@ function MktTestimonials({ title, endpoint, testimonials, + version, ...rest }) { const [testimonialsData, setTestimonialsData] = useState(); @@ -89,9 +179,18 @@ function MktTestimonials({ useEffect(() => { getTestimonials(); }, []); - const testimonialsArray = (testimonialsData?.length > 0 && testimonialsData) || (testimonials?.length > 0 && testimonials); + const stylesBox = { + v2: { + titlesStyles: { + fontSize: '38px', + lineHeight: '45.6px', + fontWeight: 400, + }, + }, + }; + return testimonialsArray && ( {title && ( - + {title} )} @@ -122,6 +221,7 @@ function MktTestimonials({ name={`${testimonial?.author?.first_name} ${testimonial?.author?.last_name}`} rating={testimonial?.total_rating} description={testimonial?.comments} + version={version} /> ))} @@ -131,12 +231,14 @@ function MktTestimonials({ } MktTestimonials.propTypes = { + version: PropTypes.string, title: PropTypes.string, endpoint: PropTypes.string, testimonials: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.any])), }; MktTestimonials.defaultProps = { + version: null, title: null, endpoint: '', testimonials: null, diff --git a/src/common/components/MktTwoColumnSideImage.jsx b/src/common/components/MktTwoColumnSideImage.jsx index 9cd791e0c..aeb41ebe2 100644 --- a/src/common/components/MktTwoColumnSideImage.jsx +++ b/src/common/components/MktTwoColumnSideImage.jsx @@ -1,12 +1,13 @@ import PropTypes from 'prop-types'; import { - Box, Flex, Img, useColorModeValue, + Box, Flex, Img, useColorModeValue, Image, } from '@chakra-ui/react'; import Heading from './Heading'; import Text from './Text'; import Link from './NextChakraLink'; import useStyle from '../hooks/useStyle'; import PrismicTextComponent from './PrismicTextComponent'; +// import Head from 'next/head'; const SIZES = { SMALL: 'Small', @@ -17,6 +18,7 @@ const SIZES = { const BUTTON_COLOR = { BLUE: 'Blue', WHITE: 'White', + DARK_BLUE: 'Dark Blue', }; function MktTwoColumnSideImage({ @@ -33,16 +35,31 @@ function MktTwoColumnSideImage({ linkButton, buttonUrl, buttonLabel, + buttonLabelSize, background, border, imagePosition, slice, + descriptionTitle, + descriptionFontSize, imageAlt, gridGap, fontFamily, + fontFamilySubtitle, textSideProps, imageSideProps, containerProps, + customTitleSize, + customSubTitleSize, + studentsAvatars, + studentsAvatarsDescriptions, + multiDescription, + transparent, + marginTop, + marginBottom, + maxWidth, + borderRadius, + margin, ...rest }) { const { fontColor2, hexColor, backgroundColor } = useStyle(); @@ -68,6 +85,12 @@ function MktTwoColumnSideImage({ background: 'white', }; } + if (buttonColor === BUTTON_COLOR.DARK_BLUE) { + return { + color: '#FFF', + background: '#0084FF', + }; + } return { color: '#FFF', background: 'blue.default', @@ -114,25 +137,28 @@ function MktTwoColumnSideImage({ }; }; const prismicStyles = prisimicStyles(); - return ( - + {title} {subTitle && ( - + {subTitle} )} + {multiDescription.length > 0 && ( + + {multiDescription.map((content) => ( + + {content.multi_description_title} + {content.multi_description_content} + + ))} + + )} + + {descriptionTitle} + {slice?.primary?.description ? ( ) : ( {description} )} + {studentsAvatars.length > 0 && ( + + + { + studentsAvatars.map((avatar, index) => { + const limitViewStudents = 5; + return ( + {`Picture + ); + }) + } + + + {studentsAvatarsDescriptions} + + + + )} {buttonUrl && ( {buttonLabel} @@ -220,14 +293,17 @@ MktTwoColumnSideImage.propTypes = { title: PropTypes.string, subTitle: PropTypes.string, description: PropTypes.string, + descriptionFontSize: PropTypes.string, imagePosition: PropTypes.string, imageUrl: PropTypes.string, linkButton: PropTypes.bool, buttonUrl: PropTypes.string, buttonLabel: PropTypes.string, + buttonLabelSize: PropTypes.string, background: PropTypes.string, border: PropTypes.string, slice: PropTypes.oneOfType([PropTypes.object, PropTypes.any]), + descriptionTitle: PropTypes.string, imageAlt: PropTypes.string, id: PropTypes.string, gridGap: PropTypes.string, @@ -235,6 +311,18 @@ MktTwoColumnSideImage.propTypes = { textSideProps: PropTypes.objectOf(PropTypes.oneOfType([PropTypes.any])), imageSideProps: PropTypes.objectOf(PropTypes.oneOfType([PropTypes.any])), containerProps: PropTypes.objectOf(PropTypes.oneOfType([PropTypes.any])), + studentsAvatarsDescriptions: PropTypes.string, + studentsAvatars: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.any])), + fontFamilySubtitle: PropTypes.string, + customTitleSize: PropTypes.string, + customSubTitleSize: PropTypes.string, + multiDescription: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.any])), + transparent: PropTypes.bool, + marginTop: PropTypes.string, + marginBottom: PropTypes.string, + maxWidth: PropTypes.string, + margin: PropTypes.string, + borderRadius: PropTypes.string, }; MktTwoColumnSideImage.defaultProps = { @@ -246,14 +334,17 @@ MktTwoColumnSideImage.defaultProps = { title: null, subTitle: null, description: null, + descriptionFontSize: null, imagePosition: 'left', imageUrl: null, linkButton: false, buttonUrl: null, buttonLabel: null, + buttonLabelSize: null, background: null, border: null, slice: null, + descriptionTitle: null, imageAlt: '', id: '', gridGap: '24px', @@ -261,6 +352,18 @@ MktTwoColumnSideImage.defaultProps = { textSideProps: {}, imageSideProps: {}, containerProps: {}, + studentsAvatarsDescriptions: '', + studentsAvatars: [], + fontFamilySubtitle: 'Lato, Space Grotesk Variable', + customTitleSize: null, + customSubTitleSize: null, + multiDescription: [], + transparent: false, + marginTop: '', + marginBottom: '', + maxWidth: '', + margin: '', + borderRadius: '', }; export default MktTwoColumnSideImage; diff --git a/src/common/components/PricingCard.jsx b/src/common/components/PricingCard.jsx index ddffad24d..26e8efb19 100644 --- a/src/common/components/PricingCard.jsx +++ b/src/common/components/PricingCard.jsx @@ -16,14 +16,14 @@ export default function PricingCard({ item, courseData, isFetching, relatedSubsc const { t, lang } = useTranslation('signup'); const { getPriceWithDiscount, state } = useSignup(); const { selfAppliedCoupon } = state; - const { fontColor, hexColor, featuredCard, featuredColor } = useStyle(); + const { fontColor, hexColor, featuredCard, featuredColor, backgroundColor6 } = useStyle(); const [selectedFinancing, setSelectedFinancing] = useState({}); const [accordionState, setAccordionState] = useState(false); - const isBootcampType = item?.planType && item?.planType.toLowerCase() === 'bootcamp'; + const isBootcampOrCustomType = item?.planType && (item?.planType.toLowerCase() === 'bootcamp' || item?.planType.toLowerCase() === 'custom'); const queryCoupon = getQueryString('coupon'); const [coupon] = usePersistentBySession('coupon', []); - const courseCoupon = selfAppliedCoupon?.plan === item.plan_slug && selfAppliedCoupon; + const courseCoupon = selfAppliedCoupon?.plan === item?.plan_slug && selfAppliedCoupon; const priceProcessed = getPriceWithDiscount(selectedFinancing?.price || item?.optionList?.[0]?.price, courseCoupon); const discountApplied = priceProcessed?.originalPrice && priceProcessed.price !== priceProcessed.originalPrice; @@ -32,21 +32,40 @@ export default function PricingCard({ item, courseData, isFetching, relatedSubsc const utilProps = { already_have_it: t('pricing.already-have-plan'), + + custom: { + type: item?.type, + hookMessage: item?.title, + heading_description: item?.description, + service_items: item?.service_items, + added_features: item?.added_features, + title: item?.title, + description: item?.['sub-description'], + color: item?.featured_card ? 'white' : hexColor.black, + featured: item?.featured_card?.color || '', + border: item?.featured_card?.color || hexColor.lightColor, + button: { + variant: item?.button?.variant || 'default', + color: item?.button?.color || '#fff', + background: item?.button?.background || hexColor.blueDefault, + title: item?.button?.title || item?.button, + }, + }, + bootcamp: { - type: item.type, - hookMessage: item.description, - service_items: item.service_items, - title: item.title, + type: item?.type, + hookMessage: item?.description, + service_items: item?.service_items, + title: item?.title, description: item?.['sub-description'], color: hexColor.black, featured: '', border: hexColor.lightColor, - featuredFontColor: featuredCard.blueDark, button: { variant: 'default', color: '#fff', background: hexColor.blueDefault, - title: item.button, + title: item?.button, }, }, @@ -61,7 +80,6 @@ export default function PricingCard({ item, courseData, isFetching, relatedSubsc color: hexColor.black, featured: '', border: hexColor.lightColor, - featuredFontColor: fontColor, button: { variant: 'default', color: 'white', @@ -82,7 +100,6 @@ export default function PricingCard({ item, courseData, isFetching, relatedSubsc color: 'white', featured: courseCoupon ? hexColor.green : hexColor.blueDefault, border: isFetching ? hexColor.lightColor : premiumColor(), - featuredFontColor: hexColor.yellowDefault, button: { variant: 'default', color: hexColor.black, @@ -92,7 +109,7 @@ export default function PricingCard({ item, courseData, isFetching, relatedSubsc }, }, }; - const viewProps = item.price > 0 ? utilProps.premium : (utilProps?.[item?.planType] || utilProps.basic); + const viewProps = item?.price > 0 ? utilProps.premium : (utilProps?.[item?.planType] || utilProps.basic); const featuredInfo = item?.featured_info ? item?.featured_info : viewProps.featured_info; const isOriginalPlan = item?.planType === 'original'; const color = viewProps?.color; @@ -114,7 +131,7 @@ export default function PricingCard({ item, courseData, isFetching, relatedSubsc }); if (isWindow) { - if (isBootcampType) { + if (isBootcampOrCustomType) { window.location.href = item?.button_link; } else { window.location.href = `${langPath}/checkout${qs}`; @@ -144,7 +161,8 @@ export default function PricingCard({ item, courseData, isFetching, relatedSubsc maxWidth="410px" flexDirection="column" borderRadius="11px" - border={`2px solid ${border}`} + border="2px solid" + borderColor={border} width="100%" background={featuredCard.background} height="fit-content" @@ -192,7 +210,7 @@ export default function PricingCard({ item, courseData, isFetching, relatedSubsc {viewProps.hookMessage} - {!isBootcampType ? ( + {!isBootcampOrCustomType ? ( <> {!isOriginalPlan ? ( @@ -210,7 +228,7 @@ export default function PricingCard({ item, courseData, isFetching, relatedSubsc )} - {`$${priceProcessed.price}`} + {`$${priceProcessed.price || item.price}`} ) @@ -227,7 +245,7 @@ export default function PricingCard({ item, courseData, isFetching, relatedSubsc )} )} - {!isFetching && item.discount_text && ( + {!isFetching && item?.discount_text && ( {item.discount_text} @@ -249,18 +267,21 @@ export default function PricingCard({ item, courseData, isFetching, relatedSubsc ) : ( <> - - - {`${item.ask}`} - - + + + {item?.planType.toLowerCase() === 'custom' ? item.price : item.ask} + + {item?.planType.toLowerCase() === 'custom' && item.description && ( + {viewProps.heading_description} + )} + )} {isFetching ? ( ) : ( <> - {!isBootcampType && item?.title && !isTotallyFree && ( + {!isBootcampOrCustomType && item?.title && !isTotallyFree && ( {isPayable ? selectedFinancing?.title || item?.title : item?.period_label} @@ -268,14 +289,14 @@ export default function PricingCard({ item, courseData, isFetching, relatedSubsc )} - {(!isBootcampType && alreadyHaveIt) ? ( + {(!isBootcampOrCustomType && alreadyHaveIt) ? ( {utilProps.already_have_it} ) : ( <> - + + {loadingServices ? ( + <> + + + + ) : ( + <> + + + {t('subscription.mentoring-available')} + + + + + {(totalMentorshipsAvailable < 0 || existsNoAvailableAsSaas) ? ( + + ) : ( + + {totalMentorshipsAvailable} + + )} + - - - {t('subscription.workshop-available')} - - - - - {totalWorkshopsAvailable >= 0 ? ( - - {totalWorkshopsAvailable} - - ) : ( - - )} - - + + + + {t('subscription.workshop-available')} + + + + + {totalWorkshopsAvailable >= 0 ? ( + + {totalWorkshopsAvailable} + + ) : ( + + )} + - - )} - - )} + + + )} + @@ -231,12 +241,27 @@ function Subscriptions({ cohorts }) { {services[servicesModal].map((service) => { const logo = service.logo_url || service.icon_url; return ( - - - {logo && Service logo} - - {service.name} - + + + + {logo && Service logo} + + {service.name} + + + {servicesModal === 'mentorships' && ( + <> + {service.nonSaasAcademy ? ( + + ) : ( + + + {service.unit} + + + )} + + )} {service.description} @@ -244,6 +269,11 @@ function Subscriptions({ cohorts }) { ); })} + {servicesModal === 'mentorships' && existsNoAvailableAsSaas && ( + + {t('subscription.bootcamp-mentorships')} + + )} )} diff --git a/src/js_modules/syllabus/ExerciseGuidedExperience.jsx b/src/js_modules/syllabus/ExerciseGuidedExperience.jsx index cfd4c070f..712f6a7c7 100644 --- a/src/js_modules/syllabus/ExerciseGuidedExperience.jsx +++ b/src/js_modules/syllabus/ExerciseGuidedExperience.jsx @@ -17,10 +17,10 @@ function ExerciseGuidedExperience({ currentTask, currentAsset, handleStartLearnp const { colorMode } = useStyle(); const [telemetryReport, setTelemetryReport] = useState([]); - const isExerciseStated = !!currentTask?.assignment_telemetry; + const isExerciseStarted = !!currentTask?.assignment_telemetry; useEffect(() => { - if (isExerciseStated) { + if (isExerciseStarted) { const { steps, workout_session: workoutSession, last_interaction_at: lastInteractionAt } = currentTask.assignment_telemetry; const completedSteps = steps.reduce((acum, elem) => { if (elem.completed_at) return acum + 1; @@ -124,8 +124,8 @@ function ExerciseGuidedExperience({ currentTask, currentAsset, handleStartLearnp : ( <> - - + + {currentAsset?.title} @@ -133,7 +133,7 @@ function ExerciseGuidedExperience({ currentTask, currentAsset, handleStartLearnp {currentAsset?.description} - + - {isExerciseStated && ( + {isExerciseStarted && ( )} - + )} diff --git a/src/js_modules/syllabus/ProjectInstructions.jsx b/src/js_modules/syllabus/ProjectInstructions.jsx index d15589ca1..153ab22c2 100644 --- a/src/js_modules/syllabus/ProjectInstructions.jsx +++ b/src/js_modules/syllabus/ProjectInstructions.jsx @@ -65,7 +65,7 @@ function ProvisioningPopover({ openInLearnpackAction, provisioningLinks }) { ); } -export function ButtonsHandler({ currentAsset, setShowCloneModal, handleStartLearnpack, isForOpenLocaly, startWithLearnpack, variant, ...rest }) { +export function ButtonsHandler({ currentAsset, setShowCloneModal, handleStartLearnpack, isForOpenLocaly, startWithLearnpack, variant, isStarted, ...rest }) { const { t } = useTranslation('common'); const [vendors, setVendors] = useState([]); const { state } = useCohortHandler(); @@ -131,7 +131,8 @@ export function ButtonsHandler({ currentAsset, setShowCloneModal, handleStartLea )} {startWithLearnpack ? ( ) : ( - - - */} diff --git a/src/pages/profile/[slug].jsx b/src/pages/profile/[slug].jsx index 81cf33065..2f47c796d 100644 --- a/src/pages/profile/[slug].jsx +++ b/src/pages/profile/[slug].jsx @@ -1,5 +1,6 @@ +/* eslint-disable camelcase */ import { - Tab, TabList, TabPanel, TabPanels, Tabs, + Tab, TabList, TabPanel, TabPanels, Tabs, Box, } from '@chakra-ui/react'; import useTranslation from 'next-translate/useTranslation'; import { @@ -8,9 +9,11 @@ import { import { useRouter } from 'next/router'; import Heading from '../../common/components/Heading'; import useAuth from '../../common/hooks/useAuth'; +import useCohortHandler from '../../common/hooks/useCohortHandler'; import asPrivate from '../../common/context/PrivateRouteWrapper'; import bc from '../../common/services/breathecode'; import { cleanQueryStrings } from '../../utils'; +import { ModuleMapSkeleton } from '../../common/components/Skeleton'; import AlertMessage from '../../common/components/AlertMessage'; import GridContainer from '../../common/components/GridContainer'; import Subscriptions from '../../js_modules/profile/Subscriptions'; @@ -25,8 +28,10 @@ function Profile() { const { asPath } = router; const [currentTabIndex, setCurrentTabIndex] = useState(0); const [certificates, setCertificates] = useState([]); - const [myCohorts, setMyCohorts] = useState([]); + const [isLoadingCohorts, setIsLoadingCohorts] = useState(true); const [isAvailableToShowModalMessage, setIsAvailableToShowModalMessage] = useState([]); + const { state: cohortsState, setMyCohorts } = useCohortHandler(); + const { myCohorts } = cohortsState; const tabListMenu = t('tabList', {}, { returnObjects: true }); const tabPosition = { @@ -50,18 +55,38 @@ function Profile() { }); }, []); + const fetchCohorts = async () => { + try { + const { data } = await bc.admissions().me(); + if (!data) throw new Error('No data'); + const { cohorts } = data; + + const parsedCohorts = cohorts.map(((elem) => { + const { cohort, ...cohort_user } = elem; + const { syllabus_version } = cohort; + return { + ...cohort, + selectedProgramSlug: `/cohort/${cohort.slug}/${syllabus_version.slug}/v${syllabus_version.version}`, + cohort_role: elem.role, + cohort_user, + }; + })); + setMyCohorts(parsedCohorts); + + const isToShowGithubMessage = cohorts?.some( + (l) => l?.educational_status === 'ACTIVE' && l.cohort.available_as_saas === false, + ); + setIsAvailableToShowModalMessage(isToShowGithubMessage); + } catch (e) { + console.log(e); + } finally { + setIsLoadingCohorts(false); + } + }; + useEffect(() => { if (isAuthenticated) { - bc.admissions().me() - .then((resp) => { - const data = resp?.data; - const cohorts = data?.cohorts; - setMyCohorts(cohorts); - const isToShowGithubMessage = cohorts?.some( - (l) => l?.educational_status === 'ACTIVE' && l.cohort.available_as_saas === false, - ); - setIsAvailableToShowModalMessage(isToShowGithubMessage); - }); + fetchCohorts(); } }, [isAuthenticated]); @@ -110,17 +135,23 @@ function Profile() { ))} - - - - - - - - - - - + {!isLoadingCohorts ? ( + + + + + + + + + + + + ) : ( + + + + )} diff --git a/src/pages/syllabus/[cohortSlug]/[lesson]/[lessonSlug]/index.jsx b/src/pages/syllabus/[cohortSlug]/[lesson]/[lessonSlug]/index.jsx index fcf6cf691..bf170f358 100644 --- a/src/pages/syllabus/[cohortSlug]/[lesson]/[lessonSlug]/index.jsx +++ b/src/pages/syllabus/[cohortSlug]/[lesson]/[lessonSlug]/index.jsx @@ -408,71 +408,77 @@ function SyllabusContent() { useEffect(() => { const currTask = sortedAssignments[currentModuleIndex]?.modules?.find((l) => l.slug === lessonSlug); const currentLanguageTaskUrl = currTask?.translations?.[lang === 'en' ? 'us' : lang]?.slug || lessonSlug; - bc.lesson({ asset_type: assetTypeValues[lesson] }).getAsset(currentLanguageTaskUrl).then(({ data }) => { - const translations = data?.translations; - const exensionName = getExtensionName(data.readme_url); - const isIpynb = exensionName === 'ipynb'; - const currentSlug = translations?.[language] || lessonSlug; - const urlPathname = data.readme_url ? data.readme_url.split('https://github.com')[1] : null; - const pathnameWithoutExtension = urlPathname ? urlPathname.split('.ipynb')[0] : null; - const extension = urlPathname ? urlPathname.split('.').pop() : null; - const finalPathname = `${pathnameWithoutExtension}.${extension}`; - - if (currTask?.target === 'blank') { - setCurrentAsset(data); - return; - } - - setReadmeUrlPathname(finalPathname); - let currentTranslationSlug = data?.lang === language ? data?.slug : data.translations[language]; - if (isIpynb) { - setIpynbHtmlUrl(`${BREATHECODE_HOST}/v1/registry/asset/preview/${currentSlug}?plain=true`); - setCurrentAsset(data); - } else { - setIpynbHtmlUrl(null); - if (currentTranslationSlug === undefined) { - currentTranslationSlug = `${lessonSlug}-${language}`; + if (Object.keys(cohortSession).length > 0) { + bc.lesson({ asset_type: assetTypeValues[lesson] }).getAsset(currentLanguageTaskUrl).then(({ data }) => { + const translations = data?.translations; + const exensionName = getExtensionName(data.readme_url); + const isIpynb = exensionName === 'ipynb'; + const currentSlug = translations?.[language] || lessonSlug; + const urlPathname = data.readme_url ? data.readme_url.split('https://github.com')[1] : null; + const pathnameWithoutExtension = urlPathname ? urlPathname.split('.ipynb')[0] : null; + const extension = urlPathname ? urlPathname.split('.').pop() : null; + const finalPathname = `${pathnameWithoutExtension}.${extension}`; + + if (currTask?.target === 'blank') { + setCurrentAsset(data); + return; } - Promise.all([ - assetTypeValues[lesson] !== 'QUIZ' && axios.get(`${BREATHECODE_HOST}/v1/registry/asset/${currentTranslationSlug}.md`), - axios.get(`${BREATHECODE_HOST}/v1/registry/asset/${currentTranslationSlug}?asset_type=${assetTypeValues[lesson]}`), - ]) - .then(([respMarkdown, respData]) => { - const currData = respData.data; - const markdownData = respMarkdown.data; - - if (lesson === 'answer') { - setQuizSlug(currentTranslationSlug); - } else { - setQuizSlug(null); - } - if (currData !== undefined && typeof markdownData === 'string') { - // Binary base64 decoding ⇢ UTF-8 - const markdown = getMarkDownContent(markdownData); - setReadme(markdown); - setCurrentAsset(currData); - } - }) - .catch(() => { - setReadme({ - content: t('no-traduction-found-description'), - }); - setCurrentAsset({ - ...data, - title: t('no-traduction-found'), + + setReadmeUrlPathname(finalPathname); + let currentTranslationSlug = data?.lang === language ? data?.slug : data.translations[language]; + if (isIpynb) { + setIpynbHtmlUrl(`${BREATHECODE_HOST}/v1/registry/asset/preview/${currentSlug}?plain=true`); + setCurrentAsset(data); + } else { + setIpynbHtmlUrl(null); + if (currentTranslationSlug === undefined) { + currentTranslationSlug = `${lessonSlug}-${language}`; + } + + const avoidReadmeRequest = assetTypeValues[lesson] === 'QUIZ' || (isExercise && isAvailableAsSaas); + + Promise.all([ + avoidReadmeRequest ? false : axios.get(`${BREATHECODE_HOST}/v1/registry/asset/${currentTranslationSlug}.md`), + axios.get(`${BREATHECODE_HOST}/v1/registry/asset/${currentTranslationSlug}?asset_type=${assetTypeValues[lesson]}`), + ]) + .then(([respMarkdown, respData]) => { + const currData = respData.data; + const markdownData = respMarkdown.data; + + if (lesson === 'answer') { + setQuizSlug(currentTranslationSlug); + } else { + setQuizSlug(null); + } + if (currData !== undefined && typeof markdownData === 'string') { + // Binary base64 decoding ⇢ UTF-8 + const markdown = getMarkDownContent(markdownData); + setReadme(markdown); + setCurrentAsset(currData); + } + if (!respMarkdown) setCurrentAsset(currData); + }) + .catch(() => { + setReadme({ + content: t('no-traduction-found-description'), + }); + setCurrentAsset({ + ...data, + title: data.title || t('no-traduction-found'), + }); }); - }); - } - }).catch(() => { - EventIfNotFound(); - }); + } + }).catch(() => { + EventIfNotFound(); + }); + } return () => { cleanCurrentData(); setUserSession({ translations: [], }); }; - }, [router, lessonSlug]); + }, [router, lessonSlug, cohortSession]); useEffect(() => { const currentSyllabus = sortedAssignments.find((l) => l.id === currentSelectedModule);