@mbao01/common 0.0.4 → 0.0.6

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 (84) hide show
  1. package/README.md +1 -2
  2. package/dist/types/components/Badge/Badge.d.ts +1 -1
  3. package/dist/types/components/Badge/constants.d.ts +5 -5
  4. package/dist/types/components/Badge/types.d.ts +3 -7
  5. package/dist/types/components/Breadcrumbs/Breadcrumbs.d.ts +3 -0
  6. package/dist/types/components/Breadcrumbs/index.d.ts +1 -0
  7. package/dist/types/components/Breadcrumbs/types.d.ts +2 -0
  8. package/dist/types/components/Button/Button.d.ts +11 -2
  9. package/dist/types/components/Button/constants.d.ts +7 -8
  10. package/dist/types/components/Button/types.d.ts +6 -12
  11. package/dist/types/components/Card/Card.d.ts +10 -8
  12. package/dist/types/components/Card/constants.d.ts +6 -0
  13. package/dist/types/components/Card/types.d.ts +3 -18
  14. package/dist/types/components/Description/Description.d.ts +7 -0
  15. package/dist/types/components/Description/index.d.ts +1 -0
  16. package/dist/types/components/Description/types.d.ts +3 -0
  17. package/dist/types/components/Loading/Loading.d.ts +2 -0
  18. package/dist/types/components/Loading/constants.d.ts +5 -0
  19. package/dist/types/components/Loading/index.d.ts +1 -0
  20. package/dist/types/components/Loading/types.d.ts +3 -0
  21. package/dist/types/components/Skeleton/Skeleton.d.ts +2 -0
  22. package/dist/types/components/Skeleton/constants.d.ts +6 -0
  23. package/dist/types/components/Skeleton/index.d.ts +1 -0
  24. package/dist/types/components/Skeleton/types.d.ts +3 -0
  25. package/dist/types/components/Text/Text.d.ts +2 -4
  26. package/dist/types/components/Text/constants.d.ts +4 -5
  27. package/dist/types/components/Text/types.d.ts +4 -9
  28. package/dist/types/components/Tooltip/Tooltip.d.ts +14 -2
  29. package/dist/types/components/Tooltip/constants.d.ts +6 -5
  30. package/dist/types/components/Tooltip/index.d.ts +1 -1
  31. package/dist/types/components/Tooltip/types.d.ts +5 -10
  32. package/dist/types/index.d.ts +9 -2
  33. package/dist/types/libs/cva.d.ts +1 -0
  34. package/dist/types/libs/index.d.ts +1 -0
  35. package/dist/types/utilities/cn.d.ts +2 -0
  36. package/dist/types/utilities/getSubpaths/getSubpaths.d.ts +6 -0
  37. package/dist/types/utilities/getSubpaths/index.d.ts +1 -0
  38. package/dist/types/utilities/index.d.ts +2 -0
  39. package/package.json +12 -5
  40. package/plugin.js +1 -3
  41. package/src/components/Badge/Badge.tsx +4 -14
  42. package/src/components/Badge/constants.ts +28 -30
  43. package/src/components/Badge/types.ts +4 -17
  44. package/src/components/Breadcrumbs/Breadcrumbs.tsx +13 -0
  45. package/src/components/Breadcrumbs/index.ts +1 -0
  46. package/src/components/Breadcrumbs/types.ts +3 -0
  47. package/src/components/Button/Button.tsx +51 -37
  48. package/src/components/Button/constants.ts +39 -43
  49. package/src/components/Button/types.ts +7 -25
  50. package/src/components/Card/Card.tsx +16 -23
  51. package/src/components/Card/constants.ts +22 -0
  52. package/src/components/Card/types.ts +4 -18
  53. package/src/components/Description/Description.tsx +34 -0
  54. package/src/components/Description/index.ts +1 -0
  55. package/src/components/Description/types.ts +5 -0
  56. package/src/components/Loading/Loading.tsx +18 -0
  57. package/src/components/Loading/constants.ts +30 -0
  58. package/src/components/Loading/index.ts +1 -0
  59. package/src/components/Loading/types.ts +5 -0
  60. package/src/components/Skeleton/Skeleton.tsx +22 -0
  61. package/src/components/Skeleton/constants.ts +40 -0
  62. package/src/components/Skeleton/index.ts +1 -0
  63. package/src/components/Skeleton/types.ts +5 -0
  64. package/src/components/Text/Text.tsx +24 -9
  65. package/src/components/Text/constants.ts +26 -28
  66. package/src/components/Text/types.ts +9 -20
  67. package/src/components/Tooltip/Tooltip.tsx +36 -11
  68. package/src/components/Tooltip/constants.ts +32 -31
  69. package/src/components/Tooltip/index.ts +1 -1
  70. package/src/components/Tooltip/types.ts +13 -22
  71. package/src/index.ts +12 -2
  72. package/src/libs/cva.ts +1 -0
  73. package/src/libs/index.ts +1 -0
  74. package/src/utilities/cn.ts +6 -0
  75. package/src/utilities/getSubpaths/getSubpaths.ts +34 -0
  76. package/src/utilities/getSubpaths/index.ts +1 -0
  77. package/src/utilities/index.ts +2 -0
  78. package/vitest-setup.ts +11 -1
  79. package/dist/types/components/Detail/Detail.d.ts +0 -2
  80. package/dist/types/components/Detail/index.d.ts +0 -1
  81. package/dist/types/components/Detail/types.d.ts +0 -5
  82. package/src/components/Detail/Detail.tsx +0 -10
  83. package/src/components/Detail/index.ts +0 -1
  84. package/src/components/Detail/types.ts +0 -6
