[{"data":1,"prerenderedAt":4556},["ShallowReactive",2],{"navigation_docs":3,"docs-navigation-with-icons":419,"-docs-typegen-nuxt":561,"-docs-typegen-nuxt-surround":4553},[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":141,"body":563,"description":4548,"extension":4549,"icon":485,"links":489,"meta":4550,"navigation":981,"path":417,"seo":4551,"stem":418,"__hash__":4552},"docs\u002Fdocs\u002Ftypegen\u002Fnuxt.md",{"type":564,"value":565,"toc":4516},"minimark",[566,570,575,604,648,652,657,664,680,717,846,870,874,880,909,915,943,959,1001,1022,1040,1073,1077,1083,1221,1225,1240,1250,1254,1257,1369,1373,1377,1380,1748,1752,1755,2222,2226,2530,2809,2813,2816,3075,3078,3230,3234,3723,3736,3743,3783,3803,3928,3957,3963,3967,4015,4019,4023,4026,4063,4066,4070,4085,4089,4095,4173,4177,4182,4318,4321,4325,4348,4352,4369,4373,4379,4400,4403,4490,4494,4512],[567,568,569],"p",{},"This guide shows you how to integrate TentoCMS type generation into your Nuxt 4 project for fully typed content fetching.",[571,572,574],"h2",{"id":573},"installation","Installation",[576,577,582],"pre",{"className":578,"code":579,"language":580,"meta":581,"style":581},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm install -D @tentocms\u002Ftypegen\n","bash","",[583,584,585],"code",{"__ignoreMap":581},[586,587,590,594,598,601],"span",{"class":588,"line":589},"line",1,[586,591,593],{"class":592},"sBMFI","npm",[586,595,597],{"class":596},"sfazB"," install",[586,599,600],{"class":596}," -D",[586,602,603],{"class":596}," @tentocms\u002Ftypegen\n",[605,606,607],"blockquote",{},[567,608,609,617,618,621,622,625,626,628,629,632,633,636,637,640,641,644,645,647],{},[610,611,612,613,616],"strong",{},"Optional: the ",[583,614,615],{},"Page\u003CT>"," wrapper type."," The examples below that fetch a single page (e.g. ",[583,619,620],{},"Page\u003CBlogPostFields>",") import the ",[583,623,624],{},"Page"," type from ",[583,627,150],{}," — it describes the ",[583,630,631],{},"{ id, name, slug, type, fields, seo, publishedAt, updatedAt }"," envelope the REST API actually returns. ",[583,634,635],{},"typegen"," itself only generates the schema-shaped interfaces (",[583,638,639],{},"*Content","\u002F",[583,642,643],{},"*Fields","\u002Fcollection types); it does not emit a page-envelope wrapper. If you'd rather avoid the extra type-only dependency, replace ",[583,646,620],{}," with an inline type or your own envelope interface.",[571,649,651],{"id":650},"configuration","Configuration",[653,654,656],"h3",{"id":655},"_1-create-configuration-file","1. Create Configuration File",[567,658,659,660,663],{},"Run the init command to create a ",[583,661,662],{},"tentocms.config.js"," file:",[576,665,667],{"className":578,"code":666,"language":580,"meta":581,"style":581},"npx tentocms-typegen init\n",[583,668,669],{"__ignoreMap":581},[586,670,671,674,677],{"class":588,"line":589},[586,672,673],{"class":592},"npx",[586,675,676],{"class":596}," tentocms-typegen",[586,678,679],{"class":596}," init\n",[567,681,682,685,686,689,690,694,695,698,699,640,702,705,706,709,710,712,713,716],{},[583,683,684],{},"init"," detects your project layout and writes a sensible default ",[583,687,688],{},"output"," path. It only checks for the ",[691,692,693],"em",{},"absence"," of a ",[583,696,697],{},".\u002Fsrc\u002F"," directory — there's no ",[583,700,701],{},"nuxt.config",[583,703,704],{},"app\u002F","-dir inspection. Because Nuxt 4 projects have no ",[583,707,708],{},"src\u002F"," directory, they fall into the no-",[583,711,708],{}," branch and get ",[583,714,715],{},".\u002Ftypes\u002Fcms.ts",":",[576,718,722],{"className":719,"code":720,"language":721,"meta":581,"style":581},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F tentocms.config.js\nexport default {\n  apiKey: process.env.TENTO_API_KEY,\n  apiUrl: process.env.TENTO_BASE_URL,\n  output: '.\u002Ftypes\u002Fcms.ts',\n  watch: {\n    interval: 30,\n  },\n}\n","javascript",[583,723,724,730,744,771,792,810,820,834,840],{"__ignoreMap":581},[586,725,726],{"class":588,"line":589},[586,727,729],{"class":728},"sHwdD","\u002F\u002F tentocms.config.js\n",[586,731,733,737,740],{"class":588,"line":732},2,[586,734,736],{"class":735},"s7zQu","export",[586,738,739],{"class":735}," default",[586,741,743],{"class":742},"sMK4o"," {\n",[586,745,747,751,753,757,760,763,765,768],{"class":588,"line":746},3,[586,748,750],{"class":749},"swJcz","  apiKey",[586,752,716],{"class":742},[586,754,756],{"class":755},"sTEyZ"," process",[586,758,759],{"class":742},".",[586,761,762],{"class":755},"env",[586,764,759],{"class":742},[586,766,767],{"class":755},"TENTO_API_KEY",[586,769,770],{"class":742},",\n",[586,772,774,777,779,781,783,785,787,790],{"class":588,"line":773},4,[586,775,776],{"class":749},"  apiUrl",[586,778,716],{"class":742},[586,780,756],{"class":755},[586,782,759],{"class":742},[586,784,762],{"class":755},[586,786,759],{"class":742},[586,788,789],{"class":755},"TENTO_BASE_URL",[586,791,770],{"class":742},[586,793,795,798,800,803,805,808],{"class":588,"line":794},5,[586,796,797],{"class":749},"  output",[586,799,716],{"class":742},[586,801,802],{"class":742}," '",[586,804,715],{"class":596},[586,806,807],{"class":742},"'",[586,809,770],{"class":742},[586,811,813,816,818],{"class":588,"line":812},6,[586,814,815],{"class":749},"  watch",[586,817,716],{"class":742},[586,819,743],{"class":742},[586,821,823,826,828,832],{"class":588,"line":822},7,[586,824,825],{"class":749},"    interval",[586,827,716],{"class":742},[586,829,831],{"class":830},"sbssI"," 30",[586,833,770],{"class":742},[586,835,837],{"class":588,"line":836},8,[586,838,839],{"class":742},"  },\n",[586,841,843],{"class":588,"line":842},9,[586,844,845],{"class":742},"}\n",[605,847,848],{},[567,849,850,851,853,854,857,858,861,862,865,866,869],{},"If a ",[583,852,697],{}," directory exists, the classic ",[583,855,856],{},".\u002Fsrc\u002Ftypes\u002Fcms.ts"," default is used instead. The examples in this guide import from ",[583,859,860],{},"~\u002Ftypes\u002Fcms",", which Nuxt 4 resolves to ",[583,863,864],{},"app\u002Ftypes\u002Fcms.ts",", so set ",[583,867,868],{},"output: '.\u002Fapp\u002Ftypes\u002Fcms.ts'"," to match that import path.",[653,871,873],{"id":872},"_2-add-environment-variables","2. Add Environment Variables",[567,875,876,877,663],{},"Create or update your ",[583,878,879],{},".env",[576,881,883],{"className":578,"code":882,"language":580,"meta":581,"style":581},"# .env\nTENTO_API_KEY=your_api_key_here\nTENTO_BASE_URL=https:\u002F\u002Ftento-api.intelligentlending.co.uk\n",[583,884,885,890,900],{"__ignoreMap":581},[586,886,887],{"class":588,"line":589},[586,888,889],{"class":728},"# .env\n",[586,891,892,894,897],{"class":588,"line":732},[586,893,767],{"class":755},[586,895,896],{"class":742},"=",[586,898,899],{"class":596},"your_api_key_here\n",[586,901,902,904,906],{"class":588,"line":746},[586,903,789],{"class":755},[586,905,896],{"class":742},[586,907,908],{"class":596},"https:\u002F\u002Ftento-api.intelligentlending.co.uk\n",[567,910,911,912,716],{},"Add to ",[583,913,914],{},".gitignore",[576,916,918],{"className":578,"code":917,"language":580,"meta":581,"style":581},"# .gitignore\n.env\n.env.*\n!.env.example\n",[583,919,920,925,930,935],{"__ignoreMap":581},[586,921,922],{"class":588,"line":589},[586,923,924],{"class":728},"# .gitignore\n",[586,926,927],{"class":588,"line":732},[586,928,929],{"class":592},".env\n",[586,931,932],{"class":588,"line":746},[586,933,934],{"class":592},".env.*\n",[586,936,937,940],{"class":588,"line":773},[586,938,939],{"class":742},"!",[586,941,942],{"class":592},".env.example\n",[567,944,945,948,949,952,953,955,956,958],{},[583,946,947],{},"generate"," automatically loads ",[583,950,951],{},".\u002F.env"," from the current directory before reading ",[583,954,767],{}," \u002F ",[583,957,789],{},", so you usually don't need any special invocation:",[576,960,962],{"className":578,"code":961,"language":580,"meta":581,"style":581},"# Auto-loads .\u002F.env if present\ntentocms-typegen generate\n\n# Or point at an explicit file\ntentocms-typegen generate -e .\u002Fconfig\u002F.env.cms\n",[583,963,964,969,977,983,988],{"__ignoreMap":581},[586,965,966],{"class":588,"line":589},[586,967,968],{"class":728},"# Auto-loads .\u002F.env if present\n",[586,970,971,974],{"class":588,"line":732},[586,972,973],{"class":592},"tentocms-typegen",[586,975,976],{"class":596}," generate\n",[586,978,979],{"class":588,"line":746},[586,980,982],{"emptyLinePlaceholder":981},true,"\n",[586,984,985],{"class":588,"line":773},[586,986,987],{"class":728},"# Or point at an explicit file\n",[586,989,990,992,995,998],{"class":588,"line":794},[586,991,973],{"class":592},[586,993,994],{"class":596}," generate",[586,996,997],{"class":596}," -e",[586,999,1000],{"class":596}," .\u002Fconfig\u002F.env.cms\n",[1002,1003,1004,1011],"ul",{},[1005,1006,1007,1010],"li",{},[583,1008,1009],{},"-e, --env \u003Cpath>"," loads the given file (and errors if it's missing).",[1005,1012,1013,1014,1017,1018,1021],{},"Real environment variables are never overridden — a value already in ",[583,1015,1016],{},"process.env"," always wins, so the existing ",[583,1019,1020],{},"node --env-file=.env ..."," workflow keeps working.",[605,1023,1024],{},[567,1025,1026,1029,1030,1033,1034,640,1037,759],{},[610,1027,1028],{},"Node ≥ 22\u002F24:"," a bare ",[583,1031,1032],{},"--env-file"," is reserved by Node itself and won't reach this CLI — use ",[583,1035,1036],{},"-e",[583,1038,1039],{},"--env",[567,1041,1042,1044,1045,1048,1049,1048,1052,1055,1056,1059,1060,1062,1063,1068,1069,1072],{},[583,1043,947],{}," also accepts ",[583,1046,1047],{},"-o\u002F--output",", ",[583,1050,1051],{},"-k\u002F--api-key",[583,1053,1054],{},"-u\u002F--api-url",", and ",[583,1057,1058],{},"-i\u002F--interval"," (watch mode only) — each overrides the matching ",[583,1061,662],{}," value. See the ",[1064,1065,1067],"a",{"href":1066},"..\u002F..\u002F..\u002Fpackages\u002Ftypegen\u002Freadme#generate--flag-reference","full CLI flag reference"," for the complete list, including a caveat about ",[583,1070,1071],{},"-c\u002F--config"," currently being a no-op.",[653,1074,1076],{"id":1075},"_3-add-npm-scripts","3. Add npm Scripts",[567,1078,1079,1080,716],{},"Update your ",[583,1081,1082],{},"package.json",[576,1084,1088],{"className":1085,"code":1086,"language":1087,"meta":581,"style":581},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"scripts\": {\n    \"dev\": \"nuxt dev\",\n    \"build\": \"nuxt build\",\n    \"types:generate\": \"tentocms-typegen generate\",\n    \"types:watch\": \"tentocms-typegen generate --watch\",\n    \"postinstall\": \"npm run types:generate\"\n  }\n}\n","json",[583,1089,1090,1095,1111,1133,1153,1173,1193,1212,1217],{"__ignoreMap":581},[586,1091,1092],{"class":588,"line":589},[586,1093,1094],{"class":742},"{\n",[586,1096,1097,1100,1104,1107,1109],{"class":588,"line":732},[586,1098,1099],{"class":742},"  \"",[586,1101,1103],{"class":1102},"spNyl","scripts",[586,1105,1106],{"class":742},"\"",[586,1108,716],{"class":742},[586,1110,743],{"class":742},[586,1112,1113,1116,1119,1121,1123,1126,1129,1131],{"class":588,"line":746},[586,1114,1115],{"class":742},"    \"",[586,1117,1118],{"class":592},"dev",[586,1120,1106],{"class":742},[586,1122,716],{"class":742},[586,1124,1125],{"class":742}," \"",[586,1127,1128],{"class":596},"nuxt dev",[586,1130,1106],{"class":742},[586,1132,770],{"class":742},[586,1134,1135,1137,1140,1142,1144,1146,1149,1151],{"class":588,"line":773},[586,1136,1115],{"class":742},[586,1138,1139],{"class":592},"build",[586,1141,1106],{"class":742},[586,1143,716],{"class":742},[586,1145,1125],{"class":742},[586,1147,1148],{"class":596},"nuxt build",[586,1150,1106],{"class":742},[586,1152,770],{"class":742},[586,1154,1155,1157,1160,1162,1164,1166,1169,1171],{"class":588,"line":794},[586,1156,1115],{"class":742},[586,1158,1159],{"class":592},"types:generate",[586,1161,1106],{"class":742},[586,1163,716],{"class":742},[586,1165,1125],{"class":742},[586,1167,1168],{"class":596},"tentocms-typegen generate",[586,1170,1106],{"class":742},[586,1172,770],{"class":742},[586,1174,1175,1177,1180,1182,1184,1186,1189,1191],{"class":588,"line":812},[586,1176,1115],{"class":742},[586,1178,1179],{"class":592},"types:watch",[586,1181,1106],{"class":742},[586,1183,716],{"class":742},[586,1185,1125],{"class":742},[586,1187,1188],{"class":596},"tentocms-typegen generate --watch",[586,1190,1106],{"class":742},[586,1192,770],{"class":742},[586,1194,1195,1197,1200,1202,1204,1206,1209],{"class":588,"line":822},[586,1196,1115],{"class":742},[586,1198,1199],{"class":592},"postinstall",[586,1201,1106],{"class":742},[586,1203,716],{"class":742},[586,1205,1125],{"class":742},[586,1207,1208],{"class":596},"npm run types:generate",[586,1210,1211],{"class":742},"\"\n",[586,1213,1214],{"class":588,"line":836},[586,1215,1216],{"class":742},"  }\n",[586,1218,1219],{"class":588,"line":842},[586,1220,845],{"class":742},[653,1222,1224],{"id":1223},"_4-generate-types","4. Generate Types",[576,1226,1228],{"className":578,"code":1227,"language":580,"meta":581,"style":581},"npm run types:generate\n",[583,1229,1230],{"__ignoreMap":581},[586,1231,1232,1234,1237],{"class":588,"line":589},[586,1233,593],{"class":592},[586,1235,1236],{"class":596}," run",[586,1238,1239],{"class":596}," types:generate\n",[567,1241,1242,1243,1245,1246,1249],{},"This writes the file at your configured ",[583,1244,688],{}," path (",[583,1247,1248],{},".\u002Fapp\u002Ftypes\u002Fcms.ts"," if you set it as recommended above) with your page types, collections, and component types.",[571,1251,1253],{"id":1252},"nuxt-runtime-config","Nuxt Runtime Config",[567,1255,1256],{},"Expose the base URL as a public runtime config value. The API key must remain private (server-only):",[576,1258,1262],{"className":1259,"code":1260,"language":1261,"meta":581,"style":581},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  runtimeConfig: {\n    \u002F\u002F Server-only — never sent to the browser\n    tentoApiKey: process.env.TENTO_API_KEY,\n    \u002F\u002F Public — safe to expose (base URL only, never the key)\n    public: {\n      tentoBaseUrl: process.env.TENTO_BASE_URL,\n    },\n  },\n})\n","typescript",[583,1263,1264,1269,1284,1293,1298,1317,1322,1331,1350,1355,1360],{"__ignoreMap":581},[586,1265,1266],{"class":588,"line":589},[586,1267,1268],{"class":728},"\u002F\u002F nuxt.config.ts\n",[586,1270,1271,1273,1275,1279,1282],{"class":588,"line":732},[586,1272,736],{"class":735},[586,1274,739],{"class":735},[586,1276,1278],{"class":1277},"s2Zo4"," defineNuxtConfig",[586,1280,1281],{"class":755},"(",[586,1283,1094],{"class":742},[586,1285,1286,1289,1291],{"class":588,"line":746},[586,1287,1288],{"class":749},"  runtimeConfig",[586,1290,716],{"class":742},[586,1292,743],{"class":742},[586,1294,1295],{"class":588,"line":773},[586,1296,1297],{"class":728},"    \u002F\u002F Server-only — never sent to the browser\n",[586,1299,1300,1303,1305,1307,1309,1311,1313,1315],{"class":588,"line":794},[586,1301,1302],{"class":749},"    tentoApiKey",[586,1304,716],{"class":742},[586,1306,756],{"class":755},[586,1308,759],{"class":742},[586,1310,762],{"class":755},[586,1312,759],{"class":742},[586,1314,767],{"class":755},[586,1316,770],{"class":742},[586,1318,1319],{"class":588,"line":812},[586,1320,1321],{"class":728},"    \u002F\u002F Public — safe to expose (base URL only, never the key)\n",[586,1323,1324,1327,1329],{"class":588,"line":822},[586,1325,1326],{"class":749},"    public",[586,1328,716],{"class":742},[586,1330,743],{"class":742},[586,1332,1333,1336,1338,1340,1342,1344,1346,1348],{"class":588,"line":836},[586,1334,1335],{"class":749},"      tentoBaseUrl",[586,1337,716],{"class":742},[586,1339,756],{"class":755},[586,1341,759],{"class":742},[586,1343,762],{"class":755},[586,1345,759],{"class":742},[586,1347,789],{"class":755},[586,1349,770],{"class":742},[586,1351,1352],{"class":588,"line":842},[586,1353,1354],{"class":742},"    },\n",[586,1356,1358],{"class":588,"line":1357},10,[586,1359,839],{"class":742},[586,1361,1363,1366],{"class":588,"line":1362},11,[586,1364,1365],{"class":742},"}",[586,1367,1368],{"class":755},")\n",[571,1370,1372],{"id":1371},"usage-in-nuxt","Usage in Nuxt",[653,1374,1376],{"id":1375},"server-api-route-required-for-secure-fetching","Server API Route (Required for Secure Fetching)",[567,1378,1379],{},"Never send the API key from the browser. Create a server route that proxies requests using the private key:",[576,1381,1383],{"className":1259,"code":1382,"language":1261,"meta":581,"style":581},"\u002F\u002F server\u002Fapi\u002Fcms\u002Fpages\u002F[slug].get.ts\nimport type { Page } from '@tentocms\u002Fclient'\nimport type { BlogPostFields } from '~\u002Ftypes\u002Fcms'\n\nexport default defineEventHandler(async (event) => {\n  const config = useRuntimeConfig()\n  const slug = getRouterParam(event, 'slug')\n  if (!slug) throw createError({ statusCode: 400, statusMessage: 'Missing slug' })\n\n  \u002F\u002F The REST API wraps the page in an envelope: { data, redirect }. Unwrap `data`\n  \u002F\u002F so the page component receives the page directly. The page is shaped like\n  \u002F\u002F `Page\u003CBlogPostFields>` — `name`\u002F`fields`\u002F`seo` live at the top level, and\n  \u002F\u002F `fields` holds the generated `BlogPostFields` (the custom content only).\n  const { data } = await $fetch\u003C{ data: Page\u003CBlogPostFields> }>(\n    `${config.public.tentoBaseUrl}\u002Fapi\u002Fv1\u002Fpages\u002F${slug}`,\n    {\n      headers: {\n        'X-API-Key': config.tentoApiKey,\n      },\n    }\n  )\n\n  return data\n})\n",[583,1384,1385,1390,1417,1438,1442,1471,1488,1516,1567,1571,1576,1581,1587,1593,1637,1671,1677,1687,1709,1715,1721,1727,1732,1741],{"__ignoreMap":581},[586,1386,1387],{"class":588,"line":589},[586,1388,1389],{"class":728},"\u002F\u002F server\u002Fapi\u002Fcms\u002Fpages\u002F[slug].get.ts\n",[586,1391,1392,1395,1398,1401,1404,1407,1410,1412,1414],{"class":588,"line":732},[586,1393,1394],{"class":735},"import",[586,1396,1397],{"class":735}," type",[586,1399,1400],{"class":742}," {",[586,1402,1403],{"class":755}," Page",[586,1405,1406],{"class":742}," }",[586,1408,1409],{"class":735}," from",[586,1411,802],{"class":742},[586,1413,150],{"class":596},[586,1415,1416],{"class":742},"'\n",[586,1418,1419,1421,1423,1425,1428,1430,1432,1434,1436],{"class":588,"line":746},[586,1420,1394],{"class":735},[586,1422,1397],{"class":735},[586,1424,1400],{"class":742},[586,1426,1427],{"class":755}," BlogPostFields",[586,1429,1406],{"class":742},[586,1431,1409],{"class":735},[586,1433,802],{"class":742},[586,1435,860],{"class":596},[586,1437,1416],{"class":742},[586,1439,1440],{"class":588,"line":773},[586,1441,982],{"emptyLinePlaceholder":981},[586,1443,1444,1446,1448,1451,1453,1456,1459,1463,1466,1469],{"class":588,"line":794},[586,1445,736],{"class":735},[586,1447,739],{"class":735},[586,1449,1450],{"class":1277}," defineEventHandler",[586,1452,1281],{"class":755},[586,1454,1455],{"class":1102},"async",[586,1457,1458],{"class":742}," (",[586,1460,1462],{"class":1461},"sHdIc","event",[586,1464,1465],{"class":742},")",[586,1467,1468],{"class":1102}," =>",[586,1470,743],{"class":742},[586,1472,1473,1476,1479,1482,1485],{"class":588,"line":812},[586,1474,1475],{"class":1102},"  const",[586,1477,1478],{"class":755}," config",[586,1480,1481],{"class":742}," =",[586,1483,1484],{"class":1277}," useRuntimeConfig",[586,1486,1487],{"class":749},"()\n",[586,1489,1490,1492,1495,1497,1500,1502,1504,1507,1509,1512,1514],{"class":588,"line":822},[586,1491,1475],{"class":1102},[586,1493,1494],{"class":755}," slug",[586,1496,1481],{"class":742},[586,1498,1499],{"class":1277}," getRouterParam",[586,1501,1281],{"class":749},[586,1503,1462],{"class":755},[586,1505,1506],{"class":742},",",[586,1508,802],{"class":742},[586,1510,1511],{"class":596},"slug",[586,1513,807],{"class":742},[586,1515,1368],{"class":749},[586,1517,1518,1521,1523,1525,1527,1530,1533,1536,1538,1541,1544,1546,1549,1551,1554,1556,1558,1561,1563,1565],{"class":588,"line":836},[586,1519,1520],{"class":735},"  if",[586,1522,1458],{"class":749},[586,1524,939],{"class":742},[586,1526,1511],{"class":755},[586,1528,1529],{"class":749},") ",[586,1531,1532],{"class":735},"throw",[586,1534,1535],{"class":1277}," createError",[586,1537,1281],{"class":749},[586,1539,1540],{"class":742},"{",[586,1542,1543],{"class":749}," statusCode",[586,1545,716],{"class":742},[586,1547,1548],{"class":830}," 400",[586,1550,1506],{"class":742},[586,1552,1553],{"class":749}," statusMessage",[586,1555,716],{"class":742},[586,1557,802],{"class":742},[586,1559,1560],{"class":596},"Missing slug",[586,1562,807],{"class":742},[586,1564,1406],{"class":742},[586,1566,1368],{"class":749},[586,1568,1569],{"class":588,"line":842},[586,1570,982],{"emptyLinePlaceholder":981},[586,1572,1573],{"class":588,"line":1357},[586,1574,1575],{"class":728},"  \u002F\u002F The REST API wraps the page in an envelope: { data, redirect }. Unwrap `data`\n",[586,1577,1578],{"class":588,"line":1362},[586,1579,1580],{"class":728},"  \u002F\u002F so the page component receives the page directly. The page is shaped like\n",[586,1582,1584],{"class":588,"line":1583},12,[586,1585,1586],{"class":728},"  \u002F\u002F `Page\u003CBlogPostFields>` — `name`\u002F`fields`\u002F`seo` live at the top level, and\n",[586,1588,1590],{"class":588,"line":1589},13,[586,1591,1592],{"class":728},"  \u002F\u002F `fields` holds the generated `BlogPostFields` (the custom content only).\n",[586,1594,1596,1598,1600,1603,1605,1607,1610,1613,1616,1618,1620,1622,1625,1628,1631,1634],{"class":588,"line":1595},14,[586,1597,1475],{"class":1102},[586,1599,1400],{"class":742},[586,1601,1602],{"class":755}," data",[586,1604,1406],{"class":742},[586,1606,1481],{"class":742},[586,1608,1609],{"class":735}," await",[586,1611,1612],{"class":1277}," $fetch",[586,1614,1615],{"class":742},"\u003C{",[586,1617,1602],{"class":749},[586,1619,716],{"class":742},[586,1621,1403],{"class":592},[586,1623,1624],{"class":742},"\u003C",[586,1626,1627],{"class":592},"BlogPostFields",[586,1629,1630],{"class":742},">",[586,1632,1633],{"class":742}," }>",[586,1635,1636],{"class":749},"(\n",[586,1638,1640,1643,1646,1648,1651,1653,1656,1658,1661,1664,1666,1669],{"class":588,"line":1639},15,[586,1641,1642],{"class":742},"    `${",[586,1644,1645],{"class":755},"config",[586,1647,759],{"class":742},[586,1649,1650],{"class":755},"public",[586,1652,759],{"class":742},[586,1654,1655],{"class":755},"tentoBaseUrl",[586,1657,1365],{"class":742},[586,1659,1660],{"class":596},"\u002Fapi\u002Fv1\u002Fpages\u002F",[586,1662,1663],{"class":742},"${",[586,1665,1511],{"class":755},[586,1667,1668],{"class":742},"}`",[586,1670,770],{"class":742},[586,1672,1674],{"class":588,"line":1673},16,[586,1675,1676],{"class":742},"    {\n",[586,1678,1680,1683,1685],{"class":588,"line":1679},17,[586,1681,1682],{"class":749},"      headers",[586,1684,716],{"class":742},[586,1686,743],{"class":742},[586,1688,1690,1693,1696,1698,1700,1702,1704,1707],{"class":588,"line":1689},18,[586,1691,1692],{"class":742},"        '",[586,1694,1695],{"class":749},"X-API-Key",[586,1697,807],{"class":742},[586,1699,716],{"class":742},[586,1701,1478],{"class":755},[586,1703,759],{"class":742},[586,1705,1706],{"class":755},"tentoApiKey",[586,1708,770],{"class":742},[586,1710,1712],{"class":588,"line":1711},19,[586,1713,1714],{"class":742},"      },\n",[586,1716,1718],{"class":588,"line":1717},20,[586,1719,1720],{"class":742},"    }\n",[586,1722,1724],{"class":588,"line":1723},21,[586,1725,1726],{"class":749},"  )\n",[586,1728,1730],{"class":588,"line":1729},22,[586,1731,982],{"emptyLinePlaceholder":981},[586,1733,1735,1738],{"class":588,"line":1734},23,[586,1736,1737],{"class":735},"  return",[586,1739,1740],{"class":755}," data\n",[586,1742,1744,1746],{"class":588,"line":1743},24,[586,1745,1365],{"class":742},[586,1747,1368],{"class":755},[653,1749,1751],{"id":1750},"fetching-pages-with-type-safety","Fetching Pages with Type Safety",[567,1753,1754],{},"Your page components call the server route — the API key never reaches the browser:",[576,1756,1760],{"className":1757,"code":1758,"language":1759,"meta":581,"style":581},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript setup lang=\"ts\">\nimport type { Page } from '@tentocms\u002Fclient'\nimport type { BlogPostFields } from '~\u002Ftypes\u002Fcms'\n\ndefinePageMeta({ layout: 'default' })\n\nconst route = useRoute()\n\n\u002F\u002F Calls your server\u002Fapi route, not the CMS directly\nconst { data: page } = await useFetch\u003CPage\u003CBlogPostFields>>(\n  `\u002Fapi\u002Fcms\u002Fpages\u002F${route.params.slug}`\n)\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Carticle v-if=\"page\">\n    \u003Ch1>{{ page.name }}\u003C\u002Fh1>\n\n    \u003C!-- Custom fields live under page.fields -->\n    \u003Cdiv class=\"meta\">\n      \u003Ctime>{{ page.fields.publishedDate }}\u003C\u002Ftime>\n      \u003Cspan>{{ page.fields.author.name }}\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv v-html=\"page.fields.body\" \u002F>\n\n    \u003C!-- Components with full type safety -->\n    \u003C!-- Components use _type (kebab-case) as the discriminant -->\n    \u003Ccomponent\n      v-for=\"(comp, index) in page.fields.components\"\n      :key=\"index\"\n      :is=\"getComponent(comp._type)\"\n      v-bind=\"comp\"\n    \u002F>\n  \u003C\u002Farticle>\n\u003C\u002Ftemplate>\n","vue",[583,1761,1762,1787,1807,1827,1831,1856,1860,1875,1879,1884,1919,1944,1948,1957,1961,1970,1992,2011,2015,2020,2041,2060,2077,2086,2090,2112,2117,2123,2129,2137,2152,2167,2182,2197,2203,2213],{"__ignoreMap":581},[586,1763,1764,1766,1769,1772,1775,1777,1779,1782,1784],{"class":588,"line":589},[586,1765,1624],{"class":742},[586,1767,1768],{"class":749},"script",[586,1770,1771],{"class":1102}," setup",[586,1773,1774],{"class":1102}," lang",[586,1776,896],{"class":742},[586,1778,1106],{"class":742},[586,1780,1781],{"class":596},"ts",[586,1783,1106],{"class":742},[586,1785,1786],{"class":742},">\n",[586,1788,1789,1791,1793,1795,1797,1799,1801,1803,1805],{"class":588,"line":732},[586,1790,1394],{"class":735},[586,1792,1397],{"class":735},[586,1794,1400],{"class":742},[586,1796,1403],{"class":755},[586,1798,1406],{"class":742},[586,1800,1409],{"class":735},[586,1802,802],{"class":742},[586,1804,150],{"class":596},[586,1806,1416],{"class":742},[586,1808,1809,1811,1813,1815,1817,1819,1821,1823,1825],{"class":588,"line":746},[586,1810,1394],{"class":735},[586,1812,1397],{"class":735},[586,1814,1400],{"class":742},[586,1816,1427],{"class":755},[586,1818,1406],{"class":742},[586,1820,1409],{"class":735},[586,1822,802],{"class":742},[586,1824,860],{"class":596},[586,1826,1416],{"class":742},[586,1828,1829],{"class":588,"line":773},[586,1830,982],{"emptyLinePlaceholder":981},[586,1832,1833,1836,1838,1840,1843,1845,1847,1850,1852,1854],{"class":588,"line":794},[586,1834,1835],{"class":1277},"definePageMeta",[586,1837,1281],{"class":755},[586,1839,1540],{"class":742},[586,1841,1842],{"class":749}," layout",[586,1844,716],{"class":742},[586,1846,802],{"class":742},[586,1848,1849],{"class":596},"default",[586,1851,807],{"class":742},[586,1853,1406],{"class":742},[586,1855,1368],{"class":755},[586,1857,1858],{"class":588,"line":812},[586,1859,982],{"emptyLinePlaceholder":981},[586,1861,1862,1865,1868,1870,1873],{"class":588,"line":822},[586,1863,1864],{"class":1102},"const",[586,1866,1867],{"class":755}," route ",[586,1869,896],{"class":742},[586,1871,1872],{"class":1277}," useRoute",[586,1874,1487],{"class":755},[586,1876,1877],{"class":588,"line":836},[586,1878,982],{"emptyLinePlaceholder":981},[586,1880,1881],{"class":588,"line":842},[586,1882,1883],{"class":728},"\u002F\u002F Calls your server\u002Fapi route, not the CMS directly\n",[586,1885,1886,1888,1890,1892,1894,1897,1899,1901,1903,1906,1908,1910,1912,1914,1917],{"class":588,"line":1357},[586,1887,1864],{"class":1102},[586,1889,1400],{"class":742},[586,1891,1602],{"class":749},[586,1893,716],{"class":742},[586,1895,1896],{"class":755}," page ",[586,1898,1365],{"class":742},[586,1900,1481],{"class":742},[586,1902,1609],{"class":735},[586,1904,1905],{"class":1277}," useFetch",[586,1907,1624],{"class":742},[586,1909,624],{"class":592},[586,1911,1624],{"class":742},[586,1913,1627],{"class":592},[586,1915,1916],{"class":742},">>",[586,1918,1636],{"class":755},[586,1920,1921,1924,1927,1929,1932,1934,1937,1939,1941],{"class":588,"line":1362},[586,1922,1923],{"class":742},"  `",[586,1925,1926],{"class":596},"\u002Fapi\u002Fcms\u002Fpages\u002F",[586,1928,1663],{"class":742},[586,1930,1931],{"class":755},"route",[586,1933,759],{"class":742},[586,1935,1936],{"class":755},"params",[586,1938,759],{"class":742},[586,1940,1511],{"class":755},[586,1942,1943],{"class":742},"}`\n",[586,1945,1946],{"class":588,"line":1583},[586,1947,1368],{"class":755},[586,1949,1950,1953,1955],{"class":588,"line":1589},[586,1951,1952],{"class":742},"\u003C\u002F",[586,1954,1768],{"class":749},[586,1956,1786],{"class":742},[586,1958,1959],{"class":588,"line":1595},[586,1960,982],{"emptyLinePlaceholder":981},[586,1962,1963,1965,1968],{"class":588,"line":1639},[586,1964,1624],{"class":742},[586,1966,1967],{"class":749},"template",[586,1969,1786],{"class":742},[586,1971,1972,1975,1978,1981,1983,1985,1988,1990],{"class":588,"line":1673},[586,1973,1974],{"class":742},"  \u003C",[586,1976,1977],{"class":749},"article",[586,1979,1980],{"class":1102}," v-if",[586,1982,896],{"class":742},[586,1984,1106],{"class":742},[586,1986,1987],{"class":596},"page",[586,1989,1106],{"class":742},[586,1991,1786],{"class":742},[586,1993,1994,1997,2000,2002,2005,2007,2009],{"class":588,"line":1679},[586,1995,1996],{"class":742},"    \u003C",[586,1998,1999],{"class":749},"h1",[586,2001,1630],{"class":742},[586,2003,2004],{"class":755},"{{ page.name }}",[586,2006,1952],{"class":742},[586,2008,1999],{"class":749},[586,2010,1786],{"class":742},[586,2012,2013],{"class":588,"line":1689},[586,2014,982],{"emptyLinePlaceholder":981},[586,2016,2017],{"class":588,"line":1711},[586,2018,2019],{"class":728},"    \u003C!-- Custom fields live under page.fields -->\n",[586,2021,2022,2024,2027,2030,2032,2034,2037,2039],{"class":588,"line":1717},[586,2023,1996],{"class":742},[586,2025,2026],{"class":749},"div",[586,2028,2029],{"class":1102}," class",[586,2031,896],{"class":742},[586,2033,1106],{"class":742},[586,2035,2036],{"class":596},"meta",[586,2038,1106],{"class":742},[586,2040,1786],{"class":742},[586,2042,2043,2046,2049,2051,2054,2056,2058],{"class":588,"line":1723},[586,2044,2045],{"class":742},"      \u003C",[586,2047,2048],{"class":749},"time",[586,2050,1630],{"class":742},[586,2052,2053],{"class":755},"{{ page.fields.publishedDate }}",[586,2055,1952],{"class":742},[586,2057,2048],{"class":749},[586,2059,1786],{"class":742},[586,2061,2062,2064,2066,2068,2071,2073,2075],{"class":588,"line":1729},[586,2063,2045],{"class":742},[586,2065,586],{"class":749},[586,2067,1630],{"class":742},[586,2069,2070],{"class":755},"{{ page.fields.author.name }}",[586,2072,1952],{"class":742},[586,2074,586],{"class":749},[586,2076,1786],{"class":742},[586,2078,2079,2082,2084],{"class":588,"line":1734},[586,2080,2081],{"class":742},"    \u003C\u002F",[586,2083,2026],{"class":749},[586,2085,1786],{"class":742},[586,2087,2088],{"class":588,"line":1743},[586,2089,982],{"emptyLinePlaceholder":981},[586,2091,2093,2095,2097,2100,2102,2104,2107,2109],{"class":588,"line":2092},25,[586,2094,1996],{"class":742},[586,2096,2026],{"class":749},[586,2098,2099],{"class":1102}," v-html",[586,2101,896],{"class":742},[586,2103,1106],{"class":742},[586,2105,2106],{"class":596},"page.fields.body",[586,2108,1106],{"class":742},[586,2110,2111],{"class":742}," \u002F>\n",[586,2113,2115],{"class":588,"line":2114},26,[586,2116,982],{"emptyLinePlaceholder":981},[586,2118,2120],{"class":588,"line":2119},27,[586,2121,2122],{"class":728},"    \u003C!-- Components with full type safety -->\n",[586,2124,2126],{"class":588,"line":2125},28,[586,2127,2128],{"class":728},"    \u003C!-- Components use _type (kebab-case) as the discriminant -->\n",[586,2130,2132,2134],{"class":588,"line":2131},29,[586,2133,1996],{"class":742},[586,2135,2136],{"class":749},"component\n",[586,2138,2140,2143,2145,2147,2150],{"class":588,"line":2139},30,[586,2141,2142],{"class":1102},"      v-for",[586,2144,896],{"class":742},[586,2146,1106],{"class":742},[586,2148,2149],{"class":596},"(comp, index) in page.fields.components",[586,2151,1211],{"class":742},[586,2153,2155,2158,2160,2162,2165],{"class":588,"line":2154},31,[586,2156,2157],{"class":1102},"      :key",[586,2159,896],{"class":742},[586,2161,1106],{"class":742},[586,2163,2164],{"class":596},"index",[586,2166,1211],{"class":742},[586,2168,2170,2173,2175,2177,2180],{"class":588,"line":2169},32,[586,2171,2172],{"class":1102},"      :is",[586,2174,896],{"class":742},[586,2176,1106],{"class":742},[586,2178,2179],{"class":596},"getComponent(comp._type)",[586,2181,1211],{"class":742},[586,2183,2185,2188,2190,2192,2195],{"class":588,"line":2184},33,[586,2186,2187],{"class":1102},"      v-bind",[586,2189,896],{"class":742},[586,2191,1106],{"class":742},[586,2193,2194],{"class":596},"comp",[586,2196,1211],{"class":742},[586,2198,2200],{"class":588,"line":2199},34,[586,2201,2202],{"class":742},"    \u002F>\n",[586,2204,2206,2209,2211],{"class":588,"line":2205},35,[586,2207,2208],{"class":742},"  \u003C\u002F",[586,2210,1977],{"class":749},[586,2212,1786],{"class":742},[586,2214,2216,2218,2220],{"class":588,"line":2215},36,[586,2217,1952],{"class":742},[586,2219,1967],{"class":749},[586,2221,1786],{"class":742},[653,2223,2225],{"id":2224},"fetching-collections","Fetching Collections",[576,2227,2229],{"className":1259,"code":2228,"language":1261,"meta":581,"style":581},"\u002F\u002F server\u002Fapi\u002Fcms\u002Fcollections\u002F[slug].get.ts\nimport type { TeamMemberItem } from '~\u002Ftypes\u002Fcms'\n\nexport default defineEventHandler(async (event) => {\n  const config = useRuntimeConfig()\n  const slug = getRouterParam(event, 'slug')\n  if (!slug) throw createError({ statusCode: 400, statusMessage: 'Missing slug' })\n\n  \u002F\u002F Collections wrap items in an envelope: { data, collectionType, pagination? }.\n  \u002F\u002F `data` is an array for normal collections, or a single item for singletons —\n  \u002F\u002F normalise to an array so the component can always iterate.\n  const { data } = await $fetch\u003C{ data: TeamMemberItem[] | TeamMemberItem }>(\n    `${config.public.tentoBaseUrl}\u002Fapi\u002Fv1\u002Fcollections\u002F${slug}`,\n    {\n      headers: {\n        'X-API-Key': config.tentoApiKey,\n      },\n    }\n  )\n\n  return Array.isArray(data) ? data : [data]\n})\n",[583,2230,2231,2236,2257,2261,2283,2295,2319,2361,2365,2370,2375,2380,2416,2443,2447,2455,2473,2477,2481,2485,2489,2524],{"__ignoreMap":581},[586,2232,2233],{"class":588,"line":589},[586,2234,2235],{"class":728},"\u002F\u002F server\u002Fapi\u002Fcms\u002Fcollections\u002F[slug].get.ts\n",[586,2237,2238,2240,2242,2244,2247,2249,2251,2253,2255],{"class":588,"line":732},[586,2239,1394],{"class":735},[586,2241,1397],{"class":735},[586,2243,1400],{"class":742},[586,2245,2246],{"class":755}," TeamMemberItem",[586,2248,1406],{"class":742},[586,2250,1409],{"class":735},[586,2252,802],{"class":742},[586,2254,860],{"class":596},[586,2256,1416],{"class":742},[586,2258,2259],{"class":588,"line":746},[586,2260,982],{"emptyLinePlaceholder":981},[586,2262,2263,2265,2267,2269,2271,2273,2275,2277,2279,2281],{"class":588,"line":773},[586,2264,736],{"class":735},[586,2266,739],{"class":735},[586,2268,1450],{"class":1277},[586,2270,1281],{"class":755},[586,2272,1455],{"class":1102},[586,2274,1458],{"class":742},[586,2276,1462],{"class":1461},[586,2278,1465],{"class":742},[586,2280,1468],{"class":1102},[586,2282,743],{"class":742},[586,2284,2285,2287,2289,2291,2293],{"class":588,"line":794},[586,2286,1475],{"class":1102},[586,2288,1478],{"class":755},[586,2290,1481],{"class":742},[586,2292,1484],{"class":1277},[586,2294,1487],{"class":749},[586,2296,2297,2299,2301,2303,2305,2307,2309,2311,2313,2315,2317],{"class":588,"line":812},[586,2298,1475],{"class":1102},[586,2300,1494],{"class":755},[586,2302,1481],{"class":742},[586,2304,1499],{"class":1277},[586,2306,1281],{"class":749},[586,2308,1462],{"class":755},[586,2310,1506],{"class":742},[586,2312,802],{"class":742},[586,2314,1511],{"class":596},[586,2316,807],{"class":742},[586,2318,1368],{"class":749},[586,2320,2321,2323,2325,2327,2329,2331,2333,2335,2337,2339,2341,2343,2345,2347,2349,2351,2353,2355,2357,2359],{"class":588,"line":822},[586,2322,1520],{"class":735},[586,2324,1458],{"class":749},[586,2326,939],{"class":742},[586,2328,1511],{"class":755},[586,2330,1529],{"class":749},[586,2332,1532],{"class":735},[586,2334,1535],{"class":1277},[586,2336,1281],{"class":749},[586,2338,1540],{"class":742},[586,2340,1543],{"class":749},[586,2342,716],{"class":742},[586,2344,1548],{"class":830},[586,2346,1506],{"class":742},[586,2348,1553],{"class":749},[586,2350,716],{"class":742},[586,2352,802],{"class":742},[586,2354,1560],{"class":596},[586,2356,807],{"class":742},[586,2358,1406],{"class":742},[586,2360,1368],{"class":749},[586,2362,2363],{"class":588,"line":836},[586,2364,982],{"emptyLinePlaceholder":981},[586,2366,2367],{"class":588,"line":842},[586,2368,2369],{"class":728},"  \u002F\u002F Collections wrap items in an envelope: { data, collectionType, pagination? }.\n",[586,2371,2372],{"class":588,"line":1357},[586,2373,2374],{"class":728},"  \u002F\u002F `data` is an array for normal collections, or a single item for singletons —\n",[586,2376,2377],{"class":588,"line":1362},[586,2378,2379],{"class":728},"  \u002F\u002F normalise to an array so the component can always iterate.\n",[586,2381,2382,2384,2386,2388,2390,2392,2394,2396,2398,2400,2402,2404,2407,2410,2412,2414],{"class":588,"line":1583},[586,2383,1475],{"class":1102},[586,2385,1400],{"class":742},[586,2387,1602],{"class":755},[586,2389,1406],{"class":742},[586,2391,1481],{"class":742},[586,2393,1609],{"class":735},[586,2395,1612],{"class":1277},[586,2397,1615],{"class":742},[586,2399,1602],{"class":749},[586,2401,716],{"class":742},[586,2403,2246],{"class":592},[586,2405,2406],{"class":749},"[] ",[586,2408,2409],{"class":742},"|",[586,2411,2246],{"class":592},[586,2413,1633],{"class":742},[586,2415,1636],{"class":749},[586,2417,2418,2420,2422,2424,2426,2428,2430,2432,2435,2437,2439,2441],{"class":588,"line":1589},[586,2419,1642],{"class":742},[586,2421,1645],{"class":755},[586,2423,759],{"class":742},[586,2425,1650],{"class":755},[586,2427,759],{"class":742},[586,2429,1655],{"class":755},[586,2431,1365],{"class":742},[586,2433,2434],{"class":596},"\u002Fapi\u002Fv1\u002Fcollections\u002F",[586,2436,1663],{"class":742},[586,2438,1511],{"class":755},[586,2440,1668],{"class":742},[586,2442,770],{"class":742},[586,2444,2445],{"class":588,"line":1595},[586,2446,1676],{"class":742},[586,2448,2449,2451,2453],{"class":588,"line":1639},[586,2450,1682],{"class":749},[586,2452,716],{"class":742},[586,2454,743],{"class":742},[586,2456,2457,2459,2461,2463,2465,2467,2469,2471],{"class":588,"line":1673},[586,2458,1692],{"class":742},[586,2460,1695],{"class":749},[586,2462,807],{"class":742},[586,2464,716],{"class":742},[586,2466,1478],{"class":755},[586,2468,759],{"class":742},[586,2470,1706],{"class":755},[586,2472,770],{"class":742},[586,2474,2475],{"class":588,"line":1679},[586,2476,1714],{"class":742},[586,2478,2479],{"class":588,"line":1689},[586,2480,1720],{"class":742},[586,2482,2483],{"class":588,"line":1711},[586,2484,1726],{"class":749},[586,2486,2487],{"class":588,"line":1717},[586,2488,982],{"emptyLinePlaceholder":981},[586,2490,2491,2493,2496,2498,2501,2503,2506,2508,2511,2513,2516,2519,2521],{"class":588,"line":1723},[586,2492,1737],{"class":735},[586,2494,2495],{"class":755}," Array",[586,2497,759],{"class":742},[586,2499,2500],{"class":1277},"isArray",[586,2502,1281],{"class":749},[586,2504,2505],{"class":755},"data",[586,2507,1529],{"class":749},[586,2509,2510],{"class":742},"?",[586,2512,1602],{"class":755},[586,2514,2515],{"class":742}," :",[586,2517,2518],{"class":749}," [",[586,2520,2505],{"class":755},[586,2522,2523],{"class":749},"]\n",[586,2525,2526,2528],{"class":588,"line":1729},[586,2527,1365],{"class":742},[586,2529,1368],{"class":755},[576,2531,2533],{"className":1757,"code":2532,"language":1759,"meta":581,"style":581},"\u003Cscript setup lang=\"ts\">\nimport type { TeamMemberItem } from '~\u002Ftypes\u002Fcms'\n\n\u002F\u002F Typed collection response via server route\nconst { data: team } = await useFetch\u003CTeamMemberItem[]>(\n  '\u002Fapi\u002Fcms\u002Fcollections\u002Fteam-members'\n)\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cdiv class=\"team-grid\">\n    \u003Cdiv v-for=\"member in team\" :key=\"member.id\" class=\"team-card\">\n      \u003Cimg :src=\"member.photo\" :alt=\"member.name\" \u002F>\n      \u003Ch3>{{ member.name }}\u003C\u002Fh3>\n      \u003Cp>{{ member.role }}\u003C\u002Fp>\n      \u003C!-- TypeScript autocompletes all your collection fields -->\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n",[583,2534,2535,2555,2575,2579,2584,2617,2627,2631,2639,2643,2651,2670,2713,2746,2763,2780,2785,2793,2801],{"__ignoreMap":581},[586,2536,2537,2539,2541,2543,2545,2547,2549,2551,2553],{"class":588,"line":589},[586,2538,1624],{"class":742},[586,2540,1768],{"class":749},[586,2542,1771],{"class":1102},[586,2544,1774],{"class":1102},[586,2546,896],{"class":742},[586,2548,1106],{"class":742},[586,2550,1781],{"class":596},[586,2552,1106],{"class":742},[586,2554,1786],{"class":742},[586,2556,2557,2559,2561,2563,2565,2567,2569,2571,2573],{"class":588,"line":732},[586,2558,1394],{"class":735},[586,2560,1397],{"class":735},[586,2562,1400],{"class":742},[586,2564,2246],{"class":755},[586,2566,1406],{"class":742},[586,2568,1409],{"class":735},[586,2570,802],{"class":742},[586,2572,860],{"class":596},[586,2574,1416],{"class":742},[586,2576,2577],{"class":588,"line":746},[586,2578,982],{"emptyLinePlaceholder":981},[586,2580,2581],{"class":588,"line":773},[586,2582,2583],{"class":728},"\u002F\u002F Typed collection response via server route\n",[586,2585,2586,2588,2590,2592,2594,2597,2599,2601,2603,2605,2607,2610,2613,2615],{"class":588,"line":794},[586,2587,1864],{"class":1102},[586,2589,1400],{"class":742},[586,2591,1602],{"class":749},[586,2593,716],{"class":742},[586,2595,2596],{"class":755}," team ",[586,2598,1365],{"class":742},[586,2600,1481],{"class":742},[586,2602,1609],{"class":735},[586,2604,1905],{"class":1277},[586,2606,1624],{"class":742},[586,2608,2609],{"class":592},"TeamMemberItem",[586,2611,2612],{"class":755},"[]",[586,2614,1630],{"class":742},[586,2616,1636],{"class":755},[586,2618,2619,2622,2625],{"class":588,"line":812},[586,2620,2621],{"class":742},"  '",[586,2623,2624],{"class":596},"\u002Fapi\u002Fcms\u002Fcollections\u002Fteam-members",[586,2626,1416],{"class":742},[586,2628,2629],{"class":588,"line":822},[586,2630,1368],{"class":755},[586,2632,2633,2635,2637],{"class":588,"line":836},[586,2634,1952],{"class":742},[586,2636,1768],{"class":749},[586,2638,1786],{"class":742},[586,2640,2641],{"class":588,"line":842},[586,2642,982],{"emptyLinePlaceholder":981},[586,2644,2645,2647,2649],{"class":588,"line":1357},[586,2646,1624],{"class":742},[586,2648,1967],{"class":749},[586,2650,1786],{"class":742},[586,2652,2653,2655,2657,2659,2661,2663,2666,2668],{"class":588,"line":1362},[586,2654,1974],{"class":742},[586,2656,2026],{"class":749},[586,2658,2029],{"class":1102},[586,2660,896],{"class":742},[586,2662,1106],{"class":742},[586,2664,2665],{"class":596},"team-grid",[586,2667,1106],{"class":742},[586,2669,1786],{"class":742},[586,2671,2672,2674,2676,2679,2681,2683,2686,2688,2691,2693,2695,2698,2700,2702,2704,2706,2709,2711],{"class":588,"line":1583},[586,2673,1996],{"class":742},[586,2675,2026],{"class":749},[586,2677,2678],{"class":1102}," v-for",[586,2680,896],{"class":742},[586,2682,1106],{"class":742},[586,2684,2685],{"class":596},"member in team",[586,2687,1106],{"class":742},[586,2689,2690],{"class":1102}," :key",[586,2692,896],{"class":742},[586,2694,1106],{"class":742},[586,2696,2697],{"class":596},"member.id",[586,2699,1106],{"class":742},[586,2701,2029],{"class":1102},[586,2703,896],{"class":742},[586,2705,1106],{"class":742},[586,2707,2708],{"class":596},"team-card",[586,2710,1106],{"class":742},[586,2712,1786],{"class":742},[586,2714,2715,2717,2720,2723,2725,2727,2730,2732,2735,2737,2739,2742,2744],{"class":588,"line":1589},[586,2716,2045],{"class":742},[586,2718,2719],{"class":749},"img",[586,2721,2722],{"class":1102}," :src",[586,2724,896],{"class":742},[586,2726,1106],{"class":742},[586,2728,2729],{"class":596},"member.photo",[586,2731,1106],{"class":742},[586,2733,2734],{"class":1102}," :alt",[586,2736,896],{"class":742},[586,2738,1106],{"class":742},[586,2740,2741],{"class":596},"member.name",[586,2743,1106],{"class":742},[586,2745,2111],{"class":742},[586,2747,2748,2750,2752,2754,2757,2759,2761],{"class":588,"line":1595},[586,2749,2045],{"class":742},[586,2751,653],{"class":749},[586,2753,1630],{"class":742},[586,2755,2756],{"class":755},"{{ member.name }}",[586,2758,1952],{"class":742},[586,2760,653],{"class":749},[586,2762,1786],{"class":742},[586,2764,2765,2767,2769,2771,2774,2776,2778],{"class":588,"line":1639},[586,2766,2045],{"class":742},[586,2768,567],{"class":749},[586,2770,1630],{"class":742},[586,2772,2773],{"class":755},"{{ member.role }}",[586,2775,1952],{"class":742},[586,2777,567],{"class":749},[586,2779,1786],{"class":742},[586,2781,2782],{"class":588,"line":1673},[586,2783,2784],{"class":728},"      \u003C!-- TypeScript autocompletes all your collection fields -->\n",[586,2786,2787,2789,2791],{"class":588,"line":1679},[586,2788,2081],{"class":742},[586,2790,2026],{"class":749},[586,2792,1786],{"class":742},[586,2794,2795,2797,2799],{"class":588,"line":1689},[586,2796,2208],{"class":742},[586,2798,2026],{"class":749},[586,2800,1786],{"class":742},[586,2802,2803,2805,2807],{"class":588,"line":1711},[586,2804,1952],{"class":742},[586,2806,1967],{"class":749},[586,2808,1786],{"class":742},[653,2810,2812],{"id":2811},"creating-a-composable","Creating a Composable",[567,2814,2815],{},"Create a typed composable that calls your server routes:",[576,2817,2819],{"className":1259,"code":2818,"language":1261,"meta":581,"style":581},"\u002F\u002F composables\u002FuseTentoCMS.ts\nimport type { Page } from '@tentocms\u002Fclient'\nimport type { BlogPostFields, TeamMemberItem } from '~\u002Ftypes\u002Fcms'\n\nexport const useTentoCMS = () => {\n  const fetchPage = async \u003CT = Page\u003CBlogPostFields>>(slug: string) => {\n    return await $fetch\u003CT>(`\u002Fapi\u002Fcms\u002Fpages\u002F${slug}`)\n  }\n\n  const fetchCollection = async \u003CT = TeamMemberItem[]>(collectionSlug: string) => {\n    return await $fetch\u003CT>(`\u002Fapi\u002Fcms\u002Fcollections\u002F${collectionSlug}`)\n  }\n\n  return {\n    fetchPage,\n    fetchCollection,\n  }\n}\n",[583,2820,2821,2826,2846,2870,2874,2893,2935,2965,2969,2973,3010,3039,3043,3047,3053,3060,3067,3071],{"__ignoreMap":581},[586,2822,2823],{"class":588,"line":589},[586,2824,2825],{"class":728},"\u002F\u002F composables\u002FuseTentoCMS.ts\n",[586,2827,2828,2830,2832,2834,2836,2838,2840,2842,2844],{"class":588,"line":732},[586,2829,1394],{"class":735},[586,2831,1397],{"class":735},[586,2833,1400],{"class":742},[586,2835,1403],{"class":755},[586,2837,1406],{"class":742},[586,2839,1409],{"class":735},[586,2841,802],{"class":742},[586,2843,150],{"class":596},[586,2845,1416],{"class":742},[586,2847,2848,2850,2852,2854,2856,2858,2860,2862,2864,2866,2868],{"class":588,"line":746},[586,2849,1394],{"class":735},[586,2851,1397],{"class":735},[586,2853,1400],{"class":742},[586,2855,1427],{"class":755},[586,2857,1506],{"class":742},[586,2859,2246],{"class":755},[586,2861,1406],{"class":742},[586,2863,1409],{"class":735},[586,2865,802],{"class":742},[586,2867,860],{"class":596},[586,2869,1416],{"class":742},[586,2871,2872],{"class":588,"line":773},[586,2873,982],{"emptyLinePlaceholder":981},[586,2875,2876,2878,2881,2884,2886,2889,2891],{"class":588,"line":794},[586,2877,736],{"class":735},[586,2879,2880],{"class":1102}," const",[586,2882,2883],{"class":755}," useTentoCMS ",[586,2885,896],{"class":742},[586,2887,2888],{"class":742}," ()",[586,2890,1468],{"class":1102},[586,2892,743],{"class":742},[586,2894,2895,2897,2900,2902,2905,2908,2911,2913,2915,2917,2919,2922,2924,2926,2929,2931,2933],{"class":588,"line":812},[586,2896,1475],{"class":1102},[586,2898,2899],{"class":755}," fetchPage",[586,2901,1481],{"class":742},[586,2903,2904],{"class":1102}," async",[586,2906,2907],{"class":742}," \u003C",[586,2909,2910],{"class":592},"T",[586,2912,1481],{"class":742},[586,2914,1403],{"class":592},[586,2916,1624],{"class":742},[586,2918,1627],{"class":592},[586,2920,2921],{"class":742},">>(",[586,2923,1511],{"class":1461},[586,2925,716],{"class":742},[586,2927,2928],{"class":592}," string",[586,2930,1465],{"class":742},[586,2932,1468],{"class":1102},[586,2934,743],{"class":742},[586,2936,2937,2940,2942,2944,2946,2948,2950,2952,2955,2957,2959,2961,2963],{"class":588,"line":822},[586,2938,2939],{"class":735},"    return",[586,2941,1609],{"class":735},[586,2943,1612],{"class":1277},[586,2945,1624],{"class":742},[586,2947,2910],{"class":592},[586,2949,1630],{"class":742},[586,2951,1281],{"class":749},[586,2953,2954],{"class":742},"`",[586,2956,1926],{"class":596},[586,2958,1663],{"class":742},[586,2960,1511],{"class":755},[586,2962,1668],{"class":742},[586,2964,1368],{"class":749},[586,2966,2967],{"class":588,"line":836},[586,2968,1216],{"class":742},[586,2970,2971],{"class":588,"line":842},[586,2972,982],{"emptyLinePlaceholder":981},[586,2974,2975,2977,2980,2982,2984,2986,2988,2990,2992,2994,2997,3000,3002,3004,3006,3008],{"class":588,"line":1357},[586,2976,1475],{"class":1102},[586,2978,2979],{"class":755}," fetchCollection",[586,2981,1481],{"class":742},[586,2983,2904],{"class":1102},[586,2985,2907],{"class":742},[586,2987,2910],{"class":592},[586,2989,1481],{"class":742},[586,2991,2246],{"class":592},[586,2993,2612],{"class":749},[586,2995,2996],{"class":742},">(",[586,2998,2999],{"class":1461},"collectionSlug",[586,3001,716],{"class":742},[586,3003,2928],{"class":592},[586,3005,1465],{"class":742},[586,3007,1468],{"class":1102},[586,3009,743],{"class":742},[586,3011,3012,3014,3016,3018,3020,3022,3024,3026,3028,3031,3033,3035,3037],{"class":588,"line":1362},[586,3013,2939],{"class":735},[586,3015,1609],{"class":735},[586,3017,1612],{"class":1277},[586,3019,1624],{"class":742},[586,3021,2910],{"class":592},[586,3023,1630],{"class":742},[586,3025,1281],{"class":749},[586,3027,2954],{"class":742},[586,3029,3030],{"class":596},"\u002Fapi\u002Fcms\u002Fcollections\u002F",[586,3032,1663],{"class":742},[586,3034,2999],{"class":755},[586,3036,1668],{"class":742},[586,3038,1368],{"class":749},[586,3040,3041],{"class":588,"line":1583},[586,3042,1216],{"class":742},[586,3044,3045],{"class":588,"line":1589},[586,3046,982],{"emptyLinePlaceholder":981},[586,3048,3049,3051],{"class":588,"line":1595},[586,3050,1737],{"class":735},[586,3052,743],{"class":742},[586,3054,3055,3058],{"class":588,"line":1639},[586,3056,3057],{"class":755},"    fetchPage",[586,3059,770],{"class":742},[586,3061,3062,3065],{"class":588,"line":1673},[586,3063,3064],{"class":755},"    fetchCollection",[586,3066,770],{"class":742},[586,3068,3069],{"class":588,"line":1679},[586,3070,1216],{"class":742},[586,3072,3073],{"class":588,"line":1689},[586,3074,845],{"class":742},[567,3076,3077],{},"Usage:",[576,3079,3081],{"className":1757,"code":3080,"language":1759,"meta":581,"style":581},"\u003Cscript setup lang=\"ts\">\nimport type { Page } from '@tentocms\u002Fclient'\nimport type { BlogPostFields } from '~\u002Ftypes\u002Fcms'\n\nconst { fetchPage } = useTentoCMS()\nconst route = useRoute()\n\nconst page = await fetchPage\u003CPage\u003CBlogPostFields>>(route.params.slug as string)\n\u003C\u002Fscript>\n",[583,3082,3083,3103,3123,3143,3147,3165,3177,3181,3222],{"__ignoreMap":581},[586,3084,3085,3087,3089,3091,3093,3095,3097,3099,3101],{"class":588,"line":589},[586,3086,1624],{"class":742},[586,3088,1768],{"class":749},[586,3090,1771],{"class":1102},[586,3092,1774],{"class":1102},[586,3094,896],{"class":742},[586,3096,1106],{"class":742},[586,3098,1781],{"class":596},[586,3100,1106],{"class":742},[586,3102,1786],{"class":742},[586,3104,3105,3107,3109,3111,3113,3115,3117,3119,3121],{"class":588,"line":732},[586,3106,1394],{"class":735},[586,3108,1397],{"class":735},[586,3110,1400],{"class":742},[586,3112,1403],{"class":755},[586,3114,1406],{"class":742},[586,3116,1409],{"class":735},[586,3118,802],{"class":742},[586,3120,150],{"class":596},[586,3122,1416],{"class":742},[586,3124,3125,3127,3129,3131,3133,3135,3137,3139,3141],{"class":588,"line":746},[586,3126,1394],{"class":735},[586,3128,1397],{"class":735},[586,3130,1400],{"class":742},[586,3132,1427],{"class":755},[586,3134,1406],{"class":742},[586,3136,1409],{"class":735},[586,3138,802],{"class":742},[586,3140,860],{"class":596},[586,3142,1416],{"class":742},[586,3144,3145],{"class":588,"line":773},[586,3146,982],{"emptyLinePlaceholder":981},[586,3148,3149,3151,3153,3156,3158,3160,3163],{"class":588,"line":794},[586,3150,1864],{"class":1102},[586,3152,1400],{"class":742},[586,3154,3155],{"class":755}," fetchPage ",[586,3157,1365],{"class":742},[586,3159,1481],{"class":742},[586,3161,3162],{"class":1277}," useTentoCMS",[586,3164,1487],{"class":755},[586,3166,3167,3169,3171,3173,3175],{"class":588,"line":812},[586,3168,1864],{"class":1102},[586,3170,1867],{"class":755},[586,3172,896],{"class":742},[586,3174,1872],{"class":1277},[586,3176,1487],{"class":755},[586,3178,3179],{"class":588,"line":822},[586,3180,982],{"emptyLinePlaceholder":981},[586,3182,3183,3185,3187,3189,3191,3193,3195,3197,3199,3201,3203,3206,3208,3210,3212,3215,3218,3220],{"class":588,"line":836},[586,3184,1864],{"class":1102},[586,3186,1896],{"class":755},[586,3188,896],{"class":742},[586,3190,1609],{"class":735},[586,3192,2899],{"class":1277},[586,3194,1624],{"class":742},[586,3196,624],{"class":592},[586,3198,1624],{"class":742},[586,3200,1627],{"class":592},[586,3202,1916],{"class":742},[586,3204,3205],{"class":755},"(route",[586,3207,759],{"class":742},[586,3209,1936],{"class":755},[586,3211,759],{"class":742},[586,3213,3214],{"class":755},"slug ",[586,3216,3217],{"class":735},"as",[586,3219,2928],{"class":592},[586,3221,1368],{"class":755},[586,3223,3224,3226,3228],{"class":588,"line":842},[586,3225,1952],{"class":742},[586,3227,1768],{"class":749},[586,3229,1786],{"class":742},[653,3231,3233],{"id":3232},"dynamic-component-rendering","Dynamic Component Rendering",[576,3235,3237],{"className":1757,"code":3236,"language":1759,"meta":581,"style":581},"\u003Cscript setup lang=\"ts\">\nimport type { Component } from 'vue'\nimport type { Page } from '@tentocms\u002Fclient'\nimport type { BlogPostFields } from '~\u002Ftypes\u002Fcms'\n\nconst { fetchPage } = useTentoCMS()\nconst route = useRoute()\n\nconst page = await fetchPage\u003CPage\u003CBlogPostFields>>(route.params.slug as string)\n\n\u002F\u002F Component mapping — keys are the kebab-case _type values from the API.\n\u002F\u002F The map values are Vue components (from resolveComponent), so the value type\n\u002F\u002F is Vue's `Component`, not a generated CMS type.\nconst componentMap: Record\u003Cstring, Component> = {\n  'hero': resolveComponent('Hero'),\n  'text-block': resolveComponent('TextBlock'),\n  'image-gallery': resolveComponent('ImageGallery'),\n  'cta-banner': resolveComponent('CtaBanner'),\n}\n\n\u002F\u002F Match on comp._type, not comp.type\nconst getComponent = (_type: string) => {\n  return componentMap[_type] || resolveComponent('div')\n}\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cdiv>\n    \u003C!-- comp._type is the kebab-case discriminant; component fields are at the root -->\n    \u003Ccomponent\n      v-for=\"(comp, index) in page.fields.components\"\n      :key=\"index\"\n      :is=\"getComponent(comp._type)\"\n      v-bind=\"comp\"\n    \u002F>\n  \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n",[583,3238,3239,3259,3280,3300,3320,3324,3340,3352,3356,3394,3398,3403,3408,3413,3440,3467,3493,3519,3545,3549,3553,3558,3582,3611,3615,3623,3627,3635,3643,3648,3654,3666,3678,3690,3702,3706,3714],{"__ignoreMap":581},[586,3240,3241,3243,3245,3247,3249,3251,3253,3255,3257],{"class":588,"line":589},[586,3242,1624],{"class":742},[586,3244,1768],{"class":749},[586,3246,1771],{"class":1102},[586,3248,1774],{"class":1102},[586,3250,896],{"class":742},[586,3252,1106],{"class":742},[586,3254,1781],{"class":596},[586,3256,1106],{"class":742},[586,3258,1786],{"class":742},[586,3260,3261,3263,3265,3267,3270,3272,3274,3276,3278],{"class":588,"line":732},[586,3262,1394],{"class":735},[586,3264,1397],{"class":735},[586,3266,1400],{"class":742},[586,3268,3269],{"class":755}," Component",[586,3271,1406],{"class":742},[586,3273,1409],{"class":735},[586,3275,802],{"class":742},[586,3277,1759],{"class":596},[586,3279,1416],{"class":742},[586,3281,3282,3284,3286,3288,3290,3292,3294,3296,3298],{"class":588,"line":746},[586,3283,1394],{"class":735},[586,3285,1397],{"class":735},[586,3287,1400],{"class":742},[586,3289,1403],{"class":755},[586,3291,1406],{"class":742},[586,3293,1409],{"class":735},[586,3295,802],{"class":742},[586,3297,150],{"class":596},[586,3299,1416],{"class":742},[586,3301,3302,3304,3306,3308,3310,3312,3314,3316,3318],{"class":588,"line":773},[586,3303,1394],{"class":735},[586,3305,1397],{"class":735},[586,3307,1400],{"class":742},[586,3309,1427],{"class":755},[586,3311,1406],{"class":742},[586,3313,1409],{"class":735},[586,3315,802],{"class":742},[586,3317,860],{"class":596},[586,3319,1416],{"class":742},[586,3321,3322],{"class":588,"line":794},[586,3323,982],{"emptyLinePlaceholder":981},[586,3325,3326,3328,3330,3332,3334,3336,3338],{"class":588,"line":812},[586,3327,1864],{"class":1102},[586,3329,1400],{"class":742},[586,3331,3155],{"class":755},[586,3333,1365],{"class":742},[586,3335,1481],{"class":742},[586,3337,3162],{"class":1277},[586,3339,1487],{"class":755},[586,3341,3342,3344,3346,3348,3350],{"class":588,"line":822},[586,3343,1864],{"class":1102},[586,3345,1867],{"class":755},[586,3347,896],{"class":742},[586,3349,1872],{"class":1277},[586,3351,1487],{"class":755},[586,3353,3354],{"class":588,"line":836},[586,3355,982],{"emptyLinePlaceholder":981},[586,3357,3358,3360,3362,3364,3366,3368,3370,3372,3374,3376,3378,3380,3382,3384,3386,3388,3390,3392],{"class":588,"line":842},[586,3359,1864],{"class":1102},[586,3361,1896],{"class":755},[586,3363,896],{"class":742},[586,3365,1609],{"class":735},[586,3367,2899],{"class":1277},[586,3369,1624],{"class":742},[586,3371,624],{"class":592},[586,3373,1624],{"class":742},[586,3375,1627],{"class":592},[586,3377,1916],{"class":742},[586,3379,3205],{"class":755},[586,3381,759],{"class":742},[586,3383,1936],{"class":755},[586,3385,759],{"class":742},[586,3387,3214],{"class":755},[586,3389,3217],{"class":735},[586,3391,2928],{"class":592},[586,3393,1368],{"class":755},[586,3395,3396],{"class":588,"line":1357},[586,3397,982],{"emptyLinePlaceholder":981},[586,3399,3400],{"class":588,"line":1362},[586,3401,3402],{"class":728},"\u002F\u002F Component mapping — keys are the kebab-case _type values from the API.\n",[586,3404,3405],{"class":588,"line":1583},[586,3406,3407],{"class":728},"\u002F\u002F The map values are Vue components (from resolveComponent), so the value type\n",[586,3409,3410],{"class":588,"line":1589},[586,3411,3412],{"class":728},"\u002F\u002F is Vue's `Component`, not a generated CMS type.\n",[586,3414,3415,3417,3420,3422,3425,3427,3430,3432,3434,3436,3438],{"class":588,"line":1595},[586,3416,1864],{"class":1102},[586,3418,3419],{"class":755}," componentMap",[586,3421,716],{"class":742},[586,3423,3424],{"class":592}," Record",[586,3426,1624],{"class":742},[586,3428,3429],{"class":592},"string",[586,3431,1506],{"class":742},[586,3433,3269],{"class":592},[586,3435,1630],{"class":742},[586,3437,1481],{"class":742},[586,3439,743],{"class":742},[586,3441,3442,3444,3447,3449,3451,3454,3456,3458,3461,3463,3465],{"class":588,"line":1639},[586,3443,2621],{"class":742},[586,3445,3446],{"class":749},"hero",[586,3448,807],{"class":742},[586,3450,716],{"class":742},[586,3452,3453],{"class":1277}," resolveComponent",[586,3455,1281],{"class":755},[586,3457,807],{"class":742},[586,3459,3460],{"class":596},"Hero",[586,3462,807],{"class":742},[586,3464,1465],{"class":755},[586,3466,770],{"class":742},[586,3468,3469,3471,3474,3476,3478,3480,3482,3484,3487,3489,3491],{"class":588,"line":1673},[586,3470,2621],{"class":742},[586,3472,3473],{"class":749},"text-block",[586,3475,807],{"class":742},[586,3477,716],{"class":742},[586,3479,3453],{"class":1277},[586,3481,1281],{"class":755},[586,3483,807],{"class":742},[586,3485,3486],{"class":596},"TextBlock",[586,3488,807],{"class":742},[586,3490,1465],{"class":755},[586,3492,770],{"class":742},[586,3494,3495,3497,3500,3502,3504,3506,3508,3510,3513,3515,3517],{"class":588,"line":1679},[586,3496,2621],{"class":742},[586,3498,3499],{"class":749},"image-gallery",[586,3501,807],{"class":742},[586,3503,716],{"class":742},[586,3505,3453],{"class":1277},[586,3507,1281],{"class":755},[586,3509,807],{"class":742},[586,3511,3512],{"class":596},"ImageGallery",[586,3514,807],{"class":742},[586,3516,1465],{"class":755},[586,3518,770],{"class":742},[586,3520,3521,3523,3526,3528,3530,3532,3534,3536,3539,3541,3543],{"class":588,"line":1689},[586,3522,2621],{"class":742},[586,3524,3525],{"class":749},"cta-banner",[586,3527,807],{"class":742},[586,3529,716],{"class":742},[586,3531,3453],{"class":1277},[586,3533,1281],{"class":755},[586,3535,807],{"class":742},[586,3537,3538],{"class":596},"CtaBanner",[586,3540,807],{"class":742},[586,3542,1465],{"class":755},[586,3544,770],{"class":742},[586,3546,3547],{"class":588,"line":1711},[586,3548,845],{"class":742},[586,3550,3551],{"class":588,"line":1717},[586,3552,982],{"emptyLinePlaceholder":981},[586,3554,3555],{"class":588,"line":1723},[586,3556,3557],{"class":728},"\u002F\u002F Match on comp._type, not comp.type\n",[586,3559,3560,3562,3565,3567,3569,3572,3574,3576,3578,3580],{"class":588,"line":1729},[586,3561,1864],{"class":1102},[586,3563,3564],{"class":755}," getComponent ",[586,3566,896],{"class":742},[586,3568,1458],{"class":742},[586,3570,3571],{"class":1461},"_type",[586,3573,716],{"class":742},[586,3575,2928],{"class":592},[586,3577,1465],{"class":742},[586,3579,1468],{"class":1102},[586,3581,743],{"class":742},[586,3583,3584,3586,3588,3591,3593,3596,3599,3601,3603,3605,3607,3609],{"class":588,"line":1734},[586,3585,1737],{"class":735},[586,3587,3419],{"class":755},[586,3589,3590],{"class":749},"[",[586,3592,3571],{"class":755},[586,3594,3595],{"class":749},"] ",[586,3597,3598],{"class":742},"||",[586,3600,3453],{"class":1277},[586,3602,1281],{"class":749},[586,3604,807],{"class":742},[586,3606,2026],{"class":596},[586,3608,807],{"class":742},[586,3610,1368],{"class":749},[586,3612,3613],{"class":588,"line":1743},[586,3614,845],{"class":742},[586,3616,3617,3619,3621],{"class":588,"line":2092},[586,3618,1952],{"class":742},[586,3620,1768],{"class":749},[586,3622,1786],{"class":742},[586,3624,3625],{"class":588,"line":2114},[586,3626,982],{"emptyLinePlaceholder":981},[586,3628,3629,3631,3633],{"class":588,"line":2119},[586,3630,1624],{"class":742},[586,3632,1967],{"class":749},[586,3634,1786],{"class":742},[586,3636,3637,3639,3641],{"class":588,"line":2125},[586,3638,1974],{"class":742},[586,3640,2026],{"class":749},[586,3642,1786],{"class":742},[586,3644,3645],{"class":588,"line":2131},[586,3646,3647],{"class":728},"    \u003C!-- comp._type is the kebab-case discriminant; component fields are at the root -->\n",[586,3649,3650,3652],{"class":588,"line":2139},[586,3651,1996],{"class":742},[586,3653,2136],{"class":749},[586,3655,3656,3658,3660,3662,3664],{"class":588,"line":2154},[586,3657,2142],{"class":1102},[586,3659,896],{"class":742},[586,3661,1106],{"class":742},[586,3663,2149],{"class":596},[586,3665,1211],{"class":742},[586,3667,3668,3670,3672,3674,3676],{"class":588,"line":2169},[586,3669,2157],{"class":1102},[586,3671,896],{"class":742},[586,3673,1106],{"class":742},[586,3675,2164],{"class":596},[586,3677,1211],{"class":742},[586,3679,3680,3682,3684,3686,3688],{"class":588,"line":2184},[586,3681,2172],{"class":1102},[586,3683,896],{"class":742},[586,3685,1106],{"class":742},[586,3687,2179],{"class":596},[586,3689,1211],{"class":742},[586,3691,3692,3694,3696,3698,3700],{"class":588,"line":2199},[586,3693,2187],{"class":1102},[586,3695,896],{"class":742},[586,3697,1106],{"class":742},[586,3699,2194],{"class":596},[586,3701,1211],{"class":742},[586,3703,3704],{"class":588,"line":2205},[586,3705,2202],{"class":742},[586,3707,3708,3710,3712],{"class":588,"line":2215},[586,3709,2208],{"class":742},[586,3711,2026],{"class":749},[586,3713,1786],{"class":742},[586,3715,3717,3719,3721],{"class":588,"line":3716},37,[586,3718,1952],{"class":742},[586,3720,1967],{"class":749},[586,3722,1786],{"class":742},[571,3724,3726,3727,3730,3731,3733,3734],{"id":3725},"typing-pagefields-fields-vs-content","Typing ",[583,3728,3729],{},"page.fields"," — ",[583,3732,643],{}," vs ",[583,3735,639],{},[567,3737,3738,3739,3742],{},"For every page type the generator emits ",[610,3740,3741],{},"two"," interfaces:",[1002,3744,3745,3771],{},[1005,3746,3747,3751,3752,3755,3756,1048,3759,1048,3761,1048,3764,1529,3767,3770],{},[610,3748,3749],{},[583,3750,639],{}," (e.g. ",[583,3753,3754],{},"BlogPostContent",") — base fields (",[583,3757,3758],{},"id",[583,3760,1511],{},[583,3762,3763],{},"title",[583,3765,3766],{},"seo?",[610,3768,3769],{},"plus"," the custom fields.",[1005,3772,3773,3751,3777,3779,3780,3770],{},[610,3774,3775],{},[583,3776,643],{},[583,3778,1627],{},") — ",[610,3781,3782],{},"only",[567,3784,3785,3786,3788,3789,3792,3793,3796,3797,3799,3800,3802],{},"The runtime ",[583,3787,3729],{}," object contains only the custom fields (the system id\u002Fslug\u002Ftitle live at the top level of the page, ",[583,3790,3791],{},"seo"," lives under ",[583,3794,3795],{},"page.seo","). Use ",[583,3798,643],{}," to type ",[583,3801,3729],{}," directly, without stripping the base fields:",[576,3804,3806],{"className":1757,"code":3805,"language":1759,"meta":581,"style":581},"\u003Cscript setup lang=\"ts\">\nimport type { BlogPostFields } from '~\u002Ftypes\u002Fcms'\n\nconst { data: page } = await useFetch('\u002Fapi\u002Fcms\u002Fpages\u002Fhello-world')\n\n\u002F\u002F page.fields matches the custom-field shape exactly\nconst fields = page.value?.fields as BlogPostFields\n\u003C\u002Fscript>\n",[583,3807,3808,3828,3848,3852,3883,3887,3892,3920],{"__ignoreMap":581},[586,3809,3810,3812,3814,3816,3818,3820,3822,3824,3826],{"class":588,"line":589},[586,3811,1624],{"class":742},[586,3813,1768],{"class":749},[586,3815,1771],{"class":1102},[586,3817,1774],{"class":1102},[586,3819,896],{"class":742},[586,3821,1106],{"class":742},[586,3823,1781],{"class":596},[586,3825,1106],{"class":742},[586,3827,1786],{"class":742},[586,3829,3830,3832,3834,3836,3838,3840,3842,3844,3846],{"class":588,"line":732},[586,3831,1394],{"class":735},[586,3833,1397],{"class":735},[586,3835,1400],{"class":742},[586,3837,1427],{"class":755},[586,3839,1406],{"class":742},[586,3841,1409],{"class":735},[586,3843,802],{"class":742},[586,3845,860],{"class":596},[586,3847,1416],{"class":742},[586,3849,3850],{"class":588,"line":746},[586,3851,982],{"emptyLinePlaceholder":981},[586,3853,3854,3856,3858,3860,3862,3864,3866,3868,3870,3872,3874,3876,3879,3881],{"class":588,"line":773},[586,3855,1864],{"class":1102},[586,3857,1400],{"class":742},[586,3859,1602],{"class":749},[586,3861,716],{"class":742},[586,3863,1896],{"class":755},[586,3865,1365],{"class":742},[586,3867,1481],{"class":742},[586,3869,1609],{"class":735},[586,3871,1905],{"class":1277},[586,3873,1281],{"class":755},[586,3875,807],{"class":742},[586,3877,3878],{"class":596},"\u002Fapi\u002Fcms\u002Fpages\u002Fhello-world",[586,3880,807],{"class":742},[586,3882,1368],{"class":755},[586,3884,3885],{"class":588,"line":794},[586,3886,982],{"emptyLinePlaceholder":981},[586,3888,3889],{"class":588,"line":812},[586,3890,3891],{"class":728},"\u002F\u002F page.fields matches the custom-field shape exactly\n",[586,3893,3894,3896,3899,3901,3904,3906,3909,3912,3915,3917],{"class":588,"line":822},[586,3895,1864],{"class":1102},[586,3897,3898],{"class":755}," fields ",[586,3900,896],{"class":742},[586,3902,3903],{"class":755}," page",[586,3905,759],{"class":742},[586,3907,3908],{"class":755},"value",[586,3910,3911],{"class":742},"?.",[586,3913,3914],{"class":755},"fields ",[586,3916,3217],{"class":735},[586,3918,3919],{"class":592}," BlogPostFields\n",[586,3921,3922,3924,3926],{"class":588,"line":836},[586,3923,1952],{"class":742},[586,3925,1768],{"class":749},[586,3927,1786],{"class":742},[567,3929,3930,3933,3934,1048,3936,1048,3938,3940,3941,3943,3944,3946,3947,3949,3950,3952,3953,3956],{},[610,3931,3932],{},"Exception:"," if a page type declares its own content field named ",[583,3935,3763],{},[583,3937,1511],{},[583,3939,3758],{},", or ",[583,3942,3791],{},", that field appears in ",[583,3945,3729],{}," at runtime — and ",[583,3948,643],{}," includes it. ",[583,3951,643],{}," excludes the ",[691,3954,3955],{},"system"," base fields, not any same-named content field the page type itself declares.",[567,3958,3959,3960,3962],{},"Both interfaces are exported; ",[583,3961,639],{}," is unchanged from earlier versions.",[571,3964,3966],{"id":3965},"known-limitations","Known Limitations",[1002,3968,3969,3990],{},[1005,3970,3971,3979,3980,3983,3984,3986,3987,759],{},[610,3972,3973,3975,3976],{},[583,3974,1087],{}," fields are typed ",[583,3977,3978],{},"unknown",", not ",[583,3981,3982],{},"Record\u003Cstring, unknown>",", because a ",[583,3985,1087],{}," field may hold an array or an object. Narrow or cast at the use site before accessing properties — for example: ",[583,3988,3989],{},"const facts = fields.stats as Array\u003C{ metric: string }>",[1005,3991,3992,3995,3996,3999,4000,4003,4004,4006,4007,4010,4011,4014],{},[610,3993,3994],{},"Resolved-reference and repeater field types can differ across components when the source schema models the same field differently."," A ",[583,3997,3998],{},"background"," field defined as a reference in one component resolves to ",[583,4001,4002],{},"ResolvedReference",", whereas the same field modelled as a plain object elsewhere is emitted as ",[583,4005,3982],{},". Similarly, an untyped repeater (a ",[583,4008,4009],{},"repeater"," field with no sub-fields defined in the schema) falls back to ",[583,4012,4013],{},"Record\u003Cstring, unknown>[]",". The generator faithfully reflects the source schema — for consistent, fully-typed output, align the field definitions in your TentoCMS schema (use the same field type and define repeater sub-fields wherever the field appears).",[571,4016,4018],{"id":4017},"development-workflow","Development Workflow",[653,4020,4022],{"id":4021},"watch-mode-for-development","Watch Mode for Development",[567,4024,4025],{},"Run the type generator in watch mode during development:",[576,4027,4029],{"className":578,"code":4028,"language":580,"meta":581,"style":581},"# Terminal 1\nnpm run types:watch\n\n# Terminal 2\nnpm run dev\n",[583,4030,4031,4036,4045,4049,4054],{"__ignoreMap":581},[586,4032,4033],{"class":588,"line":589},[586,4034,4035],{"class":728},"# Terminal 1\n",[586,4037,4038,4040,4042],{"class":588,"line":732},[586,4039,593],{"class":592},[586,4041,1236],{"class":596},[586,4043,4044],{"class":596}," types:watch\n",[586,4046,4047],{"class":588,"line":746},[586,4048,982],{"emptyLinePlaceholder":981},[586,4050,4051],{"class":588,"line":773},[586,4052,4053],{"class":728},"# Terminal 2\n",[586,4055,4056,4058,4060],{"class":588,"line":794},[586,4057,593],{"class":592},[586,4059,1236],{"class":596},[586,4061,4062],{"class":596}," dev\n",[567,4064,4065],{},"The type generator will automatically regenerate types when your CMS schemas change (polls every 30 seconds by default).",[653,4067,4069],{"id":4068},"recommended-workflow","Recommended Workflow",[4071,4072,4073,4076,4079,4082],"ol",{},[1005,4074,4075],{},"Update your page types or collections in TentoCMS admin",[1005,4077,4078],{},"Types regenerate automatically (in watch mode)",[1005,4080,4081],{},"TypeScript shows errors in your IDE immediately",[1005,4083,4084],{},"Update your components to match the new schema",[653,4086,4088],{"id":4087},"vscode-settings","VSCode Settings",[567,4090,911,4091,4094],{},[583,4092,4093],{},".vscode\u002Fsettings.json"," for better DX:",[576,4096,4098],{"className":1085,"code":4097,"language":1087,"meta":581,"style":581},"{\n  \"typescript.tsdk\": \"node_modules\u002Ftypescript\u002Flib\",\n  \"typescript.enablePromptUseWorkspaceTsdk\": true,\n  \"editor.codeActionsOnSave\": {\n    \"source.fixAll\": true\n  }\n}\n",[583,4099,4100,4104,4124,4138,4151,4165,4169],{"__ignoreMap":581},[586,4101,4102],{"class":588,"line":589},[586,4103,1094],{"class":742},[586,4105,4106,4108,4111,4113,4115,4117,4120,4122],{"class":588,"line":732},[586,4107,1099],{"class":742},[586,4109,4110],{"class":1102},"typescript.tsdk",[586,4112,1106],{"class":742},[586,4114,716],{"class":742},[586,4116,1125],{"class":742},[586,4118,4119],{"class":596},"node_modules\u002Ftypescript\u002Flib",[586,4121,1106],{"class":742},[586,4123,770],{"class":742},[586,4125,4126,4128,4131,4133,4135],{"class":588,"line":746},[586,4127,1099],{"class":742},[586,4129,4130],{"class":1102},"typescript.enablePromptUseWorkspaceTsdk",[586,4132,1106],{"class":742},[586,4134,716],{"class":742},[586,4136,4137],{"class":742}," true,\n",[586,4139,4140,4142,4145,4147,4149],{"class":588,"line":773},[586,4141,1099],{"class":742},[586,4143,4144],{"class":1102},"editor.codeActionsOnSave",[586,4146,1106],{"class":742},[586,4148,716],{"class":742},[586,4150,743],{"class":742},[586,4152,4153,4155,4158,4160,4162],{"class":588,"line":794},[586,4154,1115],{"class":742},[586,4156,4157],{"class":592},"source.fixAll",[586,4159,1106],{"class":742},[586,4161,716],{"class":742},[586,4163,4164],{"class":742}," true\n",[586,4166,4167],{"class":588,"line":812},[586,4168,1216],{"class":742},[586,4170,4171],{"class":588,"line":822},[586,4172,845],{"class":742},[571,4174,4176],{"id":4175},"configuration-options","Configuration Options",[567,4178,4179,4180,716],{},"Full configuration reference for ",[583,4181,662],{},[576,4183,4185],{"className":719,"code":4184,"language":721,"meta":581,"style":581},"export default {\n  \u002F\u002F Your TentoCMS API key (use environment variable)\n  apiKey: process.env.TENTO_API_KEY,\n\n  \u002F\u002F TentoCMS API URL\n  apiUrl: process.env.TENTO_BASE_URL,\n\n  \u002F\u002F Output path for generated types. `init` picks this automatically based on\n  \u002F\u002F your layout (Nuxt projects default to .\u002Ftypes\u002Fcms.ts since there's no src\u002F);\n  \u002F\u002F change it freely, e.g. .\u002Fapp\u002Ftypes\u002Fcms.ts.\n  output: '.\u002Ftypes\u002Fcms.ts',\n\n  \u002F\u002F Watch mode configuration\n  watch: {\n    \u002F\u002F Polling interval in seconds\n    interval: 30,\n  },\n}\n",[583,4186,4187,4195,4200,4218,4222,4227,4245,4249,4254,4259,4264,4278,4282,4287,4295,4300,4310,4314],{"__ignoreMap":581},[586,4188,4189,4191,4193],{"class":588,"line":589},[586,4190,736],{"class":735},[586,4192,739],{"class":735},[586,4194,743],{"class":742},[586,4196,4197],{"class":588,"line":732},[586,4198,4199],{"class":728},"  \u002F\u002F Your TentoCMS API key (use environment variable)\n",[586,4201,4202,4204,4206,4208,4210,4212,4214,4216],{"class":588,"line":746},[586,4203,750],{"class":749},[586,4205,716],{"class":742},[586,4207,756],{"class":755},[586,4209,759],{"class":742},[586,4211,762],{"class":755},[586,4213,759],{"class":742},[586,4215,767],{"class":755},[586,4217,770],{"class":742},[586,4219,4220],{"class":588,"line":773},[586,4221,982],{"emptyLinePlaceholder":981},[586,4223,4224],{"class":588,"line":794},[586,4225,4226],{"class":728},"  \u002F\u002F TentoCMS API URL\n",[586,4228,4229,4231,4233,4235,4237,4239,4241,4243],{"class":588,"line":812},[586,4230,776],{"class":749},[586,4232,716],{"class":742},[586,4234,756],{"class":755},[586,4236,759],{"class":742},[586,4238,762],{"class":755},[586,4240,759],{"class":742},[586,4242,789],{"class":755},[586,4244,770],{"class":742},[586,4246,4247],{"class":588,"line":822},[586,4248,982],{"emptyLinePlaceholder":981},[586,4250,4251],{"class":588,"line":836},[586,4252,4253],{"class":728},"  \u002F\u002F Output path for generated types. `init` picks this automatically based on\n",[586,4255,4256],{"class":588,"line":842},[586,4257,4258],{"class":728},"  \u002F\u002F your layout (Nuxt projects default to .\u002Ftypes\u002Fcms.ts since there's no src\u002F);\n",[586,4260,4261],{"class":588,"line":1357},[586,4262,4263],{"class":728},"  \u002F\u002F change it freely, e.g. .\u002Fapp\u002Ftypes\u002Fcms.ts.\n",[586,4265,4266,4268,4270,4272,4274,4276],{"class":588,"line":1362},[586,4267,797],{"class":749},[586,4269,716],{"class":742},[586,4271,802],{"class":742},[586,4273,715],{"class":596},[586,4275,807],{"class":742},[586,4277,770],{"class":742},[586,4279,4280],{"class":588,"line":1583},[586,4281,982],{"emptyLinePlaceholder":981},[586,4283,4284],{"class":588,"line":1589},[586,4285,4286],{"class":728},"  \u002F\u002F Watch mode configuration\n",[586,4288,4289,4291,4293],{"class":588,"line":1595},[586,4290,815],{"class":749},[586,4292,716],{"class":742},[586,4294,743],{"class":742},[586,4296,4297],{"class":588,"line":1639},[586,4298,4299],{"class":728},"    \u002F\u002F Polling interval in seconds\n",[586,4301,4302,4304,4306,4308],{"class":588,"line":1673},[586,4303,825],{"class":749},[586,4305,716],{"class":742},[586,4307,831],{"class":830},[586,4309,770],{"class":742},[586,4311,4312],{"class":588,"line":1679},[586,4313,839],{"class":742},[586,4315,4316],{"class":588,"line":1689},[586,4317,845],{"class":742},[571,4319,54],{"id":4320},"troubleshooting",[653,4322,4324],{"id":4323},"types-not-updating","Types Not Updating",[4071,4326,4327,4336,4339,4345],{},[1005,4328,4329,4330,4332,4333,4335],{},"Check that ",[583,4331,767],{}," is set in your ",[583,4334,879],{}," file",[1005,4337,4338],{},"Verify the API key has read permissions",[1005,4340,4341,4342,4344],{},"Run ",[583,4343,1208],{}," manually to see error messages",[1005,4346,4347],{},"Check the generated file timestamp",[653,4349,4351],{"id":4350},"typescript-errors-after-schema-changes","TypeScript Errors After Schema Changes",[4071,4353,4354,4359,4366],{},[1005,4355,4356,4357],{},"Regenerate types: ",[583,4358,1208],{},[1005,4360,4361,4362,4365],{},"Restart your TypeScript server in VSCode: ",[583,4363,4364],{},"Cmd+Shift+P"," → \"TypeScript: Restart TS Server\"",[1005,4367,4368],{},"If errors persist, check that your components match the new schema",[653,4370,4372],{"id":4371},"api-key-not-found","API Key Not Found",[567,4374,4375,4376,4378],{},"Create a ",[583,4377,879],{}," file in your project root:",[576,4380,4382],{"className":578,"code":4381,"language":580,"meta":581,"style":581},"TENTO_API_KEY=your_api_key_here\nTENTO_BASE_URL=https:\u002F\u002Ftento-api.intelligentlending.co.uk\n",[583,4383,4384,4392],{"__ignoreMap":581},[586,4385,4386,4388,4390],{"class":588,"line":589},[586,4387,767],{"class":755},[586,4389,896],{"class":742},[586,4391,899],{"class":596},[586,4393,4394,4396,4398],{"class":588,"line":732},[586,4395,789],{"class":755},[586,4397,896],{"class":742},[586,4399,908],{"class":596},[567,4401,4402],{},"Make sure Nuxt is configured to load it:",[576,4404,4406],{"className":1259,"code":4405,"language":1261,"meta":581,"style":581},"\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  runtimeConfig: {\n    tentoApiKey: process.env.TENTO_API_KEY,\n    public: {\n      tentoBaseUrl: process.env.TENTO_BASE_URL,\n    },\n  },\n})\n",[583,4407,4408,4412,4424,4432,4450,4458,4476,4480,4484],{"__ignoreMap":581},[586,4409,4410],{"class":588,"line":589},[586,4411,1268],{"class":728},[586,4413,4414,4416,4418,4420,4422],{"class":588,"line":732},[586,4415,736],{"class":735},[586,4417,739],{"class":735},[586,4419,1278],{"class":1277},[586,4421,1281],{"class":755},[586,4423,1094],{"class":742},[586,4425,4426,4428,4430],{"class":588,"line":746},[586,4427,1288],{"class":749},[586,4429,716],{"class":742},[586,4431,743],{"class":742},[586,4433,4434,4436,4438,4440,4442,4444,4446,4448],{"class":588,"line":773},[586,4435,1302],{"class":749},[586,4437,716],{"class":742},[586,4439,756],{"class":755},[586,4441,759],{"class":742},[586,4443,762],{"class":755},[586,4445,759],{"class":742},[586,4447,767],{"class":755},[586,4449,770],{"class":742},[586,4451,4452,4454,4456],{"class":588,"line":794},[586,4453,1326],{"class":749},[586,4455,716],{"class":742},[586,4457,743],{"class":742},[586,4459,4460,4462,4464,4466,4468,4470,4472,4474],{"class":588,"line":812},[586,4461,1335],{"class":749},[586,4463,716],{"class":742},[586,4465,756],{"class":755},[586,4467,759],{"class":742},[586,4469,762],{"class":755},[586,4471,759],{"class":742},[586,4473,789],{"class":755},[586,4475,770],{"class":742},[586,4477,4478],{"class":588,"line":822},[586,4479,1354],{"class":742},[586,4481,4482],{"class":588,"line":836},[586,4483,839],{"class":742},[586,4485,4486,4488],{"class":588,"line":842},[586,4487,1365],{"class":742},[586,4489,1368],{"class":755},[571,4491,4493],{"id":4492},"next-steps","Next Steps",[1002,4495,4496,4504],{},[1005,4497,4498,4499,4503],{},"Read the ",[1064,4500,4502],{"href":4501},".\u002Fnuxt","Nuxt Integration Guide"," for preview mode and server-route patterns",[1005,4505,4506,4507,4511],{},"Browse the ",[1064,4508,4510],{"href":4509},"..\u002Fsdk\u002Freference\u002Freadme","SDK Reference"," for the full client API surface",[4513,4514,4515],"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 .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 .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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .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}",{"title":581,"searchDepth":732,"depth":732,"links":4517},[4518,4519,4525,4526,4533,4535,4536,4541,4542,4547],{"id":573,"depth":732,"text":574},{"id":650,"depth":732,"text":651,"children":4520},[4521,4522,4523,4524],{"id":655,"depth":746,"text":656},{"id":872,"depth":746,"text":873},{"id":1075,"depth":746,"text":1076},{"id":1223,"depth":746,"text":1224},{"id":1252,"depth":732,"text":1253},{"id":1371,"depth":732,"text":1372,"children":4527},[4528,4529,4530,4531,4532],{"id":1375,"depth":746,"text":1376},{"id":1750,"depth":746,"text":1751},{"id":2224,"depth":746,"text":2225},{"id":2811,"depth":746,"text":2812},{"id":3232,"depth":746,"text":3233},{"id":3725,"depth":732,"text":4534},"Typing page.fields — *Fields vs *Content",{"id":3965,"depth":732,"text":3966},{"id":4017,"depth":732,"text":4018,"children":4537},[4538,4539,4540],{"id":4021,"depth":746,"text":4022},{"id":4068,"depth":746,"text":4069},{"id":4087,"depth":746,"text":4088},{"id":4175,"depth":732,"text":4176},{"id":4320,"depth":732,"text":54,"children":4543},[4544,4545,4546],{"id":4323,"depth":746,"text":4324},{"id":4350,"depth":746,"text":4351},{"id":4371,"depth":746,"text":4372},{"id":4492,"depth":732,"text":4493},"Generating typed content from your schemas in a Nuxt 4 project.","md",{},{"title":141,"description":4548},"dcZuJ8HdF4twH-IvJ-KX_LXz88L-MS-17NLXBxenSqI",[4554,489],{"title":137,"path":414,"stem":415,"description":4555,"children":-1},"Generating typed content from your schemas in a Next.js project.",1787919221296]