@burdenoff/website-sdk 2026.517.6 → 2026.518.2

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.
@@ -757,20 +757,313 @@ function BlogPostPage(props) {
757
757
  className: "w-full h-full object-cover"
758
758
  }
759
759
  ) }),
760
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "prose prose-gray dark:prose-invert max-w-none", children: /* @__PURE__ */ jsxRuntime.jsx(
761
- ContentRenderer,
762
- {
763
- content: post.content,
764
- format: post.contentFormat
765
- }
766
- ) })
760
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "prose prose-gray dark:prose-invert max-w-none", children: /* @__PURE__ */ jsxRuntime.jsx(ContentRenderer, { content: post.content, format: post.contentFormat }) })
761
+ ] })
762
+ ] });
763
+ }
764
+ var PRESS_KIT_QUERY = `
765
+ query PublicPressKit($productId: String!, $limit: Int, $offset: Int) {
766
+ publicPressKitAssets(productId: $productId, limit: $limit, offset: $offset) {
767
+ items {
768
+ id
769
+ category
770
+ title
771
+ slug
772
+ description
773
+ fileUrl
774
+ fileName
775
+ fileSize
776
+ mimeType
777
+ thumbnailUrl
778
+ version
779
+ tags
780
+ sortOrder
781
+ updatedAt
782
+ }
783
+ total
784
+ hasMore
785
+ }
786
+ }
787
+ `;
788
+ var CATEGORY_ORDER = [
789
+ "LOGO",
790
+ "BANNER",
791
+ "SCREENSHOT",
792
+ "BRAND_GUIDE",
793
+ "BROCHURE",
794
+ "DOCUMENT",
795
+ "PRESS_RELEASE"
796
+ ];
797
+ var CATEGORY_LABELS = {
798
+ LOGO: "Logos",
799
+ BANNER: "Banners",
800
+ SCREENSHOT: "Screenshots",
801
+ BRAND_GUIDE: "Brand Guides",
802
+ BROCHURE: "Brochures",
803
+ DOCUMENT: "Documents",
804
+ PRESS_RELEASE: "Press Releases"
805
+ };
806
+ function formatBytes(bytes) {
807
+ if (bytes == null) return "";
808
+ if (bytes < 1024) return `${bytes} B`;
809
+ if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(0)} KB`;
810
+ return `${(bytes / 1024 / 1024).toFixed(1)} MB`;
811
+ }
812
+ function AssetCard({ asset }) {
813
+ const date = asset.updatedAt ? new Date(asset.updatedAt).toLocaleDateString("en-US", {
814
+ year: "numeric",
815
+ month: "short",
816
+ day: "numeric"
817
+ }) : "";
818
+ const ext = (asset.mimeType || "file").split("/").pop()?.toUpperCase() || "FILE";
819
+ const size = formatBytes(asset.fileSize);
820
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "group flex flex-col bg-card border rounded-xl overflow-hidden hover:shadow-lg hover:border-primary/30 transition-all duration-300", children: [
821
+ asset.thumbnailUrl ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "aspect-[16/9] overflow-hidden bg-muted/30", children: /* @__PURE__ */ jsxRuntime.jsx(
822
+ "img",
823
+ {
824
+ src: asset.thumbnailUrl,
825
+ alt: asset.title,
826
+ className: "w-full h-full object-contain group-hover:scale-105 transition-transform duration-300",
827
+ loading: "lazy"
828
+ }
829
+ ) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "aspect-[16/9] bg-muted/50 flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(
830
+ "svg",
831
+ {
832
+ className: "w-12 h-12 text-muted-foreground/20",
833
+ fill: "none",
834
+ viewBox: "0 0 24 24",
835
+ stroke: "currentColor",
836
+ children: /* @__PURE__ */ jsxRuntime.jsx(
837
+ "path",
838
+ {
839
+ strokeLinecap: "round",
840
+ strokeLinejoin: "round",
841
+ strokeWidth: 1.5,
842
+ d: "M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z"
843
+ }
844
+ )
845
+ }
846
+ ) }),
847
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col flex-1 p-5", children: [
848
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-block self-start text-xs font-medium text-primary bg-primary/10 px-2.5 py-1 rounded-full mb-3", children: CATEGORY_LABELS[asset.category] ?? asset.category }),
849
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-base font-semibold text-foreground mb-1 line-clamp-2", children: asset.title }),
850
+ asset.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground mb-3 line-clamp-2", children: asset.description }),
851
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-auto flex items-center justify-between pt-3", children: [
852
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-xs text-muted-foreground", children: [
853
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium", children: ext }),
854
+ size && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
855
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground/40", children: "\xB7" }),
856
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: size })
857
+ ] }),
858
+ date && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
859
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground/40", children: "\xB7" }),
860
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: date })
861
+ ] })
862
+ ] }),
863
+ /* @__PURE__ */ jsxRuntime.jsxs(
864
+ "a",
865
+ {
866
+ href: asset.fileUrl,
867
+ target: "_blank",
868
+ rel: "noopener noreferrer",
869
+ download: true,
870
+ className: "inline-flex items-center gap-1.5 text-sm font-medium text-primary hover:underline",
871
+ children: [
872
+ /* @__PURE__ */ jsxRuntime.jsx(
873
+ "svg",
874
+ {
875
+ className: "w-4 h-4",
876
+ fill: "none",
877
+ viewBox: "0 0 24 24",
878
+ stroke: "currentColor",
879
+ strokeWidth: 2,
880
+ children: /* @__PURE__ */ jsxRuntime.jsx(
881
+ "path",
882
+ {
883
+ strokeLinecap: "round",
884
+ strokeLinejoin: "round",
885
+ d: "M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4"
886
+ }
887
+ )
888
+ }
889
+ ),
890
+ "Download"
891
+ ]
892
+ }
893
+ )
894
+ ] })
767
895
  ] })
768
896
  ] });
769
897
  }
898
+ function PressKitPage(props) {
899
+ const {
900
+ productName,
901
+ heroTitle = "Press & Media Kit",
902
+ heroSubtitle = "Official logos, brand assets, and media resources. Everything you need to write about us.",
903
+ mediaContactEmail,
904
+ brandKitUrl,
905
+ className = "",
906
+ seoTitle,
907
+ seoDescription,
908
+ seoKeywords
909
+ } = props;
910
+ const client = useWebSDK();
911
+ const config = useWebSDKConfig();
912
+ const { product } = useProduct();
913
+ const resolvedProductId = product?.id || config.productId;
914
+ const contactEmail = mediaContactEmail || product?.contactEmail || void 0;
915
+ const [assets, setAssets] = react.useState([]);
916
+ const [loading, setLoading] = react.useState(true);
917
+ const [error, setError] = react.useState(null);
918
+ const [activeCategory, setActiveCategory] = react.useState("ALL");
919
+ const fetchAssets = react.useCallback(async () => {
920
+ if (!resolvedProductId) {
921
+ setLoading(false);
922
+ return;
923
+ }
924
+ setLoading(true);
925
+ try {
926
+ const PAGE_SIZE = 100;
927
+ const all = [];
928
+ let offset = 0;
929
+ for (; ; ) {
930
+ const result = await client.query(PRESS_KIT_QUERY, {
931
+ productId: resolvedProductId,
932
+ limit: PAGE_SIZE,
933
+ offset
934
+ });
935
+ if (result.errors?.length) {
936
+ setError(result.errors[0]?.message ?? "Failed to load press kit");
937
+ return;
938
+ }
939
+ const page = result.data?.publicPressKitAssets;
940
+ const items = page?.items || [];
941
+ all.push(...items);
942
+ if (!page?.hasMore || items.length === 0) break;
943
+ offset += PAGE_SIZE;
944
+ }
945
+ setAssets(all);
946
+ setError(null);
947
+ } catch {
948
+ setError("Failed to load press kit");
949
+ } finally {
950
+ setLoading(false);
951
+ }
952
+ }, [client, resolvedProductId]);
953
+ react.useEffect(() => {
954
+ fetchAssets();
955
+ }, [fetchAssets]);
956
+ const presentCategories = CATEGORY_ORDER.filter(
957
+ (c) => assets.some((a) => a.category === c)
958
+ );
959
+ const visibleAssets = activeCategory === "ALL" ? assets : assets.filter((a) => a.category === activeCategory);
960
+ const grouped = (activeCategory === "ALL" ? presentCategories : [activeCategory]).map((cat) => ({
961
+ cat,
962
+ items: visibleAssets.filter((a) => a.category === cat).sort((a, b) => a.sortOrder - b.sortOrder)
963
+ })).filter((g) => g.items.length > 0);
964
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `w-full ${className}`, children: [
965
+ seoTitle && /* @__PURE__ */ jsxRuntime.jsx(
966
+ PageHead,
967
+ {
968
+ title: seoTitle,
969
+ description: seoDescription || heroSubtitle,
970
+ productName,
971
+ keywords: seoKeywords
972
+ }
973
+ ),
974
+ /* @__PURE__ */ jsxRuntime.jsx("section", { className: "py-16 sm:py-20 md:py-24", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center max-w-3xl mx-auto", children: [
975
+ /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "text-3xl sm:text-4xl md:text-5xl font-bold tracking-tight text-foreground", children: heroTitle }),
976
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-4 text-lg text-muted-foreground", children: heroSubtitle }),
977
+ (brandKitUrl || contactEmail) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-8 flex flex-wrap items-center justify-center gap-4", children: [
978
+ brandKitUrl && /* @__PURE__ */ jsxRuntime.jsx(
979
+ "a",
980
+ {
981
+ href: brandKitUrl,
982
+ target: "_blank",
983
+ rel: "noopener noreferrer",
984
+ className: "inline-flex items-center gap-2 px-6 py-3 rounded-lg bg-primary text-primary-foreground font-medium hover:opacity-90 transition-opacity",
985
+ children: "Download brand kit"
986
+ }
987
+ ),
988
+ contactEmail && /* @__PURE__ */ jsxRuntime.jsx(
989
+ "a",
990
+ {
991
+ href: `mailto:${contactEmail}`,
992
+ className: "inline-flex items-center gap-2 px-6 py-3 rounded-lg border font-medium text-foreground hover:bg-muted transition-colors",
993
+ children: "Media inquiries"
994
+ }
995
+ )
996
+ ] })
997
+ ] }) }) }),
998
+ /* @__PURE__ */ jsxRuntime.jsx("section", { className: "pb-16 sm:pb-20", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: loading ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid sm:grid-cols-2 lg:grid-cols-3 gap-6", children: [1, 2, 3, 4, 5, 6].map((i) => /* @__PURE__ */ jsxRuntime.jsxs(
999
+ "div",
1000
+ {
1001
+ className: "bg-card border rounded-xl overflow-hidden animate-pulse",
1002
+ children: [
1003
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "aspect-[16/9] bg-muted" }),
1004
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-5 space-y-3", children: [
1005
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4 bg-muted rounded w-1/4" }),
1006
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-5 bg-muted rounded w-3/4" }),
1007
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4 bg-muted rounded w-1/2" })
1008
+ ] })
1009
+ ]
1010
+ },
1011
+ i
1012
+ )) }) : error ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-center py-12", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground", children: error }) }) : assets.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-center py-12", children: /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-muted-foreground", children: [
1013
+ "Press materials are coming soon. For media inquiries",
1014
+ contactEmail ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1015
+ ", contact ",
1016
+ /* @__PURE__ */ jsxRuntime.jsx(
1017
+ "a",
1018
+ {
1019
+ href: `mailto:${contactEmail}`,
1020
+ className: "text-primary hover:underline",
1021
+ children: contactEmail
1022
+ }
1023
+ )
1024
+ ] }) : " please reach out to our team",
1025
+ "."
1026
+ ] }) }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1027
+ presentCategories.length > 1 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-2 mb-10 justify-center", children: ["ALL", ...presentCategories].map((c) => {
1028
+ const active = activeCategory === c;
1029
+ return /* @__PURE__ */ jsxRuntime.jsx(
1030
+ "button",
1031
+ {
1032
+ type: "button",
1033
+ onClick: () => setActiveCategory(c),
1034
+ className: `px-4 py-2 rounded-full text-sm font-medium transition-colors ${active ? "bg-primary text-primary-foreground" : "bg-muted text-muted-foreground hover:text-foreground"}`,
1035
+ children: c === "ALL" ? "All" : CATEGORY_LABELS[c] ?? c
1036
+ },
1037
+ c
1038
+ );
1039
+ }) }),
1040
+ grouped.map((group) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-12", children: [
1041
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-xl font-semibold text-foreground mb-5", children: CATEGORY_LABELS[group.cat] ?? group.cat }),
1042
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid sm:grid-cols-2 lg:grid-cols-3 gap-6", children: group.items.map((a) => /* @__PURE__ */ jsxRuntime.jsx(AssetCard, { asset: a }, a.id)) })
1043
+ ] }, group.cat)),
1044
+ contactEmail && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-8 border-t pt-10 text-center", children: [
1045
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-lg font-semibold text-foreground mb-2", children: "Media Contact" }),
1046
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-muted-foreground", children: [
1047
+ "For interviews, partnerships, and press inquiries:",
1048
+ " ",
1049
+ /* @__PURE__ */ jsxRuntime.jsx(
1050
+ "a",
1051
+ {
1052
+ href: `mailto:${contactEmail}`,
1053
+ className: "text-primary hover:underline",
1054
+ children: contactEmail
1055
+ }
1056
+ )
1057
+ ] })
1058
+ ] })
1059
+ ] }) }) })
1060
+ ] });
1061
+ }
770
1062
 
771
1063
  exports.BlogListPage = BlogListPage;
772
1064
  exports.BlogPostPage = BlogPostPage;
773
1065
  exports.ContentRenderer = ContentRenderer;
1066
+ exports.PressKitPage = PressKitPage;
774
1067
  exports.useContentPage = useContentPage;
775
1068
  exports.useContentPages = useContentPages;
776
1069
  //# sourceMappingURL=index.js.map