@mbao01/common 0.0.7 → 0.0.8

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 (144) hide show
  1. package/dist/types/components/Avatar/types.d.ts +1 -0
  2. package/dist/types/components/Badge/types.d.ts +1 -0
  3. package/dist/types/components/Breadcrumbs/types.d.ts +1 -0
  4. package/dist/types/components/Combobox/Combobox.d.ts +2 -0
  5. package/dist/types/components/Combobox/index.d.ts +1 -0
  6. package/dist/types/components/Combobox/types.d.ts +19 -0
  7. package/dist/types/components/Command/Command.d.ts +67 -0
  8. package/dist/types/components/Command/constants.d.ts +11 -0
  9. package/dist/types/components/Command/index.d.ts +1 -0
  10. package/dist/types/components/Command/types.d.ts +8 -0
  11. package/dist/types/components/Description/types.d.ts +1 -0
  12. package/dist/types/components/Dialog/Dialog.d.ts +22 -0
  13. package/dist/types/components/Dialog/constants.d.ts +7 -0
  14. package/dist/types/components/Dialog/index.d.ts +1 -0
  15. package/dist/types/components/Dialog/types.d.ts +11 -0
  16. package/dist/types/components/Form/Checkbox/Checkbox.d.ts +6 -0
  17. package/dist/types/components/Form/Checkbox/constants.d.ts +4 -0
  18. package/dist/types/components/Form/Checkbox/index.d.ts +1 -0
  19. package/dist/types/components/Form/Checkbox/types.d.ts +4 -0
  20. package/dist/types/components/Form/Input/Input.d.ts +7 -0
  21. package/dist/types/components/Form/Input/constants.d.ts +6 -0
  22. package/dist/types/components/Form/Input/index.d.ts +1 -0
  23. package/dist/types/components/Form/Input/types.d.ts +4 -0
  24. package/dist/types/components/Form/Phone/Phone.d.ts +17 -0
  25. package/dist/types/components/Form/Phone/constants.d.ts +2 -0
  26. package/dist/types/components/Form/Phone/index.d.ts +1 -0
  27. package/dist/types/components/Form/Phone/types.d.ts +8 -0
  28. package/dist/types/components/Form/Radio/Radio.d.ts +6 -0
  29. package/dist/types/components/Form/Radio/constants.d.ts +4 -0
  30. package/dist/types/components/Form/Radio/index.d.ts +1 -0
  31. package/dist/types/components/Form/Radio/types.d.ts +4 -0
  32. package/dist/types/components/Form/Range/Range.d.ts +8 -0
  33. package/dist/types/components/Form/Range/constants.d.ts +6 -0
  34. package/dist/types/components/Form/Range/index.d.ts +1 -0
  35. package/dist/types/components/Form/Range/types.d.ts +4 -0
  36. package/dist/types/components/Form/Select/Select.d.ts +27 -0
  37. package/dist/types/components/Form/Select/constants.d.ts +17 -0
  38. package/dist/types/components/Form/Select/index.d.ts +1 -0
  39. package/dist/types/components/Form/Select/types.d.ts +7 -0
  40. package/dist/types/components/Form/Slider/Slider.d.ts +15 -0
  41. package/dist/types/components/Form/Slider/constants.d.ts +15 -0
  42. package/dist/types/components/Form/Slider/index.d.ts +1 -0
  43. package/dist/types/components/Form/Slider/types.d.ts +5 -0
  44. package/dist/types/components/Form/Switch/Switch.d.ts +6 -0
  45. package/dist/types/components/Form/Switch/constants.d.ts +4 -0
  46. package/dist/types/components/Form/Switch/index.d.ts +1 -0
  47. package/dist/types/components/Form/Switch/types.d.ts +4 -0
  48. package/dist/types/components/Form/TextField/TextField.d.ts +10 -0
  49. package/dist/types/components/Form/TextField/constants.d.ts +1 -0
  50. package/dist/types/components/Form/TextField/index.d.ts +1 -0
  51. package/dist/types/components/Form/TextField/types.d.ts +6 -0
  52. package/dist/types/components/Form/Textarea/Textarea.d.ts +8 -0
  53. package/dist/types/components/Form/Textarea/constants.d.ts +6 -0
  54. package/dist/types/components/Form/Textarea/index.d.ts +1 -0
  55. package/dist/types/components/Form/Textarea/types.d.ts +4 -0
  56. package/dist/types/components/Form/components/FormControl/FormControl.d.ts +2 -0
  57. package/dist/types/components/Form/components/FormControl/constants.d.ts +1 -0
  58. package/dist/types/components/Form/components/FormControl/index.d.ts +1 -0
  59. package/dist/types/components/Form/components/FormControl/types.d.ts +9 -0
  60. package/dist/types/components/Form/components/Label/Label.d.ts +7 -0
  61. package/dist/types/components/Form/components/Label/constants.d.ts +1 -0
  62. package/dist/types/components/Form/components/Label/index.d.ts +1 -0
  63. package/dist/types/components/Form/components/Label/types.d.ts +6 -0
  64. package/dist/types/components/Form/index.d.ts +11 -0
  65. package/dist/types/components/Loading/types.d.ts +1 -0
  66. package/dist/types/components/Popover/Popover.d.ts +9 -0
  67. package/dist/types/components/Popover/constants.d.ts +1 -0
  68. package/dist/types/components/Popover/index.d.ts +1 -0
  69. package/dist/types/components/Popover/types.d.ts +6 -0
  70. package/dist/types/components/Progress/types.d.ts +1 -0
  71. package/dist/types/components/Separator/types.d.ts +1 -0
  72. package/dist/types/components/Skeleton/types.d.ts +1 -0
  73. package/dist/types/components/Text/Text.d.ts +2 -2
  74. package/dist/types/components/Text/types.d.ts +6 -2
  75. package/dist/types/components/Tooltip/types.d.ts +1 -0
  76. package/dist/types/index.d.ts +6 -0
  77. package/package.json +21 -13
  78. package/src/components/Combobox/Combobox.tsx +82 -0
  79. package/src/components/Combobox/index.ts +1 -0
  80. package/src/components/Combobox/types.ts +21 -0
  81. package/src/components/Command/Command.tsx +142 -0
  82. package/src/components/Command/constants.ts +39 -0
  83. package/src/components/Command/index.ts +1 -0
  84. package/src/components/Command/types.ts +16 -0
  85. package/src/components/Dialog/Dialog.tsx +105 -0
  86. package/src/components/Dialog/constants.ts +27 -0
  87. package/src/components/Dialog/index.ts +1 -0
  88. package/src/components/Dialog/types.ts +40 -0
  89. package/src/components/Form/Checkbox/Checkbox.tsx +18 -0
  90. package/src/components/Form/Checkbox/constants.ts +21 -0
  91. package/src/components/Form/Checkbox/index.ts +1 -0
  92. package/src/components/Form/Checkbox/types.ts +8 -0
  93. package/src/components/Form/Input/Input.tsx +18 -0
  94. package/src/components/Form/Input/constants.ts +37 -0
  95. package/src/components/Form/Input/index.ts +1 -0
  96. package/src/components/Form/Input/types.ts +8 -0
  97. package/src/components/Form/Phone/Phone.tsx +120 -0
  98. package/src/components/Form/Phone/constants.ts +7 -0
  99. package/src/components/Form/Phone/index.ts +1 -0
  100. package/src/components/Form/Phone/types.ts +12 -0
  101. package/src/components/Form/Radio/Radio.tsx +18 -0
  102. package/src/components/Form/Radio/constants.ts +21 -0
  103. package/src/components/Form/Radio/index.ts +1 -0
  104. package/src/components/Form/Radio/types.ts +8 -0
  105. package/src/components/Form/Range/Range.tsx +22 -0
  106. package/src/components/Form/Range/constants.ts +31 -0
  107. package/src/components/Form/Range/index.ts +1 -0
  108. package/src/components/Form/Range/types.ts +8 -0
  109. package/src/components/Form/Select/Select.tsx +151 -0
  110. package/src/components/Form/Select/constants.ts +80 -0
  111. package/src/components/Form/Select/index.ts +1 -0
  112. package/src/components/Form/Select/types.ts +18 -0
  113. package/src/components/Form/Slider/Slider.tsx +43 -0
  114. package/src/components/Form/Slider/constants.ts +87 -0
  115. package/src/components/Form/Slider/index.ts +1 -0
  116. package/src/components/Form/Slider/types.ts +16 -0
  117. package/src/components/Form/Switch/Switch.tsx +19 -0
  118. package/src/components/Form/Switch/constants.ts +21 -0
  119. package/src/components/Form/Switch/index.ts +1 -0
  120. package/src/components/Form/Switch/types.ts +8 -0
  121. package/src/components/Form/TextField/TextField.tsx +37 -0
  122. package/src/components/Form/TextField/constants.ts +5 -0
  123. package/src/components/Form/TextField/index.ts +1 -0
  124. package/src/components/Form/TextField/types.ts +7 -0
  125. package/src/components/Form/Textarea/Textarea.tsx +22 -0
  126. package/src/components/Form/Textarea/constants.ts +37 -0
  127. package/src/components/Form/Textarea/index.ts +1 -0
  128. package/src/components/Form/Textarea/types.ts +8 -0
  129. package/src/components/Form/components/FormControl/FormControl.tsx +21 -0
  130. package/src/components/Form/components/FormControl/constants.ts +3 -0
  131. package/src/components/Form/components/FormControl/index.ts +1 -0
  132. package/src/components/Form/components/FormControl/types.ts +13 -0
  133. package/src/components/Form/components/Label/Label.tsx +22 -0
  134. package/src/components/Form/components/Label/constants.ts +3 -0
  135. package/src/components/Form/components/Label/index.ts +1 -0
  136. package/src/components/Form/components/Label/types.ts +10 -0
  137. package/src/components/Form/index.ts +11 -0
  138. package/src/components/Popover/Popover.tsx +30 -0
  139. package/src/components/Popover/constants.ts +5 -0
  140. package/src/components/Popover/index.ts +1 -0
  141. package/src/components/Popover/types.ts +12 -0
  142. package/src/components/Text/Text.tsx +3 -3
  143. package/src/components/Text/types.ts +8 -5
  144. package/src/index.ts +7 -0
