@upstart.gg/sdk 0.0.96 → 0.0.98
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/node/cli/api.js +2 -2
- package/dist/node/cli/api.js.map +1 -1
- package/dist/node/cli/commands/login/cmd-login.js +6 -6
- package/dist/node/cli/commands/login/cmd-login.js.map +1 -1
- package/dist/node/cli/commands/publish/cmd-publish.d.ts.map +1 -1
- package/dist/node/cli/commands/publish/cmd-publish.js +18 -18
- package/dist/node/cli/commands/publish/cmd-publish.js.map +1 -1
- package/dist/node/cli/commands/publish/uploader.js +7 -7
- package/dist/node/cli/commands/publish/uploader.js.map +1 -1
- package/dist/node/cli/is-logged-in.js +2 -2
- package/dist/node/cli/is-logged-in.js.map +1 -1
- package/dist/node/cli/program.js +24 -24
- package/dist/node/cli/program.js.map +1 -1
- package/dist/node/shared/config.d.ts +4 -14
- package/dist/node/shared/config.d.ts.map +1 -1
- package/dist/node/shared/config.js +4 -4
- package/dist/node/shared/config.js.map +1 -1
- package/dist/node/shared/logger.d.ts.map +1 -1
- package/dist/node/shared/logger.js +2 -2
- package/dist/node/shared/logger.js.map +1 -1
- package/dist/shared/ajv.d.ts +2 -0
- package/dist/shared/ajv.d.ts.map +1 -1
- package/dist/shared/ajv.js +1 -1
- package/dist/shared/attributes.d.ts +20 -93
- package/dist/shared/attributes.d.ts.map +1 -1
- package/dist/shared/attributes.js +1 -1
- package/dist/shared/brick-manifest.d.ts +7 -17
- package/dist/shared/brick-manifest.d.ts.map +1 -1
- package/dist/shared/brick-manifest.js +1 -1
- package/dist/shared/bricks/manifests/accordion.manifest.d.ts +111 -0
- package/dist/shared/bricks/manifests/accordion.manifest.d.ts.map +1 -0
- package/dist/shared/bricks/manifests/accordion.manifest.js +3 -0
- package/dist/shared/bricks/manifests/all-manifests.d.ts +5 -0
- package/dist/shared/bricks/manifests/all-manifests.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/all-manifests.js +1 -1
- package/dist/shared/bricks/manifests/button.manifest.d.ts +22 -13
- package/dist/shared/bricks/manifests/button.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/button.manifest.js +1 -1
- package/dist/shared/bricks/manifests/card.manifest.d.ts +44 -54
- package/dist/shared/bricks/manifests/card.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/card.manifest.js +1 -1
- package/dist/shared/bricks/manifests/carousel.manifest.d.ts +39 -12
- package/dist/shared/bricks/manifests/carousel.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/carousel.manifest.js +1 -1
- package/dist/shared/bricks/manifests/container.manifest.d.ts +49 -172
- package/dist/shared/bricks/manifests/container.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/container.manifest.js +1 -1
- package/dist/shared/bricks/manifests/divider.manifest.d.ts +63 -0
- package/dist/shared/bricks/manifests/divider.manifest.d.ts.map +1 -0
- package/dist/shared/bricks/manifests/divider.manifest.js +3 -0
- package/dist/shared/bricks/manifests/footer.manifest.d.ts +30 -35
- package/dist/shared/bricks/manifests/footer.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/footer.manifest.js +1 -1
- package/dist/shared/bricks/manifests/form.manifest.d.ts +22 -12
- package/dist/shared/bricks/manifests/form.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/form.manifest.js +1 -1
- package/dist/shared/bricks/manifests/hero.manifest.d.ts +31 -71
- package/dist/shared/bricks/manifests/hero.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/hero.manifest.js +1 -1
- package/dist/shared/bricks/manifests/icon.manifest.d.ts +18 -12
- package/dist/shared/bricks/manifests/icon.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/icon.manifest.js +1 -1
- package/dist/shared/bricks/manifests/image.manifest.d.ts +36 -50
- package/dist/shared/bricks/manifests/image.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/image.manifest.js +1 -1
- package/dist/shared/bricks/manifests/images-gallery.manifest.d.ts +55 -115
- package/dist/shared/bricks/manifests/images-gallery.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/images-gallery.manifest.js +1 -1
- package/dist/shared/bricks/manifests/map.manifest.d.ts +36 -12
- package/dist/shared/bricks/manifests/map.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/map.manifest.js +1 -1
- package/dist/shared/bricks/manifests/navbar.manifest.d.ts +160 -0
- package/dist/shared/bricks/manifests/navbar.manifest.d.ts.map +1 -0
- package/dist/shared/bricks/manifests/navbar.manifest.js +3 -0
- package/dist/shared/bricks/manifests/sidebar.manifest.d.ts +83 -12
- package/dist/shared/bricks/manifests/sidebar.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/sidebar.manifest.js +1 -1
- package/dist/shared/bricks/manifests/social-links.manifest.d.ts +37 -12
- package/dist/shared/bricks/manifests/social-links.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/social-links.manifest.js +1 -1
- package/dist/shared/bricks/manifests/testimonials.manifest.d.ts +94 -0
- package/dist/shared/bricks/manifests/testimonials.manifest.d.ts.map +1 -0
- package/dist/shared/bricks/manifests/testimonials.manifest.js +3 -0
- package/dist/shared/bricks/manifests/text.manifest.d.ts +31 -63
- package/dist/shared/bricks/manifests/text.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/text.manifest.js +1 -1
- package/dist/shared/bricks/manifests/timeline.manifest.d.ts +122 -0
- package/dist/shared/bricks/manifests/timeline.manifest.d.ts.map +1 -0
- package/dist/shared/bricks/manifests/timeline.manifest.js +3 -0
- package/dist/shared/bricks/manifests/video.manifest.d.ts +38 -12
- package/dist/shared/bricks/manifests/video.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/video.manifest.js +1 -1
- package/dist/shared/bricks/props/_style-presets.d.ts +1 -1
- package/dist/shared/bricks/props/_style-presets.d.ts.map +1 -1
- package/dist/shared/bricks/props/_style-presets.js +1 -1
- package/dist/shared/bricks/props/align.d.ts +7 -3
- package/dist/shared/bricks/props/align.d.ts.map +1 -1
- package/dist/shared/bricks/props/align.js +1 -1
- package/dist/shared/bricks/props/background.d.ts +8 -1
- package/dist/shared/bricks/props/background.d.ts.map +1 -1
- package/dist/shared/bricks/props/background.js +1 -1
- package/dist/shared/bricks/props/boolean.js +1 -1
- package/dist/shared/bricks/props/border.d.ts +24 -22
- package/dist/shared/bricks/props/border.d.ts.map +1 -1
- package/dist/shared/bricks/props/border.js +1 -1
- package/dist/shared/bricks/props/color.d.ts +5 -0
- package/dist/shared/bricks/props/color.d.ts.map +1 -0
- package/dist/shared/bricks/props/color.js +3 -0
- package/dist/shared/bricks/props/common.d.ts +9 -1
- package/dist/shared/bricks/props/common.d.ts.map +1 -1
- package/dist/shared/bricks/props/common.js +1 -1
- package/dist/shared/bricks/props/container.d.ts +37 -45
- package/dist/shared/bricks/props/container.d.ts.map +1 -1
- package/dist/shared/bricks/props/container.js +1 -1
- package/dist/shared/bricks/props/css-length.d.ts +5 -0
- package/dist/shared/bricks/props/css-length.d.ts.map +1 -0
- package/dist/shared/bricks/props/css-length.js +3 -0
- package/dist/shared/bricks/props/datasource.d.ts +9 -13
- package/dist/shared/bricks/props/datasource.d.ts.map +1 -1
- package/dist/shared/bricks/props/datasource.js +1 -1
- package/dist/shared/bricks/props/date.d.ts +4 -0
- package/dist/shared/bricks/props/date.d.ts.map +1 -0
- package/dist/shared/bricks/props/date.js +3 -0
- package/dist/shared/bricks/props/effects.d.ts +4 -21
- package/dist/shared/bricks/props/effects.d.ts.map +1 -1
- package/dist/shared/bricks/props/effects.js +1 -1
- package/dist/shared/bricks/props/enum.d.ts +13 -0
- package/dist/shared/bricks/props/enum.d.ts.map +1 -0
- package/dist/shared/bricks/props/enum.js +3 -0
- package/dist/shared/bricks/props/file.d.ts +2 -0
- package/dist/shared/bricks/props/file.d.ts.map +1 -0
- package/dist/shared/bricks/props/file.js +3 -0
- package/dist/shared/bricks/props/geolocation.d.ts +16 -0
- package/dist/shared/bricks/props/geolocation.d.ts.map +1 -0
- package/dist/shared/bricks/props/geolocation.js +3 -0
- package/dist/shared/bricks/props/helpers.d.ts +8 -4
- package/dist/shared/bricks/props/helpers.d.ts.map +1 -1
- package/dist/shared/bricks/props/helpers.js +1 -1
- package/dist/shared/bricks/props/image.d.ts +7 -1
- package/dist/shared/bricks/props/image.d.ts.map +1 -1
- package/dist/shared/bricks/props/image.js +1 -1
- package/dist/shared/bricks/props/number.js +1 -1
- package/dist/shared/bricks/props/padding.d.ts +2 -1
- package/dist/shared/bricks/props/padding.d.ts.map +1 -1
- package/dist/shared/bricks/props/padding.js +1 -1
- package/dist/shared/bricks/props/position.d.ts.map +1 -1
- package/dist/shared/bricks/props/position.js +1 -1
- package/dist/shared/bricks/props/preset.d.ts +92 -0
- package/dist/shared/bricks/props/preset.d.ts.map +1 -0
- package/dist/shared/bricks/props/preset.js +3 -0
- package/dist/shared/bricks/props/string.d.ts +8 -3
- package/dist/shared/bricks/props/string.d.ts.map +1 -1
- package/dist/shared/bricks/props/string.js +1 -1
- package/dist/shared/bricks/props/text.d.ts +3 -4
- package/dist/shared/bricks/props/text.d.ts.map +1 -1
- package/dist/shared/bricks/props/text.js +1 -1
- package/dist/shared/bricks/props/types.d.ts +5 -2
- package/dist/shared/bricks/props/types.d.ts.map +1 -1
- package/dist/shared/bricks.d.ts +243 -134
- package/dist/shared/bricks.d.ts.map +1 -1
- package/dist/shared/bricks.js +1 -1
- package/dist/shared/chunk-2AJYHJFG.js +8 -0
- package/dist/shared/chunk-2HS6NFHZ.js +3 -0
- package/dist/shared/chunk-3LMJVUDG.js +7 -0
- package/dist/shared/chunk-3VZACK2Y.js +3 -0
- package/dist/shared/chunk-3XCKZ4JQ.js +3 -0
- package/dist/shared/chunk-6ALXIMUO.js +3 -0
- package/dist/shared/chunk-6VX2WGTP.js +3 -0
- package/dist/shared/chunk-74EL657O.js +3 -0
- package/dist/shared/chunk-AJDYOLKP.js +3 -0
- package/dist/shared/chunk-AKBI3X4Q.js +3 -0
- package/dist/shared/chunk-ALFOZHAH.js +3 -0
- package/dist/shared/{chunk-FGU4BGP4.js → chunk-ATDJCXC2.js} +1 -1
- package/dist/shared/chunk-AZOGBANS.js +3 -0
- package/dist/shared/chunk-BJSO43AS.js +3 -0
- package/dist/shared/chunk-CAVNF3BU.js +3 -0
- package/dist/shared/chunk-CT4RLIMR.js +6 -0
- package/dist/shared/chunk-CTRS76PX.js +3 -0
- package/dist/shared/chunk-DFSQR6QC.js +3 -0
- package/dist/shared/chunk-ECNYDOAO.js +3 -0
- package/dist/shared/chunk-FHOCVBK6.js +3 -0
- package/dist/shared/chunk-G7LX3UKQ.js +3 -0
- package/dist/shared/chunk-HYVQXAK5.js +3 -0
- package/dist/shared/chunk-I4P4RZXY.js +4 -0
- package/dist/shared/chunk-IIEPRDBY.js +3 -0
- package/dist/shared/chunk-JQXWLMDD.js +8 -0
- package/dist/shared/chunk-KKER3X7F.js +6 -0
- package/dist/shared/chunk-KPYTQFWJ.js +3 -0
- package/dist/shared/chunk-KUGWXEBW.js +3 -0
- package/dist/shared/chunk-KWR57RUG.js +3 -0
- package/dist/shared/chunk-LKVQQQTI.js +3 -0
- package/dist/shared/chunk-MYI3IN5Z.js +3 -0
- package/dist/shared/chunk-NNO3S4VF.js +3 -0
- package/dist/shared/chunk-OUI2VDNM.js +3 -0
- package/dist/shared/chunk-OYIL5SCU.js +3 -0
- package/dist/shared/chunk-P5DZK4TS.js +3 -0
- package/dist/shared/chunk-Q3U4SRIF.js +3 -0
- package/dist/shared/chunk-Q74LWG7R.js +3 -0
- package/dist/shared/chunk-RBLZ3RK4.js +3 -0
- package/dist/shared/chunk-U5AQVZF6.js +3 -0
- package/dist/shared/chunk-U5XOIYSS.js +3 -0
- package/dist/shared/chunk-UBOQDP6V.js +5 -0
- package/dist/shared/chunk-UDQJDXVN.js +3 -0
- package/dist/shared/{chunk-HIZPJNEM.js → chunk-UL7L3HYV.js} +1 -1
- package/dist/shared/chunk-V5ZYAZ7J.js +3 -0
- package/dist/shared/chunk-VA5LFJVE.js +3 -0
- package/dist/shared/chunk-VAC73HJE.js +3 -0
- package/dist/shared/chunk-VBWC36L2.js +3 -0
- package/dist/shared/chunk-VTFWVTPI.js +3 -0
- package/dist/shared/chunk-WAAKB6OB.js +3 -0
- package/dist/shared/chunk-Y27LBC4Q.js +3 -0
- package/dist/shared/chunk-Y7CEEEVW.js +3 -0
- package/dist/shared/chunk-YZ5Y4WE6.js +3 -0
- package/dist/shared/chunk-ZJNA4QQC.js +3 -0
- package/dist/shared/chunk-ZMDHKAWL.js +3 -0
- package/dist/shared/context.d.ts +38 -0
- package/dist/shared/context.d.ts.map +1 -0
- package/dist/shared/{chunk-WJ5CDDXW.js → context.js} +0 -1
- package/dist/shared/datarecords/types.d.ts +40 -20
- package/dist/shared/datarecords/types.d.ts.map +1 -1
- package/dist/shared/datarecords/types.js +1 -1
- package/dist/shared/datasources/external/facebook/posts/fetcher.d.ts.map +1 -1
- package/dist/shared/datasources/external/http-json/fetcher.d.ts.map +1 -0
- package/dist/shared/datasources/external/http-json/options.d.ts.map +1 -0
- package/dist/shared/datasources/external/{json → http-json}/schema.d.ts +0 -1
- package/dist/shared/datasources/external/http-json/schema.d.ts.map +1 -0
- package/dist/shared/datasources/external/http-json/tests/fetcher.test.d.ts.map +1 -0
- package/dist/shared/datasources/external/instagram/feed/fetcher.d.ts.map +1 -1
- package/dist/shared/datasources/external/mastodon/account/fetcher.d.ts.map +1 -1
- package/dist/shared/datasources/external/mastodon/status/fetcher.d.ts.map +1 -1
- package/dist/shared/datasources/external/rss/fetcher.d.ts.map +1 -1
- package/dist/shared/datasources/external/rss/sample.d.ts.map +1 -1
- package/dist/shared/datasources/external/rss/schema.d.ts +7 -13
- package/dist/shared/datasources/external/rss/schema.d.ts.map +1 -1
- package/dist/shared/datasources/external/threads/media/fetcher.d.ts.map +1 -1
- package/dist/shared/datasources/external/tiktok/video/fetcher.d.ts.map +1 -1
- package/dist/shared/datasources/external/youtube/list/fetcher.d.ts.map +1 -1
- package/dist/shared/datasources/external/youtube/list/sample.d.ts +23 -32
- package/dist/shared/datasources/external/youtube/list/sample.d.ts.map +1 -1
- package/dist/shared/datasources/external/youtube/list/schema.d.ts +24 -33
- package/dist/shared/datasources/external/youtube/list/schema.d.ts.map +1 -1
- package/dist/shared/datasources/internal/blog/schema.d.ts.map +1 -1
- package/dist/shared/datasources/internal/changelog/schema.d.ts.map +1 -1
- package/dist/shared/datasources/internal/recipes/schema.d.ts.map +1 -1
- package/dist/shared/datasources/samples.d.ts +1 -1
- package/dist/shared/datasources/samples.d.ts.map +1 -1
- package/dist/shared/datasources/schemas.d.ts +33 -583
- package/dist/shared/datasources/schemas.d.ts.map +1 -1
- package/dist/shared/datasources/schemas.js +1 -1
- package/dist/shared/datasources/types.d.ts +75 -1314
- package/dist/shared/datasources/types.d.ts.map +1 -1
- package/dist/shared/datasources/types.js +1 -1
- package/dist/shared/datasources.d.ts +14 -0
- package/dist/shared/datasources.d.ts.map +1 -1
- package/dist/shared/datasources.js +1 -1
- package/dist/shared/images.d.ts +30 -0
- package/dist/shared/images.d.ts.map +1 -0
- package/dist/shared/images.js +3 -0
- package/dist/shared/layout-constants.js +1 -1
- package/dist/shared/page.d.ts +104 -2670
- package/dist/shared/page.d.ts.map +1 -1
- package/dist/shared/page.js +1 -1
- package/dist/shared/prompt.d.ts +4 -0
- package/dist/shared/prompt.d.ts.map +1 -0
- package/dist/shared/prompt.js +3 -0
- package/dist/shared/responsive.d.ts +3 -3
- package/dist/shared/responsive.d.ts.map +1 -1
- package/dist/shared/responsive.js +1 -1
- package/dist/shared/site.d.ts +545 -0
- package/dist/shared/site.d.ts.map +1 -0
- package/dist/shared/site.js +3 -0
- package/dist/shared/sitemap.d.ts +38 -0
- package/dist/shared/sitemap.d.ts.map +1 -0
- package/dist/shared/sitemap.js +3 -0
- package/dist/shared/theme.d.ts +41 -19
- package/dist/shared/theme.d.ts.map +1 -1
- package/dist/shared/theme.js +1 -1
- package/dist/shared/themes/color-system.d.ts +5 -309
- package/dist/shared/themes/color-system.d.ts.map +1 -1
- package/dist/shared/themes/color-system.js +1 -1
- package/dist/shared/utils/invariant.js +1 -1
- package/dist/shared/utils/schema.d.ts +10 -2
- package/dist/shared/utils/schema.d.ts.map +1 -1
- package/dist/shared/utils/schema.js +1 -1
- package/dist/shared/utils/typed-ref.d.ts +32 -0
- package/dist/shared/utils/typed-ref.d.ts.map +1 -0
- package/dist/shared/utils/typed-ref.js +3 -0
- package/package.json +11 -11
- package/src/node/cli/api.ts +101 -0
- package/src/node/cli/commands/cmd-build.ts +64 -0
- package/src/node/cli/commands/login/cmd-login.ts +111 -0
- package/src/node/cli/commands/logout/cmd-logout.ts +11 -0
- package/src/node/cli/commands/publish/cmd-publish.ts +135 -0
- package/src/node/cli/commands/publish/parse-gitignore.ts +278 -0
- package/src/node/cli/commands/publish/uploader.ts +333 -0
- package/src/node/cli/constants.ts +14 -0
- package/src/node/cli/is-logged-in.ts +28 -0
- package/src/node/cli/program.ts +77 -0
- package/src/node/cli/store.ts +64 -0
- package/src/node/cli/tests/api.test.ts +161 -0
- package/src/node/cli/types.ts +34 -0
- package/src/node/cli/utils.ts +20 -0
- package/src/node/shared/config.ts +69 -0
- package/src/node/shared/logger.ts +44 -0
- package/src/shared/ajv.ts +110 -0
- package/src/shared/analytics/init.ts +14 -0
- package/src/shared/analytics/track.ts +21 -0
- package/src/shared/analytics/types.ts +13 -0
- package/src/shared/attributes.ts +221 -0
- package/src/shared/brick-manifest.ts +110 -0
- package/src/shared/bricks/manifests/accordion.manifest.ts +179 -0
- package/src/shared/bricks/manifests/all-manifests.ts +92 -0
- package/src/shared/bricks/manifests/button.manifest.ts +145 -0
- package/src/shared/bricks/manifests/card.manifest.ts +269 -0
- package/src/shared/bricks/manifests/carousel.manifest.ts +106 -0
- package/src/shared/bricks/manifests/container.manifest.ts +357 -0
- package/src/shared/bricks/manifests/divider.manifest.ts +121 -0
- package/src/shared/bricks/manifests/footer.manifest.ts +487 -0
- package/src/shared/bricks/manifests/form.manifest.ts +112 -0
- package/src/shared/bricks/manifests/hero.manifest.ts +132 -0
- package/src/shared/bricks/manifests/icon.manifest.ts +130 -0
- package/src/shared/bricks/manifests/image.manifest.ts +203 -0
- package/src/shared/bricks/manifests/images-gallery.manifest.ts +227 -0
- package/src/shared/bricks/manifests/map.manifest.ts +75 -0
- package/src/shared/bricks/manifests/navbar.manifest.ts +344 -0
- package/src/shared/bricks/manifests/sidebar.manifest.ts +90 -0
- package/src/shared/bricks/manifests/social-links.manifest.ts +370 -0
- package/src/shared/bricks/manifests/testimonials.manifest.ts +397 -0
- package/src/shared/bricks/manifests/tests/header.manifest.test.ts +10 -0
- package/src/shared/bricks/manifests/text.manifest.ts +164 -0
- package/src/shared/bricks/manifests/timeline.manifest.ts +456 -0
- package/src/shared/bricks/manifests/video.manifest.ts +59 -0
- package/src/shared/bricks/props/_style-presets.ts +352 -0
- package/src/shared/bricks/props/align.ts +59 -0
- package/src/shared/bricks/props/background.ts +118 -0
- package/src/shared/bricks/props/boolean.ts +11 -0
- package/src/shared/bricks/props/border.ts +84 -0
- package/src/shared/bricks/props/color.ts +24 -0
- package/src/shared/bricks/props/common.ts +37 -0
- package/src/shared/bricks/props/container.ts +356 -0
- package/src/shared/bricks/props/css-length.ts +25 -0
- package/src/shared/bricks/props/datasource.ts +60 -0
- package/src/shared/bricks/props/date.ts +24 -0
- package/src/shared/bricks/props/effects.ts +123 -0
- package/src/shared/bricks/props/enum.ts +42 -0
- package/src/shared/bricks/props/file.ts +12 -0
- package/src/shared/bricks/props/geolocation.ts +30 -0
- package/src/shared/bricks/props/helpers.ts +101 -0
- package/src/shared/bricks/props/image.ts +90 -0
- package/src/shared/bricks/props/number.ts +16 -0
- package/src/shared/bricks/props/padding.ts +21 -0
- package/src/shared/bricks/props/position.ts +27 -0
- package/src/shared/bricks/props/preset.ts +136 -0
- package/src/shared/bricks/props/string.ts +60 -0
- package/src/shared/bricks/props/tests/align.test.ts +37 -0
- package/src/shared/bricks/props/tests/background.test.ts +102 -0
- package/src/shared/bricks/props/tests/border.test.ts +38 -0
- package/src/shared/bricks/props/tests/effects.test.ts +37 -0
- package/src/shared/bricks/props/tests/helpers.test.ts +133 -0
- package/src/shared/bricks/props/tests/image.test.ts +71 -0
- package/src/shared/bricks/props/tests/padding.ts +12 -0
- package/src/shared/bricks/props/tests/string.test.ts +79 -0
- package/src/shared/bricks/props/text.ts +66 -0
- package/src/shared/bricks/props/types.ts +57 -0
- package/src/shared/bricks.ts +232 -0
- package/src/shared/context.ts +39 -0
- package/src/shared/datarecords/external/airtable/handler.ts +21 -0
- package/src/shared/datarecords/external/airtable/options.ts +22 -0
- package/src/shared/datarecords/external/generic-webhook/handler.ts +10 -0
- package/src/shared/datarecords/external/generic-webhook/options.ts +13 -0
- package/src/shared/datarecords/external/google/oauth/config.ts +30 -0
- package/src/shared/datarecords/external/google/sheets/handler.ts +26 -0
- package/src/shared/datarecords/external/google/sheets/options.ts +9 -0
- package/src/shared/datarecords/types.ts +120 -0
- package/src/shared/datarecords.ts +5 -0
- package/src/shared/datasources/README.md +3 -0
- package/src/shared/datasources/external/facebook/posts/fetcher.ts +53 -0
- package/src/shared/datasources/external/facebook/posts/sample.ts +35 -0
- package/src/shared/datasources/external/facebook/posts/schema.ts +33 -0
- package/src/shared/datasources/external/facebook/posts/tests/fetcher.test.ts +73 -0
- package/src/shared/datasources/external/http-json/fetcher.ts +28 -0
- package/src/shared/datasources/external/http-json/options.ts +12 -0
- package/src/shared/datasources/external/http-json/schema.ts +6 -0
- package/src/shared/datasources/external/http-json/tests/fetcher.test.ts +70 -0
- package/src/shared/datasources/external/instagram/feed/fetcher.ts +42 -0
- package/src/shared/datasources/external/instagram/feed/sample.ts +22 -0
- package/src/shared/datasources/external/instagram/feed/schema.ts +23 -0
- package/src/shared/datasources/external/instagram/feed/tests/fetcher.test.ts +82 -0
- package/src/shared/datasources/external/mastodon/account/fetcher.ts +32 -0
- package/src/shared/datasources/external/mastodon/account/sample.ts +33 -0
- package/src/shared/datasources/external/mastodon/account/schema.ts +45 -0
- package/src/shared/datasources/external/mastodon/account/tests/fetcher.test.ts +65 -0
- package/src/shared/datasources/external/mastodon/options.ts +11 -0
- package/src/shared/datasources/external/mastodon/status/fetcher.ts +36 -0
- package/src/shared/datasources/external/mastodon/status/sample.array.ts +59 -0
- package/src/shared/datasources/external/mastodon/status/sample.single.ts +55 -0
- package/src/shared/datasources/external/mastodon/status/schema.ts +130 -0
- package/src/shared/datasources/external/mastodon/status/tests/fetcher.test.ts +74 -0
- package/src/shared/datasources/external/meta/oauth/config.ts +16 -0
- package/src/shared/datasources/external/meta/options.ts +11 -0
- package/src/shared/datasources/external/rss/fetcher.ts +29 -0
- package/src/shared/datasources/external/rss/options.ts +11 -0
- package/src/shared/datasources/external/rss/sample.ts +22 -0
- package/src/shared/datasources/external/rss/schema.ts +42 -0
- package/src/shared/datasources/external/threads/media/fetcher.ts +62 -0
- package/src/shared/datasources/external/threads/media/sample.ts +44 -0
- package/src/shared/datasources/external/threads/media/schema.ts +37 -0
- package/src/shared/datasources/external/tiktok/oauth/config.ts +17 -0
- package/src/shared/datasources/external/tiktok/video/fetcher.ts +40 -0
- package/src/shared/datasources/external/tiktok/video/options.ts +12 -0
- package/src/shared/datasources/external/tiktok/video/sample.ts +26 -0
- package/src/shared/datasources/external/tiktok/video/schema.ts +27 -0
- package/src/shared/datasources/external/youtube/list/fetcher.ts +38 -0
- package/src/shared/datasources/external/youtube/list/options.ts +15 -0
- package/src/shared/datasources/external/youtube/list/sample.ts +33 -0
- package/src/shared/datasources/external/youtube/list/schema.ts +38 -0
- package/src/shared/datasources/external/youtube/oauth/config.ts +15 -0
- package/src/shared/datasources/fetcher.ts +17 -0
- package/src/shared/datasources/internal/blog/schema.ts +69 -0
- package/src/shared/datasources/internal/changelog/schema.ts +48 -0
- package/src/shared/datasources/internal/contact-info/schema.ts +20 -0
- package/src/shared/datasources/internal/cv/schema.ts +217 -0
- package/src/shared/datasources/internal/faq/schema.ts +27 -0
- package/src/shared/datasources/internal/job-board/schema.ts +228 -0
- package/src/shared/datasources/internal/links/schema.ts +15 -0
- package/src/shared/datasources/internal/recipes/schema.ts +42 -0
- package/src/shared/datasources/internal/restaurant/schema.ts +225 -0
- package/src/shared/datasources/provider-options.ts +7 -0
- package/src/shared/datasources/samples.ts +26 -0
- package/src/shared/datasources/schemas.ts +45 -0
- package/src/shared/datasources/types.ts +276 -0
- package/src/shared/datasources/utils.ts +16 -0
- package/src/shared/datasources.ts +42 -0
- package/src/shared/env.ts +23 -0
- package/src/shared/errors.ts +1 -0
- package/src/shared/images.ts +44 -0
- package/src/shared/index.ts +3 -0
- package/src/shared/layout-constants.ts +25 -0
- package/src/shared/manifest.ts +50 -0
- package/src/shared/oauth.ts +16 -0
- package/src/shared/page.ts +61 -0
- package/src/shared/prompt.ts +9 -0
- package/src/shared/responsive.ts +5 -0
- package/src/shared/site.ts +97 -0
- package/src/shared/sitemap.ts +66 -0
- package/src/shared/social-icons.ts +307 -0
- package/src/shared/tests/attributes.test.ts +37 -0
- package/src/shared/theme.ts +245 -0
- package/src/shared/themes/README.md +34 -0
- package/src/shared/themes/color-system.ts +127 -0
- package/src/shared/utils/canvas-data-uri.ts +2 -0
- package/src/shared/utils/invariant.ts +25 -0
- package/src/shared/utils/json-date.ts +8 -0
- package/src/shared/utils/merge.ts +12 -0
- package/src/shared/utils/object-hash.ts +7 -0
- package/src/shared/utils/schema.ts +30 -0
- package/src/shared/utils/try-catch.ts +12 -0
- package/src/shared/utils/typed-ref.ts +41 -0
- package/dist/shared/bricks/manifests/countdown.manifest.d.ts +0 -57
- package/dist/shared/bricks/manifests/countdown.manifest.d.ts.map +0 -1
- package/dist/shared/bricks/manifests/countdown.manifest.js +0 -3
- package/dist/shared/bricks/manifests/generic-component.manifest.d.ts +0 -62
- package/dist/shared/bricks/manifests/generic-component.manifest.d.ts.map +0 -1
- package/dist/shared/bricks/manifests/generic-component.manifest.js +0 -3
- package/dist/shared/bricks/manifests/header.manifest.d.ts +0 -275
- package/dist/shared/bricks/manifests/header.manifest.d.ts.map +0 -1
- package/dist/shared/bricks/manifests/header.manifest.js +0 -3
- package/dist/shared/bricks/props/_docs-common-styles.d.ts +0 -59
- package/dist/shared/bricks/props/_docs-common-styles.d.ts.map +0 -1
- package/dist/shared/bricks/props/_docs-common-styles.js +0 -3
- package/dist/shared/bricks/props/tests/container.test.d.ts +0 -2
- package/dist/shared/bricks/props/tests/container.test.d.ts.map +0 -1
- package/dist/shared/chunk-2ZPY4LCA.js +0 -3
- package/dist/shared/chunk-3CY6AZG7.js +0 -3
- package/dist/shared/chunk-4K5NN4CN.js +0 -3
- package/dist/shared/chunk-4NCCSLBW.js +0 -3
- package/dist/shared/chunk-6I4PY5WS.js +0 -3
- package/dist/shared/chunk-6LDLGZUM.js +0 -3
- package/dist/shared/chunk-AZ63RF3K.js +0 -3
- package/dist/shared/chunk-BH4HTAAC.js +0 -3
- package/dist/shared/chunk-BK6LBWDI.js +0 -3
- package/dist/shared/chunk-BMDB2V7J.js +0 -3
- package/dist/shared/chunk-DAPQ4JPP.js +0 -3
- package/dist/shared/chunk-ECZ6FGZM.js +0 -3
- package/dist/shared/chunk-EFJQECVB.js +0 -3
- package/dist/shared/chunk-F2ZVIFHO.js +0 -3
- package/dist/shared/chunk-H6L4KRCJ.js +0 -3
- package/dist/shared/chunk-IWSVY2VC.js +0 -3
- package/dist/shared/chunk-JVDUEZYO.js +0 -3
- package/dist/shared/chunk-KB4HY432.js +0 -3
- package/dist/shared/chunk-KOTGMAXH.js +0 -3
- package/dist/shared/chunk-LDOM2LJF.js +0 -3
- package/dist/shared/chunk-NFU5BF6G.js +0 -3
- package/dist/shared/chunk-P5FVZ5PL.js +0 -3
- package/dist/shared/chunk-PD7P5KSV.js +0 -3
- package/dist/shared/chunk-PJ6HA55L.js +0 -3
- package/dist/shared/chunk-PSNFBHPU.js +0 -3
- package/dist/shared/chunk-PSSJMWGU.js +0 -3
- package/dist/shared/chunk-PU2FOOTY.js +0 -3
- package/dist/shared/chunk-Q4MXTCE4.js +0 -8
- package/dist/shared/chunk-RBYYMUOZ.js +0 -3
- package/dist/shared/chunk-S2RQWOG2.js +0 -3
- package/dist/shared/chunk-SO5M7CYA.js +0 -3
- package/dist/shared/chunk-THRRILTW.js +0 -3
- package/dist/shared/chunk-TQ23UATQ.js +0 -3
- package/dist/shared/chunk-U44NTSIO.js +0 -3
- package/dist/shared/chunk-U4R5EGBK.js +0 -3
- package/dist/shared/chunk-WOEBR25A.js +0 -3
- package/dist/shared/chunk-WPTVLIYS.js +0 -3
- package/dist/shared/chunk-WXKRIUTA.js +0 -3
- package/dist/shared/chunk-XBX6II3M.js +0 -3
- package/dist/shared/chunk-XEQ2XZLQ.js +0 -3
- package/dist/shared/chunk-XGCBIXOO.js +0 -3
- package/dist/shared/chunk-YY6DANZF.js +0 -3
- package/dist/shared/chunk-ZWQHIQEQ.js +0 -3
- package/dist/shared/datasources/external/json/fetcher.d.ts.map +0 -1
- package/dist/shared/datasources/external/json/options.d.ts.map +0 -1
- package/dist/shared/datasources/external/json/schema.d.ts.map +0 -1
- package/dist/shared/datasources/external/json/tests/fetcher.test.d.ts.map +0 -1
- package/dist/shared/datasources/external/rss/tests/fetcher.test.d.ts +0 -2
- package/dist/shared/datasources/external/rss/tests/fetcher.test.d.ts.map +0 -1
- package/dist/shared/template.d.ts +0 -898
- package/dist/shared/template.d.ts.map +0 -1
- package/dist/shared/template.js +0 -3
- package/dist/shared/tests/page.test.d.ts +0 -2
- package/dist/shared/tests/page.test.d.ts.map +0 -1
- package/dist/shared/tests/test-config.d.ts +0 -3
- package/dist/shared/tests/test-config.d.ts.map +0 -1
- package/dist/shared/themes/all-themes.d.ts +0 -3
- package/dist/shared/themes/all-themes.d.ts.map +0 -1
- package/dist/shared/themes/all-themes.js +0 -3
- /package/dist/shared/datasources/external/{json → http-json}/fetcher.d.ts +0 -0
- /package/dist/shared/datasources/external/{json → http-json}/options.d.ts +0 -0
- /package/dist/shared/datasources/external/{json → http-json}/tests/fetcher.test.d.ts +0 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Theme guidelines
|
|
2
|
+
|
|
3
|
+
## Primary color
|
|
4
|
+
|
|
5
|
+
Main brand color, used for key actions and important UI elements.
|
|
6
|
+
|
|
7
|
+
### Uses
|
|
8
|
+
- Primary buttons (600bg)
|
|
9
|
+
- Selected state (100bg, 700 text)
|
|
10
|
+
|
|
11
|
+
### Shades
|
|
12
|
+
|
|
13
|
+
- 50-100: Selected states, hover backgrounds
|
|
14
|
+
- 200-300: Subtle highlights
|
|
15
|
+
- 500-600: Buttons, key actions
|
|
16
|
+
- 700: Text links, icons
|
|
17
|
+
- 800-900: Heavy emphasis
|
|
18
|
+
|
|
19
|
+
## Secondary color
|
|
20
|
+
|
|
21
|
+
Supporting colors, used for secondary actions and UI elements.
|
|
22
|
+
|
|
23
|
+
### Shades
|
|
24
|
+
|
|
25
|
+
- 50-100: Backgrounds, containers
|
|
26
|
+
- 200-300: Borders, dividers
|
|
27
|
+
- 500-600: Secondary buttons
|
|
28
|
+
- 700: Secondary text
|
|
29
|
+
- 800: Headers in secondary contexts
|
|
30
|
+
|
|
31
|
+
## Accent Color
|
|
32
|
+
|
|
33
|
+
Used sparingly for attention-grabbing elements and highlights
|
|
34
|
+
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import chroma from "chroma-js";
|
|
2
|
+
import type { Theme } from "../theme";
|
|
3
|
+
export { default as chroma } from "chroma-js";
|
|
4
|
+
import { kebabCase } from "lodash-es";
|
|
5
|
+
import { css } from "@upstart.gg/style-system/twind";
|
|
6
|
+
|
|
7
|
+
export type ColorType = keyof Theme["colors"];
|
|
8
|
+
export type ElementColorType = "page-background" | "background" | "text" | "border" | "shadow";
|
|
9
|
+
|
|
10
|
+
export const baseColorsLabels: Record<ColorType, string> = {
|
|
11
|
+
primary: "Primary",
|
|
12
|
+
secondary: "Secondary",
|
|
13
|
+
accent: "Accent",
|
|
14
|
+
neutral: "Neutral",
|
|
15
|
+
base100: "Base (level 1)",
|
|
16
|
+
base200: "Base (level 2)",
|
|
17
|
+
base300: "Base (level 3)",
|
|
18
|
+
baseContent: "Base content",
|
|
19
|
+
primaryContent: "Primary content",
|
|
20
|
+
secondaryContent: "Secondary content",
|
|
21
|
+
accentContent: "Accent content",
|
|
22
|
+
neutralContent: "Neutral content",
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export const shadeNumbers = [900, 800, 700, 600, 500, 400, 300, 200, 100, 50] as const;
|
|
26
|
+
type ShadeNumber = (typeof shadeNumbers)[number];
|
|
27
|
+
|
|
28
|
+
const semanticAliases: Partial<Record<ShadeNumber, string>> = {
|
|
29
|
+
100: "subtle",
|
|
30
|
+
300: "light",
|
|
31
|
+
700: "bold",
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export type ElementColor = string;
|
|
35
|
+
|
|
36
|
+
export function getColorsSuggestions(baseHueOrColor: number | string, theme: Theme) {
|
|
37
|
+
return [];
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function isStandardColor(color: unknown): boolean {
|
|
41
|
+
if (typeof color !== "string") {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
return (
|
|
45
|
+
color.startsWith("oklch") ||
|
|
46
|
+
color.startsWith("oklab") ||
|
|
47
|
+
color.startsWith("rgb") ||
|
|
48
|
+
color.startsWith("hsl") ||
|
|
49
|
+
color.startsWith("#") ||
|
|
50
|
+
color.startsWith("var(--")
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export function propToStyle(prop: string | number | undefined, cssAttr: string) {
|
|
55
|
+
if (typeof prop === "undefined") {
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
// @ts-ignore
|
|
59
|
+
return isStandardColor(prop) || typeof prop === "number" ? css({ [cssAttr as string]: prop }) : prop;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export function getContrastingTextColor(backgroundColor: string, contrastThreshold = 4.5): string {
|
|
63
|
+
// Convert the background color to a chroma color object
|
|
64
|
+
const bgColor = chroma(backgroundColor);
|
|
65
|
+
|
|
66
|
+
// Get potential text colors
|
|
67
|
+
const white = "#ffffff";
|
|
68
|
+
const black = "#000000";
|
|
69
|
+
|
|
70
|
+
// Calculate contrast ratios
|
|
71
|
+
const contrastWithWhite = chroma.contrast(bgColor, white);
|
|
72
|
+
const contrastWithBlack = chroma.contrast(bgColor, black);
|
|
73
|
+
|
|
74
|
+
// If both options meet the contrast threshold, return the one with better contrast
|
|
75
|
+
if (contrastWithWhite >= contrastThreshold && contrastWithBlack >= contrastThreshold) {
|
|
76
|
+
return contrastWithWhite >= contrastWithBlack ? white : black;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// If only one meets the threshold, use that one
|
|
80
|
+
if (contrastWithWhite >= contrastThreshold) {
|
|
81
|
+
return white;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (contrastWithBlack >= contrastThreshold) {
|
|
85
|
+
return black;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// If neither meets the threshold, return the one with better contrast
|
|
89
|
+
// (though it may not meet accessibility standards)
|
|
90
|
+
return contrastWithWhite >= contrastWithBlack ? white : black;
|
|
91
|
+
}
|
|
92
|
+
export function propToClass(value: string | number | undefined, classPrefix: string) {
|
|
93
|
+
if (typeof value === "undefined") {
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
return isStandardColor(value) || typeof value === "number" ? `${classPrefix}-[${value}]` : value;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export function generateColorsVars(theme: Theme) {
|
|
100
|
+
const shades: Record<string, string> = {};
|
|
101
|
+
|
|
102
|
+
Object.entries(theme.colors).forEach(([colorName, color]) => {
|
|
103
|
+
// Add the original color as the default (without number suffix)
|
|
104
|
+
shades[`color-${kebabCase(colorName)}`] = color;
|
|
105
|
+
|
|
106
|
+
// Handle base colors separately (they already have shades)
|
|
107
|
+
if (colorName.startsWith("base")) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const darkest = chroma(color).darken(2.5);
|
|
112
|
+
const lightest = chroma(color).brighten(3.5);
|
|
113
|
+
|
|
114
|
+
const colorScale = chroma.scale([lightest, color, darkest]).domain([50, 500, 900]).mode("lab"); // Use LAB color space for better perceptual scaling
|
|
115
|
+
|
|
116
|
+
shadeNumbers.forEach((shade) => {
|
|
117
|
+
const varName = `color-${kebabCase(colorName)}-${shade}`;
|
|
118
|
+
const shadedColor = colorScale(shade).oklch();
|
|
119
|
+
shades[varName] = `oklch(${shadedColor.join(" ")})`;
|
|
120
|
+
if (semanticAliases[shade]) {
|
|
121
|
+
shades[`color-${kebabCase(colorName)}-${semanticAliases[shade]}`] = shades[varName];
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
return shades;
|
|
127
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export const canvasDataURI =
|
|
2
|
+
"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMTYwMCA5MDAiIGlkPSJsYW5kc2NhcGUtc2NlbmUiPgogIDxkZWZzPgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJjIiB4MT0iMTE5My44NCIgeDI9IjExMjAuMTYiIHkxPSIyNzcuOCIgeTI9IjcyOC41NSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNmZmYiPjwvc3RvcD4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNjY2Ij48L3N0b3A+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IHhsaW5rOmhyZWY9IiNjIiBpZD0iaCIgeDE9IjMzNC41NSIgeDI9IjU5My43NSIgeTE9IjE4MyIgeTI9Ijk2MC42Ij48L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJxIiB4MT0iNzgzLjUzIiB4Mj0iODEyLjMzIiB5MT0iLTU4LjM2IiB5Mj0iNTUyLjIiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNzFhZGQyIj48L3N0b3A+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2ZmZiI+PC9zdG9wPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iaSIgeDE9IjExOTMuODQiIHgyPSIxMTIwLjE2IiB5MT0iMjc3LjgiIHkyPSI3MjguNTUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjZjJmMmYyIj48L3N0b3A+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzlhYmRkYiI+PC9zdG9wPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCB4bGluazpocmVmPSIjaSIgaWQ9InQiIHgxPSIzMzQuNTUiIHgyPSI1OTMuNzUiIHkxPSIxODMiIHkyPSI5NjAuNiI+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iayIgeDE9IjQ2Ni4zMyIgeDI9IjQ1Ny42OSIgeTE9IjIxOS40IiB5Mj0iOTI3Ljg4IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzliZTZlZSI+PC9zdG9wPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNkMWU1ZmYiPjwvc3RvcD4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImoiIHgxPSI0NjYuMzEiIHgyPSI0NTcuNzIiIHkxPSIyMjEuNDQiIHkyPSI5MjUuNDEiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjOTFlZWVjIj48L3N0b3A+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2QxZTVmZiI+PC9zdG9wPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0idSIgeDE9IjEwMDkuMTYiIHgyPSIxMDAxLjc1IiB5MT0iMjYwLjc1IiB5Mj0iODY4LjU2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzc5ZGRlOCI+PC9zdG9wPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNkMWU1ZmYiPjwvc3RvcD4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI2oiIGlkPSJ2IiB4MT0iMTAwOS4xNiIgeDI9IjEwMDEuNzUiIHkxPSIyNjAuNzUiIHkyPSI4NjguNTYiPjwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI2siIGlkPSJ3IiB4MT0iNzY0LjQ3IiB4Mj0iODA3LjY3IiB5MT0iMzAwLjI3IiB5Mj0iMTEyMS4wNyI+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCB4bGluazpocmVmPSIjaiIgaWQ9IngiIHgxPSI2NTEuMTEiIHgyPSI2ODcuNzEiIHkxPSIzMTQuMzMiIHkyPSIxMDA5LjgzIj48L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJ5IiB4MT0iOTM1LjcyIiB4Mj0iOTUyLjA3IiB5MT0iMjUxLjUyIiB5Mj0iNzIwLjEyIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2VjZmM3MSI+PC9zdG9wPgogICAgICA8c3RvcCBvZmZzZXQ9Ii45IiBzdG9wLWNvbG9yPSIjOTlmMjhmIj48L3N0b3A+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJ6IiB4MT0iOTM2LjQiIHgyPSI5NTEuMTgiIHkxPSIyNzAuOTgiIHkyPSI2OTQuNjkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjZWNmYzcxIj48L3N0b3A+CiAgICAgIDxzdG9wIG9mZnNldD0iLjkiIHN0b3AtY29sb3I9IiNiMmYyYWIiPjwvc3RvcD4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImwiIHgxPSI5NjIuMjUiIHgyPSI5NDQuMzYiIHkxPSI1MjUuNDkiIHkyPSI1NjIuNjUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjYTY3ZTFiIj48L3N0b3A+CiAgICAgIDxzdG9wIG9mZnNldD0iLjk4IiBzdG9wLWNvbG9yPSIjYjU2ZDJlIj48L3N0b3A+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJtIiB4MT0iMTAwMS4wNCIgeDI9IjkyNi4xNiIgeTE9IjM0NS41MyIgeTI9IjUwMS4wNSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiMzODg4MzAiPjwvc3RvcD4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNGZkMTQxIj48L3N0b3A+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IHhsaW5rOmhyZWY9IiNsIiBpZD0iQSIgeDE9IjEwNjUuODYiIHgyPSIxMDQ3Ljk3IiB5MT0iNTQ4LjI3IiB5Mj0iNTg1LjQ0Ij48L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IHhsaW5rOmhyZWY9IiNtIiBpZD0iQiIgeDE9IjEwOTMuMDUiIHgyPSIxMDM1LjQ2IiB5MT0iNDEzLjI3IiB5Mj0iNTMyLjg4Ij48L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IHhsaW5rOmhyZWY9IiNsIiBpZD0iQyIgeDE9IjM3OS42MSIgeDI9IjM2Ni4zMiIgeTE9IjQ3NC41MSIgeTI9IjUwMi4xIj48L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IHhsaW5rOmhyZWY9IiNtIiBpZD0iRCIgeDE9IjM5Ni4yOCIgeDI9IjM1OC44NCIgeTE9IjM4OC4wOSIgeTI9IjQ2NS44NSI+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iRSIgeDE9IjU3Mi4xNSIgeDI9IjU4Mi4zOCIgeTE9IjgzOC4xNCIgeTI9IjUxMC43MiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM3MWU5NjAiPjwvc3RvcD4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZWZmYzhiIj48L3N0b3A+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJGIiB4MT0iNTc5LjMxIiB4Mj0iNTgyLjMyIiB5MT0iNjA5LjA2IiB5Mj0iNTEyLjYiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNzhlOTY4Ij48L3N0b3A+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2VjZmM3MSI+PC9zdG9wPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibiIgeDE9IjgzOC4zNCIgeDI9Ijg2NS4zMSIgeTE9IjU0MC41MyIgeTI9IjkxOC4xIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2IwZDk2OCI+PC9zdG9wPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM0ZmQxNDEiPjwvc3RvcD4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI24iIGlkPSJHIiB4MT0iODQ3LjMxIiB4Mj0iODU0LjI3IiB5MT0iNTkxLjg5IiB5Mj0iNjg5LjMyIj48L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJvIiB4MT0iODEyLjQ3IiB4Mj0iNzk5LjU2IiB5MT0iOTA1Ljk1IiB5Mj0iNjEzLjUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjYmJhZjUxIj48L3N0b3A+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2ZjZWI2YyI+PC9zdG9wPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCB4bGluazpocmVmPSIjbSIgaWQ9IkgiIHgxPSI1MjIuNzYiIHgyPSI1MjcuOTgiIHkxPSI4MTcuMDIiIHkyPSI2OTkuMTUiPjwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI20iIGlkPSJJIiB4MT0iNzg2LjYxIiB4Mj0iODA3LjYyIiB5MT0iMTExMy4xMSIgeTI9IjYzOC4zMyI+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCB4bGluazpocmVmPSIjbyIgaWQ9IkoiIHgxPSIxMzA5LjQ2IiB4Mj0iMTMzMy44OSIgeTE9Ijc0Ny43MiIgeTI9IjkwMy44MiI+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iSyIgeDE9IjQ5MC44MyIgeDI9IjYzMS43MyIgeTE9Ijk4MS40NSIgeTI9IjcwMi4zNiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM1MWI4NDYiPjwvc3RvcD4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNDU4ODNmIj48L3N0b3A+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IHhsaW5rOmhyZWY9IiNtIiBpZD0iTCIgeDE9IjIzMC43IiB4Mj0iMjM5LjkyIiB5MT0iNzA4LjEzIiB5Mj0iNzgwLjA5Ij48L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IHhsaW5rOmhyZWY9IiNsIiBpZD0iTSIgeDE9IjI0Ni41OSIgeDI9IjI0OS4zIiB5MT0iNjg3LjA5IiB5Mj0iNzQ0LjQ1Ij48L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IHhsaW5rOmhyZWY9IiNsIiBpZD0iTiIgeDE9IjI0MS42MSIgeDI9IjI0NC4zIiB5MT0iNjg3LjMzIiB5Mj0iNzQ0LjM0Ij48L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJwIiB4MT0iLTI2NzAuNjEiIHgyPSItMjYzNC4yNiIgeTE9IjQwNC43OCIgeTI9IjYzNyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMSAwIDAgMSAtMjM5MC44OCAwKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM1OWI4NGYiPjwvc3RvcD4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMzg4ODMwIj48L3N0b3A+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IHhsaW5rOmhyZWY9IiNwIiBpZD0iTyIgeDE9IjIxMS4yMSIgeDI9IjI0Ny41MSIgeTE9IjQwNS45IiB5Mj0iNjM3Ljg3Ij48L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IHhsaW5rOmhyZWY9IiNwIiBpZD0iUCIgeDE9IjI2NC41OSIgeDI9IjI3Ni40MiIgeTE9IjU3Ni42NyIgeTI9IjYxMi4xNyI+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCB4bGluazpocmVmPSIjcCIgaWQ9IlEiIHgxPSIyNjMuNjUiIHgyPSIyNjQuMzYiIHkxPSI0NjAuMzQiIHkyPSI0MzcuNzEiPjwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI20iIGlkPSJSIiB4MT0iMTQ5NS4yNCIgeDI9IjE1MDQuMzQiIHkxPSI3NjIuOTMiIHkyPSI4MzMuOTIiPjwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI2wiIGlkPSJTIiB4MT0iMTU0NS40OCIgeDI9IjEzNTUuMDgiIHkxPSI3MjMuOTQiIHkyPSI3MjMuOTQiPjwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI2wiIGlkPSJUIiB4MT0iMTQ5OC4yMiIgeDI9IjE0MTQuMTUiIHkxPSI2NjguNDgiIHkyPSI2NjguNDgiPjwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI2wiIGlkPSJVIiB4MT0iMTUzMS4wOCIgeDI9IjE0MjcuMDkiIHkxPSI3MjguNzUiIHkyPSI3MjguNzUiPjwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI3AiIGlkPSJWIiB4MT0iMTQ0NC4zIiB4Mj0iMTUwMy40OSIgeTE9IjIwNy44MyIgeTI9IjY3My45MyI+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCB4bGluazpocmVmPSIjcCIgaWQ9IlciIHgxPSIxNDY0LjI3IiB4Mj0iMTUyMy40NiIgeTE9IjIwNS4zMSIgeTI9IjY3MS40MSI+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCB4bGluazpocmVmPSIjcCIgaWQ9IlgiIHgxPSIxNDQ1LjQyIiB4Mj0iMTQ3OS43NyIgeTE9IjQwNy44MyIgeTI9IjU3MS4zMSI+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCB4bGluazpocmVmPSIjcCIgaWQ9IlkiIHgxPSIxNDU2LjY4IiB4Mj0iMTQ1OS43NCIgeTE9IjI5MS4yNCIgeTI9IjM3OC44MiI+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCB4bGluazpocmVmPSIjbSIgaWQ9IloiIHgxPSIxMzMwLjg1IiB4Mj0iMTMzOS45NSIgeTE9Ijc2Mi45MyIgeTI9IjgzMy45MiI+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCB4bGluazpocmVmPSIjbCIgaWQ9ImFhIiB4MT0iMTMzMy4yNiIgeDI9IjEzMTIuMzkiIHkxPSI3MjIuMzYiIHkyPSI4NTAuMDYiPjwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI2wiIGlkPSJhYiIgeDE9IjEzMzMuMzIiIHgyPSIxMzEyLjg0IiB5MT0iNzIyIiB5Mj0iODQ3LjMzIj48L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IHhsaW5rOmhyZWY9IiNwIiBpZD0iYWMiIHgxPSIxMjcxLjMyIiB4Mj0iMTM1Ny43OSIgeTE9IjMyMS4wNyIgeTI9IjcwOC40NiI+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCB4bGluazpocmVmPSIjcCIgaWQ9ImFkIiB4MT0iMTI4Ni42IiB4Mj0iMTM3My4wNyIgeTE9IjMxNy42NyIgeTI9IjcwNS4wNSI+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCB4bGluazpocmVmPSIjcCIgaWQ9ImFlIiB4MT0iNDU3LjgzIiB4Mj0iMzYzLjE0IiB5MT0iNTguMzkiIHkyPSI1OC4zOSIgZ3JhZGllbnRUcmFuc2Zvcm09InJvdGF0ZSgyNi40OCAtMTE1LjMwNyAyMTAzLjI5MSkiPjwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI3AiIGlkPSJhZiIgeDE9IjEzMzkuNDUiIHgyPSIxMjQ0Ljc2IiB5MT0iNDI2LjY2IiB5Mj0iNDI2LjY2Ij48L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IHhsaW5rOmhyZWY9IiNwIiBpZD0iYWciIHgxPSIxMzIyLjM2IiB4Mj0iMTI0MC41NyIgeTE9IjQ0Mi42NyIgeTI9IjQ0Mi42NyI+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCB4bGluazpocmVmPSIjbSIgaWQ9ImFoIiB4MT0iOTUuMjkiIHgyPSIxMDQuNTIiIHkxPSI3MTguMjMiIHkyPSI3OTAuMTkiPjwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI3AiIGlkPSJhaSIgeDE9IjE3OC4zIiB4Mj0iMjAxLjU5IiB5MT0iMTA4LjQxIiB5Mj0iNzc2IiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC0xMjkuNzEgLTczLjczKSI+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCB4bGluazpocmVmPSIjcCIgaWQ9ImFqIiB4MT0iNzEuOTIiIHgyPSI5NS4yOSIgeTE9IjIwLjI4IiB5Mj0iNjg5Ljk2Ij48L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IHhsaW5rOmhyZWY9IiNwIiBpZD0iYWsiIHgxPSIxMzEuNzciIHgyPSIxMzQuODUiIHkxPSIzOTcuNjEiIHkyPSI0ODUuNzciPjwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI2wiIGlkPSJhbCIgeDE9IjkxLjM3IiB4Mj0iMTUwLjQ1IiB5MT0iNjU2LjQ3IiB5Mj0iODMzLjcyIj48L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IHhsaW5rOmhyZWY9IiNwIiBpZD0iYW0iIHgxPSIyNDIxLjEiIHgyPSIyNDIxLjUiIHkxPSI5NTUuMDciIHkyPSI5NDIuNTEiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjQ3IC0uMTQgLjMxIC45OSAtMTMxOC4yMSAtMTUzLjQ0KSI+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCB4bGluazpocmVmPSIjcCIgaWQ9ImFuIiB4MT0iNzg1Ljc4IiB4Mj0iNzg2LjA2IiB5MT0iMTMyMC41OSIgeTI9IjEzMTEuNjQiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjg2IC0uMzIgLjQ4IDEuMzIgLTEyMDcuNTcgLTEwNzkuNTgpIj48L2xpbmVhckdyYWRpZW50PgogICAgPGZpbHRlciBpZD0iYSIgd2lkdGg9Ijc5Ni41MSIgaGVpZ2h0PSIzMjc2NiIgeD0iNzc1LjU4IiB5PSItODY0MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8ZmVGbG9vZCBmbG9vZC1jb2xvcj0iI2ZmZiIgcmVzdWx0PSJiZyI+PC9mZUZsb29kPgogICAgICA8ZmVCbGVuZCBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJiZyI+PC9mZUJsZW5kPgogICAgPC9maWx0ZXI+CiAgICA8ZmlsdGVyIGlkPSJiIiB3aWR0aD0iNzYyLjA3IiBoZWlnaHQ9IjMyNzY2IiB4PSIzNy45MyIgeT0iLTg2NDIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPGZlRmxvb2QgZmxvb2QtY29sb3I9IiNmZmYiIHJlc3VsdD0iYmciPjwvZmVGbG9vZD4KICAgICAgPGZlQmxlbmQgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iYmciPjwvZmVCbGVuZD4KICAgIDwvZmlsdGVyPgogICAgPGZpbHRlciBpZD0iZSIgd2lkdGg9Ijc5Ni41MSIgaGVpZ2h0PSIzODkuMTUiIHg9Ijc3NS41OCIgeT0iMTgwLjkiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPGZlRmxvb2QgZmxvb2QtY29sb3I9IiNmZmYiIHJlc3VsdD0iYmciPjwvZmVGbG9vZD4KICAgICAgPGZlQmxlbmQgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iYmciPjwvZmVCbGVuZD4KICAgIDwvZmlsdGVyPgogICAgPGZpbHRlciBpZD0iZyIgd2lkdGg9Ijc2Mi4wNyIgaGVpZ2h0PSIzNzMuNTUiIHg9IjM3LjkzIiB5PSIxNjMuNyIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8ZmVGbG9vZCBmbG9vZC1jb2xvcj0iI2ZmZiIgcmVzdWx0PSJiZyI+PC9mZUZsb29kPgogICAgICA8ZmVCbGVuZCBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJiZyI+PC9mZUJsZW5kPgogICAgPC9maWx0ZXI+CiAgICA8bWFzayBpZD0iciIgd2lkdGg9Ijc5Ni41MSIgaGVpZ2h0PSIzODkuMTUiIHg9Ijc3NS41OCIgeT0iMTgwLjkiIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8ZyBmaWx0ZXI9InVybCgjZSkiIG1hc2s9InVybCgjZCkiPgogICAgICAgIDxwYXRoIGZpbGw9InVybCgjYykiIGQ9Ik0xNDUyLDMzMGExMjAuNzksMTIwLjc5LDAsMCwwLTE5LjgsMS42NCwxMjAuMTYsMTIwLjE2LDAsMCwwLTEzNS40Mi02Mi4zNCwxNTguMjksMTU4LjI5LDAsMCwwLTE5NC4yNS00MSwxMDIuNjcsMTAyLjY3LDAsMCwwLTE3Ni40NSw1LjgzLDEyMC4yNiwxMjAuMjYsMCwxLDAtMzAuMjksMjM2LjY1YzU0LDAsMTk2Ljc3LDU2Ljc3LDI3OC40NSw1Ni43N2ExNTcuNTksMTU3LjU5LDAsMCwwLDk3Ljg0LTMzLjg3LDEyMC4yNCwxMjAuMjQsMCwwLDAsNzIuODUsMTAuN0ExMjAuMDYsMTIwLjA2LDAsMSwwLDE0NTIsMzMwWiIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm11bHRpcGx5Ij48L3BhdGg+CiAgICAgIDwvZz4KICAgIDwvbWFzaz4KICAgIDxtYXNrIGlkPSJzIiB3aWR0aD0iNzYyLjA3IiBoZWlnaHQ9IjM3My41NSIgeD0iMzcuOTMiIHk9IjE2My43IiBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPGcgZmlsdGVyPSJ1cmwoI2cpIiBtYXNrPSJ1cmwoI2YpIj4KICAgICAgICA8cGF0aCBmaWxsPSJ1cmwoI2gpIiBkPSJNODAwLDQxNC41OGE5Mi42Niw5Mi42NiwwLDAsMC0xMTEuODEtOTAuNjVBMTQ0LjE1LDE0NC4xNSwwLDAsMCw0ODIuOTIsMjEyLjU5YTExNC40NSwxMTQuNDUsMCwwLDAtMjA1LjE3LDM5LjE2LDEzNC43OSwxMzQuNzksMCwwLDAtMTQuNDMtLjc4QTEzMi43NSwxMzIuNzUsMCwwLDAsMTMwLjU3LDM4My43MmMwLC41NSwwLDEuMSwwLDEuNjZhNzYuNzcsNzYuNzcsMCwxLDAtMTUuOSwxNTEuODhINzI3LjE0djBhNDQsNDQsMCwwLDAsNDIuMi01My44NEE5Mi4zOCw5Mi4zOCwwLDAsMCw4MDAsNDE0LjU4WiIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm11bHRpcGx5Ij48L3BhdGg+CiAgICAgIDwvZz4KICAgIDwvbWFzaz4KICA8L2RlZnM+CiAgPGc+CiAgICA8cmVjdCB3aWR0aD0iMTYwMCIgaGVpZ2h0PSI1ODAuMzkiIHk9Ii42NCIgZmlsbD0idXJsKCNxKSI+PC9yZWN0PgogICAgPGcgbWFzaz0idXJsKCNyKSI+CiAgICAgIDxwYXRoIGZpbGw9InVybCgjaSkiIGQ9Ik0xNDUyLDMzMGExMjAuNzksMTIwLjc5LDAsMCwwLTE5LjgsMS42NCwxMjAuMTYsMTIwLjE2LDAsMCwwLTEzNS40Mi02Mi4zNCwxNTguMjksMTU4LjI5LDAsMCwwLTE5NC4yNS00MSwxMDIuNjcsMTAyLjY3LDAsMCwwLTE3Ni40NSw1LjgzLDEyMC4yNiwxMjAuMjYsMCwxLDAtMzAuMjksMjM2LjY1YzU0LDAsMTk2Ljc3LDU2Ljc3LDI3OC40NSw1Ni43N2ExNTcuNTksMTU3LjU5LDAsMCwwLDk3Ljg0LTMzLjg3LDEyMC4yNCwxMjAuMjQsMCwwLDAsNzIuODUsMTAuN0ExMjAuMDYsMTIwLjA2LDAsMSwwLDE0NTIsMzMwWiI+PC9wYXRoPgogICAgPC9nPgogICAgPGcgbWFzaz0idXJsKCNzKSI+CiAgICAgIDxwYXRoIGZpbGw9InVybCgjdCkiIGQ9Ik04MDAsNDE0LjU4YTkyLjY2LDkyLjY2LDAsMCwwLTExMS44MS05MC42NUExNDQuMTUsMTQ0LjE1LDAsMCwwLDQ4Mi45MiwyMTIuNTlhMTE0LjQ1LDExNC40NSwwLDAsMC0yMDUuMTcsMzkuMTYsMTM0Ljc5LDEzNC43OSwwLDAsMC0xNC40My0uNzhBMTMyLjc1LDEzMi43NSwwLDAsMCwxMzAuNTcsMzgzLjcyYzAsLjU1LDAsMS4xLDAsMS42NmE3Ni43Nyw3Ni43NywwLDEsMC0xNS45LDE1MS44OEg3MjcuMTR2MGE0NCw0NCwwLDAsMCw0Mi4yLTUzLjg0QTkyLjM4LDkyLjM4LDAsMCwwLDgwMCw0MTQuNThaIj48L3BhdGg+CiAgICA8L2c+CiAgICA8cGF0aCBmaWxsPSJ1cmwoI2spIiBkPSJNMTQ5LjIyLDUzNi45MXMyNzcuNi0xNDgsMzI5LjQ0LTE2Ni4zNCwyOTcsMTY4LjE3LDI5NywxNjguMTdaIj48L3BhdGg+CiAgICA8cGF0aCBmaWxsPSJ1cmwoI2opIiBkPSJNMjUxLjMsNTM2LjkxUzQxOSw1NTMuMzMsNDUwLjM3LDQzMC43N2MtMjguNDMtMTMuNjQsNDAuNjYtNjQuNTcsMjguMjktNjAuMi01MS44NCwxOC4zMi0zMjkuNDQsMTY2LjM0LTMyOS40NCwxNjYuMzRsNjI2LjQ2LDEuODMtLjQtLjNaIiBvcGFjaXR5PSIuNzIiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpzY3JlZW4iPjwvcGF0aD4KICAgIDxwYXRoIGZpbGw9InVybCgjdSkiIGQ9Ik03MzcuMTEsNTMzLjE1czIzOC4xNS0xMjcsMjgyLjYzLTE0Mi43LDI1NC44MSwxNDQuMjcsMjU0LjgxLDE0NC4yN1oiPjwvcGF0aD4KICAgIDxwYXRoIGZpbGw9InVybCgjdikiIGQ9Ik05MTQuNjksNDk0czc1LjM2LTkwLjY1LDE1MC40LTkzLjc3Yy0yMC04Ljc1LTM2LjE5LTEzLTQ1LjM1LTkuNzQtNDQuNDgsMTUuNzItMjgyLjYzLDE0Mi43LTI4Mi42MywxNDIuN2w1MzcuNDQsMS41Ny0uMjctLjJaIiBvcGFjaXR5PSIuNzIiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpzY3JlZW4iPjwvcGF0aD4KICAgIDxwYXRoIGZpbGw9InVybCgjdykiIGQ9Ik00NjIuNDUsNTEyLjQxczI2My43Ni0xNjMsMzA5Ljc5LTE1OS4zNGMxNy4yMywxLjM2LDYxLDM5LjQ4LDgwLjA3LDUzLjQzUzkyNiw0MzQuMzcsOTY0LjA3LDQ0NC42MSwxMDg4LjcsNTEwLDEwODguNyw1MTBsLTMzMyw0My4zMloiPjwvcGF0aD4KICAgIDxwYXRoIGZpbGw9InVybCgjeCkiIGQ9Ik03NzIuMjQsMzczYzE3LjIzLDEuMzYsOTkuMTUsNDcuNDUsODAuMDcsMzMuNXMtNjIuODQtNTIuMDctODAuMDctNTMuNDNjLTQ2LTMuNjMtMzA5Ljc5LDE1OS4zNC0zMDkuNzksMTU5LjM0bDkxLjA5LDIxLjA5QzgzMiw1MTEsNzM1LjIxLDM3MC4wOCw3NzIuMjQsMzczWiIgb3BhY2l0eT0iLjcyIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6c2NyZWVuIj48L3BhdGg+CiAgICA8cGF0aCBmaWxsPSJ1cmwoI3kpIiBkPSJNMTYwMCw0MzYuNTFzLTQyMi43Mi0xNC4yMS04MDAsODMuNzFTMjkzLjQ2LDY5Ny43NiwyOTMuNDYsNjk3Ljc2TDE2MDAsNjc1LjU1WiI+PC9wYXRoPgogICAgPHBhdGggZmlsbD0idXJsKCN6KSIgZD0iTTgwMCw1MjAuMjJDNDIyLjcyLDYxOC4xNCwyOTMuNDYsNjk3Ljc2LDI5My40Niw2OTcuNzZoMEMzMzguNTYsNjc0LjI3LDQ5OC4wNiw2MDcuMzUsODAwLDUyOWMzNzcuMjgtOTcuOTIsODAwLTkyLjQ3LDgwMC05Mi40N2gwUzExNzcuMjgsNDIyLjMsODAwLDUyMC4yMloiIG9wYWNpdHk9Ii40NiIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOnNjcmVlbiI+PC9wYXRoPgogICAgPHJlY3Qgd2lkdGg9IjguMTUiIGhlaWdodD0iNDEuNTciIHg9Ijk0Ni43MyIgeT0iNTI4LjQ4IiBmaWxsPSJ1cmwoI2wpIj48L3JlY3Q+CiAgICA8cGF0aCBmaWxsPSJ1cmwoI20pIiBkPSJNOTMyLjc1LDM3My4zcy0xNy42NCw2MS4xNy0xMi4wNiwxMDMuNTQsMTguNTQsNzAuNTQsNDAuMTQsNTcuMzIsMjItNjEuODksMjAuNzctODAuMTYtMTIuMTMtNTEuNDItMTIuMTMtNTEuNDItNC45My01Ny40NC0xOC42Ny01Mi4yMVM5MzIuNzUsMzczLjMsOTMyLjc1LDM3My4zWiI+PC9wYXRoPgogICAgPHJlY3Qgd2lkdGg9IjguMTUiIGhlaWdodD0iNDEuNTciIHg9IjEwNTAuMzQiIHk9IjU1MS4yNiIgZmlsbD0idXJsKCNBKSI+PC9yZWN0PgogICAgPHBhdGggZmlsbD0idXJsKCNCKSIgZD0iTTEwNDAuNTMsNDM0LjYzcy0xMy41Niw0Ny4wNS05LjI3LDc5LjYzLDE0LjI1LDU0LjI2LDMwLjg3LDQ0LjA5LDE2Ljk0LTQ3LjYsMTYtNjEuNjUtOS4zMy0zOS41NS05LjMzLTM5LjU1UzEwNjUsNDEzLDEwNTQuNDIsNDE3LDEwNDAuNTMsNDM0LjYzLDEwNDAuNTMsNDM0LjYzWiI+PC9wYXRoPgogICAgPHJlY3Qgd2lkdGg9IjYuMDUiIGhlaWdodD0iMzAuODYiIHg9IjM2OC4wOCIgeT0iNDc2LjczIiBmaWxsPSJ1cmwoI0MpIj48L3JlY3Q+CiAgICA8cGF0aCBmaWxsPSJ1cmwoI0QpIiBkPSJNMzYyLjEzLDQwMnMtOC44MiwzMC41OC02LDUxLjc3LDkuMjcsMzUuMjcsMjAuMDcsMjguNjYsMTEtMzEsMTAuMzktNDAuMDgtNi4wNy0yNS43MS02LjA3LTI1LjcxLTIuNDYtMjguNzItOS4zMy0yNi4xMVMzNjIuMTMsNDAyLDM2Mi4xMyw0MDJaIj48L3BhdGg+CiAgICA8cGF0aCBmaWxsPSJ1cmwoI0UpIiBkPSJNMCw1MDUuODFzMTExLjM3LTksNDMxLjQ2LDMuMWM0MDYuMDgsMTUuMzIsNzMwLjEyLDEwOC40NSw3MzAuMTIsMTA4LjQ1TDAsNzg2LjY0WiI+PC9wYXRoPgogICAgPHBhdGggZmlsbD0idXJsKCNGKSIgZD0iTTQzMS40Niw1MTdjMzQ3LjYsMTMuMTIsNjU0LjUyLDgwLjQsNzMwLjEyLDEwMC4zM2gwcy0zMjQtOTMuMTMtNzMwLjEyLTEwOC40NUMxMTEuMzcsNDk2LjgzLDAsNTA1LjgxLDAsNTA1LjgxSDBTMTExLjM3LDUwNSw0MzEuNDYsNTE3WiIgb3BhY2l0eT0iLjQiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpzY3JlZW4iPjwvcGF0aD4KICAgIDxwYXRoIGZpbGw9InVybCgjbikiIGQ9Ik0xMDguNTgsNzUxLjQ1UzQ3Miw2MzMuNzEsODU0LjI5LDYwOS41NiwxNjAwLDYyNy42NywxNjAwLDYyNy42N1Y5MDBIMTA4LjU4WiI+PC9wYXRoPgogICAgPHBhdGggZmlsbD0idXJsKCNHKSIgZD0iTTg1NC4yOSw2MDkuNTZDNDcyLDYzMy43MSwxMDguNTgsNzUxLjQ1LDEwOC41OCw3NTEuNDVoMFM0NzIsNjQ2LjM0LDg1NC4yOSw2MjIuMTksMTYwMCw2MjcuNjcsMTYwMCw2MjcuNjdoMFMxMjM2LjYzLDU4NS40MSw4NTQuMjksNjA5LjU2WiIgb3BhY2l0eT0iLjM4IiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6c2NyZWVuIj48L3BhdGg+CiAgICA8cGF0aCBmaWxsPSJ1cmwoI28pIiBkPSJNNjc1LjA5LDYyNy4yOGw2Ni41Mi03LjY1czc3LjkyLTEuOTQsMTQ1Ljk1LDUzLjUzYzc2LjkxLDYyLjcyLDI2Ljc2LDExMy40OCwyNi43NiwxMTMuNDhsLTg2LjIxLDIzLjg0Uzg3NS43LDc1MS45Miw4NDYuOTIsNzAwQzgxNi4xOSw2NDQuNjIsNjc1LjA5LDYyNy4yOCw2NzUuMDksNjI3LjI4WiI+PC9wYXRoPgogICAgPHBhdGggZmlsbD0idXJsKCNIKSIgZD0iTTEwNTAuNTIsNzk2LjExUzc3OS4xMiw3MjAuOSw0MTIuNiw3MjAuOUguMThzOTYuOTEsNi44Niw0MTkuNjIsNi44NmMzNjYuNTIsMCw2MzAuNzIsNjguMzUsNjMwLjcyLDY4LjM1WiIgb3BhY2l0eT0iLjY1IiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6c2NyZWVuIj48L3BhdGg+CiAgICA8cGF0aCBmaWxsPSJ1cmwoI0kpIiBkPSJNMCw3MjFINDEyLjQyYzM2Ni41MiwwLDYzNy45Miw3NS4yLDYzNy45Miw3NS4yczE0NS40NC0xNy44MSwzMTEtMTguNlMxNjAwLDc5MC4zNiwxNjAwLDc5MC4zNlY5MDBIMFoiPjwvcGF0aD4KICAgIDxwYXRoIGZpbGw9InVybCgjSikiIGQ9Ik0xMDUwLjM0LDc5Ni4xNmgwYTExMDguNTYsMTEwOC41NiwwLDAsMSwyNDMuMTUsODAuNTFMMTM0My42Myw5MDBIMTYwMGwtMTY2LjUyLTQ2LjA2YTIyMDguNTIsMjIwOC41MiwwLDAsMC0zMjMuODctNjRoMFoiPjwvcGF0aD4KICAgIDxwYXRoIGZpbGw9InVybCgjSykiIGQ9Ik0zMDcuMzgsNzIwLjkyczQwLjQ0LTI0Ljc3LDgyLjY0LTI3LjI3YTYyLjMzLDYyLjMzLDAsMCwxLDM5LjQ2LDExLjA5YzE3LjE2LDExLjY4LDQwLjIyLDE1LjU2LDYxLjI3LDkuODVhMTQ3LjY5LDE0Ny42OSwwLDAsMSw3Ni0uODVjMjYuMzUsNi44Miw0MC4xOSwxOC4yNCw0Ny4zNiwyOS4zMiwxMC4yMiwxNS44MywzMCwyNS43Myw1MS41MSwyNSwxNi40NS0uNTQsMzUuODIuNjcsNTUuMjUsNkM3NzEsNzg4LDc4MC42Myw4NDUuNyw3ODAuNjMsODQ1LjdMODQ2LjkyLDkwMEg3MTguMDhTNjA2LjI5LDc1MS42MSwzMDcuMzgsNzIwLjkyWiI+PC9wYXRoPgogICAgPHBhdGggZmlsbD0idXJsKCNMKSIgZD0iTTI3MC40MSw3MzcuNDFjMjEuNTIsNy43Ny0xLjYsMTIuNzctMjkuODksMTIuODksMCwwLTIzLjE2LDAtMzUuMTgtNC44Mi02LjE2LTIuNDctMjkuMzMtMTMuMDgtMS0xMy4wOEMyMTguMDgsNzMyLjQsMjY0LjA5LDczNS4xMywyNzAuNDEsNzM3LjQxWiIgb3BhY2l0eT0iLjMyIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bXVsdGlwbHkiPjwvcGF0aD4KICAgIDxwb2x5Z29uIGZpbGw9InVybCgjTSkiIHBvaW50cz0iMjU2Ljc1IDc1MC4zIDI0MC41MiA3NTAuMyAyNDIuNTIgNjg5LjM1IDI1NS43NSA2ODkuMzUgMjU2Ljc1IDc1MC4zIj48L3BvbHlnb24+CiAgICA8cG9seWdvbiBmaWxsPSJ1cmwoI04pIiBwb2ludHM9IjI0Mi41MiA2ODkuMzUgMjQwLjUyIDc1MC4zIDI0OC42MyA3NTAuMyAyNDUuNTggNjg5LjM1IDI0Mi41MiA2ODkuMzUiIG9wYWNpdHk9Ii4yNyIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm11bHRpcGx5Ij48L3BvbHlnb24+CiAgICA8cGF0aCBmaWxsPSJ1cmwoI3ApIiBkPSJNMjQ4Ljc3LDY5My41MWMxOS40Ny0uNjcsNDMuMzItMTEuODIsNDMuMTYtNjQuODdMMjgwLjA2LDUxOGwtNC4yLTE2LjU3LTguMjEtNjVjLS45MS04LjE3LTYuODUtMTUuMTUtMTcuMzUtMTUuMTVsLS44OC05LjQ4Yy0xMC40LDAtMTguNzIsMTYtMjIuNDgsMzcuMDgtMywxNy03LjU1LDY5LjE1LTcuNTUsNjkuMTVzLTUuMzYtNC4wNi01Ljg3LTIuMjNjLTUsMTguMDctNy44NiwxMTIuNDYtNy44NiwxMTIuNDZDMjAzLjEzLDY0OC4xNSwyMTUuNTQsNjk0LjY2LDI0OC43Nyw2OTMuNTFaIj48L3BhdGg+CiAgICA8cGF0aCBmaWxsPSJ1cmwoI08pIiBkPSJNMjI1LjgyLDYyOC4yMnMyLjg3LTk0LjM5LDcuODYtMTEyLjQ2Yy41MS0xLjgzLDUuODcsMi4yMyw1Ljg3LDIuMjNzNC41Mi01Mi4xMSw3LjU1LTY5LjE1YzEuOTEtMTAuNzQsNS0yMC4xNCw5LTI2Ljc5YTIwLjIyLDIwLjIyLDAsMCwwLTUuNzUtLjgxbC0uODgtOS40OGMtMTAuNCwwLTE4LjcyLDE2LTIyLjQ4LDM3LjA4LTMsMTctNy41NSw2OS4xNS03LjU1LDY5LjE1cy01LjM2LTQuMDYtNS44Ny0yLjIzYy01LDE4LjA3LTcuODYsMTEyLjQ2LTcuODYsMTEyLjQ2LTIuNTMsMTkuOTMsOS44OCw2Ni40NCw0My4xMSw2NS4yOWE0Ny44MSw0Ny44MSwwLDAsMCw5Ljc3LTEuMzFDMjMzLjExLDY4NC41NywyMjMuNTcsNjQ1LjkxLDIyNS44Miw2MjguMjJaIiBvcGFjaXR5PSIuMjkiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTptdWx0aXBseSI+PC9wYXRoPgogICAgPHBhdGggZmlsbD0idXJsKCNQKSIgZD0iTTI1NS4xNSw1NzkuNDhhMjkuMTEsMjkuMTEsMCwwLDEsMTIuMjEsMGM2LjY2LDEuNDQsMTMuMjMsMTQuMSwxMy4yMywxNC4xQTU1LjM4LDU1LjM4LDAsMCwwLDI1NS4xNSw1NzkuNDhaIiBvcGFjaXR5PSIuNTMiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpzY3JlZW4iPjwvcGF0aD4KICAgIDxwYXRoIGZpbGw9InVybCgjUSkiIGQ9Ik0yNjguNTQsNDQzLjQxbDEuODcsMTQuODJzLTgtMTcuNzEtMTEuODctMTkuNjNTMjY0LjY0LDQzNy42NSwyNjguNTQsNDQzLjQxWiIgb3BhY2l0eT0iLjUzIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6c2NyZWVuIj48L3BhdGg+CiAgICA8ZWxsaXBzZSBjeD0iMTQ5OS4zIiBjeT0iNzk0LjYxIiBmaWxsPSJ1cmwoI1IpIiBvcGFjaXR5PSIuMzIiIHJ4PSI1OC43NiIgcnk9IjkuNiIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm11bHRpcGx5Ij48L2VsbGlwc2U+CiAgICA8cG9seWdvbiBmaWxsPSJ1cmwoI1MpIiBwb2ludHM9IjE0OTcuOTUgNzkyLjI1IDE0NzAuNDcgNzkyLjI1IDE0NzUuOTcgNjg0LjcyIDE0NjAuODYgNjU1LjYzIDE0ODQuMjEgNjgxLjMzIDE1MTMuNzUgNjY1LjI1IDE0OTcuOTUgNjgxLjMzIDE0OTcuOTUgNzkyLjI1Ij48L3BvbHlnb24+CiAgICA8ZyBvcGFjaXR5PSIuMyIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm11bHRpcGx5Ij4KICAgICAgPHBvbHlnb24gZmlsbD0idXJsKCNUKSIgcG9pbnRzPSIxNDg0LjIxIDY4MS4zMyAxNDYwLjg2IDY1NS42MyAxNDczLjUzIDY4MC4wMiAxNDg0LjIxIDY4MS4zMyI+PC9wb2x5Z29uPgogICAgICA8cGF0aCBmaWxsPSJ1cmwoI1UpIiBkPSJNMTQ5MC4zLDY4NC45M3MzLjQ1LDIxLjQyLDMuNzYsMjguNjNjMi4wNiw0OC43Ny05LjIsNzguNjktOS4yLDc4LjY5SDE0OThWNjgxLjMzbDE1LjgtMTYuMDhaIj48L3BhdGg+CiAgICA8L2c+CiAgICA8cGF0aCBmaWxsPSJ1cmwoI1YpIiBkPSJNMTQ4OSw2NzkuOTJjLTIxLjIyLS43OC01Ni4zMi0xNC42Ny02NC4wOS03OC01Ljk0LTQ4LjQ3LTQuNzMtMTA1LjUzLDAtMTU2LDEuMjUtMTMuMzQsOS4yMS0zLjY0LDEwLjk1LTE3LjM0LDMuNDMtMjcsNy44OC01NC40NCwxMy42NC04MS4xOSwyLTkuNDcsNi4zMS0xMS40NCw2LjgyLTIxLDIuMDgtMzkuMTYsMTguNzEtNzAuNSwzMi05Ny41OCwwLDAsMTIuNzEsMjcuNTksMjEuNzksNTQuNTgsNi42OSwxOS44OSw0LjMyLDMyLjI4LDUuNTIsMzcuNDEsMiw4LjY1LDcuODgsMTEuMzksOS43NywyMy45LDMuNzcsMjQuODUsMTMuMTIsMzkuODgsMTYuMjQsODkuMTIsMS40OCwyMy4zOC0uMTUsMzgsLjE0LDY3LjI3LDAsMCwxMS42Mi0yLjM3LDExLjMsNDhhMjY2LjA5LDI2Ni4wOSwwLDAsMS00LjU2LDQ2LjcyQzE1NDkuNzMsNjM0LjUzLDE1MTcuODMsNjgxLDE0ODksNjc5LjkyWiI+PC9wYXRoPgogICAgPHBhdGggZmlsbD0idXJsKCNXKSIgZD0iTTE1NDEuOSw1MDFjLS4yOS0yOS4zMSwxLjM0LTQzLjg5LS4xNC02Ny4yNy0zLjEyLTQ5LjI0LTEyLjQ3LTY0LjI3LTE2LjI0LTg5LjEyLTEuODktMTIuNTEtNy43Ni0xNS4yNS05Ljc3LTIzLjktMS4yLTUuMTMsMS4xNy0xNy41Mi01LjUyLTM3LjQxLTkuMDgtMjctMjEuNzktNTQuNTgtMjEuNzktNTQuNTgtNC41Niw5LjMtOS41MiwxOS4xMS0xNC4xNSwyOS41NiwzLjEsNy44LDE0LjE1LTI5LjU2LDIyLjI5LDEzLjM3LDMuOSwyMC42MS0xMC4wNiw0NC40NC03LjU0LDQ5LjA2LDI0LjcxLDQ1LjE0LTMuNjMsMzguNTMtMS43NCw1MSwzLjc3LDI0Ljg1LDI3LjQ4LDQ0Ljg0LDM2Ljc1LDk4LjQyLDQsMjMuMDgtOS4xNSwxLjUzLTguODYsMzAuODRhMzEyLjU4LDMxMi41OCwwLDAsMS0xLjQ4LDg3Yy0zLjYsMjIuMDYsMTItNS4xNCwxNC43Myw4LjI2LDEyLDU5LjQxLTM5LDc1LjYyLTUzLjQ0LDgxLjM1YTU2LjM2LDU2LjM2LDAsMCwwLDE0LjEyLDIuMzVjMjguODMsMS4wNiw2MC43My00NS4zOSw1OS41Mi04NC4yQTI2Ni4wOSwyNjYuMDksMCwwLDAsMTU1My4yLDU0OUMxNTUzLjUyLDQ5OC42NCwxNTQxLjksNTAxLDE1NDEuOSw1MDFaIiBvcGFjaXR5PSIuNDkiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTptdWx0aXBseSI+PC9wYXRoPgogICAgPHBhdGggZmlsbD0idXJsKCNYKSIgZD0iTTE0MzUuODcsNDI4LjUzczE1LjM3LDMuNjgsMjUsMTEuOTIsMjYuNDQsMzEuMSwyNi40NCwzMS4xLTIzLjUzLTIxLjQyLTM4LjgxLTI4LjctMjMuNTcsMy0yMy41NywzQTIzLjcyLDIzLjcyLDAsMCwwLDE0MzUuODcsNDI4LjUzWiIgb3BhY2l0eT0iLjQ5IiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bXVsdGlwbHkiPjwvcGF0aD4KICAgIDxwYXRoIGZpbGw9InVybCgjWSkiIGQ9Ik0xNDU2LjExLDMzNS41NHMtNS4zNSw1Ljg1LTYuNiwxMS44LTUuNTEsMjcuOTMtNS41MSwyNy45MywxOC4yOC00MC4yOCwyOS42MS00Ni40NkMxNDczLjYxLDMyOC44MSwxNDY5LjIzLDMyNy4zLDE0NTYuMTEsMzM1LjU0WiIgb3BhY2l0eT0iLjUzIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6c2NyZWVuIj48L3BhdGg+CiAgICA8ZWxsaXBzZSBjeD0iMTMzNC45MSIgY3k9Ijc5NC42MSIgZmlsbD0idXJsKCNaKSIgb3BhY2l0eT0iLjMyIiByeD0iNTguNzYiIHJ5PSI5LjYiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTptdWx0aXBseSI+PC9lbGxpcHNlPgogICAgPHBvbHlnb24gZmlsbD0idXJsKCNhYSkiIHBvaW50cz0iMTMzNy43NyA3OTIuMzcgMTMxNy42OSA3OTIuMzcgMTMyMC41NiA3MDIuNTMgMTMzNy43NyA3MDMuNDggMTMzNy43NyA3OTIuMzciPjwvcG9seWdvbj4KICAgIDxwYXRoIGZpbGw9InVybCgjYWIpIiBkPSJNMTMyMC41Niw3MDIuNTNsMCwuMzNzMTIuNzYsMTEuMzksMTMuMjIsMjguOGMuNCwxNS4yMy01LjU2LDYwLjcxLTUuNTYsNjAuNzFoOS41N1Y3MDMuNDhaIiBvcGFjaXR5PSIuMjkiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTptdWx0aXBseSI+PC9wYXRoPgogICAgPHBhdGggZmlsbD0idXJsKCNhYykiIGQ9Ik0xMzEyLjg5LDMzNi4xNWE1MC40OSw1MC40OSwwLDAsMC02LjY1LDEzLjY3Yy05LjExLDMwLjU5LTM2LjEsMTIzLjUxLTM2LDE1MCwuMDksMzEuODctOS4xNyw5Ljg0LTkuMTcsNjEuNDNzMTUuMDksMTMyLjk0LDU0LDE0My44Niw3MS43Ny0yOC4zOCw3MS4yNi05Mi41M2MtLjE2LTE5Ljc5LTExLjc0LTIzLjgxLTExLjc0LTIzLjgxcy0zLjMxLTY2LjQtNC41OC0xMTQuNjZjLTIuMy04Ny4xMy00MS4yOC0xNzYuNTYtNDEuMjgtMTc2LjU2cy0xNC45LDIyLjE3LTEzLjc2LDMwQTEyLDEyLDAsMCwxLDEzMTIuODksMzM2LjE1WiI+PC9wYXRoPgogICAgPHBhdGggZmlsbD0idXJsKCNhZCkiIGQ9Ik0xMzc0LjU1LDU4OC43OHMtMy4zMS02Ni4zOS00LjU4LTExNC42NWMtMi4zLTg3LjE0LTQxLjI4LTE3Ni41Ny00MS4yOC0xNzYuNTdzLTUsMjUuNTEsNy4xMSw0Ny4xNGM1LjgsMTUuODQtNS4zLDEzLjUyLDEuMjksNDAuNzIsMywxMi4yMiwxNC44NiwyLjU2LDE0Ljg2LDQwLjY3LDAsMTYuNTcsMS42LDMxLjYtMi4xNCw0OC0xMC4yMSw0NC43OC01LjU5LDc5LS44Nyw5Ny45MSwxLjEsNC40My0xMi4xLDE3LjkzLTExLjE3LDIwLjYzczguMzYtLjExLDEzLTIuMTZBNy40Niw3LjQ2LDAsMCwxLDEzNTksNTkyYzMuMjUsMy4yMSw3LDkuMzcsNy4xMywyMC42NC40LDUxLjEtMjAuMzgsODYuNDQtNDguNTIsOTMuMTcsMzcuNzUsOC41MSw2OS4xOC0zMC40NSw2OC42OC05My4xN0MxMzg2LjEzLDU5Mi44MSwxMzc0LjU1LDU4OC43OCwxMzc0LjU1LDU4OC43OFoiIG9wYWNpdHk9Ii40OSIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm11bHRpcGx5Ij48L3BhdGg+CiAgICA8cGF0aCBmaWxsPSJ1cmwoI2FlKSIgZD0iTTEzMDAuMjMsNTExLjY4cy0yNS41NSwyLjI0LTMxLjUzLDcuMzFTMTI3NS42Niw0OTguMTgsMTMwMC4yMyw1MTEuNjhaIiBvcGFjaXR5PSIuNTMiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpzY3JlZW4iPjwvcGF0aD4KICAgIDxwYXRoIGZpbGw9InVybCgjYWYpIiBkPSJNMTI5OC43MSw0MzYuNGMzLjA5LTcuMjEsMjUtMjAuNiwyNS0yMC42QzEyOTUuNjYsNDE0LjY2LDEyOTUuNjIsNDQzLjYyLDEyOTguNzEsNDM2LjRaIiBvcGFjaXR5PSIuNTMiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpzY3JlZW4iPjwvcGF0aD4KICAgIDxwYXRoIGZpbGw9InVybCgjYWcpIiBkPSJNMTI4Nyw0NDcuNDhjMy45My00LjM2LDIxLjcyLTguNSwyMS43Mi04LjVDMTI5MC44MSw0MzEuMzMsMTI4My4wOCw0NTEuODMsMTI4Nyw0NDcuNDhaIiBvcGFjaXR5PSIuNTMiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpzY3JlZW4iPjwvcGF0aD4KICAgIDxwYXRoIGZpbGw9InVybCgjYWgpIiBkPSJNMTM1LDc0Ny41MWMyMS41MSw3Ljc3LTEuNiwxMi43Ny0yOS44OSwxMi44OSwwLDAtMjMuMTYsMC0zNS4xOC00LjgyLTYuMTctMi40Ny0yOS4zNC0xMy4wOC0xLTEzLjA4QzgyLjY4LDc0Mi41LDEyOC42OSw3NDUuMjMsMTM1LDc0Ny41MVoiIG9wYWNpdHk9Ii4zMiIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm11bHRpcGx5Ij48L3BhdGg+CiAgICA8cGF0aCBmaWxsPSJ1cmwoI2FpKSIgZD0iTTk4LDMxMnMtNS4zNCwzNC42NC0xMS44NSw3Ny4yM0M4NSwzOTYuNTQsNzUuMTksNDA0LjEsNzQsNDExLjc2Yy03LjUzLDQ5LjQ0LTYuOTQsMTAzLTkuODUsMTI0LjE3LTYsNDMuNTEtNC42Nyw3NS42LDYsOTcuNTksNy4wNywxNC41NiwzNC4zMiw0MS45Myw2NC4wNiw5LjQzczE2LjYyLTEzMy42OCwxNi42Mi0xMzMuNjhMMTM4LjczLDQ4MS41UzEyMy45MSwyODcuNzYsOTgsMzEyWiI+PC9wYXRoPgogICAgPHBhdGggZmlsbD0idXJsKCNhaikiIGQ9Ik04Miw1OTMuNThjMi4xOC0yNC4zNS42LTM2LjYsMTMtNTguODYsMy41OS02LjQyLTExLjI4LTczLjUyLTMuNzUtMTIzLDEuMTctNy42NiwxNy4yOCwwLDEyLjEyLTIyLjU1LTYuMjgtMjcuNCwzLjc2LTcwLjQxLDEwLjA5LTY1Ljc5LTQuNi0xMS40OS05Ljc5LTE2Ljc5LTE1LjUyLTExLjQ0LDAsMC01LjM0LDM0LjY0LTExLjg1LDc3LjIzQzg1LDM5Ni41NCw3NS4xOSw0MDQuMSw3NCw0MTEuNzZjLTcuNTMsNDkuNDQtNi45NCwxMDMtOS44NSwxMjQuMTctNiw0My41MS00LjY3LDc1LjYsNiw5Ny41OSw1LjQsMTEuMTQsMjIuNiwyOS43NSw0My43LDIzLjM4QzEwMSw2NTMsNzcuNDYsNjQ0LjA4LDgyLDU5My41OFoiIG9wYWNpdHk9Ii4yOSIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm11bHRpcGx5Ij48L3BhdGg+CiAgICA8cGF0aCBmaWxsPSJ1cmwoI2FrKSIgZD0iTTEzOC43Myw0ODEuNWgwYTMzLjM4LDMzLjM4LDAsMCwxLTgtMzAuMDhsMy41OC0xNS42M1oiIG9wYWNpdHk9Ii4yOSIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm11bHRpcGx5Ij48L3BhdGg+CiAgICA8cG9seWdvbiBmaWxsPSJ1cmwoI2FsKSIgcG9pbnRzPSIxMTcuODYgNzU4LjcxIDk5LjMxIDc1OC43MSAxMDEuMzEgNjUxLjQ5IDExNS44NiA2NTEuNDkgMTE3Ljg2IDc1OC43MSI+PC9wb2x5Z29uPgogICAgPHBhdGggZmlsbD0idXJsKCNhbSkiIGQ9Ik05Mi42Niw0MjkuMDdzNC0zLjU3LDctMi4xOCw4LjkyLDguOSw4LjkyLDguOVM5OS40NSw0MjcuMjgsOTIuNjYsNDI5LjA3WiIgb3BhY2l0eT0iLjUzIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6c2NyZWVuIj48L3BhdGg+CiAgICA8cGF0aCBmaWxsPSJ1cmwoI2FuKSIgZD0iTTkzLjY1LDQxMC42NHMxMC4zNi04LDE1Ljc3LTYuNThjOC42NCwyLjI4LDExLjI5LDcuMTIsMTEuMjksNy4xMlMxMDYuMTgsNDA2LjQ5LDkzLjY1LDQxMC42NFoiIG9wYWNpdHk9Ii41MyIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOnNjcmVlbiI+PC9wYXRoPgogIDwvZz4KPC9zdmc+";
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
const prefix: string = "Invariant failed";
|
|
2
|
+
|
|
3
|
+
export default function invariant(
|
|
4
|
+
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
|
5
|
+
condition: any,
|
|
6
|
+
// Not providing an inline default argument for message as the result is smaller
|
|
7
|
+
/**
|
|
8
|
+
* Can provide a string, or a function that returns a string for cases where
|
|
9
|
+
* the message takes a fair amount of effort to compute
|
|
10
|
+
*/
|
|
11
|
+
message?: string | (() => string),
|
|
12
|
+
): asserts condition {
|
|
13
|
+
if (condition) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// When not in production we allow the message to pass through
|
|
18
|
+
const provided: string | undefined = typeof message === "function" ? message() : message;
|
|
19
|
+
|
|
20
|
+
// Options:
|
|
21
|
+
// 1. message provided: `${prefix}: ${provided}`
|
|
22
|
+
// 2. message not provided: prefix
|
|
23
|
+
const value: string = provided ? `${prefix}: ${provided}` : prefix;
|
|
24
|
+
throw new Error(value);
|
|
25
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Type, type TSchema, type StaticDecode, type StaticEncode } from "@sinclair/typebox";
|
|
2
|
+
|
|
3
|
+
export const jsonDate = Type.Transform(Type.String({ format: "date-time" }))
|
|
4
|
+
.Decode((value) => new Date(value)) // decode: number to Date
|
|
5
|
+
.Encode((value) => value.toISOString());
|
|
6
|
+
|
|
7
|
+
export type JsonDateObj = StaticDecode<typeof jsonDate>;
|
|
8
|
+
export type JsonDateStr = StaticEncode<typeof jsonDate>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { mergeWith, isArray } from "lodash-es";
|
|
2
|
+
|
|
3
|
+
export function mergeIgnoringArrays<T>(target: T, ...sources: T[]): T {
|
|
4
|
+
return mergeWith(target, ...sources, customizer);
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
|
8
|
+
function customizer(objValue: any, srcValue: any) {
|
|
9
|
+
if (isArray(objValue)) {
|
|
10
|
+
return srcValue;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export async function getObjectHash(obj: unknown): Promise<string> {
|
|
2
|
+
const str = JSON.stringify(obj);
|
|
3
|
+
const buffer = new TextEncoder().encode(str);
|
|
4
|
+
const hashBuffer = await crypto.subtle.digest("SHA-1", buffer);
|
|
5
|
+
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
|
6
|
+
return hashArray.map((b) => b.toString(16).padStart(2, "0")).join("");
|
|
7
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { JSONSchemaType } from "ajv";
|
|
2
|
+
import { type Static, Type, type TObject, type UnsafeOptions } from "@sinclair/typebox";
|
|
3
|
+
|
|
4
|
+
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
|
5
|
+
export function typeboxSchemaToJSONSchema<T extends Record<string, any>>(schema: TObject): JSONSchemaType<T> {
|
|
6
|
+
return JSON.parse(JSON.stringify(schema));
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
type StringEnumOptions = Partial<UnsafeOptions> & {
|
|
10
|
+
enumNames?: string[];
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export const StringEnum = <T extends string[]>(values: [...T], options: StringEnumOptions = {}) =>
|
|
14
|
+
Type.Unsafe<T[number]>({
|
|
15
|
+
type: "string",
|
|
16
|
+
enum: values,
|
|
17
|
+
...options,
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
export function getLitteralFromEnum(schema: ReturnType<typeof StringEnum>) {
|
|
21
|
+
if (!("enum" in schema) || !("enumNames" in schema)) {
|
|
22
|
+
throw new Error("Schema does not contain enum or enumNames properties");
|
|
23
|
+
}
|
|
24
|
+
const { enum: enumValues, enumNames } = schema as unknown as { enum: string[]; enumNames?: string[] };
|
|
25
|
+
// combine to key-value pairs
|
|
26
|
+
return enumValues.map((value, index) => ({
|
|
27
|
+
const: value,
|
|
28
|
+
title: enumNames ? enumNames[index] : value,
|
|
29
|
+
}));
|
|
30
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
type Result<T = unknown, E extends Error = Error> = [null, T] | [E, null];
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Try catch wrapper for async functions
|
|
5
|
+
*/
|
|
6
|
+
export async function tryCatch<T, E extends Error = Error>(promise: Promise<T>): Promise<Result<T, E>> {
|
|
7
|
+
try {
|
|
8
|
+
return [null, await promise];
|
|
9
|
+
} catch (e) {
|
|
10
|
+
return [e instanceof Error ? e : new Error(`Error in tryCatch: ${e}`), null] as Result<T, E>;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type SchemaOptions, type Static, type TRef, Type } from "@sinclair/typebox";
|
|
2
|
+
import type { preset } from "../bricks/props/preset";
|
|
3
|
+
import type { background, backgroundColor } from "../bricks/props/background";
|
|
4
|
+
import type { basicAlign } from "../bricks/props/align";
|
|
5
|
+
import type { containerLayout } from "../bricks/props/container";
|
|
6
|
+
import type { hidden } from "../bricks/props/common";
|
|
7
|
+
import type { border } from "../bricks/props/border";
|
|
8
|
+
import type { padding } from "../bricks/props/padding";
|
|
9
|
+
import type { image } from "../bricks/props/image";
|
|
10
|
+
import type { color } from "../bricks/props/color";
|
|
11
|
+
import type { shadow } from "../bricks/props/effects";
|
|
12
|
+
import type { textContent } from "../bricks/props/text";
|
|
13
|
+
import type { cssLength } from "../bricks/props/css-length";
|
|
14
|
+
import type { urlOrPageId } from "../bricks/props/string";
|
|
15
|
+
|
|
16
|
+
export interface SchemaTypeMap {
|
|
17
|
+
"styles:preset": ReturnType<typeof preset>;
|
|
18
|
+
"styles:background": ReturnType<typeof background>;
|
|
19
|
+
"styles:backgroundColor": ReturnType<typeof backgroundColor>;
|
|
20
|
+
"styles:basicAlign": ReturnType<typeof basicAlign>;
|
|
21
|
+
"styles:containerLayout": ReturnType<typeof containerLayout>;
|
|
22
|
+
"styles:hidden": ReturnType<typeof hidden>;
|
|
23
|
+
"styles:border": ReturnType<typeof border>;
|
|
24
|
+
"styles:padding": ReturnType<typeof padding>;
|
|
25
|
+
"styles:color": ReturnType<typeof color>;
|
|
26
|
+
"styles:shadow": ReturnType<typeof shadow>;
|
|
27
|
+
"styles:cssLength": ReturnType<typeof cssLength>;
|
|
28
|
+
"assets:image": ReturnType<typeof image>;
|
|
29
|
+
"content:text": ReturnType<typeof textContent>;
|
|
30
|
+
"content:urlOrPageId": ReturnType<typeof urlOrPageId>;
|
|
31
|
+
// Add other schema mappings here
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Create a typed ref helper
|
|
35
|
+
export function typedRef<K extends keyof SchemaTypeMap>(
|
|
36
|
+
id: K,
|
|
37
|
+
options: SchemaOptions = {},
|
|
38
|
+
): SchemaTypeMap[K] {
|
|
39
|
+
// biome-ignore lint/suspicious/noExplicitAny: Force inference of Ref to the correct type
|
|
40
|
+
return Type.Ref(id, options) as any;
|
|
41
|
+
}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
export declare const manifest: {
|
|
2
|
-
readonly datasource: import("@sinclair/typebox").TObject<import("@sinclair/typebox").TProperties> | import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<import("@sinclair/typebox").TProperties>>;
|
|
3
|
-
readonly props: import("@sinclair/typebox").TObject<{
|
|
4
|
-
className: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
5
|
-
lastTouched: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
6
|
-
editable: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
7
|
-
}>;
|
|
8
|
-
readonly presets: Record<string, {
|
|
9
|
-
label: string;
|
|
10
|
-
previewClasses: string;
|
|
11
|
-
props: Partial<{
|
|
12
|
-
className?: string | undefined;
|
|
13
|
-
lastTouched?: number | undefined;
|
|
14
|
-
editable?: boolean | undefined;
|
|
15
|
-
}>;
|
|
16
|
-
}> | undefined;
|
|
17
|
-
readonly kind: "container" | "brick" | "widget";
|
|
18
|
-
readonly defaultInspectorTab: "content" | "style" | "preset";
|
|
19
|
-
readonly hideInLibrary: boolean;
|
|
20
|
-
readonly deletable: boolean;
|
|
21
|
-
readonly movable: boolean;
|
|
22
|
-
readonly resizable: boolean;
|
|
23
|
-
readonly repeatable: boolean;
|
|
24
|
-
readonly duplicatable: boolean;
|
|
25
|
-
readonly isContainer: boolean;
|
|
26
|
-
readonly defaultWidth: {
|
|
27
|
-
mobile: number;
|
|
28
|
-
desktop: number;
|
|
29
|
-
};
|
|
30
|
-
readonly defaultHeight: {
|
|
31
|
-
mobile: number;
|
|
32
|
-
desktop: number;
|
|
33
|
-
};
|
|
34
|
-
readonly minWidth: {
|
|
35
|
-
mobile: number;
|
|
36
|
-
desktop: number;
|
|
37
|
-
} | undefined;
|
|
38
|
-
readonly minHeight: {
|
|
39
|
-
mobile: number;
|
|
40
|
-
desktop: number;
|
|
41
|
-
} | undefined;
|
|
42
|
-
readonly type: string;
|
|
43
|
-
readonly name: string;
|
|
44
|
-
readonly icon: string | import("react").FC<import("react-icons/lib").IconBaseProps>;
|
|
45
|
-
readonly iconClassName?: string;
|
|
46
|
-
readonly description?: string;
|
|
47
|
-
readonly maxWidth?: {
|
|
48
|
-
mobile: number;
|
|
49
|
-
desktop: number;
|
|
50
|
-
};
|
|
51
|
-
readonly maxHeight?: {
|
|
52
|
-
mobile: number;
|
|
53
|
-
desktop: number;
|
|
54
|
-
};
|
|
55
|
-
};
|
|
56
|
-
export type Manifest = typeof manifest;
|
|
57
|
-
//# sourceMappingURL=countdown.manifest.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"countdown.manifest.d.ts","sourceRoot":"","sources":["../../../../src/shared/bricks/manifests/countdown.manifest.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BnB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC"}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
export declare const manifest: {
|
|
2
|
-
readonly datasource: import("@sinclair/typebox").TObject<import("@sinclair/typebox").TProperties> | import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<import("@sinclair/typebox").TProperties>>;
|
|
3
|
-
readonly props: import("@sinclair/typebox").TObject<{
|
|
4
|
-
className: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
5
|
-
lastTouched: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
6
|
-
editable: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
7
|
-
} & {
|
|
8
|
-
render: import("@sinclair/typebox").TFunction<[import("@sinclair/typebox").TObject<{}>], import("@sinclair/typebox").TAny>;
|
|
9
|
-
componentProps: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{}>>;
|
|
10
|
-
}>;
|
|
11
|
-
readonly presets: Record<string, {
|
|
12
|
-
label: string;
|
|
13
|
-
previewClasses: string;
|
|
14
|
-
props: Partial<{
|
|
15
|
-
className?: string | undefined;
|
|
16
|
-
lastTouched?: number | undefined;
|
|
17
|
-
editable?: boolean | undefined;
|
|
18
|
-
componentProps?: {} | undefined;
|
|
19
|
-
render: (param_0: {}) => any;
|
|
20
|
-
}>;
|
|
21
|
-
}> | undefined;
|
|
22
|
-
readonly kind: "container" | "brick" | "widget";
|
|
23
|
-
readonly defaultInspectorTab: "content" | "style" | "preset";
|
|
24
|
-
readonly hideInLibrary: boolean;
|
|
25
|
-
readonly deletable: boolean;
|
|
26
|
-
readonly movable: boolean;
|
|
27
|
-
readonly resizable: boolean;
|
|
28
|
-
readonly repeatable: boolean;
|
|
29
|
-
readonly duplicatable: boolean;
|
|
30
|
-
readonly isContainer: boolean;
|
|
31
|
-
readonly defaultWidth: {
|
|
32
|
-
mobile: number;
|
|
33
|
-
desktop: number;
|
|
34
|
-
};
|
|
35
|
-
readonly defaultHeight: {
|
|
36
|
-
mobile: number;
|
|
37
|
-
desktop: number;
|
|
38
|
-
};
|
|
39
|
-
readonly minWidth: {
|
|
40
|
-
mobile: number;
|
|
41
|
-
desktop: number;
|
|
42
|
-
} | undefined;
|
|
43
|
-
readonly minHeight: {
|
|
44
|
-
mobile: number;
|
|
45
|
-
desktop: number;
|
|
46
|
-
} | undefined;
|
|
47
|
-
readonly type: string;
|
|
48
|
-
readonly name: string;
|
|
49
|
-
readonly icon: string | import("react").FC<import("react-icons/lib").IconBaseProps>;
|
|
50
|
-
readonly iconClassName?: string;
|
|
51
|
-
readonly description?: string;
|
|
52
|
-
readonly maxWidth?: {
|
|
53
|
-
mobile: number;
|
|
54
|
-
desktop: number;
|
|
55
|
-
};
|
|
56
|
-
readonly maxHeight?: {
|
|
57
|
-
mobile: number;
|
|
58
|
-
desktop: number;
|
|
59
|
-
};
|
|
60
|
-
};
|
|
61
|
-
export type Manifest = typeof manifest;
|
|
62
|
-
//# sourceMappingURL=generic-component.manifest.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generic-component.manifest.d.ts","sourceRoot":"","sources":["../../../../src/shared/bricks/manifests/generic-component.manifest.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmBnB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC"}
|