@jbpark/ui-kit 2.3.4 → 2.4.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.
Files changed (28) hide show
  1. package/dist/components/atoms/Button/index.d.mts +5 -1
  2. package/dist/components/atoms/Button/index.d.mts.map +1 -1
  3. package/dist/components/atoms/Button/index.mjs +19 -6
  4. package/dist/components/atoms/Button/index.mjs.map +1 -1
  5. package/dist/components/atoms/Checkbox/Group/index.d.mts +2 -2
  6. package/dist/components/atoms/Checkbox/Group/index.d.mts.map +1 -1
  7. package/dist/components/atoms/Checkbox/Group/index.mjs.map +1 -1
  8. package/dist/components/atoms/Checkbox/index.d.mts +2 -3
  9. package/dist/components/atoms/Checkbox/index.d.mts.map +1 -1
  10. package/dist/components/atoms/Checkbox/index.mjs.map +1 -1
  11. package/dist/components/atoms/Radio/Group/index.d.mts +7 -2
  12. package/dist/components/atoms/Radio/Group/index.d.mts.map +1 -1
  13. package/dist/components/atoms/Radio/Group/index.mjs +15 -4
  14. package/dist/components/atoms/Radio/Group/index.mjs.map +1 -1
  15. package/dist/components/atoms/Radio/index.d.mts +6 -3
  16. package/dist/components/atoms/Radio/index.d.mts.map +1 -1
  17. package/dist/components/atoms/Radio/index.mjs +3 -2
  18. package/dist/components/atoms/Radio/index.mjs.map +1 -1
  19. package/dist/components/atoms/Switch/index.d.mts +6 -0
  20. package/dist/components/atoms/Switch/index.d.mts.map +1 -1
  21. package/dist/components/atoms/Switch/index.mjs +38 -5
  22. package/dist/components/atoms/Switch/index.mjs.map +1 -1
  23. package/dist/core/switch.d.mts +2 -0
  24. package/dist/core/switch.d.mts.map +1 -1
  25. package/dist/core/switch.mjs +5 -5
  26. package/dist/core/switch.mjs.map +1 -1
  27. package/dist/style.css +97 -20
  28. package/package.json +1 -1
@@ -5,13 +5,15 @@ import * as react_jsx_runtime0 from "react/jsx-runtime";
5
5
  //#region src/components/atoms/Button/index.d.ts
6
6
  type ButtonProps = Props$1;
7
7
  type PresetColors = 'blue' | 'purple' | 'cyan' | 'green' | 'magenta' | 'pink' | 'red' | 'orange' | 'yellow' | 'volcano' | 'geekblue' | 'lime' | 'gold';
