[{"data":1,"prerenderedAt":3642},["ShallowReactive",2],{"navigation_docs":3,"docs-navigation-with-icons":419,"-docs-sdk-nextjs":561,"-docs-sdk-nextjs-surround":3637},[4,66,87,124,405],{"title":5,"path":6,"stem":7,"children":8,"page":65},"Api","\u002Fdocs\u002Fapi","docs\u002Fapi",[9,13,17,21,25,29,33,37,41,45,49,53,57,61],{"title":10,"path":11,"stem":12},"Best Practices","\u002Fdocs\u002Fapi\u002Fbest-practices","docs\u002Fapi\u002Fbest-practices",{"title":14,"path":15,"stem":16},"Blog","\u002Fdocs\u002Fapi\u002Fblog","docs\u002Fapi\u002Fblog",{"title":18,"path":19,"stem":20},"Code Examples","\u002Fdocs\u002Fapi\u002Fcode-examples","docs\u002Fapi\u002Fcode-examples",{"title":22,"path":23,"stem":24},"Collections","\u002Fdocs\u002Fapi\u002Fcollections","docs\u002Fapi\u002Fcollections",{"title":26,"path":27,"stem":28},"Field Types","\u002Fdocs\u002Fapi\u002Ffield-types","docs\u002Fapi\u002Ffield-types",{"title":30,"path":31,"stem":32},"Rate Limits & Errors","\u002Fdocs\u002Fapi\u002Flimits-and-errors","docs\u002Fapi\u002Flimits-and-errors",{"title":34,"path":35,"stem":36},"Media","\u002Fdocs\u002Fapi\u002Fmedia","docs\u002Fapi\u002Fmedia",{"title":38,"path":39,"stem":40},"Overview","\u002Fdocs\u002Fapi\u002Foverview","docs\u002Fapi\u002Foverview",{"title":42,"path":43,"stem":44},"Pages","\u002Fdocs\u002Fapi\u002Fpages","docs\u002Fapi\u002Fpages",{"title":46,"path":47,"stem":48},"Query Parameters","\u002Fdocs\u002Fapi\u002Fquery-parameters","docs\u002Fapi\u002Fquery-parameters",{"title":50,"path":51,"stem":52},"Responses & Caching","\u002Fdocs\u002Fapi\u002Fresponses","docs\u002Fapi\u002Fresponses",{"title":54,"path":55,"stem":56},"Troubleshooting","\u002Fdocs\u002Fapi\u002Ftroubleshooting","docs\u002Fapi\u002Ftroubleshooting",{"title":58,"path":59,"stem":60},"Validation","\u002Fdocs\u002Fapi\u002Fvalidation","docs\u002Fapi\u002Fvalidation",{"title":62,"path":63,"stem":64},"Webhooks","\u002Fdocs\u002Fapi\u002Fwebhooks","docs\u002Fapi\u002Fwebhooks",false,{"title":67,"path":68,"stem":69,"children":70,"page":65},"Getting Started","\u002Fdocs\u002Fgetting-started","docs\u002Fgetting-started",[71,75,79,83],{"title":72,"path":73,"stem":74},"Authentication","\u002Fdocs\u002Fgetting-started\u002Fauthentication","docs\u002Fgetting-started\u002Fauthentication",{"title":76,"path":77,"stem":78},"Introduction","\u002Fdocs\u002Fgetting-started\u002Fintroduction","docs\u002Fgetting-started\u002Fintroduction",{"title":80,"path":81,"stem":82},"Quickstart","\u002Fdocs\u002Fgetting-started\u002Fquickstart","docs\u002Fgetting-started\u002Fquickstart",{"title":84,"path":85,"stem":86},"Write Operations","\u002Fdocs\u002Fgetting-started\u002Fwrite-operations","docs\u002Fgetting-started\u002Fwrite-operations",{"title":88,"path":89,"stem":90,"children":91,"page":65},"Guides","\u002Fdocs\u002Fguides","docs\u002Fguides",[92,96,100,104,108,112,116,120],{"title":93,"path":94,"stem":95},"Admin Interface","\u002Fdocs\u002Fguides\u002Fadmin-interface","docs\u002Fguides\u002Fadmin-interface",{"title":97,"path":98,"stem":99},"ButterCMS Migration","\u002Fdocs\u002Fguides\u002Fbuttercms-migration","docs\u002Fguides\u002Fbuttercms-migration",{"title":101,"path":102,"stem":103},"Migrations","\u002Fdocs\u002Fguides\u002Fmigrations","docs\u002Fguides\u002Fmigrations",{"title":105,"path":106,"stem":107},"Page Management","\u002Fdocs\u002Fguides\u002Fpage-management","docs\u002Fguides\u002Fpage-management",{"title":109,"path":110,"stem":111},"Public API Usage","\u002Fdocs\u002Fguides\u002Fpublic-api-usage","docs\u002Fguides\u002Fpublic-api-usage",{"title":113,"path":114,"stem":115},"Schema Builder","\u002Fdocs\u002Fguides\u002Fschema-builder","docs\u002Fguides\u002Fschema-builder",{"title":117,"path":118,"stem":119},"User Management","\u002Fdocs\u002Fguides\u002Fuser-management","docs\u002Fguides\u002Fuser-management",{"title":121,"path":122,"stem":123},"Rich Text Editor","\u002Fdocs\u002Fguides\u002Fwysiwyg-editor","docs\u002Fguides\u002Fwysiwyg-editor",{"title":125,"path":126,"stem":127,"children":128,"page":65},"Sdk","\u002Fdocs\u002Fsdk","docs\u002Fsdk",[129,132,136,140,144],{"title":38,"path":130,"stem":131},"\u002Fdocs\u002Fsdk\u002Freadme","docs\u002Fsdk\u002FREADME",{"title":133,"path":134,"stem":135},"Astro","\u002Fdocs\u002Fsdk\u002Fastro","docs\u002Fsdk\u002Fastro",{"title":137,"path":138,"stem":139},"Next.js","\u002Fdocs\u002Fsdk\u002Fnextjs","docs\u002Fsdk\u002Fnextjs",{"title":141,"path":142,"stem":143},"Nuxt","\u002Fdocs\u002Fsdk\u002Fnuxt","docs\u002Fsdk\u002Fnuxt",{"title":145,"path":146,"stem":147,"children":148,"page":65},"Reference","\u002Fdocs\u002Fsdk\u002Freference","docs\u002Fsdk\u002Freference",[149,153,222,235,380],{"title":150,"path":151,"stem":152},"@tentocms\u002Fclient","\u002Fdocs\u002Fsdk\u002Freference\u002Freadme","docs\u002Fsdk\u002Freference\u002FREADME",{"title":154,"path":155,"stem":156,"children":157,"page":65},"Classes","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses","docs\u002Fsdk\u002Freference\u002Fclasses",[158,162,166,170,174,178,182,186,190,194,198,202,206,210,214,218],{"title":159,"path":160,"stem":161},"Class: BlogCategoriesResource","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Fblogcategoriesresource","docs\u002Fsdk\u002Freference\u002Fclasses\u002FBlogCategoriesResource",{"title":163,"path":164,"stem":165},"Class: BlogPostsResource","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Fblogpostsresource","docs\u002Fsdk\u002Freference\u002Fclasses\u002FBlogPostsResource",{"title":167,"path":168,"stem":169},"Class: BlogResource","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Fblogresource","docs\u002Fsdk\u002Freference\u002Fclasses\u002FBlogResource",{"title":171,"path":172,"stem":173},"Class: BlogTagsResource","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Fblogtagsresource","docs\u002Fsdk\u002Freference\u002Fclasses\u002FBlogTagsResource",{"title":175,"path":176,"stem":177},"Class: CollectionsResource","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Fcollectionsresource","docs\u002Fsdk\u002Freference\u002Fclasses\u002FCollectionsResource",{"title":179,"path":180,"stem":181},"Class: CollectionsWriteResource","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Fcollectionswriteresource","docs\u002Fsdk\u002Freference\u002Fclasses\u002FCollectionsWriteResource",{"title":183,"path":184,"stem":185},"Class: MediaResource","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Fmediaresource","docs\u002Fsdk\u002Freference\u002Fclasses\u002FMediaResource",{"title":187,"path":188,"stem":189},"Class: MediaWriteResource","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Fmediawriteresource","docs\u002Fsdk\u002Freference\u002Fclasses\u002FMediaWriteResource",{"title":191,"path":192,"stem":193},"Class: PagesResource","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Fpagesresource","docs\u002Fsdk\u002Freference\u002Fclasses\u002FPagesResource",{"title":195,"path":196,"stem":197},"Class: PagesWriteResource","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Fpageswriteresource","docs\u002Fsdk\u002Freference\u002Fclasses\u002FPagesWriteResource",{"title":199,"path":200,"stem":201},"Class: TentoAuthenticationError","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Ftentoauthenticationerror","docs\u002Fsdk\u002Freference\u002Fclasses\u002FTentoAuthenticationError",{"title":203,"path":204,"stem":205},"Class: TentoClient","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Ftentoclient","docs\u002Fsdk\u002Freference\u002Fclasses\u002FTentoClient",{"title":207,"path":208,"stem":209},"Class: TentoError","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Ftentoerror","docs\u002Fsdk\u002Freference\u002Fclasses\u002FTentoError",{"title":211,"path":212,"stem":213},"Class: TentoNetworkError","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Ftentonetworkerror","docs\u002Fsdk\u002Freference\u002Fclasses\u002FTentoNetworkError",{"title":215,"path":216,"stem":217},"Class: TentoNotFoundError","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Ftentonotfounderror","docs\u002Fsdk\u002Freference\u002Fclasses\u002FTentoNotFoundError",{"title":219,"path":220,"stem":221},"Class: TentoRateLimitError","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Ftentoratelimiterror","docs\u002Fsdk\u002Freference\u002Fclasses\u002FTentoRateLimitError",{"title":223,"path":224,"stem":225,"children":226,"page":65},"Functions","\u002Fdocs\u002Fsdk\u002Freference\u002Ffunctions","docs\u002Fsdk\u002Freference\u002Ffunctions",[227,231],{"title":228,"path":229,"stem":230},"Function: getUrl()","\u002Fdocs\u002Fsdk\u002Freference\u002Ffunctions\u002Fgeturl","docs\u002Fsdk\u002Freference\u002Ffunctions\u002FgetUrl",{"title":232,"path":233,"stem":234},"Function: mockMedia()","\u002Fdocs\u002Fsdk\u002Freference\u002Ffunctions\u002Fmockmedia","docs\u002Fsdk\u002Freference\u002Ffunctions\u002FmockMedia",{"title":236,"path":237,"stem":238,"children":239,"page":65},"Interfaces","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces","docs\u002Fsdk\u002Freference\u002Finterfaces",[240,244,248,252,256,260,264,268,272,276,280,284,288,292,296,300,304,308,312,316,320,324,328,332,336,340,344,348,352,356,360,364,368,372,376],{"title":241,"path":242,"stem":243},"Interface: BlogAuthor","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fblogauthor","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FBlogAuthor",{"title":245,"path":246,"stem":247},"Interface: BlogCategory","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fblogcategory","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FBlogCategory",{"title":249,"path":250,"stem":251},"Interface: BlogPost","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fblogpost","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FBlogPost",{"title":253,"path":254,"stem":255},"Interface: BlogPostListOptions","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fblogpostlistoptions","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FBlogPostListOptions",{"title":257,"path":258,"stem":259},"Interface: BlogTag","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fblogtag","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FBlogTag",{"title":261,"path":262,"stem":263},"Interface: CollectionItemResponse\u003CT>","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fcollectionitemresponse","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FCollectionItemResponse",{"title":265,"path":266,"stem":267},"Interface: CollectionListOptions","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fcollectionlistoptions","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FCollectionListOptions",{"title":269,"path":270,"stem":271},"Interface: CollectionListResponse\u003CT>","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fcollectionlistresponse","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FCollectionListResponse",{"title":273,"path":274,"stem":275},"Interface: CollectionTypeMeta","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fcollectiontypemeta","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FCollectionTypeMeta",{"title":277,"path":278,"stem":279},"Interface: CreateCollectionItemInput","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fcreatecollectioniteminput","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FCreateCollectionItemInput",{"title":281,"path":282,"stem":283},"Interface: CreatePageInput","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fcreatepageinput","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FCreatePageInput",{"title":285,"path":286,"stem":287},"Interface: DryRunResult","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fdryrunresult","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FDryRunResult",{"title":289,"path":290,"stem":291},"Interface: FilterCondition","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Ffiltercondition","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FFilterCondition",{"title":293,"path":294,"stem":295},"Interface: ItemResponse\u003CT>","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fitemresponse","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FItemResponse",{"title":297,"path":298,"stem":299},"Interface: ListResponse\u003CT>","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Flistresponse","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FListResponse",{"title":301,"path":302,"stem":303},"Interface: Media","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fmedia","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FMedia",{"title":305,"path":306,"stem":307},"Interface: MediaItem","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fmediaitem","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FMediaItem",{"title":309,"path":310,"stem":311},"Interface: MediaOption","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fmediaoption","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FMediaOption",{"title":313,"path":314,"stem":315},"Interface: MediaTransformOptions","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fmediatransformoptions","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FMediaTransformOptions",{"title":317,"path":318,"stem":319},"Interface: Page\u003CTContent>","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fpage","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FPage",{"title":321,"path":322,"stem":323},"Interface: PageGetOptions","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fpagegetoptions","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FPageGetOptions",{"title":325,"path":326,"stem":327},"Interface: PageListOptions","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fpagelistoptions","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FPageListOptions",{"title":329,"path":330,"stem":331},"Interface: PageWithRedirect\u003CTContent>","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fpagewithredirect","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FPageWithRedirect",{"title":333,"path":334,"stem":335},"Interface: PaginationMeta","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fpaginationmeta","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FPaginationMeta",{"title":337,"path":338,"stem":339},"Interface: PreviewOption","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fpreviewoption","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FPreviewOption",{"title":341,"path":342,"stem":343},"Interface: RedirectInfo","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fredirectinfo","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FRedirectInfo",{"title":345,"path":346,"stem":347},"Interface: RefTypesOption","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Freftypesoption","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FRefTypesOption",{"title":349,"path":350,"stem":351},"Interface: SeoMetadata","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fseometadata","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FSeoMetadata",{"title":353,"path":354,"stem":355},"Interface: TentoClientConfig","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Ftentoclientconfig","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FTentoClientConfig",{"title":357,"path":358,"stem":359},"Interface: TentoMedia","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Ftentomedia","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FTentoMedia",{"title":361,"path":362,"stem":363},"Interface: UpdateCollectionItemInput","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fupdatecollectioniteminput","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FUpdateCollectionItemInput",{"title":365,"path":366,"stem":367},"Interface: UpdatePageInput","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fupdatepageinput","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FUpdatePageInput",{"title":369,"path":370,"stem":371},"Interface: UploadMediaInput","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fuploadmediainput","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FUploadMediaInput",{"title":373,"path":374,"stem":375},"Interface: WriteCollectionItem","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fwritecollectionitem","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FWriteCollectionItem",{"title":377,"path":378,"stem":379},"Interface: WritePage","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fwritepage","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FWritePage",{"title":381,"path":382,"stem":383,"children":384,"page":65},"Type Aliases","\u002Fdocs\u002Fsdk\u002Freference\u002Ftype-aliases","docs\u002Fsdk\u002Freference\u002Ftype-aliases",[385,389,393,397,401],{"title":386,"path":387,"stem":388},"Type Alias: BlogPostListItem","\u002Fdocs\u002Fsdk\u002Freference\u002Ftype-aliases\u002Fblogpostlistitem","docs\u002Fsdk\u002Freference\u002Ftype-aliases\u002FBlogPostListItem",{"title":390,"path":391,"stem":392},"Type Alias: BlogPostListResponse","\u002Fdocs\u002Fsdk\u002Freference\u002Ftype-aliases\u002Fblogpostlistresponse","docs\u002Fsdk\u002Freference\u002Ftype-aliases\u002FBlogPostListResponse",{"title":394,"path":395,"stem":396},"Type Alias: CollectionItem\u003CTContent>","\u002Fdocs\u002Fsdk\u002Freference\u002Ftype-aliases\u002Fcollectionitem","docs\u002Fsdk\u002Freference\u002Ftype-aliases\u002FCollectionItem",{"title":398,"path":399,"stem":400},"Type Alias: FilterOperator","\u002Fdocs\u002Fsdk\u002Freference\u002Ftype-aliases\u002Ffilteroperator","docs\u002Fsdk\u002Freference\u002Ftype-aliases\u002FFilterOperator",{"title":402,"path":403,"stem":404},"Type Alias: MediaMode","\u002Fdocs\u002Fsdk\u002Freference\u002Ftype-aliases\u002Fmediamode","docs\u002Fsdk\u002Freference\u002Ftype-aliases\u002FMediaMode",{"title":406,"path":407,"stem":408,"children":409,"page":65},"Typegen","\u002Fdocs\u002Ftypegen","docs\u002Ftypegen",[410,413,416],{"title":133,"path":411,"stem":412},"\u002Fdocs\u002Ftypegen\u002Fastro","docs\u002Ftypegen\u002Fastro",{"title":137,"path":414,"stem":415},"\u002Fdocs\u002Ftypegen\u002Fnextjs","docs\u002Ftypegen\u002Fnextjs",{"title":141,"path":417,"stem":418},"\u002Fdocs\u002Ftypegen\u002Fnuxt","docs\u002Ftypegen\u002Fnuxt",[420,450,460,478,556],{"title":5,"path":6,"stem":7,"children":421,"page":65},[422,424,426,428,430,432,434,436,438,440,442,444,446,448],{"title":10,"path":11,"stem":12,"icon":423},"i-lucide-sparkles",{"title":14,"path":15,"stem":16,"icon":425},"i-lucide-newspaper",{"title":18,"path":19,"stem":20,"icon":427},"i-lucide-terminal",{"title":22,"path":23,"stem":24,"icon":429},"i-lucide-layers",{"title":26,"path":27,"stem":28,"icon":431},"i-lucide-type",{"title":30,"path":31,"stem":32,"icon":433},"i-lucide-triangle-alert",{"title":34,"path":35,"stem":36,"icon":435},"i-lucide-image",{"title":38,"path":39,"stem":40,"icon":437},"i-lucide-map",{"title":42,"path":43,"stem":44,"icon":439},"i-lucide-file-text",{"title":46,"path":47,"stem":48,"icon":441},"i-lucide-sliders-horizontal",{"title":50,"path":51,"stem":52,"icon":443},"i-lucide-braces",{"title":54,"path":55,"stem":56,"icon":445},"i-lucide-wrench",{"title":58,"path":59,"stem":60,"icon":447},"i-lucide-shield-check",{"title":62,"path":63,"stem":64,"icon":449},"i-lucide-webhook",{"title":67,"path":68,"stem":69,"children":451,"page":65},[452,454,456,458],{"title":72,"path":73,"stem":74,"icon":453},"i-lucide-key-round",{"title":76,"path":77,"stem":78,"icon":455},"i-lucide-compass",{"title":80,"path":81,"stem":82,"icon":457},"i-lucide-rocket",{"title":84,"path":85,"stem":86,"icon":459},"i-lucide-pencil",{"title":88,"path":89,"stem":90,"children":461,"page":65},[462,464,466,468,470,472,474,476],{"title":93,"path":94,"stem":95,"icon":463},"i-lucide-layout-dashboard",{"title":97,"path":98,"stem":99,"icon":465},"i-lucide-package",{"title":101,"path":102,"stem":103,"icon":467},"i-lucide-git-branch",{"title":105,"path":106,"stem":107,"icon":469},"i-lucide-files",{"title":109,"path":110,"stem":111,"icon":471},"i-lucide-plug-zap",{"title":113,"path":114,"stem":115,"icon":473},"i-lucide-wand",{"title":117,"path":118,"stem":119,"icon":475},"i-lucide-users",{"title":121,"path":122,"stem":123,"icon":477},"i-lucide-pilcrow",{"title":125,"path":126,"stem":127,"children":479,"page":65},[480,481,482,484,486],{"title":38,"path":130,"stem":131,"icon":465},{"title":133,"path":134,"stem":135,"icon":457},{"title":137,"path":138,"stem":139,"icon":483},"i-lucide-triangle",{"title":141,"path":142,"stem":143,"icon":485},"i-lucide-hexagon",{"title":145,"path":146,"stem":147,"children":487,"page":65},[488,490,508,512,549],{"title":150,"path":151,"stem":152,"icon":489},null,{"title":154,"path":155,"stem":156,"children":491,"page":65},[492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507],{"title":159,"path":160,"stem":161,"icon":489},{"title":163,"path":164,"stem":165,"icon":489},{"title":167,"path":168,"stem":169,"icon":489},{"title":171,"path":172,"stem":173,"icon":489},{"title":175,"path":176,"stem":177,"icon":489},{"title":179,"path":180,"stem":181,"icon":489},{"title":183,"path":184,"stem":185,"icon":489},{"title":187,"path":188,"stem":189,"icon":489},{"title":191,"path":192,"stem":193,"icon":489},{"title":195,"path":196,"stem":197,"icon":489},{"title":199,"path":200,"stem":201,"icon":489},{"title":203,"path":204,"stem":205,"icon":489},{"title":207,"path":208,"stem":209,"icon":489},{"title":211,"path":212,"stem":213,"icon":489},{"title":215,"path":216,"stem":217,"icon":489},{"title":219,"path":220,"stem":221,"icon":489},{"title":223,"path":224,"stem":225,"children":509,"page":65},[510,511],{"title":228,"path":229,"stem":230,"icon":489},{"title":232,"path":233,"stem":234,"icon":489},{"title":236,"path":237,"stem":238,"children":513,"page":65},[514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548],{"title":241,"path":242,"stem":243,"icon":489},{"title":245,"path":246,"stem":247,"icon":489},{"title":249,"path":250,"stem":251,"icon":489},{"title":253,"path":254,"stem":255,"icon":489},{"title":257,"path":258,"stem":259,"icon":489},{"title":261,"path":262,"stem":263,"icon":489},{"title":265,"path":266,"stem":267,"icon":489},{"title":269,"path":270,"stem":271,"icon":489},{"title":273,"path":274,"stem":275,"icon":489},{"title":277,"path":278,"stem":279,"icon":489},{"title":281,"path":282,"stem":283,"icon":489},{"title":285,"path":286,"stem":287,"icon":489},{"title":289,"path":290,"stem":291,"icon":489},{"title":293,"path":294,"stem":295,"icon":489},{"title":297,"path":298,"stem":299,"icon":489},{"title":301,"path":302,"stem":303,"icon":489},{"title":305,"path":306,"stem":307,"icon":489},{"title":309,"path":310,"stem":311,"icon":489},{"title":313,"path":314,"stem":315,"icon":489},{"title":317,"path":318,"stem":319,"icon":489},{"title":321,"path":322,"stem":323,"icon":489},{"title":325,"path":326,"stem":327,"icon":489},{"title":329,"path":330,"stem":331,"icon":489},{"title":333,"path":334,"stem":335,"icon":489},{"title":337,"path":338,"stem":339,"icon":489},{"title":341,"path":342,"stem":343,"icon":489},{"title":345,"path":346,"stem":347,"icon":489},{"title":349,"path":350,"stem":351,"icon":489},{"title":353,"path":354,"stem":355,"icon":489},{"title":357,"path":358,"stem":359,"icon":489},{"title":361,"path":362,"stem":363,"icon":489},{"title":365,"path":366,"stem":367,"icon":489},{"title":369,"path":370,"stem":371,"icon":489},{"title":373,"path":374,"stem":375,"icon":489},{"title":377,"path":378,"stem":379,"icon":489},{"title":381,"path":382,"stem":383,"children":550,"page":65},[551,552,553,554,555],{"title":386,"path":387,"stem":388,"icon":489},{"title":390,"path":391,"stem":392,"icon":489},{"title":394,"path":395,"stem":396,"icon":489},{"title":398,"path":399,"stem":400,"icon":489},{"title":402,"path":403,"stem":404,"icon":489},{"title":406,"path":407,"stem":408,"children":557,"page":65},[558,559,560],{"title":133,"path":411,"stem":412,"icon":457},{"title":137,"path":414,"stem":415,"icon":483},{"title":141,"path":417,"stem":418,"icon":485},{"id":562,"title":137,"body":563,"description":3632,"extension":3633,"icon":483,"links":489,"meta":3634,"navigation":732,"path":138,"seo":3635,"stem":139,"__hash__":3636},"docs\u002Fdocs\u002Fsdk\u002Fnextjs.md",{"type":564,"value":565,"toc":3606},"minimark",[566,570,589,594,619,623,630,681,685,690,695,904,908,913,984,988,1140,1143,1261,1265,1397,1401,1405,1410,1776,1780,1785,1882,1886,2036,2039,2185,2189,2193,2229,2233,2238,2567,2570,2621,2625,2710,2714,2717,2722,2725,2844,2847,3023,3027,3124,3127,3175,3178,3284,3287,3291,3294,3390,3394,3441,3445,3484,3488,3552,3556,3559,3563,3602],[567,568,569],"p",{},"Complete guide for integrating TentoCMS with Next.js App Router and Pages Router.",[571,572,573],"blockquote",{},[567,574,575,576,580,581,584,585,588],{},"Verified against Next.js 15. In the App Router, ",[577,578,579],"code",{},"draftMode()"," is async and dynamic-route ",[577,582,583],{},"params"," is a ",[577,586,587],{},"Promise"," — both must be awaited (shown below).",[590,591,593],"h2",{"id":592},"installation","Installation",[595,596,601],"pre",{"className":597,"code":598,"language":599,"meta":600,"style":600},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add @tentocms\u002Fclient\n","bash","",[577,602,603],{"__ignoreMap":600},[604,605,608,612,616],"span",{"class":606,"line":607},"line",1,[604,609,611],{"class":610},"sBMFI","pnpm",[604,613,615],{"class":614},"sfazB"," add",[604,617,618],{"class":614}," @tentocms\u002Fclient\n",[590,620,622],{"id":621},"environment-variables","Environment Variables",[567,624,625,626,629],{},"Create ",[577,627,628],{},".env.local",":",[595,631,633],{"className":597,"code":632,"language":599,"meta":600,"style":600},"TENTO_API_KEY=tento_pk_1234567890\nTENTO_PREVIEW_KEY=preview_abc123def456789...\nTENTO_BASE_URL=https:\u002F\u002Ftento-api.intelligentlending.co.uk\nPREVIEW_SECRET=your-random-secret-string\n",[577,634,635,648,659,670],{"__ignoreMap":600},[604,636,637,641,645],{"class":606,"line":607},[604,638,640],{"class":639},"sTEyZ","TENTO_API_KEY",[604,642,644],{"class":643},"sMK4o","=",[604,646,647],{"class":614},"tento_pk_1234567890\n",[604,649,651,654,656],{"class":606,"line":650},2,[604,652,653],{"class":639},"TENTO_PREVIEW_KEY",[604,655,644],{"class":643},[604,657,658],{"class":614},"preview_abc123def456789...\n",[604,660,662,665,667],{"class":606,"line":661},3,[604,663,664],{"class":639},"TENTO_BASE_URL",[604,666,644],{"class":643},[604,668,669],{"class":614},"https:\u002F\u002Ftento-api.intelligentlending.co.uk\n",[604,671,673,676,678],{"class":606,"line":672},4,[604,674,675],{"class":639},"PREVIEW_SECRET",[604,677,644],{"class":643},[604,679,680],{"class":614},"your-random-secret-string\n",[590,682,684],{"id":683},"app-router-recommended","App Router (Recommended)",[686,687,689],"h3",{"id":688},"setup","Setup",[567,691,625,692,629],{},[577,693,694],{},"lib\u002Ftento.ts",[595,696,700],{"className":697,"code":698,"language":699,"meta":600,"style":600},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { TentoClient } from '@tentocms\u002Fclient'\n\nexport const tento = new TentoClient({\n  apiKey: process.env.TENTO_API_KEY!,\n  baseUrl: process.env.TENTO_BASE_URL,\n})\n\nexport const tentoPreview = new TentoClient({\n  apiKey: process.env.TENTO_API_KEY!,\n  previewKey: process.env.TENTO_PREVIEW_KEY,\n  baseUrl: process.env.TENTO_BASE_URL,\n})\n","typescript",[577,701,702,728,734,760,784,805,814,819,839,858,878,897],{"__ignoreMap":600},[604,703,704,708,711,714,717,720,723,725],{"class":606,"line":607},[604,705,707],{"class":706},"s7zQu","import",[604,709,710],{"class":643}," {",[604,712,713],{"class":639}," TentoClient",[604,715,716],{"class":643}," }",[604,718,719],{"class":706}," from",[604,721,722],{"class":643}," '",[604,724,150],{"class":614},[604,726,727],{"class":643},"'\n",[604,729,730],{"class":606,"line":650},[604,731,733],{"emptyLinePlaceholder":732},true,"\n",[604,735,736,739,743,746,748,751,754,757],{"class":606,"line":661},[604,737,738],{"class":706},"export",[604,740,742],{"class":741},"spNyl"," const",[604,744,745],{"class":639}," tento ",[604,747,644],{"class":643},[604,749,750],{"class":643}," new",[604,752,713],{"class":753},"s2Zo4",[604,755,756],{"class":639},"(",[604,758,759],{"class":643},"{\n",[604,761,762,766,768,771,774,777,779,781],{"class":606,"line":672},[604,763,765],{"class":764},"swJcz","  apiKey",[604,767,629],{"class":643},[604,769,770],{"class":639}," process",[604,772,773],{"class":643},".",[604,775,776],{"class":639},"env",[604,778,773],{"class":643},[604,780,640],{"class":639},[604,782,783],{"class":643},"!,\n",[604,785,787,790,792,794,796,798,800,802],{"class":606,"line":786},5,[604,788,789],{"class":764},"  baseUrl",[604,791,629],{"class":643},[604,793,770],{"class":639},[604,795,773],{"class":643},[604,797,776],{"class":639},[604,799,773],{"class":643},[604,801,664],{"class":639},[604,803,804],{"class":643},",\n",[604,806,808,811],{"class":606,"line":807},6,[604,809,810],{"class":643},"}",[604,812,813],{"class":639},")\n",[604,815,817],{"class":606,"line":816},7,[604,818,733],{"emptyLinePlaceholder":732},[604,820,822,824,826,829,831,833,835,837],{"class":606,"line":821},8,[604,823,738],{"class":706},[604,825,742],{"class":741},[604,827,828],{"class":639}," tentoPreview ",[604,830,644],{"class":643},[604,832,750],{"class":643},[604,834,713],{"class":753},[604,836,756],{"class":639},[604,838,759],{"class":643},[604,840,842,844,846,848,850,852,854,856],{"class":606,"line":841},9,[604,843,765],{"class":764},[604,845,629],{"class":643},[604,847,770],{"class":639},[604,849,773],{"class":643},[604,851,776],{"class":639},[604,853,773],{"class":643},[604,855,640],{"class":639},[604,857,783],{"class":643},[604,859,861,864,866,868,870,872,874,876],{"class":606,"line":860},10,[604,862,863],{"class":764},"  previewKey",[604,865,629],{"class":643},[604,867,770],{"class":639},[604,869,773],{"class":643},[604,871,776],{"class":639},[604,873,773],{"class":643},[604,875,653],{"class":639},[604,877,804],{"class":643},[604,879,881,883,885,887,889,891,893,895],{"class":606,"line":880},11,[604,882,789],{"class":764},[604,884,629],{"class":643},[604,886,770],{"class":639},[604,888,773],{"class":643},[604,890,776],{"class":639},[604,892,773],{"class":643},[604,894,664],{"class":639},[604,896,804],{"class":643},[604,898,900,902],{"class":606,"line":899},12,[604,901,810],{"class":643},[604,903,813],{"class":639},[686,905,907],{"id":906},"basic-usage","Basic Usage",[909,910,912],"h4",{"id":911},"static-page","Static Page",[595,914,918],{"className":915,"code":916,"language":917,"meta":600,"style":600},"language-tsx shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F app\u002Fpage.tsx\nimport { tento } from '@\u002Flib\u002Ftento'\n\nexport default async function HomePage() {\n  const page = await tento.pages.getBySlug('homepage')\n\n  return (\n    \u003Cmain>\n      \u003Ch1>{page.fields.title as string}\u003C\u002Fh1>\n      \u003Cdiv dangerouslySetInnerHTML={{ __html: page.fields.content as string }} \u002F>\n    \u003C\u002Fmain>\n  )\n}\n","tsx",[577,919,920,925,930,934,939,944,948,953,958,963,968,973,978],{"__ignoreMap":600},[604,921,922],{"class":606,"line":607},[604,923,924],{},"\u002F\u002F app\u002Fpage.tsx\n",[604,926,927],{"class":606,"line":650},[604,928,929],{},"import { tento } from '@\u002Flib\u002Ftento'\n",[604,931,932],{"class":606,"line":661},[604,933,733],{"emptyLinePlaceholder":732},[604,935,936],{"class":606,"line":672},[604,937,938],{},"export default async function HomePage() {\n",[604,940,941],{"class":606,"line":786},[604,942,943],{},"  const page = await tento.pages.getBySlug('homepage')\n",[604,945,946],{"class":606,"line":807},[604,947,733],{"emptyLinePlaceholder":732},[604,949,950],{"class":606,"line":816},[604,951,952],{},"  return (\n",[604,954,955],{"class":606,"line":821},[604,956,957],{},"    \u003Cmain>\n",[604,959,960],{"class":606,"line":841},[604,961,962],{},"      \u003Ch1>{page.fields.title as string}\u003C\u002Fh1>\n",[604,964,965],{"class":606,"line":860},[604,966,967],{},"      \u003Cdiv dangerouslySetInnerHTML={{ __html: page.fields.content as string }} \u002F>\n",[604,969,970],{"class":606,"line":880},[604,971,972],{},"    \u003C\u002Fmain>\n",[604,974,975],{"class":606,"line":899},[604,976,977],{},"  )\n",[604,979,981],{"class":606,"line":980},13,[604,982,983],{},"}\n",[909,985,987],{"id":986},"dynamic-routes","Dynamic Routes",[595,989,991],{"className":915,"code":990,"language":917,"meta":600,"style":600},"\u002F\u002F app\u002F[slug]\u002Fpage.tsx\nimport { tento } from '@\u002Flib\u002Ftento'\nimport { notFound } from 'next\u002Fnavigation'\n\nexport async function generateStaticParams() {\n  const pages = await tento.pages.list({ limit: 100 })\n\n  return pages.data.map((page) => ({\n    slug: page.slug,\n  }))\n}\n\nexport default async function Page({ params }: { params: Promise\u003C{ slug: string }> }) {\n  const { slug } = await params\n\n  try {\n    const page = await tento.pages.getBySlug(slug)\n\n    return (\n      \u003Cmain>\n        \u003Ch1>{page.fields.title as string}\u003C\u002Fh1>\n        \u003Cdiv dangerouslySetInnerHTML={{ __html: page.fields.content as string }} \u002F>\n      \u003C\u002Fmain>\n    )\n  } catch (error) {\n    notFound()\n  }\n}\n",[577,992,993,998,1002,1007,1011,1016,1021,1025,1030,1035,1040,1044,1048,1053,1059,1064,1070,1076,1081,1087,1093,1099,1105,1111,1117,1123,1129,1135],{"__ignoreMap":600},[604,994,995],{"class":606,"line":607},[604,996,997],{},"\u002F\u002F app\u002F[slug]\u002Fpage.tsx\n",[604,999,1000],{"class":606,"line":650},[604,1001,929],{},[604,1003,1004],{"class":606,"line":661},[604,1005,1006],{},"import { notFound } from 'next\u002Fnavigation'\n",[604,1008,1009],{"class":606,"line":672},[604,1010,733],{"emptyLinePlaceholder":732},[604,1012,1013],{"class":606,"line":786},[604,1014,1015],{},"export async function generateStaticParams() {\n",[604,1017,1018],{"class":606,"line":807},[604,1019,1020],{},"  const pages = await tento.pages.list({ limit: 100 })\n",[604,1022,1023],{"class":606,"line":816},[604,1024,733],{"emptyLinePlaceholder":732},[604,1026,1027],{"class":606,"line":821},[604,1028,1029],{},"  return pages.data.map((page) => ({\n",[604,1031,1032],{"class":606,"line":841},[604,1033,1034],{},"    slug: page.slug,\n",[604,1036,1037],{"class":606,"line":860},[604,1038,1039],{},"  }))\n",[604,1041,1042],{"class":606,"line":880},[604,1043,983],{},[604,1045,1046],{"class":606,"line":899},[604,1047,733],{"emptyLinePlaceholder":732},[604,1049,1050],{"class":606,"line":980},[604,1051,1052],{},"export default async function Page({ params }: { params: Promise\u003C{ slug: string }> }) {\n",[604,1054,1056],{"class":606,"line":1055},14,[604,1057,1058],{},"  const { slug } = await params\n",[604,1060,1062],{"class":606,"line":1061},15,[604,1063,733],{"emptyLinePlaceholder":732},[604,1065,1067],{"class":606,"line":1066},16,[604,1068,1069],{},"  try {\n",[604,1071,1073],{"class":606,"line":1072},17,[604,1074,1075],{},"    const page = await tento.pages.getBySlug(slug)\n",[604,1077,1079],{"class":606,"line":1078},18,[604,1080,733],{"emptyLinePlaceholder":732},[604,1082,1084],{"class":606,"line":1083},19,[604,1085,1086],{},"    return (\n",[604,1088,1090],{"class":606,"line":1089},20,[604,1091,1092],{},"      \u003Cmain>\n",[604,1094,1096],{"class":606,"line":1095},21,[604,1097,1098],{},"        \u003Ch1>{page.fields.title as string}\u003C\u002Fh1>\n",[604,1100,1102],{"class":606,"line":1101},22,[604,1103,1104],{},"        \u003Cdiv dangerouslySetInnerHTML={{ __html: page.fields.content as string }} \u002F>\n",[604,1106,1108],{"class":606,"line":1107},23,[604,1109,1110],{},"      \u003C\u002Fmain>\n",[604,1112,1114],{"class":606,"line":1113},24,[604,1115,1116],{},"    )\n",[604,1118,1120],{"class":606,"line":1119},25,[604,1121,1122],{},"  } catch (error) {\n",[604,1124,1126],{"class":606,"line":1125},26,[604,1127,1128],{},"    notFound()\n",[604,1130,1132],{"class":606,"line":1131},27,[604,1133,1134],{},"  }\n",[604,1136,1138],{"class":606,"line":1137},28,[604,1139,983],{},[909,1141,22],{"id":1142},"collections",[595,1144,1146],{"className":915,"code":1145,"language":917,"meta":600,"style":600},"\u002F\u002F app\u002Fproducts\u002Fpage.tsx\nimport { tento } from '@\u002Flib\u002Ftento'\n\nexport default async function ProductsPage() {\n  const products = await tento.collections.list('products', {\n    limit: 20,\n    sort: '-createdAt'\n  })\n\n  \u002F\u002F `data` is an array for normal collections, or a single item for singletons —\n  \u002F\u002F normalise to an array before mapping.\n  const items = Array.isArray(products.data) ? products.data : [products.data]\n\n  return (\n    \u003Cdiv className=\"grid grid-cols-3 gap-4\">\n      {items.map((product) => (\n        \u003Cdiv key={product.slug as string}>\n          \u003Ch3>{product.name as string}\u003C\u002Fh3>\n          \u003Cp>${product.price as number}\u003C\u002Fp>\n        \u003C\u002Fdiv>\n      ))}\n    \u003C\u002Fdiv>\n  )\n}\n",[577,1147,1148,1153,1157,1161,1166,1171,1176,1181,1186,1190,1195,1200,1205,1209,1213,1218,1223,1228,1233,1238,1243,1248,1253,1257],{"__ignoreMap":600},[604,1149,1150],{"class":606,"line":607},[604,1151,1152],{},"\u002F\u002F app\u002Fproducts\u002Fpage.tsx\n",[604,1154,1155],{"class":606,"line":650},[604,1156,929],{},[604,1158,1159],{"class":606,"line":661},[604,1160,733],{"emptyLinePlaceholder":732},[604,1162,1163],{"class":606,"line":672},[604,1164,1165],{},"export default async function ProductsPage() {\n",[604,1167,1168],{"class":606,"line":786},[604,1169,1170],{},"  const products = await tento.collections.list('products', {\n",[604,1172,1173],{"class":606,"line":807},[604,1174,1175],{},"    limit: 20,\n",[604,1177,1178],{"class":606,"line":816},[604,1179,1180],{},"    sort: '-createdAt'\n",[604,1182,1183],{"class":606,"line":821},[604,1184,1185],{},"  })\n",[604,1187,1188],{"class":606,"line":841},[604,1189,733],{"emptyLinePlaceholder":732},[604,1191,1192],{"class":606,"line":860},[604,1193,1194],{},"  \u002F\u002F `data` is an array for normal collections, or a single item for singletons —\n",[604,1196,1197],{"class":606,"line":880},[604,1198,1199],{},"  \u002F\u002F normalise to an array before mapping.\n",[604,1201,1202],{"class":606,"line":899},[604,1203,1204],{},"  const items = Array.isArray(products.data) ? products.data : [products.data]\n",[604,1206,1207],{"class":606,"line":980},[604,1208,733],{"emptyLinePlaceholder":732},[604,1210,1211],{"class":606,"line":1055},[604,1212,952],{},[604,1214,1215],{"class":606,"line":1061},[604,1216,1217],{},"    \u003Cdiv className=\"grid grid-cols-3 gap-4\">\n",[604,1219,1220],{"class":606,"line":1066},[604,1221,1222],{},"      {items.map((product) => (\n",[604,1224,1225],{"class":606,"line":1072},[604,1226,1227],{},"        \u003Cdiv key={product.slug as string}>\n",[604,1229,1230],{"class":606,"line":1078},[604,1231,1232],{},"          \u003Ch3>{product.name as string}\u003C\u002Fh3>\n",[604,1234,1235],{"class":606,"line":1083},[604,1236,1237],{},"          \u003Cp>${product.price as number}\u003C\u002Fp>\n",[604,1239,1240],{"class":606,"line":1089},[604,1241,1242],{},"        \u003C\u002Fdiv>\n",[604,1244,1245],{"class":606,"line":1095},[604,1246,1247],{},"      ))}\n",[604,1249,1250],{"class":606,"line":1101},[604,1251,1252],{},"    \u003C\u002Fdiv>\n",[604,1254,1255],{"class":606,"line":1107},[604,1256,977],{},[604,1258,1259],{"class":606,"line":1113},[604,1260,983],{},[909,1262,1264],{"id":1263},"blog-posts","Blog Posts",[595,1266,1268],{"className":915,"code":1267,"language":917,"meta":600,"style":600},"\u002F\u002F app\u002Fblog\u002Fpage.tsx\nimport { tento } from '@\u002Flib\u002Ftento'\nimport Link from 'next\u002Flink'\n\nexport default async function BlogPage() {\n  const posts = await tento.blog.posts.list({\n    limit: 10,\n    sort: '-publishedAt'\n  })\n\n  return (\n    \u003Cdiv>\n      \u003Ch1>Blog\u003C\u002Fh1>\n      \u003Cdiv className=\"space-y-4\">\n        {posts.data.map((post) => (\n          \u003Carticle key={post.id}>\n            \u003CLink href={`\u002Fblog\u002F${post.slug}`}>\n              \u003Ch2>{post.title}\u003C\u002Fh2>\n            \u003C\u002FLink>\n            \u003Cp>{post.excerpt}\u003C\u002Fp>\n            \u003Ctime>{post.publishedAt}\u003C\u002Ftime>\n          \u003C\u002Farticle>\n        ))}\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  )\n}\n",[577,1269,1270,1275,1279,1284,1288,1293,1298,1303,1308,1312,1316,1320,1325,1330,1335,1340,1345,1350,1355,1360,1365,1370,1375,1380,1385,1389,1393],{"__ignoreMap":600},[604,1271,1272],{"class":606,"line":607},[604,1273,1274],{},"\u002F\u002F app\u002Fblog\u002Fpage.tsx\n",[604,1276,1277],{"class":606,"line":650},[604,1278,929],{},[604,1280,1281],{"class":606,"line":661},[604,1282,1283],{},"import Link from 'next\u002Flink'\n",[604,1285,1286],{"class":606,"line":672},[604,1287,733],{"emptyLinePlaceholder":732},[604,1289,1290],{"class":606,"line":786},[604,1291,1292],{},"export default async function BlogPage() {\n",[604,1294,1295],{"class":606,"line":807},[604,1296,1297],{},"  const posts = await tento.blog.posts.list({\n",[604,1299,1300],{"class":606,"line":816},[604,1301,1302],{},"    limit: 10,\n",[604,1304,1305],{"class":606,"line":821},[604,1306,1307],{},"    sort: '-publishedAt'\n",[604,1309,1310],{"class":606,"line":841},[604,1311,1185],{},[604,1313,1314],{"class":606,"line":860},[604,1315,733],{"emptyLinePlaceholder":732},[604,1317,1318],{"class":606,"line":880},[604,1319,952],{},[604,1321,1322],{"class":606,"line":899},[604,1323,1324],{},"    \u003Cdiv>\n",[604,1326,1327],{"class":606,"line":980},[604,1328,1329],{},"      \u003Ch1>Blog\u003C\u002Fh1>\n",[604,1331,1332],{"class":606,"line":1055},[604,1333,1334],{},"      \u003Cdiv className=\"space-y-4\">\n",[604,1336,1337],{"class":606,"line":1061},[604,1338,1339],{},"        {posts.data.map((post) => (\n",[604,1341,1342],{"class":606,"line":1066},[604,1343,1344],{},"          \u003Carticle key={post.id}>\n",[604,1346,1347],{"class":606,"line":1072},[604,1348,1349],{},"            \u003CLink href={`\u002Fblog\u002F${post.slug}`}>\n",[604,1351,1352],{"class":606,"line":1078},[604,1353,1354],{},"              \u003Ch2>{post.title}\u003C\u002Fh2>\n",[604,1356,1357],{"class":606,"line":1083},[604,1358,1359],{},"            \u003C\u002FLink>\n",[604,1361,1362],{"class":606,"line":1089},[604,1363,1364],{},"            \u003Cp>{post.excerpt}\u003C\u002Fp>\n",[604,1366,1367],{"class":606,"line":1095},[604,1368,1369],{},"            \u003Ctime>{post.publishedAt}\u003C\u002Ftime>\n",[604,1371,1372],{"class":606,"line":1101},[604,1373,1374],{},"          \u003C\u002Farticle>\n",[604,1376,1377],{"class":606,"line":1107},[604,1378,1379],{},"        ))}\n",[604,1381,1382],{"class":606,"line":1113},[604,1383,1384],{},"      \u003C\u002Fdiv>\n",[604,1386,1387],{"class":606,"line":1119},[604,1388,1252],{},[604,1390,1391],{"class":606,"line":1125},[604,1392,977],{},[604,1394,1395],{"class":606,"line":1131},[604,1396,983],{},[686,1398,1400],{"id":1399},"preview-mode","Preview Mode",[909,1402,1404],{"id":1403},"create-preview-api-route","Create Preview API Route",[567,1406,625,1407,629],{},[577,1408,1409],{},"app\u002Fapi\u002Fpreview\u002Froute.ts",[595,1411,1413],{"className":697,"code":1412,"language":699,"meta":600,"style":600},"import { draftMode } from 'next\u002Fheaders'\nimport { redirect } from 'next\u002Fnavigation'\n\nexport async function GET(request: Request) {\n  const { searchParams } = new URL(request.url)\n  const secret = searchParams.get('secret')\n  const slug = searchParams.get('slug')\n\n  \u002F\u002F Validate secret\n  if (secret !== process.env.PREVIEW_SECRET) {\n    return new Response('Invalid secret', { status: 401 })\n  }\n\n  if (!slug) {\n    return new Response('Missing slug', { status: 400 })\n  }\n\n  \u002F\u002F Enable draft mode (draftMode() is async in Next.js 15)\n  ;(await draftMode()).enable()\n\n  \u002F\u002F Redirect to the page\n  redirect(`\u002F${slug}`)\n}\n",[577,1414,1415,1435,1455,1459,1489,1520,1548,1574,1578,1584,1612,1649,1653,1657,1672,1704,1708,1712,1717,1740,1744,1749,1772],{"__ignoreMap":600},[604,1416,1417,1419,1421,1424,1426,1428,1430,1433],{"class":606,"line":607},[604,1418,707],{"class":706},[604,1420,710],{"class":643},[604,1422,1423],{"class":639}," draftMode",[604,1425,716],{"class":643},[604,1427,719],{"class":706},[604,1429,722],{"class":643},[604,1431,1432],{"class":614},"next\u002Fheaders",[604,1434,727],{"class":643},[604,1436,1437,1439,1441,1444,1446,1448,1450,1453],{"class":606,"line":650},[604,1438,707],{"class":706},[604,1440,710],{"class":643},[604,1442,1443],{"class":639}," redirect",[604,1445,716],{"class":643},[604,1447,719],{"class":706},[604,1449,722],{"class":643},[604,1451,1452],{"class":614},"next\u002Fnavigation",[604,1454,727],{"class":643},[604,1456,1457],{"class":606,"line":661},[604,1458,733],{"emptyLinePlaceholder":732},[604,1460,1461,1463,1466,1469,1472,1474,1478,1480,1483,1486],{"class":606,"line":672},[604,1462,738],{"class":706},[604,1464,1465],{"class":741}," async",[604,1467,1468],{"class":741}," function",[604,1470,1471],{"class":753}," GET",[604,1473,756],{"class":643},[604,1475,1477],{"class":1476},"sHdIc","request",[604,1479,629],{"class":643},[604,1481,1482],{"class":610}," Request",[604,1484,1485],{"class":643},")",[604,1487,1488],{"class":643}," {\n",[604,1490,1491,1494,1496,1499,1501,1504,1506,1509,1511,1513,1515,1518],{"class":606,"line":786},[604,1492,1493],{"class":741},"  const",[604,1495,710],{"class":643},[604,1497,1498],{"class":639}," searchParams",[604,1500,716],{"class":643},[604,1502,1503],{"class":643}," =",[604,1505,750],{"class":643},[604,1507,1508],{"class":753}," URL",[604,1510,756],{"class":764},[604,1512,1477],{"class":639},[604,1514,773],{"class":643},[604,1516,1517],{"class":639},"url",[604,1519,813],{"class":764},[604,1521,1522,1524,1527,1529,1531,1533,1536,1538,1541,1544,1546],{"class":606,"line":807},[604,1523,1493],{"class":741},[604,1525,1526],{"class":639}," secret",[604,1528,1503],{"class":643},[604,1530,1498],{"class":639},[604,1532,773],{"class":643},[604,1534,1535],{"class":753},"get",[604,1537,756],{"class":764},[604,1539,1540],{"class":643},"'",[604,1542,1543],{"class":614},"secret",[604,1545,1540],{"class":643},[604,1547,813],{"class":764},[604,1549,1550,1552,1555,1557,1559,1561,1563,1565,1567,1570,1572],{"class":606,"line":816},[604,1551,1493],{"class":741},[604,1553,1554],{"class":639}," slug",[604,1556,1503],{"class":643},[604,1558,1498],{"class":639},[604,1560,773],{"class":643},[604,1562,1535],{"class":753},[604,1564,756],{"class":764},[604,1566,1540],{"class":643},[604,1568,1569],{"class":614},"slug",[604,1571,1540],{"class":643},[604,1573,813],{"class":764},[604,1575,1576],{"class":606,"line":821},[604,1577,733],{"emptyLinePlaceholder":732},[604,1579,1580],{"class":606,"line":841},[604,1581,1583],{"class":1582},"sHwdD","  \u002F\u002F Validate secret\n",[604,1585,1586,1589,1592,1594,1597,1599,1601,1603,1605,1607,1610],{"class":606,"line":860},[604,1587,1588],{"class":706},"  if",[604,1590,1591],{"class":764}," (",[604,1593,1543],{"class":639},[604,1595,1596],{"class":643}," !==",[604,1598,770],{"class":639},[604,1600,773],{"class":643},[604,1602,776],{"class":639},[604,1604,773],{"class":643},[604,1606,675],{"class":639},[604,1608,1609],{"class":764},") ",[604,1611,759],{"class":643},[604,1613,1614,1617,1619,1622,1624,1626,1629,1631,1634,1636,1639,1641,1645,1647],{"class":606,"line":880},[604,1615,1616],{"class":706},"    return",[604,1618,750],{"class":643},[604,1620,1621],{"class":753}," Response",[604,1623,756],{"class":764},[604,1625,1540],{"class":643},[604,1627,1628],{"class":614},"Invalid secret",[604,1630,1540],{"class":643},[604,1632,1633],{"class":643},",",[604,1635,710],{"class":643},[604,1637,1638],{"class":764}," status",[604,1640,629],{"class":643},[604,1642,1644],{"class":1643},"sbssI"," 401",[604,1646,716],{"class":643},[604,1648,813],{"class":764},[604,1650,1651],{"class":606,"line":899},[604,1652,1134],{"class":643},[604,1654,1655],{"class":606,"line":980},[604,1656,733],{"emptyLinePlaceholder":732},[604,1658,1659,1661,1663,1666,1668,1670],{"class":606,"line":1055},[604,1660,1588],{"class":706},[604,1662,1591],{"class":764},[604,1664,1665],{"class":643},"!",[604,1667,1569],{"class":639},[604,1669,1609],{"class":764},[604,1671,759],{"class":643},[604,1673,1674,1676,1678,1680,1682,1684,1687,1689,1691,1693,1695,1697,1700,1702],{"class":606,"line":1061},[604,1675,1616],{"class":706},[604,1677,750],{"class":643},[604,1679,1621],{"class":753},[604,1681,756],{"class":764},[604,1683,1540],{"class":643},[604,1685,1686],{"class":614},"Missing slug",[604,1688,1540],{"class":643},[604,1690,1633],{"class":643},[604,1692,710],{"class":643},[604,1694,1638],{"class":764},[604,1696,629],{"class":643},[604,1698,1699],{"class":1643}," 400",[604,1701,716],{"class":643},[604,1703,813],{"class":764},[604,1705,1706],{"class":606,"line":1066},[604,1707,1134],{"class":643},[604,1709,1710],{"class":606,"line":1072},[604,1711,733],{"emptyLinePlaceholder":732},[604,1713,1714],{"class":606,"line":1078},[604,1715,1716],{"class":1582},"  \u002F\u002F Enable draft mode (draftMode() is async in Next.js 15)\n",[604,1718,1719,1722,1724,1727,1729,1732,1734,1737],{"class":606,"line":1083},[604,1720,1721],{"class":643},"  ;",[604,1723,756],{"class":764},[604,1725,1726],{"class":706},"await",[604,1728,1423],{"class":753},[604,1730,1731],{"class":764},"())",[604,1733,773],{"class":643},[604,1735,1736],{"class":753},"enable",[604,1738,1739],{"class":764},"()\n",[604,1741,1742],{"class":606,"line":1089},[604,1743,733],{"emptyLinePlaceholder":732},[604,1745,1746],{"class":606,"line":1095},[604,1747,1748],{"class":1582},"  \u002F\u002F Redirect to the page\n",[604,1750,1751,1754,1756,1759,1762,1765,1767,1770],{"class":606,"line":1101},[604,1752,1753],{"class":753},"  redirect",[604,1755,756],{"class":764},[604,1757,1758],{"class":643},"`",[604,1760,1761],{"class":614},"\u002F",[604,1763,1764],{"class":643},"${",[604,1766,1569],{"class":639},[604,1768,1769],{"class":643},"}`",[604,1771,813],{"class":764},[604,1773,1774],{"class":606,"line":1107},[604,1775,983],{"class":643},[909,1777,1779],{"id":1778},"create-exit-preview-route","Create Exit Preview Route",[567,1781,625,1782,629],{},[577,1783,1784],{},"app\u002Fapi\u002Fexit-preview\u002Froute.ts",[595,1786,1788],{"className":697,"code":1787,"language":699,"meta":600,"style":600},"import { draftMode } from 'next\u002Fheaders'\nimport { redirect } from 'next\u002Fnavigation'\n\nexport async function GET() {\n  ;(await draftMode()).disable()\n  redirect('\u002F')\n}\n",[577,1789,1790,1808,1826,1830,1845,1864,1878],{"__ignoreMap":600},[604,1791,1792,1794,1796,1798,1800,1802,1804,1806],{"class":606,"line":607},[604,1793,707],{"class":706},[604,1795,710],{"class":643},[604,1797,1423],{"class":639},[604,1799,716],{"class":643},[604,1801,719],{"class":706},[604,1803,722],{"class":643},[604,1805,1432],{"class":614},[604,1807,727],{"class":643},[604,1809,1810,1812,1814,1816,1818,1820,1822,1824],{"class":606,"line":650},[604,1811,707],{"class":706},[604,1813,710],{"class":643},[604,1815,1443],{"class":639},[604,1817,716],{"class":643},[604,1819,719],{"class":706},[604,1821,722],{"class":643},[604,1823,1452],{"class":614},[604,1825,727],{"class":643},[604,1827,1828],{"class":606,"line":661},[604,1829,733],{"emptyLinePlaceholder":732},[604,1831,1832,1834,1836,1838,1840,1843],{"class":606,"line":672},[604,1833,738],{"class":706},[604,1835,1465],{"class":741},[604,1837,1468],{"class":741},[604,1839,1471],{"class":753},[604,1841,1842],{"class":643},"()",[604,1844,1488],{"class":643},[604,1846,1847,1849,1851,1853,1855,1857,1859,1862],{"class":606,"line":786},[604,1848,1721],{"class":643},[604,1850,756],{"class":764},[604,1852,1726],{"class":706},[604,1854,1423],{"class":753},[604,1856,1731],{"class":764},[604,1858,773],{"class":643},[604,1860,1861],{"class":753},"disable",[604,1863,1739],{"class":764},[604,1865,1866,1868,1870,1872,1874,1876],{"class":606,"line":807},[604,1867,1753],{"class":753},[604,1869,756],{"class":764},[604,1871,1540],{"class":643},[604,1873,1761],{"class":614},[604,1875,1540],{"class":643},[604,1877,813],{"class":764},[604,1879,1880],{"class":606,"line":816},[604,1881,983],{"class":643},[909,1883,1885],{"id":1884},"use-preview-mode-in-pages","Use Preview Mode in Pages",[595,1887,1889],{"className":915,"code":1888,"language":917,"meta":600,"style":600},"\u002F\u002F app\u002F[slug]\u002Fpage.tsx\nimport { draftMode } from 'next\u002Fheaders'\nimport { tento, tentoPreview } from '@\u002Flib\u002Ftento'\nimport { notFound } from 'next\u002Fnavigation'\n\nexport default async function Page({ params }: { params: Promise\u003C{ slug: string }> }) {\n  const { slug } = await params\n  const { isEnabled } = await draftMode()\n  const client = isEnabled ? tentoPreview : tento\n\n  try {\n    const page = await client.pages.getBySlug(slug)\n\n    return (\n      \u003Cmain>\n        {isEnabled && (\n          \u003Cdiv className=\"bg-yellow-400 p-4 text-center\">\n            ⚠️ Preview Mode - Viewing Draft Content\n            \u003Ca href=\"\u002Fapi\u002Fexit-preview\" className=\"ml-4 underline\">\n              Exit Preview\n            \u003C\u002Fa>\n          \u003C\u002Fdiv>\n        )}\n\n        \u003Ch1>{page.fields.title as string}\u003C\u002Fh1>\n        \u003Cdiv dangerouslySetInnerHTML={{ __html: page.fields.content as string }} \u002F>\n      \u003C\u002Fmain>\n    )\n  } catch (error) {\n    notFound()\n  }\n}\n",[577,1890,1891,1895,1900,1905,1909,1913,1917,1921,1926,1931,1935,1939,1944,1948,1952,1956,1961,1966,1971,1976,1981,1986,1991,1996,2000,2004,2008,2012,2016,2021,2026,2031],{"__ignoreMap":600},[604,1892,1893],{"class":606,"line":607},[604,1894,997],{},[604,1896,1897],{"class":606,"line":650},[604,1898,1899],{},"import { draftMode } from 'next\u002Fheaders'\n",[604,1901,1902],{"class":606,"line":661},[604,1903,1904],{},"import { tento, tentoPreview } from '@\u002Flib\u002Ftento'\n",[604,1906,1907],{"class":606,"line":672},[604,1908,1006],{},[604,1910,1911],{"class":606,"line":786},[604,1912,733],{"emptyLinePlaceholder":732},[604,1914,1915],{"class":606,"line":807},[604,1916,1052],{},[604,1918,1919],{"class":606,"line":816},[604,1920,1058],{},[604,1922,1923],{"class":606,"line":821},[604,1924,1925],{},"  const { isEnabled } = await draftMode()\n",[604,1927,1928],{"class":606,"line":841},[604,1929,1930],{},"  const client = isEnabled ? tentoPreview : tento\n",[604,1932,1933],{"class":606,"line":860},[604,1934,733],{"emptyLinePlaceholder":732},[604,1936,1937],{"class":606,"line":880},[604,1938,1069],{},[604,1940,1941],{"class":606,"line":899},[604,1942,1943],{},"    const page = await client.pages.getBySlug(slug)\n",[604,1945,1946],{"class":606,"line":980},[604,1947,733],{"emptyLinePlaceholder":732},[604,1949,1950],{"class":606,"line":1055},[604,1951,1086],{},[604,1953,1954],{"class":606,"line":1061},[604,1955,1092],{},[604,1957,1958],{"class":606,"line":1066},[604,1959,1960],{},"        {isEnabled && (\n",[604,1962,1963],{"class":606,"line":1072},[604,1964,1965],{},"          \u003Cdiv className=\"bg-yellow-400 p-4 text-center\">\n",[604,1967,1968],{"class":606,"line":1078},[604,1969,1970],{},"            ⚠️ Preview Mode - Viewing Draft Content\n",[604,1972,1973],{"class":606,"line":1083},[604,1974,1975],{},"            \u003Ca href=\"\u002Fapi\u002Fexit-preview\" className=\"ml-4 underline\">\n",[604,1977,1978],{"class":606,"line":1089},[604,1979,1980],{},"              Exit Preview\n",[604,1982,1983],{"class":606,"line":1095},[604,1984,1985],{},"            \u003C\u002Fa>\n",[604,1987,1988],{"class":606,"line":1101},[604,1989,1990],{},"          \u003C\u002Fdiv>\n",[604,1992,1993],{"class":606,"line":1107},[604,1994,1995],{},"        )}\n",[604,1997,1998],{"class":606,"line":1113},[604,1999,733],{"emptyLinePlaceholder":732},[604,2001,2002],{"class":606,"line":1119},[604,2003,1098],{},[604,2005,2006],{"class":606,"line":1125},[604,2007,1104],{},[604,2009,2010],{"class":606,"line":1131},[604,2011,1110],{},[604,2013,2014],{"class":606,"line":1137},[604,2015,1116],{},[604,2017,2019],{"class":606,"line":2018},29,[604,2020,1122],{},[604,2022,2024],{"class":606,"line":2023},30,[604,2025,1128],{},[604,2027,2029],{"class":606,"line":2028},31,[604,2030,1134],{},[604,2032,2034],{"class":606,"line":2033},32,[604,2035,983],{},[686,2037,2038],{"id":699},"TypeScript",[595,2040,2042],{"className":915,"code":2041,"language":917,"meta":600,"style":600},"\u002F\u002F types\u002Fcontent.ts\nexport interface HomepageContent {\n  heroTitle: string\n  heroSubtitle: string\n  heroImage: string\n  features: Array\u003C{\n    title: string\n    description: string\n  }>\n}\n\n\u002F\u002F app\u002Fpage.tsx\nimport { tento } from '@\u002Flib\u002Ftento'\nimport type { HomepageContent } from '@\u002Ftypes\u002Fcontent'\n\nexport default async function HomePage() {\n  const page = await tento.pages.getBySlug\u003CHomepageContent>('homepage')\n\n  return (\n    \u003Cmain>\n      \u003Ch1>{page.fields.heroTitle}\u003C\u002Fh1>\n      \u003Cp>{page.fields.heroSubtitle}\u003C\u002Fp>\n      {page.fields.features.map((feature, i) => (\n        \u003Cdiv key={i}>\n          \u003Ch3>{feature.title}\u003C\u002Fh3>\n          \u003Cp>{feature.description}\u003C\u002Fp>\n        \u003C\u002Fdiv>\n      ))}\n    \u003C\u002Fmain>\n  )\n}\n",[577,2043,2044,2049,2054,2059,2064,2069,2074,2079,2084,2089,2093,2097,2101,2105,2110,2114,2118,2123,2127,2131,2135,2140,2145,2150,2155,2160,2165,2169,2173,2177,2181],{"__ignoreMap":600},[604,2045,2046],{"class":606,"line":607},[604,2047,2048],{},"\u002F\u002F types\u002Fcontent.ts\n",[604,2050,2051],{"class":606,"line":650},[604,2052,2053],{},"export interface HomepageContent {\n",[604,2055,2056],{"class":606,"line":661},[604,2057,2058],{},"  heroTitle: string\n",[604,2060,2061],{"class":606,"line":672},[604,2062,2063],{},"  heroSubtitle: string\n",[604,2065,2066],{"class":606,"line":786},[604,2067,2068],{},"  heroImage: string\n",[604,2070,2071],{"class":606,"line":807},[604,2072,2073],{},"  features: Array\u003C{\n",[604,2075,2076],{"class":606,"line":816},[604,2077,2078],{},"    title: string\n",[604,2080,2081],{"class":606,"line":821},[604,2082,2083],{},"    description: string\n",[604,2085,2086],{"class":606,"line":841},[604,2087,2088],{},"  }>\n",[604,2090,2091],{"class":606,"line":860},[604,2092,983],{},[604,2094,2095],{"class":606,"line":880},[604,2096,733],{"emptyLinePlaceholder":732},[604,2098,2099],{"class":606,"line":899},[604,2100,924],{},[604,2102,2103],{"class":606,"line":980},[604,2104,929],{},[604,2106,2107],{"class":606,"line":1055},[604,2108,2109],{},"import type { HomepageContent } from '@\u002Ftypes\u002Fcontent'\n",[604,2111,2112],{"class":606,"line":1061},[604,2113,733],{"emptyLinePlaceholder":732},[604,2115,2116],{"class":606,"line":1066},[604,2117,938],{},[604,2119,2120],{"class":606,"line":1072},[604,2121,2122],{},"  const page = await tento.pages.getBySlug\u003CHomepageContent>('homepage')\n",[604,2124,2125],{"class":606,"line":1078},[604,2126,733],{"emptyLinePlaceholder":732},[604,2128,2129],{"class":606,"line":1083},[604,2130,952],{},[604,2132,2133],{"class":606,"line":1089},[604,2134,957],{},[604,2136,2137],{"class":606,"line":1095},[604,2138,2139],{},"      \u003Ch1>{page.fields.heroTitle}\u003C\u002Fh1>\n",[604,2141,2142],{"class":606,"line":1101},[604,2143,2144],{},"      \u003Cp>{page.fields.heroSubtitle}\u003C\u002Fp>\n",[604,2146,2147],{"class":606,"line":1107},[604,2148,2149],{},"      {page.fields.features.map((feature, i) => (\n",[604,2151,2152],{"class":606,"line":1113},[604,2153,2154],{},"        \u003Cdiv key={i}>\n",[604,2156,2157],{"class":606,"line":1119},[604,2158,2159],{},"          \u003Ch3>{feature.title}\u003C\u002Fh3>\n",[604,2161,2162],{"class":606,"line":1125},[604,2163,2164],{},"          \u003Cp>{feature.description}\u003C\u002Fp>\n",[604,2166,2167],{"class":606,"line":1131},[604,2168,1242],{},[604,2170,2171],{"class":606,"line":1137},[604,2172,1247],{},[604,2174,2175],{"class":606,"line":2018},[604,2176,972],{},[604,2178,2179],{"class":606,"line":2023},[604,2180,977],{},[604,2182,2183],{"class":606,"line":2028},[604,2184,983],{},[686,2186,2188],{"id":2187},"caching-revalidation","Caching & Revalidation",[909,2190,2192],{"id":2191},"time-based-revalidation","Time-based Revalidation",[595,2194,2196],{"className":915,"code":2195,"language":917,"meta":600,"style":600},"\u002F\u002F Revalidate every 60 seconds\nexport const revalidate = 60\n\nexport default async function HomePage() {\n  const page = await tento.pages.getBySlug('homepage')\n  return \u003Cdiv>{page.fields.title as string}\u003C\u002Fdiv>\n}\n",[577,2197,2198,2203,2208,2212,2216,2220,2225],{"__ignoreMap":600},[604,2199,2200],{"class":606,"line":607},[604,2201,2202],{},"\u002F\u002F Revalidate every 60 seconds\n",[604,2204,2205],{"class":606,"line":650},[604,2206,2207],{},"export const revalidate = 60\n",[604,2209,2210],{"class":606,"line":661},[604,2211,733],{"emptyLinePlaceholder":732},[604,2213,2214],{"class":606,"line":672},[604,2215,938],{},[604,2217,2218],{"class":606,"line":786},[604,2219,943],{},[604,2221,2222],{"class":606,"line":807},[604,2223,2224],{},"  return \u003Cdiv>{page.fields.title as string}\u003C\u002Fdiv>\n",[604,2226,2227],{"class":606,"line":816},[604,2228,983],{},[909,2230,2232],{"id":2231},"on-demand-revalidation","On-demand Revalidation",[567,2234,625,2235,629],{},[577,2236,2237],{},"app\u002Fapi\u002Frevalidate\u002Froute.ts",[595,2239,2241],{"className":697,"code":2240,"language":699,"meta":600,"style":600},"import { revalidatePath } from 'next\u002Fcache'\nimport { NextRequest } from 'next\u002Fserver'\n\nexport async function POST(request: NextRequest) {\n  const secret = request.nextUrl.searchParams.get('secret')\n\n  \u002F\u002F Validate secret\n  if (secret !== process.env.REVALIDATE_SECRET) {\n    return Response.json({ message: 'Invalid secret' }, { status: 401 })\n  }\n\n  const { path } = await request.json()\n\n  try {\n    revalidatePath(path)\n    return Response.json({ revalidated: true })\n  } catch (err) {\n    return Response.json({ message: 'Error revalidating' }, { status: 500 })\n  }\n}\n",[577,2242,2243,2263,2283,2287,2310,2345,2349,2353,2378,2420,2424,2428,2452,2456,2463,2475,2502,2519,2559,2563],{"__ignoreMap":600},[604,2244,2245,2247,2249,2252,2254,2256,2258,2261],{"class":606,"line":607},[604,2246,707],{"class":706},[604,2248,710],{"class":643},[604,2250,2251],{"class":639}," revalidatePath",[604,2253,716],{"class":643},[604,2255,719],{"class":706},[604,2257,722],{"class":643},[604,2259,2260],{"class":614},"next\u002Fcache",[604,2262,727],{"class":643},[604,2264,2265,2267,2269,2272,2274,2276,2278,2281],{"class":606,"line":650},[604,2266,707],{"class":706},[604,2268,710],{"class":643},[604,2270,2271],{"class":639}," NextRequest",[604,2273,716],{"class":643},[604,2275,719],{"class":706},[604,2277,722],{"class":643},[604,2279,2280],{"class":614},"next\u002Fserver",[604,2282,727],{"class":643},[604,2284,2285],{"class":606,"line":661},[604,2286,733],{"emptyLinePlaceholder":732},[604,2288,2289,2291,2293,2295,2298,2300,2302,2304,2306,2308],{"class":606,"line":672},[604,2290,738],{"class":706},[604,2292,1465],{"class":741},[604,2294,1468],{"class":741},[604,2296,2297],{"class":753}," POST",[604,2299,756],{"class":643},[604,2301,1477],{"class":1476},[604,2303,629],{"class":643},[604,2305,2271],{"class":610},[604,2307,1485],{"class":643},[604,2309,1488],{"class":643},[604,2311,2312,2314,2316,2318,2321,2323,2326,2328,2331,2333,2335,2337,2339,2341,2343],{"class":606,"line":786},[604,2313,1493],{"class":741},[604,2315,1526],{"class":639},[604,2317,1503],{"class":643},[604,2319,2320],{"class":639}," request",[604,2322,773],{"class":643},[604,2324,2325],{"class":639},"nextUrl",[604,2327,773],{"class":643},[604,2329,2330],{"class":639},"searchParams",[604,2332,773],{"class":643},[604,2334,1535],{"class":753},[604,2336,756],{"class":764},[604,2338,1540],{"class":643},[604,2340,1543],{"class":614},[604,2342,1540],{"class":643},[604,2344,813],{"class":764},[604,2346,2347],{"class":606,"line":807},[604,2348,733],{"emptyLinePlaceholder":732},[604,2350,2351],{"class":606,"line":816},[604,2352,1583],{"class":1582},[604,2354,2355,2357,2359,2361,2363,2365,2367,2369,2371,2374,2376],{"class":606,"line":821},[604,2356,1588],{"class":706},[604,2358,1591],{"class":764},[604,2360,1543],{"class":639},[604,2362,1596],{"class":643},[604,2364,770],{"class":639},[604,2366,773],{"class":643},[604,2368,776],{"class":639},[604,2370,773],{"class":643},[604,2372,2373],{"class":639},"REVALIDATE_SECRET",[604,2375,1609],{"class":764},[604,2377,759],{"class":643},[604,2379,2380,2382,2384,2386,2389,2391,2394,2397,2399,2401,2403,2405,2408,2410,2412,2414,2416,2418],{"class":606,"line":841},[604,2381,1616],{"class":706},[604,2383,1621],{"class":639},[604,2385,773],{"class":643},[604,2387,2388],{"class":753},"json",[604,2390,756],{"class":764},[604,2392,2393],{"class":643},"{",[604,2395,2396],{"class":764}," message",[604,2398,629],{"class":643},[604,2400,722],{"class":643},[604,2402,1628],{"class":614},[604,2404,1540],{"class":643},[604,2406,2407],{"class":643}," },",[604,2409,710],{"class":643},[604,2411,1638],{"class":764},[604,2413,629],{"class":643},[604,2415,1644],{"class":1643},[604,2417,716],{"class":643},[604,2419,813],{"class":764},[604,2421,2422],{"class":606,"line":860},[604,2423,1134],{"class":643},[604,2425,2426],{"class":606,"line":880},[604,2427,733],{"emptyLinePlaceholder":732},[604,2429,2430,2432,2434,2437,2439,2441,2444,2446,2448,2450],{"class":606,"line":899},[604,2431,1493],{"class":741},[604,2433,710],{"class":643},[604,2435,2436],{"class":639}," path",[604,2438,716],{"class":643},[604,2440,1503],{"class":643},[604,2442,2443],{"class":706}," await",[604,2445,2320],{"class":639},[604,2447,773],{"class":643},[604,2449,2388],{"class":753},[604,2451,1739],{"class":764},[604,2453,2454],{"class":606,"line":980},[604,2455,733],{"emptyLinePlaceholder":732},[604,2457,2458,2461],{"class":606,"line":1055},[604,2459,2460],{"class":706},"  try",[604,2462,1488],{"class":643},[604,2464,2465,2468,2470,2473],{"class":606,"line":1061},[604,2466,2467],{"class":753},"    revalidatePath",[604,2469,756],{"class":764},[604,2471,2472],{"class":639},"path",[604,2474,813],{"class":764},[604,2476,2477,2479,2481,2483,2485,2487,2489,2492,2494,2498,2500],{"class":606,"line":1066},[604,2478,1616],{"class":706},[604,2480,1621],{"class":639},[604,2482,773],{"class":643},[604,2484,2388],{"class":753},[604,2486,756],{"class":764},[604,2488,2393],{"class":643},[604,2490,2491],{"class":764}," revalidated",[604,2493,629],{"class":643},[604,2495,2497],{"class":2496},"sfNiH"," true",[604,2499,716],{"class":643},[604,2501,813],{"class":764},[604,2503,2504,2507,2510,2512,2515,2517],{"class":606,"line":1072},[604,2505,2506],{"class":643},"  }",[604,2508,2509],{"class":706}," catch",[604,2511,1591],{"class":764},[604,2513,2514],{"class":639},"err",[604,2516,1609],{"class":764},[604,2518,759],{"class":643},[604,2520,2521,2523,2525,2527,2529,2531,2533,2535,2537,2539,2542,2544,2546,2548,2550,2552,2555,2557],{"class":606,"line":1078},[604,2522,1616],{"class":706},[604,2524,1621],{"class":639},[604,2526,773],{"class":643},[604,2528,2388],{"class":753},[604,2530,756],{"class":764},[604,2532,2393],{"class":643},[604,2534,2396],{"class":764},[604,2536,629],{"class":643},[604,2538,722],{"class":643},[604,2540,2541],{"class":614},"Error revalidating",[604,2543,1540],{"class":643},[604,2545,2407],{"class":643},[604,2547,710],{"class":643},[604,2549,1638],{"class":764},[604,2551,629],{"class":643},[604,2553,2554],{"class":1643}," 500",[604,2556,716],{"class":643},[604,2558,813],{"class":764},[604,2560,2561],{"class":606,"line":1083},[604,2562,1134],{"class":643},[604,2564,2565],{"class":606,"line":1089},[604,2566,983],{"class":643},[567,2568,2569],{},"Trigger from TentoCMS webhook:",[595,2571,2573],{"className":597,"code":2572,"language":599,"meta":600,"style":600},"curl -X POST 'https:\u002F\u002Fyoursite.com\u002Fapi\u002Frevalidate?secret=TOKEN' \\\n  -H 'Content-Type: application\u002Fjson' \\\n  -d '{\"path\":\"\u002Fblog\"}'\n",[577,2574,2575,2595,2609],{"__ignoreMap":600},[604,2576,2577,2580,2583,2585,2587,2590,2592],{"class":606,"line":607},[604,2578,2579],{"class":610},"curl",[604,2581,2582],{"class":614}," -X",[604,2584,2297],{"class":614},[604,2586,722],{"class":643},[604,2588,2589],{"class":614},"https:\u002F\u002Fyoursite.com\u002Fapi\u002Frevalidate?secret=TOKEN",[604,2591,1540],{"class":643},[604,2593,2594],{"class":639}," \\\n",[604,2596,2597,2600,2602,2605,2607],{"class":606,"line":650},[604,2598,2599],{"class":614},"  -H",[604,2601,722],{"class":643},[604,2603,2604],{"class":614},"Content-Type: application\u002Fjson",[604,2606,1540],{"class":643},[604,2608,2594],{"class":639},[604,2610,2611,2614,2616,2619],{"class":606,"line":661},[604,2612,2613],{"class":614},"  -d",[604,2615,722],{"class":643},[604,2617,2618],{"class":614},"{\"path\":\"\u002Fblog\"}",[604,2620,727],{"class":643},[686,2622,2624],{"id":2623},"error-handling","Error Handling",[595,2626,2628],{"className":915,"code":2627,"language":917,"meta":600,"style":600},"import { TentoNotFoundError, TentoAuthenticationError } from '@tentocms\u002Fclient'\nimport { notFound } from 'next\u002Fnavigation'\n\nexport default async function Page({ params }: { params: Promise\u003C{ slug: string }> }) {\n  const { slug } = await params\n  try {\n    const page = await tento.pages.getBySlug(slug)\n    return \u003Cdiv>{page.fields.title as string}\u003C\u002Fdiv>\n  } catch (error) {\n    if (error instanceof TentoNotFoundError) {\n      notFound()\n    }\n    if (error instanceof TentoAuthenticationError) {\n      throw new Error('Invalid API key')\n    }\n    throw error\n  }\n}\n",[577,2629,2630,2635,2639,2643,2647,2651,2655,2659,2664,2668,2673,2678,2683,2688,2693,2697,2702,2706],{"__ignoreMap":600},[604,2631,2632],{"class":606,"line":607},[604,2633,2634],{},"import { TentoNotFoundError, TentoAuthenticationError } from '@tentocms\u002Fclient'\n",[604,2636,2637],{"class":606,"line":650},[604,2638,1006],{},[604,2640,2641],{"class":606,"line":661},[604,2642,733],{"emptyLinePlaceholder":732},[604,2644,2645],{"class":606,"line":672},[604,2646,1052],{},[604,2648,2649],{"class":606,"line":786},[604,2650,1058],{},[604,2652,2653],{"class":606,"line":807},[604,2654,1069],{},[604,2656,2657],{"class":606,"line":816},[604,2658,1075],{},[604,2660,2661],{"class":606,"line":821},[604,2662,2663],{},"    return \u003Cdiv>{page.fields.title as string}\u003C\u002Fdiv>\n",[604,2665,2666],{"class":606,"line":841},[604,2667,1122],{},[604,2669,2670],{"class":606,"line":860},[604,2671,2672],{},"    if (error instanceof TentoNotFoundError) {\n",[604,2674,2675],{"class":606,"line":880},[604,2676,2677],{},"      notFound()\n",[604,2679,2680],{"class":606,"line":899},[604,2681,2682],{},"    }\n",[604,2684,2685],{"class":606,"line":980},[604,2686,2687],{},"    if (error instanceof TentoAuthenticationError) {\n",[604,2689,2690],{"class":606,"line":1055},[604,2691,2692],{},"      throw new Error('Invalid API key')\n",[604,2694,2695],{"class":606,"line":1061},[604,2696,2682],{},[604,2698,2699],{"class":606,"line":1066},[604,2700,2701],{},"    throw error\n",[604,2703,2704],{"class":606,"line":1072},[604,2705,1134],{},[604,2707,2708],{"class":606,"line":1078},[604,2709,983],{},[590,2711,2713],{"id":2712},"pages-router","Pages Router",[686,2715,689],{"id":2716},"setup-1",[567,2718,2719,2720,773],{},"Same setup as App Router - create ",[577,2721,694],{},[686,2723,907],{"id":2724},"basic-usage-1",[595,2726,2728],{"className":915,"code":2727,"language":917,"meta":600,"style":600},"\u002F\u002F pages\u002Findex.tsx\nimport { GetStaticProps } from 'next'\nimport { tento } from '@\u002Flib\u002Ftento'\nimport type { Page } from '@tentocms\u002Fclient'\n\ninterface Props {\n  page: Page\n}\n\nexport const getStaticProps: GetStaticProps\u003CProps> = async () => {\n  const page = await tento.pages.getBySlug('homepage')\n\n  return {\n    props: { page },\n    revalidate: 60, \u002F\u002F ISR: revalidate every 60 seconds\n  }\n}\n\nexport default function HomePage({ page }: Props) {\n  return (\n    \u003Cmain>\n      \u003Ch1>{page.fields.title as string}\u003C\u002Fh1>\n      \u003Cdiv dangerouslySetInnerHTML={{ __html: page.fields.content as string }} \u002F>\n    \u003C\u002Fmain>\n  )\n}\n",[577,2729,2730,2735,2740,2744,2749,2753,2758,2763,2767,2771,2776,2780,2784,2789,2794,2799,2803,2807,2811,2816,2820,2824,2828,2832,2836,2840],{"__ignoreMap":600},[604,2731,2732],{"class":606,"line":607},[604,2733,2734],{},"\u002F\u002F pages\u002Findex.tsx\n",[604,2736,2737],{"class":606,"line":650},[604,2738,2739],{},"import { GetStaticProps } from 'next'\n",[604,2741,2742],{"class":606,"line":661},[604,2743,929],{},[604,2745,2746],{"class":606,"line":672},[604,2747,2748],{},"import type { Page } from '@tentocms\u002Fclient'\n",[604,2750,2751],{"class":606,"line":786},[604,2752,733],{"emptyLinePlaceholder":732},[604,2754,2755],{"class":606,"line":807},[604,2756,2757],{},"interface Props {\n",[604,2759,2760],{"class":606,"line":816},[604,2761,2762],{},"  page: Page\n",[604,2764,2765],{"class":606,"line":821},[604,2766,983],{},[604,2768,2769],{"class":606,"line":841},[604,2770,733],{"emptyLinePlaceholder":732},[604,2772,2773],{"class":606,"line":860},[604,2774,2775],{},"export const getStaticProps: GetStaticProps\u003CProps> = async () => {\n",[604,2777,2778],{"class":606,"line":880},[604,2779,943],{},[604,2781,2782],{"class":606,"line":899},[604,2783,733],{"emptyLinePlaceholder":732},[604,2785,2786],{"class":606,"line":980},[604,2787,2788],{},"  return {\n",[604,2790,2791],{"class":606,"line":1055},[604,2792,2793],{},"    props: { page },\n",[604,2795,2796],{"class":606,"line":1061},[604,2797,2798],{},"    revalidate: 60, \u002F\u002F ISR: revalidate every 60 seconds\n",[604,2800,2801],{"class":606,"line":1066},[604,2802,1134],{},[604,2804,2805],{"class":606,"line":1072},[604,2806,983],{},[604,2808,2809],{"class":606,"line":1078},[604,2810,733],{"emptyLinePlaceholder":732},[604,2812,2813],{"class":606,"line":1083},[604,2814,2815],{},"export default function HomePage({ page }: Props) {\n",[604,2817,2818],{"class":606,"line":1089},[604,2819,952],{},[604,2821,2822],{"class":606,"line":1095},[604,2823,957],{},[604,2825,2826],{"class":606,"line":1101},[604,2827,962],{},[604,2829,2830],{"class":606,"line":1107},[604,2831,967],{},[604,2833,2834],{"class":606,"line":1113},[604,2835,972],{},[604,2837,2838],{"class":606,"line":1119},[604,2839,977],{},[604,2841,2842],{"class":606,"line":1125},[604,2843,983],{},[686,2845,987],{"id":2846},"dynamic-routes-1",[595,2848,2850],{"className":915,"code":2849,"language":917,"meta":600,"style":600},"\u002F\u002F pages\u002F[slug].tsx\nimport { GetStaticPaths, GetStaticProps } from 'next'\nimport { tento } from '@\u002Flib\u002Ftento'\nimport type { Page } from '@tentocms\u002Fclient'\n\nexport const getStaticPaths: GetStaticPaths = async () => {\n  const pages = await tento.pages.list({ limit: 100 })\n\n  const paths = pages.data.map((page) => ({\n    params: { slug: page.slug },\n  }))\n\n  return {\n    paths,\n    fallback: 'blocking',\n  }\n}\n\nexport const getStaticProps: GetStaticProps = async ({ params }) => {\n  const page = await tento.pages.getBySlug(params!.slug as string)\n\n  if (!page) {\n    return { notFound: true }\n  }\n\n  return {\n    props: { page },\n    revalidate: 60,\n  }\n}\n\nexport default function Page({ page }: { page: Page }) {\n  return (\n    \u003Cmain>\n      \u003Ch1>{page.fields.title as string}\u003C\u002Fh1>\n    \u003C\u002Fmain>\n  )\n}\n",[577,2851,2852,2857,2862,2866,2870,2874,2879,2883,2887,2892,2897,2901,2905,2909,2914,2919,2923,2927,2931,2936,2941,2945,2950,2955,2959,2963,2967,2971,2976,2980,2984,2988,2993,2998,3003,3008,3013,3018],{"__ignoreMap":600},[604,2853,2854],{"class":606,"line":607},[604,2855,2856],{},"\u002F\u002F pages\u002F[slug].tsx\n",[604,2858,2859],{"class":606,"line":650},[604,2860,2861],{},"import { GetStaticPaths, GetStaticProps } from 'next'\n",[604,2863,2864],{"class":606,"line":661},[604,2865,929],{},[604,2867,2868],{"class":606,"line":672},[604,2869,2748],{},[604,2871,2872],{"class":606,"line":786},[604,2873,733],{"emptyLinePlaceholder":732},[604,2875,2876],{"class":606,"line":807},[604,2877,2878],{},"export const getStaticPaths: GetStaticPaths = async () => {\n",[604,2880,2881],{"class":606,"line":816},[604,2882,1020],{},[604,2884,2885],{"class":606,"line":821},[604,2886,733],{"emptyLinePlaceholder":732},[604,2888,2889],{"class":606,"line":841},[604,2890,2891],{},"  const paths = pages.data.map((page) => ({\n",[604,2893,2894],{"class":606,"line":860},[604,2895,2896],{},"    params: { slug: page.slug },\n",[604,2898,2899],{"class":606,"line":880},[604,2900,1039],{},[604,2902,2903],{"class":606,"line":899},[604,2904,733],{"emptyLinePlaceholder":732},[604,2906,2907],{"class":606,"line":980},[604,2908,2788],{},[604,2910,2911],{"class":606,"line":1055},[604,2912,2913],{},"    paths,\n",[604,2915,2916],{"class":606,"line":1061},[604,2917,2918],{},"    fallback: 'blocking',\n",[604,2920,2921],{"class":606,"line":1066},[604,2922,1134],{},[604,2924,2925],{"class":606,"line":1072},[604,2926,983],{},[604,2928,2929],{"class":606,"line":1078},[604,2930,733],{"emptyLinePlaceholder":732},[604,2932,2933],{"class":606,"line":1083},[604,2934,2935],{},"export const getStaticProps: GetStaticProps = async ({ params }) => {\n",[604,2937,2938],{"class":606,"line":1089},[604,2939,2940],{},"  const page = await tento.pages.getBySlug(params!.slug as string)\n",[604,2942,2943],{"class":606,"line":1095},[604,2944,733],{"emptyLinePlaceholder":732},[604,2946,2947],{"class":606,"line":1101},[604,2948,2949],{},"  if (!page) {\n",[604,2951,2952],{"class":606,"line":1107},[604,2953,2954],{},"    return { notFound: true }\n",[604,2956,2957],{"class":606,"line":1113},[604,2958,1134],{},[604,2960,2961],{"class":606,"line":1119},[604,2962,733],{"emptyLinePlaceholder":732},[604,2964,2965],{"class":606,"line":1125},[604,2966,2788],{},[604,2968,2969],{"class":606,"line":1131},[604,2970,2793],{},[604,2972,2973],{"class":606,"line":1137},[604,2974,2975],{},"    revalidate: 60,\n",[604,2977,2978],{"class":606,"line":2018},[604,2979,1134],{},[604,2981,2982],{"class":606,"line":2023},[604,2983,983],{},[604,2985,2986],{"class":606,"line":2028},[604,2987,733],{"emptyLinePlaceholder":732},[604,2989,2990],{"class":606,"line":2033},[604,2991,2992],{},"export default function Page({ page }: { page: Page }) {\n",[604,2994,2996],{"class":606,"line":2995},33,[604,2997,952],{},[604,2999,3001],{"class":606,"line":3000},34,[604,3002,957],{},[604,3004,3006],{"class":606,"line":3005},35,[604,3007,962],{},[604,3009,3011],{"class":606,"line":3010},36,[604,3012,972],{},[604,3014,3016],{"class":606,"line":3015},37,[604,3017,977],{},[604,3019,3021],{"class":606,"line":3020},38,[604,3022,983],{},[686,3024,3026],{"id":3025},"preview-mode-pages-router","Preview Mode (Pages Router)",[595,3028,3030],{"className":915,"code":3029,"language":917,"meta":600,"style":600},"\u002F\u002F pages\u002Fapi\u002Fpreview.ts\nimport type { NextApiRequest, NextApiResponse } from 'next'\n\nexport default async function handler(\n  req: NextApiRequest,\n  res: NextApiResponse\n) {\n  const { secret, slug } = req.query\n\n  \u002F\u002F Validate secret\n  if (secret !== process.env.PREVIEW_SECRET) {\n    return res.status(401).json({ message: 'Invalid secret' })\n  }\n\n  \u002F\u002F Enable preview mode\n  res.setPreviewData({})\n\n  \u002F\u002F Redirect to the page\n  res.redirect(`\u002F${slug ?? ''}`)\n}\n",[577,3031,3032,3037,3042,3046,3051,3056,3061,3066,3071,3075,3079,3084,3089,3093,3097,3102,3107,3111,3115,3120],{"__ignoreMap":600},[604,3033,3034],{"class":606,"line":607},[604,3035,3036],{},"\u002F\u002F pages\u002Fapi\u002Fpreview.ts\n",[604,3038,3039],{"class":606,"line":650},[604,3040,3041],{},"import type { NextApiRequest, NextApiResponse } from 'next'\n",[604,3043,3044],{"class":606,"line":661},[604,3045,733],{"emptyLinePlaceholder":732},[604,3047,3048],{"class":606,"line":672},[604,3049,3050],{},"export default async function handler(\n",[604,3052,3053],{"class":606,"line":786},[604,3054,3055],{},"  req: NextApiRequest,\n",[604,3057,3058],{"class":606,"line":807},[604,3059,3060],{},"  res: NextApiResponse\n",[604,3062,3063],{"class":606,"line":816},[604,3064,3065],{},") {\n",[604,3067,3068],{"class":606,"line":821},[604,3069,3070],{},"  const { secret, slug } = req.query\n",[604,3072,3073],{"class":606,"line":841},[604,3074,733],{"emptyLinePlaceholder":732},[604,3076,3077],{"class":606,"line":860},[604,3078,1583],{},[604,3080,3081],{"class":606,"line":880},[604,3082,3083],{},"  if (secret !== process.env.PREVIEW_SECRET) {\n",[604,3085,3086],{"class":606,"line":899},[604,3087,3088],{},"    return res.status(401).json({ message: 'Invalid secret' })\n",[604,3090,3091],{"class":606,"line":980},[604,3092,1134],{},[604,3094,3095],{"class":606,"line":1055},[604,3096,733],{"emptyLinePlaceholder":732},[604,3098,3099],{"class":606,"line":1061},[604,3100,3101],{},"  \u002F\u002F Enable preview mode\n",[604,3103,3104],{"class":606,"line":1066},[604,3105,3106],{},"  res.setPreviewData({})\n",[604,3108,3109],{"class":606,"line":1072},[604,3110,733],{"emptyLinePlaceholder":732},[604,3112,3113],{"class":606,"line":1078},[604,3114,1748],{},[604,3116,3117],{"class":606,"line":1083},[604,3118,3119],{},"  res.redirect(`\u002F${slug ?? ''}`)\n",[604,3121,3122],{"class":606,"line":1089},[604,3123,983],{},[567,3125,3126],{},"Exit preview:",[595,3128,3130],{"className":915,"code":3129,"language":917,"meta":600,"style":600},"\u002F\u002F pages\u002Fapi\u002Fexit-preview.ts\nimport type { NextApiRequest, NextApiResponse } from 'next'\n\nexport default async function handler(\n  req: NextApiRequest,\n  res: NextApiResponse\n) {\n  res.clearPreviewData()\n  res.redirect('\u002F')\n}\n",[577,3131,3132,3137,3141,3145,3149,3153,3157,3161,3166,3171],{"__ignoreMap":600},[604,3133,3134],{"class":606,"line":607},[604,3135,3136],{},"\u002F\u002F pages\u002Fapi\u002Fexit-preview.ts\n",[604,3138,3139],{"class":606,"line":650},[604,3140,3041],{},[604,3142,3143],{"class":606,"line":661},[604,3144,733],{"emptyLinePlaceholder":732},[604,3146,3147],{"class":606,"line":672},[604,3148,3050],{},[604,3150,3151],{"class":606,"line":786},[604,3152,3055],{},[604,3154,3155],{"class":606,"line":807},[604,3156,3060],{},[604,3158,3159],{"class":606,"line":816},[604,3160,3065],{},[604,3162,3163],{"class":606,"line":821},[604,3164,3165],{},"  res.clearPreviewData()\n",[604,3167,3168],{"class":606,"line":841},[604,3169,3170],{},"  res.redirect('\u002F')\n",[604,3172,3173],{"class":606,"line":860},[604,3174,983],{},[567,3176,3177],{},"Use in pages:",[595,3179,3181],{"className":915,"code":3180,"language":917,"meta":600,"style":600},"\u002F\u002F pages\u002F[slug].tsx\nexport const getStaticProps: GetStaticProps = async ({ params, preview }) => {\n  const client = preview ? tentoPreview : tento\n  const page = await client.pages.getBySlug(params!.slug as string)\n\n  return {\n    props: { page, preview: !!preview },\n    revalidate: 60,\n  }\n}\n\nexport default function Page({ page, preview }: { page: Page; preview: boolean }) {\n  return (\n    \u003Cmain>\n      {preview && (\n        \u003Cdiv className=\"bg-yellow-400 p-4\">\n          Preview Mode - \u003Ca href=\"\u002Fapi\u002Fexit-preview\">Exit\u003C\u002Fa>\n        \u003C\u002Fdiv>\n      )}\n      \u003Ch1>{page.fields.title as string}\u003C\u002Fh1>\n    \u003C\u002Fmain>\n  )\n}\n",[577,3182,3183,3187,3192,3197,3202,3206,3210,3215,3219,3223,3227,3231,3236,3240,3244,3249,3254,3259,3263,3268,3272,3276,3280],{"__ignoreMap":600},[604,3184,3185],{"class":606,"line":607},[604,3186,2856],{},[604,3188,3189],{"class":606,"line":650},[604,3190,3191],{},"export const getStaticProps: GetStaticProps = async ({ params, preview }) => {\n",[604,3193,3194],{"class":606,"line":661},[604,3195,3196],{},"  const client = preview ? tentoPreview : tento\n",[604,3198,3199],{"class":606,"line":672},[604,3200,3201],{},"  const page = await client.pages.getBySlug(params!.slug as string)\n",[604,3203,3204],{"class":606,"line":786},[604,3205,733],{"emptyLinePlaceholder":732},[604,3207,3208],{"class":606,"line":807},[604,3209,2788],{},[604,3211,3212],{"class":606,"line":816},[604,3213,3214],{},"    props: { page, preview: !!preview },\n",[604,3216,3217],{"class":606,"line":821},[604,3218,2975],{},[604,3220,3221],{"class":606,"line":841},[604,3222,1134],{},[604,3224,3225],{"class":606,"line":860},[604,3226,983],{},[604,3228,3229],{"class":606,"line":880},[604,3230,733],{"emptyLinePlaceholder":732},[604,3232,3233],{"class":606,"line":899},[604,3234,3235],{},"export default function Page({ page, preview }: { page: Page; preview: boolean }) {\n",[604,3237,3238],{"class":606,"line":980},[604,3239,952],{},[604,3241,3242],{"class":606,"line":1055},[604,3243,957],{},[604,3245,3246],{"class":606,"line":1061},[604,3247,3248],{},"      {preview && (\n",[604,3250,3251],{"class":606,"line":1066},[604,3252,3253],{},"        \u003Cdiv className=\"bg-yellow-400 p-4\">\n",[604,3255,3256],{"class":606,"line":1072},[604,3257,3258],{},"          Preview Mode - \u003Ca href=\"\u002Fapi\u002Fexit-preview\">Exit\u003C\u002Fa>\n",[604,3260,3261],{"class":606,"line":1078},[604,3262,1242],{},[604,3264,3265],{"class":606,"line":1083},[604,3266,3267],{},"      )}\n",[604,3269,3270],{"class":606,"line":1089},[604,3271,962],{},[604,3273,3274],{"class":606,"line":1095},[604,3275,972],{},[604,3277,3278],{"class":606,"line":1101},[604,3279,977],{},[604,3281,3282],{"class":606,"line":1107},[604,3283,983],{},[590,3285,10],{"id":3286},"best-practices",[686,3288,3290],{"id":3289},"_1-use-environment-variables","1. Use Environment Variables",[567,3292,3293],{},"Never hardcode API keys:",[595,3295,3297],{"className":697,"code":3296,"language":699,"meta":600,"style":600},"\u002F\u002F ✅ Good\nconst tento = new TentoClient({\n  apiKey: process.env.TENTO_API_KEY!\n})\n\n\u002F\u002F ❌ Bad\nconst tento = new TentoClient({\n  apiKey: 'tento_pk_1234567890'\n})\n",[577,3298,3299,3304,3321,3340,3346,3350,3355,3371,3384],{"__ignoreMap":600},[604,3300,3301],{"class":606,"line":607},[604,3302,3303],{"class":1582},"\u002F\u002F ✅ Good\n",[604,3305,3306,3309,3311,3313,3315,3317,3319],{"class":606,"line":650},[604,3307,3308],{"class":741},"const",[604,3310,745],{"class":639},[604,3312,644],{"class":643},[604,3314,750],{"class":643},[604,3316,713],{"class":753},[604,3318,756],{"class":639},[604,3320,759],{"class":643},[604,3322,3323,3325,3327,3329,3331,3333,3335,3337],{"class":606,"line":661},[604,3324,765],{"class":764},[604,3326,629],{"class":643},[604,3328,770],{"class":639},[604,3330,773],{"class":643},[604,3332,776],{"class":639},[604,3334,773],{"class":643},[604,3336,640],{"class":639},[604,3338,3339],{"class":643},"!\n",[604,3341,3342,3344],{"class":606,"line":672},[604,3343,810],{"class":643},[604,3345,813],{"class":639},[604,3347,3348],{"class":606,"line":786},[604,3349,733],{"emptyLinePlaceholder":732},[604,3351,3352],{"class":606,"line":807},[604,3353,3354],{"class":1582},"\u002F\u002F ❌ Bad\n",[604,3356,3357,3359,3361,3363,3365,3367,3369],{"class":606,"line":816},[604,3358,3308],{"class":741},[604,3360,745],{"class":639},[604,3362,644],{"class":643},[604,3364,750],{"class":643},[604,3366,713],{"class":753},[604,3368,756],{"class":639},[604,3370,759],{"class":643},[604,3372,3373,3375,3377,3379,3382],{"class":606,"line":821},[604,3374,765],{"class":764},[604,3376,629],{"class":643},[604,3378,722],{"class":643},[604,3380,3381],{"class":614},"tento_pk_1234567890",[604,3383,727],{"class":643},[604,3385,3386,3388],{"class":606,"line":841},[604,3387,810],{"class":643},[604,3389,813],{"class":639},[686,3391,3393],{"id":3392},"_2-implement-proper-error-handling","2. Implement Proper Error Handling",[595,3395,3397],{"className":915,"code":3396,"language":917,"meta":600,"style":600},"try {\n  const page = await tento.pages.getBySlug(slug)\n  return { props: { page } }\n} catch (error) {\n  if (error instanceof TentoNotFoundError) {\n    return { notFound: true }\n  }\n  throw error\n}\n",[577,3398,3399,3404,3409,3414,3419,3424,3428,3432,3437],{"__ignoreMap":600},[604,3400,3401],{"class":606,"line":607},[604,3402,3403],{},"try {\n",[604,3405,3406],{"class":606,"line":650},[604,3407,3408],{},"  const page = await tento.pages.getBySlug(slug)\n",[604,3410,3411],{"class":606,"line":661},[604,3412,3413],{},"  return { props: { page } }\n",[604,3415,3416],{"class":606,"line":672},[604,3417,3418],{},"} catch (error) {\n",[604,3420,3421],{"class":606,"line":786},[604,3422,3423],{},"  if (error instanceof TentoNotFoundError) {\n",[604,3425,3426],{"class":606,"line":807},[604,3427,2954],{},[604,3429,3430],{"class":606,"line":816},[604,3431,1134],{},[604,3433,3434],{"class":606,"line":821},[604,3435,3436],{},"  throw error\n",[604,3438,3439],{"class":606,"line":841},[604,3440,983],{},[686,3442,3444],{"id":3443},"_3-use-isr-for-dynamic-content","3. Use ISR for Dynamic Content",[595,3446,3448],{"className":915,"code":3447,"language":917,"meta":600,"style":600},"export const getStaticProps: GetStaticProps = async () => {\n  const page = await tento.pages.getBySlug('homepage')\n\n  return {\n    props: { page },\n    revalidate: 60 \u002F\u002F Regenerate page every 60 seconds\n  }\n}\n",[577,3449,3450,3455,3459,3463,3467,3471,3476,3480],{"__ignoreMap":600},[604,3451,3452],{"class":606,"line":607},[604,3453,3454],{},"export const getStaticProps: GetStaticProps = async () => {\n",[604,3456,3457],{"class":606,"line":650},[604,3458,943],{},[604,3460,3461],{"class":606,"line":661},[604,3462,733],{"emptyLinePlaceholder":732},[604,3464,3465],{"class":606,"line":672},[604,3466,2788],{},[604,3468,3469],{"class":606,"line":786},[604,3470,2793],{},[604,3472,3473],{"class":606,"line":807},[604,3474,3475],{},"    revalidate: 60 \u002F\u002F Regenerate page every 60 seconds\n",[604,3477,3478],{"class":606,"line":816},[604,3479,1134],{},[604,3481,3482],{"class":606,"line":821},[604,3483,983],{},[686,3485,3487],{"id":3486},"_4-optimize-images","4. Optimize Images",[595,3489,3491],{"className":915,"code":3490,"language":917,"meta":600,"style":600},"import Image from 'next\u002Fimage'\n\n\u003CImage\n  src={tento.media.getImageUrl(imageId, {\n    width: 800,\n    height: 600,\n    format: 'webp'\n  })}\n  width={800}\n  height={600}\n  alt=\"Product\"\n\u002F>\n",[577,3492,3493,3498,3502,3507,3512,3517,3522,3527,3532,3537,3542,3547],{"__ignoreMap":600},[604,3494,3495],{"class":606,"line":607},[604,3496,3497],{},"import Image from 'next\u002Fimage'\n",[604,3499,3500],{"class":606,"line":650},[604,3501,733],{"emptyLinePlaceholder":732},[604,3503,3504],{"class":606,"line":661},[604,3505,3506],{},"\u003CImage\n",[604,3508,3509],{"class":606,"line":672},[604,3510,3511],{},"  src={tento.media.getImageUrl(imageId, {\n",[604,3513,3514],{"class":606,"line":786},[604,3515,3516],{},"    width: 800,\n",[604,3518,3519],{"class":606,"line":807},[604,3520,3521],{},"    height: 600,\n",[604,3523,3524],{"class":606,"line":816},[604,3525,3526],{},"    format: 'webp'\n",[604,3528,3529],{"class":606,"line":821},[604,3530,3531],{},"  })}\n",[604,3533,3534],{"class":606,"line":841},[604,3535,3536],{},"  width={800}\n",[604,3538,3539],{"class":606,"line":860},[604,3540,3541],{},"  height={600}\n",[604,3543,3544],{"class":606,"line":880},[604,3545,3546],{},"  alt=\"Product\"\n",[604,3548,3549],{"class":606,"line":899},[604,3550,3551],{},"\u002F>\n",[686,3553,3555],{"id":3554},"_5-use-typescript-for-type-safety","5. Use TypeScript for Type Safety",[567,3557,3558],{},"Always define content types for better development experience.",[590,3560,3562],{"id":3561},"resources","Resources",[3564,3565,3566,3576,3583,3589,3596],"ul",{},[3567,3568,3569],"li",{},[3570,3571,3575],"a",{"href":3572,"rel":3573},"https:\u002F\u002Fnextjs.org\u002Fdocs",[3574],"nofollow","Next.js Documentation",[3567,3577,3578],{},[3570,3579,3582],{"href":3580,"rel":3581},"https:\u002F\u002Fnextjs.org\u002Fdocs\u002Fapp",[3574],"App Router",[3567,3584,3585],{},[3570,3586,2713],{"href":3587,"rel":3588},"https:\u002F\u002Fnextjs.org\u002Fdocs\u002Fpages",[3574],[3567,3590,3591],{},[3570,3592,3595],{"href":3593,"rel":3594},"https:\u002F\u002Fnextjs.org\u002Fdocs\u002Fapp\u002Fbuilding-your-application\u002Fconfiguring\u002Fdraft-mode",[3574],"Draft Mode",[3567,3597,3598],{},[3570,3599,3601],{"href":3600},".\u002Freference\u002Freadme","TentoCMS SDK Reference",[3603,3604,3605],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":600,"searchDepth":650,"depth":650,"links":3607},[3608,3609,3610,3618,3624,3631],{"id":592,"depth":650,"text":593},{"id":621,"depth":650,"text":622},{"id":683,"depth":650,"text":684,"children":3611},[3612,3613,3614,3615,3616,3617],{"id":688,"depth":661,"text":689},{"id":906,"depth":661,"text":907},{"id":1399,"depth":661,"text":1400},{"id":699,"depth":661,"text":2038},{"id":2187,"depth":661,"text":2188},{"id":2623,"depth":661,"text":2624},{"id":2712,"depth":650,"text":2713,"children":3619},[3620,3621,3622,3623],{"id":2716,"depth":661,"text":689},{"id":2724,"depth":661,"text":907},{"id":2846,"depth":661,"text":987},{"id":3025,"depth":661,"text":3026},{"id":3286,"depth":650,"text":10,"children":3625},[3626,3627,3628,3629,3630],{"id":3289,"depth":661,"text":3290},{"id":3392,"depth":661,"text":3393},{"id":3443,"depth":661,"text":3444},{"id":3486,"depth":661,"text":3487},{"id":3554,"depth":661,"text":3555},{"id":3561,"depth":650,"text":3562},"Using @tentocms\u002Fclient with Next.js.","md",{},{"title":137,"description":3632},"DEfpWD97pYCQ48vzqUoNUzJaNtOAw03euOYDFNce2CU",[3638,3640],{"title":133,"path":134,"stem":135,"description":3639,"children":-1},"Using @tentocms\u002Fclient with Astro.",{"title":141,"path":142,"stem":143,"description":3641,"children":-1},"Using @tentocms\u002Fclient with Nuxt 3 and Nuxt 4.",1787919220303]