@deckai/deck-ui 0.0.22 → 0.0.23
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/README.md +0 -1
- package/dist/components/AboutCard.cjs +3 -3
- package/dist/components/AboutCard.cjs.map +1 -1
- package/dist/components/AboutCard.d.cts +1 -1
- package/dist/components/AboutCard.d.ts +1 -1
- package/dist/components/AboutCard.js +3 -3
- package/dist/components/AboutCard.js.map +1 -1
- package/dist/components/Accordion.cjs +2 -2
- package/dist/components/Accordion.cjs.map +1 -1
- package/dist/components/Accordion.js +2 -2
- package/dist/components/Accordion.js.map +1 -1
- package/dist/components/AddWorkCard.cjs +4 -4
- package/dist/components/AddWorkCard.cjs.map +1 -1
- package/dist/components/AddWorkCard.d.cts +1 -1
- package/dist/components/AddWorkCard.d.ts +1 -1
- package/dist/components/AddWorkCard.js +4 -4
- package/dist/components/AddWorkCard.js.map +1 -1
- package/dist/components/AutocompleteInput.cjs +4 -4
- package/dist/components/AutocompleteInput.cjs.map +1 -1
- package/dist/components/AutocompleteInput.d.cts +6 -6
- package/dist/components/AutocompleteInput.d.ts +6 -6
- package/dist/components/AutocompleteInput.js +4 -4
- package/dist/components/AutocompleteInput.js.map +1 -1
- package/dist/components/Avatar.cjs +1 -1
- package/dist/components/Avatar.cjs.map +1 -1
- package/dist/components/Avatar.d.cts +2 -2
- package/dist/components/Avatar.d.ts +2 -2
- package/dist/components/Avatar.js +1 -1
- package/dist/components/Avatar.js.map +1 -1
- package/dist/components/Badge.cjs +4 -4
- package/dist/components/Badge.cjs.map +1 -1
- package/dist/components/Badge.d.cts +2 -2
- package/dist/components/Badge.d.ts +2 -2
- package/dist/components/Badge.js +4 -4
- package/dist/components/Badge.js.map +1 -1
- package/dist/components/Breadcrumbs.cjs +2 -2
- package/dist/components/Breadcrumbs.cjs.map +1 -1
- package/dist/components/Breadcrumbs.js +2 -2
- package/dist/components/Breadcrumbs.js.map +1 -1
- package/dist/components/Button.cjs +5 -5
- package/dist/components/Button.cjs.map +1 -1
- package/dist/components/Button.d.cts +5 -5
- package/dist/components/Button.d.ts +5 -5
- package/dist/components/Button.js +5 -5
- package/dist/components/Button.js.map +1 -1
- package/dist/components/Carousel.cjs +1 -1
- package/dist/components/Carousel.cjs.map +1 -1
- package/dist/components/Carousel.d.cts +1 -1
- package/dist/components/Carousel.d.ts +1 -1
- package/dist/components/Carousel.js +1 -1
- package/dist/components/Carousel.js.map +1 -1
- package/dist/components/Collapsible.cjs +2 -2
- package/dist/components/Collapsible.cjs.map +1 -1
- package/dist/components/Collapsible.d.cts +4 -4
- package/dist/components/Collapsible.d.ts +4 -4
- package/dist/components/Collapsible.js +2 -2
- package/dist/components/Collapsible.js.map +1 -1
- package/dist/components/Combobox.cjs +4 -4
- package/dist/components/Combobox.cjs.map +1 -1
- package/dist/components/Combobox.d.cts +5 -2
- package/dist/components/Combobox.d.ts +5 -2
- package/dist/components/Combobox.js +4 -4
- package/dist/components/Combobox.js.map +1 -1
- package/dist/components/ContactItem.cjs +3 -3
- package/dist/components/ContactItem.cjs.map +1 -1
- package/dist/components/ContactItem.d.cts +1 -1
- package/dist/components/ContactItem.d.ts +1 -1
- package/dist/components/ContactItem.js +3 -3
- package/dist/components/ContactItem.js.map +1 -1
- package/dist/components/Dropdown.cjs +3 -3
- package/dist/components/Dropdown.cjs.map +1 -1
- package/dist/components/Dropdown.js +3 -3
- package/dist/components/Dropdown.js.map +1 -1
- package/dist/components/EditButton.cjs +5 -5
- package/dist/components/EditButton.cjs.map +1 -1
- package/dist/components/EditButton.d.cts +4 -4
- package/dist/components/EditButton.d.ts +4 -4
- package/dist/components/EditButton.js +5 -5
- package/dist/components/EditButton.js.map +1 -1
- package/dist/components/Fallback.cjs +1 -1
- package/dist/components/Fallback.cjs.map +1 -1
- package/dist/components/Fallback.js +1 -1
- package/dist/components/Fallback.js.map +1 -1
- package/dist/components/Icon.cjs +1 -1
- package/dist/components/Icon.cjs.map +1 -1
- package/dist/components/Icon.js +1 -1
- package/dist/components/Icon.js.map +1 -1
- package/dist/components/IconRenderer.cjs +1 -1
- package/dist/components/IconRenderer.cjs.map +1 -1
- package/dist/components/IconRenderer.d.cts +4 -4
- package/dist/components/IconRenderer.d.ts +4 -4
- package/dist/components/IconRenderer.js +1 -1
- package/dist/components/IconRenderer.js.map +1 -1
- package/dist/components/Input.cjs +3 -3
- package/dist/components/Input.cjs.map +1 -1
- package/dist/components/Input.d.cts +11 -11
- package/dist/components/Input.d.ts +11 -11
- package/dist/components/Input.js +3 -3
- package/dist/components/Input.js.map +1 -1
- package/dist/components/Link.cjs +4 -4
- package/dist/components/Link.cjs.map +1 -1
- package/dist/components/Link.d.cts +1 -1
- package/dist/components/Link.d.ts +1 -1
- package/dist/components/Link.js +4 -4
- package/dist/components/Link.js.map +1 -1
- package/dist/components/Logo.cjs +1 -1
- package/dist/components/Logo.cjs.map +1 -1
- package/dist/components/Logo.d.cts +1 -1
- package/dist/components/Logo.d.ts +1 -1
- package/dist/components/Logo.js +1 -1
- package/dist/components/Logo.js.map +1 -1
- package/dist/components/Modal.cjs +1 -1
- package/dist/components/Modal.cjs.map +1 -1
- package/dist/components/Modal.d.cts +4 -4
- package/dist/components/Modal.d.ts +4 -4
- package/dist/components/Modal.js +1 -1
- package/dist/components/Modal.js.map +1 -1
- package/dist/components/MultiSelectCombobox.cjs +2 -2
- package/dist/components/MultiSelectCombobox.cjs.map +1 -1
- package/dist/components/MultiSelectCombobox.d.cts +1 -1
- package/dist/components/MultiSelectCombobox.d.ts +1 -1
- package/dist/components/MultiSelectCombobox.js +2 -2
- package/dist/components/MultiSelectCombobox.js.map +1 -1
- package/dist/components/Navbar.cjs +7 -7
- package/dist/components/Navbar.cjs.map +1 -1
- package/dist/components/Navbar.d.cts +1 -1
- package/dist/components/Navbar.d.ts +1 -1
- package/dist/components/Navbar.js +7 -7
- package/dist/components/Navbar.js.map +1 -1
- package/dist/components/NavbarItem.cjs +4 -4
- package/dist/components/NavbarItem.cjs.map +1 -1
- package/dist/components/NavbarItem.d.cts +1 -1
- package/dist/components/NavbarItem.d.ts +1 -1
- package/dist/components/NavbarItem.js +4 -4
- package/dist/components/NavbarItem.js.map +1 -1
- package/dist/components/Option.cjs +2 -2
- package/dist/components/Option.cjs.map +1 -1
- package/dist/components/Option.js +2 -2
- package/dist/components/Option.js.map +1 -1
- package/dist/components/Pressable.cjs +1 -1
- package/dist/components/Pressable.cjs.map +1 -1
- package/dist/components/Pressable.js +1 -1
- package/dist/components/Pressable.js.map +1 -1
- package/dist/components/ProfileCard.cjs +2 -2
- package/dist/components/ProfileCard.cjs.map +1 -1
- package/dist/components/ProfileCard.d.cts +1 -1
- package/dist/components/ProfileCard.d.ts +1 -1
- package/dist/components/ProfileCard.js +2 -2
- package/dist/components/ProfileCard.js.map +1 -1
- package/dist/components/ProgressBar.cjs +3 -3
- package/dist/components/ProgressBar.cjs.map +1 -1
- package/dist/components/ProgressBar.js +3 -3
- package/dist/components/ProgressBar.js.map +1 -1
- package/dist/components/RadioGroup.cjs +3 -3
- package/dist/components/RadioGroup.cjs.map +1 -1
- package/dist/components/RadioGroup.js +3 -3
- package/dist/components/RadioGroup.js.map +1 -1
- package/dist/components/SegmentedTabs.cjs +4 -4
- package/dist/components/SegmentedTabs.cjs.map +1 -1
- package/dist/components/SegmentedTabs.js +4 -4
- package/dist/components/SegmentedTabs.js.map +1 -1
- package/dist/components/Sidebar.cjs +1 -1
- package/dist/components/Sidebar.cjs.map +1 -1
- package/dist/components/Sidebar.d.cts +1 -1
- package/dist/components/Sidebar.d.ts +1 -1
- package/dist/components/Sidebar.js +1 -1
- package/dist/components/Sidebar.js.map +1 -1
- package/dist/components/SlideButton.cjs +1 -1
- package/dist/components/SlideButton.cjs.map +1 -1
- package/dist/components/SlideButton.js +1 -1
- package/dist/components/SlideButton.js.map +1 -1
- package/dist/components/Slider.cjs.map +1 -1
- package/dist/components/Slider.js.map +1 -1
- package/dist/components/SocialCard.cjs +4 -4
- package/dist/components/SocialCard.cjs.map +1 -1
- package/dist/components/SocialCard.d.cts +1 -1
- package/dist/components/SocialCard.d.ts +1 -1
- package/dist/components/SocialCard.js +4 -4
- package/dist/components/SocialCard.js.map +1 -1
- package/dist/components/Spinner.cjs +1 -1
- package/dist/components/Spinner.cjs.map +1 -1
- package/dist/components/Spinner.d.cts +2 -2
- package/dist/components/Spinner.d.ts +2 -2
- package/dist/components/Spinner.js +1 -1
- package/dist/components/Spinner.js.map +1 -1
- package/dist/components/Switch.cjs.map +1 -1
- package/dist/components/Switch.d.cts +2 -2
- package/dist/components/Switch.d.ts +2 -2
- package/dist/components/Switch.js.map +1 -1
- package/dist/components/Tabs.cjs +3 -3
- package/dist/components/Tabs.cjs.map +1 -1
- package/dist/components/Tabs.js +3 -3
- package/dist/components/Tabs.js.map +1 -1
- package/dist/components/Tag.cjs +3 -3
- package/dist/components/Tag.cjs.map +1 -1
- package/dist/components/Tag.d.cts +1 -1
- package/dist/components/Tag.d.ts +1 -1
- package/dist/components/Tag.js +3 -3
- package/dist/components/Tag.js.map +1 -1
- package/dist/components/Text.cjs +1 -1
- package/dist/components/Text.cjs.map +1 -1
- package/dist/components/Text.d.cts +1 -1
- package/dist/components/Text.d.ts +1 -1
- package/dist/components/Text.js +1 -1
- package/dist/components/Text.js.map +1 -1
- package/dist/components/TextArea.cjs +4 -4
- package/dist/components/TextArea.cjs.map +1 -1
- package/dist/components/TextArea.d.cts +1 -1
- package/dist/components/TextArea.d.ts +1 -1
- package/dist/components/TextArea.js +4 -4
- package/dist/components/TextArea.js.map +1 -1
- package/dist/components/Toast.cjs +3 -3
- package/dist/components/Toast.cjs.map +1 -1
- package/dist/components/Toast.d.cts +7 -7
- package/dist/components/Toast.d.ts +7 -7
- package/dist/components/Toast.js +3 -3
- package/dist/components/Toast.js.map +1 -1
- package/dist/components/ToastProvider.cjs +1 -1
- package/dist/components/ToastProvider.cjs.map +1 -1
- package/dist/components/ToastProvider.d.cts +1 -1
- package/dist/components/ToastProvider.d.ts +1 -1
- package/dist/components/ToastProvider.js +1 -1
- package/dist/components/ToastProvider.js.map +1 -1
- package/dist/components/Tooltip.cjs +3 -3
- package/dist/components/Tooltip.cjs.map +1 -1
- package/dist/components/Tooltip.d.cts +1 -1
- package/dist/components/Tooltip.d.ts +1 -1
- package/dist/components/Tooltip.js +3 -3
- package/dist/components/Tooltip.js.map +1 -1
- package/dist/components/VideoPlayer.cjs +2 -2
- package/dist/components/VideoPlayer.cjs.map +1 -1
- package/dist/components/VideoPlayer.d.cts +4 -4
- package/dist/components/VideoPlayer.d.ts +4 -4
- package/dist/components/VideoPlayer.js +2 -2
- package/dist/components/VideoPlayer.js.map +1 -1
- package/dist/components/WorkCard.cjs +3 -3
- package/dist/components/WorkCard.cjs.map +1 -1
- package/dist/components/WorkCard.d.cts +1 -1
- package/dist/components/WorkCard.d.ts +1 -1
- package/dist/components/WorkCard.js +3 -3
- package/dist/components/WorkCard.js.map +1 -1
- package/dist/index.cjs +8 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +39 -39
- package/dist/index.d.ts +39 -39
- package/dist/index.js +8 -8
- package/dist/index.js.map +1 -1
- package/dist/styles/styles.css +1 -1
- package/package.json +2 -2
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import*as
|
|
1
|
+
import*as m from'react';import m__default,{useState,useCallback}from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {IconMap}from'@deckai/icons';var I={xl:"h1",lg:"h1",md:"h2",sm:"h3",xs:"h4"},V=e=>{let[t,o]=e.split("-");return t==="heading"?I[o]||"p":t==="label"?"label":"p"},j={light:"font-light",regular:"font-regular",semibold:"font-semibold",bold:"font-bold"},K=e=>e?(Array.isArray(e)?e:[e]).map(o=>{if(o.includes(":")){let[r,s]=o.split(":");return `${r}:text-${s}`}return `text-${o}`}).join(" "):"text-body-default",h=m__default.forwardRef(({variant:e="body-default",color:t="primary",as:o,className:r,children:s,weight:l,...n},p)=>{let d=K(e),i=t==="inherit"?"text-inherit":`text-${t}`,c=m__default.useMemo(()=>{let g=typeof e=="string"?e.split(":").pop():Array.isArray(e)?e[0].split(":").pop():"body-default";return V(g)},[e]);return m__default.createElement(o||c,{ref:p,className:`
|
|
2
2
|
font-sans antialiased
|
|
3
3
|
${d}
|
|
4
4
|
${i}
|
|
5
5
|
${l&&`!${j[l]}`}
|
|
6
6
|
${r}
|
|
7
|
-
`,...n},s)});h.displayName="Text";var v="focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-100";
|
|
7
|
+
`,...n},s)});h.displayName="Text";function a(...e){return twMerge(clsx(e))}var v="focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-100";var z={black:"bg-primary text-white",accent:"bg-primary-100 text-white",secondary:"bg-secondary-100 text-secondary"},W={black:"border border-text text-primary",accent:"border border-primary-100 text-primary-100",secondary:"border border-text-secondary text-secondary"},H=m.forwardRef(({className:e,variant:t="filled",color:o="black",isLoading:r=false,children:s,disabled:l,end:n,...p},d)=>m.createElement("button",{ref:d,className:a(`
|
|
8
8
|
sm:px-7 px-4
|
|
9
9
|
py-2
|
|
10
10
|
inline-flex items-center justify-center
|
|
@@ -12,5 +12,5 @@ import*as x from'react';import x__default,{useState,useCallback}from'react';impo
|
|
|
12
12
|
transition-colors duration-200
|
|
13
13
|
disabled:opacity-50 disabled:pointer-events-none
|
|
14
14
|
hover:opacity-80 active:scale-95
|
|
15
|
-
truncate`,v,t==="filled"?z[o]:t==="transparent"?"bg-transparent text-text":W[o],e),disabled:l||r,type:"button",...
|
|
15
|
+
truncate`,v,t==="filled"?z[o]:t==="transparent"?"bg-transparent text-text":W[o],e),disabled:l||r,type:"button",...p},typeof s=="string"?m.createElement(h,{variant:["sm:body-default-bold","body-xxs-semibold"],color:"inherit"},s):s,n));H.displayName="Button";var S={sm:"h-4",md:"h-6",lg:"h-8"},G={sm:"w-20",md:"w-32",lg:"w-48"},E={sm:"w-8 h-8",md:"w-12 h-12",lg:"w-16 h-16"},L=m__default.forwardRef(({variant:e="text",size:t="md",lines:o=1,className:r,animate:s=true},l)=>{let n="bg-secondary-50 rounded-lg overflow-hidden",p=s?"animate-pulse":"",i=typeof t=="number"?(u=>({height:`${u}px`,width:e==="avatar"||e==="image"?`${u}px`:void 0}))(t):void 0,c=()=>{switch(e){case "text":return m__default.createElement("div",{className:"flex flex-col gap-2"},Array.from({length:o}).map((u,g)=>m__default.createElement("div",{key:g,style:i,className:a(n,p,typeof t=="string"?S[t]:void 0,g===o-1&&o>1?"w-3/4":"w-full",r)})));case "image":return m__default.createElement("div",{style:i,className:a(n,p,(!i||!r)&&"aspect-square w-full max-w-[300px]",r)});case "button":return m__default.createElement("div",{style:i,className:a(n,p,typeof t=="string"&&[S[t],G[t]],r)});case "card":return m__default.createElement("div",{className:a("flex flex-col gap-4 p-6 border border-stroke rounded-xl",r)},m__default.createElement("div",{className:a(n,p,"w-16 h-16 rounded-full")}),m__default.createElement("div",{className:"space-y-2"},m__default.createElement("div",{className:a(n,p,"h-6 w-3/4")}),m__default.createElement("div",{className:a(n,p,"h-4 w-1/2")})),m__default.createElement("div",{className:"space-y-2"},m__default.createElement("div",{className:a(n,p,"h-4 w-full")}),m__default.createElement("div",{className:a(n,p,"h-4 w-full")}),m__default.createElement("div",{className:a(n,p,"h-4 w-2/3")})));case "avatar":return m__default.createElement("div",{style:i,className:a(n,p,"rounded-full",{[E.sm]:t==="sm",[E.md]:t==="md",[E.lg]:t==="lg"},r)});default:return null}};return m__default.createElement("div",{ref:l,className:a("w-full",r)},c())});L.displayName="Fallback";var $={12:"h-[12px] w-[12px]",16:"h-[16px] w-[16px]",18:"h-[18px] w-[18px]",20:"h-[20px] w-[20px]",24:"h-[24px] w-[24px]",32:"h-[32px] w-[32px]",36:"h-[36px] w-[36px]",40:"h-[40px] w-[40px]",42:"h-[42px] w-[42px]",48:"h-[48px] w-[48px]",64:"h-[64px] w-[64px]",72:"h-[72px] w-[72px]"},N={sm:{12:"sm:h-[12px] sm:w-[12px]",16:"sm:h-[16px] sm:w-[16px]",18:"sm:h-[18px] sm:w-[18px]",20:"sm:h-[20px] sm:w-[20px]",24:"sm:h-[24px] sm:w-[24px]",32:"sm:h-[32px] sm:w-[32px]",36:"sm:h-[36px] sm:w-[36px]",40:"sm:h-[40px] sm:w-[40px]",42:"sm:h-[42px] sm:w-[42px]",48:"sm:h-[48px] sm:w-[48px]",64:"sm:h-[64px] sm:w-[64px]",72:"sm:h-[72px] sm:w-[72px]"},md:{12:"md:h-[12px] md:w-[12px]",16:"md:h-[16px] md:w-[16px]",18:"md:h-[18px] md:w-[18px]",20:"md:h-[20px] md:w-[20px]",24:"md:h-[24px] md:w-[24px]",32:"md:h-[32px] md:w-[32px]",36:"md:h-[36px] md:w-[36px]",40:"md:h-[40px] md:w-[40px]",42:"md:h-[42px] md:w-[42px]",48:"md:h-[48px] md:w-[48px]",64:"md:h-[64px] md:w-[64px]",72:"md:h-[72px] md:w-[72px]"},lg:{12:"lg:h-[12px] lg:w-[12px]",16:"lg:h-[16px] lg:w-[16px]",18:"lg:h-[18px] lg:w-[18px]",20:"lg:h-[20px] lg:w-[20px]",24:"lg:h-[24px] lg:w-[24px]",32:"lg:h-[32px] lg:w-[32px]",36:"lg:h-[36px] lg:w-[36px]",40:"lg:h-[40px] lg:w-[40px]",42:"lg:h-[42px] lg:w-[42px]",48:"lg:h-[48px] lg:w-[48px]",64:"lg:h-[64px] lg:w-[64px]",72:"lg:h-[72px] lg:w-[72px]"},xl:{12:"xl:h-[12px] xl:w-[12px]",16:"xl:h-[16px] xl:w-[16px]",18:"xl:h-[18px] xl:w-[18px]",20:"xl:h-[20px] xl:w-[20px]",24:"xl:h-[24px] xl:w-[24px]",32:"xl:h-[32px] xl:w-[32px]",36:"xl:h-[36px] xl:w-[36px]",40:"xl:h-[40px] xl:w-[40px]",42:"xl:h-[42px] xl:w-[42px]",48:"xl:h-[48px] xl:w-[48px]",64:"xl:h-[64px] xl:w-[64px]",72:"xl:h-[72px] xl:w-[72px]"},"2xl":{12:"2xl:h-[12px] 2xl:w-[12px]",16:"2xl:h-[16px] 2xl:w-[16px]",18:"2xl:h-[18px] 2xl:w-[18px]",20:"2xl:h-[20px] 2xl:w-[20px]",24:"2xl:h-[24px] 2xl:w-[24px]",32:"2xl:h-[32px] 2xl:w-[32px]",36:"2xl:h-[36px] 2xl:w-[36px]",40:"2xl:h-[40px] 2xl:w-[40px]",42:"2xl:h-[42px] 2xl:w-[42px]",48:"2xl:h-[48px] 2xl:w-[48px]",64:"2xl:h-[64px] 2xl:w-[64px]",72:"2xl:h-[72px] 2xl:w-[72px]"}},w=e=>String(e),C=(e,t=24)=>{let o=[],r={};if(e===void 0){let s=w(t);s?o.push($[s]):(r.height=`${t}px`,r.width=`${t}px`);}if(typeof e=="number"){let s=w(e);s?o.push($[s]):(r.height=`${e}px`,r.width=`${e}px`);}if(Array.isArray(e)){let s=w(t),l=[s&&$[s]||`h-[${t}px] w-[${t}px]`];e.forEach(n=>{if(typeof n=="string"){let[p,d]=n.split(":"),i=parseInt(d,10),c=w(i);o.push(c&&N[p]?.[c]||`${p}:h-[${i}px] ${p}:w-[${i}px]`);}}),o.push(...l);}if(typeof e=="string"){let[s,l]=e.split(":"),n=parseInt(l,10),p=w(n);o.push(p&&N[s]?.[p]||`${s}:h-[${n}px] ${s}:w-[${n}px]`);}return {responsiveSizeClasses:o.join(" "),responsiveSizeStyles:r}};var P={primary:"var(--color-primary)",secondary:"var(--color-secondary)",white:"var(--color-white)",primaryBlue:"var(--color-primary-100)",disabled:"var(--color-disabled)",danger:"var(--color-danger)"},y=m__default.forwardRef(({name:e,size:t=24,color:o="primary",title:r,className:s,style:l={},...n},p)=>{let d=IconMap[e],{responsiveSizeClasses:i,responsiveSizeStyles:c}=C(t,24);return m__default.createElement("div",{className:a("flex justify-center items-center",i,s),style:{"--icon-stroke":P[o],...c,...l}},m__default.createElement(d,{ref:p,"aria-hidden":!r,"aria-label":r,stroke:e.includes("filled")?void 0:P[o],...n}))});y.displayName="Icon";var f=m__default.forwardRef(({children:e,type:t="button",className:o,disabled:r,...s},l)=>m__default.createElement("button",{ref:l,type:t,disabled:r,className:a("appearance-none hover:opacity-80 transition-all active:scale-95",v,r&&"opacity-50 cursor-not-allowed",o),...s},e));f.displayName="Pressable";function B({children:e,color:t="primary",className:o,onClose:r,...s}){let[l,n]=useState(false),p=useCallback(()=>{n(true);},[]),d=useCallback(()=>{n(false);},[]),i=m__default.createElement("div",{className:a("flex gap-2",r?"justify-between items-center max-w-fit":"items-center justify-center","hover:bg-primary-100 rounded bg-secondary-400 px-2 py-1 sm:px-3 sm:py-1.5 h-min hover:text-white",t==="primary"?"text-primary-100":"text-primary",o),onMouseEnter:p,onMouseLeave:d},typeof e=="string"?m__default.createElement(h,{color:"inherit",variant:["md:body-default-medium","body-xxs-medium"],className:"truncate pt-0.5"},e):e,r&&m__default.createElement(f,{...s,onClick:r,className:"flex items-center justify-center"},m__default.createElement(y,{name:"close",size:12,color:l?"white":"primaryBlue"})));return r?i:m__default.createElement(f,{...s},i)}function Ne({iconName:e,tags:t,caption:o,playCount:r,backgroundImage:s,onClick:l,className:n,editable:p=false,isLoading:d}){let[i,c]=useState(false);return d?m__default.createElement("div",{className:"sm:w-[227px] sm:h-[371px] w-[148px] h-[234px]"},m__default.createElement(L,{variant:"image",className:"w-full h-full rounded-2xl"})):m__default.createElement(f,{onClick:l,onMouseOver:()=>c(true),onMouseLeave:()=>c(false)},m__default.createElement("div",{className:`flex flex-col justify-between p-4 sm:w-[227px] sm:h-[371px] w-[148px] h-[234px] rounded-2xl relative overflow-hidden ${n}`,style:{backgroundColor:"#e7e7e7",backgroundImage:`url(${s})`,backgroundSize:"cover",backgroundPosition:"center",backgroundRepeat:"no-repeat"}},m__default.createElement("div",{className:"flex justify-between items-center"},e&&m__default.createElement("div",{className:"flex items-center justify-center bg-overlay h-10 w-10 rounded-full"},m__default.createElement(y,{name:e,size:20,color:"white"})),t&&m__default.createElement("div",{className:"flex gap-2 items-center"},t.map((u,g)=>m__default.createElement(B,{key:g,color:"text"},u)))),o&&m__default.createElement("div",{className:"flex flex-col gap-1 p-2 rounded-lg bg-overlay max-h-[60px] overflow-hidden"},m__default.createElement(h,{variant:"body-default-medium",className:"text-white truncate"},o),r&&m__default.createElement("div",{className:"flex gap-2"},m__default.createElement(y,{name:"play",size:16,color:"white"}),m__default.createElement(h,{variant:"body-xs-medium",className:"text-white"},r))),p&&i&&m__default.createElement("div",{className:"absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2"},m__default.createElement(H,{color:"accent",variant:"filled",className:"!px-3 !py-3 z-20 shadow-md hover:opacity-100",onClick:l},m__default.createElement(y,{name:"edit",color:"white"})))))}export{Ne as WorkCard};//# sourceMappingURL=WorkCard.js.map
|
|
16
16
|
//# sourceMappingURL=WorkCard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/Text.tsx","../../src/utils/tailwind.ts","../../src/utils/index.ts","../../src/components/Button.tsx","../../src/components/Fallback.tsx","../../src/utils/responsive.ts","../../src/components/Icon.tsx","../../src/components/Pressable.tsx","../../src/components/Tag.tsx","../../src/components/WorkCard.tsx"],"names":["HEADING_ELEMENT_MAP","getElementFromVariant","variant","category","size","fontWeight","processVariants","variants","breakpoint","typographyClass","Text","React","color","as","className","children","weight","props","ref","typographyClasses","colorClasses","suggestedElement","baseVariant","focusRingStyles","cn","inputs","twMerge","clsx","filled","outlined","Button","b","isLoading","disabled","end","sizeMap","widthMap","avatarSizeMap","Fallback","lines","animate","baseClasses","animationClasses","customStyle","renderContent","_","index","BASE_SIZES","RESPONSIVE_SIZES","getSizeKey","getResponsiveSize","baseSize","classes","styles","key","baseKey","responsiveClasses","s","valueStr","value","valueKey","COLOR_MAP","Icon","name","title","style","IconComponent","IconMap","responsiveSizeClasses","responsiveSizeStyles","Pressable","type","Tag","onClose","pressableProps","isHovered","setIsHovered","useState","handleMouseEnter","useCallback","handleMouseLeave","content","WorkCard","iconName","tags","caption","playCount","backgroundImage","onClick","editable","showEditButton","setShowEditButton","tag"],"mappings":"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","file":"WorkCard.js","sourcesContent":["import React from \"react\";\nimport { Typography } from \"../types/tailwind\";\nimport { Breakpoint } from \"../utils/responsive\";\n\ntype TextElement =\n | \"p\"\n | \"span\"\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"h5\"\n | \"h6\"\n | \"strong\"\n | \"em\"\n | \"blockquote\"\n | \"pre\"\n | \"code\"\n | \"small\"\n | \"label\"\n | \"a\";\n\n// HTML element mapping type\ntype HTMLElementByTag = {\n p: HTMLParagraphElement;\n span: HTMLSpanElement;\n h1: HTMLHeadingElement;\n h2: HTMLHeadingElement;\n h3: HTMLHeadingElement;\n h4: HTMLHeadingElement;\n h5: HTMLHeadingElement;\n h6: HTMLHeadingElement;\n strong: HTMLElement;\n em: HTMLElement;\n blockquote: HTMLQuoteElement;\n pre: HTMLPreElement;\n code: HTMLElement;\n small: HTMLElement;\n label: HTMLLabelElement;\n a: HTMLAnchorElement;\n};\n\n// HTML props mapping type\ntype HTMLPropsMap = {\n p: React.HTMLAttributes<HTMLParagraphElement>;\n span: React.HTMLAttributes<HTMLSpanElement>;\n h1: React.HTMLAttributes<HTMLHeadingElement>;\n h2: React.HTMLAttributes<HTMLHeadingElement>;\n h3: React.HTMLAttributes<HTMLHeadingElement>;\n h4: React.HTMLAttributes<HTMLHeadingElement>;\n h5: React.HTMLAttributes<HTMLHeadingElement>;\n h6: React.HTMLAttributes<HTMLHeadingElement>;\n strong: React.HTMLAttributes<HTMLElement>;\n em: React.HTMLAttributes<HTMLElement>;\n blockquote: React.HTMLAttributes<HTMLQuoteElement>;\n pre: React.HTMLAttributes<HTMLPreElement>;\n code: React.HTMLAttributes<HTMLElement>;\n small: React.HTMLAttributes<HTMLElement>;\n label: React.LabelHTMLAttributes<HTMLLabelElement>;\n a: Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, \"color\">;\n};\n\ntype TextColor =\n | \"primary\"\n | \"secondary\"\n | \"white\"\n | \"primary-blue\"\n | \"disabled\"\n | \"danger\"\n | \"inherit\"\n | \"primary-100\";\n\nconst HEADING_ELEMENT_MAP: Record<string, TextElement> = {\n xl: \"h1\",\n lg: \"h1\",\n md: \"h2\",\n sm: \"h3\",\n xs: \"h4\"\n};\n\nconst getElementFromVariant = (variant: TypographyKey): TextElement => {\n const [category, size] = variant.split(\"-\");\n\n if (category === \"heading\") {\n return HEADING_ELEMENT_MAP[size] || \"p\";\n }\n\n if (category === \"label\") {\n return \"label\";\n }\n\n return \"p\";\n};\n\ntype Weight = \"light\" | \"regular\" | \"semibold\" | \"bold\";\n\nconst fontWeight: Record<Weight, string> = {\n light: \"font-light\",\n regular: \"font-regular\",\n semibold: \"font-semibold\",\n bold: \"font-bold\"\n};\n\ntype ResponsiveVariant = TypographyKey | `${Breakpoint}:${TypographyKey}`;\n\ntype TypographyCategory = keyof Typography;\ntype TypographyValue<T extends TypographyCategory> = Extract<\n keyof Typography[T],\n string | number | bigint | boolean | null | undefined\n>;\ntype TypographyKey = {\n [T in TypographyCategory]: `${T}-${TypographyValue<T>}`;\n}[TypographyCategory];\n\n// Update TextProps to use ResponsiveVariant\nexport type TextProps<T extends TextElement = \"p\"> = {\n variant?: ResponsiveVariant | ResponsiveVariant[];\n color?: TextColor;\n as?: T;\n className?: string;\n children: React.ReactNode;\n weight?: Weight;\n} & HTMLPropsMap[T];\n\n// Add helper function to process variants\nconst processVariants = (\n variants: ResponsiveVariant | ResponsiveVariant[] | undefined\n): string => {\n if (!variants) return \"text-body-default\";\n\n const variantArray = Array.isArray(variants) ? variants : [variants];\n\n return variantArray\n .map((variant) => {\n if (variant.includes(\":\")) {\n const [breakpoint, typographyClass] = variant.split(\":\");\n return `${breakpoint}:text-${typographyClass}`;\n }\n return `text-${variant}`;\n })\n .join(\" \");\n};\n\nexport const Text = React.forwardRef(\n <T extends TextElement = \"p\">(\n {\n variant = \"body-default\",\n color = \"primary\",\n as,\n className,\n children,\n weight,\n ...props\n }: TextProps<T>,\n ref: React.ForwardedRef<HTMLElementByTag[T]>\n ) => {\n // Process typography classes with breakpoints\n const typographyClasses = processVariants(variant);\n\n // Get color styles using Tailwind classes that reference CSS variables\n const colorClasses = color === \"inherit\" ? \"text-inherit\" : `text-${color}`;\n\n const suggestedElement = React.useMemo(() => {\n const baseVariant =\n typeof variant === \"string\"\n ? variant.split(\":\").pop()!\n : Array.isArray(variant)\n ? variant[0].split(\":\").pop()!\n : \"body-default\";\n return getElementFromVariant(baseVariant as TypographyKey);\n }, [variant]);\n\n const Component = (as || suggestedElement) as T;\n\n return (\n // @ts-expect-error TODO: figure this out\n <Component\n ref={ref}\n className={`\n font-sans antialiased\n ${typographyClasses}\n ${colorClasses}\n ${weight && `!${fontWeight[weight]}`}\n ${className}\n `}\n {...props}\n >\n {children}\n </Component>\n );\n }\n);\n\nText.displayName = \"Text\";\n","import { Colors, Typography } from \"../types/tailwind\";\n\n// Generate safelist patterns for all color utilities so you can use any theme color variable in your code\nexport const generateSafelist = (colors: Colors, typography: Typography) => {\n const colorNames = Object.keys(colors) as (keyof Colors)[];\n const utilities = [\"bg\", \"text\", \"border\", \"ring\", \"divide\", \"outline\"];\n const variants = [\"hover:\", \"focus:\", \"active:\", \"disabled:\"];\n const breakpoints = [\"sm\", \"md\", \"lg\", \"xl\", \"2xl\"];\n const sizes = [\"24\", \"42\", \"48\", \"64\", \"72\"]; // Add all the sizes you need\n\n const safelist: (string | { pattern: RegExp; variants: string[] })[] = [];\n\n colorNames.forEach((colorName) => {\n if (typeof colors[colorName] === \"object\") {\n // Handle nested color objects (with number keys)\n Object.keys(colors[colorName]).forEach((shade) => {\n utilities.forEach((utility) => {\n // Base utility\n safelist.push(`${utility}-${colorName}-${shade}`);\n\n // Variant utilities\n variants.forEach((variant) => {\n safelist.push(`${variant}${utility}-${colorName}-${shade}`);\n });\n });\n });\n } else {\n // Handle direct color values\n utilities.forEach((utility) => {\n safelist.push(`${utility}-${colorName}`);\n\n variants.forEach((variant) => {\n safelist.push(`${variant}${utility}-${colorName}`);\n });\n });\n }\n });\n\n // Generate typography classes\n Object.entries(typography).forEach(([family, sizes]) => {\n Object.keys(sizes).forEach((size) => {\n // Base typography classes\n safelist.push(`text-${family}-${size}`);\n\n // Add variants\n variants.forEach((variant) => {\n safelist.push(`${variant}text-${family}-${size}`);\n });\n });\n });\n\n const typographyClasses = Object.entries(typography).flatMap(\n ([category, sizes]) =>\n Object.keys(sizes).map((size) => `text-${category}-${size}`)\n );\n\n // Generate responsive variants\n const responsiveTypographyClasses = typographyClasses.flatMap((className) =>\n breakpoints.map((breakpoint) => `${breakpoint}:${className}`)\n );\n\n // Generate size classes with responsive variants\n const sizeClasses = sizes.flatMap((size) => [\n `h-[${size}px]`,\n `w-[${size}px]`,\n ...breakpoints.flatMap((bp) => [\n `${bp}:h-[${size}px]`,\n `${bp}:w-[${size}px]`\n ])\n ]);\n\n return [...typographyClasses, ...responsiveTypographyClasses, ...sizeClasses];\n};\n\nexport const focusRingStyles =\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-100\";\nexport const focusRingWithinStyles =\n \"focus-within:outline-none focus-within:ring-2 focus-within:ring-primary-100\";\nexport const focusRingStylesCoerced = \"ring-2 ring-primary-100\";\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport const noopFn = () => {};\n","import * as React from \"react\";\nimport { Text } from \"./Text\";\nimport { focusRingStyles } from \"../utils/tailwind\";\nimport { cn } from \"../utils\";\n\nexport type ButtonProps = {\n /** @default filled */\n variant?: \"filled\" | \"outlined\" | \"transparent\";\n /** @default primary */\n color?: \"black\" | \"accent\" | \"secondary\";\n isLoading?: boolean;\n children: React.ReactNode;\n className?: string;\n disabled?: boolean;\n start?: React.ReactNode;\n end?: React.ReactNode;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const filled = {\n black: \"bg-primary text-white\",\n // fade it slightly\n accent: \"bg-primary-100 text-white\",\n secondary: \"bg-secondary-100 text-secondary\"\n};\n\nexport const outlined = {\n black: \"border border-text text-primary\",\n accent: \"border border-primary-100 text-primary-100\",\n secondary: \"border border-text-secondary text-secondary\"\n};\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant = \"filled\",\n color = \"black\",\n isLoading = false,\n children,\n disabled,\n end,\n ...props\n },\n ref\n ) => (\n <button\n ref={ref}\n className={cn(\n `\n sm:px-7 px-4\n py-2\n inline-flex items-center justify-center\n rounded-lg \n transition-colors duration-200\n disabled:opacity-50 disabled:pointer-events-none\n hover:opacity-80 active:scale-95 \n truncate`,\n focusRingStyles,\n variant === \"filled\"\n ? filled[color]\n : variant === \"transparent\"\n ? \"bg-transparent text-text\"\n : outlined[color],\n className\n )}\n disabled={disabled || isLoading}\n type=\"button\"\n {...props}\n >\n {typeof children === \"string\" ? (\n <Text\n variant={[\"sm:body-default-bold\", \"body-xxs-semibold\"]}\n color=\"inherit\"\n >\n {children}\n </Text>\n ) : (\n children\n )}\n {end}\n </button>\n )\n);\n\nButton.displayName = \"Button\";\n","import React from \"react\";\nimport { cn } from \"../utils\";\n\nexport type FallbackVariant = \"text\" | \"image\" | \"button\" | \"card\" | \"avatar\";\nexport type FallbackSize = \"sm\" | \"md\" | \"lg\" | number;\n\nexport type FallbackProps = {\n /**\n * The type of content being loaded\n */\n variant?: FallbackVariant;\n /**\n * The size of the fallback element\n * Can be a predefined size ('sm' | 'md' | 'lg') or a custom pixel value\n */\n size?: FallbackSize;\n /**\n * Whether to show multiple lines (only applies to text variant)\n */\n lines?: number;\n /**\n * Additional classes to apply to the fallback\n */\n className?: string;\n /**\n * Whether to show the loading animation\n */\n animate?: boolean;\n};\n\n// Updated to match existing component sizes\nconst sizeMap = {\n sm: \"h-4\", // 16px\n md: \"h-6\", // 24px\n lg: \"h-8\" // 32px\n};\n\n// Updated to match existing component sizes\nconst widthMap = {\n sm: \"w-20\", // 80px\n md: \"w-32\", // 128px\n lg: \"w-48\" // 192px\n};\n\n// Updated to match Avatar sizes\nconst avatarSizeMap = {\n sm: \"w-8 h-8\", // 32px\n md: \"w-12 h-12\", // 48px\n lg: \"w-16 h-16\" // 64px\n};\n\nexport const Fallback = React.forwardRef<HTMLDivElement, FallbackProps>(\n (\n { variant = \"text\", size = \"md\", lines = 1, className, animate = true },\n ref\n ) => {\n const baseClasses = \"bg-secondary-50 rounded-lg overflow-hidden\";\n const animationClasses = animate ? \"animate-pulse\" : \"\";\n\n const getCustomSizeStyle = (size: number) => ({\n height: `${size}px`,\n width:\n variant === \"avatar\" || variant === \"image\" ? `${size}px` : undefined\n });\n\n const customStyle =\n typeof size === \"number\" ? getCustomSizeStyle(size) : undefined;\n\n const renderContent = () => {\n switch (variant) {\n case \"text\":\n return (\n <div className=\"flex flex-col gap-2\">\n {Array.from({ length: lines }).map((_, index) => (\n <div\n key={index}\n style={customStyle}\n className={cn(\n baseClasses,\n animationClasses,\n typeof size === \"string\" ? sizeMap[size] : undefined,\n index === lines - 1 && lines > 1 ? \"w-3/4\" : \"w-full\",\n className\n )}\n />\n ))}\n </div>\n );\n\n case \"image\":\n return (\n <div\n style={customStyle}\n className={cn(\n baseClasses,\n animationClasses,\n (!customStyle || !className) &&\n \"aspect-square w-full max-w-[300px]\",\n className\n )}\n />\n );\n\n case \"button\":\n return (\n <div\n style={customStyle}\n className={cn(\n baseClasses,\n animationClasses,\n typeof size === \"string\" && [sizeMap[size], widthMap[size]],\n className\n )}\n />\n );\n\n case \"card\":\n return (\n <div\n className={cn(\n \"flex flex-col gap-4 p-6 border border-stroke rounded-xl\",\n className\n )}\n >\n <div\n className={cn(\n baseClasses,\n animationClasses,\n \"w-16 h-16 rounded-full\"\n )}\n />\n <div className=\"space-y-2\">\n <div\n className={cn(baseClasses, animationClasses, \"h-6 w-3/4\")}\n />\n <div\n className={cn(baseClasses, animationClasses, \"h-4 w-1/2\")}\n />\n </div>\n <div className=\"space-y-2\">\n <div\n className={cn(baseClasses, animationClasses, \"h-4 w-full\")}\n />\n <div\n className={cn(baseClasses, animationClasses, \"h-4 w-full\")}\n />\n <div\n className={cn(baseClasses, animationClasses, \"h-4 w-2/3\")}\n />\n </div>\n </div>\n );\n\n case \"avatar\":\n return (\n <div\n style={customStyle}\n className={cn(\n baseClasses,\n animationClasses,\n \"rounded-full\",\n {\n [avatarSizeMap.sm]: size === \"sm\",\n [avatarSizeMap.md]: size === \"md\",\n [avatarSizeMap.lg]: size === \"lg\"\n },\n className\n )}\n />\n );\n\n default:\n return null;\n }\n };\n\n return (\n <div ref={ref} className={cn(\"w-full\", className)}>\n {renderContent()}\n </div>\n );\n }\n);\n\nFallback.displayName = \"Fallback\";\n","export type Breakpoint = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\nexport type ResponsiveSize = number | `${Breakpoint}:${number}`;\n\ntype SizeKey =\n | \"12\"\n | \"16\"\n | \"18\"\n | \"20\"\n | \"24\"\n | \"32\"\n | \"36\"\n | \"40\"\n | \"42\"\n | \"48\"\n | \"64\"\n | \"72\";\n\n// These constants help Tailwind identify the classes during compilation\nconst BASE_SIZES: Record<SizeKey, string> = {\n \"12\": \"h-[12px] w-[12px]\",\n \"16\": \"h-[16px] w-[16px]\",\n \"18\": \"h-[18px] w-[18px]\",\n \"20\": \"h-[20px] w-[20px]\",\n \"24\": \"h-[24px] w-[24px]\",\n \"32\": \"h-[32px] w-[32px]\",\n \"36\": \"h-[36px] w-[36px]\",\n \"40\": \"h-[40px] w-[40px]\",\n \"42\": \"h-[42px] w-[42px]\",\n \"48\": \"h-[48px] w-[48px]\",\n \"64\": \"h-[64px] w-[64px]\",\n \"72\": \"h-[72px] w-[72px]\"\n};\n\nconst RESPONSIVE_SIZES: Record<Breakpoint, Record<SizeKey, string>> = {\n sm: {\n \"12\": \"sm:h-[12px] sm:w-[12px]\",\n \"16\": \"sm:h-[16px] sm:w-[16px]\",\n \"18\": \"sm:h-[18px] sm:w-[18px]\",\n \"20\": \"sm:h-[20px] sm:w-[20px]\",\n \"24\": \"sm:h-[24px] sm:w-[24px]\",\n \"32\": \"sm:h-[32px] sm:w-[32px]\",\n \"36\": \"sm:h-[36px] sm:w-[36px]\",\n \"40\": \"sm:h-[40px] sm:w-[40px]\",\n \"42\": \"sm:h-[42px] sm:w-[42px]\",\n \"48\": \"sm:h-[48px] sm:w-[48px]\",\n \"64\": \"sm:h-[64px] sm:w-[64px]\",\n \"72\": \"sm:h-[72px] sm:w-[72px]\"\n },\n md: {\n \"12\": \"md:h-[12px] md:w-[12px]\",\n \"16\": \"md:h-[16px] md:w-[16px]\",\n \"18\": \"md:h-[18px] md:w-[18px]\",\n \"20\": \"md:h-[20px] md:w-[20px]\",\n \"24\": \"md:h-[24px] md:w-[24px]\",\n \"32\": \"md:h-[32px] md:w-[32px]\",\n \"36\": \"md:h-[36px] md:w-[36px]\",\n \"40\": \"md:h-[40px] md:w-[40px]\",\n \"42\": \"md:h-[42px] md:w-[42px]\",\n \"48\": \"md:h-[48px] md:w-[48px]\",\n \"64\": \"md:h-[64px] md:w-[64px]\",\n \"72\": \"md:h-[72px] md:w-[72px]\"\n },\n lg: {\n \"12\": \"lg:h-[12px] lg:w-[12px]\",\n \"16\": \"lg:h-[16px] lg:w-[16px]\",\n \"18\": \"lg:h-[18px] lg:w-[18px]\",\n \"20\": \"lg:h-[20px] lg:w-[20px]\",\n \"24\": \"lg:h-[24px] lg:w-[24px]\",\n \"32\": \"lg:h-[32px] lg:w-[32px]\",\n \"36\": \"lg:h-[36px] lg:w-[36px]\",\n \"40\": \"lg:h-[40px] lg:w-[40px]\",\n \"42\": \"lg:h-[42px] lg:w-[42px]\",\n \"48\": \"lg:h-[48px] lg:w-[48px]\",\n \"64\": \"lg:h-[64px] lg:w-[64px]\",\n \"72\": \"lg:h-[72px] lg:w-[72px]\"\n },\n xl: {\n \"12\": \"xl:h-[12px] xl:w-[12px]\",\n \"16\": \"xl:h-[16px] xl:w-[16px]\",\n \"18\": \"xl:h-[18px] xl:w-[18px]\",\n \"20\": \"xl:h-[20px] xl:w-[20px]\",\n \"24\": \"xl:h-[24px] xl:w-[24px]\",\n \"32\": \"xl:h-[32px] xl:w-[32px]\",\n \"36\": \"xl:h-[36px] xl:w-[36px]\",\n \"40\": \"xl:h-[40px] xl:w-[40px]\",\n \"42\": \"xl:h-[42px] xl:w-[42px]\",\n \"48\": \"xl:h-[48px] xl:w-[48px]\",\n \"64\": \"xl:h-[64px] xl:w-[64px]\",\n \"72\": \"xl:h-[72px] xl:w-[72px]\"\n },\n \"2xl\": {\n \"12\": \"2xl:h-[12px] 2xl:w-[12px]\",\n \"16\": \"2xl:h-[16px] 2xl:w-[16px]\",\n \"18\": \"2xl:h-[18px] 2xl:w-[18px]\",\n \"20\": \"2xl:h-[20px] 2xl:w-[20px]\",\n \"24\": \"2xl:h-[24px] 2xl:w-[24px]\",\n \"32\": \"2xl:h-[32px] 2xl:w-[32px]\",\n \"36\": \"2xl:h-[36px] 2xl:w-[36px]\",\n \"40\": \"2xl:h-[40px] 2xl:w-[40px]\",\n \"42\": \"2xl:h-[42px] 2xl:w-[42px]\",\n \"48\": \"2xl:h-[48px] 2xl:w-[48px]\",\n \"64\": \"2xl:h-[64px] 2xl:w-[64px]\",\n \"72\": \"2xl:h-[72px] 2xl:w-[72px]\"\n }\n};\n\nconst getSizeKey = (size: number): SizeKey | undefined => {\n return String(size) as SizeKey;\n};\n\nexport const getResponsiveSize = (\n size: ResponsiveSize | ResponsiveSize[] | undefined,\n baseSize: number = 24\n): {\n responsiveSizeClasses: string;\n responsiveSizeStyles: Record<string, string>;\n} => {\n const classes: string[] = [];\n const styles: Record<string, string> = {};\n\n // If no size provided, use baseSize\n if (size === undefined) {\n const key = getSizeKey(baseSize);\n if (key) {\n classes.push(BASE_SIZES[key]);\n } else {\n styles.height = `${baseSize}px`;\n styles.width = `${baseSize}px`;\n }\n }\n\n // If size is a number, use that directly\n if (typeof size === \"number\") {\n const key = getSizeKey(size);\n if (key) {\n classes.push(BASE_SIZES[key]);\n } else {\n styles.height = `${size}px`;\n styles.width = `${size}px`;\n }\n }\n\n // If array of responsive sizes, generate responsive classes\n if (Array.isArray(size)) {\n const baseKey = getSizeKey(baseSize);\n const responsiveClasses = [\n (baseKey && BASE_SIZES[baseKey]) || `h-[${baseSize}px] w-[${baseSize}px]`\n ];\n\n size.forEach((s) => {\n if (typeof s === \"string\") {\n const [breakpoint, valueStr] = s.split(\":\") as [Breakpoint, string];\n const value = parseInt(valueStr, 10);\n const key = getSizeKey(value);\n classes.push(\n (key && RESPONSIVE_SIZES[breakpoint]?.[key]) ||\n `${breakpoint}:h-[${value}px] ${breakpoint}:w-[${value}px]`\n );\n }\n });\n\n classes.push(...responsiveClasses);\n }\n\n if (typeof size === \"string\") {\n const [breakpoint, valueStr] = size.split(\":\") as [Breakpoint, string];\n const value = parseInt(valueStr, 10);\n const valueKey = getSizeKey(value);\n classes.push(\n (valueKey && RESPONSIVE_SIZES[breakpoint]?.[valueKey]) ||\n `${breakpoint}:h-[${value}px] ${breakpoint}:w-[${value}px]`\n );\n }\n\n return {\n responsiveSizeClasses: classes.join(\" \"),\n responsiveSizeStyles: styles\n };\n};\n","import { IconMap, IconName } from \"@deckai/icons\";\nimport React, { SVGProps } from \"react\";\nimport { IconColors } from \"../types/tailwind\";\nimport { cn } from \"../utils\";\nimport { ResponsiveSize, getResponsiveSize } from \"../utils/responsive\";\n\nexport type IconProps = {\n name: IconName;\n /** @default 24 */\n size?: ResponsiveSize | ResponsiveSize[];\n /** @default primary */\n color?: IconColors;\n title?: string;\n className?: string;\n style?: React.CSSProperties;\n} & Omit<SVGProps<SVGSVGElement>, \"aria-hidden\" | \"aria-label\">;\n\n// Using CSS variables to support dark mode\nconst COLOR_MAP: Record<IconColors, string> = {\n primary: \"var(--color-primary)\",\n secondary: \"var(--color-secondary)\",\n white: \"var(--color-white)\",\n primaryBlue: \"var(--color-primary-100)\",\n disabled: \"var(--color-disabled)\",\n danger: \"var(--color-danger)\"\n};\n\nexport const Icon = React.forwardRef<SVGSVGElement, IconProps>(\n (\n {\n name,\n size = 24,\n color = \"primary\",\n title,\n className,\n style = {},\n ...props\n },\n ref\n ) => {\n const IconComponent = IconMap[name];\n const { responsiveSizeClasses, responsiveSizeStyles } = getResponsiveSize(\n size,\n 24\n );\n\n return (\n <div\n className={cn(\n \"flex justify-center items-center\",\n responsiveSizeClasses,\n className\n )}\n style={{\n [\"--icon-stroke\" as string]: COLOR_MAP[color],\n ...responsiveSizeStyles,\n ...style\n }}\n >\n <IconComponent\n ref={ref}\n aria-hidden={!title}\n aria-label={title}\n stroke={name.includes(\"filled\") ? undefined : COLOR_MAP[color]}\n {...props}\n />\n </div>\n );\n }\n);\n\nIcon.displayName = \"Icon\";\n","import React, { ButtonHTMLAttributes } from \"react\";\nimport { focusRingStyles } from \"../utils/tailwind\";\nimport { cn } from \"../utils\";\n\nexport type PressableProps = ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const Pressable = React.forwardRef<HTMLButtonElement, PressableProps>(\n ({ children, type = \"button\", className, disabled, ...props }, ref) => (\n <button\n ref={ref}\n type={type}\n disabled={disabled}\n className={cn(\n \"appearance-none hover:opacity-80 transition-all active:scale-95\",\n focusRingStyles,\n disabled && \"opacity-50 cursor-not-allowed\",\n className\n )}\n {...props}\n >\n {children}\n </button>\n )\n);\n\nPressable.displayName = \"Pressable\";\n","import React, { HTMLAttributes, useCallback, useState } from \"react\";\nimport { cn } from \"../utils\";\nimport { Icon } from \"./Icon\";\nimport { Pressable, PressableProps } from \"./Pressable\";\nimport { Text } from \"./Text\";\n\nexport type TagProps = {\n children: React.ReactNode;\n padded?: boolean;\n color?: \"primary\" | \"text\";\n onClose?: () => void;\n} & HTMLAttributes<HTMLDivElement> &\n PressableProps;\n\nexport const Tag = ({\n children,\n color = \"primary\",\n className,\n onClose,\n ...pressableProps\n}: TagProps) => {\n const [isHovered, setIsHovered] = useState(false);\n\n const handleMouseEnter = useCallback(() => {\n setIsHovered(true);\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setIsHovered(false);\n }, []);\n\n const content = (\n <div\n className={cn(\n \"flex gap-2\",\n onClose\n ? \"justify-between items-center\"\n : \"items-center justify-center\",\n \"hover:bg-primary-100 rounded bg-secondary-400 px-2 py-1 sm:px-3 sm:py-1.5 h-min hover:text-white\",\n color === \"primary\" ? \"text-primary-100\" : \"text-primary\",\n className\n )}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {typeof children === \"string\" ? (\n <Text\n color=\"inherit\"\n variant={[\"md:body-default-medium\", \"body-xxs-medium\"]}\n className=\"truncate pt-0.5\"\n >\n {children}\n </Text>\n ) : (\n children\n )}\n {onClose && (\n <Pressable\n {...pressableProps}\n onClick={onClose}\n className=\"flex items-center justify-center\"\n >\n <Icon\n name=\"close\"\n size={12}\n color={isHovered ? \"white\" : \"primaryBlue\"}\n />\n </Pressable>\n )}\n </div>\n );\n\n return onClose ? (\n content\n ) : (\n <Pressable {...pressableProps}>{content}</Pressable>\n );\n};\n","import { IconName } from \"@deckai/icons\";\nimport React, { useState } from \"react\";\nimport { Button } from \"./Button\";\nimport { Fallback } from \"./Fallback\";\nimport { Icon } from \"./Icon\";\nimport { Pressable } from \"./Pressable\";\nimport { Tag } from \"./Tag\";\nimport { Text } from \"./Text\";\n\nexport type WorkCardProps = {\n iconName?: IconName;\n tags?: string[];\n caption?: string;\n /** play count should already be formatted with k or m */\n playCount?: string;\n backgroundImage?: string;\n onClick?: () => void;\n className?: string;\n editable?: boolean;\n isLoading?: boolean;\n};\n\nexport const WorkCard = ({\n iconName,\n tags,\n caption,\n playCount,\n backgroundImage,\n onClick,\n className,\n editable = false,\n isLoading\n}: WorkCardProps) => {\n const [showEditButton, setShowEditButton] = useState(false);\n\n if (isLoading) {\n return (\n <div className=\"sm:w-[227px] sm:h-[371px] w-[148px] h-[234px]\">\n <Fallback variant=\"image\" className=\"w-full h-full rounded-2xl\" />\n </div>\n );\n }\n\n return (\n <Pressable\n onClick={onClick}\n onMouseOver={() => setShowEditButton(true)}\n onMouseLeave={() => setShowEditButton(false)}\n >\n <div\n className={`flex flex-col justify-between p-4 sm:w-[227px] sm:h-[371px] w-[148px] h-[234px] rounded-2xl relative overflow-hidden ${className}`}\n style={{\n backgroundColor: \"#e7e7e7\",\n backgroundImage: `url(${backgroundImage})`,\n backgroundSize: \"cover\",\n backgroundPosition: \"center\",\n backgroundRepeat: \"no-repeat\"\n }}\n >\n <div className=\"flex justify-between items-center\">\n {iconName && (\n <div className=\"flex items-center justify-center bg-overlay h-10 w-10 rounded-full\">\n <Icon name={iconName} size={20} color=\"white\" />\n </div>\n )}\n {tags && (\n <div className=\"flex gap-2 items-center\">\n {tags.map((tag, index) => (\n <Tag key={index} color=\"text\">\n {tag}\n </Tag>\n ))}\n </div>\n )}\n </div>\n {caption && (\n <div className=\"flex flex-col gap-1 p-2 rounded-lg bg-overlay max-h-[60px] overflow-hidden\">\n <Text variant=\"body-default-medium\" className=\"text-white truncate\">\n {caption}\n </Text>\n {playCount && (\n <div className=\"flex gap-2\">\n <Icon name=\"play\" size={16} color=\"white\" />\n <Text variant=\"body-xs-medium\" className=\"text-white\">\n {playCount}\n </Text>\n </div>\n )}\n </div>\n )}\n {editable && showEditButton && (\n <div className=\"absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2\">\n <Button\n color=\"accent\"\n variant=\"filled\"\n className=\"!px-3 !py-3 z-20 shadow-md hover:opacity-100\"\n onClick={onClick}\n >\n <Icon name=\"edit\" color=\"white\" />\n </Button>\n </div>\n )}\n </div>\n </Pressable>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/components/Text.tsx","../../src/utils/index.ts","../../src/utils/tailwind.ts","../../src/components/Button.tsx","../../src/components/Fallback.tsx","../../src/components/Icon.tsx","../../src/utils/responsive.ts","../../src/components/Pressable.tsx","../../src/components/Tag.tsx","../../src/components/WorkCard.tsx"],"names":["HEADING_ELEMENT_MAP","getElementFromVariant","variant","category","size","fontWeight","processVariants","variants","breakpoint","typographyClass","Text","React","color","as","className","children","weight","props","ref","typographyClasses","colorClasses","suggestedElement","baseVariant","cn","inputs","twMerge","clsx","focusRingStyles","filled","outlined","Button","b","isLoading","disabled","end","sizeMap","widthMap","avatarSizeMap","Fallback","lines","animate","baseClasses","animationClasses","customStyle","renderContent","_","index","BASE_SIZES","RESPONSIVE_SIZES","getSizeKey","getResponsiveSize","baseSize","classes","styles","key","baseKey","responsiveClasses","s","valueStr","value","valueKey","COLOR_MAP","Icon","name","title","style","IconComponent","IconMap","responsiveSizeClasses","responsiveSizeStyles","Pressable","type","Tag","onClose","pressableProps","isHovered","setIsHovered","useState","handleMouseEnter","useCallback","handleMouseLeave","content","WorkCard","iconName","tags","caption","playCount","backgroundImage","onClick","editable","showEditButton","setShowEditButton","tag"],"mappings":"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","file":"WorkCard.js","sourcesContent":["import React from \"react\";\n\nimport type { Typography } from \"../types/tailwind\";\nimport type { Breakpoint } from \"../utils/responsive\";\n\ntype TextElement =\n | \"p\"\n | \"span\"\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"h5\"\n | \"h6\"\n | \"strong\"\n | \"em\"\n | \"blockquote\"\n | \"pre\"\n | \"code\"\n | \"small\"\n | \"label\"\n | \"a\";\n\n// HTML element mapping type\ntype HTMLElementByTag = {\n p: HTMLParagraphElement;\n span: HTMLSpanElement;\n h1: HTMLHeadingElement;\n h2: HTMLHeadingElement;\n h3: HTMLHeadingElement;\n h4: HTMLHeadingElement;\n h5: HTMLHeadingElement;\n h6: HTMLHeadingElement;\n strong: HTMLElement;\n em: HTMLElement;\n blockquote: HTMLQuoteElement;\n pre: HTMLPreElement;\n code: HTMLElement;\n small: HTMLElement;\n label: HTMLLabelElement;\n a: HTMLAnchorElement;\n};\n\n// HTML props mapping type\ntype HTMLPropsMap = {\n p: React.HTMLAttributes<HTMLParagraphElement>;\n span: React.HTMLAttributes<HTMLSpanElement>;\n h1: React.HTMLAttributes<HTMLHeadingElement>;\n h2: React.HTMLAttributes<HTMLHeadingElement>;\n h3: React.HTMLAttributes<HTMLHeadingElement>;\n h4: React.HTMLAttributes<HTMLHeadingElement>;\n h5: React.HTMLAttributes<HTMLHeadingElement>;\n h6: React.HTMLAttributes<HTMLHeadingElement>;\n strong: React.HTMLAttributes<HTMLElement>;\n em: React.HTMLAttributes<HTMLElement>;\n blockquote: React.HTMLAttributes<HTMLQuoteElement>;\n pre: React.HTMLAttributes<HTMLPreElement>;\n code: React.HTMLAttributes<HTMLElement>;\n small: React.HTMLAttributes<HTMLElement>;\n label: React.LabelHTMLAttributes<HTMLLabelElement>;\n a: Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, \"color\">;\n};\n\ntype TextColor =\n | \"primary\"\n | \"secondary\"\n | \"white\"\n | \"primary-blue\"\n | \"disabled\"\n | \"danger\"\n | \"inherit\"\n | \"primary-100\";\n\nconst HEADING_ELEMENT_MAP: Record<string, TextElement> = {\n xl: \"h1\",\n lg: \"h1\",\n md: \"h2\",\n sm: \"h3\",\n xs: \"h4\"\n};\n\nconst getElementFromVariant = (variant: TypographyKey): TextElement => {\n const [category, size] = variant.split(\"-\");\n\n if (category === \"heading\") {\n return HEADING_ELEMENT_MAP[size] || \"p\";\n }\n\n if (category === \"label\") {\n return \"label\";\n }\n\n return \"p\";\n};\n\ntype Weight = \"light\" | \"regular\" | \"semibold\" | \"bold\";\n\nconst fontWeight: Record<Weight, string> = {\n light: \"font-light\",\n regular: \"font-regular\",\n semibold: \"font-semibold\",\n bold: \"font-bold\"\n};\n\ntype ResponsiveVariant = TypographyKey | `${Breakpoint}:${TypographyKey}`;\n\ntype TypographyCategory = keyof Typography;\ntype TypographyValue<T extends TypographyCategory> = Extract<\n keyof Typography[T],\n string | number | bigint | boolean | null | undefined\n>;\ntype TypographyKey = {\n [T in TypographyCategory]: `${T}-${TypographyValue<T>}`;\n}[TypographyCategory];\n\n// Update TextProps to use ResponsiveVariant\nexport type TextProps<T extends TextElement = \"p\"> = {\n variant?: ResponsiveVariant | ResponsiveVariant[];\n color?: TextColor;\n as?: T;\n className?: string;\n children: React.ReactNode;\n weight?: Weight;\n} & HTMLPropsMap[T];\n\n// Add helper function to process variants\nconst processVariants = (\n variants: ResponsiveVariant | ResponsiveVariant[] | undefined\n): string => {\n if (!variants) return \"text-body-default\";\n\n const variantArray = Array.isArray(variants) ? variants : [variants];\n\n return variantArray\n .map((variant) => {\n if (variant.includes(\":\")) {\n const [breakpoint, typographyClass] = variant.split(\":\");\n return `${breakpoint}:text-${typographyClass}`;\n }\n return `text-${variant}`;\n })\n .join(\" \");\n};\n\nexport const Text = React.forwardRef(\n <T extends TextElement = \"p\">(\n {\n variant = \"body-default\",\n color = \"primary\",\n as,\n className,\n children,\n weight,\n ...props\n }: TextProps<T>,\n ref: React.ForwardedRef<HTMLElementByTag[T]>\n ) => {\n // Process typography classes with breakpoints\n const typographyClasses = processVariants(variant);\n\n // Get color styles using Tailwind classes that reference CSS variables\n const colorClasses = color === \"inherit\" ? \"text-inherit\" : `text-${color}`;\n\n const suggestedElement = React.useMemo(() => {\n const baseVariant =\n typeof variant === \"string\"\n ? variant.split(\":\").pop()!\n : Array.isArray(variant)\n ? variant[0].split(\":\").pop()!\n : \"body-default\";\n return getElementFromVariant(baseVariant as TypographyKey);\n }, [variant]);\n\n const Component = (as || suggestedElement) as T;\n\n return (\n // @ts-expect-error TODO: figure this out\n <Component\n ref={ref}\n className={`\n font-sans antialiased\n ${typographyClasses}\n ${colorClasses}\n ${weight && `!${fontWeight[weight]}`}\n ${className}\n `}\n {...props}\n >\n {children}\n </Component>\n );\n }\n);\n\nText.displayName = \"Text\";\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport const noopFn = () => {};\n","import type { Colors, Typography } from \"../types/tailwind\";\n\n// Generate safelist patterns for all color utilities so you can use any theme color variable in your code\nexport const generateSafelist = (colors: Colors, typography: Typography) => {\n const colorNames = Object.keys(colors) as (keyof Colors)[];\n const utilities = [\"bg\", \"text\", \"border\", \"ring\", \"divide\", \"outline\"];\n const variants = [\"hover:\", \"focus:\", \"active:\", \"disabled:\"];\n const breakpoints = [\"sm\", \"md\", \"lg\", \"xl\", \"2xl\"];\n const sizes = [\"24\", \"42\", \"48\", \"64\", \"72\"]; // Add all the sizes you need\n\n const safelist: (string | { pattern: RegExp; variants: string[] })[] = [];\n\n colorNames.forEach((colorName) => {\n if (typeof colors[colorName] === \"object\") {\n // Handle nested color objects (with number keys)\n Object.keys(colors[colorName]).forEach((shade) => {\n utilities.forEach((utility) => {\n // Base utility\n safelist.push(`${utility}-${colorName}-${shade}`);\n\n // Variant utilities\n variants.forEach((variant) => {\n safelist.push(`${variant}${utility}-${colorName}-${shade}`);\n });\n });\n });\n } else {\n // Handle direct color values\n utilities.forEach((utility) => {\n safelist.push(`${utility}-${colorName}`);\n\n variants.forEach((variant) => {\n safelist.push(`${variant}${utility}-${colorName}`);\n });\n });\n }\n });\n\n // Generate typography classes\n Object.entries(typography).forEach(([family, sizes]) => {\n Object.keys(sizes).forEach((size) => {\n // Base typography classes\n safelist.push(`text-${family}-${size}`);\n\n // Add variants\n variants.forEach((variant) => {\n safelist.push(`${variant}text-${family}-${size}`);\n });\n });\n });\n\n const typographyClasses = Object.entries(typography).flatMap(\n ([category, sizes]) =>\n Object.keys(sizes).map((size) => `text-${category}-${size}`)\n );\n\n // Generate responsive variants\n const responsiveTypographyClasses = typographyClasses.flatMap((className) =>\n breakpoints.map((breakpoint) => `${breakpoint}:${className}`)\n );\n\n // Generate size classes with responsive variants\n const sizeClasses = sizes.flatMap((size) => [\n `h-[${size}px]`,\n `w-[${size}px]`,\n ...breakpoints.flatMap((bp) => [\n `${bp}:h-[${size}px]`,\n `${bp}:w-[${size}px]`\n ])\n ]);\n\n return [...typographyClasses, ...responsiveTypographyClasses, ...sizeClasses];\n};\n\nexport const focusRingStyles =\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-100\";\nexport const focusRingWithinStyles =\n \"focus-within:outline-none focus-within:ring-2 focus-within:ring-primary-100\";\nexport const focusRingStylesCoerced = \"ring-2 ring-primary-100\";\n","import * as React from \"react\";\n\nimport { Text } from \"./Text\";\nimport { cn } from \"../utils\";\nimport { focusRingStyles } from \"../utils/tailwind\";\n\nexport type ButtonProps = {\n /** @default filled */\n variant?: \"filled\" | \"outlined\" | \"transparent\";\n /** @default primary */\n color?: \"black\" | \"accent\" | \"secondary\";\n isLoading?: boolean;\n children: React.ReactNode;\n className?: string;\n disabled?: boolean;\n start?: React.ReactNode;\n end?: React.ReactNode;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const filled = {\n black: \"bg-primary text-white\",\n // fade it slightly\n accent: \"bg-primary-100 text-white\",\n secondary: \"bg-secondary-100 text-secondary\"\n};\n\nexport const outlined = {\n black: \"border border-text text-primary\",\n accent: \"border border-primary-100 text-primary-100\",\n secondary: \"border border-text-secondary text-secondary\"\n};\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant = \"filled\",\n color = \"black\",\n isLoading = false,\n children,\n disabled,\n end,\n ...props\n },\n ref\n ) => (\n <button\n ref={ref}\n className={cn(\n `\n sm:px-7 px-4\n py-2\n inline-flex items-center justify-center\n rounded-lg \n transition-colors duration-200\n disabled:opacity-50 disabled:pointer-events-none\n hover:opacity-80 active:scale-95 \n truncate`,\n focusRingStyles,\n variant === \"filled\"\n ? filled[color]\n : variant === \"transparent\"\n ? \"bg-transparent text-text\"\n : outlined[color],\n className\n )}\n disabled={disabled || isLoading}\n type=\"button\"\n {...props}\n >\n {typeof children === \"string\" ? (\n <Text\n variant={[\"sm:body-default-bold\", \"body-xxs-semibold\"]}\n color=\"inherit\"\n >\n {children}\n </Text>\n ) : (\n children\n )}\n {end}\n </button>\n )\n);\n\nButton.displayName = \"Button\";\n","import React from \"react\";\n\nimport { cn } from \"../utils\";\n\nexport type FallbackVariant = \"text\" | \"image\" | \"button\" | \"card\" | \"avatar\";\nexport type FallbackSize = \"sm\" | \"md\" | \"lg\" | number;\n\nexport type FallbackProps = {\n /**\n * The type of content being loaded\n */\n variant?: FallbackVariant;\n /**\n * The size of the fallback element\n * Can be a predefined size ('sm' | 'md' | 'lg') or a custom pixel value\n */\n size?: FallbackSize;\n /**\n * Whether to show multiple lines (only applies to text variant)\n */\n lines?: number;\n /**\n * Additional classes to apply to the fallback\n */\n className?: string;\n /**\n * Whether to show the loading animation\n */\n animate?: boolean;\n};\n\n// Updated to match existing component sizes\nconst sizeMap = {\n sm: \"h-4\", // 16px\n md: \"h-6\", // 24px\n lg: \"h-8\" // 32px\n};\n\n// Updated to match existing component sizes\nconst widthMap = {\n sm: \"w-20\", // 80px\n md: \"w-32\", // 128px\n lg: \"w-48\" // 192px\n};\n\n// Updated to match Avatar sizes\nconst avatarSizeMap = {\n sm: \"w-8 h-8\", // 32px\n md: \"w-12 h-12\", // 48px\n lg: \"w-16 h-16\" // 64px\n};\n\nexport const Fallback = React.forwardRef<HTMLDivElement, FallbackProps>(\n (\n { variant = \"text\", size = \"md\", lines = 1, className, animate = true },\n ref\n ) => {\n const baseClasses = \"bg-secondary-50 rounded-lg overflow-hidden\";\n const animationClasses = animate ? \"animate-pulse\" : \"\";\n\n const getCustomSizeStyle = (size: number) => ({\n height: `${size}px`,\n width:\n variant === \"avatar\" || variant === \"image\" ? `${size}px` : undefined\n });\n\n const customStyle =\n typeof size === \"number\" ? getCustomSizeStyle(size) : undefined;\n\n const renderContent = () => {\n switch (variant) {\n case \"text\":\n return (\n <div className=\"flex flex-col gap-2\">\n {Array.from({ length: lines }).map((_, index) => (\n <div\n key={index}\n style={customStyle}\n className={cn(\n baseClasses,\n animationClasses,\n typeof size === \"string\" ? sizeMap[size] : undefined,\n index === lines - 1 && lines > 1 ? \"w-3/4\" : \"w-full\",\n className\n )}\n />\n ))}\n </div>\n );\n\n case \"image\":\n return (\n <div\n style={customStyle}\n className={cn(\n baseClasses,\n animationClasses,\n (!customStyle || !className) &&\n \"aspect-square w-full max-w-[300px]\",\n className\n )}\n />\n );\n\n case \"button\":\n return (\n <div\n style={customStyle}\n className={cn(\n baseClasses,\n animationClasses,\n typeof size === \"string\" && [sizeMap[size], widthMap[size]],\n className\n )}\n />\n );\n\n case \"card\":\n return (\n <div\n className={cn(\n \"flex flex-col gap-4 p-6 border border-stroke rounded-xl\",\n className\n )}\n >\n <div\n className={cn(\n baseClasses,\n animationClasses,\n \"w-16 h-16 rounded-full\"\n )}\n />\n <div className=\"space-y-2\">\n <div\n className={cn(baseClasses, animationClasses, \"h-6 w-3/4\")}\n />\n <div\n className={cn(baseClasses, animationClasses, \"h-4 w-1/2\")}\n />\n </div>\n <div className=\"space-y-2\">\n <div\n className={cn(baseClasses, animationClasses, \"h-4 w-full\")}\n />\n <div\n className={cn(baseClasses, animationClasses, \"h-4 w-full\")}\n />\n <div\n className={cn(baseClasses, animationClasses, \"h-4 w-2/3\")}\n />\n </div>\n </div>\n );\n\n case \"avatar\":\n return (\n <div\n style={customStyle}\n className={cn(\n baseClasses,\n animationClasses,\n \"rounded-full\",\n {\n [avatarSizeMap.sm]: size === \"sm\",\n [avatarSizeMap.md]: size === \"md\",\n [avatarSizeMap.lg]: size === \"lg\"\n },\n className\n )}\n />\n );\n\n default:\n return null;\n }\n };\n\n return (\n <div ref={ref} className={cn(\"w-full\", className)}>\n {renderContent()}\n </div>\n );\n }\n);\n\nFallback.displayName = \"Fallback\";\n","import type { IconName } from \"@deckai/icons\";\nimport { IconMap } from \"@deckai/icons\";\nimport type { SVGProps } from \"react\";\nimport React from \"react\";\n\nimport type { IconColors } from \"../types/tailwind\";\nimport { cn } from \"../utils\";\nimport type { ResponsiveSize } from \"../utils/responsive\";\nimport { getResponsiveSize } from \"../utils/responsive\";\n\nexport type IconProps = {\n name: IconName;\n /** @default 24 */\n size?: ResponsiveSize | ResponsiveSize[];\n /** @default primary */\n color?: IconColors;\n title?: string;\n className?: string;\n style?: React.CSSProperties;\n} & Omit<SVGProps<SVGSVGElement>, \"aria-hidden\" | \"aria-label\">;\n\n// Using CSS variables to support dark mode\nconst COLOR_MAP: Record<IconColors, string> = {\n primary: \"var(--color-primary)\",\n secondary: \"var(--color-secondary)\",\n white: \"var(--color-white)\",\n primaryBlue: \"var(--color-primary-100)\",\n disabled: \"var(--color-disabled)\",\n danger: \"var(--color-danger)\"\n};\n\nexport const Icon = React.forwardRef<SVGSVGElement, IconProps>(\n (\n {\n name,\n size = 24,\n color = \"primary\",\n title,\n className,\n style = {},\n ...props\n },\n ref\n ) => {\n const IconComponent = IconMap[name];\n const { responsiveSizeClasses, responsiveSizeStyles } = getResponsiveSize(\n size,\n 24\n );\n\n return (\n <div\n className={cn(\n \"flex justify-center items-center\",\n responsiveSizeClasses,\n className\n )}\n style={{\n [\"--icon-stroke\" as string]: COLOR_MAP[color],\n ...responsiveSizeStyles,\n ...style\n }}\n >\n <IconComponent\n ref={ref}\n aria-hidden={!title}\n aria-label={title}\n stroke={name.includes(\"filled\") ? undefined : COLOR_MAP[color]}\n {...props}\n />\n </div>\n );\n }\n);\n\nIcon.displayName = \"Icon\";\n","export type Breakpoint = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\nexport type ResponsiveSize = number | `${Breakpoint}:${number}`;\n\ntype SizeKey =\n | \"12\"\n | \"16\"\n | \"18\"\n | \"20\"\n | \"24\"\n | \"32\"\n | \"36\"\n | \"40\"\n | \"42\"\n | \"48\"\n | \"64\"\n | \"72\";\n\n// These constants help Tailwind identify the classes during compilation\nconst BASE_SIZES: Record<SizeKey, string> = {\n \"12\": \"h-[12px] w-[12px]\",\n \"16\": \"h-[16px] w-[16px]\",\n \"18\": \"h-[18px] w-[18px]\",\n \"20\": \"h-[20px] w-[20px]\",\n \"24\": \"h-[24px] w-[24px]\",\n \"32\": \"h-[32px] w-[32px]\",\n \"36\": \"h-[36px] w-[36px]\",\n \"40\": \"h-[40px] w-[40px]\",\n \"42\": \"h-[42px] w-[42px]\",\n \"48\": \"h-[48px] w-[48px]\",\n \"64\": \"h-[64px] w-[64px]\",\n \"72\": \"h-[72px] w-[72px]\"\n};\n\nconst RESPONSIVE_SIZES: Record<Breakpoint, Record<SizeKey, string>> = {\n sm: {\n \"12\": \"sm:h-[12px] sm:w-[12px]\",\n \"16\": \"sm:h-[16px] sm:w-[16px]\",\n \"18\": \"sm:h-[18px] sm:w-[18px]\",\n \"20\": \"sm:h-[20px] sm:w-[20px]\",\n \"24\": \"sm:h-[24px] sm:w-[24px]\",\n \"32\": \"sm:h-[32px] sm:w-[32px]\",\n \"36\": \"sm:h-[36px] sm:w-[36px]\",\n \"40\": \"sm:h-[40px] sm:w-[40px]\",\n \"42\": \"sm:h-[42px] sm:w-[42px]\",\n \"48\": \"sm:h-[48px] sm:w-[48px]\",\n \"64\": \"sm:h-[64px] sm:w-[64px]\",\n \"72\": \"sm:h-[72px] sm:w-[72px]\"\n },\n md: {\n \"12\": \"md:h-[12px] md:w-[12px]\",\n \"16\": \"md:h-[16px] md:w-[16px]\",\n \"18\": \"md:h-[18px] md:w-[18px]\",\n \"20\": \"md:h-[20px] md:w-[20px]\",\n \"24\": \"md:h-[24px] md:w-[24px]\",\n \"32\": \"md:h-[32px] md:w-[32px]\",\n \"36\": \"md:h-[36px] md:w-[36px]\",\n \"40\": \"md:h-[40px] md:w-[40px]\",\n \"42\": \"md:h-[42px] md:w-[42px]\",\n \"48\": \"md:h-[48px] md:w-[48px]\",\n \"64\": \"md:h-[64px] md:w-[64px]\",\n \"72\": \"md:h-[72px] md:w-[72px]\"\n },\n lg: {\n \"12\": \"lg:h-[12px] lg:w-[12px]\",\n \"16\": \"lg:h-[16px] lg:w-[16px]\",\n \"18\": \"lg:h-[18px] lg:w-[18px]\",\n \"20\": \"lg:h-[20px] lg:w-[20px]\",\n \"24\": \"lg:h-[24px] lg:w-[24px]\",\n \"32\": \"lg:h-[32px] lg:w-[32px]\",\n \"36\": \"lg:h-[36px] lg:w-[36px]\",\n \"40\": \"lg:h-[40px] lg:w-[40px]\",\n \"42\": \"lg:h-[42px] lg:w-[42px]\",\n \"48\": \"lg:h-[48px] lg:w-[48px]\",\n \"64\": \"lg:h-[64px] lg:w-[64px]\",\n \"72\": \"lg:h-[72px] lg:w-[72px]\"\n },\n xl: {\n \"12\": \"xl:h-[12px] xl:w-[12px]\",\n \"16\": \"xl:h-[16px] xl:w-[16px]\",\n \"18\": \"xl:h-[18px] xl:w-[18px]\",\n \"20\": \"xl:h-[20px] xl:w-[20px]\",\n \"24\": \"xl:h-[24px] xl:w-[24px]\",\n \"32\": \"xl:h-[32px] xl:w-[32px]\",\n \"36\": \"xl:h-[36px] xl:w-[36px]\",\n \"40\": \"xl:h-[40px] xl:w-[40px]\",\n \"42\": \"xl:h-[42px] xl:w-[42px]\",\n \"48\": \"xl:h-[48px] xl:w-[48px]\",\n \"64\": \"xl:h-[64px] xl:w-[64px]\",\n \"72\": \"xl:h-[72px] xl:w-[72px]\"\n },\n \"2xl\": {\n \"12\": \"2xl:h-[12px] 2xl:w-[12px]\",\n \"16\": \"2xl:h-[16px] 2xl:w-[16px]\",\n \"18\": \"2xl:h-[18px] 2xl:w-[18px]\",\n \"20\": \"2xl:h-[20px] 2xl:w-[20px]\",\n \"24\": \"2xl:h-[24px] 2xl:w-[24px]\",\n \"32\": \"2xl:h-[32px] 2xl:w-[32px]\",\n \"36\": \"2xl:h-[36px] 2xl:w-[36px]\",\n \"40\": \"2xl:h-[40px] 2xl:w-[40px]\",\n \"42\": \"2xl:h-[42px] 2xl:w-[42px]\",\n \"48\": \"2xl:h-[48px] 2xl:w-[48px]\",\n \"64\": \"2xl:h-[64px] 2xl:w-[64px]\",\n \"72\": \"2xl:h-[72px] 2xl:w-[72px]\"\n }\n};\n\nconst getSizeKey = (size: number): SizeKey | undefined => {\n return String(size) as SizeKey;\n};\n\nexport const getResponsiveSize = (\n size: ResponsiveSize | ResponsiveSize[] | undefined,\n baseSize: number = 24\n): {\n responsiveSizeClasses: string;\n responsiveSizeStyles: Record<string, string>;\n} => {\n const classes: string[] = [];\n const styles: Record<string, string> = {};\n\n // If no size provided, use baseSize\n if (size === undefined) {\n const key = getSizeKey(baseSize);\n if (key) {\n classes.push(BASE_SIZES[key]);\n } else {\n styles.height = `${baseSize}px`;\n styles.width = `${baseSize}px`;\n }\n }\n\n // If size is a number, use that directly\n if (typeof size === \"number\") {\n const key = getSizeKey(size);\n if (key) {\n classes.push(BASE_SIZES[key]);\n } else {\n styles.height = `${size}px`;\n styles.width = `${size}px`;\n }\n }\n\n // If array of responsive sizes, generate responsive classes\n if (Array.isArray(size)) {\n const baseKey = getSizeKey(baseSize);\n const responsiveClasses = [\n (baseKey && BASE_SIZES[baseKey]) || `h-[${baseSize}px] w-[${baseSize}px]`\n ];\n\n size.forEach((s) => {\n if (typeof s === \"string\") {\n const [breakpoint, valueStr] = s.split(\":\") as [Breakpoint, string];\n const value = parseInt(valueStr, 10);\n const key = getSizeKey(value);\n classes.push(\n (key && RESPONSIVE_SIZES[breakpoint]?.[key]) ||\n `${breakpoint}:h-[${value}px] ${breakpoint}:w-[${value}px]`\n );\n }\n });\n\n classes.push(...responsiveClasses);\n }\n\n if (typeof size === \"string\") {\n const [breakpoint, valueStr] = size.split(\":\") as [Breakpoint, string];\n const value = parseInt(valueStr, 10);\n const valueKey = getSizeKey(value);\n classes.push(\n (valueKey && RESPONSIVE_SIZES[breakpoint]?.[valueKey]) ||\n `${breakpoint}:h-[${value}px] ${breakpoint}:w-[${value}px]`\n );\n }\n\n return {\n responsiveSizeClasses: classes.join(\" \"),\n responsiveSizeStyles: styles\n };\n};\n","import type { ButtonHTMLAttributes } from \"react\";\nimport React from \"react\";\n\nimport { cn } from \"../utils\";\nimport { focusRingStyles } from \"../utils/tailwind\";\n\nexport type PressableProps = ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const Pressable = React.forwardRef<HTMLButtonElement, PressableProps>(\n ({ children, type = \"button\", className, disabled, ...props }, ref) => (\n <button\n ref={ref}\n type={type}\n disabled={disabled}\n className={cn(\n \"appearance-none hover:opacity-80 transition-all active:scale-95\",\n focusRingStyles,\n disabled && \"opacity-50 cursor-not-allowed\",\n className\n )}\n {...props}\n >\n {children}\n </button>\n )\n);\n\nPressable.displayName = \"Pressable\";\n","import type { HTMLAttributes } from \"react\";\nimport React, { useCallback, useState } from \"react\";\n\nimport { cn } from \"../utils\";\nimport { Icon } from \"./Icon\";\nimport type { PressableProps } from \"./Pressable\";\nimport { Pressable } from \"./Pressable\";\nimport { Text } from \"./Text\";\n\nexport type TagProps = {\n children: React.ReactNode;\n padded?: boolean;\n color?: \"primary\" | \"text\";\n onClose?: () => void;\n} & HTMLAttributes<HTMLDivElement> &\n PressableProps;\n\nexport function Tag({\n children,\n color = \"primary\",\n className,\n onClose,\n ...pressableProps\n}: TagProps) {\n const [isHovered, setIsHovered] = useState(false);\n\n const handleMouseEnter = useCallback(() => {\n setIsHovered(true);\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setIsHovered(false);\n }, []);\n\n const content = (\n <div\n className={cn(\n \"flex gap-2\",\n onClose\n ? \"justify-between items-center max-w-fit\"\n : \"items-center justify-center\",\n \"hover:bg-primary-100 rounded bg-secondary-400 px-2 py-1 sm:px-3 sm:py-1.5 h-min hover:text-white\",\n color === \"primary\" ? \"text-primary-100\" : \"text-primary\",\n className\n )}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {typeof children === \"string\" ? (\n <Text\n color=\"inherit\"\n variant={[\"md:body-default-medium\", \"body-xxs-medium\"]}\n className=\"truncate pt-0.5\"\n >\n {children}\n </Text>\n ) : (\n children\n )}\n {onClose && (\n <Pressable\n {...pressableProps}\n onClick={onClose}\n className=\"flex items-center justify-center\"\n >\n <Icon\n name=\"close\"\n size={12}\n color={isHovered ? \"white\" : \"primaryBlue\"}\n />\n </Pressable>\n )}\n </div>\n );\n\n return onClose ? (\n content\n ) : (\n <Pressable {...pressableProps}>{content}</Pressable>\n );\n}\n","import type { IconName } from \"@deckai/icons\";\nimport React, { useState } from \"react\";\n\nimport { Button } from \"./Button\";\nimport { Fallback } from \"./Fallback\";\nimport { Icon } from \"./Icon\";\nimport { Pressable } from \"./Pressable\";\nimport { Tag } from \"./Tag\";\nimport { Text } from \"./Text\";\n\nexport type WorkCardProps = {\n iconName?: IconName;\n tags?: string[];\n caption?: string;\n /** play count should already be formatted with k or m */\n playCount?: string;\n backgroundImage?: string;\n onClick?: () => void;\n className?: string;\n editable?: boolean;\n isLoading?: boolean;\n};\n\nexport function WorkCard({\n iconName,\n tags,\n caption,\n playCount,\n backgroundImage,\n onClick,\n className,\n editable = false,\n isLoading\n}: WorkCardProps) {\n const [showEditButton, setShowEditButton] = useState(false);\n\n if (isLoading) {\n return (\n <div className=\"sm:w-[227px] sm:h-[371px] w-[148px] h-[234px]\">\n <Fallback variant=\"image\" className=\"w-full h-full rounded-2xl\" />\n </div>\n );\n }\n\n return (\n <Pressable\n onClick={onClick}\n onMouseOver={() => setShowEditButton(true)}\n onMouseLeave={() => setShowEditButton(false)}\n >\n <div\n className={`flex flex-col justify-between p-4 sm:w-[227px] sm:h-[371px] w-[148px] h-[234px] rounded-2xl relative overflow-hidden ${className}`}\n style={{\n backgroundColor: \"#e7e7e7\",\n backgroundImage: `url(${backgroundImage})`,\n backgroundSize: \"cover\",\n backgroundPosition: \"center\",\n backgroundRepeat: \"no-repeat\"\n }}\n >\n <div className=\"flex justify-between items-center\">\n {iconName && (\n <div className=\"flex items-center justify-center bg-overlay h-10 w-10 rounded-full\">\n <Icon name={iconName} size={20} color=\"white\" />\n </div>\n )}\n {tags && (\n <div className=\"flex gap-2 items-center\">\n {tags.map((tag, index) => (\n <Tag key={index} color=\"text\">\n {tag}\n </Tag>\n ))}\n </div>\n )}\n </div>\n {caption && (\n <div className=\"flex flex-col gap-1 p-2 rounded-lg bg-overlay max-h-[60px] overflow-hidden\">\n <Text variant=\"body-default-medium\" className=\"text-white truncate\">\n {caption}\n </Text>\n {playCount && (\n <div className=\"flex gap-2\">\n <Icon name=\"play\" size={16} color=\"white\" />\n <Text variant=\"body-xs-medium\" className=\"text-white\">\n {playCount}\n </Text>\n </div>\n )}\n </div>\n )}\n {editable && showEditButton && (\n <div className=\"absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2\">\n <Button\n color=\"accent\"\n variant=\"filled\"\n className=\"!px-3 !py-3 z-20 shadow-md hover:opacity-100\"\n onClick={onClick}\n >\n <Icon name=\"edit\" color=\"white\" />\n </Button>\n </div>\n )}\n </div>\n </Pressable>\n );\n}\n"]}
|