@postrun/react 2.2.1 → 2.4.0

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/index.js CHANGED
@@ -1,7 +1,8 @@
1
1
  "use client";
2
- import { createContext, memo, useMemo, useState, useEffect, Fragment as Fragment$1, useRef, createElement, useContext, useCallback } from 'react';
2
+ import { createContext, memo, useMemo, useState, useEffect, useRef, useLayoutEffect, Fragment as Fragment$1, useCallback, createElement, useContext, useId } from 'react';
3
3
  import { useInfiniteQuery, useQuery, useMutation, QueryClient } from '@tanstack/react-query';
4
- import { createPostrunClient, profilesList, profilesGet, profilesCreate, profilesUpdate, profilesDelete, connectionsConnect, connectionsListByProfile, connectionsGet, connectionsListAccounts, connectionsSelect, connectionsDelete, mediaGet, mediaList, mediaUpdate, mediaDelete, postsList, postsGet, postsCreate, buildCreatePost, isPostPlatform, failedVariants, isPublished, postsValidate, postsUpdate, postsDelete, tiktokCreatorInfo, mediaCreate, PostrunError } from '@postrun/js';
4
+ import { createPostrunClient, profilesList, profilesGet, profilesCreate, profilesUpdate, profilesDelete, connectionsConnect, connectionsListByProfile, connectionsGet, connectionsListAccounts, connectionsSelect, connectionsDelete, mediaGet, mediaList, mediaUpdate, mediaDelete, postsList, postsGet, postsCreate, buildCreatePost, isPostPlatform, failedVariants, isPublished, postsValidate, postsUpdate, postsDelete, tiktokCreatorInfo, audiencePrivacyOptions, audienceUnselected, tiktokPrivacyLabel, parsePrivacyLevel, TIKTOK_AUDIENCE_REQUIRED_HINT, captionMaxFor, commercialLabelNotice, commercialDisclosureIncomplete, setCommercialDisclosure, setBrandKind, TIKTOK_DISCLOSURE_REQUIRED_HINT, TIKTOK_BRANDED_CONTENT_POLICY_URL, TIKTOK_MUSIC_CONFIRMATION_URL, interactionRows, interactionValueKey, toggleInteraction, tiktokOptionsReady, TIKTOK_PROCESSING_NOTICE, brandedContentDeclared, mediaCreate, PostrunError } from '@postrun/js';
5
+ export { TIKTOK_CAPTION_MAX, captionMaxFor } from '@postrun/js';
5
6
  import Nango, { AuthError } from '@nangohq/frontend';
6
7
  import pWaitFor, { TimeoutError } from 'p-wait-for';
7
8
  import pLimit from 'p-limit';
