@tipp/ui 1.6.21 → 1.6.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.
Files changed (65) hide show
  1. package/dist/app/index.cjs +10 -16
  2. package/dist/app/index.cjs.map +1 -1
  3. package/dist/app/index.js +1 -1
  4. package/dist/app/platform/contents-card.cjs +594 -28
  5. package/dist/app/platform/contents-card.cjs.map +1 -1
  6. package/dist/app/platform/contents-card.js +52 -1
  7. package/dist/chunk-3K3WU7XM.js +145 -0
  8. package/dist/chunk-3K3WU7XM.js.map +1 -0
  9. package/dist/chunk-44STOGYA.js +164 -0
  10. package/dist/chunk-44STOGYA.js.map +1 -0
  11. package/dist/chunk-53ZJS5JI.js +111 -0
  12. package/dist/chunk-53ZJS5JI.js.map +1 -0
  13. package/dist/chunk-6LV4UGX5.js +165 -0
  14. package/dist/chunk-6LV4UGX5.js.map +1 -0
  15. package/dist/chunk-6RT2RUZ2.js +145 -0
  16. package/dist/chunk-6RT2RUZ2.js.map +1 -0
  17. package/dist/chunk-7CANQHBM.js +117 -0
  18. package/dist/chunk-7CANQHBM.js.map +1 -0
  19. package/dist/chunk-7WJGYLRQ.js +99 -0
  20. package/dist/chunk-7WJGYLRQ.js.map +1 -0
  21. package/dist/chunk-ABZVJJ4O.js +74 -0
  22. package/dist/chunk-ABZVJJ4O.js.map +1 -0
  23. package/dist/chunk-BBEZXZQH.js +284 -0
  24. package/dist/chunk-BBEZXZQH.js.map +1 -0
  25. package/dist/chunk-CUVAI5MJ.js +117 -0
  26. package/dist/chunk-CUVAI5MJ.js.map +1 -0
  27. package/dist/chunk-FBOJKLC6.js +64 -0
  28. package/dist/chunk-FBOJKLC6.js.map +1 -0
  29. package/dist/chunk-FF2PTPBU.js +145 -0
  30. package/dist/chunk-FF2PTPBU.js.map +1 -0
  31. package/dist/chunk-HXJYOUBE.js +30 -0
  32. package/dist/chunk-HXJYOUBE.js.map +1 -0
  33. package/dist/chunk-JAJC7VPU.js +117 -0
  34. package/dist/chunk-JAJC7VPU.js.map +1 -0
  35. package/dist/chunk-KCGIEABE.js +117 -0
  36. package/dist/chunk-KCGIEABE.js.map +1 -0
  37. package/dist/chunk-L5XYBDEW.js +116 -0
  38. package/dist/chunk-L5XYBDEW.js.map +1 -0
  39. package/dist/chunk-MWBEL3OY.js +111 -0
  40. package/dist/chunk-MWBEL3OY.js.map +1 -0
  41. package/dist/chunk-O5H5SQHB.js +110 -0
  42. package/dist/chunk-O5H5SQHB.js.map +1 -0
  43. package/dist/chunk-QGXLI3QC.js +111 -0
  44. package/dist/chunk-QGXLI3QC.js.map +1 -0
  45. package/dist/chunk-RPTU2HZS.js +111 -0
  46. package/dist/chunk-RPTU2HZS.js.map +1 -0
  47. package/dist/chunk-RVLCXUJU.js +113 -0
  48. package/dist/chunk-RVLCXUJU.js.map +1 -0
  49. package/dist/chunk-VKGTIYVH.js +63 -0
  50. package/dist/chunk-VKGTIYVH.js.map +1 -0
  51. package/dist/chunk-VR25ARRS.js +60 -0
  52. package/dist/chunk-VR25ARRS.js.map +1 -0
  53. package/dist/chunk-WEU6WLM4.js +39 -0
  54. package/dist/chunk-WEU6WLM4.js.map +1 -0
  55. package/dist/chunk-YC6CJEKF.js +102 -0
  56. package/dist/chunk-YC6CJEKF.js.map +1 -0
  57. package/dist/chunk-YMKOJKGY.js +145 -0
  58. package/dist/chunk-YMKOJKGY.js.map +1 -0
  59. package/dist/chunk-YTBR7GSV.js +111 -0
  60. package/dist/chunk-YTBR7GSV.js.map +1 -0
  61. package/dist/index.cjs +10 -16
  62. package/dist/index.cjs.map +1 -1
  63. package/dist/index.js +1 -1
  64. package/package.json +3 -3
  65. package/src/app/platform/contents-card.tsx +23 -26