@@ -1,11 +1,36 @@
1
- import c from 'clsx';
2
- import { getTooltipClasses } from './constants';
3
- import { type TooltipProps } from './types';
4
-
5
- export const Tooltip = ({ tip, children, variant, position, className }: TooltipProps) => {
6
- return (
7
- <div className={c(getTooltipClasses({ variant, position }), className)} data-tip={tip}>
8
- {children}
9
- </div>
10
- );
11
- };
1
+ import React from "react";
2
+ import * as TooltipPrimitive from "@radix-ui/react-tooltip";
3
+ import type { TooltipArrowProps, TooltipContentProps } from "./types";
4
+ import { getTooltipArrowClasses, getTooltipContentClasses } from "./constants";
5
+ import { cn } from "../../utilities";
6
+
7
+ const Tooltip = (props: TooltipPrimitive.TooltipProps) => (
8
+ <TooltipPrimitive.Root {...props} />
9
+ );
10
+
11
+ const TooltipArrow = ({ className, variant, ...props }: TooltipArrowProps) => (
12
+ <TooltipPrimitive.Arrow
13
+ className={cn(getTooltipArrowClasses({ variant }), className)}
14
+ {...props}
15
+ />
16
+ );
17
+
18
+ const TooltipContent = React.forwardRef<
19
+ React.ElementRef<typeof TooltipPrimitive.Content>,
20
+ TooltipContentProps
21
+ >(({ className, variant, ...props }, ref) => (
22
+ <TooltipPrimitive.Content
23
+ ref={ref}
24
+ className={cn(getTooltipContentClasses({ variant }), className)}
25
+ {...props}
26
+ />
27
+ ));
28
+ TooltipContent.displayName = TooltipPrimitive.Content.displayName;
29
+
30
+ Tooltip.Content = TooltipContent;
31
+ Tooltip.Arrow = TooltipArrow;
32
+ Tooltip.Portal = TooltipPrimitive.Portal;
33
+ Tooltip.Provider = TooltipPrimitive.Provider;
34
+ Tooltip.Trigger = TooltipPrimitive.Trigger;
35
+
36
+ export { Tooltip };
@@ -1,33 +1,34 @@
1
- import c from "clsx";
2
- import type { TooltipPosition, TooltipVariant } from "./types";
1
+ import { cva } from "../../libs";
3
2
 
