@braintwopoint0/playback-commons 0.1.13 → 0.1.15
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/auth/index.js +7 -1
- package/dist/auth/index.js.map +1 -1
- package/dist/supabase/index.js +7 -1
- package/dist/supabase/index.js.map +1 -1
- package/dist/ui/index.d.ts +208 -1
- package/dist/ui/index.js +687 -17
- package/dist/ui/index.js.map +1 -1
- package/package.json +8 -1
package/dist/ui/index.js
CHANGED
|
@@ -1675,15 +1675,640 @@ function getPayloadConfigFromPayload(config, payload, key) {
|
|
|
1675
1675
|
return configLabelKey in config ? config[configLabelKey] : config[key];
|
|
1676
1676
|
}
|
|
1677
1677
|
|
|
1678
|
+
// src/ui/skeleton.tsx
|
|
1679
|
+
import { jsx as jsx18 } from "react/jsx-runtime";
|
|
1680
|
+
function Skeleton({ className, ...props }) {
|
|
1681
|
+
return /* @__PURE__ */ jsx18("div", { className: cn("animate-pulse rounded-md bg-muted", className), ...props });
|
|
1682
|
+
}
|
|
1683
|
+
|
|
1684
|
+
// src/ui/separator.tsx
|
|
1685
|
+
import * as React16 from "react";
|
|
1686
|
+
import * as SeparatorPrimitive from "@radix-ui/react-separator";
|
|
1687
|
+
import { jsx as jsx19 } from "react/jsx-runtime";
|
|
1688
|
+
var Separator2 = React16.forwardRef(({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ jsx19(
|
|
1689
|
+
SeparatorPrimitive.Root,
|
|
1690
|
+
{
|
|
1691
|
+
ref,
|
|
1692
|
+
decorative,
|
|
1693
|
+
orientation,
|
|
1694
|
+
className: cn(
|
|
1695
|
+
"shrink-0 bg-border",
|
|
1696
|
+
orientation === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]",
|
|
1697
|
+
className
|
|
1698
|
+
),
|
|
1699
|
+
...props
|
|
1700
|
+
}
|
|
1701
|
+
));
|
|
1702
|
+
Separator2.displayName = SeparatorPrimitive.Root.displayName;
|
|
1703
|
+
|
|
1704
|
+
// src/ui/tabs.tsx
|
|
1705
|
+
import * as React17 from "react";
|
|
1706
|
+
import * as TabsPrimitive from "@radix-ui/react-tabs";
|
|
1707
|
+
import { jsx as jsx20 } from "react/jsx-runtime";
|
|
1708
|
+
var Tabs = TabsPrimitive.Root;
|
|
1709
|
+
var TabsList = React17.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx20(
|
|
1710
|
+
TabsPrimitive.List,
|
|
1711
|
+
{
|
|
1712
|
+
ref,
|
|
1713
|
+
className: cn(
|
|
1714
|
+
"inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground",
|
|
1715
|
+
className
|
|
1716
|
+
),
|
|
1717
|
+
...props
|
|
1718
|
+
}
|
|
1719
|
+
));
|
|
1720
|
+
TabsList.displayName = TabsPrimitive.List.displayName;
|
|
1721
|
+
var TabsTrigger = React17.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx20(
|
|
1722
|
+
TabsPrimitive.Trigger,
|
|
1723
|
+
{
|
|
1724
|
+
ref,
|
|
1725
|
+
className: cn(
|
|
1726
|
+
"inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm",
|
|
1727
|
+
className
|
|
1728
|
+
),
|
|
1729
|
+
...props
|
|
1730
|
+
}
|
|
1731
|
+
));
|
|
1732
|
+
TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
|
|
1733
|
+
var TabsContent = React17.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx20(
|
|
1734
|
+
TabsPrimitive.Content,
|
|
1735
|
+
{
|
|
1736
|
+
ref,
|
|
1737
|
+
className: cn(
|
|
1738
|
+
"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
|
|
1739
|
+
className
|
|
1740
|
+
),
|
|
1741
|
+
...props
|
|
1742
|
+
}
|
|
1743
|
+
));
|
|
1744
|
+
TabsContent.displayName = TabsPrimitive.Content.displayName;
|
|
1745
|
+
|
|
1746
|
+
// src/ui/checkbox.tsx
|
|
1747
|
+
import * as React18 from "react";
|
|
1748
|
+
import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
|
|
1749
|
+
import { jsx as jsx21 } from "react/jsx-runtime";
|
|
1750
|
+
var Checkbox = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx21(
|
|
1751
|
+
CheckboxPrimitive.Root,
|
|
1752
|
+
{
|
|
1753
|
+
ref,
|
|
1754
|
+
className: cn(
|
|
1755
|
+
"peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",
|
|
1756
|
+
className
|
|
1757
|
+
),
|
|
1758
|
+
...props,
|
|
1759
|
+
children: /* @__PURE__ */ jsx21(CheckboxPrimitive.Indicator, { className: cn("flex items-center justify-center text-current"), children: /* @__PURE__ */ jsx21(
|
|
1760
|
+
"svg",
|
|
1761
|
+
{
|
|
1762
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
1763
|
+
viewBox: "0 0 24 24",
|
|
1764
|
+
fill: "none",
|
|
1765
|
+
stroke: "currentColor",
|
|
1766
|
+
strokeWidth: "3",
|
|
1767
|
+
strokeLinecap: "round",
|
|
1768
|
+
strokeLinejoin: "round",
|
|
1769
|
+
className: "h-3.5 w-3.5",
|
|
1770
|
+
children: /* @__PURE__ */ jsx21("polyline", { points: "20 6 9 17 4 12" })
|
|
1771
|
+
}
|
|
1772
|
+
) })
|
|
1773
|
+
}
|
|
1774
|
+
));
|
|
1775
|
+
Checkbox.displayName = CheckboxPrimitive.Root.displayName;
|
|
1776
|
+
|
|
1777
|
+
// src/ui/switch.tsx
|
|
1778
|
+
import * as React19 from "react";
|
|
1779
|
+
import * as SwitchPrimitives from "@radix-ui/react-switch";
|
|
1780
|
+
import { jsx as jsx22 } from "react/jsx-runtime";
|
|
1781
|
+
var Switch = React19.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx22(
|
|
1782
|
+
SwitchPrimitives.Root,
|
|
1783
|
+
{
|
|
1784
|
+
className: cn(
|
|
1785
|
+
"peer inline-flex h-[24px] w-[44px] shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",
|
|
1786
|
+
className
|
|
1787
|
+
),
|
|
1788
|
+
...props,
|
|
1789
|
+
ref,
|
|
1790
|
+
children: /* @__PURE__ */ jsx22(
|
|
1791
|
+
SwitchPrimitives.Thumb,
|
|
1792
|
+
{
|
|
1793
|
+
className: cn(
|
|
1794
|
+
"pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0"
|
|
1795
|
+
)
|
|
1796
|
+
}
|
|
1797
|
+
)
|
|
1798
|
+
}
|
|
1799
|
+
));
|
|
1800
|
+
Switch.displayName = SwitchPrimitives.Root.displayName;
|
|
1801
|
+
|
|
1802
|
+
// src/ui/collapsible.tsx
|
|
1803
|
+
import * as CollapsiblePrimitive from "@radix-ui/react-collapsible";
|
|
1804
|
+
var Collapsible = CollapsiblePrimitive.Root;
|
|
1805
|
+
var CollapsibleTrigger2 = CollapsiblePrimitive.CollapsibleTrigger;
|
|
1806
|
+
var CollapsibleContent2 = CollapsiblePrimitive.CollapsibleContent;
|
|
1807
|
+
|
|
1808
|
+
// src/ui/sheet.tsx
|
|
1809
|
+
import * as React20 from "react";
|
|
1810
|
+
import * as SheetPrimitive from "@radix-ui/react-dialog";
|
|
1811
|
+
import { cva as cva4 } from "class-variance-authority";
|
|
1812
|
+
import { jsx as jsx23, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
1813
|
+
var Sheet = SheetPrimitive.Root;
|
|
1814
|
+
var SheetTrigger = SheetPrimitive.Trigger;
|
|
1815
|
+
var SheetClose = SheetPrimitive.Close;
|
|
1816
|
+
var SheetPortal = SheetPrimitive.Portal;
|
|
1817
|
+
var SheetOverlay = React20.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx23(
|
|
1818
|
+
SheetPrimitive.Overlay,
|
|
1819
|
+
{
|
|
1820
|
+
className: cn(
|
|
1821
|
+
"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
1822
|
+
className
|
|
1823
|
+
),
|
|
1824
|
+
...props,
|
|
1825
|
+
ref
|
|
1826
|
+
}
|
|
1827
|
+
));
|
|
1828
|
+
SheetOverlay.displayName = SheetPrimitive.Overlay.displayName;
|
|
1829
|
+
var sheetVariants = cva4(
|
|
1830
|
+
"fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500",
|
|
1831
|
+
{
|
|
1832
|
+
variants: {
|
|
1833
|
+
side: {
|
|
1834
|
+
top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
|
|
1835
|
+
bottom: "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
|
|
1836
|
+
left: "inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",
|
|
1837
|
+
right: "inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm"
|
|
1838
|
+
}
|
|
1839
|
+
},
|
|
1840
|
+
defaultVariants: {
|
|
1841
|
+
side: "right"
|
|
1842
|
+
}
|
|
1843
|
+
}
|
|
1844
|
+
);
|
|
1845
|
+
var SheetContent = React20.forwardRef(({ side = "right", className, children, ...props }, ref) => /* @__PURE__ */ jsxs12(SheetPortal, { children: [
|
|
1846
|
+
/* @__PURE__ */ jsx23(SheetOverlay, {}),
|
|
1847
|
+
/* @__PURE__ */ jsxs12(
|
|
1848
|
+
SheetPrimitive.Content,
|
|
1849
|
+
{
|
|
1850
|
+
ref,
|
|
1851
|
+
className: cn(sheetVariants({ side }), className),
|
|
1852
|
+
...props,
|
|
1853
|
+
children: [
|
|
1854
|
+
children,
|
|
1855
|
+
/* @__PURE__ */ jsxs12(SheetPrimitive.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary", children: [
|
|
1856
|
+
/* @__PURE__ */ jsxs12(
|
|
1857
|
+
"svg",
|
|
1858
|
+
{
|
|
1859
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
1860
|
+
width: "16",
|
|
1861
|
+
height: "16",
|
|
1862
|
+
viewBox: "0 0 24 24",
|
|
1863
|
+
fill: "none",
|
|
1864
|
+
stroke: "currentColor",
|
|
1865
|
+
strokeWidth: "2",
|
|
1866
|
+
strokeLinecap: "round",
|
|
1867
|
+
strokeLinejoin: "round",
|
|
1868
|
+
children: [
|
|
1869
|
+
/* @__PURE__ */ jsx23("path", { d: "M18 6 6 18" }),
|
|
1870
|
+
/* @__PURE__ */ jsx23("path", { d: "m6 6 12 12" })
|
|
1871
|
+
]
|
|
1872
|
+
}
|
|
1873
|
+
),
|
|
1874
|
+
/* @__PURE__ */ jsx23("span", { className: "sr-only", children: "Close" })
|
|
1875
|
+
] })
|
|
1876
|
+
]
|
|
1877
|
+
}
|
|
1878
|
+
)
|
|
1879
|
+
] }));
|
|
1880
|
+
SheetContent.displayName = SheetPrimitive.Content.displayName;
|
|
1881
|
+
var SheetHeader = ({ className, ...props }) => /* @__PURE__ */ jsx23("div", { className: cn("flex flex-col space-y-2 text-center sm:text-left", className), ...props });
|
|
1882
|
+
SheetHeader.displayName = "SheetHeader";
|
|
1883
|
+
var SheetFooter = ({ className, ...props }) => /* @__PURE__ */ jsx23(
|
|
1884
|
+
"div",
|
|
1885
|
+
{
|
|
1886
|
+
className: cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", className),
|
|
1887
|
+
...props
|
|
1888
|
+
}
|
|
1889
|
+
);
|
|
1890
|
+
SheetFooter.displayName = "SheetFooter";
|
|
1891
|
+
var SheetTitle = React20.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx23(
|
|
1892
|
+
SheetPrimitive.Title,
|
|
1893
|
+
{
|
|
1894
|
+
ref,
|
|
1895
|
+
className: cn("text-lg font-semibold text-foreground", className),
|
|
1896
|
+
...props
|
|
1897
|
+
}
|
|
1898
|
+
));
|
|
1899
|
+
SheetTitle.displayName = SheetPrimitive.Title.displayName;
|
|
1900
|
+
var SheetDescription = React20.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx23(
|
|
1901
|
+
SheetPrimitive.Description,
|
|
1902
|
+
{
|
|
1903
|
+
ref,
|
|
1904
|
+
className: cn("text-sm text-muted-foreground", className),
|
|
1905
|
+
...props
|
|
1906
|
+
}
|
|
1907
|
+
));
|
|
1908
|
+
SheetDescription.displayName = SheetPrimitive.Description.displayName;
|
|
1909
|
+
|
|
1910
|
+
// src/ui/textarea.tsx
|
|
1911
|
+
import * as React21 from "react";
|
|
1912
|
+
import { jsx as jsx24 } from "react/jsx-runtime";
|
|
1913
|
+
var Textarea = React21.forwardRef(
|
|
1914
|
+
({ className, ...props }, ref) => {
|
|
1915
|
+
return /* @__PURE__ */ jsx24(
|
|
1916
|
+
"textarea",
|
|
1917
|
+
{
|
|
1918
|
+
className: cn(
|
|
1919
|
+
"flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
|
|
1920
|
+
className
|
|
1921
|
+
),
|
|
1922
|
+
ref,
|
|
1923
|
+
...props
|
|
1924
|
+
}
|
|
1925
|
+
);
|
|
1926
|
+
}
|
|
1927
|
+
);
|
|
1928
|
+
Textarea.displayName = "Textarea";
|
|
1929
|
+
|
|
1930
|
+
// src/ui/tooltip.tsx
|
|
1931
|
+
import * as React22 from "react";
|
|
1932
|
+
import * as TooltipPrimitive from "@radix-ui/react-tooltip";
|
|
1933
|
+
import { jsx as jsx25 } from "react/jsx-runtime";
|
|
1934
|
+
var TooltipProvider = TooltipPrimitive.Provider;
|
|
1935
|
+
var Tooltip2 = TooltipPrimitive.Root;
|
|
1936
|
+
var TooltipTrigger = TooltipPrimitive.Trigger;
|
|
1937
|
+
var TooltipContent = React22.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx25(
|
|
1938
|
+
TooltipPrimitive.Content,
|
|
1939
|
+
{
|
|
1940
|
+
ref,
|
|
1941
|
+
sideOffset,
|
|
1942
|
+
className: cn(
|
|
1943
|
+
"z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
1944
|
+
className
|
|
1945
|
+
),
|
|
1946
|
+
...props
|
|
1947
|
+
}
|
|
1948
|
+
));
|
|
1949
|
+
TooltipContent.displayName = TooltipPrimitive.Content.displayName;
|
|
1950
|
+
|
|
1951
|
+
// src/ui/avatar.tsx
|
|
1952
|
+
import * as React23 from "react";
|
|
1953
|
+
import * as AvatarPrimitive from "@radix-ui/react-avatar";
|
|
1954
|
+
import { jsx as jsx26 } from "react/jsx-runtime";
|
|
1955
|
+
var Avatar = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx26(
|
|
1956
|
+
AvatarPrimitive.Root,
|
|
1957
|
+
{
|
|
1958
|
+
ref,
|
|
1959
|
+
className: cn("relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full", className),
|
|
1960
|
+
...props
|
|
1961
|
+
}
|
|
1962
|
+
));
|
|
1963
|
+
Avatar.displayName = AvatarPrimitive.Root.displayName;
|
|
1964
|
+
var AvatarImage = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx26(
|
|
1965
|
+
AvatarPrimitive.Image,
|
|
1966
|
+
{
|
|
1967
|
+
ref,
|
|
1968
|
+
className: cn("aspect-square h-full w-full", className),
|
|
1969
|
+
...props
|
|
1970
|
+
}
|
|
1971
|
+
));
|
|
1972
|
+
AvatarImage.displayName = AvatarPrimitive.Image.displayName;
|
|
1973
|
+
var AvatarFallback = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx26(
|
|
1974
|
+
AvatarPrimitive.Fallback,
|
|
1975
|
+
{
|
|
1976
|
+
ref,
|
|
1977
|
+
className: cn(
|
|
1978
|
+
"flex h-full w-full items-center justify-center rounded-full bg-muted",
|
|
1979
|
+
className
|
|
1980
|
+
),
|
|
1981
|
+
...props
|
|
1982
|
+
}
|
|
1983
|
+
));
|
|
1984
|
+
AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;
|
|
1985
|
+
|
|
1986
|
+
// src/ui/page-shell.tsx
|
|
1987
|
+
import { jsx as jsx27 } from "react/jsx-runtime";
|
|
1988
|
+
var maxWidthClasses = {
|
|
1989
|
+
sm: "max-w-screen-sm",
|
|
1990
|
+
md: "max-w-screen-md",
|
|
1991
|
+
lg: "max-w-screen-lg",
|
|
1992
|
+
xl: "max-w-screen-xl",
|
|
1993
|
+
"2xl": "max-w-screen-2xl",
|
|
1994
|
+
full: "max-w-full"
|
|
1995
|
+
};
|
|
1996
|
+
function PageShell({ maxWidth = "xl", className, children, ...props }) {
|
|
1997
|
+
return /* @__PURE__ */ jsx27(
|
|
1998
|
+
"div",
|
|
1999
|
+
{
|
|
2000
|
+
className: cn(
|
|
2001
|
+
"min-h-screen bg-[var(--night)] text-[var(--timberwolf)]",
|
|
2002
|
+
className
|
|
2003
|
+
),
|
|
2004
|
+
...props,
|
|
2005
|
+
children: /* @__PURE__ */ jsx27("div", { className: cn("mx-auto w-full px-4 py-6 sm:px-6 lg:px-8", maxWidthClasses[maxWidth]), children })
|
|
2006
|
+
}
|
|
2007
|
+
);
|
|
2008
|
+
}
|
|
2009
|
+
|
|
2010
|
+
// src/ui/stats-grid.tsx
|
|
2011
|
+
import { jsx as jsx28, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
2012
|
+
var colorClasses = {
|
|
2013
|
+
default: "text-[var(--timberwolf)]",
|
|
2014
|
+
green: "text-emerald-400",
|
|
2015
|
+
yellow: "text-amber-400",
|
|
2016
|
+
red: "text-red-400",
|
|
2017
|
+
blue: "text-sky-400"
|
|
2018
|
+
};
|
|
2019
|
+
var columnClasses = {
|
|
2020
|
+
2: "grid-cols-2",
|
|
2021
|
+
3: "grid-cols-2 sm:grid-cols-3",
|
|
2022
|
+
4: "grid-cols-2 sm:grid-cols-4",
|
|
2023
|
+
6: "grid-cols-2 sm:grid-cols-3 lg:grid-cols-6"
|
|
2024
|
+
};
|
|
2025
|
+
function StatsGrid({ stats, columns = 4, className, ...props }) {
|
|
2026
|
+
return /* @__PURE__ */ jsx28("div", { className: cn("grid gap-3", columnClasses[columns], className), ...props, children: stats.map((stat) => /* @__PURE__ */ jsxs13(
|
|
2027
|
+
"div",
|
|
2028
|
+
{
|
|
2029
|
+
className: cn(
|
|
2030
|
+
"rounded-lg border border-[var(--border)] bg-card p-4",
|
|
2031
|
+
stat.alert && "border-red-500/50"
|
|
2032
|
+
),
|
|
2033
|
+
children: [
|
|
2034
|
+
/* @__PURE__ */ jsx28("p", { className: "text-xs text-muted-foreground", children: stat.label }),
|
|
2035
|
+
/* @__PURE__ */ jsx28(
|
|
2036
|
+
"p",
|
|
2037
|
+
{
|
|
2038
|
+
className: cn(
|
|
2039
|
+
"mt-1 text-2xl font-semibold",
|
|
2040
|
+
colorClasses[stat.color || "default"]
|
|
2041
|
+
),
|
|
2042
|
+
children: stat.value
|
|
2043
|
+
}
|
|
2044
|
+
)
|
|
2045
|
+
]
|
|
2046
|
+
},
|
|
2047
|
+
stat.label
|
|
2048
|
+
)) });
|
|
2049
|
+
}
|
|
2050
|
+
|
|
2051
|
+
// src/ui/section-card.tsx
|
|
2052
|
+
import * as React24 from "react";
|
|
2053
|
+
import { jsx as jsx29, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
2054
|
+
function SectionCard({
|
|
2055
|
+
icon,
|
|
2056
|
+
title,
|
|
2057
|
+
count,
|
|
2058
|
+
defaultOpen = true,
|
|
2059
|
+
collapsible = true,
|
|
2060
|
+
className,
|
|
2061
|
+
children,
|
|
2062
|
+
...props
|
|
2063
|
+
}) {
|
|
2064
|
+
const [open, setOpen] = React24.useState(defaultOpen);
|
|
2065
|
+
return /* @__PURE__ */ jsxs14(
|
|
2066
|
+
"div",
|
|
2067
|
+
{
|
|
2068
|
+
className: cn("rounded-lg border border-[var(--border)] bg-card", className),
|
|
2069
|
+
...props,
|
|
2070
|
+
children: [
|
|
2071
|
+
/* @__PURE__ */ jsxs14(
|
|
2072
|
+
"button",
|
|
2073
|
+
{
|
|
2074
|
+
type: "button",
|
|
2075
|
+
onClick: () => collapsible && setOpen(!open),
|
|
2076
|
+
className: cn(
|
|
2077
|
+
"flex w-full items-center gap-3 p-4 text-left",
|
|
2078
|
+
collapsible && "cursor-pointer hover:bg-muted/50"
|
|
2079
|
+
),
|
|
2080
|
+
children: [
|
|
2081
|
+
icon && /* @__PURE__ */ jsx29("span", { className: "text-muted-foreground", children: icon }),
|
|
2082
|
+
/* @__PURE__ */ jsx29("span", { className: "flex-1 text-sm font-medium text-[var(--timberwolf)]", children: title }),
|
|
2083
|
+
count !== void 0 && /* @__PURE__ */ jsx29("span", { className: "rounded-full bg-muted px-2 py-0.5 text-xs text-muted-foreground", children: count }),
|
|
2084
|
+
collapsible && /* @__PURE__ */ jsx29(
|
|
2085
|
+
"svg",
|
|
2086
|
+
{
|
|
2087
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
2088
|
+
width: "16",
|
|
2089
|
+
height: "16",
|
|
2090
|
+
viewBox: "0 0 24 24",
|
|
2091
|
+
fill: "none",
|
|
2092
|
+
stroke: "currentColor",
|
|
2093
|
+
strokeWidth: "2",
|
|
2094
|
+
strokeLinecap: "round",
|
|
2095
|
+
strokeLinejoin: "round",
|
|
2096
|
+
className: cn(
|
|
2097
|
+
"text-muted-foreground transition-transform duration-200",
|
|
2098
|
+
open && "rotate-180"
|
|
2099
|
+
),
|
|
2100
|
+
children: /* @__PURE__ */ jsx29("path", { d: "m6 9 6 6 6-6" })
|
|
2101
|
+
}
|
|
2102
|
+
)
|
|
2103
|
+
]
|
|
2104
|
+
}
|
|
2105
|
+
),
|
|
2106
|
+
open && /* @__PURE__ */ jsx29("div", { className: "border-t border-[var(--border)] p-4", children })
|
|
2107
|
+
]
|
|
2108
|
+
}
|
|
2109
|
+
);
|
|
2110
|
+
}
|
|
2111
|
+
|
|
2112
|
+
// src/ui/empty-state.tsx
|
|
2113
|
+
import { jsx as jsx30, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
2114
|
+
function EmptyState({ icon, title, description, action, className, ...props }) {
|
|
2115
|
+
return /* @__PURE__ */ jsxs15(
|
|
2116
|
+
"div",
|
|
2117
|
+
{
|
|
2118
|
+
className: cn("flex flex-col items-center justify-center py-12 text-center", className),
|
|
2119
|
+
...props,
|
|
2120
|
+
children: [
|
|
2121
|
+
icon && /* @__PURE__ */ jsx30("div", { className: "mb-4 text-muted-foreground", children: icon }),
|
|
2122
|
+
/* @__PURE__ */ jsx30("h3", { className: "text-lg font-medium text-[var(--timberwolf)]", children: title }),
|
|
2123
|
+
description && /* @__PURE__ */ jsx30("p", { className: "mt-1 max-w-sm text-sm text-muted-foreground", children: description }),
|
|
2124
|
+
action && /* @__PURE__ */ jsx30("div", { className: "mt-4", children: action })
|
|
2125
|
+
]
|
|
2126
|
+
}
|
|
2127
|
+
);
|
|
2128
|
+
}
|
|
2129
|
+
|
|
2130
|
+
// src/ui/search-bar.tsx
|
|
2131
|
+
import { jsx as jsx31, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
2132
|
+
function SearchBar({ value, onChange, onClear, className, placeholder = "Search...", ...props }) {
|
|
2133
|
+
return /* @__PURE__ */ jsxs16("div", { className: cn("relative", className), children: [
|
|
2134
|
+
/* @__PURE__ */ jsxs16(
|
|
2135
|
+
"svg",
|
|
2136
|
+
{
|
|
2137
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
2138
|
+
width: "16",
|
|
2139
|
+
height: "16",
|
|
2140
|
+
viewBox: "0 0 24 24",
|
|
2141
|
+
fill: "none",
|
|
2142
|
+
stroke: "currentColor",
|
|
2143
|
+
strokeWidth: "2",
|
|
2144
|
+
strokeLinecap: "round",
|
|
2145
|
+
strokeLinejoin: "round",
|
|
2146
|
+
className: "absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground",
|
|
2147
|
+
children: [
|
|
2148
|
+
/* @__PURE__ */ jsx31("circle", { cx: "11", cy: "11", r: "8" }),
|
|
2149
|
+
/* @__PURE__ */ jsx31("path", { d: "m21 21-4.3-4.3" })
|
|
2150
|
+
]
|
|
2151
|
+
}
|
|
2152
|
+
),
|
|
2153
|
+
/* @__PURE__ */ jsx31(
|
|
2154
|
+
"input",
|
|
2155
|
+
{
|
|
2156
|
+
type: "text",
|
|
2157
|
+
value,
|
|
2158
|
+
onChange: (e) => onChange(e.target.value),
|
|
2159
|
+
placeholder,
|
|
2160
|
+
className: "h-10 w-full rounded-md border border-input bg-background pl-9 pr-9 text-sm text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
2161
|
+
...props
|
|
2162
|
+
}
|
|
2163
|
+
),
|
|
2164
|
+
value && /* @__PURE__ */ jsx31(
|
|
2165
|
+
"button",
|
|
2166
|
+
{
|
|
2167
|
+
type: "button",
|
|
2168
|
+
onClick: () => {
|
|
2169
|
+
onChange("");
|
|
2170
|
+
onClear?.();
|
|
2171
|
+
},
|
|
2172
|
+
className: "absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground",
|
|
2173
|
+
children: /* @__PURE__ */ jsxs16(
|
|
2174
|
+
"svg",
|
|
2175
|
+
{
|
|
2176
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
2177
|
+
width: "14",
|
|
2178
|
+
height: "14",
|
|
2179
|
+
viewBox: "0 0 24 24",
|
|
2180
|
+
fill: "none",
|
|
2181
|
+
stroke: "currentColor",
|
|
2182
|
+
strokeWidth: "2",
|
|
2183
|
+
strokeLinecap: "round",
|
|
2184
|
+
strokeLinejoin: "round",
|
|
2185
|
+
children: [
|
|
2186
|
+
/* @__PURE__ */ jsx31("path", { d: "M18 6 6 18" }),
|
|
2187
|
+
/* @__PURE__ */ jsx31("path", { d: "m6 6 12 12" })
|
|
2188
|
+
]
|
|
2189
|
+
}
|
|
2190
|
+
)
|
|
2191
|
+
}
|
|
2192
|
+
)
|
|
2193
|
+
] });
|
|
2194
|
+
}
|
|
2195
|
+
|
|
2196
|
+
// src/ui/data-row.tsx
|
|
2197
|
+
import { jsx as jsx32, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
2198
|
+
var statusColors = {
|
|
2199
|
+
green: "bg-emerald-400",
|
|
2200
|
+
yellow: "bg-amber-400",
|
|
2201
|
+
red: "bg-red-400",
|
|
2202
|
+
gray: "bg-zinc-500"
|
|
2203
|
+
};
|
|
2204
|
+
function DataRow({ status, primary, secondary, trailing, className, ...props }) {
|
|
2205
|
+
return /* @__PURE__ */ jsxs17(
|
|
2206
|
+
"div",
|
|
2207
|
+
{
|
|
2208
|
+
className: cn(
|
|
2209
|
+
"flex items-center gap-3 rounded-md px-3 py-2.5 hover:bg-muted/50 transition-colors",
|
|
2210
|
+
className
|
|
2211
|
+
),
|
|
2212
|
+
...props,
|
|
2213
|
+
children: [
|
|
2214
|
+
status && /* @__PURE__ */ jsx32("span", { className: cn("h-2 w-2 shrink-0 rounded-full", statusColors[status]) }),
|
|
2215
|
+
/* @__PURE__ */ jsxs17("div", { className: "min-w-0 flex-1", children: [
|
|
2216
|
+
/* @__PURE__ */ jsx32("p", { className: "truncate text-sm text-[var(--timberwolf)]", children: primary }),
|
|
2217
|
+
secondary && /* @__PURE__ */ jsx32("p", { className: "truncate text-xs text-muted-foreground", children: secondary })
|
|
2218
|
+
] }),
|
|
2219
|
+
trailing && /* @__PURE__ */ jsx32("div", { className: "shrink-0", children: trailing })
|
|
2220
|
+
]
|
|
2221
|
+
}
|
|
2222
|
+
);
|
|
2223
|
+
}
|
|
2224
|
+
|
|
2225
|
+
// src/ui/motion-presets.ts
|
|
2226
|
+
var fadeInUp = {
|
|
2227
|
+
initial: { opacity: 0, y: 20 },
|
|
2228
|
+
animate: { opacity: 1, y: 0 },
|
|
2229
|
+
transition: { duration: 0.4, ease: [0.25, 0.46, 0.45, 0.94] }
|
|
2230
|
+
};
|
|
2231
|
+
var fadeInDown = {
|
|
2232
|
+
initial: { opacity: 0, y: -20 },
|
|
2233
|
+
animate: { opacity: 1, y: 0 },
|
|
2234
|
+
transition: { duration: 0.4, ease: [0.25, 0.46, 0.45, 0.94] }
|
|
2235
|
+
};
|
|
2236
|
+
var staggerContainer = {
|
|
2237
|
+
initial: {},
|
|
2238
|
+
animate: { transition: { staggerChildren: 0.06 } }
|
|
2239
|
+
};
|
|
2240
|
+
var staggerItem = {
|
|
2241
|
+
initial: { opacity: 0, y: 12 },
|
|
2242
|
+
animate: { opacity: 1, y: 0, transition: { duration: 0.3 } }
|
|
2243
|
+
};
|
|
2244
|
+
var pageTransition = {
|
|
2245
|
+
initial: { opacity: 0 },
|
|
2246
|
+
animate: { opacity: 1 },
|
|
2247
|
+
exit: { opacity: 0 },
|
|
2248
|
+
transition: { duration: 0.25 }
|
|
2249
|
+
};
|
|
2250
|
+
var hoverScale = {
|
|
2251
|
+
whileHover: { scale: 1.02 },
|
|
2252
|
+
whileTap: { scale: 0.98 },
|
|
2253
|
+
transition: { type: "spring", stiffness: 400, damping: 25 }
|
|
2254
|
+
};
|
|
2255
|
+
var hoverLift = {
|
|
2256
|
+
whileHover: { y: -2 },
|
|
2257
|
+
transition: { type: "spring", stiffness: 400, damping: 25 }
|
|
2258
|
+
};
|
|
2259
|
+
var springBounce = {
|
|
2260
|
+
type: "spring",
|
|
2261
|
+
stiffness: 300,
|
|
2262
|
+
damping: 20
|
|
2263
|
+
};
|
|
2264
|
+
var easeSmooth = [0.25, 0.46, 0.45, 0.94];
|
|
2265
|
+
|
|
2266
|
+
// src/ui/fade-in.tsx
|
|
2267
|
+
import * as React25 from "react";
|
|
2268
|
+
import { jsx as jsx33 } from "react/jsx-runtime";
|
|
2269
|
+
function FadeIn({ children, className, delay = 0, direction = "up", ...props }) {
|
|
2270
|
+
const ref = React25.useRef(null);
|
|
2271
|
+
const [visible, setVisible] = React25.useState(false);
|
|
2272
|
+
React25.useEffect(() => {
|
|
2273
|
+
const el = ref.current;
|
|
2274
|
+
if (!el) return;
|
|
2275
|
+
const observer = new IntersectionObserver(
|
|
2276
|
+
([entry]) => {
|
|
2277
|
+
if (entry.isIntersecting) {
|
|
2278
|
+
setVisible(true);
|
|
2279
|
+
observer.disconnect();
|
|
2280
|
+
}
|
|
2281
|
+
},
|
|
2282
|
+
{ threshold: 0.1 }
|
|
2283
|
+
);
|
|
2284
|
+
observer.observe(el);
|
|
2285
|
+
return () => observer.disconnect();
|
|
2286
|
+
}, []);
|
|
2287
|
+
return /* @__PURE__ */ jsx33(
|
|
2288
|
+
"div",
|
|
2289
|
+
{
|
|
2290
|
+
ref,
|
|
2291
|
+
className: cn(
|
|
2292
|
+
"transition-all duration-500 ease-out",
|
|
2293
|
+
visible ? "opacity-100 translate-y-0 translate-x-0" : direction === "left" ? "opacity-0 -translate-x-5" : "opacity-0 translate-y-6",
|
|
2294
|
+
className
|
|
2295
|
+
),
|
|
2296
|
+
style: delay ? { transitionDelay: `${delay}ms` } : void 0,
|
|
2297
|
+
...props,
|
|
2298
|
+
children
|
|
2299
|
+
}
|
|
2300
|
+
);
|
|
2301
|
+
}
|
|
2302
|
+
|
|
1678
2303
|
// src/ui/footer.tsx
|
|
1679
|
-
import
|
|
2304
|
+
import Image2 from "next/image";
|
|
1680
2305
|
import Link2 from "next/link";
|
|
1681
|
-
import { jsx as
|
|
2306
|
+
import { jsx as jsx34, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
1682
2307
|
function Footer() {
|
|
1683
|
-
return /* @__PURE__ */
|
|
1684
|
-
/* @__PURE__ */
|
|
1685
|
-
/* @__PURE__ */
|
|
1686
|
-
|
|
2308
|
+
return /* @__PURE__ */ jsxs18("footer", { className: "container mx-auto flex p-5 items-center justify-between border-t border-[var(--timberwolf)]", children: [
|
|
2309
|
+
/* @__PURE__ */ jsxs18("div", { className: "flex gap-4", children: [
|
|
2310
|
+
/* @__PURE__ */ jsx34(Link2, { href: "https://www.instagram.com/playback_global", target: "_blank", children: /* @__PURE__ */ jsx34(
|
|
2311
|
+
Image2,
|
|
1687
2312
|
{
|
|
1688
2313
|
src: "/assets/instagram.png",
|
|
1689
2314
|
alt: "PLAYBACK Instagram",
|
|
@@ -1692,8 +2317,8 @@ function Footer() {
|
|
|
1692
2317
|
className: "h-9 w-9"
|
|
1693
2318
|
}
|
|
1694
2319
|
) }),
|
|
1695
|
-
/* @__PURE__ */
|
|
1696
|
-
|
|
2320
|
+
/* @__PURE__ */ jsx34(Link2, { href: "https://youtube.com/@playback_global", target: "_blank", children: /* @__PURE__ */ jsx34(
|
|
2321
|
+
Image2,
|
|
1697
2322
|
{
|
|
1698
2323
|
src: "/assets/youtube.png",
|
|
1699
2324
|
alt: "PLAYBACK YouTube",
|
|
@@ -1702,8 +2327,8 @@ function Footer() {
|
|
|
1702
2327
|
className: "h-9 w-9"
|
|
1703
2328
|
}
|
|
1704
2329
|
) }),
|
|
1705
|
-
/* @__PURE__ */
|
|
1706
|
-
|
|
2330
|
+
/* @__PURE__ */ jsx34(Link2, { href: "https://www.tiktok.com/@playback_global", target: "_blank", children: /* @__PURE__ */ jsx34(
|
|
2331
|
+
Image2,
|
|
1707
2332
|
{
|
|
1708
2333
|
src: "/assets/tiktok.png",
|
|
1709
2334
|
alt: "PLAYBACK TikTok",
|
|
@@ -1712,13 +2337,13 @@ function Footer() {
|
|
|
1712
2337
|
className: "h-9 w-9"
|
|
1713
2338
|
}
|
|
1714
2339
|
) }),
|
|
1715
|
-
/* @__PURE__ */
|
|
2340
|
+
/* @__PURE__ */ jsx34(
|
|
1716
2341
|
Link2,
|
|
1717
2342
|
{
|
|
1718
2343
|
href: "https://www.linkedin.com/company/playbacksports/",
|
|
1719
2344
|
target: "_blank",
|
|
1720
|
-
children: /* @__PURE__ */
|
|
1721
|
-
|
|
2345
|
+
children: /* @__PURE__ */ jsx34(
|
|
2346
|
+
Image2,
|
|
1722
2347
|
{
|
|
1723
2348
|
src: "/assets/linkedin.png",
|
|
1724
2349
|
alt: "PLAYBACK LinkedIn",
|
|
@@ -1730,18 +2355,21 @@ function Footer() {
|
|
|
1730
2355
|
}
|
|
1731
2356
|
)
|
|
1732
2357
|
] }),
|
|
1733
|
-
/* @__PURE__ */
|
|
2358
|
+
/* @__PURE__ */ jsxs18("h2", { className: "text-lg", children: [
|
|
1734
2359
|
"by",
|
|
1735
2360
|
" ",
|
|
1736
|
-
/* @__PURE__ */
|
|
2361
|
+
/* @__PURE__ */ jsx34(Link2, { href: "https://www.braintwopoint0.com", children: /* @__PURE__ */ jsxs18("span", { style: { fontFamily: "AvertaStd-Semibold" }, children: [
|
|
1737
2362
|
"BRAIN",
|
|
1738
|
-
/* @__PURE__ */
|
|
2363
|
+
/* @__PURE__ */ jsx34("span", { style: { fontFamily: "AvertaStd-Thin" }, children: "2.0" })
|
|
1739
2364
|
] }) })
|
|
1740
2365
|
] })
|
|
1741
2366
|
] });
|
|
1742
2367
|
}
|
|
1743
2368
|
export {
|
|
1744
2369
|
AnimatedTooltip,
|
|
2370
|
+
Avatar,
|
|
2371
|
+
AvatarFallback,
|
|
2372
|
+
AvatarImage,
|
|
1745
2373
|
Badge,
|
|
1746
2374
|
Button,
|
|
1747
2375
|
Calendar,
|
|
@@ -1758,6 +2386,11 @@ export {
|
|
|
1758
2386
|
ChartStyle,
|
|
1759
2387
|
ChartTooltip,
|
|
1760
2388
|
ChartTooltipContent,
|
|
2389
|
+
Checkbox,
|
|
2390
|
+
Collapsible,
|
|
2391
|
+
CollapsibleContent2 as CollapsibleContent,
|
|
2392
|
+
CollapsibleTrigger2 as CollapsibleTrigger,
|
|
2393
|
+
DataRow,
|
|
1761
2394
|
DatePicker,
|
|
1762
2395
|
DateTimePicker,
|
|
1763
2396
|
Dialog,
|
|
@@ -1770,6 +2403,8 @@ export {
|
|
|
1770
2403
|
DialogPortal,
|
|
1771
2404
|
DialogTitle,
|
|
1772
2405
|
DialogTrigger,
|
|
2406
|
+
EmptyState,
|
|
2407
|
+
FadeIn,
|
|
1773
2408
|
FlipWords,
|
|
1774
2409
|
Footer,
|
|
1775
2410
|
HeroHighlight,
|
|
@@ -1780,10 +2415,13 @@ export {
|
|
|
1780
2415
|
HoverEffect,
|
|
1781
2416
|
Input,
|
|
1782
2417
|
Label,
|
|
2418
|
+
PageShell,
|
|
1783
2419
|
Popover,
|
|
1784
2420
|
PopoverAnchor,
|
|
1785
2421
|
PopoverContent,
|
|
1786
2422
|
PopoverTrigger,
|
|
2423
|
+
SearchBar,
|
|
2424
|
+
SectionCard,
|
|
1787
2425
|
Select,
|
|
1788
2426
|
SelectContent,
|
|
1789
2427
|
SelectGroup,
|
|
@@ -1794,8 +2432,40 @@ export {
|
|
|
1794
2432
|
SelectSeparator,
|
|
1795
2433
|
SelectTrigger,
|
|
1796
2434
|
SelectValue,
|
|
2435
|
+
Separator2 as Separator,
|
|
2436
|
+
Sheet,
|
|
2437
|
+
SheetClose,
|
|
2438
|
+
SheetContent,
|
|
2439
|
+
SheetDescription,
|
|
2440
|
+
SheetFooter,
|
|
2441
|
+
SheetHeader,
|
|
2442
|
+
SheetOverlay,
|
|
2443
|
+
SheetPortal,
|
|
2444
|
+
SheetTitle,
|
|
2445
|
+
SheetTrigger,
|
|
2446
|
+
Skeleton,
|
|
2447
|
+
StatsGrid,
|
|
2448
|
+
Switch,
|
|
2449
|
+
Tabs,
|
|
2450
|
+
TabsContent,
|
|
2451
|
+
TabsList,
|
|
2452
|
+
TabsTrigger,
|
|
2453
|
+
Textarea,
|
|
1797
2454
|
TimePicker,
|
|
2455
|
+
Tooltip2 as Tooltip,
|
|
2456
|
+
TooltipContent,
|
|
2457
|
+
TooltipProvider,
|
|
2458
|
+
TooltipTrigger,
|
|
1798
2459
|
badgeVariants,
|
|
1799
|
-
buttonVariants
|
|
2460
|
+
buttonVariants,
|
|
2461
|
+
easeSmooth,
|
|
2462
|
+
fadeInDown,
|
|
2463
|
+
fadeInUp,
|
|
2464
|
+
hoverLift,
|
|
2465
|
+
hoverScale,
|
|
2466
|
+
pageTransition,
|
|
2467
|
+
springBounce,
|
|
2468
|
+
staggerContainer,
|
|
2469
|
+
staggerItem
|
|
1800
2470
|
};
|
|
1801
2471
|
//# sourceMappingURL=index.js.map
|