8
- interface Props extends Omit<ButtonProps, 'size' | 'variant'> {
8
+ interface Props extends Omit<ButtonProps, 'size' | 'variant' | 'type'> {
9
9
  icon?: React.ReactNode;
10
10
  block?: boolean;
11
11
  danger?: boolean;
12
12
  disabled?: boolean;
13
13
  size?: 'small' | 'middle' | 'large';
14
+ type?: 'primary' | 'default' | 'dashed' | 'text' | 'link';
14
15
  variant?: 'solid' | 'outlined' | 'dashed' | 'filled' | 'text' | 'link';
16
+ shape?: 'default' | 'circle' | 'round';
15
17
  color?: PresetColors | 'default' | 'primary' | 'danger';
16
18
  loading?: boolean | {
17
19
  icon: React.ReactNode;
@@ -20,9 +22,11 @@ interface Props extends Omit<ButtonProps, 'size' | 'variant'> {
20
22
  declare const Button: ({
21
23
  icon,
22
24
  className,
25
+ type,
23
26
  variant,
24
27
  size,
25
28
  color,
29
+ shape,
26
30
  block,
27
31
  disabled,
28
32
  loading,
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/atoms/Button/index.tsx"],"mappings":";;;;;KAQK,WAAA,GAAc,OAAA;AAAA,KAEd,YAAA;AAAA,UAeY,KAAA,SAAc,IAAA,CAAK,WAAA;EAClC,IAAA,GAAO,KAAA,CAAM,SAAA;EACb,KAAA;EACA,MAAA;EACA,QAAA;EACA,IAAA;EACA,OAAA;EACA,KAAA,GAAQ,YAAA;EACR,OAAA;IAAsB,IAAA,EAAM,KAAA,CAAM,SAAA;EAAA;AAAA;AAAA,cAoC9B,MAAA;EAAU,IAAA;EAAA,SAAA;EAAA,OAAA;EAAA,IAAA;EAAA,KAAA;EAAA,KAAA;EAAA,QAAA;EAAA,OAAA;EAAA,MAAA;EAAA,QAAA;EAAA,WAAA;EAAA,GAAA;AAAA,GAab,KAAA,KAAK,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/atoms/Button/index.tsx"],"mappings":";;;;;KAQK,WAAA,GAAc,OAAA;AAAA,KAEd,YAAA;AAAA,UAeY,KAAA,SAAc,IAAA,CAAK,WAAA;EAClC,IAAA,GAAO,KAAA,CAAM,SAAA;EACb,KAAA;EACA,MAAA;EACA,QAAA;EACA,IAAA;EACA,IAAA;EACA,OAAA;EACA,KAAA;EACA,KAAA,GAAQ,YAAA;EACR,OAAA;IAAsB,IAAA,EAAM,KAAA,CAAM,SAAA;EAAA;AAAA;AAAA,cAkD9B,MAAA;EAAU,IAAA;EAAA,SAAA;EAAA,IAAA;EAAA,OAAA;EAAA,IAAA;EAAA,KAAA;EAAA,KAAA;EAAA,KAAA;EAAA,QAAA;EAAA,OAAA;EAAA,MAAA;EAAA,QAAA;EAAA,WAAA;EAAA,GAAA;AAAA,GAeb,KAAA,KAAK,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -16,26 +16,39 @@ const variantClasses = {
16
16
  text: cn("bg-transparent text-foreground", "hover:bg-accent"),
17
17
  link: cn("bg-transparent text-primary", "underline-offset-4 hover:underline", "hover:bg-primary/10")
18
18
  };
19
+ const typeToVariant = {
20
+ primary: "solid",
21
+ default: "outlined",
22
+ dashed: "dashed",
23
+ text: "text",
24
+ link: "link"
25
+ };
19
26
  const sizesClasses = {
20
27
  small: "h-6 px-3 text-sm",
21
28
  middle: "h-8 px-4 text-base",
22
29
  large: "h-10 px-5 text-lg"
23
30
  };
24
- const iconSizes = {
25
- small: "size-6",
26
- middle: "size-8",
27
- large: "size-10"
31
+ const iconClasses = {
32
+ small: `size-6 [&_svg:not([class*='size-'])]:size-3`,
33
+ middle: `size-8 [&_svg:not([class*='size-'])]:size-4`,
34
+ large: `size-10 [&_svg:not([class*='size-'])]:size-5`
35
+ };
36
+ const shapesClasses = {
37
+ default: "rounded-sm",
38
+ circle: "rounded-full",
39
+ round: "rounded-2xl"
28
40
  };
29
- const Button = ({ icon, className, variant = "solid", size = "middle", color = "default", block = false, disabled, loading, danger, children, onMouseDown, ...props }) => {
41
+ const Button = ({ icon, className, type = "default", variant, size = "middle", color = "default", shape = "default", block = false, disabled, loading, danger, children, onMouseDown, ...props }) => {
30
42
  const iconOnly = icon && !children;
31
43
  const computedColor = danger ? "danger" : color;
32
44
  const colored = computedColor && computedColor !== "default";
45
+ const resolvedVariant = variant ?? typeToVariant[type] ?? "solid";
33
46
  const displayIcon = loading ? typeof loading === "object" ? loading.icon : /* @__PURE__ */ jsx(LoaderCircle, { className: "animate-spin" }) : icon;
34
47
  return /* @__PURE__ */ jsxs(Core, {
35
48
  disabled,
36
49
  variant: "default",
37
50
  "data-color": computedColor,
38
- className: cn("inline-flex items-center justify-center gap-x-2", "rounded-lg", "cursor-pointer", "h-auto py-0", "transition-all", variantClasses[variant || "solid"], sizesClasses[size || "middle"], iconOnly && iconSizes[size || "middle"], block && "w-full", colored && (variant === "solid" ? [
51
+ className: cn("inline-flex items-center justify-center gap-x-2", "rounded-lg", "cursor-pointer", "h-auto py-0", "transition-all", variantClasses[resolvedVariant], sizesClasses[size || "medium"], iconOnly && ["p-0", iconClasses[size || "medium"]], shapesClasses[shape || "default"], block && "w-full", colored && (resolvedVariant === "solid" ? [
39
52
  "bg-(--btn-bg)",
40
53
  "hover:bg-(--btn-bg-hover)",
41
54
  "active:bg-(--btn-bg-active)",
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["button.Button"],"sources":["../../../../src/components/atoms/Button/index.tsx"],"sourcesContent":["'use client';\n\nimport { LoaderCircle } from 'lucide-react';\n\nimport { button } from '@repo/ui/core';\nimport { cn } from '@repo/ui/utils';\n\nconst Core = button.Button;\ntype ButtonProps = button.Props;\n\ntype PresetColors =\n | 'blue'\n | 'purple'\n | 'cyan'\n | 'green'\n | 'magenta'\n | 'pink'\n | 'red'\n | 'orange'\n | 'yellow'\n | 'volcano'\n | 'geekblue'\n | 'lime'\n | 'gold';\n\nexport interface Props extends Omit<ButtonProps, 'size' | 'variant'> {\n icon?: React.ReactNode;\n block?: boolean;\n danger?: boolean;\n disabled?: boolean;\n size?: 'small' | 'middle' | 'large';\n variant?: 'solid' | 'outlined' | 'dashed' | 'filled' | 'text' | 'link';\n color?: PresetColors | 'default' | 'primary' | 'danger';\n loading?: boolean | { icon: React.ReactNode };\n}\n\nconst variantClasses: Record<string, string> = {\n solid: '',\n outlined: cn(\n 'border border-[rgb(var(--btn-border)/0.5)]',\n 'bg-background text-foreground',\n 'hover:bg-accent',\n ),\n dashed: cn(\n 'border border-dashed border-[rgb(var(--btn-border)/0.5)]',\n 'bg-background text-foreground',\n 'hover:bg-accent',\n ),\n filled: cn('bg-muted text-foreground', 'hover:bg-muted/80'),\n text: cn('bg-transparent text-foreground', 'hover:bg-accent'),\n link: cn(\n 'bg-transparent text-primary',\n 'underline-offset-4 hover:underline',\n 'hover:bg-primary/10',\n ),\n};\n\nconst sizesClasses: Record<string, string> = {\n small: 'h-6 px-3 text-sm',\n middle: 'h-8 px-4 text-base',\n large: 'h-10 px-5 text-lg',\n};\n\nconst iconSizes: Record<string, string> = {\n small: 'size-6',\n middle: 'size-8',\n large: 'size-10',\n};\n\nconst Button = ({\n icon,\n className,\n variant = 'solid',\n size = 'middle',\n color = 'default',\n block = false,\n disabled,\n loading,\n danger,\n children,\n onMouseDown,\n ...props\n}: Props) => {\n const iconOnly = icon && !children;\n const computedColor = danger ? 'danger' : color;\n const colored = computedColor && computedColor !== 'default';\n\n const displayIcon = loading ? (\n typeof loading === 'object' ? (\n loading.icon\n ) : (\n <LoaderCircle className=\"animate-spin\" />\n )\n ) : (\n icon\n );\n\n return (\n <Core\n disabled={disabled}\n variant=\"default\"\n data-color={computedColor}\n className={cn(\n 'inline-flex items-center justify-center gap-x-2',\n 'rounded-lg',\n 'cursor-pointer',\n 'h-auto py-0',\n 'transition-all',\n variantClasses[variant || 'solid'],\n sizesClasses[size || 'middle'],\n iconOnly && iconSizes[size || 'middle'],\n block && 'w-full',\n colored &&\n (variant === 'solid'\n ? [\n 'bg-(--btn-bg)',\n 'hover:bg-(--btn-bg-hover)',\n 'active:bg-(--btn-bg-active)',\n 'text-(--btn-fg)',\n 'border-(--btn-border)',\n ]\n : [\n 'text-(--btn-bg)',\n 'border-[rgb(var(--btn-border)/0.5)]',\n //\n ]),\n className,\n //\n )}\n onMouseDown={e => {\n e.preventDefault();\n onMouseDown?.(e);\n }}\n {...props}\n >\n {displayIcon}\n {children}\n </Core>\n );\n};\n\nexport default Button;\n"],"mappings":";;;;;;;;;AAOA,MAAM,OAAOA;AA6Bb,MAAM,iBAAyC;CAC7C,OAAO;CACP,UAAU,GACR,8CACA,iCACA,kBACD;CACD,QAAQ,GACN,4DACA,iCACA,kBACD;CACD,QAAQ,GAAG,4BAA4B,oBAAoB;CAC3D,MAAM,GAAG,kCAAkC,kBAAkB;CAC7D,MAAM,GACJ,+BACA,sCACA,sBACD;CACF;AAED,MAAM,eAAuC;CAC3C,OAAO;CACP,QAAQ;CACR,OAAO;CACR;AAED,MAAM,YAAoC;CACxC,OAAO;CACP,QAAQ;CACR,OAAO;CACR;AAED,MAAM,UAAU,EACd,MACA,WACA,UAAU,SACV,OAAO,UACP,QAAQ,WACR,QAAQ,OACR,UACA,SACA,QACA,UACA,aACA,GAAG,YACQ;CACX,MAAM,WAAW,QAAQ,CAAC;CAC1B,MAAM,gBAAgB,SAAS,WAAW;CAC1C,MAAM,UAAU,iBAAiB,kBAAkB;CAEnD,MAAM,cAAc,UAClB,OAAO,YAAY,WACjB,QAAQ,OAER,oBAAC,gBAAa,WAAU,iBAAiB,GAG3C;AAGF,QACE,qBAAC;EACW;EACV,SAAQ;EACR,cAAY;EACZ,WAAW,GACT,mDACA,cACA,kBACA,eACA,kBACA,eAAe,WAAW,UAC1B,aAAa,QAAQ,WACrB,YAAY,UAAU,QAAQ,WAC9B,SAAS,UACT,YACG,YAAY,UACT;GACE;GACA;GACA;GACA;GACA;GACD,GACD,CACE,mBACA,sCAED,GACP,UAED;EACD,cAAa,MAAK;AAChB,KAAE,gBAAgB;AAClB,iBAAc,EAAE;;EAElB,GAAI;aAEH,aACA;GACI"}
1
+ {"version":3,"file":"index.mjs","names":["button.Button"],"sources":["../../../../src/components/atoms/Button/index.tsx"],"sourcesContent":["'use client';\n\nimport { LoaderCircle } from 'lucide-react';\n\nimport { button } from '@repo/ui/core';\nimport { cn } from '@repo/ui/utils';\n\nconst Core = button.Button;\ntype ButtonProps = button.Props;\n\ntype PresetColors =\n | 'blue'\n | 'purple'\n | 'cyan'\n | 'green'\n | 'magenta'\n | 'pink'\n | 'red'\n | 'orange'\n | 'yellow'\n | 'volcano'\n | 'geekblue'\n | 'lime'\n | 'gold';\n\nexport interface Props extends Omit<ButtonProps, 'size' | 'variant' | 'type'> {\n icon?: React.ReactNode;\n block?: boolean;\n danger?: boolean;\n disabled?: boolean;\n size?: 'small' | 'middle' | 'large';\n type?: 'primary' | 'default' | 'dashed' | 'text' | 'link';\n variant?: 'solid' | 'outlined' | 'dashed' | 'filled' | 'text' | 'link';\n shape?: 'default' | 'circle' | 'round';\n color?: PresetColors | 'default' | 'primary' | 'danger';\n loading?: boolean | { icon: React.ReactNode };\n}\n\nconst variantClasses: Record<string, string> = {\n solid: '',\n outlined: cn(\n 'border border-[rgb(var(--btn-border)/0.5)]',\n 'bg-background text-foreground',\n 'hover:bg-accent',\n ),\n dashed: cn(\n 'border border-dashed border-[rgb(var(--btn-border)/0.5)]',\n 'bg-background text-foreground',\n 'hover:bg-accent',\n ),\n filled: cn('bg-muted text-foreground', 'hover:bg-muted/80'),\n text: cn('bg-transparent text-foreground', 'hover:bg-accent'),\n link: cn(\n 'bg-transparent text-primary',\n 'underline-offset-4 hover:underline',\n 'hover:bg-primary/10',\n ),\n};\n\nconst typeToVariant: Record<string, string> = {\n primary: 'solid',\n default: 'outlined',\n dashed: 'dashed',\n text: 'text',\n link: 'link',\n};\n\nconst sizesClasses: Record<string, string> = {\n small: 'h-6 px-3 text-sm',\n middle: 'h-8 px-4 text-base',\n large: 'h-10 px-5 text-lg',\n};\n\nconst iconClasses: Record<string, string> = {\n small: `size-6 [&_svg:not([class*='size-'])]:size-3`,\n middle: `size-8 [&_svg:not([class*='size-'])]:size-4`,\n large: `size-10 [&_svg:not([class*='size-'])]:size-5`,\n};\n\nconst shapesClasses = {\n default: 'rounded-sm',\n circle: 'rounded-full',\n round: 'rounded-2xl',\n};\n\nconst Button = ({\n icon,\n className,\n type = 'default',\n variant,\n size = 'middle',\n color = 'default',\n shape = 'default',\n block = false,\n disabled,\n loading,\n danger,\n children,\n onMouseDown,\n ...props\n}: Props) => {\n const iconOnly = icon && !children;\n const computedColor = danger ? 'danger' : color;\n const colored = computedColor && computedColor !== 'default';\n const resolvedVariant = variant ?? typeToVariant[type] ?? 'solid';\n\n const displayIcon = loading ? (\n typeof loading === 'object' ? (\n loading.icon\n ) : (\n <LoaderCircle className=\"animate-spin\" />\n )\n ) : (\n icon\n );\n\n return (\n <Core\n disabled={disabled}\n variant=\"default\"\n data-color={computedColor}\n className={cn(\n 'inline-flex items-center justify-center gap-x-2',\n 'rounded-lg',\n 'cursor-pointer',\n 'h-auto py-0',\n 'transition-all',\n variantClasses[resolvedVariant],\n sizesClasses[size || 'medium'],\n iconOnly && ['p-0', iconClasses[size || 'medium']],\n shapesClasses[shape || 'default'],\n block && 'w-full',\n colored &&\n (resolvedVariant === 'solid'\n ? [\n 'bg-(--btn-bg)',\n 'hover:bg-(--btn-bg-hover)',\n 'active:bg-(--btn-bg-active)',\n 'text-(--btn-fg)',\n 'border-(--btn-border)',\n ]\n : [\n 'text-(--btn-bg)',\n 'border-[rgb(var(--btn-border)/0.5)]',\n //\n ]),\n className,\n //\n )}\n onMouseDown={e => {\n e.preventDefault();\n onMouseDown?.(e);\n }}\n {...props}\n >\n {displayIcon}\n {children}\n </Core>\n );\n};\n\nexport default Button;\n"],"mappings":";;;;;;;;;AAOA,MAAM,OAAOA;AA+Bb,MAAM,iBAAyC;CAC7C,OAAO;CACP,UAAU,GACR,8CACA,iCACA,kBACD;CACD,QAAQ,GACN,4DACA,iCACA,kBACD;CACD,QAAQ,GAAG,4BAA4B,oBAAoB;CAC3D,MAAM,GAAG,kCAAkC,kBAAkB;CAC7D,MAAM,GACJ,+BACA,sCACA,sBACD;CACF;AAED,MAAM,gBAAwC;CAC5C,SAAS;CACT,SAAS;CACT,QAAQ;CACR,MAAM;CACN,MAAM;CACP;AAED,MAAM,eAAuC;CAC3C,OAAO;CACP,QAAQ;CACR,OAAO;CACR;AAED,MAAM,cAAsC;CAC1C,OAAO;CACP,QAAQ;CACR,OAAO;CACR;AAED,MAAM,gBAAgB;CACpB,SAAS;CACT,QAAQ;CACR,OAAO;CACR;AAED,MAAM,UAAU,EACd,MACA,WACA,OAAO,WACP,SACA,OAAO,UACP,QAAQ,WACR,QAAQ,WACR,QAAQ,OACR,UACA,SACA,QACA,UACA,aACA,GAAG,YACQ;CACX,MAAM,WAAW,QAAQ,CAAC;CAC1B,MAAM,gBAAgB,SAAS,WAAW;CAC1C,MAAM,UAAU,iBAAiB,kBAAkB;CACnD,MAAM,kBAAkB,WAAW,cAAc,SAAS;CAE1D,MAAM,cAAc,UAClB,OAAO,YAAY,WACjB,QAAQ,OAER,oBAAC,gBAAa,WAAU,iBAAiB,GAG3C;AAGF,QACE,qBAAC;EACW;EACV,SAAQ;EACR,cAAY;EACZ,WAAW,GACT,mDACA,cACA,kBACA,eACA,kBACA,eAAe,kBACf,aAAa,QAAQ,WACrB,YAAY,CAAC,OAAO,YAAY,QAAQ,UAAU,EAClD,cAAc,SAAS,YACvB,SAAS,UACT,YACG,oBAAoB,UACjB;GACE;GACA;GACA;GACA;GACA;GACD,GACD,CACE,mBACA,sCAED,GACP,UAED;EACD,cAAa,MAAK;AAChB,KAAE,gBAAgB;AAClB,iBAAc,EAAE;;EAElB,GAAI;aAEH,aACA;GACI"}
@@ -1,7 +1,7 @@
1
- import { OptionValue } from "../index.mjs";
2
1
  import "react/jsx-runtime";
3
2
 
4
3
  //#region src/components/atoms/Checkbox/Group/index.d.ts
4
+ type OptionValue = string | number | boolean;
5
5
  type Option = {
6
6
  label: string;
7
7
  value: OptionValue;
@@ -17,5 +17,5 @@ interface Props extends Omit<React.ComponentPropsWithoutRef<'div'>, 'onChange' |
17
17
  onChange?: (values: OptionValue[]) => void;
18
18
  }
19
19
  //#endregion
20
- export { Props };
20
+ export { OptionValue, Props };
21
21
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../../src/components/atoms/Checkbox/Group/index.tsx"],"mappings":";;;;KAMK,MAAA;EACH,KAAA;EACA,KAAA,EAAO,WAAA;AAAA;AAAA,KAGJ,OAAA,qCAA4C,MAAA;AAAA,UAEhC,KAAA,SAAc,IAAA,CAC7B,KAAA,CAAM,wBAAA;EAGN,OAAA,GAAU,OAAA;EACV,WAAA;EACA,SAAA;EACA,UAAA,GAAa,MAAA;EACb,YAAA,GAAe,WAAA;EACf,KAAA,GAAQ,WAAA;EACR,QAAA,IAAY,MAAA,EAAQ,WAAA;AAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../../src/components/atoms/Checkbox/Group/index.tsx"],"mappings":";;;KAMY,WAAA;AAAA,KAEP,MAAA;EACH,KAAA;EACA,KAAA,EAAO,WAAA;AAAA;AAAA,KAGJ,OAAA,qCAA4C,MAAA;AAAA,UAEhC,KAAA,SAAc,IAAA,CAC7B,KAAA,CAAM,wBAAA;EAGN,OAAA,GAAU,OAAA;EACV,WAAA;EACA,SAAA;EACA,UAAA,GAAa,MAAA;EACb,YAAA,GAAe,WAAA;EACf,KAAA,GAAQ,WAAA;EACR,QAAA,IAAY,MAAA,EAAQ,WAAA;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../../../src/components/atoms/Checkbox/Group/index.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { cn } from '@repo/ui/utils';\n\nimport Checkbox, { type OptionValue } from '..';\n\ntype Option = {\n label: string;\n value: OptionValue;\n};\n\ntype Options = string[] | number[] | boolean[] | Option[];\n\nexport interface Props extends Omit<\n React.ComponentPropsWithoutRef<'div'>,\n 'onChange' | 'defaultValue' | 'value'\n> {\n options?: Options;\n orientation?: 'vertical' | 'horizontal';\n placement?: 'left' | 'right';\n classNames?: Record<string, string>;\n defaultValue?: OptionValue[];\n value?: OptionValue[];\n onChange?: (values: OptionValue[]) => void;\n}\n\nconst Group = ({\n orientation = 'vertical',\n placement = 'left',\n className,\n classNames = {},\n options: _options = [],\n defaultValue,\n value: _value,\n onChange: _onChange = () => {},\n}: Props) => {\n const [uncontrolledValue, setUncontrolledValue] = useState<OptionValue[]>(\n defaultValue || [],\n );\n\n const controlled = _value !== undefined;\n const value = controlled ? _value : uncontrolledValue;\n\n const options: Option[] = _options.map(item =>\n typeof item === 'object'\n ? item\n : {\n label: `${item}`,\n value: item,\n },\n );\n\n const onChange = (checked: boolean, optionValue: OptionValue) => {\n const nextValue = checked\n ? [...value, optionValue]\n : value.filter(v => v !== optionValue);\n\n if (!controlled) {\n setUncontrolledValue(nextValue);\n }\n _onChange(nextValue);\n };\n\n return (\n <ul\n className={cn(\n orientation === 'vertical' ? 'space-y-2' : 'flex gap-2',\n className,\n )}\n >\n {options.map((item: Option) => {\n const checked = value.includes(item.value);\n\n return (\n <li\n key={String(item.value)}\n className={cn('flex', classNames?.wrapper)}\n >\n <Checkbox\n placement={placement}\n className={cn(classNames?.item)}\n value={item.value}\n checked={checked}\n onChange={checked => onChange(checked, item.value)}\n >\n {item.label}\n </Checkbox>\n </li>\n );\n })}\n </ul>\n );\n};\n\nexport default Group;\n"],"mappings":";;;;;;AA0BA,MAAM,SAAS,EACb,cAAc,YACd,YAAY,QACZ,WACA,aAAa,EAAE,EACf,SAAS,WAAW,EAAE,EACtB,cACA,OAAO,QACP,UAAU,kBAAkB,SACjB;CACX,MAAM,CAAC,mBAAmB,wBAAwB,SAChD,gBAAgB,EAAE,CACnB;CAED,MAAM,aAAa,WAAW;CAC9B,MAAM,QAAQ,aAAa,SAAS;CAEpC,MAAM,UAAoB,SAAS,KAAI,SACrC,OAAO,SAAS,WACZ,OACA;EACE,OAAO,GAAG;EACV,OAAO;EACR,CACN;CAED,MAAM,YAAY,SAAkB,gBAA6B;EAC/D,MAAM,YAAY,UACd,CAAC,GAAG,OAAO,YAAY,GACvB,MAAM,QAAO,MAAK,MAAM,YAAY;AAExC,MAAI,CAAC,WACH,sBAAqB,UAAU;AAEjC,YAAU,UAAU;;AAGtB,QACE,oBAAC;EACC,WAAW,GACT,gBAAgB,aAAa,cAAc,cAC3C,UACD;YAEA,QAAQ,KAAK,SAAiB;GAC7B,MAAM,UAAU,MAAM,SAAS,KAAK,MAAM;AAE1C,UACE,oBAAC;IAEC,WAAW,GAAG,QAAQ,YAAY,QAAQ;cAE1C,oBAAC;KACY;KACX,WAAW,GAAG,YAAY,KAAK;KAC/B,OAAO,KAAK;KACH;KACT,WAAU,YAAW,SAAS,SAAS,KAAK,MAAM;eAEjD,KAAK;MACG;MAXN,OAAO,KAAK,MAAM,CAYpB;IAEP;GACC"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../../src/components/atoms/Checkbox/Group/index.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { cn } from '@repo/ui/utils';\n\nimport Checkbox from '..';\n\nexport type OptionValue = string | number | boolean;\n\ntype Option = {\n label: string;\n value: OptionValue;\n};\n\ntype Options = string[] | number[] | boolean[] | Option[];\n\nexport interface Props extends Omit<\n React.ComponentPropsWithoutRef<'div'>,\n 'onChange' | 'defaultValue' | 'value'\n> {\n options?: Options;\n orientation?: 'vertical' | 'horizontal';\n placement?: 'left' | 'right';\n classNames?: Record<string, string>;\n defaultValue?: OptionValue[];\n value?: OptionValue[];\n onChange?: (values: OptionValue[]) => void;\n}\n\nconst Group = ({\n orientation = 'vertical',\n placement = 'left',\n className,\n classNames = {},\n options: _options = [],\n defaultValue,\n value: _value,\n onChange: _onChange = () => {},\n}: Props) => {\n const [uncontrolledValue, setUncontrolledValue] = useState<OptionValue[]>(\n defaultValue || [],\n );\n\n const controlled = _value !== undefined;\n const value = controlled ? _value : uncontrolledValue;\n\n const options: Option[] = _options.map(item =>\n typeof item === 'object'\n ? item\n : {\n label: `${item}`,\n value: item,\n },\n );\n\n const onChange = (checked: boolean, optionValue: OptionValue) => {\n const nextValue = checked\n ? [...value, optionValue]\n : value.filter(v => v !== optionValue);\n\n if (!controlled) {\n setUncontrolledValue(nextValue);\n }\n _onChange(nextValue);\n };\n\n return (\n <ul\n className={cn(\n orientation === 'vertical' ? 'space-y-2' : 'flex gap-2',\n className,\n )}\n >\n {options.map((item: Option) => {\n const checked = value.includes(item.value);\n\n return (\n <li\n key={String(item.value)}\n className={cn('flex', classNames?.wrapper)}\n >\n <Checkbox\n placement={placement}\n className={cn(classNames?.item)}\n value={item.value}\n checked={checked}\n onChange={checked => onChange(checked, item.value)}\n >\n {item.label}\n </Checkbox>\n </li>\n );\n })}\n </ul>\n );\n};\n\nexport default Group;\n"],"mappings":";;;;;;AA4BA,MAAM,SAAS,EACb,cAAc,YACd,YAAY,QACZ,WACA,aAAa,EAAE,EACf,SAAS,WAAW,EAAE,EACtB,cACA,OAAO,QACP,UAAU,kBAAkB,SACjB;CACX,MAAM,CAAC,mBAAmB,wBAAwB,SAChD,gBAAgB,EAAE,CACnB;CAED,MAAM,aAAa,WAAW;CAC9B,MAAM,QAAQ,aAAa,SAAS;CAEpC,MAAM,UAAoB,SAAS,KAAI,SACrC,OAAO,SAAS,WACZ,OACA;EACE,OAAO,GAAG;EACV,OAAO;EACR,CACN;CAED,MAAM,YAAY,SAAkB,gBAA6B;EAC/D,MAAM,YAAY,UACd,CAAC,GAAG,OAAO,YAAY,GACvB,MAAM,QAAO,MAAK,MAAM,YAAY;AAExC,MAAI,CAAC,WACH,sBAAqB,UAAU;AAEjC,YAAU,UAAU;;AAGtB,QACE,oBAAC;EACC,WAAW,GACT,gBAAgB,aAAa,cAAc,cAC3C,UACD;YAEA,QAAQ,KAAK,SAAiB;GAC7B,MAAM,UAAU,MAAM,SAAS,KAAK,MAAM;AAE1C,UACE,oBAAC;IAEC,WAAW,GAAG,QAAQ,YAAY,QAAQ;cAE1C,oBAAC;KACY;KACX,WAAW,GAAG,YAAY,KAAK;KAC/B,OAAO,KAAK;KACH;KACT,WAAU,YAAW,SAAS,SAAS,KAAK,MAAM;eAEjD,KAAK;MACG;MAXN,OAAO,KAAK,MAAM,CAYpB;IAEP;GACC"}
@@ -1,8 +1,7 @@
1
- import { Props as Props$1 } from "./Group/index.mjs";
1
+ import { OptionValue, Props as Props$1 } from "./Group/index.mjs";
2
2
  import * as react_jsx_runtime0 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/atoms/Checkbox/index.d.ts
5
- type OptionValue = string | number | boolean;
6
5
  interface Props extends Omit<React.ComponentPropsWithoutRef<'div'>, 'onChange'> {
7
6
  placement?: 'left' | 'right';
8
7
  defaultChecked?: boolean;
@@ -41,5 +40,5 @@ declare const Checkbox: {
41
40
  }: Props$1) => react_jsx_runtime0.JSX.Element;
42
41
  };
43
42
  //#endregion
44
- export { Checkbox, OptionValue };
43
+ export { Checkbox };
45
44
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/atoms/Checkbox/index.tsx"],"mappings":";;;;KAcY,WAAA;AAAA,UAEK,KAAA,SAAc,IAAA,CAC7B,KAAA,CAAM,wBAAA;EAGN,SAAA;EACA,cAAA;EACA,OAAA;EACA,KAAA,GAAQ,WAAA;EACR,QAAA;EACA,KAAA;IAAU,OAAA,EAAS,KAAA,CAAM,SAAA;IAAW,SAAA,EAAW,KAAA,CAAM,SAAA;EAAA;EACrD,QAAA,GAAW,KAAA,CAAM,SAAA;EACjB,QAAA,IAAY,OAAA;AAAA;AAAA,cAGR,QAAA;EAAA;;;;;;;;;;;KAWH,KAAA,GAAK,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/atoms/Checkbox/index.tsx"],"mappings":";;;;UAciB,KAAA,SAAc,IAAA,CAC7B,KAAA,CAAM,wBAAA;EAGN,SAAA;EACA,cAAA;EACA,OAAA;EACA,KAAA,GAAQ,WAAA;EACR,QAAA;EACA,KAAA;IAAU,OAAA,EAAS,KAAA,CAAM,SAAA;IAAW,SAAA,EAAW,KAAA,CAAM,SAAA;EAAA;EACrD,QAAA,GAAW,KAAA,CAAM,SAAA;EACjB,QAAA,IAAY,OAAA;AAAA;AAAA,cAGR,QAAA;EAAA;;;;;;;;;;;KAWH,KAAA,GAAK,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["checkbox","label"],"sources":["../../../../src/components/atoms/Checkbox/index.tsx"],"sourcesContent":["'use client';\n\nimport { useId, useState } from 'react';\n\nimport { Square, SquareCheck } from 'lucide-react';\n\nimport { checkbox, label } from '@repo/ui/core';\nimport { cn } from '@repo/ui/utils';\n\nimport Group from './Group';\n\nconst { Checkbox: CoreCheckbox } = checkbox;\nconst { Label: CoreLabel } = label;\n\nexport type OptionValue = string | number | boolean;\n\nexport interface Props extends Omit<\n React.ComponentPropsWithoutRef<'div'>,\n 'onChange'\n> {\n placement?: 'left' | 'right';\n defaultChecked?: boolean;\n checked?: boolean;\n value?: OptionValue;\n disabled?: boolean;\n icons?: { checked: React.ReactNode; unchecked: React.ReactNode };\n children?: React.ReactNode;\n onChange?: (checked: boolean) => void;\n}\n\nconst Checkbox = ({\n placement = 'left',\n value = '',\n children,\n className,\n icons,\n disabled,\n defaultChecked,\n checked: _checked,\n onChange: _onChange = () => {},\n ...props\n}: Props) => {\n const [uncontrolledChecked, setUncontrolledChecked] = useState<boolean>(\n defaultChecked || false,\n );\n\n const reactId = useId();\n\n const id = typeof value === 'boolean' || !value ? reactId : String(value);\n const controlled = _checked !== undefined;\n const checked = controlled ? _checked : uncontrolledChecked;\n\n const cursorClassName = disabled ? 'cursor-not-allowed' : 'cursor-pointer';\n\n const onChange = (next: boolean) => {\n if (disabled) {\n return;\n }\n\n if (!controlled) {\n setUncontrolledChecked(next);\n }\n _onChange(next);\n };\n\n const renderContent = icons ? (\n <>\n <input\n id={id}\n hidden\n type=\"checkbox\"\n checked={checked}\n onChange={e => {\n onChange(e.target.checked);\n }}\n />\n <span\n className={cn(cursorClassName, disabled && 'opacity-50')}\n onClick={() => {\n document.getElementById(id)?.click();\n }}\n >\n {checked\n ? (icons.checked ?? <SquareCheck />)\n : (icons.unchecked ?? <Square />)}\n </span>\n {children && (\n <label\n className={cn(cursorClassName, disabled && 'opacity-50')}\n htmlFor={id}\n >\n {children}\n </label>\n )}\n </>\n ) : (\n <>\n <CoreCheckbox\n id={id}\n checked={checked}\n disabled={disabled}\n className={cn(cursorClassName)}\n onCheckedChange={onChange}\n />\n {children && (\n <CoreLabel htmlFor={id} className={cn(cursorClassName, 'text-left')}>\n {children}\n </CoreLabel>\n )}\n </>\n );\n\n return (\n <div\n className={cn(\n 'flex items-center gap-x-2',\n placement === 'right' && 'flex-row-reverse',\n cursorClassName,\n className,\n //\n )}\n {...props}\n >\n {renderContent}\n </div>\n );\n};\n\nCheckbox.Group = Group;\n\nexport default Checkbox;\n"],"mappings":";;;;;;;;;;;;AAWA,MAAM,EAAE,UAAU,iBAAiBA;AACnC,MAAM,EAAE,OAAO,cAAcC;AAkB7B,MAAM,YAAY,EAChB,YAAY,QACZ,QAAQ,IACR,UACA,WACA,OACA,UACA,gBACA,SAAS,UACT,UAAU,kBAAkB,IAC5B,GAAG,YACQ;CACX,MAAM,CAAC,qBAAqB,0BAA0B,SACpD,kBAAkB,MACnB;CAED,MAAM,UAAU,OAAO;CAEvB,MAAM,KAAK,OAAO,UAAU,aAAa,CAAC,QAAQ,UAAU,OAAO,MAAM;CACzE,MAAM,aAAa,aAAa;CAChC,MAAM,UAAU,aAAa,WAAW;CAExC,MAAM,kBAAkB,WAAW,uBAAuB;CAE1D,MAAM,YAAY,SAAkB;AAClC,MAAI,SACF;AAGF,MAAI,CAAC,WACH,wBAAuB,KAAK;AAE9B,YAAU,KAAK;;CAGjB,MAAM,gBAAgB,QACpB;EACE,oBAAC;GACK;GACJ;GACA,MAAK;GACI;GACT,WAAU,MAAK;AACb,aAAS,EAAE,OAAO,QAAQ;;IAE5B;EACF,oBAAC;GACC,WAAW,GAAG,iBAAiB,YAAY,aAAa;GACxD,eAAe;AACb,aAAS,eAAe,GAAG,EAAE,OAAO;;aAGrC,UACI,MAAM,WAAW,oBAAC,gBAAc,GAChC,MAAM,aAAa,oBAAC,WAAS;IAC7B;EACN,YACC,oBAAC;GACC,WAAW,GAAG,iBAAiB,YAAY,aAAa;GACxD,SAAS;GAER;IACK;KAET,GAEH,4CACE,oBAAC;EACK;EACK;EACC;EACV,WAAW,GAAG,gBAAgB;EAC9B,iBAAiB;GACjB,EACD,YACC,oBAAC;EAAU,SAAS;EAAI,WAAW,GAAG,iBAAiB,YAAY;EAChE;GACS,IAEb;AAGL,QACE,oBAAC;EACC,WAAW,GACT,6BACA,cAAc,WAAW,oBACzB,iBACA,UAED;EACD,GAAI;YAEH;GACG;;AAIV,SAAS,QAAQ"}
1
+ {"version":3,"file":"index.mjs","names":["checkbox","label"],"sources":["../../../../src/components/atoms/Checkbox/index.tsx"],"sourcesContent":["'use client';\n\nimport { useId, useState } from 'react';\n\nimport { Square, SquareCheck } from 'lucide-react';\n\nimport { checkbox, label } from '@repo/ui/core';\nimport { cn } from '@repo/ui/utils';\n\nimport Group, { type OptionValue } from './Group';\n\nconst { Checkbox: CoreCheckbox } = checkbox;\nconst { Label: CoreLabel } = label;\n\nexport interface Props extends Omit<\n React.ComponentPropsWithoutRef<'div'>,\n 'onChange'\n> {\n placement?: 'left' | 'right';\n defaultChecked?: boolean;\n checked?: boolean;\n value?: OptionValue;\n disabled?: boolean;\n icons?: { checked: React.ReactNode; unchecked: React.ReactNode };\n children?: React.ReactNode;\n onChange?: (checked: boolean) => void;\n}\n\nconst Checkbox = ({\n placement = 'left',\n value = '',\n children,\n className,\n icons,\n disabled,\n defaultChecked,\n checked: _checked,\n onChange: _onChange = () => {},\n ...props\n}: Props) => {\n const [uncontrolledChecked, setUncontrolledChecked] = useState<boolean>(\n defaultChecked || false,\n );\n\n const reactId = useId();\n\n const id = typeof value === 'boolean' || !value ? reactId : String(value);\n const controlled = _checked !== undefined;\n const checked = controlled ? _checked : uncontrolledChecked;\n\n const cursorClassName = disabled ? 'cursor-not-allowed' : 'cursor-pointer';\n\n const onChange = (next: boolean) => {\n if (disabled) {\n return;\n }\n\n if (!controlled) {\n setUncontrolledChecked(next);\n }\n _onChange(next);\n };\n\n const renderContent = icons ? (\n <>\n <input\n id={id}\n hidden\n type=\"checkbox\"\n checked={checked}\n onChange={e => {\n onChange(e.target.checked);\n }}\n />\n <span\n className={cn(cursorClassName, disabled && 'opacity-50')}\n onClick={() => {\n document.getElementById(id)?.click();\n }}\n >\n {checked\n ? (icons.checked ?? <SquareCheck />)\n : (icons.unchecked ?? <Square />)}\n </span>\n {children && (\n <label\n className={cn(cursorClassName, disabled && 'opacity-50')}\n htmlFor={id}\n >\n {children}\n </label>\n )}\n </>\n ) : (\n <>\n <CoreCheckbox\n id={id}\n checked={checked}\n disabled={disabled}\n className={cn(cursorClassName)}\n onCheckedChange={onChange}\n />\n {children && (\n <CoreLabel htmlFor={id} className={cn(cursorClassName, 'text-left')}>\n {children}\n </CoreLabel>\n )}\n </>\n );\n\n return (\n <div\n className={cn(\n 'flex items-center gap-x-2',\n placement === 'right' && 'flex-row-reverse',\n cursorClassName,\n className,\n //\n )}\n {...props}\n >\n {renderContent}\n </div>\n );\n};\n\nCheckbox.Group = Group;\n\nexport default Checkbox;\n"],"mappings":";;;;;;;;;;;;AAWA,MAAM,EAAE,UAAU,iBAAiBA;AACnC,MAAM,EAAE,OAAO,cAAcC;AAgB7B,MAAM,YAAY,EAChB,YAAY,QACZ,QAAQ,IACR,UACA,WACA,OACA,UACA,gBACA,SAAS,UACT,UAAU,kBAAkB,IAC5B,GAAG,YACQ;CACX,MAAM,CAAC,qBAAqB,0BAA0B,SACpD,kBAAkB,MACnB;CAED,MAAM,UAAU,OAAO;CAEvB,MAAM,KAAK,OAAO,UAAU,aAAa,CAAC,QAAQ,UAAU,OAAO,MAAM;CACzE,MAAM,aAAa,aAAa;CAChC,MAAM,UAAU,aAAa,WAAW;CAExC,MAAM,kBAAkB,WAAW,uBAAuB;CAE1D,MAAM,YAAY,SAAkB;AAClC,MAAI,SACF;AAGF,MAAI,CAAC,WACH,wBAAuB,KAAK;AAE9B,YAAU,KAAK;;CAGjB,MAAM,gBAAgB,QACpB;EACE,oBAAC;GACK;GACJ;GACA,MAAK;GACI;GACT,WAAU,MAAK;AACb,aAAS,EAAE,OAAO,QAAQ;;IAE5B;EACF,oBAAC;GACC,WAAW,GAAG,iBAAiB,YAAY,aAAa;GACxD,eAAe;AACb,aAAS,eAAe,GAAG,EAAE,OAAO;;aAGrC,UACI,MAAM,WAAW,oBAAC,gBAAc,GAChC,MAAM,aAAa,oBAAC,WAAS;IAC7B;EACN,YACC,oBAAC;GACC,WAAW,GAAG,iBAAiB,YAAY,aAAa;GACxD,SAAS;GAER;IACK;KAET,GAEH,4CACE,oBAAC;EACK;EACK;EACC;EACV,WAAW,GAAG,gBAAgB;EAC9B,iBAAiB;GACjB,EACD,YACC,oBAAC;EAAU,SAAS;EAAI,WAAW,GAAG,iBAAiB,YAAY;EAChE;GACS,IAEb;AAGL,QACE,oBAAC;EACC,WAAW,GACT,6BACA,cAAc,WAAW,oBACzB,iBACA,UAED;EACD,GAAI;YAEH;GACG;;AAIV,SAAS,QAAQ"}
@@ -1,10 +1,11 @@
1
- import { OptionValue } from "../index.mjs";
2
1
  import "react/jsx-runtime";
3
2
 
4
3
  //#region src/components/atoms/Radio/Group/index.d.ts
4
+ type OptionValue = string | number | boolean;
5
5
  type Option = {
6
6
  label: string;
7
7
  value: OptionValue;
8
+ disabled?: boolean;
8
9
  };
9
10
  type Options = string[] | number[] | boolean[] | Option[];
10
11
  interface Props extends Omit<React.ComponentPropsWithoutRef<'div'>, 'onChange' | 'defaultValue' | 'value'> {
@@ -14,8 +15,12 @@ interface Props extends Omit<React.ComponentPropsWithoutRef<'div'>, 'onChange' |
14
15
  classNames?: Record<string, string>;
15
16
  defaultValue?: OptionValue;
16
17
  value?: OptionValue;
18
+ optionType?: 'default' | 'button';
19
+ buttonStyle?: 'solid' | 'outlined';
20
+ size?: 'small' | 'middle' | 'large';
21
+ disabled?: boolean;
17
22
  onChange?: (value: OptionValue) => void;
18
23
  }
19
24
  //#endregion
20
- export { Props };
25
+ export { OptionValue, Props };
21
26
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../../src/components/atoms/Radio/Group/index.tsx"],"mappings":";;;;KAMK,MAAA;EACH,KAAA;EACA,KAAA,EAAO,WAAA;AAAA;AAAA,KAGJ,OAAA,qCAA4C,MAAA;AAAA,UAEhC,KAAA,SAAc,IAAA,CAC7B,KAAA,CAAM,wBAAA;EAGN,OAAA,GAAU,OAAA;EACV,WAAA;EACA,SAAA;EACA,UAAA,GAAa,MAAA;EACb,YAAA,GAAe,WAAA;EACf,KAAA,GAAQ,WAAA;EACR,QAAA,IAAY,KAAA,EAAO,WAAA;AAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../../src/components/atoms/Radio/Group/index.tsx"],"mappings":";;;KAOY,WAAA;AAAA,KAEP,MAAA;EACH,KAAA;EACA,KAAA,EAAO,WAAA;EACP,QAAA;AAAA;AAAA,KAGG,OAAA,qCAA4C,MAAA;AAAA,UAEhC,KAAA,SAAc,IAAA,CAC7B,KAAA,CAAM,wBAAA;EAGN,OAAA,GAAU,OAAA;EACV,WAAA;EACA,SAAA;EACA,UAAA,GAAa,MAAA;EACb,YAAA,GAAe,WAAA;EACf,KAAA,GAAQ,WAAA;EACR,UAAA;EACA,WAAA;EACA,IAAA;EACA,QAAA;EACA,QAAA,IAAY,KAAA,EAAO,WAAA;AAAA"}
@@ -1,10 +1,12 @@
1
1
  import { cn } from "../../../../utils.mjs";
2
+ import Button from "../../Button/index.mjs";
2
3
  import Radio from "../index.mjs";
4
+ import "../../../../index.mjs";
3
5
  import { useState } from "react";
4
6
  import { jsx } from "react/jsx-runtime";
5
7
 
6
8
  //#region src/components/atoms/Radio/Group/index.tsx
7
- const RadioGroup = ({ orientation = "vertical", placement = "left", className, classNames = {}, options: _options = [], defaultValue, value: _value, onChange: _onChange = () => {} }) => {
9
+ const RadioGroup = ({ orientation = "horizontal", placement = "left", className, classNames = {}, options: _options = [], optionType = "default", buttonStyle = "solid", size, disabled, defaultValue, value: _value, onChange: _onChange = () => {} }) => {
8
10
  const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);
9
11
  const controlled = _value !== void 0;
10
12
  const value = controlled ? _value : uncontrolledValue;
@@ -12,22 +14,31 @@ const RadioGroup = ({ orientation = "vertical", placement = "left", className, c
12
14
  label: `${item}`,
13
15
  value: item
14
16
  });
17
+ const isButton = optionType === "button";
15
18
  const onChange = (checked, optionValue) => {
16
19
  if (!checked) return;
17
20
  if (!controlled) setUncontrolledValue(optionValue);
18
21
  _onChange(optionValue);
19
22
  };
20
23
  return /* @__PURE__ */ jsx("ul", {
21
- className: cn(orientation === "vertical" ? "space-y-2" : "flex gap-2", className),
22
- children: options.map((item) => {
24
+ className: cn("flex gap-4", className, orientation === "vertical" && "flex-col", isButton && "gap-0"),
25
+ children: options.map((item, index) => {
23
26
  const checked = value === item.value;
24
27
  return /* @__PURE__ */ jsx("li", {
25
28
  className: cn("flex", classNames?.wrapper),
26
- children: /* @__PURE__ */ jsx(Radio, {
29
+ children: isButton ? /* @__PURE__ */ jsx(Button, {
30
+ variant: checked ? buttonStyle : "outlined",
31
+ size,
32
+ className: cn("rounded-none", index === 0 && "rounded-l-lg", index === options.length - 1 && "rounded-r-lg", checked && buttonStyle === "outlined" && "border-primary"),
33
+ disabled: disabled || item.disabled,
34
+ onClick: () => onChange(true, item.value),
35
+ children: item.label
36
+ }) : /* @__PURE__ */ jsx(Radio, {
27
37
  placement,
28
38
  className: cn(classNames?.item),
29
39
  value: item.value,
30
40
  checked,
41
+ disabled: item.disabled,
31
42
  onChange: (checked) => onChange(checked, item.value),
32
43
  children: item.label
33
44
  })
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../../../src/components/atoms/Radio/Group/index.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { cn } from '@repo/ui/utils';\n\nimport Radio, { OptionValue } from '..';\n\ntype Option = {\n label: string;\n value: OptionValue;\n};\n\ntype Options = string[] | number[] | boolean[] | Option[];\n\nexport interface Props extends Omit<\n React.ComponentPropsWithoutRef<'div'>,\n 'onChange' | 'defaultValue' | 'value'\n> {\n options?: Options;\n orientation?: 'vertical' | 'horizontal';\n placement?: 'left' | 'right';\n classNames?: Record<string, string>;\n defaultValue?: OptionValue;\n value?: OptionValue;\n onChange?: (value: OptionValue) => void;\n}\n\nconst RadioGroup = ({\n orientation = 'vertical',\n placement = 'left',\n className,\n classNames = {},\n options: _options = [],\n defaultValue,\n value: _value,\n onChange: _onChange = () => {},\n}: Props) => {\n const [uncontrolledValue, setUncontrolledValue] = useState<\n OptionValue | undefined\n >(defaultValue);\n\n const controlled = _value !== undefined;\n const value = controlled ? _value : uncontrolledValue;\n\n const options: Option[] = _options.map(item =>\n typeof item === 'object'\n ? item\n : {\n label: `${item}`,\n value: item,\n },\n );\n\n const onChange = (checked: boolean, optionValue: OptionValue) => {\n if (!checked) {\n return;\n }\n if (!controlled) {\n setUncontrolledValue(optionValue);\n }\n _onChange(optionValue);\n };\n\n return (\n <ul\n className={cn(\n orientation === 'vertical' ? 'space-y-2' : 'flex gap-2',\n className,\n )}\n >\n {options.map((item: Option) => {\n const checked = value === item.value;\n\n return (\n <li\n key={String(item.value)}\n className={cn('flex', classNames?.wrapper)}\n >\n <Radio\n placement={placement}\n className={cn(classNames?.item)}\n value={item.value}\n checked={checked}\n onChange={checked => onChange(checked, item.value)}\n >\n {item.label}\n </Radio>\n </li>\n );\n })}\n </ul>\n );\n};\n\nexport default RadioGroup;\n"],"mappings":";;;;;;AA0BA,MAAM,cAAc,EAClB,cAAc,YACd,YAAY,QACZ,WACA,aAAa,EAAE,EACf,SAAS,WAAW,EAAE,EACtB,cACA,OAAO,QACP,UAAU,kBAAkB,SACjB;CACX,MAAM,CAAC,mBAAmB,wBAAwB,SAEhD,aAAa;CAEf,MAAM,aAAa,WAAW;CAC9B,MAAM,QAAQ,aAAa,SAAS;CAEpC,MAAM,UAAoB,SAAS,KAAI,SACrC,OAAO,SAAS,WACZ,OACA;EACE,OAAO,GAAG;EACV,OAAO;EACR,CACN;CAED,MAAM,YAAY,SAAkB,gBAA6B;AAC/D,MAAI,CAAC,QACH;AAEF,MAAI,CAAC,WACH,sBAAqB,YAAY;AAEnC,YAAU,YAAY;;AAGxB,QACE,oBAAC;EACC,WAAW,GACT,gBAAgB,aAAa,cAAc,cAC3C,UACD;YAEA,QAAQ,KAAK,SAAiB;GAC7B,MAAM,UAAU,UAAU,KAAK;AAE/B,UACE,oBAAC;IAEC,WAAW,GAAG,QAAQ,YAAY,QAAQ;cAE1C,oBAAC;KACY;KACX,WAAW,GAAG,YAAY,KAAK;KAC/B,OAAO,KAAK;KACH;KACT,WAAU,YAAW,SAAS,SAAS,KAAK,MAAM;eAEjD,KAAK;MACA;MAXH,OAAO,KAAK,MAAM,CAYpB;IAEP;GACC"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../../src/components/atoms/Radio/Group/index.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { Button } from '@repo/ui';\nimport { cn } from '@repo/ui/utils';\n\nimport Radio from '..';\n\nexport type OptionValue = string | number | boolean;\n\ntype Option = {\n label: string;\n value: OptionValue;\n disabled?: boolean;\n};\n\ntype Options = string[] | number[] | boolean[] | Option[];\n\nexport interface Props extends Omit<\n React.ComponentPropsWithoutRef<'div'>,\n 'onChange' | 'defaultValue' | 'value'\n> {\n options?: Options;\n orientation?: 'vertical' | 'horizontal';\n placement?: 'left' | 'right';\n classNames?: Record<string, string>;\n defaultValue?: OptionValue;\n value?: OptionValue;\n optionType?: 'default' | 'button';\n buttonStyle?: 'solid' | 'outlined';\n size?: 'small' | 'middle' | 'large';\n disabled?: boolean;\n onChange?: (value: OptionValue) => void;\n}\n\nconst RadioGroup = ({\n orientation = 'horizontal',\n placement = 'left',\n className,\n classNames = {},\n options: _options = [],\n optionType = 'default',\n buttonStyle = 'solid',\n size,\n disabled,\n defaultValue,\n value: _value,\n onChange: _onChange = () => {},\n}: Props) => {\n const [uncontrolledValue, setUncontrolledValue] = useState<\n OptionValue | undefined\n >(defaultValue);\n\n const controlled = _value !== undefined;\n const value = controlled ? _value : uncontrolledValue;\n\n const options: Option[] = _options.map(item =>\n typeof item === 'object'\n ? item\n : {\n label: `${item}`,\n value: item,\n },\n );\n\n const isButton = optionType === 'button';\n\n const onChange = (checked: boolean, optionValue: OptionValue) => {\n if (!checked) {\n return;\n }\n if (!controlled) {\n setUncontrolledValue(optionValue);\n }\n _onChange(optionValue);\n };\n\n return (\n <ul\n className={cn(\n 'flex gap-4',\n className,\n orientation === 'vertical' && 'flex-col',\n isButton && 'gap-0',\n )}\n >\n {options.map((item: Option, index) => {\n const checked = value === item.value;\n\n return (\n <li\n key={String(item.value)}\n className={cn('flex', classNames?.wrapper)}\n >\n {isButton ? (\n <Button\n variant={checked ? buttonStyle : 'outlined'}\n size={size}\n className={cn(\n 'rounded-none',\n index === 0 && 'rounded-l-lg',\n index === options.length - 1 && 'rounded-r-lg',\n checked && buttonStyle === 'outlined' && 'border-primary',\n )}\n disabled={disabled || item.disabled}\n onClick={() => onChange(true, item.value)}\n >\n {item.label}\n </Button>\n ) : (\n <Radio\n placement={placement}\n className={cn(classNames?.item)}\n value={item.value}\n checked={checked}\n disabled={item.disabled}\n onChange={checked => onChange(checked, item.value)}\n >\n {item.label}\n </Radio>\n )}\n </li>\n );\n })}\n </ul>\n );\n};\n\nexport default RadioGroup;\n"],"mappings":";;;;;;;;AAkCA,MAAM,cAAc,EAClB,cAAc,cACd,YAAY,QACZ,WACA,aAAa,EAAE,EACf,SAAS,WAAW,EAAE,EACtB,aAAa,WACb,cAAc,SACd,MACA,UACA,cACA,OAAO,QACP,UAAU,kBAAkB,SACjB;CACX,MAAM,CAAC,mBAAmB,wBAAwB,SAEhD,aAAa;CAEf,MAAM,aAAa,WAAW;CAC9B,MAAM,QAAQ,aAAa,SAAS;CAEpC,MAAM,UAAoB,SAAS,KAAI,SACrC,OAAO,SAAS,WACZ,OACA;EACE,OAAO,GAAG;EACV,OAAO;EACR,CACN;CAED,MAAM,WAAW,eAAe;CAEhC,MAAM,YAAY,SAAkB,gBAA6B;AAC/D,MAAI,CAAC,QACH;AAEF,MAAI,CAAC,WACH,sBAAqB,YAAY;AAEnC,YAAU,YAAY;;AAGxB,QACE,oBAAC;EACC,WAAW,GACT,cACA,WACA,gBAAgB,cAAc,YAC9B,YAAY,QACb;YAEA,QAAQ,KAAK,MAAc,UAAU;GACpC,MAAM,UAAU,UAAU,KAAK;AAE/B,UACE,oBAAC;IAEC,WAAW,GAAG,QAAQ,YAAY,QAAQ;cAEzC,WACC,oBAAC;KACC,SAAS,UAAU,cAAc;KAC3B;KACN,WAAW,GACT,gBACA,UAAU,KAAK,gBACf,UAAU,QAAQ,SAAS,KAAK,gBAChC,WAAW,gBAAgB,cAAc,iBAC1C;KACD,UAAU,YAAY,KAAK;KAC3B,eAAe,SAAS,MAAM,KAAK,MAAM;eAExC,KAAK;MACC,GAET,oBAAC;KACY;KACX,WAAW,GAAG,YAAY,KAAK;KAC/B,OAAO,KAAK;KACH;KACT,UAAU,KAAK;KACf,WAAU,YAAW,SAAS,SAAS,KAAK,MAAM;eAEjD,KAAK;MACA;MA5BL,OAAO,KAAK,MAAM,CA8BpB;IAEP;GACC"}
@@ -1,11 +1,10 @@
1
1
  import { RadioGroup } from "../../../core/radio-group.mjs";
2
2
  import "../../../core.mjs";
3
- import { Props as Props$1 } from "./Group/index.mjs";
3
+ import { OptionValue, Props as Props$1 } from "./Group/index.mjs";
4
4
  import * as react_jsx_runtime0 from "react/jsx-runtime";
5
5
 
6
6
  //#region src/components/atoms/Radio/index.d.ts
7
7
  declare const Core: typeof RadioGroup;
8
- type OptionValue = string | number | boolean;
9
8
  interface Props extends Omit<React.ComponentPropsWithoutRef<typeof Core>, 'onChange' | 'value'> {
10
9
  placement?: 'left' | 'right';
11
10
  defaultChecked?: boolean;
@@ -37,11 +36,15 @@ declare const Radio: {
37
36
  className,
38
37
  classNames,
39
38
  options: _options,
39
+ optionType,
40
+ buttonStyle,
41
+ size,
42
+ disabled,
40
43
  defaultValue,
41
44
  value: _value,
42
45
  onChange: _onChange
43
46
  }: Props$1) => react_jsx_runtime0.JSX.Element;
44
47
  };
45
48
  //#endregion
46
- export { OptionValue, Radio };
49
+ export { Radio };
47
50
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/atoms/Radio/index.tsx"],"mappings":";;;;;;cAWoB,IAAA,SAAI,UAAA;AAAA,KAGZ,WAAA;AAAA,UAEK,KAAA,SAAc,IAAA,CAC7B,KAAA,CAAM,wBAAA,QAAgC,IAAA;EAGtC,SAAA;EACA,cAAA;EACA,OAAA;EACA,KAAA,GAAQ,WAAA;EACR,QAAA;EACA,KAAA;IAAU,OAAA,EAAS,KAAA,CAAM,SAAA;IAAW,SAAA,EAAW,KAAA,CAAM,SAAA;EAAA;EACrD,QAAA,IAAY,OAAA;AAAA;AAAA,cAGR,KAAA;EAAA;;;;;;;;;;;KAWH,KAAA,GAAK,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/atoms/Radio/index.tsx"],"mappings":";;;;;;cAWoB,IAAA,SAAI,UAAA;AAAA,UAGP,KAAA,SAAc,IAAA,CAC7B,KAAA,CAAM,wBAAA,QAAgC,IAAA;EAGtC,SAAA;EACA,cAAA;EACA,OAAA;EACA,KAAA,GAAQ,WAAA;EACR,QAAA;EACA,KAAA;IAAU,OAAA,EAAS,KAAA,CAAM,SAAA;IAAW,SAAA,EAAW,KAAA,CAAM,SAAA;EAAA;EACrD,QAAA,IAAY,OAAA;AAAA;AAAA,cAGR,KAAA;EAAA;;;;;;;;;;;KAWH,KAAA,GAAK,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -51,7 +51,7 @@ const Radio = ({ placement = "left", value = "", children, className, icons, dis
51
51
  onValueChange: () => onChange(true),
52
52
  children: /* @__PURE__ */ jsxs(Field, {
53
53
  orientation: "horizontal",
54
- className: cn("flex", placement === "right" && "flex-row-reverse"),
54
+ className: cn("flex gap-2", placement === "right" && "flex-row-reverse"),
55
55
  "data-disabled": disabled,
56
56
  children: [/* @__PURE__ */ jsx(Item, {
57
57
  value: id,
@@ -60,12 +60,13 @@ const Radio = ({ placement = "left", value = "", children, className, icons, dis
60
60
  disabled
61
61
  }), /* @__PURE__ */ jsx(FieldLabel, {
62
62
  htmlFor: id,
63
+ className: cursorClassName,
63
64
  children
64
65
  })]
65
66
  })
66
67
  });
67
68
  return /* @__PURE__ */ jsx("div", {
68
- className: cn("flex items-center gap-x-2", icons && placement === "right" && "flex-row-reverse", cursorClassName, className),
69
+ className: cn("flex items-center", icons && placement === "right" && "flex-row-reverse", cursorClassName, className),
69
70
  ...props,
70
71
  children: renderContent
71
72
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["radio","field","Group"],"sources":["../../../../src/components/atoms/Radio/index.tsx"],"sourcesContent":["'use client';\n\nimport { useId, useState } from 'react';\n\nimport { Circle, CircleCheck } from 'lucide-react';\n\nimport { field, radio } from '@repo/ui/core';\nimport { cn } from '@repo/ui/utils';\n\nimport Group from './Group';\n\nconst { RadioGroup: Core, RadioGroupItem: Item } = radio;\nconst { Field, FieldLabel } = field;\n\nexport type OptionValue = string | number | boolean;\n\nexport interface Props extends Omit<\n React.ComponentPropsWithoutRef<typeof Core>,\n 'onChange' | 'value'\n> {\n placement?: 'left' | 'right';\n defaultChecked?: boolean;\n checked?: boolean;\n value?: OptionValue;\n disabled?: boolean;\n icons?: { checked: React.ReactNode; unchecked: React.ReactNode };\n onChange?: (checked: boolean) => void;\n}\n\nconst Radio = ({\n placement = 'left',\n value = '',\n children,\n className,\n icons,\n disabled,\n defaultChecked,\n checked: _checked,\n onChange: _onChange = () => {},\n ...props\n}: Props) => {\n const [uncontrolledChecked, setUncontrolledChecked] = useState<boolean>(\n defaultChecked || false,\n );\n\n const reactId = useId();\n const id = typeof value === 'boolean' || !value ? reactId : String(value);\n const controlled = _checked !== undefined;\n const checked = controlled ? _checked : uncontrolledChecked;\n\n const cursorClassName = disabled ? 'cursor-not-allowed' : 'cursor-pointer';\n\n const onChange = (next: boolean) => {\n if (disabled) {\n return;\n }\n\n if (!controlled) {\n setUncontrolledChecked(next);\n }\n _onChange(next);\n };\n\n const renderContent = icons ? (\n <>\n <input\n id={id}\n hidden\n type=\"radio\"\n checked={checked}\n onChange={e => {\n onChange(e.target.checked);\n }}\n />\n <span\n className={cn(cursorClassName, disabled && 'opacity-50')}\n onClick={() => {\n document.getElementById(id)?.click();\n }}\n >\n {checked\n ? (icons.checked ?? <CircleCheck />)\n : (icons.unchecked ?? <Circle />)}\n </span>\n {children && (\n <label\n className={cn(cursorClassName, disabled && 'opacity-50')}\n htmlFor={id}\n >\n {children}\n </label>\n )}\n </>\n ) : (\n <Core value={checked ? id : ''} onValueChange={() => onChange(true)}>\n <Field\n orientation=\"horizontal\"\n className={cn('flex', placement === 'right' && 'flex-row-reverse')}\n data-disabled={disabled}\n >\n <Item value={id} id={id} checked={checked} disabled={disabled} />\n <FieldLabel htmlFor={id}>{children}</FieldLabel>\n </Field>\n </Core>\n );\n\n return (\n <div\n className={cn(\n 'flex items-center gap-x-2',\n icons && placement === 'right' && 'flex-row-reverse',\n cursorClassName,\n className,\n //\n )}\n {...props}\n >\n {renderContent}\n </div>\n );\n};\n\nRadio.Group = Group;\n\nexport default Radio;\n"],"mappings":";;;;;;;;;;;;AAWA,MAAM,EAAE,YAAY,MAAM,gBAAgB,SAASA;AACnD,MAAM,EAAE,OAAO,eAAeC;AAiB9B,MAAM,SAAS,EACb,YAAY,QACZ,QAAQ,IACR,UACA,WACA,OACA,UACA,gBACA,SAAS,UACT,UAAU,kBAAkB,IAC5B,GAAG,YACQ;CACX,MAAM,CAAC,qBAAqB,0BAA0B,SACpD,kBAAkB,MACnB;CAED,MAAM,UAAU,OAAO;CACvB,MAAM,KAAK,OAAO,UAAU,aAAa,CAAC,QAAQ,UAAU,OAAO,MAAM;CACzE,MAAM,aAAa,aAAa;CAChC,MAAM,UAAU,aAAa,WAAW;CAExC,MAAM,kBAAkB,WAAW,uBAAuB;CAE1D,MAAM,YAAY,SAAkB;AAClC,MAAI,SACF;AAGF,MAAI,CAAC,WACH,wBAAuB,KAAK;AAE9B,YAAU,KAAK;;CAGjB,MAAM,gBAAgB,QACpB;EACE,oBAAC;GACK;GACJ;GACA,MAAK;GACI;GACT,WAAU,MAAK;AACb,aAAS,EAAE,OAAO,QAAQ;;IAE5B;EACF,oBAAC;GACC,WAAW,GAAG,iBAAiB,YAAY,aAAa;GACxD,eAAe;AACb,aAAS,eAAe,GAAG,EAAE,OAAO;;aAGrC,UACI,MAAM,WAAW,oBAAC,gBAAc,GAChC,MAAM,aAAa,oBAAC,WAAS;IAC7B;EACN,YACC,oBAAC;GACC,WAAW,GAAG,iBAAiB,YAAY,aAAa;GACxD,SAAS;GAER;IACK;KAET,GAEH,oBAAC;EAAK,OAAO,UAAU,KAAK;EAAI,qBAAqB,SAAS,KAAK;YACjE,qBAAC;GACC,aAAY;GACZ,WAAW,GAAG,QAAQ,cAAc,WAAW,mBAAmB;GAClE,iBAAe;cAEf,oBAAC;IAAK,OAAO;IAAQ;IAAa;IAAmB;KAAY,EACjE,oBAAC;IAAW,SAAS;IAAK;KAAsB;IAC1C;GACH;AAGT,QACE,oBAAC;EACC,WAAW,GACT,6BACA,SAAS,cAAc,WAAW,oBAClC,iBACA,UAED;EACD,GAAI;YAEH;GACG;;AAIV,MAAM,QAAQC"}
1
+ {"version":3,"file":"index.mjs","names":["radio","field","Group"],"sources":["../../../../src/components/atoms/Radio/index.tsx"],"sourcesContent":["'use client';\n\nimport { useId, useState } from 'react';\n\nimport { Circle, CircleCheck } from 'lucide-react';\n\nimport { field, radio } from '@repo/ui/core';\nimport { cn } from '@repo/ui/utils';\n\nimport Group, { type OptionValue } from './Group';\n\nconst { RadioGroup: Core, RadioGroupItem: Item } = radio;\nconst { Field, FieldLabel } = field;\n\nexport interface Props extends Omit<\n React.ComponentPropsWithoutRef<typeof Core>,\n 'onChange' | 'value'\n> {\n placement?: 'left' | 'right';\n defaultChecked?: boolean;\n checked?: boolean;\n value?: OptionValue;\n disabled?: boolean;\n icons?: { checked: React.ReactNode; unchecked: React.ReactNode };\n onChange?: (checked: boolean) => void;\n}\n\nconst Radio = ({\n placement = 'left',\n value = '',\n children,\n className,\n icons,\n disabled,\n defaultChecked,\n checked: _checked,\n onChange: _onChange = () => {},\n ...props\n}: Props) => {\n const [uncontrolledChecked, setUncontrolledChecked] = useState<boolean>(\n defaultChecked || false,\n );\n\n const reactId = useId();\n const id = typeof value === 'boolean' || !value ? reactId : String(value);\n const controlled = _checked !== undefined;\n const checked = controlled ? _checked : uncontrolledChecked;\n\n const cursorClassName = disabled ? 'cursor-not-allowed' : 'cursor-pointer';\n\n const onChange = (next: boolean) => {\n if (disabled) {\n return;\n }\n\n if (!controlled) {\n setUncontrolledChecked(next);\n }\n _onChange(next);\n };\n\n const renderContent = icons ? (\n <>\n <input\n id={id}\n hidden\n type=\"radio\"\n checked={checked}\n onChange={e => {\n onChange(e.target.checked);\n }}\n />\n <span\n className={cn(cursorClassName, disabled && 'opacity-50')}\n onClick={() => {\n document.getElementById(id)?.click();\n }}\n >\n {checked\n ? (icons.checked ?? <CircleCheck />)\n : (icons.unchecked ?? <Circle />)}\n </span>\n {children && (\n <label\n className={cn(cursorClassName, disabled && 'opacity-50')}\n htmlFor={id}\n >\n {children}\n </label>\n )}\n </>\n ) : (\n <Core value={checked ? id : ''} onValueChange={() => onChange(true)}>\n <Field\n orientation=\"horizontal\"\n className={cn(\n 'flex gap-2',\n placement === 'right' && 'flex-row-reverse',\n )}\n data-disabled={disabled}\n >\n <Item value={id} id={id} checked={checked} disabled={disabled} />\n <FieldLabel htmlFor={id} className={cursorClassName}>\n {children}\n </FieldLabel>\n </Field>\n </Core>\n );\n\n return (\n <div\n className={cn(\n 'flex items-center',\n icons && placement === 'right' && 'flex-row-reverse',\n cursorClassName,\n className,\n //\n )}\n {...props}\n >\n {renderContent}\n </div>\n );\n};\n\nRadio.Group = Group;\n\nexport default Radio;\n"],"mappings":";;;;;;;;;;;;AAWA,MAAM,EAAE,YAAY,MAAM,gBAAgB,SAASA;AACnD,MAAM,EAAE,OAAO,eAAeC;AAe9B,MAAM,SAAS,EACb,YAAY,QACZ,QAAQ,IACR,UACA,WACA,OACA,UACA,gBACA,SAAS,UACT,UAAU,kBAAkB,IAC5B,GAAG,YACQ;CACX,MAAM,CAAC,qBAAqB,0BAA0B,SACpD,kBAAkB,MACnB;CAED,MAAM,UAAU,OAAO;CACvB,MAAM,KAAK,OAAO,UAAU,aAAa,CAAC,QAAQ,UAAU,OAAO,MAAM;CACzE,MAAM,aAAa,aAAa;CAChC,MAAM,UAAU,aAAa,WAAW;CAExC,MAAM,kBAAkB,WAAW,uBAAuB;CAE1D,MAAM,YAAY,SAAkB;AAClC,MAAI,SACF;AAGF,MAAI,CAAC,WACH,wBAAuB,KAAK;AAE9B,YAAU,KAAK;;CAGjB,MAAM,gBAAgB,QACpB;EACE,oBAAC;GACK;GACJ;GACA,MAAK;GACI;GACT,WAAU,MAAK;AACb,aAAS,EAAE,OAAO,QAAQ;;IAE5B;EACF,oBAAC;GACC,WAAW,GAAG,iBAAiB,YAAY,aAAa;GACxD,eAAe;AACb,aAAS,eAAe,GAAG,EAAE,OAAO;;aAGrC,UACI,MAAM,WAAW,oBAAC,gBAAc,GAChC,MAAM,aAAa,oBAAC,WAAS;IAC7B;EACN,YACC,oBAAC;GACC,WAAW,GAAG,iBAAiB,YAAY,aAAa;GACxD,SAAS;GAER;IACK;KAET,GAEH,oBAAC;EAAK,OAAO,UAAU,KAAK;EAAI,qBAAqB,SAAS,KAAK;YACjE,qBAAC;GACC,aAAY;GACZ,WAAW,GACT,cACA,cAAc,WAAW,mBAC1B;GACD,iBAAe;cAEf,oBAAC;IAAK,OAAO;IAAQ;IAAa;IAAmB;KAAY,EACjE,oBAAC;IAAW,SAAS;IAAI,WAAW;IACjC;KACU;IACP;GACH;AAGT,QACE,oBAAC;EACC,WAAW,GACT,qBACA,SAAS,cAAc,WAAW,oBAClC,iBACA,UAED;EACD,GAAI;YAEH;GACG;;AAIV,MAAM,QAAQC"}
@@ -6,17 +6,23 @@ interface Props extends Omit<React.ComponentPropsWithoutRef<'button'>, 'onChange
6
6
  track?: string;
7
7
  handle?: string;
8
8
  };
9
+ size?: 'small' | 'medium';
9
10
  defaultChecked?: boolean;
10
11
  checked?: boolean;
11
12
  disabled?: boolean;
12
13
  onChange?: (checked: boolean) => void;
14
+ checkedChildren?: React.ReactNode;
15
+ unCheckedChildren?: React.ReactNode;
13
16
  }
14
17
  declare const Switch: ({
15
18
  className,
16
19
  classNames,
20
+ size,
17
21
  defaultChecked,
18
22
  checked: _checked,
19
23
  onChange: _onChange,
24
+ checkedChildren,
25
+ unCheckedChildren,
20
26
  ...props
21
27
  }: Props) => react_jsx_runtime0.JSX.Element;
22
28
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/atoms/Switch/index.tsx"],"mappings":";;;UASU,KAAA,SAAc,IAAA,CACtB,KAAA,CAAM,wBAAA;EAGN,UAAA;IACE,KAAA;IACA,MAAA;EAAA;EAEF,cAAA;EACA,OAAA;EACA,QAAA;EACA,QAAA,IAAY,OAAA;AAAA;AAAA,cAGR,MAAA;EAAU,SAAA;EAAA,UAAA;EAAA,cAAA;EAAA,OAAA,EAAA,QAAA;EAAA,QAAA,EAAA,SAAA;EAAA,GAAA;AAAA,GAOb,KAAA,KAAK,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/atoms/Switch/index.tsx"],"mappings":";;;UA4BU,KAAA,SAAc,IAAA,CACtB,KAAA,CAAM,wBAAA;EAGN,UAAA;IACE,KAAA;IACA,MAAA;EAAA;EAEF,IAAA;EACA,cAAA;EACA,OAAA;EACA,QAAA;EACA,QAAA,IAAY,OAAA;EACZ,eAAA,GAAkB,KAAA,CAAM,SAAA;EACxB,iBAAA,GAAoB,KAAA,CAAM,SAAA;AAAA;AAAA,cAGtB,MAAA;EAAU,SAAA;EAAA,UAAA;EAAA,IAAA;EAAA,cAAA;EAAA,OAAA,EAAA,QAAA;EAAA,QAAA,EAAA,SAAA;EAAA,eAAA;EAAA,iBAAA;EAAA,GAAA;AAAA,GAUb,KAAA,KAAK,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -4,11 +4,27 @@ import { cn } from "../../../utils.mjs";
4
4
  import { switch_exports } from "../../../core/switch.mjs";
5
5
  import "../../../core.mjs";
6
6
  import { useState } from "react";
7
- import { jsx } from "react/jsx-runtime";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
8
 
9
9
  //#region src/components/atoms/Switch/index.tsx
10
10
  const { Switch: Core } = switch_exports;
11
- const Switch = ({ className, classNames, defaultChecked, checked: _checked, onChange: _onChange = () => {}, ...props }) => {
11
+ const sizeConfig = {
12
+ medium: {
13
+ core: "default",
14
+ handleChecked: "data-[state=unchecked]:left-0 data-[state=checked]:left-[calc(100%-16px)]",
15
+ fontSize: "text-[9px]",
16
+ marginChecked: "mr-4.5 ml-1",
17
+ marginUnchecked: "mr-1 ml-4.5"
18
+ },
19
+ small: {
20
+ core: "sm",
21
+ handleChecked: "data-[state=unchecked]:left-0 data-[state=checked]:left-[calc(100%-12px)]",
22
+ fontSize: "text-[7px]",
23
+ marginChecked: "mr-3.5 ml-0.5",
24
+ marginUnchecked: "mr-0.5 ml-3.5"
25
+ }
26
+ };
27
+ const Switch = ({ className, classNames, size = "medium", defaultChecked, checked: _checked, onChange: _onChange = () => {}, checkedChildren, unCheckedChildren, ...props }) => {
12
28
  const [uncontrolledChecked, setUncontrolledChecked] = useState(defaultChecked || false);
13
29
  const controlled = _checked !== void 0;
14
30
  const checked = controlled ? _checked : uncontrolledChecked;
@@ -16,14 +32,31 @@ const Switch = ({ className, classNames, defaultChecked, checked: _checked, onCh
16
32
  if (!controlled) setUncontrolledChecked(next);
17
33
  _onChange(next);
18
34
  };
35
+ const hasChildren = !!(checkedChildren || unCheckedChildren);
36
+ const config = sizeConfig[size];
19
37
  return /* @__PURE__ */ jsx(Core, {
20
38
  checked,
21
- className: cn("h-8.5 w-13", className, classNames?.track),
22
- handleClassName: cn("h-7 w-7", "data-[state=checked]:translate-x-5", "data-[state=unchecked]:translate-x-[2px]", classNames?.handle),
39
+ size: config.core,
40
+ className: cn("relative", hasChildren && "w-auto! overflow-hidden", className, classNames?.track),
41
+ handleClassName: cn(hasChildren && [
42
+ "!absolute top-1/2 !-translate-y-1/2 !translate-x-0",
43
+ "transition-[left] duration-200",
44
+ config.handleChecked
45
+ ], classNames?.handle),
23
46
  onCheckedChange: (checked) => {
24
47
  onChange(checked);
25
48
  },
26
- ...props
49
+ ...props,
50
+ children: hasChildren && /* @__PURE__ */ jsxs("span", {
51
+ className: cn("grid leading-none text-white transition-[margin] duration-200", config.fontSize, checked ? config.marginChecked : config.marginUnchecked),
52
+ children: [/* @__PURE__ */ jsx("span", {
53
+ className: cn("col-start-1 row-start-1 transition-opacity duration-200", checked ? "opacity-100" : "opacity-0"),
54
+ children: checkedChildren
55
+ }), /* @__PURE__ */ jsx("span", {
56
+ className: cn("col-start-1 row-start-1 transition-opacity duration-200", checked ? "opacity-0" : "opacity-100"),
57
+ children: unCheckedChildren
58
+ })]
59
+ })
27
60
  });
28
61
  };
29
62
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["switchComponent"],"sources":["../../../../src/components/atoms/Switch/index.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\n\nimport { switchComponent } from '@repo/ui/core';\nimport { cn } from '@repo/ui/utils';\n\nconst { Switch: Core } = switchComponent;\n\ninterface Props extends Omit<\n React.ComponentPropsWithoutRef<'button'>,\n 'onChange'\n> {\n classNames?: {\n track?: string;\n handle?: string;\n };\n defaultChecked?: boolean;\n checked?: boolean;\n disabled?: boolean;\n onChange?: (checked: boolean) => void;\n}\n\nconst Switch = ({\n className,\n classNames,\n defaultChecked,\n checked: _checked,\n onChange: _onChange = () => {},\n ...props\n}: Props) => {\n const [uncontrolledChecked, setUncontrolledChecked] = useState<boolean>(\n defaultChecked || false,\n );\n\n const controlled = _checked !== undefined;\n const checked = controlled ? _checked : uncontrolledChecked;\n\n const onChange = (next: boolean) => {\n if (!controlled) {\n setUncontrolledChecked(next);\n }\n _onChange(next);\n };\n\n return (\n <Core\n checked={checked}\n className={cn(\n 'h-8.5 w-13',\n className,\n classNames?.track,\n //\n )}\n handleClassName={cn(\n 'h-7 w-7',\n 'data-[state=checked]:translate-x-5',\n 'data-[state=unchecked]:translate-x-[2px]',\n classNames?.handle,\n )}\n onCheckedChange={checked => {\n onChange(checked);\n }}\n {...props}\n />\n );\n};\n\nexport default Switch;\n"],"mappings":";;;;;;;;;AAOA,MAAM,EAAE,QAAQ,SAASA;AAgBzB,MAAM,UAAU,EACd,WACA,YACA,gBACA,SAAS,UACT,UAAU,kBAAkB,IAC5B,GAAG,YACQ;CACX,MAAM,CAAC,qBAAqB,0BAA0B,SACpD,kBAAkB,MACnB;CAED,MAAM,aAAa,aAAa;CAChC,MAAM,UAAU,aAAa,WAAW;CAExC,MAAM,YAAY,SAAkB;AAClC,MAAI,CAAC,WACH,wBAAuB,KAAK;AAE9B,YAAU,KAAK;;AAGjB,QACE,oBAAC;EACU;EACT,WAAW,GACT,cACA,WACA,YAAY,MAEb;EACD,iBAAiB,GACf,WACA,sCACA,4CACA,YAAY,OACb;EACD,kBAAiB,YAAW;AAC1B,YAAS,QAAQ;;EAEnB,GAAI;GACJ"}
1
+ {"version":3,"file":"index.mjs","names":["switchComponent"],"sources":["../../../../src/components/atoms/Switch/index.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\n\nimport { switchComponent } from '@repo/ui/core';\nimport { cn } from '@repo/ui/utils';\n\nconst { Switch: Core } = switchComponent;\n\nconst sizeConfig = {\n medium: {\n core: 'default' as const,\n handleChecked:\n 'data-[state=unchecked]:left-0 data-[state=checked]:left-[calc(100%-16px)]',\n fontSize: 'text-[9px]',\n marginChecked: 'mr-4.5 ml-1',\n marginUnchecked: 'mr-1 ml-4.5',\n },\n small: {\n core: 'sm' as const,\n handleChecked:\n 'data-[state=unchecked]:left-0 data-[state=checked]:left-[calc(100%-12px)]',\n fontSize: 'text-[7px]',\n marginChecked: 'mr-3.5 ml-0.5',\n marginUnchecked: 'mr-0.5 ml-3.5',\n },\n};\n\ninterface Props extends Omit<\n React.ComponentPropsWithoutRef<'button'>,\n 'onChange'\n> {\n classNames?: {\n track?: string;\n handle?: string;\n };\n size?: 'small' | 'medium';\n defaultChecked?: boolean;\n checked?: boolean;\n disabled?: boolean;\n onChange?: (checked: boolean) => void;\n checkedChildren?: React.ReactNode;\n unCheckedChildren?: React.ReactNode;\n}\n\nconst Switch = ({\n className,\n classNames,\n size = 'medium',\n defaultChecked,\n checked: _checked,\n onChange: _onChange = () => {},\n checkedChildren,\n unCheckedChildren,\n ...props\n}: Props) => {\n const [uncontrolledChecked, setUncontrolledChecked] = useState<boolean>(\n defaultChecked || false,\n );\n\n const controlled = _checked !== undefined;\n const checked = controlled ? _checked : uncontrolledChecked;\n\n const onChange = (next: boolean) => {\n if (!controlled) {\n setUncontrolledChecked(next);\n }\n _onChange(next);\n };\n\n const hasChildren = !!(checkedChildren || unCheckedChildren);\n const config = sizeConfig[size];\n\n return (\n <Core\n checked={checked}\n size={config.core}\n className={cn(\n 'relative',\n hasChildren && 'w-auto! overflow-hidden',\n className,\n classNames?.track,\n //\n )}\n handleClassName={cn(\n hasChildren && [\n '!absolute top-1/2 !-translate-y-1/2 !translate-x-0',\n 'transition-[left] duration-200',\n config.handleChecked,\n ],\n classNames?.handle,\n //\n )}\n onCheckedChange={checked => {\n onChange(checked);\n }}\n {...props}\n >\n {hasChildren && (\n <span\n className={cn(\n 'grid leading-none text-white transition-[margin] duration-200',\n config.fontSize,\n checked ? config.marginChecked : config.marginUnchecked,\n //\n )}\n >\n <span\n className={cn(\n 'col-start-1 row-start-1 transition-opacity duration-200',\n checked ? 'opacity-100' : 'opacity-0',\n )}\n >\n {checkedChildren}\n </span>\n <span\n className={cn(\n 'col-start-1 row-start-1 transition-opacity duration-200',\n checked ? 'opacity-0' : 'opacity-100',\n )}\n >\n {unCheckedChildren}\n </span>\n </span>\n )}\n </Core>\n );\n};\n\nexport default Switch;\n"],"mappings":";;;;;;;;;AAOA,MAAM,EAAE,QAAQ,SAASA;AAEzB,MAAM,aAAa;CACjB,QAAQ;EACN,MAAM;EACN,eACE;EACF,UAAU;EACV,eAAe;EACf,iBAAiB;EAClB;CACD,OAAO;EACL,MAAM;EACN,eACE;EACF,UAAU;EACV,eAAe;EACf,iBAAiB;EAClB;CACF;AAmBD,MAAM,UAAU,EACd,WACA,YACA,OAAO,UACP,gBACA,SAAS,UACT,UAAU,kBAAkB,IAC5B,iBACA,mBACA,GAAG,YACQ;CACX,MAAM,CAAC,qBAAqB,0BAA0B,SACpD,kBAAkB,MACnB;CAED,MAAM,aAAa,aAAa;CAChC,MAAM,UAAU,aAAa,WAAW;CAExC,MAAM,YAAY,SAAkB;AAClC,MAAI,CAAC,WACH,wBAAuB,KAAK;AAE9B,YAAU,KAAK;;CAGjB,MAAM,cAAc,CAAC,EAAE,mBAAmB;CAC1C,MAAM,SAAS,WAAW;AAE1B,QACE,oBAAC;EACU;EACT,MAAM,OAAO;EACb,WAAW,GACT,YACA,eAAe,2BACf,WACA,YAAY,MAEb;EACD,iBAAiB,GACf,eAAe;GACb;GACA;GACA,OAAO;GACR,EACD,YAAY,OAEb;EACD,kBAAiB,YAAW;AAC1B,YAAS,QAAQ;;EAEnB,GAAI;YAEH,eACC,qBAAC;GACC,WAAW,GACT,iEACA,OAAO,UACP,UAAU,OAAO,gBAAgB,OAAO,gBAEzC;cAED,oBAAC;IACC,WAAW,GACT,2DACA,UAAU,gBAAgB,YAC3B;cAEA;KACI,EACP,oBAAC;IACC,WAAW,GACT,2DACA,UAAU,cAAc,cACzB;cAEA;KACI;IACF;GAEJ"}
@@ -8,11 +8,13 @@ declare namespace switch_d_exports {
8
8
  }
9
9
  interface CustomProps {
10
10
  handleClassName?: string;
11
+ children?: React$1.ReactNode;
11
12
  }
12
13
  declare function Switch({
13
14
  className,
14
15
  size,
15
16
  handleClassName,
17
+ children,
16
18
  ...props
17
19
  }: React$1.ComponentProps<typeof SwitchPrimitive.Root> & {
18
20
  size?: 'sm' | 'default';
@@ -1 +1 @@
1
- {"version":3,"file":"switch.d.mts","names":[],"sources":["../../src/core/switch.tsx"],"mappings":";;;;;;;;UAQU,WAAA;EACR,eAAA;AAAA;AAAA,iBAGO,MAAA,CAAA;EACP,SAAA;EACA,IAAA;EACA,eAAA;EAAA,GACG;AAAA,GACF,OAAA,CAAM,cAAA,QAAsB,eAAA,CAAgB,IAAA;EAC7C,IAAA;AAAA,IACE,WAAA,GAAW,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"switch.d.mts","names":[],"sources":["../../src/core/switch.tsx"],"mappings":";;;;;;;;UAQU,WAAA;EACR,eAAA;EACA,QAAA,GAAW,OAAA,CAAM,SAAA;AAAA;AAAA,iBAGV,MAAA,CAAA;EACP,SAAA;EACA,IAAA;EACA,eAAA;EACA,QAAA;EAAA,GACG;AAAA,GACF,OAAA,CAAM,cAAA,QAAsB,eAAA,CAAgB,IAAA;EAC7C,IAAA;AAAA,IACE,WAAA,GAAW,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -3,13 +3,13 @@
3
3
  import { __exportAll } from "../_virtual/_rolldown/runtime.mjs";
4
4
  import { cn } from "../utils.mjs";
5
5
  import "react";
6
- import { jsx } from "react/jsx-runtime";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
7
  import * as SwitchPrimitive from "@radix-ui/react-switch";
8
8
 
9
9
  //#region src/core/switch.tsx
10
10
  var switch_exports = /* @__PURE__ */ __exportAll({ Switch: () => Switch });
11
- function Switch({ className, size = "default", handleClassName, ...props }) {
12
- return /* @__PURE__ */ jsx(SwitchPrimitive.Root, {
11
+ function Switch({ className, size = "default", handleClassName, children, ...props }) {
12
+ return /* @__PURE__ */ jsxs(SwitchPrimitive.Root, {
13
13
  "data-slot": "switch",
14
14
  "data-size": size,
15
15
  className: cn(`peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input
@@ -21,7 +21,7 @@ function Switch({ className, size = "default", handleClassName, ...props }) {
21
21
  data-[size=default]:h-[1.15rem] data-[size=default]:w-8
22
22
  data-[size=sm]:h-3.5 data-[size=sm]:w-6`, className),
23
23
  ...props,
24
- children: /* @__PURE__ */ jsx(SwitchPrimitive.Thumb, {
24
+ children: [/* @__PURE__ */ jsx(SwitchPrimitive.Thumb, {
25
25
  "data-slot": "switch-thumb",
26
26
  className: cn(`bg-background dark:data-[state=unchecked]:bg-foreground
27
27
  dark:data-[state=checked]:bg-primary-foreground pointer-events-none
@@ -30,7 +30,7 @@ function Switch({ className, size = "default", handleClassName, ...props }) {
30
30
  group-data-[size=sm]/switch:size-3
31
31
  data-[state=checked]:translate-x-[calc(100%-2px)]
32
32
  data-[state=unchecked]:translate-x-0`, handleClassName)
33
- })
33
+ }), children]
34
34
  });
35
35
  }
36
36
 
@@ -1 +1 @@
1
- {"version":3,"file":"switch.mjs","names":[],"sources":["../../src/core/switch.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n\nimport * as SwitchPrimitive from '@radix-ui/react-switch';\n\nimport { cn } from '@repo/ui/utils';\n\ninterface CustomProps {\n handleClassName?: string;\n}\n\nfunction Switch({\n className,\n size = 'default',\n handleClassName,\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: 'sm' | 'default';\n} & CustomProps) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n `peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input\n focus-visible:border-ring focus-visible:ring-ring/50\n dark:data-[state=unchecked]:bg-input/80 group/switch inline-flex\n shrink-0 items-center rounded-full border border-transparent shadow-xs\n transition-all outline-none focus-visible:ring-[3px]\n disabled:cursor-not-allowed disabled:opacity-50\n data-[size=default]:h-[1.15rem] data-[size=default]:w-8\n data-[size=sm]:h-3.5 data-[size=sm]:w-6`,\n className,\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n `bg-background dark:data-[state=unchecked]:bg-foreground\n dark:data-[state=checked]:bg-primary-foreground pointer-events-none\n block rounded-full ring-0 transition-transform\n group-data-[size=default]/switch:size-4\n group-data-[size=sm]/switch:size-3\n data-[state=checked]:translate-x-[calc(100%-2px)]\n data-[state=unchecked]:translate-x-0`,\n handleClassName,\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n"],"mappings":";;;;;;;;;;AAYA,SAAS,OAAO,EACd,WACA,OAAO,WACP,iBACA,GAAG,SAGY;AACf,QACE,oBAAC,gBAAgB;EACf,aAAU;EACV,aAAW;EACX,WAAW,GACT;;;;;;;kDAQA,UACD;EACD,GAAI;YAEJ,oBAAC,gBAAgB;GACf,aAAU;GACV,WAAW,GACT;;;;;;iDAOA,gBACD;IACD;GACmB"}
1
+ {"version":3,"file":"switch.mjs","names":[],"sources":["../../src/core/switch.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n\nimport * as SwitchPrimitive from '@radix-ui/react-switch';\n\nimport { cn } from '@repo/ui/utils';\n\ninterface CustomProps {\n handleClassName?: string;\n children?: React.ReactNode;\n}\n\nfunction Switch({\n className,\n size = 'default',\n handleClassName,\n children,\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: 'sm' | 'default';\n} & CustomProps) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n `peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input\n focus-visible:border-ring focus-visible:ring-ring/50\n dark:data-[state=unchecked]:bg-input/80 group/switch inline-flex\n shrink-0 items-center rounded-full border border-transparent shadow-xs\n transition-all outline-none focus-visible:ring-[3px]\n disabled:cursor-not-allowed disabled:opacity-50\n data-[size=default]:h-[1.15rem] data-[size=default]:w-8\n data-[size=sm]:h-3.5 data-[size=sm]:w-6`,\n className,\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n `bg-background dark:data-[state=unchecked]:bg-foreground\n dark:data-[state=checked]:bg-primary-foreground pointer-events-none\n block rounded-full ring-0 transition-transform\n group-data-[size=default]/switch:size-4\n group-data-[size=sm]/switch:size-3\n data-[state=checked]:translate-x-[calc(100%-2px)]\n data-[state=unchecked]:translate-x-0`,\n handleClassName,\n )}\n />\n {children}\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n"],"mappings":";;;;;;;;;;AAaA,SAAS,OAAO,EACd,WACA,OAAO,WACP,iBACA,UACA,GAAG,SAGY;AACf,QACE,qBAAC,gBAAgB;EACf,aAAU;EACV,aAAW;EACX,WAAW,GACT;;;;;;;kDAQA,UACD;EACD,GAAI;aAEJ,oBAAC,gBAAgB;GACf,aAAU;GACV,WAAW,GACT;;;;;;iDAOA,gBACD;IACD,EACD;GACoB"}
package/dist/style.css CHANGED
@@ -215,6 +215,9 @@
215
215
  white-space: nowrap;
216
216
  border-width: 0;
217
217
  }
218
+ .\!absolute {
219
+ position: absolute !important;
220
+ }
218
221
  .absolute {
219
222
  position: absolute;
220
223
  }
@@ -302,6 +305,12 @@
302
305
  .col-span-3 {
303
306
  grid-column: span 3 / span 3;
304
307
  }
308
+ .col-start-1 {
309
+ grid-column-start: 1;
310
+ }
311
+ .row-start-1 {
312
+ grid-row-start: 1;
313
+ }
305
314
  .container {
306
315
  width: 100%;
307
316
  @media (width >= 40rem) {
@@ -344,15 +353,39 @@
344
353
  .mt-auto {
345
354
  margin-top: auto;
346
355
  }
356
+ .mr-0\.5 {
357
+ margin-right: calc(var(--spacing) * 0.5);
358
+ }
359
+ .mr-1 {
360
+ margin-right: calc(var(--spacing) * 1);
361
+ }
362
+ .mr-3\.5 {
363
+ margin-right: calc(var(--spacing) * 3.5);
364
+ }
365
+ .mr-4\.5 {
366
+ margin-right: calc(var(--spacing) * 4.5);
367
+ }
347
368
  .mb-3 {
348
369
  margin-bottom: calc(var(--spacing) * 3);
349
370
  }
350
371
  .mb-4 {
351
372
  margin-bottom: calc(var(--spacing) * 4);
352
373
  }
374
+ .ml-0\.5 {
375
+ margin-left: calc(var(--spacing) * 0.5);
376
+ }
377
+ .ml-1 {
378
+ margin-left: calc(var(--spacing) * 1);
379
+ }
380
+ .ml-3\.5 {
381
+ margin-left: calc(var(--spacing) * 3.5);
382
+ }
353
383
  .ml-4 {
354
384
  margin-left: calc(var(--spacing) * 4);
355
385
  }
386
+ .ml-4\.5 {
387
+ margin-left: calc(var(--spacing) * 4.5);
388
+ }
356
389
  .box-content {
357
390
  box-sizing: content-box;
358
391
  }
@@ -423,15 +456,9 @@
423
456
  .h-6 {
424
457
  height: calc(var(--spacing) * 6);
425
458
  }
426
- .h-7 {
427
- height: calc(var(--spacing) * 7);
428
- }
429
459
  .h-8 {
430
460
  height: calc(var(--spacing) * 8);
431
461
  }
432
- .h-8\.5 {
433
- height: calc(var(--spacing) * 8.5);
434
- }
435
462
  .h-9 {
436
463
  height: calc(var(--spacing) * 9);
437
464
  }
@@ -468,15 +495,9 @@
468
495
  .w-4 {
469
496
  width: calc(var(--spacing) * 4);
470
497
  }
471
- .w-7 {
472
- width: calc(var(--spacing) * 7);
473
- }
474
498
  .w-12 {
475
499
  width: calc(var(--spacing) * 12);
476
500
  }
477
- .w-13 {
478
- width: calc(var(--spacing) * 13);
479
- }
480
501
  .w-15 {
481
502
  width: calc(var(--spacing) * 15);
482
503
  }
@@ -504,6 +525,9 @@
504
525
  .w-auto {
505
526
  width: auto;
506
527
  }
528
+ .w-auto\! {
529
+ width: auto !important;
530
+ }
507
531
  .w-fit {
508
532
  width: fit-content;
509
533
  }
@@ -555,6 +579,10 @@
555
579
  .origin-\(--radix-select-content-transform-origin\) {
556
580
  transform-origin: var(--radix-select-content-transform-origin);
557
581
  }
582
+ .\!translate-x-0 {
583
+ --tw-translate-x: calc(var(--spacing) * 0) !important;
584
+ translate: var(--tw-translate-x) var(--tw-translate-y) !important;
585
+ }
558
586
  .-translate-x-1\/2 {
559
587
  --tw-translate-x: calc(calc(1/2 * 100%) * -1);
560
588
  translate: var(--tw-translate-x) var(--tw-translate-y);
@@ -563,6 +591,10 @@
563
591
  --tw-translate-x: -50%;
564
592
  translate: var(--tw-translate-x) var(--tw-translate-y);
565
593
  }
594
+ .\!-translate-y-1\/2 {
595
+ --tw-translate-y: calc(calc(1/2 * 100%) * -1) !important;
596
+ translate: var(--tw-translate-x) var(--tw-translate-y) !important;
597
+ }
566
598
  .-translate-y-1\/2 {
567
599
  --tw-translate-y: calc(calc(1/2 * 100%) * -1);
568
600
  translate: var(--tw-translate-x) var(--tw-translate-y);
@@ -665,6 +697,9 @@
665
697
  .justify-end {
666
698
  justify-content: flex-end;
667
699
  }
700
+ .gap-0 {
701
+ gap: calc(var(--spacing) * 0);
702
+ }
668
703
  .gap-0\.5 {
669
704
  gap: calc(var(--spacing) * 0.5);
670
705
  }
@@ -757,10 +792,18 @@
757
792
  border-top-left-radius: 30px !important;
758
793
  border-top-right-radius: 30px !important;
759
794
  }
795
+ .rounded-l-lg {
796
+ border-top-left-radius: var(--radius);
797
+ border-bottom-left-radius: var(--radius);
798
+ }
760
799
  .rounded-l-none {
761
800
  border-top-left-radius: 0;
762
801
  border-bottom-left-radius: 0;
763
802
  }
803
+ .rounded-r-lg {
804
+ border-top-right-radius: var(--radius);
805
+ border-bottom-right-radius: var(--radius);
806
+ }
764
807
  .rounded-r-none {
765
808
  border-top-right-radius: 0;
766
809
  border-bottom-right-radius: 0;
@@ -804,6 +847,9 @@
804
847
  .border-input {
805
848
  border-color: var(--input);
806
849
  }
850
+ .border-primary {
851
+ border-color: var(--primary);
852
+ }
807
853
  .border-transparent {
808
854
  border-color: transparent;
809
855
  }
@@ -1000,6 +1046,12 @@
1000
1046
  font-size: var(--text-xs);
1001
1047
  line-height: var(--tw-leading, var(--text-xs--line-height));
1002
1048
  }
1049
+ .text-\[7px\] {
1050
+ font-size: 7px;
1051
+ }
1052
+ .text-\[9px\] {
1053
+ font-size: 9px;
1054
+ }
1003
1055
  .leading-5\.75 {
1004
1056
  --tw-leading: calc(var(--spacing) * 5.75);
1005
1057
  line-height: calc(var(--spacing) * 5.75);
@@ -1101,12 +1153,18 @@
1101
1153
  .underline-offset-8 {
1102
1154
  text-underline-offset: 8px;
1103
1155
  }
1156
+ .opacity-0 {
1157
+ opacity: 0%;
1158
+ }
1104
1159
  .opacity-50 {
1105
1160
  opacity: 50%;
1106
1161
  }
1107
1162
  .opacity-70 {
1108
1163
  opacity: 70%;
1109
1164
  }
1165
+ .opacity-100 {
1166
+ opacity: 100%;
1167
+ }
1110
1168
  .shadow {
1111
1169
  --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
1112
1170
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
@@ -1160,6 +1218,16 @@
1160
1218
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
1161
1219
  transition-duration: var(--tw-duration, var(--default-transition-duration));
1162
1220
  }
1221
+ .transition-\[left\] {
1222
+ transition-property: left;
1223
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
1224
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
1225
+ }
1226
+ .transition-\[margin\] {
1227
+ transition-property: margin;
1228
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
1229
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
1230
+ }
1163
1231
  .transition-all {
1164
1232
  transition-property: all;
1165
1233
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
@@ -2067,10 +2135,14 @@
2067
2135
  }
2068
2136
  }
2069
2137
  }
2070
- .data-\[state\=checked\]\:translate-x-5 {
2138
+ .data-\[state\=checked\]\:left-\[calc\(100\%-12px\)\] {
2071
2139
  &[data-state="checked"] {
2072
- --tw-translate-x: calc(var(--spacing) * 5);
2073
- translate: var(--tw-translate-x) var(--tw-translate-y);
2140
+ left: calc(100% - 12px);
2141
+ }
2142
+ }
2143
+ .data-\[state\=checked\]\:left-\[calc\(100\%-16px\)\] {
2144
+ &[data-state="checked"] {
2145
+ left: calc(100% - 16px);
2074
2146
  }
2075
2147
  }
2076
2148
  .data-\[state\=checked\]\:translate-x-\[calc\(100\%-2px\)\] {
@@ -2104,15 +2176,14 @@
2104
2176
  color: var(--muted-foreground);
2105
2177
  }
2106
2178
  }
2107
- .data-\[state\=unchecked\]\:translate-x-0 {
2179
+ .data-\[state\=unchecked\]\:left-0 {
2108
2180
  &[data-state="unchecked"] {
2109
- --tw-translate-x: calc(var(--spacing) * 0);
2110
- translate: var(--tw-translate-x) var(--tw-translate-y);
2181
+ left: calc(var(--spacing) * 0);
2111
2182
  }
2112
2183
  }
2113
- .data-\[state\=unchecked\]\:translate-x-\[2px\] {
2184
+ .data-\[state\=unchecked\]\:translate-x-0 {
2114
2185
  &[data-state="unchecked"] {
2115
- --tw-translate-x: 2px;
2186
+ --tw-translate-x: calc(var(--spacing) * 0);
2116
2187
  translate: var(--tw-translate-x) var(--tw-translate-y);
2117
2188
  }
2118
2189
  }
@@ -2444,6 +2515,12 @@
2444
2515
  height: calc(var(--spacing) * 4);
2445
2516
  }
2446
2517
  }
2518
+ .\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-5 {
2519
+ & svg:not([class*='size-']) {
2520
+ width: calc(var(--spacing) * 5);
2521
+ height: calc(var(--spacing) * 5);
2522
+ }
2523
+ }
2447
2524
  .\[\&_svg\:not\(\[class\*\=\'text-\'\]\)\]\:text-muted-foreground {
2448
2525
  & svg:not([class*='text-']) {
2449
2526
  color: var(--muted-foreground);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jbpark/ui-kit",
3
- "version": "2.3.4",
3
+ "version": "2.4.0",
4
4
  "description": "Modern React UI component library built with TypeScript, Tailwind CSS, and Radix UI. Featuring atoms, molecules, organisms and layout templates for building beautiful interfaces.",
5
5
  "keywords": [
6
6
  "react",