4
- const TOOLTIP_POSITION = {
5
- top: c("tooltip-top"),
6
- right: c("tooltip-right"),
7
- bottom: c("tooltip-bottom"),
8
- left: c("tooltip-left"),
9
- } satisfies Record<TooltipPosition, string>;
3
+ export const getTooltipContentClasses = cva(
4
+ "bg-base-200 text-base-content z-50 overflow-hidden rounded-md px-3 py-1.5 text-xs animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-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
+ {
6
+ variants: {
7
+ variant: {
8
+ primary: "bg-primary text-primary-content",
9
+ secondary: "bg-secondary text-secondary-content",
10
+ accent: "bg-accent text-accent-content",
11
+ neutral: "bg-neutral text-neutral-content",
12
+ info: "bg-info text-info-content",
13
+ success: "bg-success text-success-content",
14
+ warning: "bg-warning text-warning-content",
15
+ error: "bg-error text-error-content",
16
+ },
17
+ },
18
+ }
19
+ );
10
20
 
11
- const TOOLTIP_VARIANTS = {
12
- accent: c("tooltip-accent"),
13
- default: c("tooltip-default"),
14
- error: c("tooltip-error"),
15
- ghost: c("tooltip-ghost"),
16
- info: c("tooltip-info"),
17
- link: c("tooltip-link"),
18
- neutral: c("tooltip-neutral"),
19
- primary: c("tooltip-primary"),
20
- secondary: c("tooltip-secondary"),
21
- success: c("tooltip-success"),
22
- warning: c("tooltip-warning"),
23
- } satisfies Record<TooltipVariant, string>;
24
-
25
- export const getTooltipClasses = ({
26
- variant,
27
- position,
28
- }: {
29
- variant?: TooltipVariant;
30
- position?: TooltipPosition;
31
- }) => {
32
- return c("tooltip", TOOLTIP_VARIANTS[variant!], TOOLTIP_POSITION[position!]);
33
- };
21
+ export const getTooltipArrowClasses = cva("fill-base-200", {
22
+ variants: {
23
+ variant: {
24
+ primary: "fill-primary",
25
+ secondary: "fill-secondary",
26
+ accent: "fill-accent",
27
+ neutral: "fill-neutral",
28
+ info: "fill-info",
29
+ success: "fill-success",
30
+ warning: "fill-warning",
31
+ error: "fill-error",
32
+ },
33
+ },
34
+ });
@@ -1 +1 @@
1
- export { Tooltip } from './Tooltip';
1
+ export { Tooltip } from "./Tooltip";
@@ -1,24 +1,15 @@
1
- import { type ReactNode } from 'react';
1
+ import { type VariantProps } from "../../libs";
2
+ import { getTooltipArrowClasses, getTooltipContentClasses } from "./constants";
3
+ import * as TooltipPrimitive from "@radix-ui/react-tooltip";
2
4
 
3
- export type TooltipPosition = 'top' | 'bottom' | 'left' | 'right';
5
+ export type TooltipArrowProps = React.HTMLAttributes<
6
+ React.ElementRef<typeof TooltipPrimitive.Arrow>
7
+ > &
8
+ TooltipPrimitive.TooltipArrowProps &
9
+ VariantProps<typeof getTooltipArrowClasses>;
4
10
 
5
- export type TooltipVariant =
6
- | 'default'
7
- | 'neutral'
8
- | 'primary'
9
- | 'secondary'
10
- | 'accent'
11
- | 'ghost'
12
- | 'link'
13
- | 'info'
14
- | 'success'
15
- | 'warning'
16
- | 'error';
17
-
18
- export type TooltipProps = {
19
- tip: string;
20
- children: ReactNode;
21
- variant?: TooltipVariant;
22
- position?: TooltipPosition;
23
- className?: string;
24
- };
11
+ export type TooltipContentProps = React.HTMLAttributes<
12
+ React.ElementRef<typeof TooltipPrimitive.Content>
13
+ > &
14
+ TooltipPrimitive.TooltipContentProps &
15
+ VariantProps<typeof getTooltipContentClasses>;
package/src/index.ts CHANGED
@@ -1,6 +1,16 @@
1
- export * from "./components/Badge";
1
+ /** actions */
2
2
  export * from "./components/Button";
3
+ export * from "./components/Breadcrumbs";
4
+
5
+ /** data display */
6
+ export * from "./components/Badge";
3
7
  export * from "./components/Card";
4
- export * from "./components/Detail";
8
+ export * from "./components/Description";
5
9
  export * from "./components/Text";