@@ -0,0 +1,43 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import * as SliderPrimitive from "@radix-ui/react-slider";
5
+ import { cn } from "../../../utilities";
6
+ import {
7
+ getSliderClasses,
8
+ getSliderRootClasses,
9
+ getSliderThumbClasses,
10
+ getSliderTrackClasses,
11
+ } from "./constants";
12
+ import { type SliderProps } from "./types";
13
+
14
+ const Slider = React.forwardRef<
15
+ React.ElementRef<typeof SliderPrimitive.Root>,
16
+ SliderProps
17
+ >(({ className, size, variant, wide, disabled, name, ...props }, ref) => (
18
+ <SliderPrimitive.Root
19
+ ref={ref}
20
+ name={name}
21
+ disabled={disabled}
22
+ className={cn(getSliderRootClasses({ wide, disabled }), className)}
23
+ data-testid={`${name}-slider-root`}
24
+ {...props}
25
+ >
26
+ <SliderPrimitive.Track
27
+ className={cn(getSliderTrackClasses({ size, variant }))}
28
+ data-testid={`${name}-slider-track`}
29
+ >
30
+ <SliderPrimitive.Range
31
+ className={cn(getSliderClasses({ variant }))}
32
+ data-testid={`${name}-slider-range`}
33
+ />
34
+ </SliderPrimitive.Track>
35
+ <SliderPrimitive.Thumb
36
+ className={cn(getSliderThumbClasses({ size, variant }))}
37
+ data-testid={`${name}-slider-thumb`}
38
+ />
39
+ </SliderPrimitive.Root>
40
+ ));
41
+ Slider.displayName = SliderPrimitive.Root.displayName;
42
+
43
+ export { Slider };
@@ -0,0 +1,87 @@
1
+ import { cva } from "../../../libs";
2
+
3
+ export const getSliderRootClasses = cva(
4
+ "relative flex touch-none select-none items-center min-w-24",
5
+ {
6
+ variants: {
7
+ disabled: {
8
+ true: "cursor-not-allowed opacity-80",
9
+ },
10
+ wide: {
11
+ true: "w-full",
12
+ },
13
+ },
14
+ }
15
+ );
16
+
17
+ export const getSliderTrackClasses = cva(
18
+ "relative h-2 w-full grow overflow-hidden rounded-full",
19
+ {
20
+ variants: {
21
+ variant: {
22
+ primary: "bg-neutral-content",
23
+ secondary: "bg-neutral-content",
24
+ accent: "bg-neutral-content",
25
+ success: "bg-neutral-content",
26
+ warning: "bg-neutral-content",
27
+ info: "bg-neutral-content",
28
+ error: "bg-neutral-content",
29
+ neutral: "bg-base-200",
30
+ },
31
+ size: {
32
+ xs: "h-0.5",
33
+ sm: "h-1",
34
+ md: "h-2",
35
+ lg: "h-3",
36
+ },
37
+ },
38
+ defaultVariants: {
39
+ variant: "neutral",
40
+ },
41
+ }
42
+ );
43
+
44
+ export const getSliderClasses = cva("absolute h-full", {
45
+ variants: {
46
+ variant: {
47
+ primary: "bg-primary",
48
+ secondary: "bg-secondary",
49
+ accent: "bg-accent",
50
+ success: "bg-success",
51
+ warning: "bg-warning",
52
+ info: "bg-info",
53
+ error: "bg-error",
54
+ neutral: "bg-base-content",
55
+ },
56
+ },
57
+ defaultVariants: {
58
+ variant: "neutral",
59
+ },
60
+ });
61
+
62
+ export const getSliderThumbClasses = cva(
63
+ "block h-5 w-5 rounded-full border-2 ring-offset-neutral transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
64
+ {
65
+ variants: {
66
+ variant: {
67
+ primary: "border-primary bg-base-100",
68
+ secondary: "border-secondary bg-base-100",
69
+ accent: "border-accent bg-base-100",
70
+ success: "border-success bg-base-100",
71
+ warning: "border-warning bg-base-100",
72
+ info: "border-info bg-base-100",
73
+ error: "border-error bg-base-100",
74
+ neutral: "border-neutral-content bg-neutral",
75
+ },
76
+ size: {
77
+ xs: "h-4 w-4",
78
+ sm: "h-4 w-4",
79
+ md: "h-5 w-5",
80
+ lg: "h-7 w-7",
81
+ },
82
+ },
83
+ defaultVariants: {
84
+ variant: "neutral",
85
+ },
86
+ }
87
+ );
@@ -0,0 +1 @@
1
+ export { Slider } from "./Slider";
@@ -0,0 +1,16 @@
1
+ import { type VariantProps } from "../../../libs";
2
+ import * as SliderPrimitive from "@radix-ui/react-slider";
3
+ import {
4
+ getSliderClasses,
5
+ getSliderRootClasses,
6
+ getSliderThumbClasses,
7
+ getSliderTrackClasses,
8
+ } from "./constants";
9
+
10
+ export type SliderProps = React.ComponentPropsWithoutRef<
11
+ typeof SliderPrimitive.Root
12
+ > &
13
+ VariantProps<typeof getSliderClasses> &
14
+ VariantProps<typeof getSliderTrackClasses> &
15
+ VariantProps<typeof getSliderThumbClasses> &
16
+ VariantProps<typeof getSliderRootClasses>;
@@ -0,0 +1,19 @@
1
+ import * as React from "react";
2
+
3
+ import { type SwitchProps } from "./types";
4
+ import { getSwitchClasses } from "./constants";
5
+ import { cn } from "../../../utilities";
6
+
7
+ const Switch = React.forwardRef<HTMLInputElement, SwitchProps>(
8
+ ({ className, size, variant, ...props }, ref) => (
9
+ <input
10
+ ref={ref}
11
+ type="checkbox"
12
+ className={cn(getSwitchClasses({ size, variant }), className)}
13
+ {...props}
14
+ />
15
+ )
16
+ );
17
+ Switch.displayName = "Switch";
18
+
19
+ export { Switch };
@@ -0,0 +1,21 @@
1
+ import { cva } from "../../../libs";
2
+
3
+ export const getSwitchClasses = cva("toggle", {
4
+ variants: {
5
+ variant: {
6
+ primary: "toggle-primary",
7
+ secondary: "toggle-secondary",
8
+ accent: "toggle-accent",
9
+ success: "toggle-success",
10
+ warning: "toggle-warning",
11
+ info: "toggle-info",
12
+ error: "toggle-error",
13
+ },
14
+ size: {
15
+ xs: "toggle-xs",
16
+ sm: "toggle-sm",
17
+ md: "toggle-md",
18
+ lg: "toggle-lg",
19
+ },
20
+ },
21
+ });
@@ -0,0 +1 @@
1
+ export { Switch } from "./Switch";
@@ -0,0 +1,8 @@
1
+ import { type VariantProps } from "../../../libs";
2
+ import { getSwitchClasses } from "./constants";
3
+
4
+ export type SwitchProps = Omit<
5
+ React.HTMLProps<HTMLInputElement>,
6
+ "size" | "ref" | "type"
7
+ > &
8
+ VariantProps<typeof getSwitchClasses>;
@@ -0,0 +1,37 @@
1
+ import React from "react";
2
+ import { type TextFieldProps } from "./types";
3
+ import { FormControl } from "../components/FormControl/FormControl";
4
+ import { Input } from "../Input";
5
+
6
+ export const TextField = React.forwardRef<HTMLInputElement, TextFieldProps>(
7
+ ({ id, name, info, error, label, ...props }: TextFieldProps, ref) => {
8
+ const feedbackId = `${name}-information`;
9
+
10
+ return (
11
+ <FormControl as="label" htmlFor={id}>
12
+ {Boolean(label ?? info) && (
13
+ <div className="label">
14
+ <span className="label-text">{label}</span>
15
+ {info && <span className="label-text-alt">{info}</span>}
16
+ </div>
17
+ )}
18
+ <Input
19
+ id={id}
20
+ ref={ref}
21
+ name={name}
22
+ aria-invalid={error ? true : undefined}
23
+ aria-describedby={feedbackId}
24
+ {...props}
25
+ />
26
+ {Boolean(error) && (
27
+ <div className="label">
28
+ <span className="label-text-alt text-red-500" id={feedbackId}>
29
+ {Array.isArray(error) ? error.join(", ") : error}
30
+ </span>
31
+ </div>
32
+ )}
33
+ </FormControl>
34
+ );
35
+ }
36
+ );
37
+ TextField.displayName = "TextField";
@@ -0,0 +1,5 @@
1
+ import { cva } from "../../../libs";
2
+
3
+ export const getTextFieldClasses = cva(
4
+ "h-10 w-full rounded-md text-sm transition-all duration-100"
5
+ );
@@ -0,0 +1 @@
1
+ export { TextField } from "./TextField";
@@ -0,0 +1,7 @@
1
+ import { type ReactNode } from "react";
2
+ import { type InputProps } from "../Input/types";
3
+
4
+ export type TextFieldProps = InputProps & {
5
+ info?: ReactNode;
6
+ error?: string | string[] | null;
7
+ };
@@ -0,0 +1,22 @@
1
+ import * as React from "react";
2
+ import { type TextareaProps } from "./types";
3
+ import { cn } from "../../../utilities";
4
+ import { getTextareaClasses } from "./constants";
5
+
6
+ const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(
7
+ ({ size, variant, wide, outline, className, ...props }, ref) => {
8
+ return (
9
+ <textarea
10
+ ref={ref}
11
+ className={cn(
12
+ getTextareaClasses({ size, wide, variant, outline }),
13
+ className
14
+ )}
15
+ {...props}
16
+ />
17
+ );
18
+ }
19
+ );
20
+ Textarea.displayName = "Textarea";
21
+
22
+ export { Textarea };
@@ -0,0 +1,37 @@
1
+ import { cva } from "../../../libs";
2
+
3
+ export const getTextareaClasses = cva(
4
+ "textarea rounded-md transition-all duration-100",
5
+ {
6
+ variants: {
7
+ variant: {
8
+ accent: "textarea-accent",
9
+ error: "textarea-error",
10
+ ghost: "textarea-ghost",
11
+ info: "textarea-info",
12
+ primary: "textarea-primary",
13
+ secondary: "textarea-secondary",
14
+ success: "textarea-success",
15
+ warning: "textarea-warning",
16
+ },
17
+ outline: {
18
+ true: "textarea-bordered",
19
+ },
20
+ wide: {
21
+ true: "w-full",
22
+ },
23
+ size: {
24
+ xs: "textarea-xs",
25
+ sm: "textarea-sm",
26
+ md: "textarea-md",
27
+ lg: "textarea-lg",
28
+ },
29
+ },
30
+ compoundVariants: [
31
+ {
32
+ size: undefined,
33
+ className: "min-h-fit h-10",
34
+ },
35
+ ],
36
+ }
37
+ );
@@ -0,0 +1 @@
1
+ export { Textarea } from "./Textarea";
@@ -0,0 +1,8 @@
1
+ import { type VariantProps } from "../../../libs";
2
+ import { getTextareaClasses } from "./constants";
3
+
4
+ export type TextareaProps = Omit<
5
+ React.TextareaHTMLAttributes<HTMLTextAreaElement>,
6
+ "size" | "ref"
7
+ > &
8
+ VariantProps<typeof getTextareaClasses>;
@@ -0,0 +1,21 @@
1
+ import { Slot } from "@radix-ui/react-slot";
2
+ import type { As, FormControlProps } from "./types";
3
+ import { getFormControlClasses } from "./constants";
4
+ import { cn } from "../../../../utilities";
5
+ import { Label } from "../Label";
6
+
7
+ export const FormControl = <T extends As>({
8
+ as,
9
+ children,
10
+ className,
11
+ ...props
12
+ }: FormControlProps<T>) => {
13
+ const SlotChild = !as || as === "label" ? Label : as;
14
+
15
+ return (
16
+ <Slot className={cn(getFormControlClasses(), className)} {...props}>
17
+ {/* slot merges it's prop into it's immediate child */}
18
+ <SlotChild>{children}</SlotChild>
19
+ </Slot>
20
+ );
21
+ };
@@ -0,0 +1,3 @@
1
+ import { cva } from "../../../../libs";
2
+
3
+ export const getFormControlClasses = cva("form-control w-full");
@@ -0,0 +1 @@
1
+ export { FormControl } from "./FormControl";
@@ -0,0 +1,13 @@
1
+ import { type VariantProps } from "../../../../libs";
2
+ import { getFormControlClasses } from "./constants";
3
+
4
+ export type As = "div" | "span" | "label";
5
+
6
+ type AllowedElements = Pick<JSX.IntrinsicElements, As>;
7
+
8
+ export type FormControlProps<T extends As> = (T extends "label"
9
+ ? React.LabelHTMLAttributes<HTMLLabelElement>
10
+ : React.HTMLAttributes<HTMLElement & AllowedElements[T]>) &
11
+ VariantProps<typeof getFormControlClasses> & {
12
+ as?: T;
13
+ };
@@ -0,0 +1,22 @@
1
+ import * as LabelPrimitive from "@radix-ui/react-label";
2
+ import type { LabelProps, LabelTextProps } from "./types";
3
+ import { cn } from "../../../../utilities";
4
+ import { getLabelClasses } from "./constants";
5
+
6
+ const Label = ({ className, ...props }: LabelProps) => (
7
+ <LabelPrimitive.Root
8
+ className={cn(getLabelClasses(), className)}
9
+ {...props}
10
+ />
11
+ );
12
+ Label.displayName = LabelPrimitive.Root.displayName;
13
+
14
+ const LabelText = ({ className, ...props }: LabelTextProps) => (
15
+ <span className={cn("label-text", className)} {...props}>
16
+ Pick the best fantasy franchise
17
+ </span>
18
+ );
19
+
20
+ Label.Text = LabelText;
21
+
22
+ export { Label };
@@ -0,0 +1,3 @@
1
+ import { cva } from "../../../../libs";
2
+
3
+ export const getLabelClasses = cva("label");
@@ -0,0 +1 @@
1
+ export { Label } from "./Label";
@@ -0,0 +1,10 @@
1
+ import * as LabelPrimitive from "@radix-ui/react-label";
2
+ import { type VariantProps } from "../../../../libs";
3
+ import { getLabelClasses } from "./constants";
4
+
5
+ export type LabelProps = React.ComponentPropsWithoutRef<
6
+ typeof LabelPrimitive.Root
7
+ > &
8
+ VariantProps<typeof getLabelClasses>;
9
+
10
+ export type LabelTextProps = React.HTMLAttributes<HTMLSpanElement>;
@@ -0,0 +1,11 @@
1
+ export { Input } from "./Input";
2
+ export { Phone } from "./Phone";
3
+ export { Radio } from "./Radio";
4
+ export { Range } from "./Range";
5
+ export { Select } from "./Select";
6
+ export { Slider } from "./Slider";
7
+ export { Checkbox } from "./Checkbox";
8
+ export { Textarea } from "./Textarea";
9
+ export { TextField } from "./TextField";
10
+ export { Label } from "./components/Label";
11
+ export { FormControl } from "./components/FormControl";
@@ -0,0 +1,30 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import * as PopoverPrimitive from "@radix-ui/react-popover";
5
+ import { getPopoverContentClasses } from "./constants";
6
+ import { cn } from "../../utilities";
7
+ import { PopoverContentProps, PopoverProps } from "./types";
8
+
9
+ const Popover = (props: PopoverProps) => <PopoverPrimitive.Root {...props} />;
10
+
11
+ const PopoverContent = React.forwardRef<
12
+ React.ElementRef<typeof PopoverPrimitive.Content>,
13
+ PopoverContentProps
14
+ >(({ className, align = "center", sideOffset = 4, ...props }, ref) => (
15
+ <PopoverPrimitive.Portal>
16
+ <PopoverPrimitive.Content
17
+ ref={ref}
18
+ align={align}
19
+ sideOffset={sideOffset}
20
+ className={cn(getPopoverContentClasses(), className)}
21
+ {...props}
22
+ />
23
+ </PopoverPrimitive.Portal>
24
+ ));
25
+ PopoverContent.displayName = PopoverPrimitive.Content.displayName;
26
+
27
+ Popover.Content = PopoverContent;
28
+ Popover.Trigger = PopoverPrimitive.Trigger;
29
+
30
+ export { Popover };
@@ -0,0 +1,5 @@
1
+ import { cva } from "../../libs";
2
+
3
+ export const getPopoverContentClasses = cva(
4
+ "z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2"
5
+ );
@@ -0,0 +1 @@
1
+ export { Popover } from "./Popover";
@@ -0,0 +1,12 @@
1
+ import * as PopoverPrimitive from "@radix-ui/react-popover";
2
+ import { type VariantProps } from "../../libs";
3
+ import { getPopoverContentClasses } from "./constants";
4
+
5
+ export type PopoverProps = React.ComponentPropsWithoutRef<
6
+ typeof PopoverPrimitive.Root
7
+ >;
8
+
9
+ export type PopoverContentProps = React.ComponentPropsWithoutRef<
10
+ typeof PopoverPrimitive.Content
11
+ > &
12
+ VariantProps<typeof getPopoverContentClasses>;
@@ -1,17 +1,17 @@
1
1
  import React from "react";
