@vite-mf-monorepo/ui 0.4.4 → 0.4.6
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/Avatar/Avatar.d.ts +19 -0
- package/dist/Avatar/Avatar.js +62 -0
- package/dist/Avatar/Avatar.js.map +1 -0
- package/dist/Avatar/index.d.ts +3 -0
- package/dist/Avatar/index.js +5 -0
- package/dist/Avatar/index.js.map +1 -0
- package/dist/Badge/Badge.d.ts +23 -0
- package/dist/Badge/Badge.js +48 -0
- package/dist/Badge/Badge.js.map +1 -0
- package/dist/Badge/index.d.ts +4 -0
- package/dist/Badge/index.js +5 -0
- package/dist/Badge/index.js.map +1 -0
- package/dist/Button/Button.utils.d.ts +23 -0
- package/dist/{chunk-IUGKH376.js → Button/Button.utils.js} +8 -7
- package/dist/Button/Button.utils.js.map +1 -0
- package/dist/Button/index.d.ts +6 -26
- package/dist/Button/index.js +4 -5
- package/dist/Button/index.js.map +1 -1
- package/dist/Card/Card.d.ts +11 -0
- package/dist/{chunk-RZU2FFBW.js → Card/Card.js} +7 -8
- package/dist/Card/Card.js.map +1 -0
- package/dist/Card/index.d.ts +3 -11
- package/dist/Card/index.js +4 -2
- package/dist/Card/index.js.map +1 -1
- package/dist/Carousel/Carousel.d.ts +65 -0
- package/dist/Carousel/Carousel.js +268 -0
- package/dist/Carousel/Carousel.js.map +1 -0
- package/dist/Carousel/CarouselCounter.d.ts +17 -0
- package/dist/Carousel/CarouselCounter.js +28 -0
- package/dist/Carousel/CarouselCounter.js.map +1 -0
- package/dist/Carousel/CarouselError.d.ts +8 -0
- package/dist/Carousel/CarouselError.js +18 -0
- package/dist/Carousel/CarouselError.js.map +1 -0
- package/dist/Carousel/CarouselItem.d.ts +16 -0
- package/dist/Carousel/CarouselItem.js +28 -0
- package/dist/Carousel/CarouselItem.js.map +1 -0
- package/dist/Carousel/CarouselLoading.d.ts +25 -0
- package/dist/Carousel/CarouselLoading.js +63 -0
- package/dist/Carousel/CarouselLoading.js.map +1 -0
- package/dist/Carousel/CarouselNavigation.d.ts +31 -0
- package/dist/Carousel/CarouselNavigation.js +97 -0
- package/dist/Carousel/CarouselNavigation.js.map +1 -0
- package/dist/Carousel/CarouselPagination.d.ts +20 -0
- package/dist/Carousel/CarouselPagination.js +29 -0
- package/dist/Carousel/CarouselPagination.js.map +1 -0
- package/dist/Carousel/index.d.ts +8 -0
- package/dist/Carousel/index.js +15 -0
- package/dist/Carousel/index.js.map +1 -0
- package/dist/HeroImage/HeroImage.d.ts +15 -0
- package/dist/HeroImage/HeroImage.js +47 -0
- package/dist/HeroImage/HeroImage.js.map +1 -0
- package/dist/HeroImage/index.d.ts +2 -0
- package/dist/HeroImage/index.js +5 -0
- package/dist/HeroImage/index.js.map +1 -0
- package/dist/Icon/Icon.d.ts +14 -0
- package/dist/Icon/Icon.js +204 -0
- package/dist/Icon/Icon.js.map +1 -0
- package/dist/Icon/index.d.ts +3 -14
- package/dist/Icon/index.js +4 -2
- package/dist/Icon/index.js.map +1 -1
- package/dist/IconButton/IconButton.d.ts +17 -0
- package/dist/IconButton/IconButton.js +44 -0
- package/dist/IconButton/IconButton.js.map +1 -0
- package/dist/IconButton/index.d.ts +4 -0
- package/dist/IconButton/index.js +5 -0
- package/dist/IconButton/index.js.map +1 -0
- package/dist/{MovieCard.utils-D8i4d7qA.d.ts → Image/Image.d.ts} +1 -28
- package/dist/Image/Image.js +125 -0
- package/dist/Image/Image.js.map +1 -0
- package/dist/Image/index.d.ts +3 -0
- package/dist/Image/index.js +5 -0
- package/dist/Image/index.js.map +1 -0
- package/dist/Modal/Modal.d.ts +20 -0
- package/dist/Modal/Modal.js +55 -0
- package/dist/Modal/Modal.js.map +1 -0
- package/dist/Modal/index.d.ts +3 -0
- package/dist/Modal/index.js +5 -0
- package/dist/Modal/index.js.map +1 -0
- package/dist/MovieCard/MovieCard.utils.d.ts +34 -0
- package/dist/MovieCard/MovieCard.utils.js +20 -0
- package/dist/MovieCard/MovieCard.utils.js.map +1 -0
- package/dist/MovieCard/MovieCardContent.d.ts +18 -0
- package/dist/MovieCard/MovieCardContent.js +75 -0
- package/dist/MovieCard/MovieCardContent.js.map +1 -0
- package/dist/MovieCard/index.d.ts +6 -0
- package/dist/MovieCard/index.js +5 -0
- package/dist/MovieCard/index.js.map +1 -0
- package/dist/Rating/CircleRating.d.ts +20 -0
- package/dist/Rating/CircleRating.js +75 -0
- package/dist/Rating/CircleRating.js.map +1 -0
- package/dist/Rating/Rating.d.ts +23 -0
- package/dist/Rating/Rating.js +41 -0
- package/dist/Rating/Rating.js.map +1 -0
- package/dist/Rating/StarsRating.d.ts +18 -0
- package/dist/Rating/StarsRating.js +47 -0
- package/dist/Rating/StarsRating.js.map +1 -0
- package/dist/Rating/index.d.ts +2 -0
- package/dist/Rating/index.js +5 -0
- package/dist/Rating/index.js.map +1 -0
- package/dist/Skeleton/Skeleton.d.ts +23 -0
- package/dist/{chunk-FJZK3PY6.js → Skeleton/Skeleton.js} +6 -7
- package/dist/Skeleton/Skeleton.js.map +1 -0
- package/dist/Skeleton/index.d.ts +3 -0
- package/dist/Skeleton/index.js +5 -0
- package/dist/Skeleton/index.js.map +1 -0
- package/dist/Spinner/Spinner.d.ts +8 -0
- package/dist/Spinner/Spinner.js +20 -0
- package/dist/Spinner/Spinner.js.map +1 -0
- package/dist/Spinner/index.d.ts +2 -0
- package/dist/Spinner/index.js +5 -0
- package/dist/Spinner/index.js.map +1 -0
- package/dist/Tabs/Tabs.d.ts +34 -0
- package/dist/Tabs/Tabs.js +47 -0
- package/dist/Tabs/Tabs.js.map +1 -0
- package/dist/Tabs/TabsContext.d.ts +21 -0
- package/dist/Tabs/TabsContext.js +16 -0
- package/dist/Tabs/TabsContext.js.map +1 -0
- package/dist/Tabs/TabsList.d.ts +7 -0
- package/dist/Tabs/TabsList.js +51 -0
- package/dist/Tabs/TabsList.js.map +1 -0
- package/dist/Tabs/TabsListContext.d.ts +16 -0
- package/dist/Tabs/TabsListContext.js +16 -0
- package/dist/Tabs/TabsListContext.js.map +1 -0
- package/dist/Tabs/TabsPanel.d.ts +17 -0
- package/dist/Tabs/TabsPanel.js +26 -0
- package/dist/Tabs/TabsPanel.js.map +1 -0
- package/dist/Tabs/TabsTrigger.d.ts +12 -0
- package/dist/Tabs/TabsTrigger.js +124 -0
- package/dist/Tabs/TabsTrigger.js.map +1 -0
- package/dist/Tabs/index.d.ts +6 -0
- package/dist/Tabs/index.js +5 -0
- package/dist/Tabs/index.js.map +1 -0
- package/dist/Talent/Talent.d.ts +19 -0
- package/dist/Talent/Talent.js +69 -0
- package/dist/Talent/Talent.js.map +1 -0
- package/dist/Talent/index.d.ts +4 -0
- package/dist/Talent/index.js +5 -0
- package/dist/Talent/index.js.map +1 -0
- package/dist/TrailerCard/TrailerCard.d.ts +15 -0
- package/dist/TrailerCard/TrailerCard.js +86 -0
- package/dist/TrailerCard/TrailerCard.js.map +1 -0
- package/dist/TrailerCard/index.d.ts +2 -0
- package/dist/TrailerCard/index.js +5 -0
- package/dist/TrailerCard/index.js.map +1 -0
- package/dist/Typography/Typography.d.ts +17 -0
- package/dist/Typography/Typography.js +55 -0
- package/dist/Typography/Typography.js.map +1 -0
- package/dist/Typography/index.d.ts +2 -0
- package/dist/Typography/index.js +5 -0
- package/dist/Typography/index.js.map +1 -0
- package/dist/index.d.ts +31 -372
- package/dist/index.js +50 -1099
- package/dist/index.js.map +1 -1
- package/dist/next/Button/Button.d.ts +9 -0
- package/dist/{chunk-ZTQU4GMY.js → next/Button/Button.js} +13 -10
- package/dist/next/Button/Button.js.map +1 -0
- package/dist/next/Button/Button.types.d.ts +26 -0
- package/dist/next/Button/Button.types.js +1 -0
- package/dist/next/Button/Button.types.js.map +1 -0
- package/dist/next/Button/index.d.ts +6 -0
- package/dist/next/Button/index.js +5 -0
- package/dist/next/Button/index.js.map +1 -0
- package/dist/next/HeroImage/HeroImage.d.ts +11 -0
- package/dist/next/HeroImage/HeroImage.js +44 -0
- package/dist/next/HeroImage/HeroImage.js.map +1 -0
- package/dist/next/HeroImage/index.d.ts +2 -0
- package/dist/next/HeroImage/index.js +5 -0
- package/dist/next/HeroImage/index.js.map +1 -0
- package/dist/next/Image/NextImage.d.ts +8 -0
- package/dist/next/Image/NextImage.js +84 -0
- package/dist/next/Image/NextImage.js.map +1 -0
- package/dist/next/Image/NextImage.types.d.ts +13 -0
- package/dist/next/Image/NextImage.types.js +1 -0
- package/dist/next/Image/NextImage.types.js.map +1 -0
- package/dist/next/Image/index.d.ts +5 -0
- package/dist/next/Image/index.js +5 -0
- package/dist/next/Image/index.js.map +1 -0
- package/dist/next/MovieCard/MovieCard.d.ts +9 -0
- package/dist/next/MovieCard/MovieCard.js +44 -0
- package/dist/next/MovieCard/MovieCard.js.map +1 -0
- package/dist/next/MovieCard/MovieCard.types.d.ts +15 -0
- package/dist/next/MovieCard/MovieCard.types.js +1 -0
- package/dist/next/MovieCard/MovieCard.types.js.map +1 -0
- package/dist/next/MovieCard/MovieCardContent.d.ts +19 -0
- package/dist/next/MovieCard/MovieCardContent.js +79 -0
- package/dist/next/MovieCard/MovieCardContent.js.map +1 -0
- package/dist/next/MovieCard/index.d.ts +6 -0
- package/dist/next/MovieCard/index.js +5 -0
- package/dist/next/MovieCard/index.js.map +1 -0
- package/dist/next/index.d.ts +14 -60
- package/dist/next/index.js +10 -270
- package/dist/next/index.js.map +1 -1
- package/dist/react-router/Button/Button.d.ts +9 -0
- package/dist/react-router/Button/Button.js +52 -0
- package/dist/react-router/Button/Button.js.map +1 -0
- package/dist/react-router/Button/Button.types.d.ts +24 -0
- package/dist/react-router/Button/Button.types.js +1 -0
- package/dist/react-router/Button/Button.types.js.map +1 -0
- package/dist/react-router/Button/index.d.ts +6 -0
- package/dist/react-router/Button/index.js +5 -0
- package/dist/react-router/Button/index.js.map +1 -0
- package/dist/react-router/MovieCard/MovieCard.d.ts +9 -0
- package/dist/react-router/MovieCard/MovieCard.js +42 -0
- package/dist/react-router/MovieCard/MovieCard.js.map +1 -0
- package/dist/react-router/MovieCard/MovieCard.types.d.ts +15 -0
- package/dist/react-router/MovieCard/MovieCard.types.js +1 -0
- package/dist/react-router/MovieCard/MovieCard.types.js.map +1 -0
- package/dist/react-router/MovieCard/index.d.ts +6 -0
- package/dist/react-router/MovieCard/index.js +5 -0
- package/dist/react-router/MovieCard/index.js.map +1 -0
- package/dist/react-router/index.d.ts +8 -17
- package/dist/react-router/index.js +6 -7
- package/dist/react-router/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-6DP3KZQG.js +0 -214
- package/dist/chunk-6DP3KZQG.js.map +0 -1
- package/dist/chunk-6FBMTGXQ.js +0 -119
- package/dist/chunk-6FBMTGXQ.js.map +0 -1
- package/dist/chunk-7IAJQE27.js +0 -228
- package/dist/chunk-7IAJQE27.js.map +0 -1
- package/dist/chunk-DGJI4VNO.js +0 -3
- package/dist/chunk-DGJI4VNO.js.map +0 -1
- package/dist/chunk-FJZK3PY6.js.map +0 -1
- package/dist/chunk-IUGKH376.js.map +0 -1
- package/dist/chunk-RZU2FFBW.js.map +0 -1
- package/dist/chunk-ZTQU4GMY.js.map +0 -1
- package/dist/index.css +0 -1313
- package/dist/index.css.map +0 -1
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { jsxs } from "react/jsx-runtime";
|
|
2
|
+
import clsx from "clsx";
|
|
3
|
+
import { useEffect } from "react";
|
|
4
|
+
import { useTabsContext } from "./TabsContext";
|
|
5
|
+
import { useTabsListContext } from "./TabsListContext";
|
|
6
|
+
function TabsTrigger({
|
|
7
|
+
value,
|
|
8
|
+
icon,
|
|
9
|
+
disabled,
|
|
10
|
+
className,
|
|
11
|
+
children,
|
|
12
|
+
...rest
|
|
13
|
+
}) {
|
|
14
|
+
const {
|
|
15
|
+
value: activeValue,
|
|
16
|
+
onValueChange,
|
|
17
|
+
variant,
|
|
18
|
+
prefix
|
|
19
|
+
} = useTabsContext();
|
|
20
|
+
const { registerTrigger, unregisterTrigger, getTriggers, isDisabled } = useTabsListContext();
|
|
21
|
+
const isActive = value === activeValue;
|
|
22
|
+
const getTabId = (val) => prefix ? `tab-${prefix}-${val}` : `tab-${val}`;
|
|
23
|
+
const getTabPanelId = (val) => prefix ? `tabpanel-${prefix}-${val}` : `tabpanel-${val}`;
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
registerTrigger(value, disabled);
|
|
26
|
+
return () => {
|
|
27
|
+
unregisterTrigger(value);
|
|
28
|
+
};
|
|
29
|
+
}, [value, disabled, registerTrigger, unregisterTrigger]);
|
|
30
|
+
const handleClick = () => {
|
|
31
|
+
if (!disabled) {
|
|
32
|
+
onValueChange(value);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
const findNextEnabledTab = (triggers, startIndex, direction) => {
|
|
36
|
+
const length = triggers.length;
|
|
37
|
+
let index = startIndex;
|
|
38
|
+
for (let i = 0; i < length; i++) {
|
|
39
|
+
index = (index + direction + length) % length;
|
|
40
|
+
if (!isDisabled(triggers[index])) {
|
|
41
|
+
return index;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return startIndex;
|
|
45
|
+
};
|
|
46
|
+
const handleKeyDown = (event) => {
|
|
47
|
+
if (disabled) return;
|
|
48
|
+
const triggers = getTriggers();
|
|
49
|
+
const currentIndex = triggers.indexOf(value);
|
|
50
|
+
let newIndex = currentIndex;
|
|
51
|
+
switch (event.key) {
|
|
52
|
+
case "ArrowLeft":
|
|
53
|
+
event.preventDefault();
|
|
54
|
+
newIndex = findNextEnabledTab(triggers, currentIndex, -1);
|
|
55
|
+
break;
|
|
56
|
+
case "ArrowRight":
|
|
57
|
+
event.preventDefault();
|
|
58
|
+
newIndex = findNextEnabledTab(triggers, currentIndex, 1);
|
|
59
|
+
break;
|
|
60
|
+
case "Home":
|
|
61
|
+
event.preventDefault();
|
|
62
|
+
newIndex = 0;
|
|
63
|
+
while (newIndex < triggers.length && isDisabled(triggers[newIndex])) {
|
|
64
|
+
newIndex++;
|
|
65
|
+
}
|
|
66
|
+
break;
|
|
67
|
+
case "End":
|
|
68
|
+
event.preventDefault();
|
|
69
|
+
newIndex = triggers.length - 1;
|
|
70
|
+
while (newIndex >= 0 && isDisabled(triggers[newIndex])) {
|
|
71
|
+
newIndex--;
|
|
72
|
+
}
|
|
73
|
+
break;
|
|
74
|
+
default:
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
const newValue = triggers[newIndex];
|
|
78
|
+
if (newValue && newValue !== value) {
|
|
79
|
+
onValueChange(newValue);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
return /* @__PURE__ */ jsxs(
|
|
83
|
+
"button",
|
|
84
|
+
{
|
|
85
|
+
type: "button",
|
|
86
|
+
role: "tab",
|
|
87
|
+
"aria-selected": isActive ? "true" : "false",
|
|
88
|
+
"aria-controls": getTabPanelId(value),
|
|
89
|
+
id: getTabId(value),
|
|
90
|
+
tabIndex: isActive ? 0 : -1,
|
|
91
|
+
disabled,
|
|
92
|
+
className: clsx(
|
|
93
|
+
"ui:px-4 ui:py-2 ui:font-roboto ui:text-sm ui:font-medium",
|
|
94
|
+
"ui:flex ui:items-center ui:gap-2",
|
|
95
|
+
"ui:transition-colors ui:duration-200",
|
|
96
|
+
"focus-visible:ui:outline-none focus-visible:ui:ring-2 focus-visible:ui:ring-ring focus-visible:ui:ring-offset-2",
|
|
97
|
+
!disabled && "ui:cursor-pointer",
|
|
98
|
+
variant === "underline" && [
|
|
99
|
+
"ui:relative ui:border-b-2 ui:border-transparent ui:-mb-px",
|
|
100
|
+
isActive ? "ui:text-primary ui:border-primary" : "ui:text-foreground hover:ui:text-foreground",
|
|
101
|
+
disabled && "ui:text-muted-foreground/50 ui:cursor-not-allowed hover:ui:text-muted-foreground/50"
|
|
102
|
+
],
|
|
103
|
+
variant === "pills" && [
|
|
104
|
+
"ui:rounded-md",
|
|
105
|
+
isActive ? "ui:bg-primary ui:shadow-sm" : "ui:text-foreground hover:ui:text-foreground",
|
|
106
|
+
disabled && "ui:text-muted-foreground/50 ui:cursor-not-allowed hover:ui:text-muted-foreground/50"
|
|
107
|
+
],
|
|
108
|
+
className
|
|
109
|
+
),
|
|
110
|
+
onClick: handleClick,
|
|
111
|
+
onKeyDown: handleKeyDown,
|
|
112
|
+
...rest,
|
|
113
|
+
children: [
|
|
114
|
+
icon && icon,
|
|
115
|
+
children
|
|
116
|
+
]
|
|
117
|
+
}
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
var TabsTrigger_default = TabsTrigger;
|
|
121
|
+
export {
|
|
122
|
+
TabsTrigger_default as default
|
|
123
|
+
};
|
|
124
|
+
//# sourceMappingURL=TabsTrigger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/Tabs/TabsTrigger.tsx"],"sourcesContent":["import clsx from 'clsx'\nimport { useEffect } from 'react'\n\nimport { useTabsContext } from './TabsContext'\nimport { useTabsListContext } from './TabsListContext'\n\nimport type { ButtonHTMLAttributes, KeyboardEvent, ReactNode } from 'react'\n\nexport interface TabsTriggerProps\n extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Value that identifies this tab */\n value: string\n /** Optional icon component */\n icon?: ReactNode\n}\n\nfunction TabsTrigger({\n value,\n icon,\n disabled,\n className,\n children,\n ...rest\n}: Readonly<TabsTriggerProps>) {\n const {\n value: activeValue,\n onValueChange,\n variant,\n prefix,\n } = useTabsContext()\n const { registerTrigger, unregisterTrigger, getTriggers, isDisabled } =\n useTabsListContext()\n\n const isActive = value === activeValue\n\n const getTabId = (val: string) =>\n prefix ? `tab-${prefix}-${val}` : `tab-${val}`\n const getTabPanelId = (val: string) =>\n prefix ? `tabpanel-${prefix}-${val}` : `tabpanel-${val}`\n\n useEffect(() => {\n registerTrigger(value, disabled)\n return () => {\n unregisterTrigger(value)\n }\n }, [value, disabled, registerTrigger, unregisterTrigger])\n\n const handleClick = () => {\n if (!disabled) {\n onValueChange(value)\n }\n }\n\n const findNextEnabledTab = (\n triggers: string[],\n startIndex: number,\n direction: 1 | -1\n ): number => {\n const length = triggers.length\n let index = startIndex\n\n for (let i = 0; i < length; i++) {\n index = (index + direction + length) % length\n if (!isDisabled(triggers[index])) {\n return index\n }\n }\n return startIndex\n }\n\n const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n if (disabled) return\n\n const triggers = getTriggers()\n const currentIndex = triggers.indexOf(value)\n let newIndex = currentIndex\n\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault()\n newIndex = findNextEnabledTab(triggers, currentIndex, -1)\n break\n case 'ArrowRight':\n event.preventDefault()\n newIndex = findNextEnabledTab(triggers, currentIndex, 1)\n break\n case 'Home':\n event.preventDefault()\n newIndex = 0\n while (newIndex < triggers.length && isDisabled(triggers[newIndex])) {\n newIndex++\n }\n break\n case 'End':\n event.preventDefault()\n newIndex = triggers.length - 1\n while (newIndex >= 0 && isDisabled(triggers[newIndex])) {\n newIndex--\n }\n break\n default:\n return\n }\n\n const newValue = triggers[newIndex]\n if (newValue && newValue !== value) {\n onValueChange(newValue)\n }\n }\n\n return (\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive ? 'true' : 'false'}\n aria-controls={getTabPanelId(value)}\n id={getTabId(value)}\n tabIndex={isActive ? 0 : -1}\n disabled={disabled}\n className={clsx(\n 'ui:px-4 ui:py-2 ui:font-roboto ui:text-sm ui:font-medium',\n 'ui:flex ui:items-center ui:gap-2',\n 'ui:transition-colors ui:duration-200',\n 'focus-visible:ui:outline-none focus-visible:ui:ring-2 focus-visible:ui:ring-ring focus-visible:ui:ring-offset-2',\n !disabled && 'ui:cursor-pointer',\n variant === 'underline' && [\n 'ui:relative ui:border-b-2 ui:border-transparent ui:-mb-px',\n isActive\n ? 'ui:text-primary ui:border-primary'\n : 'ui:text-foreground hover:ui:text-foreground',\n disabled &&\n 'ui:text-muted-foreground/50 ui:cursor-not-allowed hover:ui:text-muted-foreground/50',\n ],\n variant === 'pills' && [\n 'ui:rounded-md',\n isActive\n ? 'ui:bg-primary ui:shadow-sm'\n : 'ui:text-foreground hover:ui:text-foreground',\n disabled &&\n 'ui:text-muted-foreground/50 ui:cursor-not-allowed hover:ui:text-muted-foreground/50',\n ],\n className\n )}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n {...rest}\n >\n {icon && icon}\n {children}\n </button>\n )\n}\n\nexport default TabsTrigger\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { default as Tabs, TabsProps, TabsVariant } from './Tabs.js';
|
|
2
|
+
export { TabsListProps } from './TabsList.js';
|
|
3
|
+
export { TabsTriggerProps } from './TabsTrigger.js';
|
|
4
|
+
export { TabsPanelProps } from './TabsPanel.js';
|
|
5
|
+
import 'react/jsx-runtime';
|
|
6
|
+
import 'react';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/Tabs/index.ts"],"sourcesContent":["export { default as Tabs } from './Tabs'\nexport type { TabsProps, TabsVariant } from './Tabs'\nexport type { TabsListProps } from './TabsList'\nexport type { TabsTriggerProps } from './TabsTrigger'\nexport type { TabsPanelProps } from './TabsPanel'\n"],"mappings":"AAAA,SAAoB,WAAXA,gBAAuB;","names":["default"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { AvatarSize } from '../Avatar/Avatar.js';
|
|
3
|
+
import { HTMLAttributes } from 'react';
|
|
4
|
+
|
|
5
|
+
interface TalentProps extends HTMLAttributes<HTMLDivElement> {
|
|
6
|
+
/** Full name of the talent (actor, director, writer, etc.) */
|
|
7
|
+
name?: string;
|
|
8
|
+
/** Role or job title (e.g., "Director", "Screenplay", "Character Name") */
|
|
9
|
+
role?: string;
|
|
10
|
+
/** Optional profile image URL */
|
|
11
|
+
imageSrc?: string;
|
|
12
|
+
/** Layout variant - vertical for crew/cast cards, horizontal for lists */
|
|
13
|
+
variant?: 'vertical' | 'horizontal';
|
|
14
|
+
/** Avatar size */
|
|
15
|
+
size?: AvatarSize;
|
|
16
|
+
}
|
|
17
|
+
declare function Talent({ name, role, imageSrc, variant, size, className, ...rest }: Readonly<TalentProps>): react_jsx_runtime.JSX.Element;
|
|
18
|
+
|
|
19
|
+
export { type TalentProps, Talent as default };
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import clsx from "clsx";
|
|
3
|
+
import { Avatar } from "../Avatar";
|
|
4
|
+
import { Typography } from "../Typography";
|
|
5
|
+
function Talent({
|
|
6
|
+
name,
|
|
7
|
+
role,
|
|
8
|
+
imageSrc,
|
|
9
|
+
variant = "vertical",
|
|
10
|
+
size = "lg",
|
|
11
|
+
className,
|
|
12
|
+
...rest
|
|
13
|
+
}) {
|
|
14
|
+
return /* @__PURE__ */ jsxs(
|
|
15
|
+
"div",
|
|
16
|
+
{
|
|
17
|
+
className: clsx(
|
|
18
|
+
"ui:flex ui:items-center",
|
|
19
|
+
{
|
|
20
|
+
"ui:flex-col ui:text-center ui:gap-3": variant === "vertical",
|
|
21
|
+
"ui:flex-row ui:gap-4": variant === "horizontal"
|
|
22
|
+
},
|
|
23
|
+
className
|
|
24
|
+
),
|
|
25
|
+
"data-testid": "talent",
|
|
26
|
+
...rest,
|
|
27
|
+
children: [
|
|
28
|
+
/* @__PURE__ */ jsx(
|
|
29
|
+
Avatar,
|
|
30
|
+
{
|
|
31
|
+
testId: "avatar",
|
|
32
|
+
src: imageSrc,
|
|
33
|
+
alt: name ?? "Unknown",
|
|
34
|
+
size
|
|
35
|
+
}
|
|
36
|
+
),
|
|
37
|
+
/* @__PURE__ */ jsxs(
|
|
38
|
+
"div",
|
|
39
|
+
{
|
|
40
|
+
className: clsx({ "ui:flex ui:flex-col": variant === "horizontal" }),
|
|
41
|
+
children: [
|
|
42
|
+
/* @__PURE__ */ jsx(
|
|
43
|
+
Typography,
|
|
44
|
+
{
|
|
45
|
+
variant: "body",
|
|
46
|
+
className: "ui:font-semibold ui:text-foreground",
|
|
47
|
+
children: name ?? "Unknown"
|
|
48
|
+
}
|
|
49
|
+
),
|
|
50
|
+
/* @__PURE__ */ jsx(
|
|
51
|
+
Typography,
|
|
52
|
+
{
|
|
53
|
+
variant: "caption",
|
|
54
|
+
className: "ui:text-muted-foreground ui:[.media-section:nth-of-type(odd)_&]:text-badge-foreground",
|
|
55
|
+
children: role ?? "N/A"
|
|
56
|
+
}
|
|
57
|
+
)
|
|
58
|
+
]
|
|
59
|
+
}
|
|
60
|
+
)
|
|
61
|
+
]
|
|
62
|
+
}
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
var Talent_default = Talent;
|
|
66
|
+
export {
|
|
67
|
+
Talent_default as default
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=Talent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/Talent/Talent.tsx"],"sourcesContent":["import clsx from 'clsx'\n\nimport { Avatar } from '../Avatar'\nimport { Typography } from '../Typography'\n\nimport type { AvatarSize } from '../Avatar'\nimport type { HTMLAttributes } from 'react'\n\nexport interface TalentProps extends HTMLAttributes<HTMLDivElement> {\n /** Full name of the talent (actor, director, writer, etc.) */\n name?: string\n /** Role or job title (e.g., \"Director\", \"Screenplay\", \"Character Name\") */\n role?: string\n /** Optional profile image URL */\n imageSrc?: string\n /** Layout variant - vertical for crew/cast cards, horizontal for lists */\n variant?: 'vertical' | 'horizontal'\n /** Avatar size */\n size?: AvatarSize\n}\n\nfunction Talent({\n name,\n role,\n imageSrc,\n variant = 'vertical',\n size = 'lg',\n className,\n ...rest\n}: Readonly<TalentProps>) {\n return (\n <div\n className={clsx(\n 'ui:flex ui:items-center',\n {\n 'ui:flex-col ui:text-center ui:gap-3': variant === 'vertical',\n 'ui:flex-row ui:gap-4': variant === 'horizontal',\n },\n className\n )}\n data-testid=\"talent\"\n {...rest}\n >\n <Avatar\n testId=\"avatar\"\n src={imageSrc}\n alt={name ?? 'Unknown'}\n size={size}\n />\n <div\n className={clsx({ 'ui:flex ui:flex-col': variant === 'horizontal' })}\n >\n <Typography\n variant=\"body\"\n className=\"ui:font-semibold ui:text-foreground\"\n >\n {name ?? 'Unknown'}\n </Typography>\n <Typography\n variant=\"caption\"\n className=\"ui:text-muted-foreground ui:[.media-section:nth-of-type(odd)_&]:text-badge-foreground\"\n >\n {role ?? 'N/A'}\n </Typography>\n </div>\n </div>\n )\n}\n\nexport default Talent\n"],"mappings":"AA2CM,cAMA,YANA;AA3CN,OAAO,UAAU;AAEjB,SAAS,cAAc;AACvB,SAAS,kBAAkB;AAkB3B,SAAS,OAAO;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,OAAO;AAAA,EACP;AAAA,EACA,GAAG;AACL,GAA0B;AACxB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,UACE,uCAAuC,YAAY;AAAA,UACnD,wBAAwB,YAAY;AAAA,QACtC;AAAA,QACA;AAAA,MACF;AAAA,MACA,eAAY;AAAA,MACX,GAAG;AAAA,MAEJ;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,QAAO;AAAA,YACP,KAAK;AAAA,YACL,KAAK,QAAQ;AAAA,YACb;AAAA;AAAA,QACF;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,KAAK,EAAE,uBAAuB,YAAY,aAAa,CAAC;AAAA,YAEnE;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,SAAQ;AAAA,kBACR,WAAU;AAAA,kBAET,kBAAQ;AAAA;AAAA,cACX;AAAA,cACA;AAAA,gBAAC;AAAA;AAAA,kBACC,SAAQ;AAAA,kBACR,WAAU;AAAA,kBAET,kBAAQ;AAAA;AAAA,cACX;AAAA;AAAA;AAAA,QACF;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,iBAAQ;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/Talent/index.ts"],"sourcesContent":["export { default as Talent } from './Talent'\nexport type { TalentProps } from './Talent'\n"],"mappings":"AAAA,SAAoB,WAAXA,gBAAyB;","names":["default"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
interface TrailerCardProps {
|
|
4
|
+
/** YouTube video ID */
|
|
5
|
+
videoKey: string;
|
|
6
|
+
/** Trailer title/name */
|
|
7
|
+
title: string;
|
|
8
|
+
/** Video type (Trailer, Clip, Featurette, etc.) */
|
|
9
|
+
type?: string;
|
|
10
|
+
/** Additional className for the card */
|
|
11
|
+
className?: string;
|
|
12
|
+
}
|
|
13
|
+
declare function TrailerCard({ videoKey, title, type, className, }: Readonly<TrailerCardProps>): react_jsx_runtime.JSX.Element;
|
|
14
|
+
|
|
15
|
+
export { type TrailerCardProps, TrailerCard as default };
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import clsx from "clsx";
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import { Button } from "../Button";
|
|
5
|
+
import { Modal } from "../Modal";
|
|
6
|
+
function TrailerCard({
|
|
7
|
+
videoKey,
|
|
8
|
+
title,
|
|
9
|
+
type = "Trailer",
|
|
10
|
+
className
|
|
11
|
+
}) {
|
|
12
|
+
const [isPlaying, setIsPlaying] = useState(false);
|
|
13
|
+
const thumbnailUrl = `https://img.youtube.com/vi/${videoKey}/hqdefault.jpg`;
|
|
14
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
15
|
+
/* @__PURE__ */ jsxs(
|
|
16
|
+
"button",
|
|
17
|
+
{
|
|
18
|
+
className: clsx(
|
|
19
|
+
"ui:group ui:relative ui:flex ui:aspect-video ui:w-full ui:cursor-pointer ui:overflow-hidden ui:rounded-lg ui:bg-gray-200",
|
|
20
|
+
"ui:transition-transform ui:duration-200 hover:ui:scale-[1.02]",
|
|
21
|
+
className
|
|
22
|
+
),
|
|
23
|
+
onClick: () => {
|
|
24
|
+
setIsPlaying(true);
|
|
25
|
+
},
|
|
26
|
+
tabIndex: 0,
|
|
27
|
+
"aria-label": `Play ${title}`,
|
|
28
|
+
children: [
|
|
29
|
+
/* @__PURE__ */ jsx(
|
|
30
|
+
"img",
|
|
31
|
+
{
|
|
32
|
+
src: thumbnailUrl,
|
|
33
|
+
alt: title,
|
|
34
|
+
className: "ui:h-full ui:w-full ui:object-cover",
|
|
35
|
+
loading: "lazy"
|
|
36
|
+
}
|
|
37
|
+
),
|
|
38
|
+
/* @__PURE__ */ jsx("div", { className: "ui:absolute ui:inset-0 ui:flex ui:items-center ui:justify-center ui:bg-black/30 ui:opacity-0 ui:transition-opacity ui:duration-200 group-hover:ui:opacity-100", children: /* @__PURE__ */ jsx("div", { className: "ui:flex ui:items-center ui:justify-center ui:h-16 ui:w-16 ui:rounded-full ui:bg-white/90", children: /* @__PURE__ */ jsx("span", { className: "ui:text-2xl ui:ml-1", children: "\u25B6" }) }) }),
|
|
39
|
+
type && /* @__PURE__ */ jsx("div", { className: "ui:absolute ui:bottom-2 ui:left-2 ui:rounded ui:bg-black/80 ui:px-2 ui:py-1 ui:text-xs ui:font-semibold ui:text-white", children: type })
|
|
40
|
+
]
|
|
41
|
+
}
|
|
42
|
+
),
|
|
43
|
+
/* @__PURE__ */ jsx(
|
|
44
|
+
Modal,
|
|
45
|
+
{
|
|
46
|
+
isOpen: isPlaying,
|
|
47
|
+
onClose: () => {
|
|
48
|
+
setIsPlaying(false);
|
|
49
|
+
},
|
|
50
|
+
"aria-label": `Play ${title}`,
|
|
51
|
+
children: /* @__PURE__ */ jsxs("div", { className: "ui:flex ui:h-full ui:w-full ui:items-center ui:justify-center ui:p-4", children: [
|
|
52
|
+
/* @__PURE__ */ jsx(
|
|
53
|
+
Button,
|
|
54
|
+
{
|
|
55
|
+
icon: "XMark",
|
|
56
|
+
size: "sm",
|
|
57
|
+
variant: "ghost",
|
|
58
|
+
iconPosition: "left",
|
|
59
|
+
onClick: () => {
|
|
60
|
+
setIsPlaying(false);
|
|
61
|
+
},
|
|
62
|
+
className: "ui:absolute ui:top-4 ui:right-4 ui:text-white hover:ui:bg-white/10 ui:z-10 ui:focus:border-none",
|
|
63
|
+
"aria-label": "Close video",
|
|
64
|
+
children: "Close video"
|
|
65
|
+
}
|
|
66
|
+
),
|
|
67
|
+
isPlaying && /* @__PURE__ */ jsx(
|
|
68
|
+
"iframe",
|
|
69
|
+
{
|
|
70
|
+
className: "ui:w-full ui:max-w-4xl ui:aspect-video ui:rounded-lg",
|
|
71
|
+
src: `https://www.youtube.com/embed/${videoKey}`,
|
|
72
|
+
title,
|
|
73
|
+
allow: "accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture",
|
|
74
|
+
allowFullScreen: true
|
|
75
|
+
}
|
|
76
|
+
)
|
|
77
|
+
] })
|
|
78
|
+
}
|
|
79
|
+
)
|
|
80
|
+
] });
|
|
81
|
+
}
|
|
82
|
+
var TrailerCard_default = TrailerCard;
|
|
83
|
+
export {
|
|
84
|
+
TrailerCard_default as default
|
|
85
|
+
};
|
|
86
|
+
//# sourceMappingURL=TrailerCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/TrailerCard/TrailerCard.tsx"],"sourcesContent":["import clsx from 'clsx'\nimport { useState } from 'react'\n\nimport { Button } from '../Button'\nimport { Modal } from '../Modal'\n\nexport interface TrailerCardProps {\n /** YouTube video ID */\n videoKey: string\n /** Trailer title/name */\n title: string\n /** Video type (Trailer, Clip, Featurette, etc.) */\n type?: string\n /** Additional className for the card */\n className?: string\n}\n\nfunction TrailerCard({\n videoKey,\n title,\n type = 'Trailer',\n className,\n}: Readonly<TrailerCardProps>) {\n const [isPlaying, setIsPlaying] = useState(false)\n\n const thumbnailUrl = `https://img.youtube.com/vi/${videoKey}/hqdefault.jpg`\n\n return (\n <>\n {/* Thumbnail card with play button overlay */}\n <button\n className={clsx(\n 'ui:group ui:relative ui:flex ui:aspect-video ui:w-full ui:cursor-pointer ui:overflow-hidden ui:rounded-lg ui:bg-gray-200',\n 'ui:transition-transform ui:duration-200 hover:ui:scale-[1.02]',\n className\n )}\n onClick={() => {\n setIsPlaying(true)\n }}\n tabIndex={0}\n aria-label={`Play ${title}`}\n >\n {/* Thumbnail image */}\n <img\n src={thumbnailUrl}\n alt={title}\n className=\"ui:h-full ui:w-full ui:object-cover\"\n loading=\"lazy\"\n />\n\n {/* Play button overlay */}\n <div className=\"ui:absolute ui:inset-0 ui:flex ui:items-center ui:justify-center ui:bg-black/30 ui:opacity-0 ui:transition-opacity ui:duration-200 group-hover:ui:opacity-100\">\n <div className=\"ui:flex ui:items-center ui:justify-center ui:h-16 ui:w-16 ui:rounded-full ui:bg-white/90\">\n <span className=\"ui:text-2xl ui:ml-1\">▶</span>\n </div>\n </div>\n\n {/* Type badge */}\n {type && (\n <div className=\"ui:absolute ui:bottom-2 ui:left-2 ui:rounded ui:bg-black/80 ui:px-2 ui:py-1 ui:text-xs ui:font-semibold ui:text-white\">\n {type}\n </div>\n )}\n </button>\n\n {/* Modal with YouTube embed */}\n <Modal\n isOpen={isPlaying}\n onClose={() => {\n setIsPlaying(false)\n }}\n aria-label={`Play ${title}`}\n >\n {/* Inner wrapper: flex centering — must NOT be on <dialog> itself to preserve display:none when closed */}\n <div className=\"ui:flex ui:h-full ui:w-full ui:items-center ui:justify-center ui:p-4\">\n {/* Close button */}\n <Button\n icon=\"XMark\"\n size=\"sm\"\n variant=\"ghost\"\n iconPosition=\"left\"\n onClick={() => {\n setIsPlaying(false)\n }}\n className=\"ui:absolute ui:top-4 ui:right-4 ui:text-white hover:ui:bg-white/10 ui:z-10 ui:focus:border-none\"\n aria-label=\"Close video\"\n >\n Close video\n </Button>\n\n {/* Responsive 16:9 iframe container */}\n {isPlaying && (\n <iframe\n className=\"ui:w-full ui:max-w-4xl ui:aspect-video ui:rounded-lg\"\n src={`https://www.youtube.com/embed/${videoKey}`}\n title={title}\n allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n />\n )}\n </div>\n </Modal>\n </>\n )\n}\n\nexport default TrailerCard\n"],"mappings":"AA4BI,mBAeI,KAbF,YAFF;AA5BJ,OAAO,UAAU;AACjB,SAAS,gBAAgB;AAEzB,SAAS,cAAc;AACvB,SAAS,aAAa;AAatB,SAAS,YAAY;AAAA,EACnB;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AACF,GAA+B;AAC7B,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAEhD,QAAM,eAAe,8BAA8B,QAAQ;AAE3D,SACE,iCAEE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS,MAAM;AACb,uBAAa,IAAI;AAAA,QACnB;AAAA,QACA,UAAU;AAAA,QACV,cAAY,QAAQ,KAAK;AAAA,QAGzB;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,KAAK;AAAA,cACL,KAAK;AAAA,cACL,WAAU;AAAA,cACV,SAAQ;AAAA;AAAA,UACV;AAAA,UAGA,oBAAC,SAAI,WAAU,iKACb,8BAAC,SAAI,WAAU,4FACb,8BAAC,UAAK,WAAU,uBAAsB,oBAAC,GACzC,GACF;AAAA,UAGC,QACC,oBAAC,SAAI,WAAU,yHACZ,gBACH;AAAA;AAAA;AAAA,IAEJ;AAAA,IAGA;AAAA,MAAC;AAAA;AAAA,QACC,QAAQ;AAAA,QACR,SAAS,MAAM;AACb,uBAAa,KAAK;AAAA,QACpB;AAAA,QACA,cAAY,QAAQ,KAAK;AAAA,QAGzB,+BAAC,SAAI,WAAU,wEAEb;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,MAAK;AAAA,cACL,SAAQ;AAAA,cACR,cAAa;AAAA,cACb,SAAS,MAAM;AACb,6BAAa,KAAK;AAAA,cACpB;AAAA,cACA,WAAU;AAAA,cACV,cAAW;AAAA,cACZ;AAAA;AAAA,UAED;AAAA,UAGC,aACC;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,KAAK,iCAAiC,QAAQ;AAAA,cAC9C;AAAA,cACA,OAAM;AAAA,cACN,iBAAe;AAAA;AAAA,UACjB;AAAA,WAEJ;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;AAEA,IAAO,sBAAQ;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/TrailerCard/index.ts"],"sourcesContent":["export { default as TrailerCard } from './TrailerCard'\nexport type { TrailerCardProps } from './TrailerCard'\n"],"mappings":"AAAA,SAAoB,WAAXA,gBAA8B;","names":["default"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { HTMLAttributes, ElementType, ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
type TypographyVariant = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'body' | 'body-sm' | 'body-lg' | 'lead' | 'caption' | 'caption-xs' | 'label' | 'muted' | 'blockquote';
|
|
5
|
+
interface TypographyProps extends HTMLAttributes<HTMLElement> {
|
|
6
|
+
/** Visual style variant */
|
|
7
|
+
variant: TypographyVariant;
|
|
8
|
+
/** Override semantic HTML tag */
|
|
9
|
+
as?: ElementType;
|
|
10
|
+
/** Additional CSS classes */
|
|
11
|
+
className?: string;
|
|
12
|
+
/** Content */
|
|
13
|
+
children: ReactNode;
|
|
14
|
+
}
|
|
15
|
+
declare function Typography({ variant, as, className, children, ...rest }: Readonly<TypographyProps>): react.ReactElement<any, string | react.JSXElementConstructor<any>>;
|
|
16
|
+
|
|
17
|
+
export { type TypographyProps, type TypographyVariant, Typography as default };
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import clsx from "clsx";
|
|
2
|
+
import { createElement } from "react";
|
|
3
|
+
const variantStyles = {
|
|
4
|
+
h1: "ui:font-roboto ui:text-xl ui:sm:text-2xl ui:md:text-3xl ui:lg:text-4xl ui:font-bold ui:leading-tight ui:text-foreground",
|
|
5
|
+
h2: "ui:font-roboto ui:text-lg ui:sm:text-xl ui:md:text-2xl ui:lg:text-3xl ui:font-bold ui:leading-tight ui:text-foreground",
|
|
6
|
+
h3: "ui:font-roboto ui:text-base ui:sm:text-lg ui:md:text-xl ui:lg:text-2xl ui:font-semibold ui:leading-snug ui:text-foreground",
|
|
7
|
+
h4: "ui:font-roboto ui:text-sm ui:sm:text-base ui:md:text-lg ui:lg:text-xl ui:font-semibold ui:leading-snug ui:text-foreground",
|
|
8
|
+
h5: "ui:font-roboto ui:text-sm ui:sm:text-base ui:md:text-lg ui:font-medium ui:leading-normal ui:text-foreground",
|
|
9
|
+
h6: "ui:font-roboto ui:text-xs ui:sm:text-sm ui:md:text-base ui:font-medium ui:leading-normal ui:text-foreground",
|
|
10
|
+
body: "ui:font-inter ui:text-xs ui:sm:text-sm ui:md:text-base ui:leading-relaxed ui:text-foreground",
|
|
11
|
+
"body-sm": "ui:font-inter ui:text-xs ui:sm:text-sm ui:leading-relaxed ui:text-foreground",
|
|
12
|
+
"body-lg": "ui:font-inter ui:text-sm ui:sm:text-base ui:md:text-lg ui:leading-relaxed ui:text-foreground",
|
|
13
|
+
lead: "ui:font-inter ui:text-sm ui:sm:text-base ui:md:text-lg ui:lg:text-xl ui:leading-relaxed ui:text-muted-foreground",
|
|
14
|
+
caption: "ui:font-inter ui:text-xs ui:sm:text-sm ui:text-muted-foreground",
|
|
15
|
+
"caption-xs": "ui:font-inter ui:text-xs ui:text-muted-foreground",
|
|
16
|
+
label: "ui:font-inter ui:text-xs ui:sm:text-sm ui:font-medium ui:text-foreground",
|
|
17
|
+
muted: "ui:font-inter ui:text-xs ui:sm:text-sm ui:text-muted-foreground",
|
|
18
|
+
blockquote: "ui:font-inter ui:text-xs ui:sm:text-sm ui:md:text-base ui:border-l-4 ui:border-border ui:pl-4 ui:italic ui:text-muted-foreground"
|
|
19
|
+
};
|
|
20
|
+
const variantToTag = {
|
|
21
|
+
h1: "h1",
|
|
22
|
+
h2: "h2",
|
|
23
|
+
h3: "h3",
|
|
24
|
+
h4: "h4",
|
|
25
|
+
h5: "h5",
|
|
26
|
+
h6: "h6",
|
|
27
|
+
body: "p",
|
|
28
|
+
"body-sm": "p",
|
|
29
|
+
"body-lg": "p",
|
|
30
|
+
lead: "p",
|
|
31
|
+
caption: "span",
|
|
32
|
+
"caption-xs": "span",
|
|
33
|
+
label: "label",
|
|
34
|
+
muted: "p",
|
|
35
|
+
blockquote: "blockquote"
|
|
36
|
+
};
|
|
37
|
+
function Typography({
|
|
38
|
+
variant,
|
|
39
|
+
as,
|
|
40
|
+
className,
|
|
41
|
+
children,
|
|
42
|
+
...rest
|
|
43
|
+
}) {
|
|
44
|
+
const Component = as ?? variantToTag[variant];
|
|
45
|
+
return createElement(
|
|
46
|
+
Component,
|
|
47
|
+
{ className: clsx(variantStyles[variant], className), ...rest },
|
|
48
|
+
children
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
var Typography_default = Typography;
|
|
52
|
+
export {
|
|
53
|
+
Typography_default as default
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=Typography.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/Typography/Typography.tsx"],"sourcesContent":["import clsx from 'clsx'\nimport { createElement } from 'react'\n\nimport type { ElementType, HTMLAttributes, ReactNode } from 'react'\n\nexport type TypographyVariant =\n | 'h1'\n | 'h2'\n | 'h3'\n | 'h4'\n | 'h5'\n | 'h6'\n | 'body'\n | 'body-sm'\n | 'body-lg'\n | 'lead'\n | 'caption'\n | 'caption-xs'\n | 'label'\n | 'muted'\n | 'blockquote'\n\nexport interface TypographyProps extends HTMLAttributes<HTMLElement> {\n /** Visual style variant */\n variant: TypographyVariant\n /** Override semantic HTML tag */\n as?: ElementType\n /** Additional CSS classes */\n className?: string\n /** Content */\n children: ReactNode\n}\n\nconst variantStyles: Record<TypographyVariant, string> = {\n h1: 'ui:font-roboto ui:text-xl ui:sm:text-2xl ui:md:text-3xl ui:lg:text-4xl ui:font-bold ui:leading-tight ui:text-foreground',\n h2: 'ui:font-roboto ui:text-lg ui:sm:text-xl ui:md:text-2xl ui:lg:text-3xl ui:font-bold ui:leading-tight ui:text-foreground',\n h3: 'ui:font-roboto ui:text-base ui:sm:text-lg ui:md:text-xl ui:lg:text-2xl ui:font-semibold ui:leading-snug ui:text-foreground',\n h4: 'ui:font-roboto ui:text-sm ui:sm:text-base ui:md:text-lg ui:lg:text-xl ui:font-semibold ui:leading-snug ui:text-foreground',\n h5: 'ui:font-roboto ui:text-sm ui:sm:text-base ui:md:text-lg ui:font-medium ui:leading-normal ui:text-foreground',\n h6: 'ui:font-roboto ui:text-xs ui:sm:text-sm ui:md:text-base ui:font-medium ui:leading-normal ui:text-foreground',\n body: 'ui:font-inter ui:text-xs ui:sm:text-sm ui:md:text-base ui:leading-relaxed ui:text-foreground',\n 'body-sm':\n 'ui:font-inter ui:text-xs ui:sm:text-sm ui:leading-relaxed ui:text-foreground',\n 'body-lg':\n 'ui:font-inter ui:text-sm ui:sm:text-base ui:md:text-lg ui:leading-relaxed ui:text-foreground',\n lead: 'ui:font-inter ui:text-sm ui:sm:text-base ui:md:text-lg ui:lg:text-xl ui:leading-relaxed ui:text-muted-foreground',\n caption: 'ui:font-inter ui:text-xs ui:sm:text-sm ui:text-muted-foreground',\n 'caption-xs': 'ui:font-inter ui:text-xs ui:text-muted-foreground',\n label:\n 'ui:font-inter ui:text-xs ui:sm:text-sm ui:font-medium ui:text-foreground',\n muted: 'ui:font-inter ui:text-xs ui:sm:text-sm ui:text-muted-foreground',\n blockquote:\n 'ui:font-inter ui:text-xs ui:sm:text-sm ui:md:text-base ui:border-l-4 ui:border-border ui:pl-4 ui:italic ui:text-muted-foreground',\n}\n\nconst variantToTag: Record<TypographyVariant, ElementType> = {\n h1: 'h1',\n h2: 'h2',\n h3: 'h3',\n h4: 'h4',\n h5: 'h5',\n h6: 'h6',\n body: 'p',\n 'body-sm': 'p',\n 'body-lg': 'p',\n lead: 'p',\n caption: 'span',\n 'caption-xs': 'span',\n label: 'label',\n muted: 'p',\n blockquote: 'blockquote',\n}\n\nfunction Typography({\n variant,\n as,\n className,\n children,\n ...rest\n}: Readonly<TypographyProps>) {\n const Component = as ?? variantToTag[variant]\n\n return createElement(\n Component,\n { className: clsx(variantStyles[variant], className), ...rest },\n children\n )\n}\n\nexport default Typography\n"],"mappings":"AAAA,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAgC9B,MAAM,gBAAmD;AAAA,EACvD,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,WACE;AAAA,EACF,WACE;AAAA,EACF,MAAM;AAAA,EACN,SAAS;AAAA,EACT,cAAc;AAAA,EACd,OACE;AAAA,EACF,OAAO;AAAA,EACP,YACE;AACJ;AAEA,MAAM,eAAuD;AAAA,EAC3D,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,WAAW;AAAA,EACX,WAAW;AAAA,EACX,MAAM;AAAA,EACN,SAAS;AAAA,EACT,cAAc;AAAA,EACd,OAAO;AAAA,EACP,OAAO;AAAA,EACP,YAAY;AACd;AAEA,SAAS,WAAW;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA8B;AAC5B,QAAM,YAAY,MAAM,aAAa,OAAO;AAE5C,SAAO;AAAA,IACL;AAAA,IACA,EAAE,WAAW,KAAK,cAAc,OAAO,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC9D;AAAA,EACF;AACF;AAEA,IAAO,qBAAQ;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/Typography/index.ts"],"sourcesContent":["export { default as Typography } from './Typography'\nexport type { TypographyProps, TypographyVariant } from './Typography'\n"],"mappings":"AAAA,SAAoB,WAAXA,gBAA6B;","names":["default"]}
|