10
+
11
+ /** data input */
12
+
13
+ /** feedback */
14
+ export * from "./components/Loading";
15
+ export * from "./components/Skeleton";
6
16
  export * from "./components/Tooltip";
@@ -0,0 +1 @@
1
+ export { cva, type VariantProps } from "class-variance-authority";
@@ -0,0 +1 @@
1
+ export { cva, type VariantProps } from "./cva";
@@ -0,0 +1,6 @@
1
+ import { type ClassValue, clsx } from "clsx";
2
+ import { twMerge } from "tailwind-merge";
3
+
4
+ export function cn(...inputs: ClassValue[]) {
5
+ return twMerge(clsx(inputs));
6
+ }
@@ -0,0 +1,34 @@
1
+ const PATH_SEPARATOR = "/";
2
+
3
+ const createPathObject = (
4
+ segment: string,
5
+ pathname: string,
6
+ pathLabels?: Record<string, string>
7
+ ) => ({
8
+ href: { pathname },
9
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
10
+ label: pathLabels?.[pathname] || segment, // always fallback to segment if label does not exist
11
+ });
12
+
13
+ export const getSubpaths = (
14
+ pathname: string,
15
+ pathLabels?: Record<string, string> | undefined,
16
+ includeRoot?: boolean
17
+ ) => {
18
+ const segments = pathname?.split(PATH_SEPARATOR).filter(Boolean);
19
+
20
+ const breadcrumbs = segments.map((segment, index) => {
21
+ const path = `${PATH_SEPARATOR}${segments
22
+ .slice(0, index + 1)
23
+ .join(PATH_SEPARATOR)}`;
24
+
25
+ return createPathObject(segment, path, pathLabels);
26
+ });
27
+
28
+ if (includeRoot) {
29
+ const ROOT_PATH = PATH_SEPARATOR;
30
+ breadcrumbs.unshift(createPathObject("", ROOT_PATH, pathLabels));
31
+ }
32
+
33
+ return breadcrumbs;
34
+ };
@@ -0,0 +1 @@
1
+ export { getSubpaths } from "./getSubpaths";
@@ -0,0 +1,2 @@
1
+ export { cn } from "./cn";
2
+ export { getSubpaths } from "./getSubpaths";
package/vitest-setup.ts CHANGED
@@ -1,7 +1,17 @@
1
- import { afterEach } from "vitest";
1
+ import { afterEach, vi } from "vitest";
2
2
  import { cleanup } from "@testing-library/react";
3
3
  import "@testing-library/jest-dom/vitest";
4
4
 
5
+ // Mock the ResizeObserver
6
+ const ResizeObserverMock = vi.fn(() => ({
7
+ observe: vi.fn(),
8
+ unobserve: vi.fn(),
9
+ disconnect: vi.fn(),
10
+ }));
11
+
12
+ // Stub the global ResizeObserver
13
+ vi.stubGlobal("ResizeObserver", ResizeObserverMock);
14
+
5
15
  // runs a cleanup after each test case (e.g. clearing jsdom)
6
16
  afterEach(() => {
7
17
  cleanup();
@@ -1,2 +0,0 @@
1
- import { type DetailProps } from './types';
2
- export declare const Detail: ({ term, children }: DetailProps) => import("react/jsx-runtime").JSX.Element;
@@ -1 +0,0 @@
1
- export { Detail } from './Detail';
@@ -1,5 +0,0 @@
1
- import { type ReactNode } from 'react';
2
- export type DetailProps = {
3
- term: string;
4
- children: ReactNode;
5
- };
@@ -1,10 +0,0 @@
1
- import { type DetailProps } from './types';
2
-
3
- export const Detail = ({ term, children }: DetailProps) => {
4
- return (
5
- <dl>
6
- <dt className="mb-1 py-2 text-sm font-medium">{term}</dt>
7
- <dd className="text-base">{children}</dd>
8
- </dl>
9
- );
10
- };
@@ -1 +0,0 @@
1
- export { Detail } from './Detail';
@@ -1,6 +0,0 @@
1
- import { type ReactNode } from 'react';
2
-
3
- export type DetailProps = {
4
- term: string;
5
- children: ReactNode;
6
- };