@mdigital_ui/ui 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +296 -0
- package/dist/accordion/index.js +5 -0
- package/dist/accordion/index.js.map +1 -0
- package/dist/badge/index.js +5 -0
- package/dist/badge/index.js.map +1 -0
- package/dist/button/index.js +6 -0
- package/dist/button/index.js.map +1 -0
- package/dist/card/index.js +4 -0
- package/dist/card/index.js.map +1 -0
- package/dist/carousel/index.js +3 -0
- package/dist/carousel/index.js.map +1 -0
- package/dist/cascader/index.js +4 -0
- package/dist/cascader/index.js.map +1 -0
- package/dist/chart/index.js +4 -0
- package/dist/chart/index.js.map +1 -0
- package/dist/checkbox/index.js +5 -0
- package/dist/checkbox/index.js.map +1 -0
- package/dist/checkbox-group/index.js +4 -0
- package/dist/checkbox-group/index.js.map +1 -0
- package/dist/chunk-2JGAYDZR.js +181 -0
- package/dist/chunk-2JGAYDZR.js.map +1 -0
- package/dist/chunk-3PFA3YG6.js +228 -0
- package/dist/chunk-3PFA3YG6.js.map +1 -0
- package/dist/chunk-4OMLQCUV.js +96 -0
- package/dist/chunk-4OMLQCUV.js.map +1 -0
- package/dist/chunk-4P5EMRFI.js +298 -0
- package/dist/chunk-4P5EMRFI.js.map +1 -0
- package/dist/chunk-5UEWVFF6.js +212 -0
- package/dist/chunk-5UEWVFF6.js.map +1 -0
- package/dist/chunk-5VCGW53O.js +332 -0
- package/dist/chunk-5VCGW53O.js.map +1 -0
- package/dist/chunk-75XESYGN.js +49 -0
- package/dist/chunk-75XESYGN.js.map +1 -0
- package/dist/chunk-7AEGBABZ.js +1102 -0
- package/dist/chunk-7AEGBABZ.js.map +1 -0
- package/dist/chunk-AOITJRSV.js +134 -0
- package/dist/chunk-AOITJRSV.js.map +1 -0
- package/dist/chunk-AWPKZYHT.js +152 -0
- package/dist/chunk-AWPKZYHT.js.map +1 -0
- package/dist/chunk-BNILRB4T.js +37 -0
- package/dist/chunk-BNILRB4T.js.map +1 -0
- package/dist/chunk-BP434VYV.js +448 -0
- package/dist/chunk-BP434VYV.js.map +1 -0
- package/dist/chunk-C7SXY3ZV.js +65 -0
- package/dist/chunk-C7SXY3ZV.js.map +1 -0
- package/dist/chunk-CLLQDCDR.js +560 -0
- package/dist/chunk-CLLQDCDR.js.map +1 -0
- package/dist/chunk-CWHFK7ZC.js +128 -0
- package/dist/chunk-CWHFK7ZC.js.map +1 -0
- package/dist/chunk-D3JWPGCA.js +123 -0
- package/dist/chunk-D3JWPGCA.js.map +1 -0
- package/dist/chunk-DOKTHDG3.js +55 -0
- package/dist/chunk-DOKTHDG3.js.map +1 -0
- package/dist/chunk-DPOSWW22.js +126 -0
- package/dist/chunk-DPOSWW22.js.map +1 -0
- package/dist/chunk-E2CYDDYC.js +39 -0
- package/dist/chunk-E2CYDDYC.js.map +1 -0
- package/dist/chunk-EYTOKUBM.js +401 -0
- package/dist/chunk-EYTOKUBM.js.map +1 -0
- package/dist/chunk-FGWSUPVW.js +356 -0
- package/dist/chunk-FGWSUPVW.js.map +1 -0
- package/dist/chunk-FPOXTCYV.js +166 -0
- package/dist/chunk-FPOXTCYV.js.map +1 -0
- package/dist/chunk-FTJOSVTY.js +104 -0
- package/dist/chunk-FTJOSVTY.js.map +1 -0
- package/dist/chunk-FYHQDFKE.js +164 -0
- package/dist/chunk-FYHQDFKE.js.map +1 -0
- package/dist/chunk-H2HIBD5Y.js +158 -0
- package/dist/chunk-H2HIBD5Y.js.map +1 -0
- package/dist/chunk-J3G5WWGR.js +53 -0
- package/dist/chunk-J3G5WWGR.js.map +1 -0
- package/dist/chunk-JZCHZ4B3.js +487 -0
- package/dist/chunk-JZCHZ4B3.js.map +1 -0
- package/dist/chunk-KBCBVH7B.js +51 -0
- package/dist/chunk-KBCBVH7B.js.map +1 -0
- package/dist/chunk-KNQ7UQ2W.js +143 -0
- package/dist/chunk-KNQ7UQ2W.js.map +1 -0
- package/dist/chunk-KTBPIEP2.js +102 -0
- package/dist/chunk-KTBPIEP2.js.map +1 -0
- package/dist/chunk-L3SP7GHC.js +1023 -0
- package/dist/chunk-L3SP7GHC.js.map +1 -0
- package/dist/chunk-LBJG2UWT.js +100 -0
- package/dist/chunk-LBJG2UWT.js.map +1 -0
- package/dist/chunk-MLDX3Z67.js +470 -0
- package/dist/chunk-MLDX3Z67.js.map +1 -0
- package/dist/chunk-NNSS366W.js +331 -0
- package/dist/chunk-NNSS366W.js.map +1 -0
- package/dist/chunk-OQANRZPV.js +197 -0
- package/dist/chunk-OQANRZPV.js.map +1 -0
- package/dist/chunk-OW5A5IIF.js +175 -0
- package/dist/chunk-OW5A5IIF.js.map +1 -0
- package/dist/chunk-R225A5II.js +187 -0
- package/dist/chunk-R225A5II.js.map +1 -0
- package/dist/chunk-ROR4E6IE.js +119 -0
- package/dist/chunk-ROR4E6IE.js.map +1 -0
- package/dist/chunk-RPAQAZTI.js +54 -0
- package/dist/chunk-RPAQAZTI.js.map +1 -0
- package/dist/chunk-RQBXZKTH.js +452 -0
- package/dist/chunk-RQBXZKTH.js.map +1 -0
- package/dist/chunk-S5XJXU52.js +178 -0
- package/dist/chunk-S5XJXU52.js.map +1 -0
- package/dist/chunk-SAVE5ACL.js +324 -0
- package/dist/chunk-SAVE5ACL.js.map +1 -0
- package/dist/chunk-SERJ3TZE.js +640 -0
- package/dist/chunk-SERJ3TZE.js.map +1 -0
- package/dist/chunk-SK5ECBBK.js +175 -0
- package/dist/chunk-SK5ECBBK.js.map +1 -0
- package/dist/chunk-SOV4PE3P.js +218 -0
- package/dist/chunk-SOV4PE3P.js.map +1 -0
- package/dist/chunk-W7BQYIXF.js +687 -0
- package/dist/chunk-W7BQYIXF.js.map +1 -0
- package/dist/chunk-XMAH5PDW.js +59 -0
- package/dist/chunk-XMAH5PDW.js.map +1 -0
- package/dist/chunk-XOBGEMQY.js +94 -0
- package/dist/chunk-XOBGEMQY.js.map +1 -0
- package/dist/chunk-YNNAOXU5.js +57 -0
- package/dist/chunk-YNNAOXU5.js.map +1 -0
- package/dist/chunk-YZVSDRJD.js +253 -0
- package/dist/chunk-YZVSDRJD.js.map +1 -0
- package/dist/collapse/index.js +4 -0
- package/dist/collapse/index.js.map +1 -0
- package/dist/command/index.js +5 -0
- package/dist/command/index.js.map +1 -0
- package/dist/date-picker/index.js +5 -0
- package/dist/date-picker/index.js.map +1 -0
- package/dist/descriptions/index.js +4 -0
- package/dist/descriptions/index.js.map +1 -0
- package/dist/drawer/index.js +4 -0
- package/dist/drawer/index.js.map +1 -0
- package/dist/dropdown/index.js +5 -0
- package/dist/dropdown/index.js.map +1 -0
- package/dist/empty/index.js +4 -0
- package/dist/empty/index.js.map +1 -0
- package/dist/fetching-overlay/index.js +5 -0
- package/dist/fetching-overlay/index.js.map +1 -0
- package/dist/image/index.js +4 -0
- package/dist/image/index.js.map +1 -0
- package/dist/index.d.ts +2672 -0
- package/dist/index.js +976 -0
- package/dist/index.js.map +1 -0
- package/dist/input/index.js +5 -0
- package/dist/input/index.js.map +1 -0
- package/dist/input-group/index.js +4 -0
- package/dist/input-group/index.js.map +1 -0
- package/dist/input-otp/index.js +4 -0
- package/dist/input-otp/index.js.map +1 -0
- package/dist/input-password/index.js +6 -0
- package/dist/input-password/index.js.map +1 -0
- package/dist/kbd/index.js +4 -0
- package/dist/kbd/index.js.map +1 -0
- package/dist/modal/index.js +4 -0
- package/dist/modal/index.js.map +1 -0
- package/dist/multi-select/index.js +5 -0
- package/dist/multi-select/index.js.map +1 -0
- package/dist/notification/index.js +4 -0
- package/dist/notification/index.js.map +1 -0
- package/dist/pagination/index.js +4 -0
- package/dist/pagination/index.js.map +1 -0
- package/dist/popover/index.js +4 -0
- package/dist/popover/index.js.map +1 -0
- package/dist/progress/index.js +4 -0
- package/dist/progress/index.js.map +1 -0
- package/dist/radio/index.js +4 -0
- package/dist/radio/index.js.map +1 -0
- package/dist/radio-group/index.js +4 -0
- package/dist/radio-group/index.js.map +1 -0
- package/dist/rating/index.js +4 -0
- package/dist/rating/index.js.map +1 -0
- package/dist/ribbon/index.js +4 -0
- package/dist/ribbon/index.js.map +1 -0
- package/dist/select/index.js +6 -0
- package/dist/select/index.js.map +1 -0
- package/dist/skeleton/index.js +4 -0
- package/dist/skeleton/index.js.map +1 -0
- package/dist/slider/index.js +4 -0
- package/dist/slider/index.js.map +1 -0
- package/dist/spinner/index.js +4 -0
- package/dist/spinner/index.js.map +1 -0
- package/dist/stepper/index.js +4 -0
- package/dist/stepper/index.js.map +1 -0
- package/dist/styles/base.css +161 -0
- package/dist/styles/global.css +633 -0
- package/dist/styles/themes/dark.css +84 -0
- package/dist/styles/themes/light.css +84 -0
- package/dist/switch/index.js +4 -0
- package/dist/switch/index.js.map +1 -0
- package/dist/table/index.js +12 -0
- package/dist/table/index.js.map +1 -0
- package/dist/tabs/index.js +5 -0
- package/dist/tabs/index.js.map +1 -0
- package/dist/textarea/index.js +4 -0
- package/dist/textarea/index.js.map +1 -0
- package/dist/toggle/index.js +4 -0
- package/dist/toggle/index.js.map +1 -0
- package/dist/toggle-group/index.js +4 -0
- package/dist/toggle-group/index.js.map +1 -0
- package/dist/tooltip/index.js +4 -0
- package/dist/tooltip/index.js.map +1 -0
- package/dist/transfer/index.js +6 -0
- package/dist/transfer/index.js.map +1 -0
- package/dist/tree/index.js +4 -0
- package/dist/tree/index.js.map +1 -0
- package/dist/tree-select/index.js +6 -0
- package/dist/tree-select/index.js.map +1 -0
- package/package.json +107 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { createAllColorVariants, componentColors } from './chunk-5UEWVFF6.js';
|
|
2
|
+
import { cn } from './chunk-YNNAOXU5.js';
|
|
3
|
+
import { cva } from 'class-variance-authority';
|
|
4
|
+
import React from 'react';
|
|
5
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
var badgeVariants = cva(
|
|
8
|
+
"inline-flex items-center justify-center whitespace-nowrap rounded font-medium",
|
|
9
|
+
{
|
|
10
|
+
variants: {
|
|
11
|
+
variant: {
|
|
12
|
+
default: "border",
|
|
13
|
+
solid: "",
|
|
14
|
+
outline: "border",
|
|
15
|
+
soft: ""
|
|
16
|
+
},
|
|
17
|
+
color: {
|
|
18
|
+
default: "",
|
|
19
|
+
primary: "",
|
|
20
|
+
secondary: "",
|
|
21
|
+
accent: "",
|
|
22
|
+
success: "",
|
|
23
|
+
error: "",
|
|
24
|
+
warning: "",
|
|
25
|
+
info: ""
|
|
26
|
+
},
|
|
27
|
+
size: {
|
|
28
|
+
xs: "text-[10px] px-1 py-0",
|
|
29
|
+
sm: "text-xs px-1.5 py-0.5",
|
|
30
|
+
md: "text-xs px-2 py-0.5",
|
|
31
|
+
lg: "text-sm px-2.5 py-1"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
compoundVariants: createAllColorVariants(componentColors, [
|
|
35
|
+
"default",
|
|
36
|
+
"solid",
|
|
37
|
+
"outline",
|
|
38
|
+
"soft"
|
|
39
|
+
]),
|
|
40
|
+
defaultVariants: {
|
|
41
|
+
variant: "solid",
|
|
42
|
+
color: "primary",
|
|
43
|
+
size: "sm"
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
);
|
|
47
|
+
var Badge = React.memo(
|
|
48
|
+
({
|
|
49
|
+
children,
|
|
50
|
+
color = "primary",
|
|
51
|
+
variant = "solid",
|
|
52
|
+
size = "sm",
|
|
53
|
+
dot = false,
|
|
54
|
+
count,
|
|
55
|
+
showZero = true,
|
|
56
|
+
className
|
|
57
|
+
}) => {
|
|
58
|
+
const getDisplayCount = () => {
|
|
59
|
+
if (count === void 0) return null;
|
|
60
|
+
if (count === 0 && !showZero) return null;
|
|
61
|
+
if (count > 99) return "99+";
|
|
62
|
+
return count;
|
|
63
|
+
};
|
|
64
|
+
const displayCount = getDisplayCount();
|
|
65
|
+
if (count !== void 0 && count === 0 && !showZero && !children) {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
if (children && (count !== void 0 || dot)) {
|
|
69
|
+
return /* @__PURE__ */ jsxs("span", { className: "relative inline-flex", children: [
|
|
70
|
+
children,
|
|
71
|
+
/* @__PURE__ */ jsx(
|
|
72
|
+
"span",
|
|
73
|
+
{
|
|
74
|
+
className: cn(
|
|
75
|
+
"absolute -top-2 -right-2 z-10",
|
|
76
|
+
badgeVariants({ variant, color, size }),
|
|
77
|
+
dot && "p-0 rounded-full w-2 h-2",
|
|
78
|
+
className
|
|
79
|
+
),
|
|
80
|
+
children: !dot && displayCount
|
|
81
|
+
}
|
|
82
|
+
)
|
|
83
|
+
] });
|
|
84
|
+
}
|
|
85
|
+
const displayContent = count !== void 0 ? displayCount : children;
|
|
86
|
+
return /* @__PURE__ */ jsx(
|
|
87
|
+
"span",
|
|
88
|
+
{
|
|
89
|
+
className: cn(
|
|
90
|
+
badgeVariants({ variant, color, size }),
|
|
91
|
+
dot && "p-0 rounded-full w-2 h-2 min-w-[8px]",
|
|
92
|
+
className
|
|
93
|
+
),
|
|
94
|
+
children: !dot && displayContent
|
|
95
|
+
}
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
);
|
|
99
|
+
Badge.displayName = "Badge";
|
|
100
|
+
var badge_default = Badge;
|
|
101
|
+
|
|
102
|
+
export { badge_default };
|
|
103
|
+
//# sourceMappingURL=chunk-FTJOSVTY.js.map
|
|
104
|
+
//# sourceMappingURL=chunk-FTJOSVTY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/badge/index.tsx"],"names":[],"mappings":";;;;;;AAOA,IAAM,aAAA,GAAgB,GAAA;AAAA,EACpB,+EAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,QAAA;AAAA,QACT,KAAA,EAAO,EAAA;AAAA,QACP,OAAA,EAAS,QAAA;AAAA,QACT,IAAA,EAAM;AAAA,OACR;AAAA,MACA,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,EAAA;AAAA,QACT,OAAA,EAAS,EAAA;AAAA,QACT,SAAA,EAAW,EAAA;AAAA,QACX,MAAA,EAAQ,EAAA;AAAA,QACR,OAAA,EAAS,EAAA;AAAA,QACT,KAAA,EAAO,EAAA;AAAA,QACP,OAAA,EAAS,EAAA;AAAA,QACT,IAAA,EAAM;AAAA,OACR;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,uBAAA;AAAA,QACJ,EAAA,EAAI,uBAAA;AAAA,QACJ,EAAA,EAAI,qBAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,gBAAA,EAAkB,uBAAuB,eAAA,EAAiB;AAAA,MACxD,SAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,IACD,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,OAAA;AAAA,MACT,KAAA,EAAO,SAAA;AAAA,MACP,IAAA,EAAM;AAAA;AACR;AAEJ,CAAA;AAEA,IAAM,QAAQ,KAAA,CAAM,IAAA;AAAA,EAClB,CAAC;AAAA,IACC,QAAA;AAAA,IACA,KAAA,GAAQ,SAAA;AAAA,IACR,OAAA,GAAU,OAAA;AAAA,IACV,IAAA,GAAO,IAAA;AAAA,IACP,GAAA,GAAM,KAAA;AAAA,IACN,KAAA;AAAA,IACA,QAAA,GAAW,IAAA;AAAA,IACX;AAAA,GACF,KAAM;AACJ,IAAA,MAAM,kBAAkB,MAAM;AAC5B,MAAA,IAAI,KAAA,KAAU,QAAW,OAAO,IAAA;AAChC,MAAA,IAAI,KAAA,KAAU,CAAA,IAAK,CAAC,QAAA,EAAU,OAAO,IAAA;AACrC,MAAA,IAAI,KAAA,GAAQ,IAAI,OAAO,KAAA;AACvB,MAAA,OAAO,KAAA;AAAA,IACT,CAAA;AAEA,IAAA,MAAM,eAAe,eAAA,EAAgB;AAGrC,IAAA,IAAI,UAAU,MAAA,IAAa,KAAA,KAAU,KAAK,CAAC,QAAA,IAAY,CAAC,QAAA,EAAU;AAChE,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,IAAI,QAAA,KAAa,KAAA,KAAU,MAAA,IAAa,GAAA,CAAA,EAAM;AAC5C,MAAA,uBACE,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sBAAA,EACb,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBACD,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,+BAAA;AAAA,cACA,aAAA,CAAc,EAAE,OAAA,EAAS,KAAA,EAAO,MAAM,CAAA;AAAA,cACtC,GAAA,IAAO,0BAAA;AAAA,cACP;AAAA,aACF;AAAA,YAEC,WAAC,GAAA,IAAO;AAAA;AAAA;AACX,OAAA,EACF,CAAA;AAAA,IAEJ;AAGA,IAAA,MAAM,cAAA,GAAiB,KAAA,KAAU,MAAA,GAAY,YAAA,GAAe,QAAA;AAE5D,IAAA,uBACE,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,aAAA,CAAc,EAAE,OAAA,EAAS,KAAA,EAAO,MAAM,CAAA;AAAA,UACtC,GAAA,IAAO,sCAAA;AAAA,UACP;AAAA,SACF;AAAA,QAEC,WAAC,GAAA,IAAO;AAAA;AAAA,KACX;AAAA,EAEJ;AACF,CAAA;AAEA,KAAA,CAAM,WAAA,GAAc,OAAA;AAGpB,IAAO,aAAA,GAAQ","file":"chunk-FTJOSVTY.js","sourcesContent":["import { cva } from 'class-variance-authority'\nimport React from 'react'\n\nimport { cn } from '../utils'\nimport { componentColors, createAllColorVariants } from '../variants'\nimport type { BadgeProps } from './types'\n\nconst badgeVariants = cva(\n 'inline-flex items-center justify-center whitespace-nowrap rounded font-medium',\n {\n variants: {\n variant: {\n default: 'border',\n solid: '',\n outline: 'border',\n soft: '',\n },\n color: {\n default: '',\n primary: '',\n secondary: '',\n accent: '',\n success: '',\n error: '',\n warning: '',\n info: '',\n },\n size: {\n xs: 'text-[10px] px-1 py-0',\n sm: 'text-xs px-1.5 py-0.5',\n md: 'text-xs px-2 py-0.5',\n lg: 'text-sm px-2.5 py-1',\n },\n },\n compoundVariants: createAllColorVariants(componentColors, [\n 'default',\n 'solid',\n 'outline',\n 'soft',\n ]),\n defaultVariants: {\n variant: 'solid',\n color: 'primary',\n size: 'sm',\n },\n },\n)\n\nconst Badge = React.memo<BadgeProps>(\n ({\n children,\n color = 'primary',\n variant = 'solid',\n size = 'sm',\n dot = false,\n count,\n showZero = true,\n className,\n }) => {\n const getDisplayCount = () => {\n if (count === undefined) return null\n if (count === 0 && !showZero) return null\n if (count > 99) return '99+'\n return count\n }\n\n const displayCount = getDisplayCount()\n\n // Don't render if count is 0 and showZero is false\n if (count !== undefined && count === 0 && !showZero && !children) {\n return null\n }\n\n // If both children and count/dot are provided, render floating badge\n if (children && (count !== undefined || dot)) {\n return (\n <span className=\"relative inline-flex\">\n {children}\n <span\n className={cn(\n 'absolute -top-2 -right-2 z-10',\n badgeVariants({ variant, color, size }),\n dot && 'p-0 rounded-full w-2 h-2',\n className,\n )}\n >\n {!dot && displayCount}\n </span>\n </span>\n )\n }\n\n // Otherwise render simple badge\n const displayContent = count !== undefined ? displayCount : children\n\n return (\n <span\n className={cn(\n badgeVariants({ variant, color, size }),\n dot && 'p-0 rounded-full w-2 h-2 min-w-[8px]',\n className,\n )}\n >\n {!dot && displayContent}\n </span>\n )\n },\n)\n\nBadge.displayName = 'Badge'\n\nexport type * from './types'\nexport default Badge\n"]}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { cn } from './chunk-YNNAOXU5.js';
|
|
2
|
+
import { cva } from 'class-variance-authority';
|
|
3
|
+
import { Star } from 'lucide-react';
|
|
4
|
+
import React, { useState } from 'react';
|
|
5
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
var ratingVariants = cva("inline-flex items-center gap-1", {
|
|
8
|
+
variants: {
|
|
9
|
+
size: {
|
|
10
|
+
xs: "text-xs",
|
|
11
|
+
sm: "text-sm",
|
|
12
|
+
md: "text-base",
|
|
13
|
+
lg: "text-lg"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
defaultVariants: {
|
|
17
|
+
size: "md"
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
var starSizes = {
|
|
21
|
+
xs: 12,
|
|
22
|
+
sm: 16,
|
|
23
|
+
md: 20,
|
|
24
|
+
lg: 24
|
|
25
|
+
};
|
|
26
|
+
var getStarClasses = (color, variant, isFilled, isHovered) => {
|
|
27
|
+
const state = isFilled || isHovered ? "filled" : "empty";
|
|
28
|
+
if (state === "empty") {
|
|
29
|
+
if (variant === "solid") {
|
|
30
|
+
if (color === "default") return "fill-transparent stroke-border";
|
|
31
|
+
return `fill-transparent stroke-${color} opacity-20`;
|
|
32
|
+
}
|
|
33
|
+
if (variant === "soft") {
|
|
34
|
+
if (color === "default") return "fill-transparent stroke-border/50";
|
|
35
|
+
return `fill-transparent stroke-${color} opacity-20`;
|
|
36
|
+
}
|
|
37
|
+
if (color === "default") return "fill-transparent stroke-border";
|
|
38
|
+
return `fill-transparent stroke-${color} opacity-20`;
|
|
39
|
+
}
|
|
40
|
+
if (variant === "solid") {
|
|
41
|
+
if (color === "default") return "fill-border stroke-border";
|
|
42
|
+
return `fill-${color} stroke-${color}`;
|
|
43
|
+
}
|
|
44
|
+
if (variant === "soft") {
|
|
45
|
+
if (color === "default") return "fill-border/50 stroke-border";
|
|
46
|
+
return `fill-${color} opacity-20 stroke-${color}`;
|
|
47
|
+
}
|
|
48
|
+
if (color === "default") return "fill-border stroke-border";
|
|
49
|
+
return `fill-${color} stroke-${color}`;
|
|
50
|
+
};
|
|
51
|
+
var Rating = React.memo(
|
|
52
|
+
({
|
|
53
|
+
value: controlledValue,
|
|
54
|
+
defaultValue = 0,
|
|
55
|
+
count = 5,
|
|
56
|
+
allowHalf = false,
|
|
57
|
+
color = "warning",
|
|
58
|
+
size = "md",
|
|
59
|
+
variant = "solid",
|
|
60
|
+
onChange,
|
|
61
|
+
disabled = false,
|
|
62
|
+
readOnly = false,
|
|
63
|
+
className
|
|
64
|
+
}) => {
|
|
65
|
+
const [internalValue, setInternalValue] = useState(defaultValue);
|
|
66
|
+
const [hoverValue, setHoverValue] = useState(null);
|
|
67
|
+
const value = controlledValue !== void 0 ? controlledValue : internalValue;
|
|
68
|
+
const displayValue = hoverValue !== null ? hoverValue : value;
|
|
69
|
+
const handleStarClick = (index, isHalf) => {
|
|
70
|
+
if (disabled || readOnly) return;
|
|
71
|
+
const newValue = isHalf ? index + 0.5 : index + 1;
|
|
72
|
+
if (controlledValue === void 0) {
|
|
73
|
+
setInternalValue(newValue);
|
|
74
|
+
}
|
|
75
|
+
onChange?.(newValue);
|
|
76
|
+
};
|
|
77
|
+
const handleStarHover = (index, isHalf) => {
|
|
78
|
+
if (disabled || readOnly) return;
|
|
79
|
+
const newValue = isHalf ? index + 0.5 : index + 1;
|
|
80
|
+
setHoverValue(newValue);
|
|
81
|
+
};
|
|
82
|
+
const handleMouseLeave = () => {
|
|
83
|
+
setHoverValue(null);
|
|
84
|
+
};
|
|
85
|
+
const getStarFill = (index) => {
|
|
86
|
+
const fillValue = displayValue - index;
|
|
87
|
+
if (fillValue >= 1) return "full";
|
|
88
|
+
if (fillValue > 0 && fillValue < 1) return "half";
|
|
89
|
+
return "empty";
|
|
90
|
+
};
|
|
91
|
+
return /* @__PURE__ */ jsx("div", { className: cn(ratingVariants({ size }), className), children: /* @__PURE__ */ jsx(
|
|
92
|
+
"div",
|
|
93
|
+
{
|
|
94
|
+
className: "inline-flex items-center gap-0.5",
|
|
95
|
+
onMouseLeave: handleMouseLeave,
|
|
96
|
+
children: Array.from({ length: count }, (_, index) => {
|
|
97
|
+
const fillType = getStarFill(index);
|
|
98
|
+
const isHovered = hoverValue !== null && index < Math.ceil(hoverValue);
|
|
99
|
+
return /* @__PURE__ */ jsxs(
|
|
100
|
+
"div",
|
|
101
|
+
{
|
|
102
|
+
className: cn(
|
|
103
|
+
"relative inline-flex",
|
|
104
|
+
!disabled && !readOnly && "cursor-pointer",
|
|
105
|
+
disabled && "opacity-50 cursor-not-allowed"
|
|
106
|
+
),
|
|
107
|
+
children: [
|
|
108
|
+
allowHalf && /* @__PURE__ */ jsx(
|
|
109
|
+
"div",
|
|
110
|
+
{
|
|
111
|
+
className: "absolute inset-0 w-1/2 z-10",
|
|
112
|
+
onClick: () => handleStarClick(index, true),
|
|
113
|
+
onMouseEnter: () => handleStarHover(index, true)
|
|
114
|
+
}
|
|
115
|
+
),
|
|
116
|
+
/* @__PURE__ */ jsx(
|
|
117
|
+
"div",
|
|
118
|
+
{
|
|
119
|
+
className: cn(
|
|
120
|
+
"absolute inset-0 z-10",
|
|
121
|
+
allowHalf ? "left-1/2" : "left-0"
|
|
122
|
+
),
|
|
123
|
+
onClick: () => handleStarClick(index, false),
|
|
124
|
+
onMouseEnter: () => handleStarHover(index, false)
|
|
125
|
+
}
|
|
126
|
+
),
|
|
127
|
+
/* @__PURE__ */ jsx(
|
|
128
|
+
Star,
|
|
129
|
+
{
|
|
130
|
+
size: starSizes[size],
|
|
131
|
+
className: cn(
|
|
132
|
+
getStarClasses(color, variant, false, false),
|
|
133
|
+
"transition-colors"
|
|
134
|
+
)
|
|
135
|
+
}
|
|
136
|
+
),
|
|
137
|
+
fillType !== "empty" && /* @__PURE__ */ jsx(
|
|
138
|
+
Star,
|
|
139
|
+
{
|
|
140
|
+
size: starSizes[size],
|
|
141
|
+
className: cn(
|
|
142
|
+
"absolute top-0 left-0 transition-colors",
|
|
143
|
+
getStarClasses(color, variant, true, isHovered)
|
|
144
|
+
),
|
|
145
|
+
style: {
|
|
146
|
+
clipPath: fillType === "half" ? "polygon(0 0, 50% 0, 50% 100%, 0 100%)" : "none"
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
)
|
|
150
|
+
]
|
|
151
|
+
},
|
|
152
|
+
index
|
|
153
|
+
);
|
|
154
|
+
})
|
|
155
|
+
}
|
|
156
|
+
) });
|
|
157
|
+
}
|
|
158
|
+
);
|
|
159
|
+
Rating.displayName = "Rating";
|
|
160
|
+
var rating_default = Rating;
|
|
161
|
+
|
|
162
|
+
export { rating_default };
|
|
163
|
+
//# sourceMappingURL=chunk-FYHQDFKE.js.map
|
|
164
|
+
//# sourceMappingURL=chunk-FYHQDFKE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/rating/index.tsx"],"names":[],"mappings":"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","file":"chunk-FYHQDFKE.js","sourcesContent":["import { cva } from 'class-variance-authority'\nimport { Star } from 'lucide-react'\nimport React, { useState } from 'react'\n\nimport { cn } from '../utils'\nimport type { RatingProps } from './types'\n\nconst ratingVariants = cva('inline-flex items-center gap-1', {\n variants: {\n size: {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n})\n\nconst starSizes = {\n xs: 12,\n sm: 16,\n md: 20,\n lg: 24,\n}\n\nconst getStarClasses = (\n color: string,\n variant: string,\n isFilled: boolean,\n isHovered: boolean,\n) => {\n const state = isFilled || isHovered ? 'filled' : 'empty'\n\n if (state === 'empty') {\n if (variant === 'solid') {\n if (color === 'default') return 'fill-transparent stroke-border'\n return `fill-transparent stroke-${color} opacity-20`\n }\n if (variant === 'soft') {\n if (color === 'default') return 'fill-transparent stroke-border/50'\n return `fill-transparent stroke-${color} opacity-20`\n }\n if (color === 'default') return 'fill-transparent stroke-border'\n return `fill-transparent stroke-${color} opacity-20`\n }\n\n // filled state\n if (variant === 'solid') {\n if (color === 'default') return 'fill-border stroke-border'\n return `fill-${color} stroke-${color}`\n }\n if (variant === 'soft') {\n if (color === 'default') return 'fill-border/50 stroke-border'\n return `fill-${color} opacity-20 stroke-${color}`\n }\n if (color === 'default') return 'fill-border stroke-border'\n return `fill-${color} stroke-${color}`\n}\n\nconst Rating = React.memo<RatingProps>(\n ({\n value: controlledValue,\n defaultValue = 0,\n count = 5,\n allowHalf = false,\n color = 'warning',\n size = 'md',\n variant = 'solid',\n onChange,\n disabled = false,\n readOnly = false,\n className,\n }) => {\n const [internalValue, setInternalValue] = useState(defaultValue)\n const [hoverValue, setHoverValue] = useState<number | null>(null)\n\n const value =\n controlledValue !== undefined ? controlledValue : internalValue\n const displayValue = hoverValue !== null ? hoverValue : value\n\n const handleStarClick = (index: number, isHalf: boolean) => {\n if (disabled || readOnly) return\n\n const newValue = isHalf ? index + 0.5 : index + 1\n\n if (controlledValue === undefined) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n }\n\n const handleStarHover = (index: number, isHalf: boolean) => {\n if (disabled || readOnly) return\n const newValue = isHalf ? index + 0.5 : index + 1\n setHoverValue(newValue)\n }\n\n const handleMouseLeave = () => {\n setHoverValue(null)\n }\n\n const getStarFill = (index: number) => {\n const fillValue = displayValue - index\n if (fillValue >= 1) return 'full'\n if (fillValue > 0 && fillValue < 1) return 'half'\n return 'empty'\n }\n\n return (\n <div className={cn(ratingVariants({ size }), className)}>\n <div\n className=\"inline-flex items-center gap-0.5\"\n onMouseLeave={handleMouseLeave}\n >\n {Array.from({ length: count }, (_, index) => {\n const fillType = getStarFill(index)\n const isHovered =\n hoverValue !== null && index < Math.ceil(hoverValue)\n\n return (\n <div\n key={index}\n className={cn(\n 'relative inline-flex',\n !disabled && !readOnly && 'cursor-pointer',\n disabled && 'opacity-50 cursor-not-allowed',\n )}\n >\n {/* Left half */}\n {allowHalf && (\n <div\n className=\"absolute inset-0 w-1/2 z-10\"\n onClick={() => handleStarClick(index, true)}\n onMouseEnter={() => handleStarHover(index, true)}\n />\n )}\n {/* Right half or full star */}\n <div\n className={cn(\n 'absolute inset-0 z-10',\n allowHalf ? 'left-1/2' : 'left-0',\n )}\n onClick={() => handleStarClick(index, false)}\n onMouseEnter={() => handleStarHover(index, false)}\n />\n\n {/* Background star (empty) */}\n <Star\n size={starSizes[size]}\n className={cn(\n getStarClasses(color, variant, false, false),\n 'transition-colors',\n )}\n />\n\n {/* Foreground star (filled) */}\n {fillType !== 'empty' && (\n <Star\n size={starSizes[size]}\n className={cn(\n 'absolute top-0 left-0 transition-colors',\n getStarClasses(color, variant, true, isHovered),\n )}\n style={{\n clipPath:\n fillType === 'half'\n ? 'polygon(0 0, 50% 0, 50% 100%, 0 100%)'\n : 'none',\n }}\n />\n )}\n </div>\n )\n })}\n </div>\n </div>\n )\n },\n)\n\nRating.displayName = 'Rating'\n\nexport type * from './types'\nexport default Rating\n"]}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { getCheckboxColorClass } from './chunk-5UEWVFF6.js';
|
|
2
|
+
import { cn, iconSizes } from './chunk-YNNAOXU5.js';
|
|
3
|
+
import { cva } from 'class-variance-authority';
|
|
4
|
+
import { Check } from 'lucide-react';
|
|
5
|
+
import React, { useState } from 'react';
|
|
6
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
7
|
+
|
|
8
|
+
var checkboxVariants = cva(
|
|
9
|
+
"appearance-none rounded border bg-background cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed outline-none",
|
|
10
|
+
{
|
|
11
|
+
variants: {
|
|
12
|
+
color: {
|
|
13
|
+
primary: "border-border checked:border-primary",
|
|
14
|
+
secondary: "border-border checked:border-secondary",
|
|
15
|
+
accent: "border-border checked:border-accent",
|
|
16
|
+
success: "border-border checked:border-success",
|
|
17
|
+
error: "border-border checked:border-error",
|
|
18
|
+
warning: "border-border checked:border-warning",
|
|
19
|
+
info: "border-border checked:border-info"
|
|
20
|
+
},
|
|
21
|
+
size: {
|
|
22
|
+
xs: "w-4 h-4",
|
|
23
|
+
sm: "w-[var(--checkbox-size-sm)] h-[var(--checkbox-size-sm)]",
|
|
24
|
+
md: "w-[var(--checkbox-size-md)] h-[var(--checkbox-size-md)]",
|
|
25
|
+
lg: "w-[var(--checkbox-size-lg)] h-[var(--checkbox-size-lg)]"
|
|
26
|
+
},
|
|
27
|
+
error: {
|
|
28
|
+
true: "border-error checked:border-error",
|
|
29
|
+
false: ""
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
defaultVariants: {
|
|
33
|
+
color: "primary",
|
|
34
|
+
size: "md"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
);
|
|
38
|
+
var Checkbox = React.memo(
|
|
39
|
+
({
|
|
40
|
+
color = "primary",
|
|
41
|
+
size = "md",
|
|
42
|
+
label,
|
|
43
|
+
helperText,
|
|
44
|
+
error,
|
|
45
|
+
indeterminate = false,
|
|
46
|
+
className,
|
|
47
|
+
checked,
|
|
48
|
+
defaultChecked,
|
|
49
|
+
ref,
|
|
50
|
+
labelClassName,
|
|
51
|
+
...props
|
|
52
|
+
}) => {
|
|
53
|
+
const [internalChecked, setInternalChecked] = useState(
|
|
54
|
+
defaultChecked ?? false
|
|
55
|
+
);
|
|
56
|
+
const internalRef = React.useRef(null);
|
|
57
|
+
const checkboxRef = ref || internalRef;
|
|
58
|
+
const isControlled = checked !== void 0;
|
|
59
|
+
const currentChecked = isControlled ? checked : internalChecked;
|
|
60
|
+
const onChange = React.useCallback(
|
|
61
|
+
(event) => {
|
|
62
|
+
if (!isControlled) {
|
|
63
|
+
setInternalChecked(event.target.checked);
|
|
64
|
+
}
|
|
65
|
+
props.onChange?.(event);
|
|
66
|
+
},
|
|
67
|
+
[isControlled, props.onChange]
|
|
68
|
+
);
|
|
69
|
+
React.useEffect(() => {
|
|
70
|
+
if (checkboxRef.current) {
|
|
71
|
+
checkboxRef.current.indeterminate = indeterminate;
|
|
72
|
+
}
|
|
73
|
+
}, [indeterminate, checkboxRef]);
|
|
74
|
+
const checkboxElement = /* @__PURE__ */ jsxs("div", { className: "relative inline-flex", children: [
|
|
75
|
+
/* @__PURE__ */ jsx(
|
|
76
|
+
"input",
|
|
77
|
+
{
|
|
78
|
+
ref: checkboxRef,
|
|
79
|
+
type: "checkbox",
|
|
80
|
+
className: cn(
|
|
81
|
+
checkboxVariants({ color, size, error: !!error }),
|
|
82
|
+
className
|
|
83
|
+
),
|
|
84
|
+
"aria-checked": indeterminate ? "mixed" : currentChecked,
|
|
85
|
+
...props,
|
|
86
|
+
onChange,
|
|
87
|
+
checked: currentChecked
|
|
88
|
+
}
|
|
89
|
+
),
|
|
90
|
+
currentChecked && /* @__PURE__ */ jsx("div", { className: "absolute inset-0 flex items-center justify-center pointer-events-none", children: indeterminate ? /* @__PURE__ */ jsx(
|
|
91
|
+
"div",
|
|
92
|
+
{
|
|
93
|
+
className: cn(
|
|
94
|
+
"w-[70%] h-[70%] rounded-xs border-2 border-background flex items-center justify-center",
|
|
95
|
+
getCheckboxColorClass(color)
|
|
96
|
+
)
|
|
97
|
+
}
|
|
98
|
+
) : /* @__PURE__ */ jsx(
|
|
99
|
+
Check,
|
|
100
|
+
{
|
|
101
|
+
className: cn(
|
|
102
|
+
iconSizes[size],
|
|
103
|
+
color === "primary" && "text-primary",
|
|
104
|
+
color === "secondary" && "text-secondary",
|
|
105
|
+
color === "accent" && "text-accent",
|
|
106
|
+
color === "success" && "text-success",
|
|
107
|
+
color === "error" && "text-error",
|
|
108
|
+
color === "warning" && "text-warning",
|
|
109
|
+
color === "info" && "text-info"
|
|
110
|
+
)
|
|
111
|
+
}
|
|
112
|
+
) })
|
|
113
|
+
] });
|
|
114
|
+
if (!label && !helperText && !error) return checkboxElement;
|
|
115
|
+
return /* @__PURE__ */ jsxs("div", { className: "w-full", children: [
|
|
116
|
+
/* @__PURE__ */ jsxs(
|
|
117
|
+
"label",
|
|
118
|
+
{
|
|
119
|
+
className: cn(
|
|
120
|
+
"flex items-center gap-2",
|
|
121
|
+
!props.disabled && "cursor-pointer"
|
|
122
|
+
),
|
|
123
|
+
children: [
|
|
124
|
+
checkboxElement,
|
|
125
|
+
label && /* @__PURE__ */ jsx(
|
|
126
|
+
"span",
|
|
127
|
+
{
|
|
128
|
+
className: cn(
|
|
129
|
+
"text-sm text-text-primary select-none",
|
|
130
|
+
error && "text-error",
|
|
131
|
+
props.disabled && "opacity-50",
|
|
132
|
+
labelClassName
|
|
133
|
+
),
|
|
134
|
+
children: label
|
|
135
|
+
}
|
|
136
|
+
)
|
|
137
|
+
]
|
|
138
|
+
}
|
|
139
|
+
),
|
|
140
|
+
(helperText || error) && /* @__PURE__ */ jsx(
|
|
141
|
+
"p",
|
|
142
|
+
{
|
|
143
|
+
className: cn(
|
|
144
|
+
"mt-1 ml-0 text-xs",
|
|
145
|
+
error ? "text-error" : "text-text-secondary"
|
|
146
|
+
),
|
|
147
|
+
children: error || helperText
|
|
148
|
+
}
|
|
149
|
+
)
|
|
150
|
+
] });
|
|
151
|
+
}
|
|
152
|
+
);
|
|
153
|
+
Checkbox.displayName = "Checkbox";
|
|
154
|
+
var checkbox_default = Checkbox;
|
|
155
|
+
|
|
156
|
+
export { checkbox_default };
|
|
157
|
+
//# sourceMappingURL=chunk-H2HIBD5Y.js.map
|
|
158
|
+
//# sourceMappingURL=chunk-H2HIBD5Y.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/checkbox/index.tsx"],"names":[],"mappings":"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","file":"chunk-H2HIBD5Y.js","sourcesContent":["import { cva } from 'class-variance-authority'\nimport { Check } from 'lucide-react'\nimport React, { useState } from 'react'\n\nimport { cn, iconSizes } from '../utils'\nimport { getCheckboxColorClass } from '../variants'\nimport type { CheckboxProps } from './types'\n\nconst checkboxVariants = cva(\n 'appearance-none rounded border bg-background cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed outline-none',\n {\n variants: {\n color: {\n primary: 'border-border checked:border-primary',\n secondary: 'border-border checked:border-secondary',\n accent: 'border-border checked:border-accent',\n success: 'border-border checked:border-success',\n error: 'border-border checked:border-error',\n warning: 'border-border checked:border-warning',\n info: 'border-border checked:border-info',\n },\n size: {\n xs: 'w-4 h-4',\n sm: 'w-[var(--checkbox-size-sm)] h-[var(--checkbox-size-sm)]',\n md: 'w-[var(--checkbox-size-md)] h-[var(--checkbox-size-md)]',\n lg: 'w-[var(--checkbox-size-lg)] h-[var(--checkbox-size-lg)]',\n },\n error: {\n true: 'border-error checked:border-error',\n false: '',\n },\n },\n defaultVariants: {\n color: 'primary',\n size: 'md',\n },\n },\n)\n\nconst Checkbox = React.memo<CheckboxProps>(\n ({\n color = 'primary',\n size = 'md',\n label,\n helperText,\n error,\n indeterminate = false,\n className,\n checked,\n defaultChecked,\n ref,\n labelClassName,\n ...props\n }) => {\n const [internalChecked, setInternalChecked] = useState(\n defaultChecked ?? false,\n )\n const internalRef = React.useRef<HTMLInputElement>(null)\n const checkboxRef =\n (ref as React.RefObject<HTMLInputElement>) || internalRef\n\n // Determine if controlled\n const isControlled = checked !== undefined\n const currentChecked = isControlled ? checked : internalChecked\n\n const onChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setInternalChecked(event.target.checked)\n }\n props.onChange?.(event)\n },\n [isControlled, props.onChange],\n )\n\n React.useEffect(() => {\n if (checkboxRef.current) {\n checkboxRef.current.indeterminate = indeterminate\n }\n }, [indeterminate, checkboxRef])\n\n const checkboxElement = (\n <div className=\"relative inline-flex\">\n <input\n ref={checkboxRef}\n type=\"checkbox\"\n className={cn(\n checkboxVariants({ color, size, error: !!error }),\n className,\n )}\n aria-checked={indeterminate ? 'mixed' : currentChecked}\n {...props}\n onChange={onChange}\n checked={currentChecked}\n />\n {currentChecked && (\n <div className=\"absolute inset-0 flex items-center justify-center pointer-events-none\">\n {indeterminate ? (\n <div\n className={cn(\n 'w-[70%] h-[70%] rounded-xs border-2 border-background flex items-center justify-center',\n getCheckboxColorClass(color),\n )}\n />\n ) : (\n <Check\n className={cn(\n iconSizes[size],\n color === 'primary' && 'text-primary',\n color === 'secondary' && 'text-secondary',\n color === 'accent' && 'text-accent',\n color === 'success' && 'text-success',\n color === 'error' && 'text-error',\n color === 'warning' && 'text-warning',\n color === 'info' && 'text-info',\n )}\n />\n )}\n </div>\n )}\n </div>\n )\n\n if (!label && !helperText && !error) return checkboxElement\n\n return (\n <div className=\"w-full\">\n <label\n className={cn(\n 'flex items-center gap-2',\n !props.disabled && 'cursor-pointer',\n )}\n >\n {checkboxElement}\n {label && (\n <span\n className={cn(\n 'text-sm text-text-primary select-none',\n error && 'text-error',\n props.disabled && 'opacity-50',\n labelClassName,\n )}\n >\n {label}\n </span>\n )}\n </label>\n {(helperText || error) && (\n <p\n className={cn(\n 'mt-1 ml-0 text-xs',\n error ? 'text-error' : 'text-text-secondary',\n )}\n >\n {error || helperText}\n </p>\n )}\n </div>\n )\n },\n)\n\nCheckbox.displayName = 'Checkbox'\n\nexport type * from './types'\nexport default Checkbox\n"]}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { cn } from './chunk-YNNAOXU5.js';
|
|
2
|
+
import { cva } from 'class-variance-authority';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
var spinnerVariants = cva(
|
|
7
|
+
"inline-block border border-current border-t-transparent rounded-full animate-spin",
|
|
8
|
+
{
|
|
9
|
+
variants: {
|
|
10
|
+
size: {
|
|
11
|
+
xs: "w-3 h-3 border",
|
|
12
|
+
sm: "w-4 h-4 border",
|
|
13
|
+
md: "w-6 h-6 border-2",
|
|
14
|
+
lg: "w-8 h-8 border-2"
|
|
15
|
+
},
|
|
16
|
+
color: {
|
|
17
|
+
default: "text-text-primary",
|
|
18
|
+
primary: "text-primary",
|
|
19
|
+
secondary: "text-secondary",
|
|
20
|
+
accent: "text-accent",
|
|
21
|
+
success: "text-success",
|
|
22
|
+
error: "text-error",
|
|
23
|
+
warning: "text-warning",
|
|
24
|
+
info: "text-info"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
defaultVariants: {
|
|
28
|
+
size: "sm",
|
|
29
|
+
color: "primary"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
);
|
|
33
|
+
var Spinner = React.memo(
|
|
34
|
+
({ size = "sm", color = "primary", label, className }) => {
|
|
35
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("inline-flex flex-col items-center gap-2", className), children: [
|
|
36
|
+
/* @__PURE__ */ jsx(
|
|
37
|
+
"div",
|
|
38
|
+
{
|
|
39
|
+
className: spinnerVariants({ size, color }),
|
|
40
|
+
role: "status",
|
|
41
|
+
"aria-label": label || "Loading"
|
|
42
|
+
}
|
|
43
|
+
),
|
|
44
|
+
label && /* @__PURE__ */ jsx("span", { className: "text-sm text-text-muted", children: label })
|
|
45
|
+
] });
|
|
46
|
+
}
|
|
47
|
+
);
|
|
48
|
+
Spinner.displayName = "Spinner";
|
|
49
|
+
var spinner_default = Spinner;
|
|
50
|
+
|
|
51
|
+
export { Spinner, spinner_default };
|
|
52
|
+
//# sourceMappingURL=chunk-J3G5WWGR.js.map
|
|
53
|
+
//# sourceMappingURL=chunk-J3G5WWGR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/spinner/index.tsx"],"names":[],"mappings":";;;;;AAMA,IAAM,eAAA,GAAkB,GAAA;AAAA,EACtB,mFAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,gBAAA;AAAA,QACJ,EAAA,EAAI,gBAAA;AAAA,QACJ,EAAA,EAAI,kBAAA;AAAA,QACJ,EAAA,EAAI;AAAA,OACN;AAAA,MACA,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,mBAAA;AAAA,QACT,OAAA,EAAS,cAAA;AAAA,QACT,SAAA,EAAW,gBAAA;AAAA,QACX,MAAA,EAAQ,aAAA;AAAA,QACR,OAAA,EAAS,cAAA;AAAA,QACT,KAAA,EAAO,YAAA;AAAA,QACP,OAAA,EAAS,cAAA;AAAA,QACT,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM,IAAA;AAAA,MACN,KAAA,EAAO;AAAA;AACT;AAEJ,CAAA;AAEO,IAAM,UAAU,KAAA,CAAM,IAAA;AAAA,EAC3B,CAAC,EAAE,IAAA,GAAO,IAAA,EAAM,QAAQ,SAAA,EAAW,KAAA,EAAO,WAAU,KAAM;AACxD,IAAA,4BACG,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,yCAAA,EAA2C,SAAS,CAAA,EACrE,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,eAAA,CAAgB,EAAE,IAAA,EAAM,OAAO,CAAA;AAAA,UAC1C,IAAA,EAAK,QAAA;AAAA,UACL,cAAY,KAAA,IAAS;AAAA;AAAA,OACvB;AAAA,MACC,KAAA,oBAAS,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2BAA2B,QAAA,EAAA,KAAA,EAAM;AAAA,KAAA,EAC7D,CAAA;AAAA,EAEJ;AACF;AAEA,OAAA,CAAQ,WAAA,GAAc,SAAA;AAGtB,IAAO,eAAA,GAAQ","file":"chunk-J3G5WWGR.js","sourcesContent":["import { cva } from 'class-variance-authority'\nimport React from 'react'\n\nimport { cn } from '../utils'\nimport type { SpinnerProps } from './types'\n\nconst spinnerVariants = cva(\n 'inline-block border border-current border-t-transparent rounded-full animate-spin',\n {\n variants: {\n size: {\n xs: 'w-3 h-3 border',\n sm: 'w-4 h-4 border',\n md: 'w-6 h-6 border-2',\n lg: 'w-8 h-8 border-2',\n },\n color: {\n default: 'text-text-primary',\n primary: 'text-primary',\n secondary: 'text-secondary',\n accent: 'text-accent',\n success: 'text-success',\n error: 'text-error',\n warning: 'text-warning',\n info: 'text-info',\n },\n },\n defaultVariants: {\n size: 'sm',\n color: 'primary',\n },\n },\n)\n\nexport const Spinner = React.memo<SpinnerProps>(\n ({ size = 'sm', color = 'primary', label, className }) => {\n return (\n <div className={cn('inline-flex flex-col items-center gap-2', className)}>\n <div\n className={spinnerVariants({ size, color })}\n role=\"status\"\n aria-label={label || 'Loading'}\n />\n {label && <span className=\"text-sm text-text-muted\">{label}</span>}\n </div>\n )\n },\n)\n\nSpinner.displayName = 'Spinner'\n\nexport type * from './types'\nexport default Spinner\n"]}
|