@upstart.gg/sdk 0.0.135 → 0.0.137
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/shared/ai/schemas.d.ts +11 -2
- package/dist/shared/ai/schemas.d.ts.map +1 -1
- package/dist/shared/ai/schemas.js +38 -8
- package/dist/shared/ai/schemas.js.map +1 -1
- package/dist/shared/ai/types.d.ts +93 -81
- package/dist/shared/ai/types.d.ts.map +1 -1
- package/dist/shared/ajv.js +33 -32
- package/dist/shared/ajv.js.map +1 -1
- package/dist/shared/attributes.d.ts +86 -86
- package/dist/shared/attributes.d.ts.map +1 -1
- package/dist/shared/attributes.js +22 -25
- package/dist/shared/brick-manifest.d.ts +8 -5
- package/dist/shared/brick-manifest.d.ts.map +1 -1
- package/dist/shared/brick-manifest.js +3 -18
- package/dist/shared/bricks/manifests/_types.d.ts +9 -0
- package/dist/shared/bricks/manifests/_types.d.ts.map +1 -0
- package/dist/shared/bricks/manifests/_types.js +3 -0
- package/dist/shared/bricks/manifests/accordion.manifest.d.ts +4 -8
- package/dist/shared/bricks/manifests/accordion.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/accordion.manifest.js +13 -20
- package/dist/shared/bricks/manifests/all-manifests.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/all-manifests.js +44 -43
- package/dist/shared/bricks/manifests/all-props.d.ts +1501 -0
- package/dist/shared/bricks/manifests/all-props.d.ts.map +1 -0
- package/dist/shared/bricks/manifests/all-props.js +243 -0
- package/dist/shared/bricks/manifests/all-props.js.map +1 -0
- package/dist/shared/bricks/manifests/box.manifest.d.ts +4 -8
- package/dist/shared/bricks/manifests/box.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/box.manifest.js +16 -20
- package/dist/shared/bricks/manifests/button.manifest.d.ts +5 -12
- package/dist/shared/bricks/manifests/button.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/button.manifest.js +13 -20
- package/dist/shared/bricks/manifests/card.manifest.d.ts +10 -9
- package/dist/shared/bricks/manifests/card.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/card.manifest.js +18 -20
- package/dist/shared/bricks/manifests/carousel.manifest.d.ts +4 -8
- package/dist/shared/bricks/manifests/carousel.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/carousel.manifest.js +15 -20
- package/dist/shared/bricks/manifests/footer.manifest.d.ts +5 -9
- package/dist/shared/bricks/manifests/footer.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/footer.manifest.js +13 -20
- package/dist/shared/bricks/manifests/form.manifest.d.ts +5 -9
- package/dist/shared/bricks/manifests/form.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/form.manifest.js +13 -20
- package/dist/shared/bricks/manifests/hero.manifest.d.ts +4 -8
- package/dist/shared/bricks/manifests/hero.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/hero.manifest.js +13 -20
- package/dist/shared/bricks/manifests/html.manifest.d.ts +3 -7
- package/dist/shared/bricks/manifests/html.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/html.manifest.js +8 -20
- package/dist/shared/bricks/manifests/icon.manifest.d.ts +3 -7
- package/dist/shared/bricks/manifests/icon.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/icon.manifest.js +13 -20
- package/dist/shared/bricks/manifests/image.manifest.d.ts +3 -2
- package/dist/shared/bricks/manifests/image.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/image.manifest.js +16 -20
- package/dist/shared/bricks/manifests/images-gallery.manifest.d.ts +4 -8
- package/dist/shared/bricks/manifests/images-gallery.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/images-gallery.manifest.js +15 -20
- package/dist/shared/bricks/manifests/map.manifest.d.ts +3 -7
- package/dist/shared/bricks/manifests/map.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/map.manifest.js +11 -20
- package/dist/shared/bricks/manifests/navbar.manifest.d.ts +7 -11
- package/dist/shared/bricks/manifests/navbar.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/navbar.manifest.js +15 -20
- package/dist/shared/bricks/manifests/sidebar.manifest.d.ts +3 -7
- package/dist/shared/bricks/manifests/sidebar.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/sidebar.manifest.js +13 -20
- package/dist/shared/bricks/manifests/social-links.manifest.d.ts +4 -8
- package/dist/shared/bricks/manifests/social-links.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/social-links.manifest.js +14 -20
- package/dist/shared/bricks/manifests/spacer.manifest.d.ts +3 -7
- package/dist/shared/bricks/manifests/spacer.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/spacer.manifest.js +8 -20
- package/dist/shared/bricks/manifests/table.manifest.d.ts +6 -10
- package/dist/shared/bricks/manifests/table.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/table.manifest.js +15 -20
- package/dist/shared/bricks/manifests/tabs.manifest.d.ts +6 -10
- package/dist/shared/bricks/manifests/tabs.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/tabs.manifest.js +15 -20
- package/dist/shared/bricks/manifests/testimonials.manifest.d.ts +4 -8
- package/dist/shared/bricks/manifests/testimonials.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/testimonials.manifest.js +18 -20
- package/dist/shared/bricks/manifests/text.manifest.d.ts +4 -12
- package/dist/shared/bricks/manifests/text.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/text.manifest.js +13 -20
- package/dist/shared/bricks/manifests/timeline.manifest.d.ts +9 -13
- package/dist/shared/bricks/manifests/timeline.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/timeline.manifest.js +15 -20
- package/dist/shared/bricks/manifests/video.manifest.d.ts +3 -7
- package/dist/shared/bricks/manifests/video.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/video.manifest.js +11 -20
- package/dist/shared/bricks/props/align.d.ts +0 -3
- package/dist/shared/bricks/props/align.d.ts.map +1 -1
- package/dist/shared/bricks/props/align.js +4 -11
- package/dist/shared/bricks/props/background.d.ts +2 -8
- package/dist/shared/bricks/props/background.d.ts.map +1 -1
- package/dist/shared/bricks/props/background.js +4 -9
- package/dist/shared/bricks/props/border.d.ts +0 -7
- package/dist/shared/bricks/props/border.d.ts.map +1 -1
- package/dist/shared/bricks/props/border.js +5 -10
- package/dist/shared/bricks/props/color-preset.d.ts +316 -6
- package/dist/shared/bricks/props/color-preset.d.ts.map +1 -1
- package/dist/shared/bricks/props/color-preset.js +2 -5
- package/dist/shared/bricks/props/color.d.ts +3 -5
- package/dist/shared/bricks/props/color.d.ts.map +1 -1
- package/dist/shared/bricks/props/color.js +3 -8
- package/dist/shared/bricks/props/common.d.ts.map +1 -1
- package/dist/shared/bricks/props/common.js +4 -5
- package/dist/shared/bricks/props/css-length.d.ts +0 -1
- package/dist/shared/bricks/props/css-length.d.ts.map +1 -1
- package/dist/shared/bricks/props/css-length.js +1 -4
- package/dist/shared/bricks/props/datasource.d.ts +3 -3
- package/dist/shared/bricks/props/datasource.d.ts.map +1 -1
- package/dist/shared/bricks/props/datasource.js +74 -76
- package/dist/shared/bricks/props/datasource.js.map +1 -1
- package/dist/shared/bricks/props/date.js +21 -4
- package/dist/shared/bricks/props/date.js.map +1 -1
- package/dist/shared/bricks/props/direction.d.ts +1 -2
- package/dist/shared/bricks/props/direction.d.ts.map +1 -1
- package/dist/shared/bricks/props/direction.js +4 -7
- package/dist/shared/bricks/props/dynamic.d.ts +5 -67
- package/dist/shared/bricks/props/dynamic.d.ts.map +1 -1
- package/dist/shared/bricks/props/dynamic.js +6 -24
- package/dist/shared/bricks/props/effects.d.ts +1 -3
- package/dist/shared/bricks/props/effects.d.ts.map +1 -1
- package/dist/shared/bricks/props/effects.js +4 -9
- package/dist/shared/bricks/props/geolocation.d.ts.map +1 -1
- package/dist/shared/bricks/props/geolocation.js +3 -6
- package/dist/shared/bricks/props/geolocation.js.map +1 -1
- package/dist/shared/bricks/props/helpers.js +5 -6
- package/dist/shared/bricks/props/image.d.ts +2 -8
- package/dist/shared/bricks/props/image.d.ts.map +1 -1
- package/dist/shared/bricks/props/image.js +4 -7
- package/dist/shared/bricks/props/string.d.ts +2 -5
- package/dist/shared/bricks/props/string.d.ts.map +1 -1
- package/dist/shared/bricks/props/string.js +3 -10
- package/dist/shared/bricks/props/tags.d.ts +0 -1
- package/dist/shared/bricks/props/tags.d.ts.map +1 -1
- package/dist/shared/bricks/props/tags.js +3 -6
- package/dist/shared/bricks/props/text.d.ts +0 -3
- package/dist/shared/bricks/props/text.d.ts.map +1 -1
- package/dist/shared/bricks/props/text.js +4 -11
- package/dist/shared/bricks/props/types.d.ts +2 -2
- package/dist/shared/bricks/props/types.d.ts.map +1 -1
- package/dist/shared/bricks.d.ts +64 -152
- package/dist/shared/bricks.d.ts.map +1 -1
- package/dist/shared/bricks.js +49 -52
- package/dist/shared/chunk-2O5HVPID.js +41 -0
- package/dist/shared/chunk-2O5HVPID.js.map +1 -0
- package/dist/shared/{chunk-F22LDHEO.js → chunk-2U5U3CCJ.js} +3 -18
- package/dist/shared/chunk-2U5U3CCJ.js.map +1 -0
- package/dist/shared/{chunk-LXAO3JA6.js → chunk-4KY7OZWD.js} +35 -35
- package/dist/shared/chunk-4KY7OZWD.js.map +1 -0
- package/dist/shared/{chunk-TNMNMYOB.js → chunk-5RCC2STG.js} +2 -13
- package/dist/shared/chunk-5RCC2STG.js.map +1 -0
- package/dist/shared/{chunk-V3UA3LRK.js → chunk-6AE7UD73.js} +56 -37
- package/dist/shared/chunk-6AE7UD73.js.map +1 -0
- package/dist/shared/chunk-7U5WPHXB.js +346 -0
- package/dist/shared/chunk-7U5WPHXB.js.map +1 -0
- package/dist/shared/{chunk-Q4NPPLEU.js → chunk-BHARJBEK.js} +2 -9
- package/dist/shared/chunk-BHARJBEK.js.map +1 -0
- package/dist/shared/chunk-BZTWZC77.js +530 -0
- package/dist/shared/chunk-BZTWZC77.js.map +1 -0
- package/dist/shared/{chunk-QSND5IWT.js → chunk-DCM4732T.js} +24 -43
- package/dist/shared/chunk-DCM4732T.js.map +1 -0
- package/dist/shared/{chunk-W6MRYRGJ.js → chunk-DRQKKPTX.js} +6 -20
- package/dist/shared/chunk-DRQKKPTX.js.map +1 -0
- package/dist/shared/{chunk-CSF2WQX2.js → chunk-EID5HPF3.js} +15 -12
- package/dist/shared/chunk-EID5HPF3.js.map +1 -0
- package/dist/shared/chunk-EMF5TCPX.js +389 -0
- package/dist/shared/chunk-EMF5TCPX.js.map +1 -0
- package/dist/shared/chunk-FD7YYFRI.js +225 -0
- package/dist/shared/chunk-FD7YYFRI.js.map +1 -0
- package/dist/shared/{chunk-MLZT7MRQ.js → chunk-FHA4DFIM.js} +26 -27
- package/dist/shared/chunk-FHA4DFIM.js.map +1 -0
- package/dist/shared/{chunk-GRMY35BU.js → chunk-FUUSAMN3.js} +165 -40
- package/dist/shared/chunk-FUUSAMN3.js.map +1 -0
- package/dist/shared/chunk-GDYCCB3B.js +22 -0
- package/dist/shared/chunk-GDYCCB3B.js.map +1 -0
- package/dist/shared/chunk-GLV6QIIM.js +41 -0
- package/dist/shared/chunk-GLV6QIIM.js.map +1 -0
- package/dist/shared/chunk-H6TMBELF.js +374 -0
- package/dist/shared/chunk-H6TMBELF.js.map +1 -0
- package/dist/shared/{chunk-BMWRR4DI.js → chunk-HUWMIXNN.js} +26 -28
- package/dist/shared/chunk-HUWMIXNN.js.map +1 -0
- package/dist/shared/chunk-HY7JOP3J.js +150 -0
- package/dist/shared/chunk-HY7JOP3J.js.map +1 -0
- package/dist/shared/{chunk-TFGGYU6Y.js → chunk-IEMCCHM4.js} +7 -12
- package/dist/shared/chunk-IEMCCHM4.js.map +1 -0
- package/dist/shared/{chunk-TB3X4LRQ.js → chunk-J45LSQT6.js} +2 -2
- package/dist/shared/chunk-J45LSQT6.js.map +1 -0
- package/dist/shared/{chunk-WGDUJSSS.js → chunk-JF52BBFD.js} +27 -28
- package/dist/shared/chunk-JF52BBFD.js.map +1 -0
- package/dist/shared/{chunk-GPCI2N2A.js → chunk-JLDAS3VE.js} +136 -33
- package/dist/shared/chunk-JLDAS3VE.js.map +1 -0
- package/dist/shared/{chunk-SE6O65HC.js → chunk-JSDKK5QN.js} +10 -23
- package/dist/shared/chunk-JSDKK5QN.js.map +1 -0
- package/dist/shared/chunk-JW7MQAU4.js +354 -0
- package/dist/shared/chunk-JW7MQAU4.js.map +1 -0
- package/dist/shared/{chunk-RV7AYVFV.js → chunk-KKWT3OXF.js} +4 -19
- package/dist/shared/chunk-KKWT3OXF.js.map +1 -0
- package/dist/shared/{chunk-TEO6TJOM.js → chunk-KQH6V22E.js} +36 -35
- package/dist/shared/{chunk-TEO6TJOM.js.map → chunk-KQH6V22E.js.map} +1 -1
- package/dist/shared/{chunk-3KLRW4I2.js → chunk-LGDDJJHK.js} +212 -156
- package/dist/shared/chunk-LGDDJJHK.js.map +1 -0
- package/dist/shared/{chunk-QL3T5HJQ.js → chunk-LGGPCCCY.js} +3 -3
- package/dist/shared/chunk-LGGPCCCY.js.map +1 -0
- package/dist/shared/{chunk-2HO4FHLM.js → chunk-LPAQ47C6.js} +137 -171
- package/dist/shared/chunk-LPAQ47C6.js.map +1 -0
- package/dist/shared/chunk-MO6CRLQA.js +73 -0
- package/dist/shared/chunk-MO6CRLQA.js.map +1 -0
- package/dist/shared/{chunk-SHUGHJ7V.js → chunk-MYOLWTB2.js} +29 -32
- package/dist/shared/chunk-MYOLWTB2.js.map +1 -0
- package/dist/shared/{chunk-Z2NTDFB4.js → chunk-O24RDXZS.js} +34 -34
- package/dist/shared/chunk-O24RDXZS.js.map +1 -0
- package/dist/shared/{chunk-BPBKHEQ5.js → chunk-OJ6KL7FU.js} +1 -8
- package/dist/shared/chunk-OJ6KL7FU.js.map +1 -0
- package/dist/shared/{chunk-GCQURRVB.js → chunk-PF75LW33.js} +24 -27
- package/dist/shared/chunk-PF75LW33.js.map +1 -0
- package/dist/shared/{chunk-EWSPTRDL.js → chunk-QEJGPYTB.js} +132 -48
- package/dist/shared/chunk-QEJGPYTB.js.map +1 -0
- package/dist/shared/{chunk-P3RH5URN.js → chunk-SK2O7GFC.js} +17 -18
- package/dist/shared/chunk-SK2O7GFC.js.map +1 -0
- package/dist/shared/{chunk-UQF52PWK.js → chunk-SQXZNGQF.js} +8 -23
- package/dist/shared/chunk-SQXZNGQF.js.map +1 -0
- package/dist/shared/{chunk-NTLAKMMQ.js → chunk-SRYBJ6NQ.js} +6 -17
- package/dist/shared/chunk-SRYBJ6NQ.js.map +1 -0
- package/dist/shared/{chunk-O5PLB3YB.js → chunk-T6C3NG2L.js} +68 -59
- package/dist/shared/chunk-T6C3NG2L.js.map +1 -0
- package/dist/shared/{chunk-U7TVEPKA.js → chunk-TBT2PTGB.js} +41 -33
- package/dist/shared/chunk-TBT2PTGB.js.map +1 -0
- package/dist/shared/{chunk-CKFRSHR2.js → chunk-U4KZUX37.js} +18 -19
- package/dist/shared/chunk-U4KZUX37.js.map +1 -0
- package/dist/shared/{chunk-4WI23M7W.js → chunk-VSLRTXLF.js} +11 -4
- package/dist/shared/chunk-VSLRTXLF.js.map +1 -0
- package/dist/shared/{chunk-BHC2A43S.js → chunk-VTCHJT4O.js} +3 -3
- package/dist/shared/{chunk-BHC2A43S.js.map → chunk-VTCHJT4O.js.map} +1 -1
- package/dist/shared/{chunk-DRTGM2UJ.js → chunk-W2RFDII5.js} +3 -3
- package/dist/shared/chunk-W2RFDII5.js.map +1 -0
- package/dist/shared/{chunk-Y74LZNND.js → chunk-WPZV3LYL.js} +4 -10
- package/dist/shared/chunk-WPZV3LYL.js.map +1 -0
- package/dist/shared/chunk-XFZQGRRL.js +101 -0
- package/dist/shared/chunk-XFZQGRRL.js.map +1 -0
- package/dist/shared/{chunk-QQQ3FYPG.js → chunk-XK2CERPB.js} +147 -31
- package/dist/shared/chunk-XK2CERPB.js.map +1 -0
- package/dist/shared/chunk-XNRSL6FL.js +78 -0
- package/dist/shared/chunk-XNRSL6FL.js.map +1 -0
- package/dist/shared/{chunk-2RK3CPYJ.js → chunk-XXPSM6UA.js} +9 -12
- package/dist/shared/chunk-XXPSM6UA.js.map +1 -0
- package/dist/shared/{chunk-ZLYIRH2B.js → chunk-ZRBTAC3G.js} +3 -18
- package/dist/shared/chunk-ZRBTAC3G.js.map +1 -0
- package/dist/shared/{chunk-Z35I5JM5.js → chunk-ZVJNRKT4.js} +18 -20
- package/dist/shared/chunk-ZVJNRKT4.js.map +1 -0
- package/dist/shared/context.d.ts +402 -22
- package/dist/shared/context.d.ts.map +1 -1
- package/dist/shared/context.js +93 -0
- package/dist/shared/context.js.map +1 -1
- package/dist/shared/datarecords/external/airtable/types.d.ts +1 -1
- package/dist/shared/datarecords/external/airtable/types.d.ts.map +1 -1
- package/dist/shared/datarecords/external/airtable/types.js +2 -1
- package/dist/shared/datarecords/types.d.ts +10 -63
- package/dist/shared/datarecords/types.d.ts.map +1 -1
- package/dist/shared/datarecords/types.js +5 -6
- package/dist/shared/datasources/external/instagram/feed/schema.d.ts +1 -1
- package/dist/shared/datasources/external/instagram/feed/schema.d.ts.map +1 -1
- package/dist/shared/datasources/external/instagram/feed/schema.js +4 -1
- package/dist/shared/datasources/external/instagram/feed/schema.js.map +1 -1
- package/dist/shared/datasources/external/mastodon/status/schema.d.ts +6 -6
- package/dist/shared/datasources/external/mastodon/status/schema.d.ts.map +1 -1
- package/dist/shared/datasources/external/mastodon/status/schema.js +6 -19
- package/dist/shared/datasources/external/mastodon/status/schema.js.map +1 -1
- package/dist/shared/datasources/external/meta/oauth/config.d.ts +2 -2
- package/dist/shared/datasources/external/meta/oauth/config.d.ts.map +1 -1
- package/dist/shared/datasources/external/meta/oauth/config.js +4 -1
- package/dist/shared/datasources/external/meta/oauth/config.js.map +1 -1
- package/dist/shared/datasources/external/threads/media/fetcher.js +3 -3
- package/dist/shared/datasources/external/threads/media/schema.d.ts +1 -1
- package/dist/shared/datasources/external/threads/media/schema.d.ts.map +1 -1
- package/dist/shared/datasources/external/threads/media/schema.js +4 -8
- package/dist/shared/datasources/external/threads/media/schema.js.map +1 -1
- package/dist/shared/datasources/internal/blog/schema.d.ts +1 -1
- package/dist/shared/datasources/internal/blog/schema.d.ts.map +1 -1
- package/dist/shared/datasources/internal/blog/schema.js +4 -1
- package/dist/shared/datasources/internal/blog/schema.js.map +1 -1
- package/dist/shared/datasources/types.d.ts +25 -25
- package/dist/shared/datasources/types.d.ts.map +1 -1
- package/dist/shared/datasources/types.js +3 -16
- package/dist/shared/datasources.d.ts +1 -1
- package/dist/shared/datasources.d.ts.map +1 -1
- package/dist/shared/datasources.js +1 -3
- package/dist/shared/datasources.js.map +1 -1
- package/dist/shared/images.d.ts +1 -1
- package/dist/shared/images.d.ts.map +1 -1
- package/dist/shared/images.js +4 -38
- package/dist/shared/images.js.map +1 -1
- package/dist/shared/page.d.ts +139 -22
- package/dist/shared/page.d.ts.map +1 -1
- package/dist/shared/page.js +51 -49
- package/dist/shared/responsive.js +1 -1
- package/dist/shared/site.d.ts +80 -197
- package/dist/shared/site.d.ts.map +1 -1
- package/dist/shared/site.js +55 -114
- package/dist/shared/site.js.map +1 -1
- package/dist/shared/sitemap.d.ts +6 -327
- package/dist/shared/sitemap.d.ts.map +1 -1
- package/dist/shared/sitemap.js +50 -58
- package/dist/shared/theme.d.ts +0 -37
- package/dist/shared/theme.d.ts.map +1 -1
- package/dist/shared/theme.js +4 -21
- package/dist/shared/utils/llm.d.ts +1 -10
- package/dist/shared/utils/llm.d.ts.map +1 -1
- package/dist/shared/utils/llm.js +1 -18
- package/dist/shared/utils/schema.d.ts +3 -2
- package/dist/shared/utils/schema.d.ts.map +1 -1
- package/dist/shared/utils/schema.js +2 -17
- package/dist/shared/utils/string-enum.d.ts +9 -3
- package/dist/shared/utils/string-enum.d.ts.map +1 -1
- package/dist/shared/utils/string-enum.js +1 -1
- package/package.json +21 -5
- package/src/shared/ai/schemas.ts +41 -10
- package/src/shared/ai/types.ts +78 -76
- package/src/shared/attributes.ts +56 -46
- package/src/shared/brick-manifest.ts +5 -6
- package/src/shared/bricks/manifests/_types.ts +9 -0
- package/src/shared/bricks/manifests/accordion.manifest.ts +138 -171
- package/src/shared/bricks/manifests/all-manifests.ts +1 -0
- package/src/shared/bricks/manifests/all-props.ts +165 -0
- package/src/shared/bricks/manifests/box.manifest.ts +214 -150
- package/src/shared/bricks/manifests/button.manifest.ts +204 -79
- package/src/shared/bricks/manifests/card.manifest.ts +229 -43
- package/src/shared/bricks/manifests/carousel.manifest.ts +165 -35
- package/src/shared/bricks/manifests/footer.manifest.ts +18 -20
- package/src/shared/bricks/manifests/form.manifest.ts +136 -22
- package/src/shared/bricks/manifests/hero.manifest.ts +121 -38
- package/src/shared/bricks/manifests/html.manifest.ts +2 -5
- package/src/shared/bricks/manifests/icon.manifest.ts +225 -46
- package/src/shared/bricks/manifests/image.manifest.ts +125 -21
- package/src/shared/bricks/manifests/images-gallery.manifest.ts +15 -20
- package/src/shared/bricks/manifests/map.manifest.ts +12 -15
- package/src/shared/bricks/manifests/navbar.manifest.ts +22 -26
- package/src/shared/bricks/manifests/sidebar.manifest.ts +11 -14
- package/src/shared/bricks/manifests/social-links.manifest.ts +19 -24
- package/src/shared/bricks/manifests/spacer.manifest.ts +2 -5
- package/src/shared/bricks/manifests/table.manifest.ts +17 -20
- package/src/shared/bricks/manifests/tabs.manifest.ts +16 -21
- package/src/shared/bricks/manifests/testimonials.manifest.ts +23 -25
- package/src/shared/bricks/manifests/text.manifest.ts +47 -29
- package/src/shared/bricks/manifests/timeline.manifest.ts +31 -29
- package/src/shared/bricks/manifests/video.manifest.ts +11 -15
- package/src/shared/bricks/props/align.ts +0 -13
- package/src/shared/bricks/props/background.ts +1 -14
- package/src/shared/bricks/props/border.ts +2 -13
- package/src/shared/bricks/props/color-preset.ts +9 -10
- package/src/shared/bricks/props/color.ts +7 -18
- package/src/shared/bricks/props/common.ts +6 -7
- package/src/shared/bricks/props/css-length.ts +0 -5
- package/src/shared/bricks/props/datasource.ts +72 -74
- package/src/shared/bricks/props/direction.ts +1 -5
- package/src/shared/bricks/props/dynamic.ts +0 -11
- package/src/shared/bricks/props/effects.ts +0 -9
- package/src/shared/bricks/props/geolocation.ts +3 -3
- package/src/shared/bricks/props/helpers.ts +1 -1
- package/src/shared/bricks/props/image.ts +4 -16
- package/src/shared/bricks/props/string.ts +6 -19
- package/src/shared/bricks/props/tags.ts +0 -5
- package/src/shared/bricks/props/tests/background.test.ts +1 -15
- package/src/shared/bricks/props/tests/image.test.ts +3 -9
- package/src/shared/bricks/props/tests/string.test.ts +2 -26
- package/src/shared/bricks/props/text.ts +0 -12
- package/src/shared/bricks/props/types.ts +4 -3
- package/src/shared/bricks.ts +164 -1025
- package/src/shared/context.ts +24 -23
- package/src/shared/datarecords/external/airtable/types.ts +12 -11
- package/src/shared/datarecords/types.ts +22 -44
- package/src/shared/datasources/external/instagram/feed/schema.ts +2 -1
- package/src/shared/datasources/external/mastodon/status/schema.ts +4 -19
- package/src/shared/datasources/external/meta/oauth/config.ts +2 -1
- package/src/shared/datasources/external/threads/media/schema.ts +2 -8
- package/src/shared/datasources/internal/blog/schema.ts +2 -1
- package/src/shared/datasources/types.ts +64 -79
- package/src/shared/datasources.ts +2 -4
- package/src/shared/images.ts +12 -18
- package/src/shared/page.ts +9 -2
- package/src/shared/site.ts +3 -3
- package/src/shared/sitemap.ts +3 -68
- package/src/shared/tests/attributes.test.ts +2 -0
- package/src/shared/theme.ts +81 -96
- package/src/shared/utils/llm.ts +5 -191
- package/src/shared/utils/schema.ts +71 -244
- package/src/shared/utils/string-enum.ts +25 -4
- package/src/shared/utils/tests/schema.test.ts +112 -314
- package/dist/shared/chunk-2HO4FHLM.js.map +0 -1
- package/dist/shared/chunk-2RK3CPYJ.js.map +0 -1
- package/dist/shared/chunk-3KLRW4I2.js.map +0 -1
- package/dist/shared/chunk-4WI23M7W.js.map +0 -1
- package/dist/shared/chunk-6E42XWFH.js +0 -103
- package/dist/shared/chunk-6E42XWFH.js.map +0 -1
- package/dist/shared/chunk-A2QPY54H.js +0 -13
- package/dist/shared/chunk-A2QPY54H.js.map +0 -1
- package/dist/shared/chunk-BMWRR4DI.js.map +0 -1
- package/dist/shared/chunk-BPBKHEQ5.js.map +0 -1
- package/dist/shared/chunk-BW6EFRSF.js +0 -794
- package/dist/shared/chunk-BW6EFRSF.js.map +0 -1
- package/dist/shared/chunk-CKFRSHR2.js.map +0 -1
- package/dist/shared/chunk-CSF2WQX2.js.map +0 -1
- package/dist/shared/chunk-D4YQ6ABM.js +0 -338
- package/dist/shared/chunk-D4YQ6ABM.js.map +0 -1
- package/dist/shared/chunk-DRTGM2UJ.js.map +0 -1
- package/dist/shared/chunk-EQMU6NIU.js +0 -1222
- package/dist/shared/chunk-EQMU6NIU.js.map +0 -1
- package/dist/shared/chunk-EWSPTRDL.js.map +0 -1
- package/dist/shared/chunk-F22LDHEO.js.map +0 -1
- package/dist/shared/chunk-FVU5PXRC.js +0 -244
- package/dist/shared/chunk-FVU5PXRC.js.map +0 -1
- package/dist/shared/chunk-GCQURRVB.js.map +0 -1
- package/dist/shared/chunk-GPCI2N2A.js.map +0 -1
- package/dist/shared/chunk-GRMY35BU.js.map +0 -1
- package/dist/shared/chunk-JK2FWFJU.js +0 -15
- package/dist/shared/chunk-JK2FWFJU.js.map +0 -1
- package/dist/shared/chunk-LXAO3JA6.js.map +0 -1
- package/dist/shared/chunk-MLZT7MRQ.js.map +0 -1
- package/dist/shared/chunk-NT3IW52F.js +0 -260
- package/dist/shared/chunk-NT3IW52F.js.map +0 -1
- package/dist/shared/chunk-NTLAKMMQ.js.map +0 -1
- package/dist/shared/chunk-O5PLB3YB.js.map +0 -1
- package/dist/shared/chunk-P3RH5URN.js.map +0 -1
- package/dist/shared/chunk-Q4NPPLEU.js.map +0 -1
- package/dist/shared/chunk-QL3T5HJQ.js.map +0 -1
- package/dist/shared/chunk-QQQ3FYPG.js.map +0 -1
- package/dist/shared/chunk-QSND5IWT.js.map +0 -1
- package/dist/shared/chunk-RV7AYVFV.js.map +0 -1
- package/dist/shared/chunk-SE6O65HC.js.map +0 -1
- package/dist/shared/chunk-SHUGHJ7V.js.map +0 -1
- package/dist/shared/chunk-TB3X4LRQ.js.map +0 -1
- package/dist/shared/chunk-TFGGYU6Y.js.map +0 -1
- package/dist/shared/chunk-TNMNMYOB.js.map +0 -1
- package/dist/shared/chunk-U7TVEPKA.js.map +0 -1
- package/dist/shared/chunk-UQF52PWK.js.map +0 -1
- package/dist/shared/chunk-V3UA3LRK.js.map +0 -1
- package/dist/shared/chunk-W6MRYRGJ.js.map +0 -1
- package/dist/shared/chunk-WGDUJSSS.js.map +0 -1
- package/dist/shared/chunk-WKN566LN.js +0 -29
- package/dist/shared/chunk-WKN566LN.js.map +0 -1
- package/dist/shared/chunk-X6N463D4.js +0 -222
- package/dist/shared/chunk-X6N463D4.js.map +0 -1
- package/dist/shared/chunk-X75YV73Q.js +0 -178
- package/dist/shared/chunk-X75YV73Q.js.map +0 -1
- package/dist/shared/chunk-Y74LZNND.js.map +0 -1
- package/dist/shared/chunk-Z2NTDFB4.js.map +0 -1
- package/dist/shared/chunk-Z35I5JM5.js.map +0 -1
- package/dist/shared/chunk-ZLYIRH2B.js.map +0 -1
- package/dist/shared/schema-registry.d.ts +0 -5
- package/dist/shared/schema-registry.d.ts.map +0 -1
- package/dist/shared/schema-registry.js +0 -119
- package/dist/shared/schema-registry.js.map +0 -1
- package/dist/shared/tests/schema-registry.test.d.ts +0 -2
- package/dist/shared/tests/schema-registry.test.d.ts.map +0 -1
- package/dist/shared/utils/schema-registry.d.ts +0 -5
- package/dist/shared/utils/schema-registry.d.ts.map +0 -1
- package/dist/shared/utils/schema-registry.js +0 -29
- package/dist/shared/utils/tests/schema-registry.test.d.ts +0 -2
- package/dist/shared/utils/tests/schema-registry.test.d.ts.map +0 -1
- package/dist/shared/utils/typed-ref.d.ts +0 -43
- package/dist/shared/utils/typed-ref.d.ts.map +0 -1
- package/dist/shared/utils/typed-ref.js +0 -10
- package/dist/shared/utils/typed-ref.js.map +0 -1
- package/src/shared/schema-registry.ts +0 -82
- package/src/shared/tests/schema-registry.test.ts +0 -14
- package/src/shared/utils/schema-registry.ts +0 -82
- package/src/shared/utils/tests/schema-registry.test.ts +0 -13
- package/src/shared/utils/typed-ref.ts +0 -53
- /package/dist/shared/{utils/schema-registry.js.map → bricks/manifests/_types.js.map} +0 -0
|
@@ -1,246 +1,12 @@
|
|
|
1
1
|
import { describe, expect, test, beforeEach } from "vitest";
|
|
2
|
-
import { Type } from "@sinclair/typebox";
|
|
2
|
+
import { type Static, Type } from "@sinclair/typebox";
|
|
3
3
|
import { resolveSchema, validate } from "../schema";
|
|
4
|
-
import {
|
|
4
|
+
import { toLLMSchema } from "../llm";
|
|
5
5
|
import { sitemapSchema } from "~/shared/sitemap";
|
|
6
|
-
import {
|
|
7
|
-
import { type Section, sectionSchema
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
beforeEach(() => {
|
|
11
|
-
// Clear any test schemas before each test
|
|
12
|
-
unregisterSchema("test:simple");
|
|
13
|
-
unregisterSchema("test:user");
|
|
14
|
-
unregisterSchema("test:address");
|
|
15
|
-
unregisterSchema("test:circular1");
|
|
16
|
-
unregisterSchema("test:circular2");
|
|
17
|
-
unregisterSchema("test:string");
|
|
18
|
-
unregisterSchema("test:number");
|
|
19
|
-
unregisterSchema("test:boolean");
|
|
20
|
-
unregisterSchema("test:base");
|
|
21
|
-
unregisterSchema("test:extended");
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
test("should return primitive types unchanged", () => {
|
|
25
|
-
expect(resolveSchema(null as any)).toBe(null);
|
|
26
|
-
expect(resolveSchema(undefined as any)).toBe(undefined);
|
|
27
|
-
expect(resolveSchema("string" as any)).toBe("string");
|
|
28
|
-
expect(resolveSchema(42 as any)).toBe(42);
|
|
29
|
-
expect(resolveSchema(true as any)).toBe(true);
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
test("should return schema without references unchanged", () => {
|
|
33
|
-
const schema = Type.Object({
|
|
34
|
-
name: Type.String(),
|
|
35
|
-
age: Type.Number(),
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
const result = resolveSchema(schema);
|
|
39
|
-
expect(JSON.stringify(result)).toEqual(JSON.stringify(schema));
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
test("should resolve simple $ref", () => {
|
|
43
|
-
const userSchema = Type.Object({
|
|
44
|
-
name: Type.String(),
|
|
45
|
-
email: Type.String({ format: "email" }),
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
registerSchema("test:user", userSchema);
|
|
49
|
-
|
|
50
|
-
const schemaWithRef = Type.Ref("test:user");
|
|
51
|
-
|
|
52
|
-
const result = resolveSchema(schemaWithRef);
|
|
53
|
-
expect(result.type).toEqual(userSchema.type);
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
// test("should throw error for non-existent $ref", () => {
|
|
57
|
-
// const schemaWithRef = Type.Ref("test:nonexistent");
|
|
58
|
-
|
|
59
|
-
// expect(() => resolveSchema(schemaWithRef)).toThrow("Schema not found for reference: test:nonexistent");
|
|
60
|
-
// });
|
|
61
|
-
|
|
62
|
-
test("should resolve nested object properties", () => {
|
|
63
|
-
const addressSchema = Type.Object({
|
|
64
|
-
street: Type.String(),
|
|
65
|
-
city: Type.String(),
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
registerSchema("test:address", addressSchema);
|
|
69
|
-
|
|
70
|
-
const schema = Type.Object({
|
|
71
|
-
name: Type.String(),
|
|
72
|
-
address: Type.Ref("test:address"),
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
const result = resolveSchema(schema);
|
|
76
|
-
expect(result.properties.name.type).toEqual("string");
|
|
77
|
-
expect(result.properties.address.type).toEqual(addressSchema.type);
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
test("should resolve array items", () => {
|
|
81
|
-
const itemSchema = Type.Object({
|
|
82
|
-
id: Type.Number(),
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
registerSchema("test:simple", itemSchema);
|
|
86
|
-
|
|
87
|
-
const schema = Type.Array(Type.Ref("test:simple"));
|
|
88
|
-
|
|
89
|
-
const result = resolveSchema(schema);
|
|
90
|
-
expect(result.items.type).toEqual(itemSchema.type);
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
test("should resolve array items as array", () => {
|
|
94
|
-
const stringSchema = Type.String();
|
|
95
|
-
const numberSchema = Type.Number();
|
|
96
|
-
|
|
97
|
-
registerSchema("test:string", stringSchema);
|
|
98
|
-
registerSchema("test:number", numberSchema);
|
|
99
|
-
|
|
100
|
-
const schema = Type.Tuple([Type.Ref("test:string"), Type.Ref("test:number")]);
|
|
101
|
-
|
|
102
|
-
const result = resolveSchema(schema);
|
|
103
|
-
expect(result.items).toHaveLength(2);
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
test("should resolve anyOf schemas", () => {
|
|
107
|
-
const stringSchema = Type.String();
|
|
108
|
-
const numberSchema = Type.Number();
|
|
109
|
-
|
|
110
|
-
registerSchema("test:string", stringSchema);
|
|
111
|
-
registerSchema("test:number", numberSchema);
|
|
112
|
-
|
|
113
|
-
const schema = Type.Union([Type.Ref("test:string"), Type.Ref("test:number")]);
|
|
114
|
-
|
|
115
|
-
const result = resolveSchema(schema);
|
|
116
|
-
expect(result.anyOf[0].type).toEqual(stringSchema.type);
|
|
117
|
-
expect(result.anyOf[1].type).toEqual(numberSchema.type);
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
test("should resolve oneOf schemas", () => {
|
|
121
|
-
const stringSchema = Type.String();
|
|
122
|
-
const numberSchema = Type.Number();
|
|
123
|
-
|
|
124
|
-
registerSchema("test:string", stringSchema);
|
|
125
|
-
registerSchema("test:number", numberSchema);
|
|
126
|
-
|
|
127
|
-
const schema = {
|
|
128
|
-
oneOf: [Type.Ref("test:string"), Type.Ref("test:number")],
|
|
129
|
-
} as any;
|
|
130
|
-
|
|
131
|
-
const result = resolveSchema(schema);
|
|
132
|
-
expect(result.oneOf[0].type).toEqual(stringSchema.type);
|
|
133
|
-
expect(result.oneOf[1].type).toEqual(numberSchema.type);
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
test("should resolve allOf schemas", () => {
|
|
137
|
-
const baseSchema = Type.Object({
|
|
138
|
-
id: Type.Number(),
|
|
139
|
-
});
|
|
140
|
-
|
|
141
|
-
const extendedSchema = Type.Object({
|
|
142
|
-
name: Type.String(),
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
registerSchema("test:base", baseSchema);
|
|
146
|
-
registerSchema("test:extended", extendedSchema);
|
|
147
|
-
|
|
148
|
-
const schema = Type.Intersect([Type.Ref("test:base"), Type.Ref("test:extended")]);
|
|
149
|
-
|
|
150
|
-
const result = resolveSchema(schema);
|
|
151
|
-
|
|
152
|
-
expect(result.allOf[0].type).toEqual(baseSchema.type);
|
|
153
|
-
expect(result.allOf[1].type).toEqual(extendedSchema.type);
|
|
154
|
-
});
|
|
155
|
-
|
|
156
|
-
test("should resolve not schemas", () => {
|
|
157
|
-
const stringSchema = Type.String();
|
|
158
|
-
|
|
159
|
-
registerSchema("test:string", stringSchema);
|
|
160
|
-
|
|
161
|
-
const schema = Type.Not(Type.Ref("test:string"));
|
|
162
|
-
|
|
163
|
-
const result = resolveSchema(schema);
|
|
164
|
-
expect(result.not.type).toEqual(stringSchema.type);
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
test("should resolve conditional schemas (if/then/else)", () => {
|
|
168
|
-
const stringSchema = Type.String();
|
|
169
|
-
const numberSchema = Type.Number();
|
|
170
|
-
const booleanSchema = Type.Boolean();
|
|
171
|
-
|
|
172
|
-
registerSchema("test:string", stringSchema);
|
|
173
|
-
registerSchema("test:number", numberSchema);
|
|
174
|
-
registerSchema("test:boolean", booleanSchema);
|
|
175
|
-
|
|
176
|
-
const schema = {
|
|
177
|
-
if: Type.Ref("test:string"),
|
|
178
|
-
// biome-ignore lint/suspicious/noThenProperty: Required for JSON schema conditional validation
|
|
179
|
-
then: Type.Ref("test:number"),
|
|
180
|
-
else: Type.Ref("test:boolean"),
|
|
181
|
-
} as any;
|
|
182
|
-
|
|
183
|
-
const result = resolveSchema(schema);
|
|
184
|
-
expect(result.if.type).toEqual(stringSchema.type);
|
|
185
|
-
expect(result.then.type).toEqual(numberSchema.type);
|
|
186
|
-
expect(result.else.type).toEqual(booleanSchema.type);
|
|
187
|
-
});
|
|
188
|
-
|
|
189
|
-
test("should handle deeply nested schema structures", () => {
|
|
190
|
-
const nestedSchema = Type.Object({
|
|
191
|
-
level1: Type.Object({
|
|
192
|
-
level2: Type.Array(Type.Union([Type.String(), Type.Number()])),
|
|
193
|
-
}),
|
|
194
|
-
});
|
|
195
|
-
|
|
196
|
-
const result = resolveSchema(nestedSchema);
|
|
197
|
-
expect(result).toEqual(nestedSchema);
|
|
198
|
-
});
|
|
199
|
-
|
|
200
|
-
test("should handle empty objects and arrays", () => {
|
|
201
|
-
const schema = Type.Object({});
|
|
202
|
-
|
|
203
|
-
const result = resolveSchema(schema);
|
|
204
|
-
expect(result).toEqual(schema);
|
|
205
|
-
});
|
|
206
|
-
|
|
207
|
-
test("should handle schema with no properties", () => {
|
|
208
|
-
const schema = Type.Object({});
|
|
209
|
-
|
|
210
|
-
const result = resolveSchema(schema);
|
|
211
|
-
expect(result).toEqual(schema);
|
|
212
|
-
});
|
|
213
|
-
|
|
214
|
-
test("should handle complex nested refs", () => {
|
|
215
|
-
const addressSchema = Type.Object({
|
|
216
|
-
street: Type.String(),
|
|
217
|
-
city: Type.String(),
|
|
218
|
-
country: Type.String(),
|
|
219
|
-
});
|
|
220
|
-
|
|
221
|
-
const personSchema = Type.Object({
|
|
222
|
-
name: Type.String(),
|
|
223
|
-
address: Type.Ref("test:address"),
|
|
224
|
-
friends: Type.Array(Type.Ref("test:user")),
|
|
225
|
-
});
|
|
226
|
-
|
|
227
|
-
registerSchema("test:user", personSchema);
|
|
228
|
-
registerSchema("test:address", addressSchema);
|
|
229
|
-
|
|
230
|
-
const schema = Type.Object({
|
|
231
|
-
users: Type.Array(Type.Ref("test:user")),
|
|
232
|
-
});
|
|
233
|
-
|
|
234
|
-
const result = resolveSchema(schema);
|
|
235
|
-
|
|
236
|
-
expect(result.type).toBe("object");
|
|
237
|
-
expect(result.properties.users.type).toBe("array");
|
|
238
|
-
expect(result.properties.users.items.type).toBe("object");
|
|
239
|
-
expect(result.properties.users.items.properties.name.type).toBe("string");
|
|
240
|
-
expect(result.properties.users.items.properties.address.type).toBe("object");
|
|
241
|
-
expect(result.properties.users.items.properties.address.properties.street.type).toBe("string");
|
|
242
|
-
});
|
|
243
|
-
});
|
|
6
|
+
import type { Manifest } from "~/shared/bricks/manifests/text.manifest";
|
|
7
|
+
import { makeFullBrickSchemaForLLM, type Section, sectionSchema } from "~/shared/bricks";
|
|
8
|
+
import type { BrickProps } from "~/shared/bricks/props/types";
|
|
9
|
+
import { type Datarecord, genericDatarecord } from "~/shared/datarecords/types";
|
|
244
10
|
|
|
245
11
|
describe("toLLMSchema tests suite", () => {
|
|
246
12
|
test("should remove metadata properties", () => {
|
|
@@ -638,62 +404,6 @@ describe("toLLMSchema tests suite", () => {
|
|
|
638
404
|
expect(result.properties.profile.properties.internalId).toBeUndefined(); // Should be removed
|
|
639
405
|
});
|
|
640
406
|
|
|
641
|
-
test("should handle ai:hidden in nested schemas", () => {
|
|
642
|
-
const schema = {
|
|
643
|
-
definitions: {
|
|
644
|
-
User: {
|
|
645
|
-
type: "object",
|
|
646
|
-
properties: {
|
|
647
|
-
name: {
|
|
648
|
-
type: "string",
|
|
649
|
-
},
|
|
650
|
-
password: {
|
|
651
|
-
type: "string",
|
|
652
|
-
"ai:hidden": true,
|
|
653
|
-
},
|
|
654
|
-
},
|
|
655
|
-
},
|
|
656
|
-
},
|
|
657
|
-
$defs: {
|
|
658
|
-
Settings: {
|
|
659
|
-
type: "object",
|
|
660
|
-
properties: {
|
|
661
|
-
theme: {
|
|
662
|
-
type: "string",
|
|
663
|
-
},
|
|
664
|
-
apiKey: {
|
|
665
|
-
type: "string",
|
|
666
|
-
"ai:hidden": true,
|
|
667
|
-
},
|
|
668
|
-
},
|
|
669
|
-
},
|
|
670
|
-
},
|
|
671
|
-
patternProperties: {
|
|
672
|
-
"^config_": {
|
|
673
|
-
type: "object",
|
|
674
|
-
properties: {
|
|
675
|
-
value: {
|
|
676
|
-
type: "string",
|
|
677
|
-
},
|
|
678
|
-
secret: {
|
|
679
|
-
type: "string",
|
|
680
|
-
"ai:hidden": true,
|
|
681
|
-
},
|
|
682
|
-
},
|
|
683
|
-
},
|
|
684
|
-
},
|
|
685
|
-
} as any;
|
|
686
|
-
|
|
687
|
-
const result = toLLMSchema(schema);
|
|
688
|
-
|
|
689
|
-
expect(result.definitions.User.properties.name).toBeDefined();
|
|
690
|
-
expect(result.definitions.User.properties.password).toBeUndefined();
|
|
691
|
-
expect(result.$defs.Settings.properties.theme).toBeDefined();
|
|
692
|
-
expect(result.$defs.Settings.properties.apiKey).toBeUndefined();
|
|
693
|
-
expect(result.patternProperties["^config_"].properties.value).toBeDefined();
|
|
694
|
-
expect(result.patternProperties["^config_"].properties.secret).toBeUndefined();
|
|
695
|
-
});
|
|
696
|
-
|
|
697
407
|
test("test with existing Upstart schema", () => {
|
|
698
408
|
const transformed = toLLMSchema(sitemapSchema);
|
|
699
409
|
expect(transformed.items.properties.id.type).toEqual(sitemapSchema.items.properties.id.type);
|
|
@@ -706,32 +416,37 @@ describe("toLLMSchema tests suite", () => {
|
|
|
706
416
|
});
|
|
707
417
|
});
|
|
708
418
|
|
|
709
|
-
describe("inlineSchemaRefs", () => {
|
|
710
|
-
test("should inline simple $ref schemas", () => {
|
|
711
|
-
const inlined = inlineSchemaRefs(sectionSchema);
|
|
712
|
-
expect(inlined.properties.props.properties.colorPreset.$ref).toEqual("#/$defs/presets_color");
|
|
713
|
-
expect(inlined.$defs.presets_color).toBeDefined();
|
|
714
|
-
expect(inlined.$defs.presets_color.type).toBe("object");
|
|
715
|
-
});
|
|
716
|
-
});
|
|
717
|
-
|
|
718
419
|
describe("toLLMSchema consistency", () => {
|
|
719
420
|
test("toLLMSchema(sectionSchema) should equal sectionSchemaLLM", () => {
|
|
720
421
|
const transformed = toLLMSchema(sectionSchema);
|
|
721
|
-
expect(transformed).
|
|
722
|
-
|
|
723
|
-
expect(transformed.$defs.presets_color).toBeDefined();
|
|
724
|
-
expect(transformed.$defs.presets_color.type).toBe("object");
|
|
725
|
-
|
|
726
|
-
expect(sectionSchemaLLM.$defs.presets_color).toBeDefined();
|
|
727
|
-
expect(sectionSchemaLLM.$defs.presets_color.type).toBe("object");
|
|
422
|
+
expect(transformed.properties.props.properties.colorPreset).toBeDefined();
|
|
423
|
+
expect(transformed.properties.props.properties.variant).not.toBeDefined();
|
|
728
424
|
});
|
|
729
425
|
});
|
|
730
426
|
|
|
731
427
|
describe("validation with validate()", () => {
|
|
428
|
+
test("should validate correct schema with @sinclair/typebox", () => {
|
|
429
|
+
const sectionSchemaLLM = toLLMSchema(sectionSchema);
|
|
430
|
+
const validSectionExample: Section = {
|
|
431
|
+
id: "section1",
|
|
432
|
+
label: "Hero Section",
|
|
433
|
+
order: 1,
|
|
434
|
+
props: {
|
|
435
|
+
colorPreset: {
|
|
436
|
+
color: "primary-100",
|
|
437
|
+
},
|
|
438
|
+
maxWidth: "max-w-full",
|
|
439
|
+
verticalMargin: "28px",
|
|
440
|
+
direction: "flex-col",
|
|
441
|
+
},
|
|
442
|
+
bricks: [],
|
|
443
|
+
};
|
|
444
|
+
expect(() => validate(sectionSchema, validSectionExample), "Section schema").not.toThrow();
|
|
445
|
+
expect(() => validate(sectionSchemaLLM, validSectionExample), "Section schema LLM").not.toThrow();
|
|
446
|
+
});
|
|
447
|
+
|
|
732
448
|
test("should validate correct schema", () => {
|
|
733
|
-
|
|
734
|
-
expect(sectionSchemaLLM.$defs.presets_color.type).toBe("object");
|
|
449
|
+
const sectionSchemaLLM = toLLMSchema(sectionSchema);
|
|
735
450
|
const validSectionExample: Section = {
|
|
736
451
|
id: "section1",
|
|
737
452
|
label: "Hero Section",
|
|
@@ -748,4 +463,87 @@ describe("validation with validate()", () => {
|
|
|
748
463
|
};
|
|
749
464
|
expect(() => validate(sectionSchemaLLM, validSectionExample)).not.toThrow();
|
|
750
465
|
});
|
|
466
|
+
|
|
467
|
+
test("should validate a brick without mobileProps", () => {
|
|
468
|
+
const schema = makeFullBrickSchemaForLLM("text");
|
|
469
|
+
const example: BrickProps<Manifest>["brick"] = {
|
|
470
|
+
id: "test-brick-1",
|
|
471
|
+
type: "text",
|
|
472
|
+
props: {
|
|
473
|
+
content: "Hello, world!",
|
|
474
|
+
},
|
|
475
|
+
};
|
|
476
|
+
expect(() => validate(schema, example), `Brick without mobileProps`).not.toThrow();
|
|
477
|
+
});
|
|
478
|
+
|
|
479
|
+
test("should validate unions of literals", () => {
|
|
480
|
+
const schema = genericDatarecord;
|
|
481
|
+
const example: Datarecord = {
|
|
482
|
+
id: "newsletter_subscriptions",
|
|
483
|
+
provider: "internal",
|
|
484
|
+
label: "Newsletter Subscriptions",
|
|
485
|
+
description: "Stores newsletter subscription entries",
|
|
486
|
+
schema: {
|
|
487
|
+
type: "object",
|
|
488
|
+
properties: {
|
|
489
|
+
firstname: { type: "string", title: "Firstname" },
|
|
490
|
+
},
|
|
491
|
+
required: ["email"],
|
|
492
|
+
title: "Newsletter Subscription",
|
|
493
|
+
},
|
|
494
|
+
};
|
|
495
|
+
expect(() => validate(schema, example)).not.toThrow();
|
|
496
|
+
expect(() => validate(toLLMSchema(schema), example)).not.toThrow();
|
|
497
|
+
|
|
498
|
+
const arrayOfDatarecords: Datarecord[] = [
|
|
499
|
+
example,
|
|
500
|
+
{
|
|
501
|
+
id: "user_profiles",
|
|
502
|
+
provider: "airtable",
|
|
503
|
+
label: "User Profiles",
|
|
504
|
+
schema: {
|
|
505
|
+
type: "object",
|
|
506
|
+
properties: {
|
|
507
|
+
username: { type: "string", title: "Username" },
|
|
508
|
+
bio: { type: "string", title: "Bio" },
|
|
509
|
+
},
|
|
510
|
+
required: ["username"],
|
|
511
|
+
title: "User Profile",
|
|
512
|
+
},
|
|
513
|
+
},
|
|
514
|
+
];
|
|
515
|
+
expect(() => validate(Type.Array(schema), arrayOfDatarecords)).not.toThrow();
|
|
516
|
+
expect(() => validate(toLLMSchema(Type.Array(schema)), arrayOfDatarecords)).not.toThrow();
|
|
517
|
+
});
|
|
518
|
+
|
|
519
|
+
test("should validate a brick with partial mobileProps", () => {
|
|
520
|
+
const schema = makeFullBrickSchemaForLLM("text");
|
|
521
|
+
const example: BrickProps<Manifest>["brick"] = {
|
|
522
|
+
id: "test-brick-1",
|
|
523
|
+
type: "text",
|
|
524
|
+
props: {
|
|
525
|
+
content: "Hello, world!",
|
|
526
|
+
},
|
|
527
|
+
mobileProps: {},
|
|
528
|
+
};
|
|
529
|
+
expect(() => validate(schema, example)).not.toThrow();
|
|
530
|
+
|
|
531
|
+
const example2: BrickProps<Manifest>["brick"] = {
|
|
532
|
+
id: "test-brick-1",
|
|
533
|
+
type: "text",
|
|
534
|
+
props: {
|
|
535
|
+
content: "Hello, world!",
|
|
536
|
+
},
|
|
537
|
+
mobileProps: {
|
|
538
|
+
colorPreset: {
|
|
539
|
+
color: "primary-100",
|
|
540
|
+
},
|
|
541
|
+
},
|
|
542
|
+
};
|
|
543
|
+
expect(() => validate(schema, example2)).not.toThrow();
|
|
544
|
+
});
|
|
545
|
+
|
|
546
|
+
test("show section schema", () => {
|
|
547
|
+
console.log("Section schema:", JSON.stringify(sectionSchema));
|
|
548
|
+
});
|
|
751
549
|
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/shared/bricks/manifests/accordion.manifest.ts"],"sourcesContent":["import { Type } from \"@sinclair/typebox\";\nimport { TfiLayoutAccordionSeparated } from \"react-icons/tfi\";\nimport { defineBrickManifest } from \"~/shared/brick-manifest\";\nimport { StringEnum } from \"~/shared/utils/string-enum\";\nimport { boolean } from \"../props/boolean\";\nimport { defineProps } from \"../props/helpers\";\nimport { colorPresetRef } from \"../props/color-preset\";\nimport { fontSizeRef, textContentRef } from \"../props/text\";\nimport type { BrickProps } from \"../props/types\";\nimport { loopRef } from \"../props/dynamic\";\nimport { cssLengthRef } from \"../props/css-length\";\n\nexport const manifest = defineBrickManifest({\n type: \"accordion\",\n name: \"Accordion\",\n description: \"An accordion/collapse element for expandable content\",\n aiInstructions: `\nThis accordion element displays content in collapsible panels.\nIt is typically used for FAQ sections, organized documentation, or to save space.\nEach item has a title and expandable content area.\nMultiple panels can be open simultaneously or limited to one at a time.\n `.trim(),\n icon: TfiLayoutAccordionSeparated,\n\n defaultWidth: { desktop: \"450px\", mobile: \"100%\" },\n\n props: defineProps({\n items: Type.Array(\n Type.Object({\n title: textContentRef({\n title: \"Title\",\n default: \"My title\",\n disableSizing: true,\n showInSettings: true,\n }),\n content: textContentRef({ title: \"Content\", default: \"Expandable content goes here\" }),\n defaultOpen: Type.Optional(boolean(\"Open by default\", false)),\n }),\n {\n title: \"Accordion items\",\n metadata: {\n category: \"content\",\n },\n },\n ),\n fontSize: Type.Optional(fontSizeRef({ default: \"inherit\" })),\n restrictOneOpen: boolean(\"Restrict to one open item\", false, {\n description:\n \"Restrict to one open item at a time. If false, multiple items can be open simultaneously.\",\n }),\n gap: Type.Optional(\n cssLengthRef({\n title: \"Gap\",\n description: \"The gap between the accordion items.\",\n default: \"1px\",\n \"ui:styleId\": \"styles:gap\",\n }),\n ),\n rounding: Type.Optional(\n StringEnum(\n [\n \"rounded-auto\",\n \"rounded-none\",\n \"rounded-sm\",\n \"rounded-md\",\n \"rounded-lg\",\n \"rounded-xl\",\n \"rounded-2xl\",\n \"rounded-3xl\",\n ],\n {\n title: \"Corner rounding\",\n enumNames: [\"Auto\", \"None\", \"Small\", \"Medium\", \"Large\", \"Extra large\", \"2xl\", \"3xl\"],\n \"ui:placeholder\": \"Not specified\",\n \"ui:field\": \"enum\",\n \"ui:display\": \"select\",\n \"ui:styleId\": \"styles:rounding\",\n default: \"rounded-auto\",\n },\n ),\n ),\n colorPreset: Type.Optional(\n colorPresetRef({\n title: \"Color\",\n default: { color: \"bg-primary-500 text-primary-500-content\" },\n }),\n ),\n loop: Type.Optional(loopRef()),\n }),\n});\n\nexport type Manifest = typeof manifest;\n\nexport const examples: {\n description: string;\n type: string;\n props: BrickProps<Manifest>[\"brick\"][\"props\"];\n}[] = [\n {\n description: \"FAQ section with card styling with single open\",\n type: \"accordion\",\n props: {\n restrictOneOpen: true,\n items: [\n {\n title: \"What is included in the basic plan?\",\n content:\n \"The basic plan includes access to all core features, up to 10 projects, 5GB storage, email support, and basic analytics. You can upgrade at any time to access advanced features like API access, priority support, and unlimited projects.\",\n defaultOpen: true,\n },\n {\n title: \"How do I cancel my subscription?\",\n content:\n \"You can cancel your subscription at any time from your account settings. Go to Billing > Manage Subscription > Cancel. Your access will continue until the end of your current billing period, and you won't be charged for the next cycle.\",\n },\n {\n title: \"Is there a free trial available?\",\n content:\n \"Yes! We offer a 14-day free trial with full access to all premium features. No credit card required to start. You can upgrade to a paid plan anytime during or after the trial period.\",\n },\n {\n title: \"What payment methods do you accept?\",\n content:\n \"We accept all major credit cards (Visa, MasterCard, American Express), PayPal, and bank transfers for annual subscriptions. All payments are processed securely through our payment partners.\",\n },\n {\n title: \"Do you offer refunds?\",\n content:\n \"We offer a 30-day money-back guarantee for all new subscriptions. If you're not satisfied with our service, contact our support team within 30 days of your purchase for a full refund.\",\n },\n ],\n },\n },\n {\n description: \"Product features accordion with multiple open panels and secondary color scheme\",\n type: \"accordion\",\n props: {\n restrictOneOpen: false,\n colorPreset: {\n color: \"secondary-400\",\n },\n rounding: \"rounded-lg\",\n gap: \"0.5rem\",\n items: [\n {\n title: \"Advanced Analytics Dashboard\",\n content:\n \"Get detailed insights into your business performance with real-time analytics, custom reports, and data visualization tools. Track key metrics, monitor trends, and make data-driven decisions.\",\n defaultOpen: true,\n },\n {\n title: \"Team Collaboration Tools\",\n content:\n \"Work seamlessly with your team using built-in collaboration features including shared workspaces, real-time editing, comments, and task management. Perfect for remote and hybrid teams.\",\n defaultOpen: true,\n },\n {\n title: \"API Integration & Automation\",\n content:\n \"Connect with over 1000+ popular tools and services through our robust API. Set up automated workflows, sync data across platforms, and streamline your business processes.\",\n },\n {\n title: \"Enterprise Security\",\n content:\n \"Bank-level security with end-to-end encryption, SSO integration, two-factor authentication, and compliance with SOC 2, GDPR, and HIPAA standards.\",\n },\n ],\n },\n },\n {\n description: \"Documentation sections with neutral styling and large font size\",\n type: \"accordion\",\n props: {\n restrictOneOpen: false,\n colorPreset: {\n color: \"neutral-200\",\n },\n fontSize: \"text-lg\",\n rounding: \"rounded-md\",\n gap: \"2px\",\n items: [\n {\n title: \"Getting Started\",\n content:\n \"Learn the basics of our platform with step-by-step tutorials, setup guides, and quick start examples. Perfect for new users who want to get up and running quickly.\",\n },\n {\n title: \"API Reference\",\n content:\n \"Complete API documentation with endpoints, parameters, response examples, and SDKs for popular programming languages including JavaScript, Python, PHP, and Ruby.\",\n },\n {\n title: \"Advanced Configuration\",\n content:\n \"Deep dive into advanced features, custom configurations, webhooks, and enterprise-level integrations. Includes code samples and best practices.\",\n },\n ],\n },\n },\n {\n description: \"Restaurant menu sections with accent colors and extra large rounding\",\n type: \"accordion\",\n props: {\n restrictOneOpen: true,\n colorPreset: {\n color: \"accent-500\",\n },\n rounding: \"rounded-xl\",\n gap: \"1rem\",\n items: [\n {\n title: \"Appetizers & Starters\",\n content:\n \"Bruschetta with Fresh Tomatoes - $8.99<br/>Calamari Rings with Marinara - $12.99<br/>Spinach & Artichoke Dip - $10.99<br/>Buffalo Wings (6 pieces) - $9.99\",\n defaultOpen: true,\n },\n {\n title: \"Main Courses\",\n content:\n \"Grilled Salmon with Herbs - $18.99<br/>Chicken Parmesan with Pasta - $16.99<br/>Ribeye Steak (12oz) - $24.99<br/>Vegetarian Lasagna - $14.99\",\n },\n {\n title: \"Desserts\",\n content:\n \"Tiramisu - $7.99<br/>Chocolate Lava Cake - $8.99<br/>New York Cheesecake - $6.99<br/>Gelato (3 scoops) - $5.99\",\n },\n ],\n },\n },\n {\n description: \"Course curriculum with primary colors and minimal gap\",\n type: \"accordion\",\n props: {\n restrictOneOpen: false,\n colorPreset: {\n color: \"primary-600\",\n },\n rounding: \"rounded-sm\",\n gap: \"1px\",\n fontSize: \"text-base\",\n items: [\n {\n title: \"Week 1: Introduction to Web Development\",\n content:\n \"Learn the fundamentals of HTML, CSS, and basic JavaScript. Set up your development environment and create your first web page. Includes hands-on exercises and project templates.\",\n },\n {\n title: \"Week 2: Responsive Design & CSS Framework\",\n content:\n \"Master responsive web design principles, CSS Grid, Flexbox, and popular frameworks like Bootstrap and Tailwind CSS. Build mobile-first designs that work on all devices.\",\n },\n {\n title: \"Week 3: JavaScript Fundamentals\",\n content:\n \"Deep dive into JavaScript programming including variables, functions, objects, arrays, DOM manipulation, and event handling. Build interactive web applications.\",\n },\n {\n title: \"Week 4: Modern JavaScript & APIs\",\n content:\n \"Learn ES6+ features, async/await, fetch API, and how to work with external APIs. Create dynamic applications that interact with real-world data sources.\",\n },\n ],\n },\n },\n {\n description: \"Legal terms accordion with neutral dark theme and large gaps\",\n type: \"accordion\",\n props: {\n restrictOneOpen: true,\n colorPreset: {\n color: \"neutral-800\",\n },\n rounding: \"rounded-lg\",\n gap: \"1.5rem\",\n fontSize: \"text-sm\",\n items: [\n {\n title: \"Terms of Service\",\n content:\n \"By accessing and using this website, you accept and agree to be bound by the terms and provision of this agreement. These terms apply to all visitors, users, and others who access or use the service.\",\n },\n {\n title: \"Privacy Policy\",\n content:\n \"We collect information you provide directly to us, such as when you create an account, make a purchase, or contact us. We use this information to provide, maintain, and improve our services.\",\n },\n {\n title: \"Cookie Policy\",\n content:\n \"We use cookies and similar tracking technologies to track activity on our service and hold certain information. You can instruct your browser to refuse all cookies or indicate when a cookie is being sent.\",\n },\n ],\n },\n },\n {\n description: \"Event schedule with secondary colors and 2xl rounding\",\n type: \"accordion\",\n props: {\n restrictOneOpen: false,\n colorPreset: {\n color: \"secondary-300\",\n },\n rounding: \"rounded-2xl\",\n gap: \"0.75rem\",\n items: [\n {\n title: \"Day 1: Opening Ceremony & Keynotes\",\n content:\n \"9:00 AM - Registration & Welcome Coffee<br/>10:00 AM - Opening Ceremony<br/>11:00 AM - Keynote: Future of Technology<br/>12:30 PM - Networking Lunch<br/>2:00 PM - Panel Discussion<br/>4:00 PM - Closing Remarks\",\n defaultOpen: true,\n },\n {\n title: \"Day 2: Workshops & Technical Sessions\",\n content:\n \"9:00 AM - Workshop: AI in Practice<br/>11:00 AM - Technical Deep Dive: Cloud Architecture<br/>1:00 PM - Lunch Break<br/>2:30 PM - Hands-on Lab: DevOps Tools<br/>4:30 PM - Q&A Session\",\n },\n {\n title: \"Day 3: Networking & Demo Day\",\n content:\n \"10:00 AM - Startup Pitch Competition<br/>12:00 PM - Demo Showcase<br/>2:00 PM - Networking Session<br/>3:30 PM - Awards Ceremony<br/>5:00 PM - Closing Party\",\n },\n ],\n },\n },\n {\n description: \"Fitness program details with accent colors and 3xl rounding\",\n type: \"accordion\",\n props: {\n restrictOneOpen: true,\n colorPreset: {\n color: \"accent-400\",\n },\n rounding: \"rounded-3xl\",\n gap: \"1.25rem\",\n fontSize: \"text-lg\",\n items: [\n {\n title: \"Beginner Program (4 weeks)\",\n content:\n \"Perfect for newcomers to fitness. Includes basic bodyweight exercises, flexibility training, and cardio. 3 sessions per week, 45 minutes each. Includes nutrition guidance and progress tracking.\",\n },\n {\n title: \"Intermediate Program (8 weeks)\",\n content:\n \"For those with some fitness experience. Combines strength training, HIIT workouts, and endurance building. 4 sessions per week, 60 minutes each. Includes meal planning and supplement recommendations.\",\n },\n {\n title: \"Advanced Program (12 weeks)\",\n content:\n \"High-intensity program for experienced athletes. Features complex movements, periodization, and sport-specific training. 5-6 sessions per week. Includes recovery protocols and performance optimization.\",\n },\n ],\n },\n },\n {\n description: \"Support categories with primary colors and no rounding\",\n type: \"accordion\",\n props: {\n restrictOneOpen: false,\n colorPreset: {\n color: \"primary-300\",\n },\n rounding: \"rounded-none\",\n gap: \"0px\",\n fontSize: \"text-base\",\n items: [\n {\n title: \"Account & Billing\",\n content:\n \"Get help with account settings, password reset, billing questions, subscription management, and payment issues. Average response time: 2 hours during business hours.\",\n },\n {\n title: \"Technical Support\",\n content:\n \"Troubleshoot technical issues, API problems, integration questions, and performance concerns. Includes access to our knowledge base and video tutorials.\",\n },\n {\n title: \"Sales & Partnerships\",\n content:\n \"Inquiries about enterprise solutions, custom pricing, partnership opportunities, and bulk discounts. Schedule a call with our sales team for personalized assistance.\",\n },\n {\n title: \"Feature Requests\",\n content:\n \"Submit ideas for new features, improvements, and integrations. Our product team reviews all suggestions and provides updates on development roadmap.\",\n },\n ],\n },\n },\n {\n description: \"Company policies with neutral colors and small font size\",\n type: \"accordion\",\n props: {\n restrictOneOpen: true,\n colorPreset: {\n color: \"neutral-100\",\n },\n rounding: \"rounded-md\",\n gap: \"0.25rem\",\n fontSize: \"text-sm\",\n items: [\n {\n title: \"Remote Work Policy\",\n content:\n \"All employees have the flexibility to work remotely full-time or adopt a hybrid schedule. Required equipment is provided, and employees must maintain reliable internet connection and dedicated workspace.\",\n },\n {\n title: \"Professional Development\",\n content:\n \"Annual budget of $2,000 per employee for conferences, courses, certifications, and training materials. Time off is provided for approved learning activities and skill development.\",\n },\n {\n title: \"Time Off & Benefits\",\n content:\n \"Unlimited PTO policy with minimum 3 weeks encouraged annually. Comprehensive health insurance, dental, vision, 401k matching, and wellness stipend included.\",\n },\n ],\n },\n },\n {\n description: \"Product comparison with secondary colors and multiple defaults open\",\n type: \"accordion\",\n props: {\n restrictOneOpen: false,\n colorPreset: {\n color: \"secondary-500\",\n },\n rounding: \"rounded-lg\",\n gap: \"0.5rem\",\n fontSize: \"text-base\",\n items: [\n {\n title: \"Basic Plan - $9/month\",\n content:\n \"✓ Up to 5 projects<br/>✓ 10GB storage<br/>✓ Email support<br/>✓ Basic analytics<br/>✓ Mobile app access<br/>✗ API access<br/>✗ Custom integrations\",\n defaultOpen: true,\n },\n {\n title: \"Pro Plan - $29/month\",\n content:\n \"✓ Unlimited projects<br/>✓ 100GB storage<br/>✓ Priority support<br/>✓ Advanced analytics<br/>✓ API access<br/>✓ Custom integrations<br/>✓ Team collaboration\",\n defaultOpen: true,\n },\n {\n title: \"Enterprise Plan - Custom pricing\",\n content:\n \"✓ Everything in Pro<br/>✓ Unlimited storage<br/>✓ Dedicated support<br/>✓ White-label options<br/>✓ SSO integration<br/>✓ Custom contracts<br/>✓ On-premise deployment\",\n },\n ],\n },\n },\n {\n description: \"Troubleshooting guide with accent colors and large font\",\n type: \"accordion\",\n props: {\n restrictOneOpen: false,\n colorPreset: {\n color: \"accent-600\",\n },\n rounding: \"rounded-xl\",\n gap: \"1rem\",\n fontSize: \"text-lg\",\n items: [\n {\n title: \"Connection Issues\",\n content:\n \"1. Check your internet connection<br/>2. Clear browser cache and cookies<br/>3. Disable VPN if active<br/>4. Try incognito/private browsing mode<br/>5. Contact support if issues persist\",\n },\n {\n title: \"Login Problems\",\n content:\n \"1. Verify your email address and password<br/>2. Use 'Forgot Password' to reset<br/>3. Check for CAPS LOCK<br/>4. Try a different browser<br/>5. Ensure account is not suspended\",\n },\n {\n title: \"Performance Issues\",\n content:\n \"1. Close unnecessary browser tabs<br/>2. Update your browser to latest version<br/>3. Disable browser extensions<br/>4. Check system resources (RAM/CPU)<br/>5. Try using the mobile app instead\",\n },\n ],\n },\n },\n];\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/shared/bricks/props/common.ts"],"sourcesContent":["import { type Static, type TString, Type } from \"@sinclair/typebox\";\nimport { typedRef } from \"~/shared/utils/typed-ref\";\nimport { cssLengthRef } from \"./css-length\";\nimport { alignSelfRef } from \"./align\";\n\nexport function hidden() {\n return Type.Object(\n {\n desktop: Type.Optional(Type.Boolean()),\n mobile: Type.Optional(Type.Boolean()),\n },\n {\n // $id: \"styles:hidden\",\n title: \"Hidden\",\n description: \"Used to hide the brick on desktop or mobile.\",\n \"ui:field\": \"hidden\",\n },\n );\n}\n\nexport const commonProps = {\n lastTouched: Type.Optional(\n Type.Number({\n \"ui:field\": \"hidden\",\n \"ai:hidden\": true,\n }),\n ),\n hidden: Type.Optional(typedRef(\"styles:hidden\")),\n editable: Type.Optional(\n Type.Boolean({\n \"ui:field\": \"hidden\",\n \"ai:hidden\": true,\n }),\n ),\n width: Type.Optional(\n cssLengthRef({\n title: \"Fixed Width\",\n description:\n \"Set a fixed width for the brick. If not set, the brick will be responsive and will follow the flex layout of its parent section.\",\n \"ai:instructions\": \"Use percentage values to make the width responsive, like '50%'\",\n \"ui:field\": \"hidden\",\n }) as TString,\n ),\n height: Type.Optional(\n cssLengthRef({\n title: \"Fixed height\",\n description:\n \"Set a fixed height for the brick. If not set, the brick will be responsive and will follow the flex layout of its parent section.\",\n \"ui:field\": \"hidden\",\n }),\n ),\n grow: Type.Optional(\n Type.Boolean({\n title: \"Auto expand\",\n description: \"If set, the brick will grow to fill the available space of its parent section or box.\",\n \"ui:styleId\": \"styles:grow\",\n \"ui:responsive\": true,\n }),\n ),\n alignSelf: Type.Optional(alignSelfRef()),\n};\n\nconst commonPropsSchema = Type.Object(commonProps);\nexport type CommonBrickProps = Static<typeof commonPropsSchema>;\n"],"mappings":";;;;;;;;;;;;;AAAA,SAAoC,YAAY;AAKzC,SAAS,SAAS;AACvB,SAAO,KAAK;AAAA,IACV;AAAA,MACE,SAAS,KAAK,SAAS,KAAK,QAAQ,CAAC;AAAA,MACrC,QAAQ,KAAK,SAAS,KAAK,QAAQ,CAAC;AAAA,IACtC;AAAA,IACA;AAAA;AAAA,MAEE,OAAO;AAAA,MACP,aAAa;AAAA,MACb,YAAY;AAAA,IACd;AAAA,EACF;AACF;AAEO,IAAM,cAAc;AAAA,EACzB,aAAa,KAAK;AAAA,IAChB,KAAK,OAAO;AAAA,MACV,YAAY;AAAA,MACZ,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AAAA,EACA,QAAQ,KAAK,SAAS,SAAS,eAAe,CAAC;AAAA,EAC/C,UAAU,KAAK;AAAA,IACb,KAAK,QAAQ;AAAA,MACX,YAAY;AAAA,MACZ,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AAAA,EACA,OAAO,KAAK;AAAA,IACV,aAAa;AAAA,MACX,OAAO;AAAA,MACP,aACE;AAAA,MACF,mBAAmB;AAAA,MACnB,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AAAA,EACA,QAAQ,KAAK;AAAA,IACX,aAAa;AAAA,MACX,OAAO;AAAA,MACP,aACE;AAAA,MACF,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AAAA,EACA,MAAM,KAAK;AAAA,IACT,KAAK,QAAQ;AAAA,MACX,OAAO;AAAA,MACP,aAAa;AAAA,MACb,cAAc;AAAA,MACd,iBAAiB;AAAA,IACnB,CAAC;AAAA,EACH;AAAA,EACA,WAAW,KAAK,SAAS,aAAa,CAAC;AACzC;AAEA,IAAM,oBAAoB,KAAK,OAAO,WAAW;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/shared/bricks/manifests/box.manifest.ts"],"sourcesContent":["import { defineBrickManifest } from \"~/shared/brick-manifest\";\nimport { defineProps } from \"../props/helpers\";\nimport { Type } from \"@sinclair/typebox\";\nimport { borderRef, roundingRef } from \"../props/border\";\nimport { shadowRef } from \"../props/effects\";\nimport type { BrickProps } from \"../props/types\";\nimport { cssLengthRef } from \"../props/css-length\";\nimport { directionRef } from \"../props/direction\";\nimport { RxBox } from \"react-icons/rx\";\nimport { alignItemsRef, justifyContentRef } from \"../props/align\";\nimport { colorPresetRef } from \"../props/color-preset\";\nimport { loopRef } from \"../props/dynamic\";\n\n// Generic container can hold any type of array data source\nexport const manifest = defineBrickManifest({\n type: \"box\",\n category: \"container\",\n name: \"Box\",\n description: \"A container for stacking bricks horizontally or vertically.\",\n aiInstructions:\n \"A box is a container for other bricks. A box cannot contain other boxes as children. A box should contain at least 2 bricks to be useful, otherwise use a simple brick instead.\",\n isContainer: true,\n defaultWidth: {\n desktop: \"auto\",\n mobile: \"100%\",\n },\n defaultHeight: {\n desktop: \"auto\",\n },\n icon: RxBox,\n props: defineProps({\n colorPreset: Type.Optional(\n colorPresetRef({\n title: \"Color\",\n }),\n ),\n direction: directionRef({\n default: \"flex-col\",\n title: \"Direction\",\n description: \"Direction of the box layout\",\n }),\n justifyContent: Type.Optional(\n justifyContentRef({\n default: \"justify-center\",\n }),\n ),\n alignItems: Type.Optional(\n alignItemsRef({\n default: \"items-stretch\",\n }),\n ),\n gap: Type.Optional(\n cssLengthRef({\n title: \"Gap\",\n default: \"1rem\",\n description: \"Gap between children bricks.\",\n \"ai:instructions\":\n \"Can be a tailwind gap class like 'gap-1' or 'gap-2', or a custom value like '10px'\",\n \"ui:placeholder\": \"Not specified\",\n \"ui:styleId\": \"styles:gap\",\n }),\n ),\n padding: Type.Optional(\n cssLengthRef({\n default: \"1rem\",\n description: \"Padding inside the box.\",\n \"ai:instructions\": \"Use only a single value like '1rem' or '10px'\",\n title: \"Padding\",\n \"ui:placeholder\": \"Not specified\",\n \"ui:styleId\": \"styles:padding\",\n }),\n ),\n wrap: Type.Optional(\n Type.Boolean({\n title: \"Wrap\",\n description: \"Wrap bricks if they overflow the section.\",\n default: false,\n \"ui:styleId\": \"styles:wrap\",\n }),\n ),\n rounding: Type.Optional(\n roundingRef({\n default: \"rounded-md\",\n }),\n ),\n border: Type.Optional(borderRef()),\n shadow: Type.Optional(shadowRef()),\n loop: Type.Optional(loopRef()),\n $children: Type.Array(Type.Any(), {\n \"ui:field\": \"hidden\",\n description: \"List of nested bricks\",\n default: [],\n examples: [\n [\n {\n type: \"text\",\n props: {\n content: \"Hello World\",\n },\n },\n {\n type: \"image\",\n props: {\n src: \"https://via.placeholder.com/150\",\n alt: \"Placeholder Image\",\n },\n },\n ],\n ],\n }),\n }),\n});\n\nexport type Manifest = typeof manifest;\n\nexport const examples: {\n description: string;\n type: string;\n props: BrickProps<Manifest>[\"brick\"][\"props\"];\n}[] = [\n {\n description: \"A simple box with 2 text bricks aligned vertically\",\n type: \"box\",\n props: {\n direction: \"flex-col\",\n gap: \"1rem\",\n $children: [\n {\n type: \"text\",\n props: {\n $children: [\n {\n type: \"text\",\n props: {\n content: \"Hello World\",\n },\n },\n {\n type: \"text\",\n props: {\n content: \"Hello World\",\n },\n },\n ],\n },\n },\n ],\n },\n },\n {\n description: \"A horizontal box with wrapping enabled - images will wrap to new rows if they overflow\",\n type: \"box\",\n props: {\n direction: \"flex-row\",\n gap: \"1rem\",\n wrap: true,\n $children: [\n {\n type: \"image\",\n props: {\n src: \"https://via.placeholder.com/150\",\n alt: \"Placeholder Image\",\n },\n },\n {\n type: \"image\",\n props: {\n src: \"https://via.placeholder.com/150\",\n alt: \"Placeholder Image\",\n },\n },\n {\n type: \"image\",\n props: {\n src: \"https://via.placeholder.com/150\",\n alt: \"Placeholder Image\",\n },\n },\n {\n type: \"image\",\n props: {\n src: \"https://via.placeholder.com/150\",\n alt: \"Placeholder Image\",\n },\n },\n {\n type: \"image\",\n props: {\n src: \"https://via.placeholder.com/150\",\n alt: \"Placeholder Image\",\n },\n },\n ],\n },\n },\n {\n description: \"A vertical box with 2 text bricks and 1 image\",\n type: \"box\",\n props: {\n direction: \"flex-col\",\n gap: \"1rem\",\n $children: [\n {\n type: \"text\",\n props: {\n content: \"Hello World\",\n },\n },\n {\n type: \"image\",\n props: {\n src: \"https://via.placeholder.com/150\",\n alt: \"Placeholder Image\",\n },\n },\n {\n type: \"text\",\n props: {\n content: \"Hello World\",\n },\n },\n ],\n },\n },\n {\n description: \"Employee directory using allEmployees query with vertical layout\",\n type: \"box\",\n props: {\n direction: \"flex-col\",\n gap: \"1.5rem\",\n padding: \"2rem\",\n colorPreset: {\n color: \"neutral-100\",\n },\n rounding: \"rounded-lg\",\n loop: {\n over: \"allEmployees\",\n },\n $children: [\n {\n type: \"text\",\n props: {\n content:\n \"<h3>{{allEmployees.name}}</h3><p><strong>{{allEmployees.position}}</strong></p><p>{{allEmployees.department}} • {{allEmployees.email}}</p>\",\n },\n },\n {\n type: \"image\",\n props: {\n src: \"{{allEmployees.photo}}\",\n alt: \"Photo of {{allEmployees.name}}\",\n },\n },\n ],\n },\n },\n {\n description: \"Blog posts grid using blogPosts query with horizontal cards\",\n type: \"box\",\n props: {\n direction: \"flex-row\",\n gap: \"2rem\",\n padding: \"1rem\",\n justifyContent: \"justify-start\",\n alignItems: \"items-stretch\",\n loop: {\n over: \"blogPosts\",\n },\n $children: [\n {\n type: \"image\",\n props: {\n src: \"{{blogPosts.featuredImage}}\",\n alt: \"{{blogPosts.title}}\",\n },\n },\n {\n type: \"text\",\n props: {\n content:\n \"<h4>{{blogPosts.title}}</h4><p>{{blogPosts.excerpt}}</p><p><em>By {{blogPosts.author}} • {{blogPosts.publishDate}}</em></p>\",\n },\n },\n ],\n },\n },\n {\n description: \"Featured products showcase using featuredProducts query\",\n type: \"box\",\n props: {\n direction: \"flex-col\",\n gap: \"1rem\",\n padding: \"1.5rem\",\n colorPreset: {\n color: \"primary-50\",\n },\n border: {\n width: \"border\",\n color: \"border-primary-200\",\n },\n rounding: \"rounded-xl\",\n shadow: \"shadow-md\",\n loop: {\n over: \"featuredProducts\",\n },\n $children: [\n {\n type: \"image\",\n props: {\n src: \"{{featuredProducts.image}}\",\n alt: \"{{featuredProducts.name}}\",\n },\n },\n {\n type: \"text\",\n props: {\n content:\n \"<h3>{{featuredProducts.name}}</h3><p>{{featuredProducts.description}}</p><p><strong>${{featuredProducts.price}}</strong></p>\",\n },\n },\n {\n type: \"button\",\n props: {\n text: \"Add to Cart\",\n link: \"/cart/add/{{featuredProducts.id}}\",\n },\n },\n ],\n },\n },\n {\n description:\n \"Team members horizontal layout with wrapping - members will wrap to multiple rows on smaller screens\",\n type: \"box\",\n props: {\n direction: \"flex-row\",\n gap: \"2rem\",\n padding: \"2rem\",\n wrap: true,\n justifyContent: \"justify-center\",\n alignItems: \"items-center\",\n colorPreset: {\n color: \"secondary-100\",\n },\n loop: {\n over: \"teamMembers\",\n },\n $children: [\n {\n type: \"image\",\n props: {\n src: \"{{teamMembers.avatar}}\",\n alt: \"{{teamMembers.fullName}}\",\n },\n },\n {\n type: \"text\",\n props: {\n content: \"<h4>{{teamMembers.fullName}}</h4><p>{{teamMembers.role}}</p><p>{{teamMembers.bio}}</p>\",\n },\n },\n ],\n },\n },\n {\n description: \"Event listings using upcomingEvents query with accent styling\",\n type: \"box\",\n props: {\n direction: \"flex-col\",\n gap: \"1.25rem\",\n padding: \"2.5rem\",\n colorPreset: {\n color: \"accent-100\",\n },\n border: {\n width: \"border-2\",\n color: \"border-accent-300\",\n },\n rounding: \"rounded-lg\",\n loop: {\n over: \"upcomingEvents\",\n },\n $children: [\n {\n type: \"text\",\n props: {\n content:\n \"<h3>{{upcomingEvents.title}}</h3><p><strong>{{upcomingEvents.date}} at {{upcomingEvents.time}}</strong></p><p>{{upcomingEvents.venue}} • {{upcomingEvents.city}}</p><p>{{upcomingEvents.description}}</p>\",\n },\n },\n {\n type: \"button\",\n props: {\n text: \"Register Now\",\n link: \"/events/{{upcomingEvents.slug}}/register\",\n },\n },\n ],\n },\n },\n {\n description: \"Testimonials carousel using customerTestimonials query\",\n type: \"box\",\n props: {\n direction: \"flex-col\",\n gap: \"1rem\",\n padding: \"3rem\",\n justifyContent: \"justify-center\",\n alignItems: \"items-center\",\n colorPreset: {\n color: \"neutral-50\",\n },\n shadow: \"shadow-lg\",\n rounding: \"rounded-2xl\",\n loop: {\n over: \"customerTestimonials\",\n },\n $children: [\n {\n type: \"text\",\n props: {\n content:\n '<blockquote>\"{{customerTestimonials.quote}}\"</blockquote><p><strong>{{customerTestimonials.customerName}}</strong></p><p>{{customerTestimonials.company}} • {{customerTestimonials.position}}</p>',\n },\n },\n {\n type: \"icon\",\n props: {\n icon: \"mdi:star\",\n size: \"1.5rem\",\n color: \"#fbbf24\",\n },\n },\n ],\n },\n },\n {\n description: \"Portfolio projects using portfolioProjects query with horizontal layout\",\n type: \"box\",\n props: {\n direction: \"flex-row\",\n gap: \"1.5rem\",\n padding: \"1rem\",\n alignItems: \"items-start\",\n justifyContent: \"justify-start\",\n loop: {\n over: \"portfolioProjects\",\n },\n $children: [\n {\n type: \"image\",\n props: {\n src: \"{{portfolioProjects.thumbnail}}\",\n alt: \"{{portfolioProjects.projectName}}\",\n },\n },\n {\n type: \"text\",\n props: {\n content:\n \"<h4>{{portfolioProjects.projectName}}</h4><p>{{portfolioProjects.client}}</p><p>{{portfolioProjects.category}} • {{portfolioProjects.year}}</p><p>{{portfolioProjects.shortDescription}}</p>\",\n },\n },\n {\n type: \"button\",\n props: {\n text: \"View Project\",\n link: \"/portfolio/{{portfolioProjects.slug}}\",\n },\n },\n ],\n },\n },\n {\n description: \"News articles using latestNews query with vertical stacking\",\n type: \"box\",\n props: {\n direction: \"flex-col\",\n gap: \"2rem\",\n padding: \"2rem\",\n colorPreset: {\n color: \"primary-100\",\n },\n border: {\n width: \"border\",\n color: \"border-primary-300\",\n },\n loop: {\n over: \"latestNews\",\n },\n $children: [\n {\n type: \"text\",\n props: {\n content:\n \"<h3>{{latestNews.headline}}</h3><p><strong>{{latestNews.category}}</strong> • {{latestNews.publishedDate}}</p><p>{{latestNews.summary}}</p>\",\n },\n },\n {\n type: \"text\",\n props: {\n content: \"<a href='/news/{{latestNews.slug}}'>Read full article →</a>\",\n },\n },\n ],\n },\n },\n {\n description: \"Service offerings using companyServices query with centered layout\",\n type: \"box\",\n props: {\n direction: \"flex-col\",\n gap: \"1rem\",\n padding: \"2rem\",\n justifyContent: \"justify-center\",\n alignItems: \"items-center\",\n colorPreset: {\n color: \"secondary-200\",\n },\n rounding: \"rounded-xl\",\n shadow: \"shadow-md\",\n loop: {\n over: \"companyServices\",\n },\n $children: [\n {\n type: \"icon\",\n props: {\n icon: \"{{companyServices.iconName}}\",\n size: \"2rem\",\n color: \"{{companyServices.iconColor}}\",\n },\n },\n {\n type: \"text\",\n props: {\n content:\n \"<h4>{{companyServices.serviceName}}</h4><p>{{companyServices.description}}</p><p><strong>Starting at ${{companyServices.price}}</strong></p>\",\n },\n },\n {\n type: \"button\",\n props: {\n text: \"Learn More\",\n link: \"/services/{{companyServices.serviceSlug}}\",\n },\n },\n ],\n },\n },\n];\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,SAAS,YAAY;AAMrB,SAAS,aAAa;AAMf,IAAM,WAAW,oBAAoB;AAAA,EAC1C,MAAM;AAAA,EACN,UAAU;AAAA,EACV,MAAM;AAAA,EACN,aAAa;AAAA,EACb,gBACE;AAAA,EACF,aAAa;AAAA,EACb,cAAc;AAAA,IACZ,SAAS;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,eAAe;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,MAAM;AAAA,EACN,OAAO,YAAY;AAAA,IACjB,aAAa,KAAK;AAAA,MAChB,eAAe;AAAA,QACb,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,IACA,WAAW,aAAa;AAAA,MACtB,SAAS;AAAA,MACT,OAAO;AAAA,MACP,aAAa;AAAA,IACf,CAAC;AAAA,IACD,gBAAgB,KAAK;AAAA,MACnB,kBAAkB;AAAA,QAChB,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAAA,IACA,YAAY,KAAK;AAAA,MACf,cAAc;AAAA,QACZ,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAAA,IACA,KAAK,KAAK;AAAA,MACR,aAAa;AAAA,QACX,OAAO;AAAA,QACP,SAAS;AAAA,QACT,aAAa;AAAA,QACb,mBACE;AAAA,QACF,kBAAkB;AAAA,QAClB,cAAc;AAAA,MAChB,CAAC;AAAA,IACH;AAAA,IACA,SAAS,KAAK;AAAA,MACZ,aAAa;AAAA,QACX,SAAS;AAAA,QACT,aAAa;AAAA,QACb,mBAAmB;AAAA,QACnB,OAAO;AAAA,QACP,kBAAkB;AAAA,QAClB,cAAc;AAAA,MAChB,CAAC;AAAA,IACH;AAAA,IACA,MAAM,KAAK;AAAA,MACT,KAAK,QAAQ;AAAA,QACX,OAAO;AAAA,QACP,aAAa;AAAA,QACb,SAAS;AAAA,QACT,cAAc;AAAA,MAChB,CAAC;AAAA,IACH;AAAA,IACA,UAAU,KAAK;AAAA,MACb,YAAY;AAAA,QACV,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAAA,IACA,QAAQ,KAAK,SAAS,UAAU,CAAC;AAAA,IACjC,QAAQ,KAAK,SAAS,UAAU,CAAC;AAAA,IACjC,MAAM,KAAK,SAAS,QAAQ,CAAC;AAAA,IAC7B,WAAW,KAAK,MAAM,KAAK,IAAI,GAAG;AAAA,MAChC,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,SAAS,CAAC;AAAA,MACV,UAAU;AAAA,QACR;AAAA,UACE;AAAA,YACE,MAAM;AAAA,YACN,OAAO;AAAA,cACL,SAAS;AAAA,YACX;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,OAAO;AAAA,cACL,KAAK;AAAA,cACL,KAAK;AAAA,YACP;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH,CAAC;AAIM,IAAM,WAIP;AAAA,EACJ;AAAA,IACE,aAAa;AAAA,IACb,MAAM;AAAA,IACN,OAAO;AAAA,MACL,WAAW;AAAA,MACX,KAAK;AAAA,MACL,WAAW;AAAA,QACT;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL,WAAW;AAAA,cACT;AAAA,gBACE,MAAM;AAAA,gBACN,OAAO;AAAA,kBACL,SAAS;AAAA,gBACX;AAAA,cACF;AAAA,cACA;AAAA,gBACE,MAAM;AAAA,gBACN,OAAO;AAAA,kBACL,SAAS;AAAA,gBACX;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,aAAa;AAAA,IACb,MAAM;AAAA,IACN,OAAO;AAAA,MACL,WAAW;AAAA,MACX,KAAK;AAAA,MACL,MAAM;AAAA,MACN,WAAW;AAAA,QACT;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,UACP;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,UACP;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,UACP;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,UACP;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,UACP;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,aAAa;AAAA,IACb,MAAM;AAAA,IACN,OAAO;AAAA,MACL,WAAW;AAAA,MACX,KAAK;AAAA,MACL,WAAW;AAAA,QACT;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,UACP;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,aAAa;AAAA,IACb,MAAM;AAAA,IACN,OAAO;AAAA,MACL,WAAW;AAAA,MACX,KAAK;AAAA,MACL,SAAS;AAAA,MACT,aAAa;AAAA,QACX,OAAO;AAAA,MACT;AAAA,MACA,UAAU;AAAA,MACV,MAAM;AAAA,QACJ,MAAM;AAAA,MACR;AAAA,MACA,WAAW;AAAA,QACT;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SACE;AAAA,UACJ;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,UACP;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,aAAa;AAAA,IACb,MAAM;AAAA,IACN,OAAO;AAAA,MACL,WAAW;AAAA,MACX,KAAK;AAAA,MACL,SAAS;AAAA,MACT,gBAAgB;AAAA,MAChB,YAAY;AAAA,MACZ,MAAM;AAAA,QACJ,MAAM;AAAA,MACR;AAAA,MACA,WAAW;AAAA,QACT;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,UACP;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SACE;AAAA,UACJ;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,aAAa;AAAA,IACb,MAAM;AAAA,IACN,OAAO;AAAA,MACL,WAAW;AAAA,MACX,KAAK;AAAA,MACL,SAAS;AAAA,MACT,aAAa;AAAA,QACX,OAAO;AAAA,MACT;AAAA,MACA,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,MACT;AAAA,MACA,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,MAAM;AAAA,QACJ,MAAM;AAAA,MACR;AAAA,MACA,WAAW;AAAA,QACT;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,UACP;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SACE;AAAA,UACJ;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,aACE;AAAA,IACF,MAAM;AAAA,IACN,OAAO;AAAA,MACL,WAAW;AAAA,MACX,KAAK;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,YAAY;AAAA,MACZ,aAAa;AAAA,QACX,OAAO;AAAA,MACT;AAAA,MACA,MAAM;AAAA,QACJ,MAAM;AAAA,MACR;AAAA,MACA,WAAW;AAAA,QACT;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,UACP;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,aAAa;AAAA,IACb,MAAM;AAAA,IACN,OAAO;AAAA,MACL,WAAW;AAAA,MACX,KAAK;AAAA,MACL,SAAS;AAAA,MACT,aAAa;AAAA,QACX,OAAO;AAAA,MACT;AAAA,MACA,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,MACT;AAAA,MACA,UAAU;AAAA,MACV,MAAM;AAAA,QACJ,MAAM;AAAA,MACR;AAAA,MACA,WAAW;AAAA,QACT;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SACE;AAAA,UACJ;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,aAAa;AAAA,IACb,MAAM;AAAA,IACN,OAAO;AAAA,MACL,WAAW;AAAA,MACX,KAAK;AAAA,MACL,SAAS;AAAA,MACT,gBAAgB;AAAA,MAChB,YAAY;AAAA,MACZ,aAAa;AAAA,QACX,OAAO;AAAA,MACT;AAAA,MACA,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,MAAM;AAAA,QACJ,MAAM;AAAA,MACR;AAAA,MACA,WAAW;AAAA,QACT;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SACE;AAAA,UACJ;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL,MAAM;AAAA,YACN,MAAM;AAAA,YACN,OAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,aAAa;AAAA,IACb,MAAM;AAAA,IACN,OAAO;AAAA,MACL,WAAW;AAAA,MACX,KAAK;AAAA,MACL,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,MAAM;AAAA,QACJ,MAAM;AAAA,MACR;AAAA,MACA,WAAW;AAAA,QACT;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,UACP;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SACE;AAAA,UACJ;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,aAAa;AAAA,IACb,MAAM;AAAA,IACN,OAAO;AAAA,MACL,WAAW;AAAA,MACX,KAAK;AAAA,MACL,SAAS;AAAA,MACT,aAAa;AAAA,QACX,OAAO;AAAA,MACT;AAAA,MACA,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,MACT;AAAA,MACA,MAAM;AAAA,QACJ,MAAM;AAAA,MACR;AAAA,MACA,WAAW;AAAA,QACT;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SACE;AAAA,UACJ;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,aAAa;AAAA,IACb,MAAM;AAAA,IACN,OAAO;AAAA,MACL,WAAW;AAAA,MACX,KAAK;AAAA,MACL,SAAS;AAAA,MACT,gBAAgB;AAAA,MAChB,YAAY;AAAA,MACZ,aAAa;AAAA,QACX,OAAO;AAAA,MACT;AAAA,MACA,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,MAAM;AAAA,QACJ,MAAM;AAAA,MACR;AAAA,MACA,WAAW;AAAA,QACT;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL,MAAM;AAAA,YACN,MAAM;AAAA,YACN,OAAO;AAAA,UACT;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL,SACE;AAAA,UACJ;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/shared/page.ts"],"sourcesContent":["import { pageAttributesSchema } from \"./attributes\";\nimport { sectionSchema } from \"./bricks\";\nimport { Type, type Static } from \"@sinclair/typebox\";\nimport { toLLMSchema } from \"./utils/llm\";\n\nexport const pageSchema = Type.Object({\n id: Type.String({\n description: \"The unique ID of the page. Use a human readable url-safe slug\",\n examples: [\"home\", \"about-us\", \"products-list\"],\n }),\n label: Type.String({\n description: \"The label (name) of the page\",\n examples: [\"Home\", \"About us\", \"Products\"],\n }),\n sections: Type.Array(sectionSchema, {\n description: \"The sections of the page. See the Section schema\",\n }),\n attributes: pageAttributesSchema,\n});\n\nexport type Page = Static<typeof pageSchema>;\nexport type VersionedPage = Page & { version: string };\n\n/**\n * Page context represents the page config PLUS:\n * - the pathParams of the actual request.\n * - the resolved data for the page.\n */\nexport type PageContext = VersionedPage & {\n pathParams?: Record<string, string>;\n data?: Record<string, unknown[]>;\n};\n"],"mappings":";;;;;;;;;;AAEA,SAAS,YAAyB;AAG3B,IAAM,aAAa,KAAK,OAAO;AAAA,EACpC,IAAI,KAAK,OAAO;AAAA,IACd,aAAa;AAAA,IACb,UAAU,CAAC,QAAQ,YAAY,eAAe;AAAA,EAChD,CAAC;AAAA,EACD,OAAO,KAAK,OAAO;AAAA,IACjB,aAAa;AAAA,IACb,UAAU,CAAC,QAAQ,YAAY,UAAU;AAAA,EAC3C,CAAC;AAAA,EACD,UAAU,KAAK,MAAM,eAAe;AAAA,IAClC,aAAa;AAAA,EACf,CAAC;AAAA,EACD,YAAY;AACd,CAAC;","names":[]}
|