@@ -0,0 +1,116 @@
1
+ import {
2
+ Skeleton
3
+ } from "./chunk-5H3YPCZK.js";
4
+ import {
5
+ Grid
6
+ } from "./chunk-EGEQY3KT.js";
7
+ import {
8
+ Inset
9
+ } from "./chunk-XQOL7UBI.js";
10
+ import {
11
+ Heading
12
+ } from "./chunk-HJB3AASV.js";
13
+ import {
14
+ DropdownMenu
15
+ } from "./chunk-4WFMOFN2.js";
16
+ import {
17
+ Card
18
+ } from "./chunk-2ZQK7NTN.js";
19
+ import {
20
+ Box
21
+ } from "./chunk-4Y5BEXVN.js";
22
+ import {
23
+ Typo
24
+ } from "./chunk-52MVZ6AN.js";
25
+ import {
26
+ Flex
27
+ } from "./chunk-25HMMI7R.js";
28
+ import {
29
+ Button
30
+ } from "./chunk-Q5AFRGVP.js";
31
+ import {
32
+ DotsVerticalIcon
33
+ } from "./chunk-HLFG5ZTU.js";
34
+
35
+ // src/app/platform/contents-card.tsx
36
+ import { forwardRef } from "react";
37
+ import { jsx, jsxs } from "react/jsx-runtime";
38
+ var ContentsCard = forwardRef(
39
+ ({
40
+ title,
41
+ description,
42
+ imageSrc,
43
+ footer,
44
+ dropdownItems,
45
+ onClickCard,
46
+ isLoading = false
47
+ }, ref) => {
48
+ return /* @__PURE__ */ jsxs(
49
+ Card,
50
+ {
51
+ onClick: onClickCard,
52
+ ref,
53
+ style: {
54
+ height: "100%",
55
+ width: "100%",
56
+ display: "grid",
57
+ cursor: "pointer"
58
+ },
59
+ children: [
60
+ /* @__PURE__ */ jsx(Inset, { clip: "padding-box", pb: "0", side: "top", children: /* @__PURE__ */ jsx(Skeleton, { loading: isLoading, children: /* @__PURE__ */ jsx(
61
+ Box,
62
+ {
63
+ height: "210px",
64
+ style: {
65
+ backgroundImage: `url(${imageSrc})`,
66
+ backgroundSize: "cover",
67
+ backgroundPosition: "center"
68
+ },
69
+ width: "100%"
70
+ }
71
+ ) }) }),
72
+ /* @__PURE__ */ jsxs(Flex, { direction: "column", p: "4", pb: "3", children: [
73
+ /* @__PURE__ */ jsxs(Box, { children: [
74
+ /* @__PURE__ */ jsx(Skeleton, { loading: isLoading, children: /* @__PURE__ */ jsx(Heading, { mb: "3", variant: "heading5", children: title }) }),
75
+ /* @__PURE__ */ jsx(Skeleton, { loading: isLoading, children: /* @__PURE__ */ jsx(Typo, { as: "p", variant: "caption", children: description }) })
76
+ ] }),
77
+ /* @__PURE__ */ jsxs(
78
+ Grid,
79
+ {
80
+ align: "center",
81
+ columns: "1fr auto",
82
+ justify: "between",
83
+ pt: "2",
84
+ style: { marginTop: "auto" },
85
+ width: "100%",
86
+ children: [
87
+ /* @__PURE__ */ jsx(Skeleton, { loading: isLoading, children: /* @__PURE__ */ jsx(Flex, { gap: "3", overflow: "hidden", children: footer }) }),
88
+ Boolean(dropdownItems == null ? void 0 : dropdownItems.length) && /* @__PURE__ */ jsxs(DropdownMenu.Root, { children: [
89
+ /* @__PURE__ */ jsx(DropdownMenu.Trigger, { children: /* @__PURE__ */ jsx(Button, { size: "large", variant: "transparent", children: /* @__PURE__ */ jsx(DotsVerticalIcon, { color: "gray", height: "20px", width: "20px" }) }) }),
90
+ /* @__PURE__ */ jsx(DropdownMenu.Content, { children: dropdownItems == null ? void 0 : dropdownItems.map((item) => /* @__PURE__ */ jsx(
91
+ DropdownMenu.Item,
92
+ {
93
+ onClick: (e) => {
94
+ e.stopPropagation();
95
+ item.onClick();
96
+ },
97
+ children: item.label
98
+ },
99
+ item.label
100
+ )) })
101
+ ] })
102
+ ]
103
+ }
104
+ )
105
+ ] })
106
+ ]
107
+ }
108
+ );
109
+ }
110
+ );
111
+ ContentsCard.displayName = "ContentsCard";
112
+
113
+ export {
114
+ ContentsCard
115
+ };
116
+ //# sourceMappingURL=chunk-L5XYBDEW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/app/platform/contents-card.tsx"],"sourcesContent":["import React, { forwardRef } from 'react';\nimport { Heading } from '@/atoms/heading';\nimport { Button } from '@/atoms/button';\nimport { DropdownMenu } from '@/atoms/dropdown-menu';\nimport { Box } from '@/atoms/box';\nimport { Flex } from '@/atoms/flex';\nimport { Grid } from '@/atoms/grid';\nimport { Skeleton } from '@/atoms/skeleton';\nimport { Typo } from '@/atoms/typo';\nimport { DotsVerticalIcon } from '@/icon';\nimport { Card, Inset } from '@/atoms';\n\nexport interface ContentsCardProps {\n title?: React.ReactNode;\n description?: string;\n id?: string;\n imageSrc?: string | null;\n imageAlt?: string;\n footer?: React.ReactNode;\n dropdownItems?: {\n label: string;\n onClick: () => void;\n }[];\n onClickCard?: () => void;\n isLoading?: boolean;\n}\n\nexport const ContentsCard = forwardRef<HTMLDivElement, ContentsCardProps>(\n (\n {\n title,\n description,\n imageSrc,\n footer,\n dropdownItems,\n onClickCard,\n isLoading = false,\n },\n ref\n ): React.ReactElement => {\n return (\n <Card\n onClick={onClickCard}\n ref={ref}\n style={{\n height: '100%',\n width: '100%',\n display: 'grid',\n cursor: 'pointer',\n }}\n >\n {/* 섬네일 */}\n <Inset clip=\"padding-box\" pb=\"0\" side=\"top\">\n <Skeleton loading={isLoading}>\n <Box\n height=\"210px\"\n style={{\n backgroundImage: `url(${imageSrc})`,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n }}\n width=\"100%\"\n />\n </Skeleton>\n </Inset>\n {/* 제목, 설명 */}\n <Flex direction=\"column\" p=\"4\" pb=\"3\">\n <Box>\n <Skeleton loading={isLoading}>\n <Heading mb=\"3\" variant=\"heading5\">\n {title}\n </Heading>\n </Skeleton>\n <Skeleton loading={isLoading}>\n <Typo as=\"p\" variant=\"caption\">\n {description}\n </Typo>\n </Skeleton>\n </Box>\n <Grid\n align=\"center\"\n columns=\"1fr auto\"\n justify=\"between\"\n pt=\"2\"\n style={{ marginTop: 'auto' }}\n width=\"100%\"\n >\n <Skeleton loading={isLoading}>\n <Flex gap=\"3\" overflow=\"hidden\">\n {footer}\n </Flex>\n </Skeleton>\n {Boolean(dropdownItems?.length) && (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger>\n <Button size=\"large\" variant=\"transparent\">\n <DotsVerticalIcon color=\"gray\" height=\"20px\" width=\"20px\" />\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content>\n {dropdownItems?.map((item) => (\n <DropdownMenu.Item\n key={item.label}\n onClick={(e) => {\n e.stopPropagation();\n item.onClick();\n }}\n >\n {item.label}\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n )}\n </Grid>\n </Flex>\n </Card>\n );\n }\n);\nContentsCard.displayName = 'ContentsCard';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAgB,kBAAkB;AAsDtB,cAaF,YAbE;AA3BL,IAAM,eAAe;AAAA,EAC1B,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY;AAAA,EACd,GACA,QACuB;AACvB,WACE;AAAA,MAAC;AAAA;AAAA,QACC,SAAS;AAAA,QACT;AAAA,QACA,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,SAAS;AAAA,UACT,QAAQ;AAAA,QACV;AAAA,QAGA;AAAA,8BAAC,SAAM,MAAK,eAAc,IAAG,KAAI,MAAK,OACpC,8BAAC,YAAS,SAAS,WACjB;AAAA,YAAC;AAAA;AAAA,cACC,QAAO;AAAA,cACP,OAAO;AAAA,gBACL,iBAAiB,OAAO,QAAQ;AAAA,gBAChC,gBAAgB;AAAA,gBAChB,oBAAoB;AAAA,cACtB;AAAA,cACA,OAAM;AAAA;AAAA,UACR,GACF,GACF;AAAA,UAEA,qBAAC,QAAK,WAAU,UAAS,GAAE,KAAI,IAAG,KAChC;AAAA,iCAAC,OACC;AAAA,kCAAC,YAAS,SAAS,WACjB,8BAAC,WAAQ,IAAG,KAAI,SAAQ,YACrB,iBACH,GACF;AAAA,cACA,oBAAC,YAAS,SAAS,WACjB,8BAAC,QAAK,IAAG,KAAI,SAAQ,WAClB,uBACH,GACF;AAAA,eACF;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,OAAM;AAAA,gBACN,SAAQ;AAAA,gBACR,SAAQ;AAAA,gBACR,IAAG;AAAA,gBACH,OAAO,EAAE,WAAW,OAAO;AAAA,gBAC3B,OAAM;AAAA,gBAEN;AAAA,sCAAC,YAAS,SAAS,WACjB,8BAAC,QAAK,KAAI,KAAI,UAAS,UACpB,kBACH,GACF;AAAA,kBACC,QAAQ,+CAAe,MAAM,KAC5B,qBAAC,aAAa,MAAb,EACC;AAAA,wCAAC,aAAa,SAAb,EACC,8BAAC,UAAO,MAAK,SAAQ,SAAQ,eAC3B,8BAAC,oBAAiB,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,GAC5D,GACF;AAAA,oBACA,oBAAC,aAAa,SAAb,EACE,yDAAe,IAAI,CAAC,SACnB;AAAA,sBAAC,aAAa;AAAA,sBAAb;AAAA,wBAEC,SAAS,CAAC,MAAM;AACd,4BAAE,gBAAgB;AAClB,+BAAK,QAAQ;AAAA,wBACf;AAAA,wBAEC,eAAK;AAAA;AAAA,sBAND,KAAK;AAAA,oBAOZ,IAEJ;AAAA,qBACF;AAAA;AAAA;AAAA,YAEJ;AAAA,aACF;AAAA;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AACA,aAAa,cAAc;","names":[]}
@@ -0,0 +1,111 @@
1
+ import {
2
+ Skeleton
3
+ } from "./chunk-5H3YPCZK.js";
4
+ import {
5
+ Grid
6
+ } from "./chunk-EGEQY3KT.js";
7
+ import {
8
+ Inset
9
+ } from "./chunk-XQOL7UBI.js";
10
+ import {
11
+ Heading
12
+ } from "./chunk-HJB3AASV.js";
13
+ import {
14
+ DropdownMenu
15
+ } from "./chunk-4WFMOFN2.js";
16
+ import {
17
+ Card
18
+ } from "./chunk-2ZQK7NTN.js";
19
+ import {
20
+ Box
21
+ } from "./chunk-4Y5BEXVN.js";
22
+ import {
23
+ Typo
24
+ } from "./chunk-52MVZ6AN.js";
25
+ import {
26
+ Flex
27
+ } from "./chunk-25HMMI7R.js";
28
+ import {
29
+ Button
30
+ } from "./chunk-Q5AFRGVP.js";
31
+ import {
32
+ DotsVerticalIcon
33
+ } from "./chunk-HLFG5ZTU.js";
34
+
35
+ // src/app/platform/contents-card.tsx
36
+ import { forwardRef } from "react";
37
+ import { jsx, jsxs } from "react/jsx-runtime";
38
+ var ContentsCard = forwardRef(
39
+ ({
40
+ title,
41
+ description,
42
+ imageSrc,
43
+ footer,
44
+ dropdownItems,
45
+ onClickCard,
46
+ isLoading = false
47
+ }, ref) => {
48
+ return /* @__PURE__ */ jsxs(
49
+ Card,
50
+ {
51
+ onClick: onClickCard,
52
+ ref,
53
+ style: { height: "100%", width: "100%", display: "grid" },
54
+ children: [
55
+ /* @__PURE__ */ jsx(Inset, { clip: "padding-box", pb: "0", side: "top", children: /* @__PURE__ */ jsx(Skeleton, { loading: isLoading, children: /* @__PURE__ */ jsx(
56
+ Box,
57
+ {
58
+ height: "210px",
59
+ style: {
60
+ backgroundImage: `url(${imageSrc})`,
61
+ backgroundSize: "cover",
62
+ backgroundPosition: "center"
63
+ },
64
+ width: "100%"
65
+ }
66
+ ) }) }),
67
+ /* @__PURE__ */ jsxs(Flex, { direction: "column", p: "4", children: [
68
+ /* @__PURE__ */ jsxs(Box, { children: [
69
+ /* @__PURE__ */ jsx(Skeleton, { loading: isLoading, children: /* @__PURE__ */ jsx(Heading, { mb: "3", variant: "heading5", children: title }) }),
70
+ /* @__PURE__ */ jsx(Skeleton, { loading: isLoading, children: /* @__PURE__ */ jsx(Typo, { as: "p", variant: "caption", children: description }) })
71
+ ] }),
72
+ /* @__PURE__ */ jsxs(
73
+ Grid,
74
+ {
75
+ align: "center",
76
+ columns: "1fr auto",
77
+ justify: "between",
78
+ pt: "2",
79
+ style: { marginTop: "auto" },
80
+ width: "100%",
81
+ children: [
82
+ /* @__PURE__ */ jsx(Skeleton, { loading: isLoading, children: /* @__PURE__ */ jsx(Flex, { gap: "3", overflow: "hidden", children: footer }) }),
83
+ Boolean(dropdownItems == null ? void 0 : dropdownItems.length) && /* @__PURE__ */ jsxs(DropdownMenu.Root, { children: [
84
+ /* @__PURE__ */ jsx(DropdownMenu.Trigger, { children: /* @__PURE__ */ jsx(Button, { size: "large", variant: "transparent", children: /* @__PURE__ */ jsx(DotsVerticalIcon, { color: "gray", height: "20px", width: "20px" }) }) }),
85
+ /* @__PURE__ */ jsx(DropdownMenu.Content, { children: dropdownItems == null ? void 0 : dropdownItems.map((item) => /* @__PURE__ */ jsx(
86
+ DropdownMenu.Item,
87
+ {
88
+ onClick: (e) => {
89
+ e.stopPropagation();
90
+ item.onClick();
91
+ },
92
+ children: item.label
93
+ },
94
+ item.label
95
+ )) })
96
+ ] })
97
+ ]
98
+ }
99
+ )
100
+ ] })
101
+ ]
102
+ }
103
+ );
104
+ }
105
+ );
106
+ ContentsCard.displayName = "ContentsCard";
107
+
108
+ export {
109
+ ContentsCard
110
+ };
111
+ //# sourceMappingURL=chunk-MWBEL3OY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/app/platform/contents-card.tsx"],"sourcesContent":["import React, { forwardRef } from 'react';\nimport { Heading } from '@/atoms/heading';\nimport { Button } from '@/atoms/button';\nimport { DropdownMenu } from '@/atoms/dropdown-menu';\nimport { Box } from '@/atoms/box';\nimport { Flex } from '@/atoms/flex';\nimport { Grid } from '@/atoms/grid';\nimport { Skeleton } from '@/atoms/skeleton';\nimport { Typo } from '@/atoms/typo';\nimport { DotsVerticalIcon } from '@/icon';\nimport { Card, Inset } from '@/atoms';\n\nexport interface ContentsCardProps {\n title?: React.ReactNode;\n description?: string;\n id?: string;\n imageSrc?: string | null;\n imageAlt?: string;\n footer?: React.ReactNode;\n dropdownItems?: {\n label: string;\n onClick: () => void;\n }[];\n onClickCard?: () => void;\n isLoading?: boolean;\n}\n\nexport const ContentsCard = forwardRef<HTMLDivElement, ContentsCardProps>(\n (\n {\n title,\n description,\n imageSrc,\n footer,\n dropdownItems,\n onClickCard,\n isLoading = false,\n },\n ref\n ): React.ReactElement => {\n return (\n <Card\n onClick={onClickCard}\n ref={ref}\n style={{ height: '100%', width: '100%', display: 'grid' }}\n >\n {/* 섬네일 */}\n <Inset clip=\"padding-box\" pb=\"0\" side=\"top\">\n <Skeleton loading={isLoading}>\n <Box\n height=\"210px\"\n style={{\n backgroundImage: `url(${imageSrc})`,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n }}\n width=\"100%\"\n />\n </Skeleton>\n </Inset>\n {/* 제목, 설명 */}\n <Flex direction=\"column\" p=\"4\">\n <Box>\n <Skeleton loading={isLoading}>\n <Heading mb=\"3\" variant=\"heading5\">\n {title}\n </Heading>\n </Skeleton>\n <Skeleton loading={isLoading}>\n <Typo as=\"p\" variant=\"caption\">\n {description}\n </Typo>\n </Skeleton>\n </Box>\n <Grid\n align=\"center\"\n columns=\"1fr auto\"\n justify=\"between\"\n pt=\"2\"\n style={{ marginTop: 'auto' }}\n width=\"100%\"\n >\n <Skeleton loading={isLoading}>\n <Flex gap=\"3\" overflow=\"hidden\">\n {footer}\n </Flex>\n </Skeleton>\n {Boolean(dropdownItems?.length) && (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger>\n <Button size=\"large\" variant=\"transparent\">\n <DotsVerticalIcon color=\"gray\" height=\"20px\" width=\"20px\" />\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content>\n {dropdownItems?.map((item) => (\n <DropdownMenu.Item\n key={item.label}\n onClick={(e) => {\n e.stopPropagation();\n item.onClick();\n }}\n >\n {item.label}\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n )}\n </Grid>\n </Flex>\n </Card>\n );\n }\n);\nContentsCard.displayName = 'ContentsCard';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAgB,kBAAkB;AAiDtB,cAaF,YAbE;AAtBL,IAAM,eAAe;AAAA,EAC1B,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY;AAAA,EACd,GACA,QACuB;AACvB,WACE;AAAA,MAAC;AAAA;AAAA,QACC,SAAS;AAAA,QACT;AAAA,QACA,OAAO,EAAE,QAAQ,QAAQ,OAAO,QAAQ,SAAS,OAAO;AAAA,QAGxD;AAAA,8BAAC,SAAM,MAAK,eAAc,IAAG,KAAI,MAAK,OACpC,8BAAC,YAAS,SAAS,WACjB;AAAA,YAAC;AAAA;AAAA,cACC,QAAO;AAAA,cACP,OAAO;AAAA,gBACL,iBAAiB,OAAO,QAAQ;AAAA,gBAChC,gBAAgB;AAAA,gBAChB,oBAAoB;AAAA,cACtB;AAAA,cACA,OAAM;AAAA;AAAA,UACR,GACF,GACF;AAAA,UAEA,qBAAC,QAAK,WAAU,UAAS,GAAE,KACzB;AAAA,iCAAC,OACC;AAAA,kCAAC,YAAS,SAAS,WACjB,8BAAC,WAAQ,IAAG,KAAI,SAAQ,YACrB,iBACH,GACF;AAAA,cACA,oBAAC,YAAS,SAAS,WACjB,8BAAC,QAAK,IAAG,KAAI,SAAQ,WAClB,uBACH,GACF;AAAA,eACF;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,OAAM;AAAA,gBACN,SAAQ;AAAA,gBACR,SAAQ;AAAA,gBACR,IAAG;AAAA,gBACH,OAAO,EAAE,WAAW,OAAO;AAAA,gBAC3B,OAAM;AAAA,gBAEN;AAAA,sCAAC,YAAS,SAAS,WACjB,8BAAC,QAAK,KAAI,KAAI,UAAS,UACpB,kBACH,GACF;AAAA,kBACC,QAAQ,+CAAe,MAAM,KAC5B,qBAAC,aAAa,MAAb,EACC;AAAA,wCAAC,aAAa,SAAb,EACC,8BAAC,UAAO,MAAK,SAAQ,SAAQ,eAC3B,8BAAC,oBAAiB,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,GAC5D,GACF;AAAA,oBACA,oBAAC,aAAa,SAAb,EACE,yDAAe,IAAI,CAAC,SACnB;AAAA,sBAAC,aAAa;AAAA,sBAAb;AAAA,wBAEC,SAAS,CAAC,MAAM;AACd,4BAAE,gBAAgB;AAClB,+BAAK,QAAQ;AAAA,wBACf;AAAA,wBAEC,eAAK;AAAA;AAAA,sBAND,KAAK;AAAA,oBAOZ,IAEJ;AAAA,qBACF;AAAA;AAAA;AAAA,YAEJ;AAAA,aACF;AAAA;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AACA,aAAa,cAAc;","names":[]}
@@ -0,0 +1,110 @@
1
+ import {
2
+ Skeleton
3
+ } from "./chunk-5H3YPCZK.js";
4
+ import {
5
+ DropdownMenu
6
+ } from "./chunk-4WFMOFN2.js";
7
+ import {
8
+ Grid
9
+ } from "./chunk-EGEQY3KT.js";
10
+ import {
11
+ Heading
12
+ } from "./chunk-HJB3AASV.js";
13
+ import {
14
+ Box
15
+ } from "./chunk-4Y5BEXVN.js";
16
+ import {
17
+ Typo
18
+ } from "./chunk-52MVZ6AN.js";
19
+ import {
20
+ Flex
21
+ } from "./chunk-25HMMI7R.js";
22
+ import {
23
+ Button
24
+ } from "./chunk-Q5AFRGVP.js";
25
+ import {
26
+ Card
27
+ } from "./chunk-2ZQK7NTN.js";
28
+ import {
29
+ DotsVerticalIcon
30
+ } from "./chunk-HLFG5ZTU.js";
31
+
32
+ // src/app/platform/contents-card.tsx
33
+ import { forwardRef } from "react";
34
+ import { jsx, jsxs } from "react/jsx-runtime";
35
+ var ContentsCard = forwardRef(
36
+ ({
37
+ title,
38
+ description,
39
+ imageSrc,
40
+ footer,
41
+ dropdownItems,
42
+ onClickCard,
43
+ isLoading = false
44
+ }, ref) => {
45
+ return /* @__PURE__ */ jsxs(
46
+ Card,
47
+ {
48
+ onClick: onClickCard,
49
+ ref,
50
+ style: { height: "100%", width: "100%" },
51
+ children: [
52
+ /* @__PURE__ */ jsx(Skeleton, { loading: isLoading, children: /* @__PURE__ */ jsx(
53
+ Box,
54
+ {
55
+ height: "210px",
56
+ style: {
57
+ borderTopLeftRadius: "var(--radius-4)",
58
+ borderTopRightRadius: "var(--radius-4)",
59
+ backgroundImage: `url(${imageSrc})`,
60
+ backgroundSize: "cover",
61
+ backgroundPosition: "center"
62
+ },
63
+ width: "100%"
64
+ }
65
+ ) }),
66
+ /* @__PURE__ */ jsxs(Box, { p: "5", children: [
67
+ /* @__PURE__ */ jsxs(Box, { children: [
68
+ /* @__PURE__ */ jsx(Skeleton, { loading: isLoading, children: /* @__PURE__ */ jsx(Heading, { mb: "3", variant: "heading5", children: title }) }),
69
+ /* @__PURE__ */ jsx(Skeleton, { loading: isLoading, children: /* @__PURE__ */ jsx(Typo, { as: "p", variant: "caption", children: description }) })
70
+ ] }),
71
+ /* @__PURE__ */ jsxs(
72
+ Grid,
73
+ {
74
+ align: "center",
75
+ columns: "1fr auto",
76
+ justify: "between",
77
+ pt: "2",
78
+ style: { marginTop: "auto" },
79
+ width: "100%",
80
+ children: [
81
+ /* @__PURE__ */ jsx(Skeleton, { loading: isLoading, children: /* @__PURE__ */ jsx(Flex, { gap: "3", overflow: "hidden", children: footer }) }),
82
+ Boolean(dropdownItems == null ? void 0 : dropdownItems.length) && /* @__PURE__ */ jsxs(DropdownMenu.Root, { children: [
83
+ /* @__PURE__ */ jsx(DropdownMenu.Trigger, { children: /* @__PURE__ */ jsx(Button, { size: "large", variant: "transparent", children: /* @__PURE__ */ jsx(DotsVerticalIcon, { color: "gray", height: "20px", width: "20px" }) }) }),
84
+ /* @__PURE__ */ jsx(DropdownMenu.Content, { children: dropdownItems == null ? void 0 : dropdownItems.map((item) => /* @__PURE__ */ jsx(
85
+ DropdownMenu.Item,
86
+ {
87
+ onClick: (e) => {
88
+ e.stopPropagation();
89
+ item.onClick();
90
+ },
91
+ children: item.label
92
+ },
93
+ item.label
94
+ )) })
95
+ ] })
96
+ ]
97
+ }
98
+ )
99
+ ] })
100
+ ]
101
+ }
102
+ );
103
+ }
104
+ );
105
+ ContentsCard.displayName = "ContentsCard";
106
+
107
+ export {
108
+ ContentsCard
109
+ };
110
+ //# sourceMappingURL=chunk-O5H5SQHB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/app/platform/contents-card.tsx"],"sourcesContent":["import React, { forwardRef } from 'react';\nimport { Heading } from '@/atoms/heading';\nimport { Button } from '@/atoms/button';\nimport { DropdownMenu } from '@/atoms/dropdown-menu';\nimport { Box } from '@/atoms/box';\nimport { Flex } from '@/atoms/flex';\nimport { Grid } from '@/atoms/grid';\nimport { Skeleton } from '@/atoms/skeleton';\nimport { Typo } from '@/atoms/typo';\nimport { DotsVerticalIcon } from '@/icon';\nimport { Card } from '@/atoms';\n\nexport interface ContentsCardProps {\n title?: React.ReactNode;\n description?: string;\n id?: string;\n imageSrc?: string | null;\n imageAlt?: string;\n footer?: React.ReactNode;\n dropdownItems?: {\n label: string;\n onClick: () => void;\n }[];\n onClickCard?: () => void;\n isLoading?: boolean;\n}\n\nexport const ContentsCard = forwardRef<HTMLDivElement, ContentsCardProps>(\n (\n {\n title,\n description,\n imageSrc,\n footer,\n dropdownItems,\n onClickCard,\n isLoading = false,\n },\n ref\n ): React.ReactElement => {\n return (\n <Card\n onClick={onClickCard}\n ref={ref}\n style={{ height: '100%', width: '100%' }}\n >\n {/* 섬네일 */}\n <Skeleton loading={isLoading}>\n <Box\n height=\"210px\"\n style={{\n borderTopLeftRadius: 'var(--radius-4)',\n borderTopRightRadius: 'var(--radius-4)',\n backgroundImage: `url(${imageSrc})`,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n }}\n width=\"100%\"\n />\n </Skeleton>\n {/* 제목, 설명 */}\n <Box p=\"5\">\n <Box>\n <Skeleton loading={isLoading}>\n <Heading mb=\"3\" variant=\"heading5\">\n {title}\n </Heading>\n </Skeleton>\n <Skeleton loading={isLoading}>\n <Typo as=\"p\" variant=\"caption\">\n {description}\n </Typo>\n </Skeleton>\n </Box>\n <Grid\n align=\"center\"\n columns=\"1fr auto\"\n justify=\"between\"\n pt=\"2\"\n style={{ marginTop: 'auto' }}\n width=\"100%\"\n >\n <Skeleton loading={isLoading}>\n <Flex gap=\"3\" overflow=\"hidden\">\n {footer}\n </Flex>\n </Skeleton>\n {Boolean(dropdownItems?.length) && (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger>\n <Button size=\"large\" variant=\"transparent\">\n <DotsVerticalIcon color=\"gray\" height=\"20px\" width=\"20px\" />\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content>\n {dropdownItems?.map((item) => (\n <DropdownMenu.Item\n key={item.label}\n onClick={(e) => {\n e.stopPropagation();\n item.onClick();\n }}\n >\n {item.label}\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n )}\n </Grid>\n </Box>\n </Card>\n );\n }\n);\nContentsCard.displayName = 'ContentsCard';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAgB,kBAAkB;AAgDxB,cAcA,YAdA;AArBH,IAAM,eAAe;AAAA,EAC1B,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY;AAAA,EACd,GACA,QACuB;AACvB,WACE;AAAA,MAAC;AAAA;AAAA,QACC,SAAS;AAAA,QACT;AAAA,QACA,OAAO,EAAE,QAAQ,QAAQ,OAAO,OAAO;AAAA,QAGvC;AAAA,8BAAC,YAAS,SAAS,WACjB;AAAA,YAAC;AAAA;AAAA,cACC,QAAO;AAAA,cACP,OAAO;AAAA,gBACL,qBAAqB;AAAA,gBACrB,sBAAsB;AAAA,gBACtB,iBAAiB,OAAO,QAAQ;AAAA,gBAChC,gBAAgB;AAAA,gBAChB,oBAAoB;AAAA,cACtB;AAAA,cACA,OAAM;AAAA;AAAA,UACR,GACF;AAAA,UAEA,qBAAC,OAAI,GAAE,KACL;AAAA,iCAAC,OACC;AAAA,kCAAC,YAAS,SAAS,WACjB,8BAAC,WAAQ,IAAG,KAAI,SAAQ,YACrB,iBACH,GACF;AAAA,cACA,oBAAC,YAAS,SAAS,WACjB,8BAAC,QAAK,IAAG,KAAI,SAAQ,WAClB,uBACH,GACF;AAAA,eACF;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,OAAM;AAAA,gBACN,SAAQ;AAAA,gBACR,SAAQ;AAAA,gBACR,IAAG;AAAA,gBACH,OAAO,EAAE,WAAW,OAAO;AAAA,gBAC3B,OAAM;AAAA,gBAEN;AAAA,sCAAC,YAAS,SAAS,WACjB,8BAAC,QAAK,KAAI,KAAI,UAAS,UACpB,kBACH,GACF;AAAA,kBACC,QAAQ,+CAAe,MAAM,KAC5B,qBAAC,aAAa,MAAb,EACC;AAAA,wCAAC,aAAa,SAAb,EACC,8BAAC,UAAO,MAAK,SAAQ,SAAQ,eAC3B,8BAAC,oBAAiB,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,GAC5D,GACF;AAAA,oBACA,oBAAC,aAAa,SAAb,EACE,yDAAe,IAAI,CAAC,SACnB;AAAA,sBAAC,aAAa;AAAA,sBAAb;AAAA,wBAEC,SAAS,CAAC,MAAM;AACd,4BAAE,gBAAgB;AAClB,+BAAK,QAAQ;AAAA,wBACf;AAAA,wBAEC,eAAK;AAAA;AAAA,sBAND,KAAK;AAAA,oBAOZ,IAEJ;AAAA,qBACF;AAAA;AAAA;AAAA,YAEJ;AAAA,aACF;AAAA;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AACA,aAAa,cAAc;","names":[]}
@@ -0,0 +1,111 @@
1
+ import {
2
+ Skeleton
3
+ } from "./chunk-5H3YPCZK.js";
4
+ import {
5
+ Inset
6
+ } from "./chunk-XQOL7UBI.js";
7
+ import {
8
+ DropdownMenu
9
+ } from "./chunk-4WFMOFN2.js";
10
+ import {
11
+ Grid
12
+ } from "./chunk-EGEQY3KT.js";
13
+ import {
14
+ Heading
15
+ } from "./chunk-HJB3AASV.js";
16
+ import {
17
+ Box
18
+ } from "./chunk-4Y5BEXVN.js";
19
+ import {
20
+ Typo
21
+ } from "./chunk-52MVZ6AN.js";
22
+ import {
23
+ Flex
24
+ } from "./chunk-25HMMI7R.js";
25
+ import {
26
+ Button
27
+ } from "./chunk-Q5AFRGVP.js";
28
+ import {
29
+ Card
30
+ } from "./chunk-2ZQK7NTN.js";
31
+ import {
32
+ DotsVerticalIcon
33
+ } from "./chunk-HLFG5ZTU.js";
34
+
35
+ // src/app/platform/contents-card.tsx
36
+ import { forwardRef } from "react";
37
+ import { jsx, jsxs } from "react/jsx-runtime";
38
+ var ContentsCard = forwardRef(
39
+ ({
40
+ title,
41
+ description,
42
+ imageSrc,
43
+ footer,
44
+ dropdownItems,
45
+ onClickCard,
46
+ isLoading = false
47
+ }, ref) => {
48
+ return /* @__PURE__ */ jsxs(
49
+ Card,
50
+ {
51
+ onClick: onClickCard,
52
+ ref,
53
+ style: { height: "100%", width: "100%" },
54
+ children: [
55
+ /* @__PURE__ */ jsx(Inset, { children: /* @__PURE__ */ jsx(Skeleton, { loading: isLoading, children: /* @__PURE__ */ jsx(
56
+ Box,
57
+ {
58
+ height: "210px",
59
+ style: {
60
+ backgroundImage: `url(${imageSrc})`,
61
+ backgroundSize: "cover",
62
+ backgroundPosition: "center"
63
+ },
64
+ width: "100%"
65
+ }
66
+ ) }) }),
67
+ /* @__PURE__ */ jsxs(Box, { p: "5", children: [
68
+ /* @__PURE__ */ jsxs(Box, { children: [
69
+ /* @__PURE__ */ jsx(Skeleton, { loading: isLoading, children: /* @__PURE__ */ jsx(Heading, { mb: "3", variant: "heading5", children: title }) }),
70
+ /* @__PURE__ */ jsx(Skeleton, { loading: isLoading, children: /* @__PURE__ */ jsx(Typo, { as: "p", variant: "caption", children: description }) })
71
+ ] }),
72
+ /* @__PURE__ */ jsxs(
73
+ Grid,
74
+ {
75
+ align: "center",
76
+ columns: "1fr auto",
77
+ justify: "between",
78
+ pt: "2",
79
+ style: { marginTop: "auto" },
80
+ width: "100%",
81
+ children: [
82
+ /* @__PURE__ */ jsx(Skeleton, { loading: isLoading, children: /* @__PURE__ */ jsx(Flex, { gap: "3", overflow: "hidden", children: footer }) }),
83
+ Boolean(dropdownItems == null ? void 0 : dropdownItems.length) && /* @__PURE__ */ jsxs(DropdownMenu.Root, { children: [
84
+ /* @__PURE__ */ jsx(DropdownMenu.Trigger, { children: /* @__PURE__ */ jsx(Button, { size: "large", variant: "transparent", children: /* @__PURE__ */ jsx(DotsVerticalIcon, { color: "gray", height: "20px", width: "20px" }) }) }),
85
+ /* @__PURE__ */ jsx(DropdownMenu.Content, { children: dropdownItems == null ? void 0 : dropdownItems.map((item) => /* @__PURE__ */ jsx(
86
+ DropdownMenu.Item,
87
+ {
88
+ onClick: (e) => {
89
+ e.stopPropagation();
90
+ item.onClick();
91
+ },
92
+ children: item.label
93
+ },
94
+ item.label
95
+ )) })
96
+ ] })
97
+ ]
98
+ }
99
+ )
100
+ ] })
101
+ ]
102
+ }
103
+ );
104
+ }
105
+ );
106
+ ContentsCard.displayName = "ContentsCard";
107
+
108
+ export {
109
+ ContentsCard
110
+ };
111
+ //# sourceMappingURL=chunk-QGXLI3QC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/app/platform/contents-card.tsx"],"sourcesContent":["import React, { forwardRef } from 'react';\nimport { Heading } from '@/atoms/heading';\nimport { Button } from '@/atoms/button';\nimport { DropdownMenu } from '@/atoms/dropdown-menu';\nimport { Box } from '@/atoms/box';\nimport { Flex } from '@/atoms/flex';\nimport { Grid } from '@/atoms/grid';\nimport { Skeleton } from '@/atoms/skeleton';\nimport { Typo } from '@/atoms/typo';\nimport { DotsVerticalIcon } from '@/icon';\nimport { Card, Inset } from '@/atoms';\n\nexport interface ContentsCardProps {\n title?: React.ReactNode;\n description?: string;\n id?: string;\n imageSrc?: string | null;\n imageAlt?: string;\n footer?: React.ReactNode;\n dropdownItems?: {\n label: string;\n onClick: () => void;\n }[];\n onClickCard?: () => void;\n isLoading?: boolean;\n}\n\nexport const ContentsCard = forwardRef<HTMLDivElement, ContentsCardProps>(\n (\n {\n title,\n description,\n imageSrc,\n footer,\n dropdownItems,\n onClickCard,\n isLoading = false,\n },\n ref\n ): React.ReactElement => {\n return (\n <Card\n onClick={onClickCard}\n ref={ref}\n style={{ height: '100%', width: '100%' }}\n >\n {/* 섬네일 */}\n <Inset>\n <Skeleton loading={isLoading}>\n <Box\n height=\"210px\"\n style={{\n backgroundImage: `url(${imageSrc})`,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n }}\n width=\"100%\"\n />\n </Skeleton>\n </Inset>\n {/* 제목, 설명 */}\n <Box p=\"5\">\n <Box>\n <Skeleton loading={isLoading}>\n <Heading mb=\"3\" variant=\"heading5\">\n {title}\n </Heading>\n </Skeleton>\n <Skeleton loading={isLoading}>\n <Typo as=\"p\" variant=\"caption\">\n {description}\n </Typo>\n </Skeleton>\n </Box>\n <Grid\n align=\"center\"\n columns=\"1fr auto\"\n justify=\"between\"\n pt=\"2\"\n style={{ marginTop: 'auto' }}\n width=\"100%\"\n >\n <Skeleton loading={isLoading}>\n <Flex gap=\"3\" overflow=\"hidden\">\n {footer}\n </Flex>\n </Skeleton>\n {Boolean(dropdownItems?.length) && (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger>\n <Button size=\"large\" variant=\"transparent\">\n <DotsVerticalIcon color=\"gray\" height=\"20px\" width=\"20px\" />\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content>\n {dropdownItems?.map((item) => (\n <DropdownMenu.Item\n key={item.label}\n onClick={(e) => {\n e.stopPropagation();\n item.onClick();\n }}\n >\n {item.label}\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n )}\n </Grid>\n </Box>\n </Card>\n );\n }\n);\nContentsCard.displayName = 'ContentsCard';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAgB,kBAAkB;AAiDtB,cAaF,YAbE;AAtBL,IAAM,eAAe;AAAA,EAC1B,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY;AAAA,EACd,GACA,QACuB;AACvB,WACE;AAAA,MAAC;AAAA;AAAA,QACC,SAAS;AAAA,QACT;AAAA,QACA,OAAO,EAAE,QAAQ,QAAQ,OAAO,OAAO;AAAA,QAGvC;AAAA,8BAAC,SACC,8BAAC,YAAS,SAAS,WACjB;AAAA,YAAC;AAAA;AAAA,cACC,QAAO;AAAA,cACP,OAAO;AAAA,gBACL,iBAAiB,OAAO,QAAQ;AAAA,gBAChC,gBAAgB;AAAA,gBAChB,oBAAoB;AAAA,cACtB;AAAA,cACA,OAAM;AAAA;AAAA,UACR,GACF,GACF;AAAA,UAEA,qBAAC,OAAI,GAAE,KACL;AAAA,iCAAC,OACC;AAAA,kCAAC,YAAS,SAAS,WACjB,8BAAC,WAAQ,IAAG,KAAI,SAAQ,YACrB,iBACH,GACF;AAAA,cACA,oBAAC,YAAS,SAAS,WACjB,8BAAC,QAAK,IAAG,KAAI,SAAQ,WAClB,uBACH,GACF;AAAA,eACF;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,OAAM;AAAA,gBACN,SAAQ;AAAA,gBACR,SAAQ;AAAA,gBACR,IAAG;AAAA,gBACH,OAAO,EAAE,WAAW,OAAO;AAAA,gBAC3B,OAAM;AAAA,gBAEN;AAAA,sCAAC,YAAS,SAAS,WACjB,8BAAC,QAAK,KAAI,KAAI,UAAS,UACpB,kBACH,GACF;AAAA,kBACC,QAAQ,+CAAe,MAAM,KAC5B,qBAAC,aAAa,MAAb,EACC;AAAA,wCAAC,aAAa,SAAb,EACC,8BAAC,UAAO,MAAK,SAAQ,SAAQ,eAC3B,8BAAC,oBAAiB,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,GAC5D,GACF;AAAA,oBACA,oBAAC,aAAa,SAAb,EACE,yDAAe,IAAI,CAAC,SACnB;AAAA,sBAAC,aAAa;AAAA,sBAAb;AAAA,wBAEC,SAAS,CAAC,MAAM;AACd,4BAAE,gBAAgB;AAClB,+BAAK,QAAQ;AAAA,wBACf;AAAA,wBAEC,eAAK;AAAA;AAAA,sBAND,KAAK;AAAA,oBAOZ,IAEJ;AAAA,qBACF;AAAA;AAAA;AAAA,YAEJ;AAAA,aACF;AAAA;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AACA,aAAa,cAAc;","names":[]}
@@ -0,0 +1,111 @@
1
+ import {
2
+ Skeleton
3
+ } from "./chunk-5H3YPCZK.js";
4
+ import {
5
+ Inset
6
+ } from "./chunk-XQOL7UBI.js";
7
+ import {
8
+ DropdownMenu
9
+ } from "./chunk-4WFMOFN2.js";
10
+ import {
11
+ Grid
12
+ } from "./chunk-EGEQY3KT.js";
13
+ import {
14
+ Heading
15
+ } from "./chunk-HJB3AASV.js";
16
+ import {
17
+ Box
18
+ } from "./chunk-4Y5BEXVN.js";
19
+ import {
20
+ Typo
21
+ } from "./chunk-52MVZ6AN.js";
22
+ import {
23
+ Flex
24
+ } from "./chunk-25HMMI7R.js";
25
+ import {
26
+ Button
27
+ } from "./chunk-Q5AFRGVP.js";
28
+ import {
29
+ Card
30
+ } from "./chunk-2ZQK7NTN.js";
31
+ import {
32
+ DotsVerticalIcon
33
+ } from "./chunk-HLFG5ZTU.js";
34
+
35
+ // src/app/platform/contents-card.tsx
36
+ import { forwardRef } from "react";
37
+ import { jsx, jsxs } from "react/jsx-runtime";
38
+ var ContentsCard = forwardRef(
39
+ ({
40
+ title,
41
+ description,
42
+ imageSrc,
43
+ footer,
44
+ dropdownItems,
45
+ onClickCard,
46
+ isLoading = false
47
+ }, ref) => {
48
+ return /* @__PURE__ */ jsxs(
49
+ Card,
50
+ {
51
+ onClick: onClickCard,
52
+ ref,
53
+ style: { height: "100%", width: "100%" },
54
+ children: [
55
+ /* @__PURE__ */ jsx(Inset, { clip: "padding-box", side: "top", pb: "0", children: /* @__PURE__ */ jsx(Skeleton, { loading: isLoading, children: /* @__PURE__ */ jsx(
56
+ Box,
57
+ {
58
+ height: "210px",
59
+ style: {
60
+ backgroundImage: `url(${imageSrc})`,
61
+ backgroundSize: "cover",
62
+ backgroundPosition: "center"
63
+ },
64
+ width: "100%"
65
+ }
66
+ ) }) }),
67
+ /* @__PURE__ */ jsxs(Box, { p: "5", children: [
68
+ /* @__PURE__ */ jsxs(Box, { children: [
69
+ /* @__PURE__ */ jsx(Skeleton, { loading: isLoading, children: /* @__PURE__ */ jsx(Heading, { mb: "3", variant: "heading5", children: title }) }),
70
+ /* @__PURE__ */ jsx(Skeleton, { loading: isLoading, children: /* @__PURE__ */ jsx(Typo, { as: "p", variant: "caption", children: description }) })
71
+ ] }),
72
+ /* @__PURE__ */ jsxs(
73
+ Grid,
74
+ {
75
+ align: "center",
76
+ columns: "1fr auto",
77
+ justify: "between",
78
+ pt: "2",
79
+ style: { marginTop: "auto" },
80
+ width: "100%",
81
+ children: [
82
+ /* @__PURE__ */ jsx(Skeleton, { loading: isLoading, children: /* @__PURE__ */ jsx(Flex, { gap: "3", overflow: "hidden", children: footer }) }),
83
+ Boolean(dropdownItems == null ? void 0 : dropdownItems.length) && /* @__PURE__ */ jsxs(DropdownMenu.Root, { children: [
84
+ /* @__PURE__ */ jsx(DropdownMenu.Trigger, { children: /* @__PURE__ */ jsx(Button, { size: "large", variant: "transparent", children: /* @__PURE__ */ jsx(DotsVerticalIcon, { color: "gray", height: "20px", width: "20px" }) }) }),
85
+ /* @__PURE__ */ jsx(DropdownMenu.Content, { children: dropdownItems == null ? void 0 : dropdownItems.map((item) => /* @__PURE__ */ jsx(
86
+ DropdownMenu.Item,
87
+ {
88
+ onClick: (e) => {
89
+ e.stopPropagation();
90
+ item.onClick();
91
+ },
92
+ children: item.label
93
+ },
94
+ item.label
95
+ )) })
96
+ ] })
97
+ ]
98
+ }
99
+ )
100
+ ] })
101
+ ]
102
+ }
103
+ );
104
+ }
105
+ );
106
+ ContentsCard.displayName = "ContentsCard";
107
+
108
+ export {
109
+ ContentsCard
110
+ };
111
+ //# sourceMappingURL=chunk-RPTU2HZS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/app/platform/contents-card.tsx"],"sourcesContent":["import React, { forwardRef } from 'react';\nimport { Heading } from '@/atoms/heading';\nimport { Button } from '@/atoms/button';\nimport { DropdownMenu } from '@/atoms/dropdown-menu';\nimport { Box } from '@/atoms/box';\nimport { Flex } from '@/atoms/flex';\nimport { Grid } from '@/atoms/grid';\nimport { Skeleton } from '@/atoms/skeleton';\nimport { Typo } from '@/atoms/typo';\nimport { DotsVerticalIcon } from '@/icon';\nimport { Card, Inset } from '@/atoms';\n\nexport interface ContentsCardProps {\n title?: React.ReactNode;\n description?: string;\n id?: string;\n imageSrc?: string | null;\n imageAlt?: string;\n footer?: React.ReactNode;\n dropdownItems?: {\n label: string;\n onClick: () => void;\n }[];\n onClickCard?: () => void;\n isLoading?: boolean;\n}\n\nexport const ContentsCard = forwardRef<HTMLDivElement, ContentsCardProps>(\n (\n {\n title,\n description,\n imageSrc,\n footer,\n dropdownItems,\n onClickCard,\n isLoading = false,\n },\n ref\n ): React.ReactElement => {\n return (\n <Card\n onClick={onClickCard}\n ref={ref}\n style={{ height: '100%', width: '100%' }}\n >\n {/* 섬네일 */}\n <Inset clip=\"padding-box\" side=\"top\" pb=\"0\">\n <Skeleton loading={isLoading}>\n <Box\n height=\"210px\"\n style={{\n backgroundImage: `url(${imageSrc})`,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n }}\n width=\"100%\"\n />\n </Skeleton>\n </Inset>\n {/* 제목, 설명 */}\n <Box p=\"5\">\n <Box>\n <Skeleton loading={isLoading}>\n <Heading mb=\"3\" variant=\"heading5\">\n {title}\n </Heading>\n </Skeleton>\n <Skeleton loading={isLoading}>\n <Typo as=\"p\" variant=\"caption\">\n {description}\n </Typo>\n </Skeleton>\n </Box>\n <Grid\n align=\"center\"\n columns=\"1fr auto\"\n justify=\"between\"\n pt=\"2\"\n style={{ marginTop: 'auto' }}\n width=\"100%\"\n >\n <Skeleton loading={isLoading}>\n <Flex gap=\"3\" overflow=\"hidden\">\n {footer}\n </Flex>\n </Skeleton>\n {Boolean(dropdownItems?.length) && (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger>\n <Button size=\"large\" variant=\"transparent\">\n <DotsVerticalIcon color=\"gray\" height=\"20px\" width=\"20px\" />\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content>\n {dropdownItems?.map((item) => (\n <DropdownMenu.Item\n key={item.label}\n onClick={(e) => {\n e.stopPropagation();\n item.onClick();\n }}\n >\n {item.label}\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n )}\n </Grid>\n </Box>\n </Card>\n );\n }\n);\nContentsCard.displayName = 'ContentsCard';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAgB,kBAAkB;AAiDtB,cAaF,YAbE;AAtBL,IAAM,eAAe;AAAA,EAC1B,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY;AAAA,EACd,GACA,QACuB;AACvB,WACE;AAAA,MAAC;AAAA;AAAA,QACC,SAAS;AAAA,QACT;AAAA,QACA,OAAO,EAAE,QAAQ,QAAQ,OAAO,OAAO;AAAA,QAGvC;AAAA,8BAAC,SAAM,MAAK,eAAc,MAAK,OAAM,IAAG,KACtC,8BAAC,YAAS,SAAS,WACjB;AAAA,YAAC;AAAA;AAAA,cACC,QAAO;AAAA,cACP,OAAO;AAAA,gBACL,iBAAiB,OAAO,QAAQ;AAAA,gBAChC,gBAAgB;AAAA,gBAChB,oBAAoB;AAAA,cACtB;AAAA,cACA,OAAM;AAAA;AAAA,UACR,GACF,GACF;AAAA,UAEA,qBAAC,OAAI,GAAE,KACL;AAAA,iCAAC,OACC;AAAA,kCAAC,YAAS,SAAS,WACjB,8BAAC,WAAQ,IAAG,KAAI,SAAQ,YACrB,iBACH,GACF;AAAA,cACA,oBAAC,YAAS,SAAS,WACjB,8BAAC,QAAK,IAAG,KAAI,SAAQ,WAClB,uBACH,GACF;AAAA,eACF;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,OAAM;AAAA,gBACN,SAAQ;AAAA,gBACR,SAAQ;AAAA,gBACR,IAAG;AAAA,gBACH,OAAO,EAAE,WAAW,OAAO;AAAA,gBAC3B,OAAM;AAAA,gBAEN;AAAA,sCAAC,YAAS,SAAS,WACjB,8BAAC,QAAK,KAAI,KAAI,UAAS,UACpB,kBACH,GACF;AAAA,kBACC,QAAQ,+CAAe,MAAM,KAC5B,qBAAC,aAAa,MAAb,EACC;AAAA,wCAAC,aAAa,SAAb,EACC,8BAAC,UAAO,MAAK,SAAQ,SAAQ,eAC3B,8BAAC,oBAAiB,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,GAC5D,GACF;AAAA,oBACA,oBAAC,aAAa,SAAb,EACE,yDAAe,IAAI,CAAC,SACnB;AAAA,sBAAC,aAAa;AAAA,sBAAb;AAAA,wBAEC,SAAS,CAAC,MAAM;AACd,4BAAE,gBAAgB;AAClB,+BAAK,QAAQ;AAAA,wBACf;AAAA,wBAEC,eAAK;AAAA;AAAA,sBAND,KAAK;AAAA,oBAOZ,IAEJ;AAAA,qBACF;AAAA;AAAA;AAAA,YAEJ;AAAA,aACF;AAAA;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AACA,aAAa,cAAc;","names":[]}