@@ -12,6 +13,8 @@ import { FiMessageCircle, FiRepeat, FiHeart, FiBarChart2, FiShare, FiGlobe, FiUs
12
13
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
13
14
  import twitterText from 'twitter-text';
14
15
  import { LuBadgeCheck } from 'react-icons/lu';
16
+ import useEmblaCarousel from 'embla-carousel-react';
17
+ import { IoMusicalNotes } from 'react-icons/io5';
15
18
 
16
19
  // src/context.tsx
17
20
  function createDefaultQueryClient() {
@@ -633,8 +636,6 @@ async function runUpload(client, file, options, signal, callbacks) {
633
636
  client,
634
637
  body: {
635
638
  profile_id: options.profileId,
636
- kind: options.kind,
637
- content_type: options.contentType,
638
639
  targets: options.targets,
639
640
  raw: options.raw,
640
641
  alt_text: options.altText,
@@ -1043,7 +1044,7 @@ var ACTIONS = [
1043
1044
  { label: "Share", Icon: FiShare }
1044
1045
  ];
1045
1046
  function XPreviewActions() {
1046
- return /* @__PURE__ */ jsx("div", { style: ROW, children: ACTIONS.map(({ label, Icon }) => /* @__PURE__ */ jsx(Icon, { size: 18, "aria-label": label, role: "img" }, label)) });
1047
+ return /* @__PURE__ */ jsx("div", { style: ROW, children: ACTIONS.map(({ label, Icon: Icon2 }) => /* @__PURE__ */ jsx(Icon2, { size: 18, "aria-label": label, role: "img" }, label)) });
1047
1048
  }
1048
1049
  var {
1049
1050
  extractCashtagsWithIndices,
@@ -1353,8 +1354,8 @@ var ACTIONS2 = [
1353
1354
  { label: "Send", Icon: FiSend }
1354
1355
  ];
1355
1356
  function EngagementBar() {
1356
- return /* @__PURE__ */ jsx("div", { style: ROW2, children: ACTIONS2.map(({ label, Icon }) => /* @__PURE__ */ jsxs("span", { style: ITEM, children: [
1357
- /* @__PURE__ */ jsx(Icon, { size: 20, "aria-hidden": true }),
1357
+ return /* @__PURE__ */ jsx("div", { style: ROW2, children: ACTIONS2.map(({ label, Icon: Icon2 }) => /* @__PURE__ */ jsxs("span", { style: ITEM, children: [
1358
+ /* @__PURE__ */ jsx(Icon2, { size: 20, "aria-hidden": true }),
1358
1359
  label
1359
1360
  ] }, label)) });
1360
1361
  }
@@ -1660,7 +1661,7 @@ function LinkedInPostPreviewImpl({
1660
1661
  accent: varRef(LI_VAR.accent),
1661
1662
  muted: varRef(LI_VAR.muted)
1662
1663
  };
1663
- const cardStyle = {
1664
+ const cardStyle2 = {
1664
1665
  ...paletteVars(dark),
1665
1666
  background: varRef(LI_VAR.bg),
1666
1667
  color: varRef(LI_VAR.text),
@@ -1671,7 +1672,7 @@ function LinkedInPostPreviewImpl({
1671
1672
  fontFamily: FONT_STACK,
1672
1673
  ...style
1673
1674
  };
1674
- return /* @__PURE__ */ jsxs("div", { className, style: cardStyle, children: [
1675
+ return /* @__PURE__ */ jsxs("div", { className, style: cardStyle2, children: [
1675
1676
  /* @__PURE__ */ jsx(Header, { author, visibility, time }),
1676
1677
  variant.body ? /* @__PURE__ */ jsx("div", { style: { padding: "8px 16px 0" }, children: /* @__PURE__ */ jsx(
1677
1678
  PostBody,
@@ -1686,7 +1687,974 @@ function LinkedInPostPreviewImpl({
1686
1687
  ] });
1687
1688
  }
1688
1689
  var LinkedInPostPreview = memo(LinkedInPostPreviewImpl);
1690
+ var LINK_COLOR = "#8ab4ff";
1691
+ var TOKEN = /([#@][\p{L}\p{N}_.]+)/gu;
1692
+ var IS_TOKEN = /^[#@][\p{L}\p{N}_.]+$/u;
1693
+ function Caption({ body }) {
1694
+ const [expanded, setExpanded] = useState(false);
1695
+ const [overflowing, setOverflowing] = useState(false);
1696
+ const ref = useRef(null);
1697
+ useLayoutEffect(() => {
1698
+ const el = ref.current;
1699
+ if (!el || expanded) {
1700
+ return;
1701
+ }
1702
+ setOverflowing(el.scrollHeight > el.clientHeight + 1);
1703
+ }, [body, expanded]);
1704
+ const parts = body.split(TOKEN);
1705
+ return /* @__PURE__ */ jsxs("div", { style: wrapStyle, children: [
1706
+ /* @__PURE__ */ jsx("div", { ref, style: expanded ? expandedTextStyle : clampedTextStyle, children: parts.map(
1707
+ (part, i) => IS_TOKEN.test(part) ? /* @__PURE__ */ jsx("span", { style: { color: LINK_COLOR }, children: part }, i) : /* @__PURE__ */ jsx("span", { children: part }, i)
1708
+ ) }),
1709
+ overflowing || expanded ? /* @__PURE__ */ jsx(
1710
+ "button",
1711
+ {
1712
+ type: "button",
1713
+ "aria-expanded": expanded,
1714
+ "aria-label": expanded ? "Collapse caption" : "Expand caption",
1715
+ onClick: () => setExpanded((v) => !v),
1716
+ style: moreStyle,
1717
+ children: expanded ? "less" : "more"
1718
+ }
1719
+ ) : null
1720
+ ] });
1721
+ }
1722
+ var wrapStyle = {
1723
+ fontSize: 14,
1724
+ lineHeight: 1.35
1725
+ };
1726
+ var clampedTextStyle = {
1727
+ display: "-webkit-box",
1728
+ WebkitLineClamp: 2,
1729
+ WebkitBoxOrient: "vertical",
1730
+ overflow: "hidden",
1731
+ whiteSpace: "pre-wrap",
1732
+ wordBreak: "break-word"
1733
+ };
1734
+ var expandedTextStyle = {
1735
+ maxHeight: 180,
1736
+ overflowY: "auto",
1737
+ whiteSpace: "pre-wrap",
1738
+ wordBreak: "break-word",
1739
+ overscrollBehavior: "contain"
1740
+ };
1741
+ var moreStyle = {
1742
+ display: "inline-block",
1743
+ marginTop: 2,
1744
+ padding: 0,
1745
+ border: 0,
1746
+ background: "transparent",
1747
+ color: "rgba(255,255,255,0.82)",
1748
+ fontSize: 13,
1749
+ fontWeight: 600,
1750
+ cursor: "pointer",
1751
+ fontFamily: "inherit"
1752
+ };
1753
+ function Media2({
1754
+ media,
1755
+ pending = false
1756
+ }) {
1757
+ const [first] = media;
1758
+ if (!first) {
1759
+ return pending ? /* @__PURE__ */ jsx(ProcessingMedia, {}) : /* @__PURE__ */ jsx(EmptyMedia, {});
1760
+ }
1761
+ if (first.kind === "video") {
1762
+ return /* @__PURE__ */ jsx(
1763
+ "video",
1764
+ {
1765
+ src: first.src,
1766
+ poster: first.posterSrc,
1767
+ autoPlay: true,
1768
+ muted: true,
1769
+ loop: true,
1770
+ playsInline: true,
1771
+ style: coverStyle
1772
+ }
1773
+ );
1774
+ }
1775
+ return /* @__PURE__ */ jsx(PhotoCarousel, { media });
1776
+ }
1777
+ function PhotoCarousel({ media }) {
1778
+ const [emblaRef, emblaApi] = useEmblaCarousel({
1779
+ loop: false,
1780
+ align: "start",
1781
+ containScroll: "trimSnaps"
1782
+ });
1783
+ const [selected, setSelected] = useState(0);
1784
+ const sync = useCallback((api) => {
1785
+ setSelected(api.selectedScrollSnap());
1786
+ }, []);
1787
+ useEffect(() => {
1788
+ if (!emblaApi) {
1789
+ return;
1790
+ }
1791
+ sync(emblaApi);
1792
+ emblaApi.on("select", sync).on("reInit", sync);
1793
+ return () => {
1794
+ emblaApi.off("select", sync).off("reInit", sync);
1795
+ };
1796
+ }, [emblaApi, sync]);
1797
+ return /* @__PURE__ */ jsxs("div", { style: { position: "absolute", inset: 0 }, children: [
1798
+ /* @__PURE__ */ jsx("div", { ref: emblaRef, style: viewportStyle, children: /* @__PURE__ */ jsx("div", { style: containerStyle, children: media.map((m, i) => /* @__PURE__ */ jsx("div", { style: slideStyle, children: /* @__PURE__ */ jsx("img", { src: m.src, alt: m.alt ?? "", style: coverStyle }) }, `${m.src}-${i}`)) }) }),
1799
+ media.length > 1 ? /* @__PURE__ */ jsx("div", { style: dotsStyle, children: media.map((m, i) => /* @__PURE__ */ jsx(
1800
+ "span",
1801
+ {
1802
+ style: { ...dotStyle, opacity: i === selected ? 1 : 0.4 }
1803
+ },
1804
+ `dot-${m.src}-${i}`
1805
+ )) }) : null
1806
+ ] });
1807
+ }
1808
+ function EmptyMedia() {
1809
+ return /* @__PURE__ */ jsx("div", { style: emptyStyle, children: "No media yet" });
1810
+ }
1811
+ function ProcessingMedia() {
1812
+ return /* @__PURE__ */ jsxs("div", { style: emptyStyle, children: [
1813
+ /* @__PURE__ */ jsx("div", { style: shimmerStyle }),
1814
+ /* @__PURE__ */ jsx("span", { style: { position: "relative", zIndex: 1 }, children: "Processing media\u2026" })
1815
+ ] });
1816
+ }
1817
+ var coverStyle = {
1818
+ position: "absolute",
1819
+ inset: 0,
1820
+ width: "100%",
1821
+ height: "100%",
1822
+ objectFit: "cover"
1823
+ };
1824
+ var viewportStyle = {
1825
+ position: "absolute",
1826
+ inset: 0,
1827
+ overflow: "hidden"
1828
+ };
1829
+ var containerStyle = {
1830
+ display: "flex",
1831
+ height: "100%"
1832
+ };
1833
+ var slideStyle = {
1834
+ position: "relative",
1835
+ flex: "0 0 100%",
1836
+ minWidth: 0,
1837
+ height: "100%"
1838
+ };
1839
+ var dotsStyle = {
1840
+ position: "absolute",
1841
+ bottom: 124,
1842
+ left: "50%",
1843
+ transform: "translateX(-50%)",
1844
+ display: "flex",
1845
+ gap: 5,
1846
+ alignItems: "center"
1847
+ };
1848
+ var dotStyle = {
1849
+ width: 6,
1850
+ height: 6,
1851
+ borderRadius: "50%",
1852
+ background: "#fff",
1853
+ transition: "opacity 160ms ease"
1854
+ };
1855
+ var emptyStyle = {
1856
+ position: "absolute",
1857
+ inset: 0,
1858
+ display: "flex",
1859
+ alignItems: "center",
1860
+ justifyContent: "center",
1861
+ color: "rgba(255,255,255,0.55)",
1862
+ fontSize: 13,
1863
+ background: "linear-gradient(180deg,#1c1c20,#101013)",
1864
+ overflow: "hidden"
1865
+ };
1866
+ var shimmerStyle = {
1867
+ position: "absolute",
1868
+ inset: 0,
1869
+ background: "linear-gradient(90deg, rgba(255,255,255,0) 0%, rgba(255,255,255,0.06) 50%, rgba(255,255,255,0) 100%)",
1870
+ backgroundSize: "200% 100%",
1871
+ animation: "pr-tt-shimmer 1.4s ease-in-out infinite"
1872
+ };
1873
+ var Icon = ({
1874
+ size = 24,
1875
+ viewBox,
1876
+ children,
1877
+ ...rest
1878
+ }) => /* @__PURE__ */ jsx(
1879
+ "svg",
1880
+ {
1881
+ width: size,
1882
+ height: size,
1883
+ viewBox,
1884
+ fill: "currentColor",
1885
+ xmlns: "http://www.w3.org/2000/svg",
1886
+ ...rest,
1887
+ children
1888
+ }
1889
+ );
1890
+ var HeartIcon = (p) => /* @__PURE__ */ jsx(Icon, { viewBox: "0 0 24 24", ...p, children: /* @__PURE__ */ jsx(
1891
+ "path",
1892
+ {
1893
+ fillRule: "evenodd",
1894
+ clipRule: "evenodd",
1895
+ d: "M7.5 2.25C10.5 2.25 12 4.25 12 4.25C12 4.25 13.5 2.25 16.5 2.25C20 2.25 22.5 4.99999 22.5 8.5C22.5 12.5 19.2311 16.0657 16.25 18.75C14.4095 20.4072 13 21.5 12 21.5C11 21.5 9.55051 20.3989 7.75 18.75C4.81949 16.0662 1.5 12.5 1.5 8.5C1.5 4.99999 4 2.25 7.5 2.25Z"
1896
+ }
1897
+ ) });
1898
+ var CommentIcon = (p) => /* @__PURE__ */ jsx(Icon, { viewBox: "0 0 48 48", ...p, children: /* @__PURE__ */ jsx(
1899
+ "path",
1900
+ {
1901
+ fillRule: "evenodd",
1902
+ clipRule: "evenodd",
1903
+ d: "M2 21.5c0-10.22 9.88-18 22-18s22 7.78 22 18c0 5.63-3.19 10.74-7.32 14.8a43.6 43.6 0 0 1-14.14 9.1A1.5 1.5 0 0 1 22.5 44v-5.04C11.13 38.4 2 31.34 2 21.5M14 25a3 3 0 1 0 0-6 3 3 0 0 0 0 6m10 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6m13-3a3 3 0 1 1-6 0 3 3 0 0 1 6 0"
1904
+ }
1905
+ ) });
1906
+ var BookmarkIcon = (p) => /* @__PURE__ */ jsx(Icon, { viewBox: "0 0 24 24", ...p, children: /* @__PURE__ */ jsx("path", { d: "M4 4.5a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v15.13a1 1 0 0 1-1.555.831l-6.167-4.12a.5.5 0 0 0-.556 0l-6.167 4.12A1 1 0 0 1 4 19.63z" }) });
1907
+ var ShareIcon = (p) => /* @__PURE__ */ jsx(Icon, { viewBox: "0 0 20 20", ...p, children: /* @__PURE__ */ jsx(
1908
+ "path",
1909
+ {
1910
+ fillRule: "evenodd",
1911
+ clipRule: "evenodd",
1912
+ d: "M10.938 3.175a.674.674 0 0 1 1.138-.488l6.526 6.215c.574.547.554 1.47-.043 1.991l-6.505 5.676a.674.674 0 0 1-1.116-.508V13.49s-6.985-1.258-9.225 2.854c-.209.384-1.023.518-.857-1.395.692-3.52 2.106-9.017 10.082-9.017z"
1913
+ }
1914
+ ) });
1915
+ var PlusIcon = (p) => /* @__PURE__ */ jsx(Icon, { viewBox: "0 0 48 48", ...p, children: /* @__PURE__ */ jsx("path", { d: "M26 7a1 1 0 0 0-1-1h-2a1 1 0 0 0-1 1v15H7a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h15v15a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1V26h15a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1H26V7Z" }) });
1916
+ var DASH = "\u2011\u2011\u2011";
1917
+ function commercialLabel(settings) {
1918
+ if (settings?.brand_content_toggle) {
1919
+ return "Paid partnership";
1920
+ }
1921
+ if (settings?.brand_organic_toggle) {
1922
+ return "Promotional content";
1923
+ }
1924
+ return null;
1925
+ }
1926
+ function TikTokPostPreviewImpl({
1927
+ variant,
1928
+ creatorInfo,
1929
+ media,
1930
+ className,
1931
+ style
1932
+ }) {
1933
+ const resolvedMedia = useResolvedMedia(
1934
+ media,
1935
+ variant.media,
1936
+ altSignatureOf(variant.media)
1937
+ );
1938
+ const { creator } = creatorInfo;
1939
+ const handle = creator.username || creator.nickname;
1940
+ const label = commercialLabel(variant.settings);
1941
+ const isAigc = Boolean(variant.settings?.is_aigc);
1942
+ const pending = (media?.length ?? 0) > 0 && resolvedMedia.length === 0;
1943
+ return /* @__PURE__ */ jsxs("div", { className, style: { ...cardStyle, ...style }, children: [
1944
+ /* @__PURE__ */ jsx("style", { children: KEYFRAMES }),
1945
+ /* @__PURE__ */ jsx(Media2, { media: resolvedMedia, pending }),
1946
+ /* @__PURE__ */ jsx("div", { style: scrimStyle }),
1947
+ /* @__PURE__ */ jsxs("div", { style: infoStyle, children: [
1948
+ /* @__PURE__ */ jsx("div", { style: usernameStyle, children: handle }),
1949
+ variant.body ? /* @__PURE__ */ jsx(Caption, { body: variant.body }) : null,
1950
+ label || isAigc ? /* @__PURE__ */ jsxs("div", { style: labelsStyle, children: [
1951
+ label ? /* @__PURE__ */ jsx("span", { style: pillStyle, children: label }) : null,
1952
+ isAigc ? /* @__PURE__ */ jsx("span", { style: pillStyle, children: "Creator labeled as AI-generated" }) : null
1953
+ ] }) : null,
1954
+ /* @__PURE__ */ jsxs("div", { style: musicRowStyle, children: [
1955
+ /* @__PURE__ */ jsx(IoMusicalNotes, { size: 13 }),
1956
+ /* @__PURE__ */ jsxs("span", { children: [
1957
+ "Original sound - ",
1958
+ creator.nickname
1959
+ ] })
1960
+ ] })
1961
+ ] }),
1962
+ /* @__PURE__ */ jsxs("div", { style: railStyle, children: [
1963
+ /* @__PURE__ */ jsxs("div", { style: avatarWrapStyle, children: [
1964
+ /* @__PURE__ */ jsx(Avatar, { url: creator.avatar_url, name: creator.nickname }),
1965
+ /* @__PURE__ */ jsx("span", { style: followBadgeStyle, children: /* @__PURE__ */ jsx(PlusIcon, { size: 14 }) })
1966
+ ] }),
1967
+ /* @__PURE__ */ jsx(RailAction, { icon: /* @__PURE__ */ jsx(HeartIcon, { size: 30 }), count: DASH }),
1968
+ /* @__PURE__ */ jsx(RailAction, { icon: /* @__PURE__ */ jsx(CommentIcon, { size: 30 }), count: DASH }),
1969
+ /* @__PURE__ */ jsx(RailAction, { icon: /* @__PURE__ */ jsx(BookmarkIcon, { size: 28 }), count: DASH }),
1970
+ /* @__PURE__ */ jsx(RailAction, { icon: /* @__PURE__ */ jsx(ShareIcon, { size: 28 }), count: DASH }),
1971
+ /* @__PURE__ */ jsx(Disc, { url: creator.avatar_url })
1972
+ ] })
1973
+ ] });
1974
+ }
1975
+ function RailAction({ icon, count }) {
1976
+ return /* @__PURE__ */ jsxs("div", { style: railActionStyle, children: [
1977
+ /* @__PURE__ */ jsx("span", { style: railIconStyle, children: icon }),
1978
+ /* @__PURE__ */ jsx("span", { style: railCountStyle, children: count })
1979
+ ] });
1980
+ }
1981
+ function Avatar({ url, name }) {
1982
+ if (url) {
1983
+ return /* @__PURE__ */ jsx("img", { src: url, alt: name, style: avatarStyle });
1984
+ }
1985
+ return /* @__PURE__ */ jsx("div", { style: { ...avatarStyle, ...avatarFallbackStyle }, children: name.slice(0, 1).toUpperCase() });
1986
+ }
1987
+ function Disc({ url }) {
1988
+ return /* @__PURE__ */ jsx("div", { style: discStyle, children: url ? /* @__PURE__ */ jsx("img", { src: url, alt: "", style: discImgStyle }) : null });
1989
+ }
1990
+ var cardStyle = {
1991
+ position: "relative",
1992
+ width: "100%",
1993
+ maxWidth: 320,
1994
+ aspectRatio: "9 / 16",
1995
+ borderRadius: 16,
1996
+ overflow: "hidden",
1997
+ background: "#000",
1998
+ color: "#fff",
1999
+ fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif'
2000
+ };
2001
+ var scrimStyle = {
2002
+ position: "absolute",
2003
+ inset: 0,
2004
+ background: "linear-gradient(180deg, rgba(0,0,0,0) 55%, rgba(0,0,0,0.55) 100%)",
2005
+ pointerEvents: "none"
2006
+ };
2007
+ var infoStyle = {
2008
+ position: "absolute",
2009
+ left: 14,
2010
+ right: 70,
2011
+ bottom: 14,
2012
+ display: "flex",
2013
+ flexDirection: "column",
2014
+ gap: 6,
2015
+ textShadow: "0 1px 3px rgba(0,0,0,0.5)"
2016
+ };
2017
+ var usernameStyle = {
2018
+ fontWeight: 600,
2019
+ fontSize: 16
2020
+ };
2021
+ var labelsStyle = {
2022
+ display: "flex",
2023
+ flexDirection: "column",
2024
+ alignItems: "flex-start",
2025
+ gap: 4,
2026
+ marginTop: 2
2027
+ };
2028
+ var pillStyle = {
2029
+ display: "inline-flex",
2030
+ alignItems: "center",
2031
+ background: "rgba(255,255,255,0.18)",
2032
+ color: "#fff",
2033
+ fontSize: 11,
2034
+ fontWeight: 500,
2035
+ padding: "2px 7px",
2036
+ borderRadius: 4
2037
+ };
2038
+ var musicRowStyle = {
2039
+ display: "flex",
2040
+ alignItems: "center",
2041
+ gap: 6,
2042
+ fontSize: 13,
2043
+ marginTop: 4
2044
+ };
2045
+ var railStyle = {
2046
+ position: "absolute",
2047
+ right: 8,
2048
+ bottom: 14,
2049
+ display: "flex",
2050
+ flexDirection: "column",
2051
+ alignItems: "center",
2052
+ gap: 16,
2053
+ color: "#fff"
2054
+ };
2055
+ var avatarWrapStyle = {
2056
+ position: "relative",
2057
+ marginBottom: 8
2058
+ };
2059
+ var avatarStyle = {
2060
+ width: 46,
2061
+ height: 46,
2062
+ borderRadius: "50%",
2063
+ objectFit: "cover",
2064
+ display: "block",
2065
+ border: "1px solid rgba(255,255,255,0.2)"
2066
+ };
2067
+ var avatarFallbackStyle = {
2068
+ display: "grid",
2069
+ placeItems: "center",
2070
+ background: "#3a3a40",
2071
+ color: "#fff",
2072
+ fontSize: 18,
2073
+ fontWeight: 700
2074
+ };
2075
+ var followBadgeStyle = {
2076
+ position: "absolute",
2077
+ bottom: -9,
2078
+ left: "50%",
2079
+ transform: "translateX(-50%)",
2080
+ width: 19,
2081
+ height: 19,
2082
+ borderRadius: "50%",
2083
+ background: "#fe2c55",
2084
+ color: "#fff",
2085
+ display: "grid",
2086
+ placeItems: "center"
2087
+ };
2088
+ var railActionStyle = {
2089
+ display: "flex",
2090
+ flexDirection: "column",
2091
+ alignItems: "center",
2092
+ gap: 3
2093
+ };
2094
+ var railIconStyle = {
2095
+ display: "grid",
2096
+ placeItems: "center",
2097
+ filter: "drop-shadow(0 1px 2px rgba(0,0,0,0.4))"
2098
+ };
2099
+ var railCountStyle = {
2100
+ fontSize: 12,
2101
+ fontWeight: 600,
2102
+ textShadow: "0 1px 2px rgba(0,0,0,0.4)"
2103
+ };
2104
+ var discStyle = {
2105
+ width: 44,
2106
+ height: 44,
2107
+ borderRadius: "50%",
2108
+ background: "radial-gradient(circle, #555 0 36%, #111 37% 100%)",
2109
+ display: "grid",
2110
+ placeItems: "center",
2111
+ marginTop: 2,
2112
+ animation: "pr-tt-spin 4s linear infinite"
2113
+ };
2114
+ var discImgStyle = {
2115
+ width: 22,
2116
+ height: 22,
2117
+ borderRadius: "50%",
2118
+ objectFit: "cover"
2119
+ };
2120
+ var KEYFRAMES = `@keyframes pr-tt-spin{from{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes pr-tt-shimmer{0%{background-position:-200% 0}100%{background-position:200% 0}}`;
2121
+ var TikTokPostPreview = memo(TikTokPostPreviewImpl);
2122
+ var TT_VAR = {
2123
+ text: "--pr-tt-text",
2124
+ muted: "--pr-tt-muted",
2125
+ border: "--pr-tt-border",
2126
+ accent: "--pr-tt-accent",
2127
+ switchOff: "--pr-tt-switch-off"
2128
+ };
2129
+ var LIGHT2 = {
2130
+ text: "rgba(0,0,0,0.9)",
2131
+ muted: "rgba(0,0,0,0.55)",
2132
+ border: "rgba(0,0,0,0.12)",
2133
+ accent: "#fe2c55",
2134
+ switchOff: "rgba(0,0,0,0.18)"
2135
+ };
2136
+ var DARK2 = {
2137
+ text: "rgba(255,255,255,0.92)",
2138
+ muted: "#8a8a92",
2139
+ border: "rgba(255,255,255,0.14)",
2140
+ accent: "#fe2c55",
2141
+ switchOff: "rgba(255,255,255,0.22)"
2142
+ };
2143
+ function varRef2(name) {
2144
+ return `var(${name})`;
2145
+ }
2146
+ function paletteVars2(dark) {
2147
+ const p = dark ? DARK2 : LIGHT2;
2148
+ return {
2149
+ [TT_VAR.text]: p.text,
2150
+ [TT_VAR.muted]: p.muted,
2151
+ [TT_VAR.border]: p.border,
2152
+ [TT_VAR.accent]: p.accent,
2153
+ [TT_VAR.switchOff]: p.switchOff
2154
+ };
2155
+ }
2156
+ function usePrefersDark2() {
2157
+ const [dark, setDark] = useState(false);
2158
+ useEffect(() => {
2159
+ if (typeof window === "undefined" || !window.matchMedia) {
2160
+ return;
2161
+ }
2162
+ const mq = window.matchMedia("(prefers-color-scheme: dark)");
2163
+ setDark(mq.matches);
2164
+ const onChange = (event) => setDark(event.matches);
2165
+ mq.addEventListener("change", onChange);
2166
+ return () => mq.removeEventListener("change", onChange);
2167
+ }, []);
2168
+ return dark;
2169
+ }
2170
+ function useIsDark2(theme) {
2171
+ const prefersDark = usePrefersDark2();
2172
+ if (theme === "auto") {
2173
+ return prefersDark;
2174
+ }
2175
+ return theme === "dark";
2176
+ }
2177
+ var MUTED = varRef2(TT_VAR.muted);
2178
+ var BORDER = varRef2(TT_VAR.border);
2179
+ var ACCENT = varRef2(TT_VAR.accent);
2180
+ var SWITCH_OFF = varRef2(TT_VAR.switchOff);
2181
+ var ON = "#34c759";
2182
+ function Row({
2183
+ label,
2184
+ sublabel,
2185
+ control,
2186
+ htmlFor
2187
+ }) {
2188
+ return /* @__PURE__ */ jsxs("div", { style: rowStyle, children: [
2189
+ /* @__PURE__ */ jsxs("label", { htmlFor, style: { display: "flex", flexDirection: "column", gap: 2 }, children: [
2190
+ /* @__PURE__ */ jsx("span", { style: { fontSize: 14 }, children: label }),
2191
+ sublabel ? /* @__PURE__ */ jsx("span", { style: { fontSize: 12, color: MUTED }, children: sublabel }) : null
2192
+ ] }),
2193
+ control
2194
+ ] });
2195
+ }
2196
+ function Switch({
2197
+ checked,
2198
+ onChange,
2199
+ disabled,
2200
+ id,
2201
+ ariaLabel
2202
+ }) {
2203
+ return /* @__PURE__ */ jsx(
2204
+ "button",
2205
+ {
2206
+ type: "button",
2207
+ role: "switch",
2208
+ id,
2209
+ "aria-label": ariaLabel,
2210
+ "aria-checked": checked,
2211
+ disabled,
2212
+ onClick: () => onChange(!checked),
2213
+ style: {
2214
+ ...switchTrackStyle,
2215
+ background: checked ? ON : SWITCH_OFF,
2216
+ opacity: disabled ? 0.4 : 1,
2217
+ cursor: disabled ? "not-allowed" : "pointer"
2218
+ },
2219
+ children: /* @__PURE__ */ jsx(
2220
+ "span",
2221
+ {
2222
+ style: {
2223
+ ...switchKnobStyle,
2224
+ transform: checked ? "translateX(16px)" : "translateX(0)"
2225
+ }
2226
+ }
2227
+ )
2228
+ }
2229
+ );
2230
+ }
2231
+ function SectionLabel({ children }) {
2232
+ return /* @__PURE__ */ jsx("div", { style: sectionLabelStyle, children });
2233
+ }
2234
+ function Hint({ children }) {
2235
+ return /* @__PURE__ */ jsx("p", { style: hintStyle, children });
2236
+ }
2237
+ function Notice({ children }) {
2238
+ return /* @__PURE__ */ jsx("p", { style: noticeStyle, children });
2239
+ }
2240
+ function CheckRow({
2241
+ label,
2242
+ checked,
2243
+ onChange
2244
+ }) {
2245
+ const id = useId();
2246
+ return /* @__PURE__ */ jsxs("label", { htmlFor: id, style: checkRowStyle, children: [
2247
+ /* @__PURE__ */ jsx(
2248
+ "input",
2249
+ {
2250
+ id,
2251
+ type: "checkbox",
2252
+ checked,
2253
+ onChange: (e) => onChange(e.target.checked),
2254
+ style: { accentColor: ACCENT, width: 16, height: 16 }
2255
+ }
2256
+ ),
2257
+ /* @__PURE__ */ jsx("span", { style: { fontSize: 14 }, children: label })
2258
+ ] });
2259
+ }
2260
+ var rowStyle = {
2261
+ display: "flex",
2262
+ alignItems: "center",
2263
+ justifyContent: "space-between",
2264
+ gap: 12,
2265
+ minHeight: 36
2266
+ };
2267
+ var switchTrackStyle = {
2268
+ position: "relative",
2269
+ width: 40,
2270
+ height: 24,
2271
+ borderRadius: 999,
2272
+ border: 0,
2273
+ padding: 2,
2274
+ flex: "0 0 auto",
2275
+ transition: "background 160ms ease"
2276
+ };
2277
+ var switchKnobStyle = {
2278
+ display: "block",
2279
+ width: 20,
2280
+ height: 20,
2281
+ borderRadius: "50%",
2282
+ background: "#fff",
2283
+ boxShadow: "0 1px 2px rgba(0,0,0,0.3)",
2284
+ transition: "transform 160ms ease"
2285
+ };
2286
+ var sectionLabelStyle = {
2287
+ fontSize: 13,
2288
+ fontWeight: 600
2289
+ };
2290
+ var hintStyle = {
2291
+ margin: 0,
2292
+ fontSize: 12,
2293
+ color: ACCENT,
2294
+ lineHeight: 1.4
2295
+ };
2296
+ var noticeStyle = {
2297
+ margin: 0,
2298
+ fontSize: 12,
2299
+ color: MUTED,
2300
+ lineHeight: 1.4
2301
+ };
2302
+ var checkRowStyle = {
2303
+ display: "flex",
2304
+ alignItems: "center",
2305
+ gap: 10,
2306
+ cursor: "pointer"
2307
+ };
2308
+ var TOKENS = { MUTED, BORDER, ACCENT};
2309
+ function AudienceSelect({
2310
+ creatorInfo,
2311
+ value,
2312
+ onChange
2313
+ }) {
2314
+ const id = useId();
2315
+ const options = audiencePrivacyOptions(creatorInfo.privacy_options, value);
2316
+ const unselected = audienceUnselected(value);
2317
+ return /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "column", gap: 8 }, children: [
2318
+ /* @__PURE__ */ jsx(SectionLabel, { children: "Who can view this post" }),
2319
+ /* @__PURE__ */ jsxs(
2320
+ "select",
2321
+ {
2322
+ id,
2323
+ value: value.privacy_level ?? "",
2324
+ onChange: (e) => onChange({
2325
+ ...value,
2326
+ // Validate against the OFFERED (filtered) options, not the full set —
2327
+ // so a manipulated value (e.g. SELF_ONLY while branded) can't slip in.
2328
+ privacy_level: parsePrivacyLevel(e.target.value, options)
2329
+ }),
2330
+ style: selectStyle,
2331
+ children: [
2332
+ /* @__PURE__ */ jsx("option", { value: "", disabled: true, children: "Select who can view this post" }),
2333
+ options.map((level) => /* @__PURE__ */ jsx("option", { value: level, children: tiktokPrivacyLabel(level) }, level))
2334
+ ]
2335
+ }
2336
+ ),
2337
+ unselected ? /* @__PURE__ */ jsx(Hint, { children: TIKTOK_AUDIENCE_REQUIRED_HINT }) : null
2338
+ ] });
2339
+ }
2340
+ var selectStyle = {
2341
+ width: "100%",
2342
+ appearance: "none",
2343
+ background: "transparent",
2344
+ color: "inherit",
2345
+ border: `1px solid ${TOKENS.BORDER}`,
2346
+ borderRadius: 10,
2347
+ padding: "10px 12px",
2348
+ fontSize: 14,
2349
+ fontFamily: "inherit",
2350
+ outline: "none",
2351
+ cursor: "pointer"
2352
+ };
2353
+ function TikTokCaptionField({
2354
+ value,
2355
+ onChange,
2356
+ postType,
2357
+ placeholder = "Describe your post\u2026",
2358
+ className,
2359
+ style
2360
+ }) {
2361
+ const id = useId();
2362
+ const max = captionMaxFor(postType);
2363
+ const count = value.length;
2364
+ const over = count > max;
2365
+ return /* @__PURE__ */ jsxs("div", { className, style: { ...wrapStyle2, ...style }, children: [
2366
+ /* @__PURE__ */ jsxs("div", { style: labelRowStyle, children: [
2367
+ /* @__PURE__ */ jsx("label", { htmlFor: id, style: labelStyle, children: "Caption" }),
2368
+ /* @__PURE__ */ jsxs(
2369
+ "span",
2370
+ {
2371
+ style: {
2372
+ ...countStyle,
2373
+ color: over ? varRef2(TT_VAR.accent) : varRef2(TT_VAR.muted)
2374
+ },
2375
+ children: [
2376
+ count.toLocaleString(),
2377
+ " / ",
2378
+ max.toLocaleString()
2379
+ ]
2380
+ }
2381
+ )
2382
+ ] }),
2383
+ /* @__PURE__ */ jsx(
2384
+ "textarea",
2385
+ {
2386
+ id,
2387
+ value,
2388
+ onChange: (e) => onChange(e.target.value),
2389
+ placeholder,
2390
+ rows: 4,
2391
+ style: {
2392
+ ...textareaStyle,
2393
+ borderColor: over ? varRef2(TT_VAR.accent) : varRef2(TT_VAR.border)
2394
+ }
2395
+ }
2396
+ )
2397
+ ] });
2398
+ }
2399
+ var wrapStyle2 = {
2400
+ display: "flex",
2401
+ flexDirection: "column",
2402
+ gap: 6,
2403
+ fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif'
2404
+ };
2405
+ var labelRowStyle = {
2406
+ display: "flex",
2407
+ alignItems: "baseline",
2408
+ justifyContent: "space-between"
2409
+ };
2410
+ var labelStyle = {
2411
+ fontSize: 13,
2412
+ fontWeight: 600,
2413
+ color: "inherit"
2414
+ };
2415
+ var countStyle = {
2416
+ fontSize: 12,
2417
+ fontVariantNumeric: "tabular-nums"
2418
+ };
2419
+ var textareaStyle = {
2420
+ width: "100%",
2421
+ resize: "vertical",
2422
+ background: "transparent",
2423
+ color: "inherit",
2424
+ border: "1px solid rgba(255,255,255,0.14)",
2425
+ borderRadius: 10,
2426
+ padding: "10px 12px",
2427
+ fontSize: 14,
2428
+ lineHeight: 1.4,
2429
+ fontFamily: "inherit",
2430
+ outline: "none",
2431
+ boxSizing: "border-box"
2432
+ };
2433
+ function CommercialDisclosure({
2434
+ value,
2435
+ onChange
2436
+ }) {
2437
+ const labelNotice = commercialLabelNotice(value);
2438
+ const incomplete = commercialDisclosureIncomplete(value);
2439
+ return /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "column", gap: 8 }, children: [
2440
+ /* @__PURE__ */ jsx(SectionLabel, { children: "Disclose post content" }),
2441
+ /* @__PURE__ */ jsx(
2442
+ Row,
2443
+ {
2444
+ label: "Disclose commercial content",
2445
+ sublabel: "Turn on if this post promotes a brand, product, or service.",
2446
+ control: /* @__PURE__ */ jsx(
2447
+ Switch,
2448
+ {
2449
+ checked: value.commercial_disclosure,
2450
+ ariaLabel: "Disclose commercial content",
2451
+ onChange: (next) => onChange(setCommercialDisclosure(value, next))
2452
+ }
2453
+ )
2454
+ }
2455
+ ),
2456
+ value.commercial_disclosure ? /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "column", gap: 8, paddingLeft: 2 }, children: [
2457
+ /* @__PURE__ */ jsx(
2458
+ CheckRow,
2459
+ {
2460
+ label: "Your brand",
2461
+ checked: value.your_brand,
2462
+ onChange: (next) => onChange(setBrandKind(value, "your_brand", next))
2463
+ }
2464
+ ),
2465
+ /* @__PURE__ */ jsx(
2466
+ CheckRow,
2467
+ {
2468
+ label: "Branded content",
2469
+ checked: value.branded_content,
2470
+ onChange: (next) => onChange(setBrandKind(value, "branded_content", next))
2471
+ }
2472
+ ),
2473
+ incomplete ? /* @__PURE__ */ jsx(Hint, { children: TIKTOK_DISCLOSURE_REQUIRED_HINT }) : null,
2474
+ labelNotice ? /* @__PURE__ */ jsx(Notice, { children: labelNotice }) : null
2475
+ ] }) : null
2476
+ ] });
2477
+ }
2478
+ function Declaration({ brandedContent }) {
2479
+ return /* @__PURE__ */ jsxs("p", { style: declarationStyle, children: [
2480
+ "By posting, you agree to TikTok's",
2481
+ " ",
2482
+ brandedContent ? /* @__PURE__ */ jsxs(Fragment, { children: [
2483
+ /* @__PURE__ */ jsx(DeclarationLink, { href: TIKTOK_BRANDED_CONTENT_POLICY_URL, children: "Branded Content Policy" }),
2484
+ " ",
2485
+ "and",
2486
+ " "
2487
+ ] }) : null,
2488
+ /* @__PURE__ */ jsx(DeclarationLink, { href: TIKTOK_MUSIC_CONFIRMATION_URL, children: "Music Usage Confirmation" }),
2489
+ "."
2490
+ ] });
2491
+ }
2492
+ function DeclarationLink({ href, children }) {
2493
+ return /* @__PURE__ */ jsx("a", { href, target: "_blank", rel: "noreferrer", style: linkStyle2, children });
2494
+ }
2495
+ var declarationStyle = {
2496
+ margin: 0,
2497
+ fontSize: 12,
2498
+ color: TOKENS.MUTED,
2499
+ lineHeight: 1.45
2500
+ };
2501
+ var linkStyle2 = {
2502
+ color: "inherit",
2503
+ textDecoration: "underline"
2504
+ };
2505
+ function InteractionToggles({
2506
+ creatorInfo,
2507
+ value,
2508
+ onChange,
2509
+ isVideo
2510
+ }) {
2511
+ const rows = interactionRows(creatorInfo, isVideo);
2512
+ return /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "column", gap: 8 }, children: [
2513
+ /* @__PURE__ */ jsx(SectionLabel, { children: "Allow users to" }),
2514
+ rows.map((row) => {
2515
+ const on = Boolean(value[interactionValueKey(row.key)]);
2516
+ return /* @__PURE__ */ jsx(
2517
+ Row,
2518
+ {
2519
+ label: row.label,
2520
+ sublabel: row.disabled ? "Turned off by this creator" : void 0,
2521
+ control: /* @__PURE__ */ jsx(
2522
+ Switch,
2523
+ {
2524
+ checked: !row.disabled && on,
2525
+ disabled: row.disabled,
2526
+ ariaLabel: `Allow ${row.label}`,
2527
+ onChange: (next) => onChange(toggleInteraction(value, row.key, next))
2528
+ }
2529
+ )
2530
+ },
2531
+ row.key
2532
+ );
2533
+ })
2534
+ ] });
2535
+ }
2536
+ function mediaCountValid(postType, count) {
2537
+ if (postType === "carousel") {
2538
+ return count >= 2 && count <= 35;
2539
+ }
2540
+ return count === 1;
2541
+ }
2542
+ function TikTokPublishPanel({
2543
+ variant,
2544
+ creatorInfo,
2545
+ caption,
2546
+ onCaptionChange,
2547
+ options,
2548
+ onOptionsChange,
2549
+ onPost,
2550
+ posting = false,
2551
+ theme = "auto",
2552
+ className,
2553
+ style
2554
+ }) {
2555
+ const dark = useIsDark2(theme);
2556
+ const isVideo = variant.post_type === "video";
2557
+ const captionOver = caption.length > captionMaxFor(variant.post_type);
2558
+ const mediaOk = mediaCountValid(variant.post_type, variant.media?.length ?? 0);
2559
+ const ready = !captionOver && mediaOk && tiktokOptionsReady(options);
2560
+ return /* @__PURE__ */ jsxs(
2561
+ "div",
2562
+ {
2563
+ className,
2564
+ style: {
2565
+ ...paletteVars2(dark),
2566
+ ...panelStyle,
2567
+ color: varRef2(TT_VAR.text),
2568
+ ...style
2569
+ },
2570
+ children: [
2571
+ /* @__PURE__ */ jsx(
2572
+ TikTokCaptionField,
2573
+ {
2574
+ value: caption,
2575
+ onChange: onCaptionChange,
2576
+ postType: variant.post_type
2577
+ }
2578
+ ),
2579
+ /* @__PURE__ */ jsx(Divider, {}),
2580
+ /* @__PURE__ */ jsx(AudienceSelect, { creatorInfo, value: options, onChange: onOptionsChange }),
2581
+ /* @__PURE__ */ jsx(Divider, {}),
2582
+ /* @__PURE__ */ jsx(
2583
+ InteractionToggles,
2584
+ {
2585
+ creatorInfo,
2586
+ value: options,
2587
+ onChange: onOptionsChange,
2588
+ isVideo
2589
+ }
2590
+ ),
2591
+ /* @__PURE__ */ jsx(Divider, {}),
2592
+ /* @__PURE__ */ jsx(CommercialDisclosure, { value: options, onChange: onOptionsChange }),
2593
+ isVideo ? /* @__PURE__ */ jsxs(Fragment, { children: [
2594
+ /* @__PURE__ */ jsx(Divider, {}),
2595
+ /* @__PURE__ */ jsx(
2596
+ Row,
2597
+ {
2598
+ label: "AI-generated content",
2599
+ sublabel: "Disclose if this video was created or substantially edited with AI.",
2600
+ control: /* @__PURE__ */ jsx(
2601
+ Switch,
2602
+ {
2603
+ checked: options.aigc,
2604
+ ariaLabel: "AI-generated content",
2605
+ onChange: (next) => onOptionsChange({ ...options, aigc: next })
2606
+ }
2607
+ )
2608
+ }
2609
+ )
2610
+ ] }) : null,
2611
+ /* @__PURE__ */ jsx(Divider, {}),
2612
+ /* @__PURE__ */ jsx(Notice, { children: TIKTOK_PROCESSING_NOTICE }),
2613
+ /* @__PURE__ */ jsx(Declaration, { brandedContent: brandedContentDeclared(options) }),
2614
+ /* @__PURE__ */ jsx(
2615
+ "button",
2616
+ {
2617
+ type: "button",
2618
+ disabled: !ready || posting,
2619
+ onClick: onPost,
2620
+ style: {
2621
+ ...postButtonStyle,
2622
+ opacity: !ready || posting ? 0.5 : 1,
2623
+ cursor: !ready || posting ? "not-allowed" : "pointer"
2624
+ },
2625
+ children: posting ? "Posting\u2026" : "Post"
2626
+ }
2627
+ )
2628
+ ]
2629
+ }
2630
+ );
2631
+ }
2632
+ function Divider() {
2633
+ return /* @__PURE__ */ jsx("div", { style: dividerStyle });
2634
+ }
2635
+ var panelStyle = {
2636
+ display: "flex",
2637
+ flexDirection: "column",
2638
+ gap: 16,
2639
+ width: "100%",
2640
+ fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif'
2641
+ };
2642
+ var dividerStyle = {
2643
+ height: 1,
2644
+ background: TOKENS.BORDER
2645
+ };
2646
+ var postButtonStyle = {
2647
+ width: "100%",
2648
+ border: 0,
2649
+ borderRadius: 10,
2650
+ background: TOKENS.ACCENT,
2651
+ color: "#fff",
2652
+ fontSize: 15,
2653
+ fontWeight: 600,
2654
+ padding: "12px 16px",
2655
+ transition: "opacity 160ms ease"
2656
+ };
1689
2657
 
1690
- export { Connect, LinkedInPostPreview, PostrunProvider, UploadError, XPostPreview, connectionKeys, mediaKeys, postKeys, profileKeys, tiktokKeys, useCalendar, useConnect, useConnection, useConnections, useCreatePost, useCreateProfile, useDeleteMedia, useDeletePost, useDeleteProfile, useDisconnect, useDiscoverableAccounts, useInfiniteList, useMedia, useMediaInfinite, useMediaList, useMediaUpload, usePost, usePostrun, usePosts, usePostsInfinite, useProfile, useProfiles, useProfilesInfinite, useSelectAccount, useTikTokCreatorInfo, useUpdateMedia, useUpdatePost, useUpdateProfile, useValidatePost };
2658
+ export { AudienceSelect, CommercialDisclosure, Connect, Declaration, InteractionToggles, LinkedInPostPreview, PostrunProvider, TikTokCaptionField, TikTokPostPreview, TikTokPublishPanel, UploadError, XPostPreview, connectionKeys, mediaKeys, postKeys, profileKeys, tiktokKeys, useCalendar, useConnect, useConnection, useConnections, useCreatePost, useCreateProfile, useDeleteMedia, useDeletePost, useDeleteProfile, useDisconnect, useDiscoverableAccounts, useInfiniteList, useMedia, useMediaInfinite, useMediaList, useMediaUpload, usePost, usePostrun, usePosts, usePostsInfinite, useProfile, useProfiles, useProfilesInfinite, useSelectAccount, useTikTokCreatorInfo, useUpdateMedia, useUpdatePost, useUpdateProfile, useValidatePost };
1691
2659
  //# sourceMappingURL=index.js.map
1692
2660
  //# sourceMappingURL=index.js.map