2
- import { type TextProps } from "./types";
2
+ import type { As, TextProps } from "./types";
3
3
  import { getTextClasses } from "./constants";
4
4
  import { cn } from "../../utilities";
5
5
  import { Slot } from "@radix-ui/react-slot";
6
6
 
7
- export const Text = ({
7
+ export const Text = <T extends As>({
8
8
  as,
9
9
  size,
10
10
  variant,
11
11
  children,
12
12
  className,
13
13
  ...props
14
- }: TextProps) => {
14
+ }: TextProps<T>) => {
15
15
  const Comp = as ? Slot : "span";
16
16
  const SlotChild = as ? as : React.Fragment;
17
17
 
@@ -1,10 +1,13 @@
1
1
  import { type VariantProps } from "../../libs";
2
2
  import { getTextClasses } from "./constants";
3
3
 
4
- export type TextProps = React.HTMLAttributes<HTMLSpanElement> &
4
+ export type As = "h1" | "h2" | "h3" | "h4" | "h5" | "p" | "span";
5
+
6
+ type AllowedElements = Pick<JSX.IntrinsicElements, As>;
7
+
8
+ export type TextProps<T extends As> = React.HTMLAttributes<
9
+ HTMLElement & AllowedElements[T]
10
+ > &
5
11
  VariantProps<typeof getTextClasses> & {
6
- as?: keyof Pick<
7
- JSX.IntrinsicElements,
8
- "h1" | "h2" | "h3" | "h4" | "h5" | "p"
9
- >;
12
+ as?: As;
10
13
  };
package/src/index.ts CHANGED
@@ -12,8 +12,15 @@ export * from "./components/Separator";
12
12
  export * from "./components/Text";
13
13
 
14
14
  /** data input */
15
+ export * from "./components/Form";
16
+ export * from "./components/Combobox";
15
17
 
16
18
  /** feedback */
17
19
  export * from "./components/Loading";
18
20
  export * from "./components/Skeleton";
19
21
  export * from "./components/Tooltip";
22
+
23
+ /** composable */
24
+ export * from "./components/Dialog";
25
+ export * from "./components/Command";
26
+ export * from "./components/Popover";