@bricks-toolkit/toolkit 0.1.0 → 0.1.1

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 (149) hide show
  1. package/dist/Button.types-BsQYqZml.d.ts +27 -0
  2. package/dist/Button.types-D-srlWFf.d.mts +27 -0
  3. package/dist/TextInput.types-DRI8HQza.d.mts +32 -0
  4. package/dist/TextInput.types-DRI8HQza.d.ts +32 -0
  5. package/dist/Tooltip.types-PbUasE3C.d.mts +36 -0
  6. package/dist/Tooltip.types-PbUasE3C.d.ts +36 -0
  7. package/dist/avatar/index.cjs +1 -0
  8. package/dist/avatar/index.d.mts +29 -0
  9. package/dist/avatar/index.d.ts +29 -0
  10. package/dist/avatar/index.mjs +1 -0
  11. package/dist/badge/index.cjs +1 -0
  12. package/dist/badge/index.d.mts +57 -0
  13. package/dist/badge/index.d.ts +57 -0
  14. package/dist/badge/index.mjs +1 -0
  15. package/dist/breadcrumbs/index.cjs +1 -0
  16. package/dist/breadcrumbs/index.d.mts +32 -0
  17. package/dist/breadcrumbs/index.d.ts +32 -0
  18. package/dist/breadcrumbs/index.mjs +1 -0
  19. package/dist/button/index.cjs +2 -0
  20. package/dist/button/index.d.mts +8 -0
  21. package/dist/button/index.d.ts +8 -0
  22. package/dist/button/index.mjs +2 -0
  23. package/dist/card/index.cjs +1 -0
  24. package/dist/card/index.d.mts +42 -0
  25. package/dist/card/index.d.ts +42 -0
  26. package/dist/card/index.mjs +1 -0
  27. package/dist/checkbox/index.cjs +1 -0
  28. package/dist/checkbox/index.d.mts +36 -0
  29. package/dist/checkbox/index.d.ts +36 -0
  30. package/dist/checkbox/index.mjs +1 -0
  31. package/dist/combo-box/index.cjs +1 -0
  32. package/dist/combo-box/index.d.mts +62 -0
  33. package/dist/combo-box/index.d.ts +62 -0
  34. package/dist/combo-box/index.mjs +1 -0
  35. package/dist/date-picker/index.cjs +2 -0
  36. package/dist/date-picker/index.d.mts +32 -0
  37. package/dist/date-picker/index.d.ts +32 -0
  38. package/dist/date-picker/index.mjs +2 -0
  39. package/dist/dialog/index.cjs +1 -0
  40. package/dist/dialog/index.d.mts +61 -0
  41. package/dist/dialog/index.d.ts +61 -0
  42. package/dist/dialog/index.mjs +1 -0
  43. package/dist/dropdown-menu/index.cjs +1 -0
  44. package/dist/dropdown-menu/index.d.mts +34 -0
  45. package/dist/dropdown-menu/index.d.ts +34 -0
  46. package/dist/dropdown-menu/index.mjs +1 -0
  47. package/dist/email/index.cjs +2 -0
  48. package/dist/email/index.d.mts +38 -0
  49. package/dist/email/index.d.ts +38 -0
  50. package/dist/email/index.mjs +2 -0
  51. package/dist/file-upload/index.cjs +1 -0
  52. package/dist/file-upload/index.d.mts +27 -0
  53. package/dist/file-upload/index.d.ts +27 -0
  54. package/dist/file-upload/index.mjs +1 -0
  55. package/dist/header/index.cjs +2 -0
  56. package/dist/header/index.d.mts +28 -0
  57. package/dist/header/index.d.ts +28 -0
  58. package/dist/header/index.mjs +2 -0
  59. package/dist/icon-button/index.cjs +2 -0
  60. package/dist/icon-button/index.d.mts +16 -0
  61. package/dist/icon-button/index.d.ts +16 -0
  62. package/dist/icon-button/index.mjs +2 -0
  63. package/dist/image/index.cjs +1 -0
  64. package/dist/image/index.d.mts +48 -0
  65. package/dist/image/index.d.ts +48 -0
  66. package/dist/image/index.mjs +1 -0
  67. package/dist/index.cjs +2 -0
  68. package/dist/index.d.mts +141 -0
  69. package/dist/index.mjs +2 -0
  70. package/dist/link/index.cjs +1 -0
  71. package/dist/link/index.d.mts +25 -0
  72. package/dist/link/index.d.ts +25 -0
  73. package/dist/link/index.mjs +1 -0
  74. package/dist/loader/index.cjs +2 -0
  75. package/dist/loader/index.d.mts +21 -0
  76. package/dist/loader/index.d.ts +21 -0
  77. package/dist/loader/index.mjs +2 -0
  78. package/dist/modal/index.cjs +1 -0
  79. package/dist/modal/index.d.mts +116 -0
  80. package/dist/modal/index.d.ts +116 -0
  81. package/dist/modal/index.mjs +1 -0
  82. package/dist/multi-select/index.cjs +2 -0
  83. package/dist/multi-select/index.d.mts +59 -0
  84. package/dist/multi-select/index.d.ts +59 -0
  85. package/dist/multi-select/index.mjs +2 -0
  86. package/dist/otp-input/index.cjs +1 -0
  87. package/dist/otp-input/index.d.mts +57 -0
  88. package/dist/otp-input/index.d.ts +57 -0
  89. package/dist/otp-input/index.mjs +1 -0
  90. package/dist/password-input/index.cjs +2 -0
  91. package/dist/password-input/index.d.mts +32 -0
  92. package/dist/password-input/index.d.ts +32 -0
  93. package/dist/password-input/index.mjs +2 -0
  94. package/dist/phone/index.cjs +2 -0
  95. package/dist/phone/index.d.mts +41 -0
  96. package/dist/phone/index.d.ts +41 -0
  97. package/dist/phone/index.mjs +2 -0
  98. package/dist/radio-button/index.cjs +1 -0
  99. package/dist/radio-button/index.d.mts +56 -0
  100. package/dist/radio-button/index.d.ts +56 -0
  101. package/dist/radio-button/index.mjs +1 -0
  102. package/dist/search-input/index.cjs +2 -0
  103. package/dist/search-input/index.d.mts +22 -0
  104. package/dist/search-input/index.d.ts +22 -0
  105. package/dist/search-input/index.mjs +2 -0
  106. package/dist/select/index.cjs +2 -0
  107. package/dist/select/index.d.mts +36 -0
  108. package/dist/select/index.d.ts +36 -0
  109. package/dist/select/index.mjs +2 -0
  110. package/dist/sidebar/index.cjs +1 -0
  111. package/dist/sidebar/index.d.mts +96 -0
  112. package/dist/sidebar/index.d.ts +96 -0
  113. package/dist/sidebar/index.mjs +1 -0
  114. package/dist/skeleton/index.cjs +1 -0
  115. package/dist/skeleton/index.d.mts +76 -0
  116. package/dist/skeleton/index.d.ts +76 -0
  117. package/dist/skeleton/index.mjs +1 -0
  118. package/dist/styles.css +2 -0
  119. package/dist/styles.d.mts +2 -0
  120. package/dist/styles.d.ts +2 -0
  121. package/dist/table/index.cjs +1 -0
  122. package/dist/table/index.d.mts +92 -0
  123. package/dist/table/index.d.ts +92 -0
  124. package/dist/table/index.mjs +1 -0
  125. package/dist/tabs/index.cjs +2 -0
  126. package/dist/tabs/index.d.mts +26 -0
  127. package/dist/tabs/index.d.ts +26 -0
  128. package/dist/tabs/index.mjs +2 -0
  129. package/dist/text-input/index.cjs +2 -0
  130. package/dist/text-input/index.d.mts +7 -0
  131. package/dist/text-input/index.d.ts +7 -0
  132. package/dist/text-input/index.mjs +2 -0
  133. package/dist/theme-provider/index.cjs +1 -0
  134. package/dist/theme-provider/index.d.mts +122 -0
  135. package/dist/theme-provider/index.d.ts +122 -0
  136. package/dist/theme-provider/index.mjs +1 -0
  137. package/dist/time-picker/index.cjs +2 -0
  138. package/dist/time-picker/index.d.mts +32 -0
  139. package/dist/time-picker/index.d.ts +32 -0
  140. package/dist/time-picker/index.mjs +2 -0
  141. package/dist/toaster/index.cjs +1 -0
  142. package/dist/toaster/index.d.mts +28 -0
  143. package/dist/toaster/index.d.ts +28 -0
  144. package/dist/toaster/index.mjs +1 -0
  145. package/dist/tooltip/index.cjs +1 -0
  146. package/dist/tooltip/index.d.mts +7 -0
  147. package/dist/tooltip/index.d.ts +7 -0
  148. package/dist/tooltip/index.mjs +1 -0
  149. package/package.json +56 -54
@@ -0,0 +1,27 @@
1
+ import { ButtonHTMLAttributes, ReactNode } from 'react';
2
+ import { T as TooltipPlacement } from './Tooltip.types-PbUasE3C.js';
3
+
4
+ type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger' | 'success' | 'warning' | 'info';
5
+ type ButtonSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
6
+ interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'prefix'> {
7
+ /** The variant style of the button */
8
+ variant?: ButtonVariant;
9
+ /** The size of the button */
10
+ size?: ButtonSize;
11
+ /** Whether the button should take up the full width of its container */
12
+ fullWidth?: boolean;
13
+ /** Whether the button is currently in a loading state */
14
+ isLoading?: boolean;
15
+ /** Optional text to display alongside the spinner when loading */
16
+ loadingText?: string;
17
+ /** An icon element to display before the button content */
18
+ leftIcon?: ReactNode;
19
+ /** An icon element to display after the button content */
20
+ rightIcon?: ReactNode;
21
+ /** Optional tooltip text or element to display on hover */
22
+ tooltip?: ReactNode;
23
+ /** Preferred placement of the tooltip relative to the button */
24
+ tooltipPlacement?: TooltipPlacement;
25
+ }
26
+
27
+ export type { ButtonProps as B, ButtonSize as a, ButtonVariant as b };
@@ -0,0 +1,27 @@
1
+ import { ButtonHTMLAttributes, ReactNode } from 'react';
2
+ import { T as TooltipPlacement } from './Tooltip.types-PbUasE3C.mjs';
3
+
4
+ type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger' | 'success' | 'warning' | 'info';
5
+ type ButtonSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
6
+ interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'prefix'> {
7
+ /** The variant style of the button */
8
+ variant?: ButtonVariant;
9
+ /** The size of the button */
10
+ size?: ButtonSize;
11
+ /** Whether the button should take up the full width of its container */
12
+ fullWidth?: boolean;
13
+ /** Whether the button is currently in a loading state */
14
+ isLoading?: boolean;
15
+ /** Optional text to display alongside the spinner when loading */
16
+ loadingText?: string;
17
+ /** An icon element to display before the button content */
18
+ leftIcon?: ReactNode;
19
+ /** An icon element to display after the button content */
20
+ rightIcon?: ReactNode;
21
+ /** Optional tooltip text or element to display on hover */
22
+ tooltip?: ReactNode;
23
+ /** Preferred placement of the tooltip relative to the button */
24
+ tooltipPlacement?: TooltipPlacement;
25
+ }
26
+
27
+ export type { ButtonProps as B, ButtonSize as a, ButtonVariant as b };
@@ -0,0 +1,32 @@
1
+ import { InputHTMLAttributes, ReactNode } from 'react';
2
+
3
+ type TextInputVariant = 'default' | 'filled' | 'flushed' | 'unstyled';
4
+ type TextInputSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
5
+ type TextInputState = 'default' | 'error' | 'success' | 'warning';
6
+ interface TextInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix'> {
7
+ label?: string;
8
+ required?: boolean;
9
+ helperText?: string;
10
+ errorMessage?: string;
11
+ successMessage?: string;
12
+ warningMessage?: string;
13
+ variant?: TextInputVariant;
14
+ size?: TextInputSize;
15
+ state?: TextInputState;
16
+ fullWidth?: boolean;
17
+ leftElement?: ReactNode;
18
+ rightElement?: ReactNode;
19
+ prefix?: ReactNode;
20
+ suffix?: ReactNode;
21
+ wrapperClassName?: string;
22
+ inputGroupClassName?: string;
23
+ inputClassName?: string;
24
+ labelClassName?: string;
25
+ helperClassName?: string;
26
+ clearable?: boolean;
27
+ isLoading?: boolean;
28
+ multiline?: boolean;
29
+ rows?: number;
30
+ }
31
+
32
+ export type { TextInputProps as T, TextInputSize as a, TextInputState as b, TextInputVariant as c };
@@ -0,0 +1,32 @@
1
+ import { InputHTMLAttributes, ReactNode } from 'react';
2
+
3
+ type TextInputVariant = 'default' | 'filled' | 'flushed' | 'unstyled';
4
+ type TextInputSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
5
+ type TextInputState = 'default' | 'error' | 'success' | 'warning';
6
+ interface TextInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix'> {
7
+ label?: string;
8
+ required?: boolean;
9
+ helperText?: string;
10
+ errorMessage?: string;
11
+ successMessage?: string;
12
+ warningMessage?: string;
13
+ variant?: TextInputVariant;
14
+ size?: TextInputSize;
15
+ state?: TextInputState;
16
+ fullWidth?: boolean;
17
+ leftElement?: ReactNode;
18
+ rightElement?: ReactNode;
19
+ prefix?: ReactNode;
20
+ suffix?: ReactNode;
21
+ wrapperClassName?: string;
22
+ inputGroupClassName?: string;
23
+ inputClassName?: string;
24
+ labelClassName?: string;
25
+ helperClassName?: string;
26
+ clearable?: boolean;
27
+ isLoading?: boolean;
28
+ multiline?: boolean;
29
+ rows?: number;
30
+ }
31
+
32
+ export type { TextInputProps as T, TextInputSize as a, TextInputState as b, TextInputVariant as c };
@@ -0,0 +1,36 @@
1
+ import { ReactNode } from 'react';
2
+
3
+ type TooltipPlacement = 'top' | 'bottom' | 'left' | 'right';
4
+ type TooltipTrigger = 'hover' | 'click' | 'focus';
5
+ type TooltipSize = 'sm' | 'md' | 'lg';
6
+ type TooltipVariant = 'dark' | 'primary' | 'light';
7
+ interface TooltipProps {
8
+ /** The content shown inside the tooltip bubble. */
9
+ content: ReactNode;
10
+ /** The element the tooltip is anchored to. */
11
+ children?: ReactNode;
12
+ /** Preferred placement relative to the trigger. Defaults to 'top'. */
13
+ placement?: TooltipPlacement;
14
+ /** What interaction opens the tooltip. Defaults to 'hover'. */
15
+ trigger?: TooltipTrigger;
16
+ /** Delay in ms before showing (hover only). Defaults to 0. */
17
+ showDelay?: number;
18
+ /** Delay in ms before hiding (hover only). Defaults to 100. */
19
+ hideDelay?: number;
20
+ /** Size / padding of the tooltip bubble. Defaults to 'md'. */
21
+ size?: TooltipSize;
22
+ /** Visual style of the tooltip bubble. Defaults to 'dark'. */
23
+ variant?: TooltipVariant;
24
+ /** When true the tooltip is always visible (controlled). */
25
+ open?: boolean;
26
+ /** When true the tooltip is disabled and will never show. */
27
+ disabled?: boolean;
28
+ /** Max width of the tooltip bubble in px. Defaults to 240. */
29
+ maxWidth?: number;
30
+ /** Additional class for the tooltip bubble. */
31
+ className?: string;
32
+ /** Additional class for the tooltip wrapper span. */
33
+ wrapperClassName?: string;
34
+ }
35
+
36
+ export type { TooltipPlacement as T, TooltipProps as a, TooltipSize as b, TooltipTrigger as c, TooltipVariant as d };
@@ -0,0 +1,36 @@
1
+ import { ReactNode } from 'react';
2
+
3
+ type TooltipPlacement = 'top' | 'bottom' | 'left' | 'right';
4
+ type TooltipTrigger = 'hover' | 'click' | 'focus';
5
+ type TooltipSize = 'sm' | 'md' | 'lg';
6
+ type TooltipVariant = 'dark' | 'primary' | 'light';
7
+ interface TooltipProps {
8
+ /** The content shown inside the tooltip bubble. */
9
+ content: ReactNode;
10
+ /** The element the tooltip is anchored to. */
11
+ children?: ReactNode;
12
+ /** Preferred placement relative to the trigger. Defaults to 'top'. */
13
+ placement?: TooltipPlacement;
14
+ /** What interaction opens the tooltip. Defaults to 'hover'. */
15
+ trigger?: TooltipTrigger;
16
+ /** Delay in ms before showing (hover only). Defaults to 0. */
17
+ showDelay?: number;
18
+ /** Delay in ms before hiding (hover only). Defaults to 100. */
19
+ hideDelay?: number;
20
+ /** Size / padding of the tooltip bubble. Defaults to 'md'. */
21
+ size?: TooltipSize;
22
+ /** Visual style of the tooltip bubble. Defaults to 'dark'. */
23
+ variant?: TooltipVariant;
24
+ /** When true the tooltip is always visible (controlled). */
25
+ open?: boolean;
26
+ /** When true the tooltip is disabled and will never show. */
27
+ disabled?: boolean;
28
+ /** Max width of the tooltip bubble in px. Defaults to 240. */
29
+ maxWidth?: number;
30
+ /** Additional class for the tooltip bubble. */
31
+ className?: string;
32
+ /** Additional class for the tooltip wrapper span. */
33
+ wrapperClassName?: string;
34
+ }
35
+
36
+ export type { TooltipPlacement as T, TooltipProps as a, TooltipSize as b, TooltipTrigger as c, TooltipVariant as d };
@@ -0,0 +1 @@
1
+ 'use strict';var react=require('react'),solid=require('@heroicons/react/24/solid'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function e(...a){return tailwindMerge.twMerge(clsx.clsx(a))}var E={"2xs":"w-4 h-4 text-[10px]",xs:"w-6 h-6 text-xs",sm:"w-8 h-8 text-sm",md:"w-10 h-10 text-base",lg:"w-12 h-12 text-lg",xl:"w-14 h-14 text-xl","2xl":"w-16 h-16 text-2xl","3xl":"w-20 h-20 text-3xl","4xl":"w-24 h-24 text-4xl"},V={circle:"rounded-full",square:"rounded-none",rounded:"rounded-md"},P={default:"ring-0",error:"ring-2 ring-error ring-offset-2 ring-offset-surface",success:"ring-2 ring-success ring-offset-2 ring-offset-surface",warning:"ring-2 ring-warning ring-offset-2 ring-offset-surface",offline:"ring-2 ring-border ring-offset-2 ring-offset-surface",online:"ring-2 ring-success ring-offset-2 ring-offset-surface",busy:"ring-2 ring-error ring-offset-2 ring-offset-surface",away:"ring-2 ring-warning ring-offset-2 ring-offset-surface"},j={default:"hidden",error:"bg-error",success:"bg-success",warning:"bg-warning",offline:"bg-border",online:"bg-success",busy:"bg-error",away:"bg-warning"};function u(a){let r=a.trim().split(/\s+/);if(r.length===0)return "";if(r.length===1)return r[0]?.substring(0,2).toUpperCase()??"";let o=r[0],s=r[r.length-1];return `${o?.[0]??""}${s?.[0]??""}`.toUpperCase()}var d=react.forwardRef(function({size:r="md",variant:o="circle",state:s="default",stateType:g="border",fallback:n,alt:i,src:f,className:x,containerClassName:m,fallbackClassName:c,...p},w){let[h,v]=react.useState(false),b=typeof f!="string"||f.length===0||h,l="";typeof n=="string"?l=u(n):typeof i=="string"&&i.length>0&&(l=u(i));let A=typeof n=="string"||typeof n>"u"?jsxRuntime.jsx("span",{className:e("flex h-full w-full items-center justify-center font-bold text-text-muted",c),children:l||jsxRuntime.jsx(solid.UserIcon,{className:"h-3/5 w-3/5 text-text-muted/40","aria-hidden":"true"})}):jsxRuntime.jsx("span",{className:e("flex h-full w-full items-center justify-center",c),children:n});return jsxRuntime.jsxs("div",{className:e("relative inline-block",m),children:[jsxRuntime.jsx("div",{ref:w,className:e("relative inline-flex shrink-0 items-center justify-center overflow-hidden bg-surface-secondary",E[r],V[o],g==="border"?P[s]:"",x),children:b?A:jsxRuntime.jsx("img",{src:f,alt:i,onError:()=>{v(true);},className:"h-full w-full object-cover",...p})}),g==="badge"&&s!=="default"&&jsxRuntime.jsx("span",{className:e("absolute bottom-0 right-0 block rounded-full border-2 border-surface",j[s],r==="2xs"||r==="xs"?"h-2 w-2":r==="sm"?"h-2.5 w-2.5":r==="md"?"h-3 w-3":r==="lg"?"h-3.5 w-3.5":r==="xl"?"h-4 w-4":r==="2xl"?"h-4.5 w-4.5":r==="3xl"?"h-5 w-5":"h-6 w-6",o==="square"?"-translate-x-1/2 -translate-y-1/2":"")})]})});d.displayName="Avatar";exports.Avatar=d;
@@ -0,0 +1,29 @@
1
+ import { ImgHTMLAttributes, ReactNode } from 'react';
2
+
3
+ type AvatarSize = '2xs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl';
4
+ type AvatarVariant = 'circle' | 'square' | 'rounded';
5
+ type AvatarState = 'default' | 'error' | 'success' | 'warning' | 'offline' | 'online' | 'busy' | 'away';
6
+ interface AvatarProps extends Omit<ImgHTMLAttributes<HTMLImageElement>, 'size'> {
7
+ /** Size of the avatar */
8
+ size?: AvatarSize;
9
+ /** Shape variant of the avatar */
10
+ variant?: AvatarVariant;
11
+ /** State indicator for the avatar (e.g. online status or validation) */
12
+ state?: AvatarState;
13
+ /** Determines if the state indicator should be a border or a dot (badge). Default is border. */
14
+ stateType?: 'border' | 'badge';
15
+ /** Fallback content when image is not provided or fails to load. Can be initials string or a ReactNode */
16
+ fallback?: ReactNode;
17
+ /** Alt text for the image, also used to generate initials if fallback string is not provided */
18
+ alt?: string;
19
+ /** Image source URL */
20
+ src?: string;
21
+ /** Class name applied to the outer container */
22
+ containerClassName?: string;
23
+ /** Class name applied to the fallback element */
24
+ fallbackClassName?: string;
25
+ }
26
+
27
+ declare const Avatar: React.ForwardRefExoticComponent<AvatarProps & React.RefAttributes<HTMLDivElement>>;
28
+
29
+ export { Avatar, type AvatarProps, type AvatarSize, type AvatarState, type AvatarVariant };
@@ -0,0 +1,29 @@
1
+ import { ImgHTMLAttributes, ReactNode } from 'react';
2
+
3
+ type AvatarSize = '2xs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl';
4
+ type AvatarVariant = 'circle' | 'square' | 'rounded';
5
+ type AvatarState = 'default' | 'error' | 'success' | 'warning' | 'offline' | 'online' | 'busy' | 'away';
6
+ interface AvatarProps extends Omit<ImgHTMLAttributes<HTMLImageElement>, 'size'> {
7
+ /** Size of the avatar */
8
+ size?: AvatarSize;
9
+ /** Shape variant of the avatar */
10
+ variant?: AvatarVariant;
11
+ /** State indicator for the avatar (e.g. online status or validation) */
12
+ state?: AvatarState;
13
+ /** Determines if the state indicator should be a border or a dot (badge). Default is border. */
14
+ stateType?: 'border' | 'badge';
15
+ /** Fallback content when image is not provided or fails to load. Can be initials string or a ReactNode */
16
+ fallback?: ReactNode;
17
+ /** Alt text for the image, also used to generate initials if fallback string is not provided */
18
+ alt?: string;
19
+ /** Image source URL */
20
+ src?: string;
21
+ /** Class name applied to the outer container */
22
+ containerClassName?: string;
23
+ /** Class name applied to the fallback element */
24
+ fallbackClassName?: string;
25
+ }
26
+
27
+ declare const Avatar: React.ForwardRefExoticComponent<AvatarProps & React.RefAttributes<HTMLDivElement>>;
28
+
29
+ export { Avatar, type AvatarProps, type AvatarSize, type AvatarState, type AvatarVariant };
@@ -0,0 +1 @@
1
+ import {forwardRef,useState}from'react';import {UserIcon}from'@heroicons/react/24/solid';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx,jsxs}from'react/jsx-runtime';function e(...a){return twMerge(clsx(a))}var E={"2xs":"w-4 h-4 text-[10px]",xs:"w-6 h-6 text-xs",sm:"w-8 h-8 text-sm",md:"w-10 h-10 text-base",lg:"w-12 h-12 text-lg",xl:"w-14 h-14 text-xl","2xl":"w-16 h-16 text-2xl","3xl":"w-20 h-20 text-3xl","4xl":"w-24 h-24 text-4xl"},V={circle:"rounded-full",square:"rounded-none",rounded:"rounded-md"},P={default:"ring-0",error:"ring-2 ring-error ring-offset-2 ring-offset-surface",success:"ring-2 ring-success ring-offset-2 ring-offset-surface",warning:"ring-2 ring-warning ring-offset-2 ring-offset-surface",offline:"ring-2 ring-border ring-offset-2 ring-offset-surface",online:"ring-2 ring-success ring-offset-2 ring-offset-surface",busy:"ring-2 ring-error ring-offset-2 ring-offset-surface",away:"ring-2 ring-warning ring-offset-2 ring-offset-surface"},j={default:"hidden",error:"bg-error",success:"bg-success",warning:"bg-warning",offline:"bg-border",online:"bg-success",busy:"bg-error",away:"bg-warning"};function u(a){let r=a.trim().split(/\s+/);if(r.length===0)return "";if(r.length===1)return r[0]?.substring(0,2).toUpperCase()??"";let o=r[0],s=r[r.length-1];return `${o?.[0]??""}${s?.[0]??""}`.toUpperCase()}var d=forwardRef(function({size:r="md",variant:o="circle",state:s="default",stateType:g="border",fallback:n,alt:i,src:f,className:x,containerClassName:m,fallbackClassName:c,...p},w){let[h,v]=useState(false),b=typeof f!="string"||f.length===0||h,l="";typeof n=="string"?l=u(n):typeof i=="string"&&i.length>0&&(l=u(i));let A=typeof n=="string"||typeof n>"u"?jsx("span",{className:e("flex h-full w-full items-center justify-center font-bold text-text-muted",c),children:l||jsx(UserIcon,{className:"h-3/5 w-3/5 text-text-muted/40","aria-hidden":"true"})}):jsx("span",{className:e("flex h-full w-full items-center justify-center",c),children:n});return jsxs("div",{className:e("relative inline-block",m),children:[jsx("div",{ref:w,className:e("relative inline-flex shrink-0 items-center justify-center overflow-hidden bg-surface-secondary",E[r],V[o],g==="border"?P[s]:"",x),children:b?A:jsx("img",{src:f,alt:i,onError:()=>{v(true);},className:"h-full w-full object-cover",...p})}),g==="badge"&&s!=="default"&&jsx("span",{className:e("absolute bottom-0 right-0 block rounded-full border-2 border-surface",j[s],r==="2xs"||r==="xs"?"h-2 w-2":r==="sm"?"h-2.5 w-2.5":r==="md"?"h-3 w-3":r==="lg"?"h-3.5 w-3.5":r==="xl"?"h-4 w-4":r==="2xl"?"h-4.5 w-4.5":r==="3xl"?"h-5 w-5":"h-6 w-6",o==="square"?"-translate-x-1/2 -translate-y-1/2":"")})]})});d.displayName="Avatar";export{d as Avatar};
@@ -0,0 +1 @@
1
+ 'use strict';var solid=require('@heroicons/react/20/solid'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function t(...e){return tailwindMerge.twMerge(clsx.clsx(e))}var z={primary:"bg-primary text-text-inverse shadow-sm shadow-primary/30",secondary:"bg-secondary text-text shadow-sm shadow-secondary/30",success:"bg-success text-text-inverse shadow-sm shadow-success/30",error:"bg-error text-text-inverse shadow-sm shadow-error/30",warning:"bg-warning text-text-inverse shadow-sm shadow-warning/30",info:"bg-info text-text-inverse shadow-sm shadow-info/30",accent:"bg-accent text-text-inverse shadow-sm shadow-accent/30",gray:"bg-surface-secondary text-text-secondary shadow-sm",blue:"bg-primary text-text-inverse shadow-sm shadow-primary/30",green:"bg-success text-text-inverse shadow-sm shadow-success/30",red:"bg-error text-text-inverse shadow-sm shadow-error/30",yellow:"bg-warning text-text-inverse shadow-sm shadow-warning/30",purple:"bg-purple-600 text-white shadow-sm shadow-purple-500/30",pink:"bg-pink-500 text-white shadow-sm shadow-pink-500/30",orange:"bg-orange-500 text-white shadow-sm shadow-orange-500/30",cyan:"bg-cyan-500 text-white shadow-sm shadow-cyan-500/30",teal:"bg-teal-500 text-white shadow-sm shadow-teal-500/30",indigo:"bg-indigo-500 text-white shadow-sm shadow-indigo-500/30"},h={primary:"bg-primary/10 text-primary ring-1 ring-inset ring-primary/20",secondary:"bg-secondary/10 text-secondary ring-1 ring-inset ring-secondary/20",success:"bg-success/10 text-success ring-1 ring-inset ring-success/20",error:"bg-error/10 text-error ring-1 ring-inset ring-error/20",warning:"bg-warning/10 text-warning ring-1 ring-inset ring-warning/20",info:"bg-info/10 text-info ring-1 ring-inset ring-info/20",accent:"bg-accent/10 text-accent ring-1 ring-inset ring-accent/20",gray:"bg-surface-secondary/60 text-text-secondary ring-1 ring-inset ring-border/40",blue:"bg-primary/10 text-primary ring-1 ring-inset ring-primary/20",green:"bg-success/10 text-success ring-1 ring-inset ring-success/20",red:"bg-error/10 text-error ring-1 ring-inset ring-error/20",yellow:"bg-warning/10 text-warning ring-1 ring-inset ring-warning/20",purple:"bg-purple-500/10 text-purple-500 ring-1 ring-inset ring-purple-500/25",pink:"bg-pink-500/10 text-pink-500 ring-1 ring-inset ring-pink-500/25",orange:"bg-orange-500/10 text-orange-500 ring-1 ring-inset ring-orange-500/25",cyan:"bg-cyan-500/10 text-cyan-500 ring-1 ring-inset ring-cyan-500/25",teal:"bg-teal-500/10 text-teal-500 ring-1 ring-inset ring-teal-500/25",indigo:"bg-indigo-500/10 text-indigo-500 ring-1 ring-inset ring-indigo-500/25"},V={primary:"border border-primary/60 text-primary bg-transparent",secondary:"border border-secondary/60 text-secondary bg-transparent",success:"border border-success/60 text-success bg-transparent",error:"border border-error/60 text-error bg-transparent",warning:"border border-warning/60 text-warning bg-transparent",info:"border border-info/60 text-info bg-transparent",accent:"border border-accent/60 text-accent bg-transparent",gray:"border border-border text-text-secondary bg-transparent",blue:"border border-primary/60 text-primary bg-transparent",green:"border border-success/60 text-success bg-transparent",red:"border border-error/60 text-error bg-transparent",yellow:"border border-warning/60 text-warning bg-transparent",purple:"border border-purple-500/60 text-purple-500 bg-transparent",pink:"border border-pink-500/60 text-pink-500 bg-transparent",orange:"border border-orange-500/60 text-orange-500 bg-transparent",cyan:"border border-cyan-500/60 text-cyan-500 bg-transparent",teal:"border border-teal-500/60 text-teal-500 bg-transparent",indigo:"border border-indigo-500/60 text-indigo-500 bg-transparent"},M={primary:"bg-gradient-to-r from-blue-500 to-indigo-600 text-white shadow-sm shadow-blue-500/30",secondary:"bg-gradient-to-r from-slate-500 to-slate-700 text-white shadow-sm shadow-slate-500/30",success:"bg-gradient-to-r from-green-400 to-emerald-600 text-white shadow-sm shadow-green-500/30",error:"bg-gradient-to-r from-red-500 to-rose-600 text-white shadow-sm shadow-red-500/30",warning:"bg-gradient-to-r from-amber-400 to-orange-500 text-white shadow-sm shadow-amber-500/30",info:"bg-gradient-to-r from-sky-400 to-blue-600 text-white shadow-sm shadow-blue-500/30",accent:"bg-gradient-to-r from-cyan-400 to-sky-600 text-white shadow-sm shadow-cyan-500/30",gray:"bg-gradient-to-r from-slate-400 to-slate-500 text-white shadow-sm",blue:"bg-gradient-to-r from-blue-500 to-indigo-600 text-white shadow-sm shadow-blue-500/30",green:"bg-gradient-to-r from-green-400 to-emerald-600 text-white shadow-sm shadow-green-500/30",red:"bg-gradient-to-r from-red-500 to-rose-600 text-white shadow-sm shadow-red-500/30",yellow:"bg-gradient-to-r from-amber-400 to-orange-500 text-white shadow-sm shadow-amber-500/30",purple:"bg-gradient-to-r from-purple-500 to-violet-600 text-white shadow-sm shadow-purple-500/30",pink:"bg-gradient-to-r from-pink-500 to-fuchsia-600 text-white shadow-sm shadow-pink-500/30",orange:"bg-gradient-to-r from-orange-400 to-red-500 text-white shadow-sm shadow-orange-500/30",cyan:"bg-gradient-to-r from-cyan-400 to-sky-500 text-white shadow-sm shadow-cyan-500/30",teal:"bg-gradient-to-r from-teal-400 to-cyan-500 text-white shadow-sm shadow-teal-500/30",indigo:"bg-gradient-to-r from-indigo-500 to-purple-600 text-white shadow-sm shadow-indigo-500/30"},p={primary:"bg-primary",secondary:"bg-secondary",success:"bg-success",error:"bg-error",warning:"bg-warning",info:"bg-info",accent:"bg-accent",gray:"bg-slate-400",blue:"bg-primary",green:"bg-success",red:"bg-error",yellow:"bg-warning",purple:"bg-purple-500",pink:"bg-pink-500",orange:"bg-orange-500",cyan:"bg-cyan-500",teal:"bg-teal-500",indigo:"bg-indigo-500"},P={solid:e=>z[e],soft:e=>h[e],outline:e=>V[e],gradient:e=>M[e]},X={xs:"px-1.5 py-px text-[10px] leading-4 gap-1",sm:"px-2 py-0.5 text-xs leading-4 gap-1",md:"px-2.5 py-0.5 text-xs leading-5 gap-1",lg:"px-3 py-1 text-sm leading-5 gap-1.5"},E={xs:"w-1.5 h-1.5",sm:"w-1.5 h-1.5",md:"w-2 h-2",lg:"w-2.5 h-2.5"},q={xs:"w-3 h-3",sm:"w-3 h-3",md:"w-3.5 h-3.5",lg:"w-4 h-4"},D={rounded:"rounded-md",pill:"rounded-full",square:"rounded-none"};function I(){return jsxRuntime.jsx(solid.XMarkIcon,{className:"w-full h-full","aria-hidden":"true"})}function F({children:e,variant:d="soft",color:n="blue",size:s="md",shape:m="pill",icon:c,trailingIcon:l,onRemove:o,pulse:x=false,count:i,maxCount:b=99,uppercase:u=false,tracking:y=false,as:g="span",className:f,...k}){let a=d==="dot",C=a?h[n]:P[d](n),B=i!==void 0?i>b?`${b.toString()}+`:String(i):null;return jsxRuntime.jsxs(g,{className:t("inline-flex items-center font-medium leading-none select-none whitespace-nowrap","transition-all duration-150 ease-out",X[s],D[m],C,u&&"uppercase",y&&"tracking-wide",(g==="button"||g==="a")&&"cursor-pointer",f),...k,children:[a&&jsxRuntime.jsxs("span",{className:"relative inline-flex shrink-0","aria-hidden":"true",children:[x&&jsxRuntime.jsx("span",{className:t("absolute inset-0 rounded-full animate-ping opacity-60",p[n])}),jsxRuntime.jsx("span",{className:t("rounded-full shrink-0",E[s],p[n])})]}),!a&&c!=null&&jsxRuntime.jsx("span",{"aria-hidden":"true",className:"shrink-0 inline-flex",children:c}),B??e,!a&&l!=null&&o==null&&jsxRuntime.jsx("span",{"aria-hidden":"true",className:"shrink-0 inline-flex",children:l}),o!=null&&jsxRuntime.jsx("button",{type:"button","aria-label":"Remove",onClick:v=>{v.stopPropagation(),o();},className:t("inline-flex items-center justify-center rounded-full shrink-0 -mr-0.5","opacity-70 hover:opacity-100","hover:bg-black/10 dark:hover:bg-white/15","transition-all duration-100",q[s]),children:jsxRuntime.jsx(I,{})})]})}exports.Badge=F;
@@ -0,0 +1,57 @@
1
+ import { ReactNode, ElementType } from 'react';
2
+
3
+ /** Visual style of the badge. */
4
+ type BadgeVariant = 'solid' | 'soft' | 'outline' | 'dot' | 'gradient';
5
+ /** Color palette for the badge. */
6
+ type BadgeColor = 'primary' | 'secondary' | 'success' | 'error' | 'warning' | 'info' | 'accent' | 'gray' | 'blue' | 'green' | 'red' | 'yellow' | 'purple' | 'pink' | 'orange' | 'cyan' | 'teal' | 'indigo';
7
+ /** Size token for the badge. */
8
+ type BadgeSize = 'xs' | 'sm' | 'md' | 'lg';
9
+ /** Border-radius shape. */
10
+ type BadgeShape = 'rounded' | 'pill' | 'square';
11
+ interface BadgeProps {
12
+ /** Text or content inside the badge. */
13
+ children?: ReactNode;
14
+ /** Visual style. Defaults to `'soft'`. */
15
+ variant?: BadgeVariant;
16
+ /** Color scheme. Defaults to `'blue'`. */
17
+ color?: BadgeColor;
18
+ /** Size. Defaults to `'md'`. */
19
+ size?: BadgeSize;
20
+ /** Border-radius shape. Defaults to `'pill'`. */
21
+ shape?: BadgeShape;
22
+ /** Optional icon rendered before the label. */
23
+ icon?: ReactNode;
24
+ /** Optional icon rendered after the label (before the remove button). */
25
+ trailingIcon?: ReactNode;
26
+ /** When provided, renders a remove (×) button and calls this on click. */
27
+ onRemove?: () => void;
28
+ /** Adds a pulsing animation to the dot indicator (only works with `variant="dot"`). */
29
+ pulse?: boolean;
30
+ /** Renders a numeric count instead of (or alongside) children. When > maxCount, shows `{maxCount}+`. */
31
+ count?: number;
32
+ /** Maximum count before the overflow label is shown. Defaults to 99. */
33
+ maxCount?: number;
34
+ /** Uppercases the badge text. */
35
+ uppercase?: boolean;
36
+ /** Adds a soft letter-spacing for label readability. */
37
+ tracking?: boolean;
38
+ /** Polymorphic element override (e.g. `'a'`, `'button'`, `'li'`). Defaults to `'span'`. */
39
+ as?: ElementType;
40
+ /** Additional class name. */
41
+ className?: string;
42
+ /** Any other HTML / element props (e.g. `href`, `onClick`, `aria-*`). */
43
+ [key: string]: unknown;
44
+ }
45
+
46
+ /**
47
+ * `Badge` — a highly composable inline label component.
48
+ *
49
+ * @example
50
+ * <Badge color="green" variant="soft">Active</Badge>
51
+ * <Badge color="red" variant="gradient" size="lg" shape="rounded">Critical</Badge>
52
+ * <Badge color="blue" variant="dot" pulse>Live</Badge>
53
+ * <Badge count={42} color="red" variant="solid" shape="pill" />
54
+ */
55
+ declare function Badge({ children, variant, color, size, shape, icon, trailingIcon, onRemove, pulse, count, maxCount, uppercase, tracking, as: Tag, className, ...rest }: BadgeProps): React.JSX.Element;
56
+
57
+ export { Badge, type BadgeColor, type BadgeProps, type BadgeShape, type BadgeSize, type BadgeVariant };
@@ -0,0 +1,57 @@
1
+ import { ReactNode, ElementType } from 'react';
2
+
3
+ /** Visual style of the badge. */
4
+ type BadgeVariant = 'solid' | 'soft' | 'outline' | 'dot' | 'gradient';
5
+ /** Color palette for the badge. */
6
+ type BadgeColor = 'primary' | 'secondary' | 'success' | 'error' | 'warning' | 'info' | 'accent' | 'gray' | 'blue' | 'green' | 'red' | 'yellow' | 'purple' | 'pink' | 'orange' | 'cyan' | 'teal' | 'indigo';
7
+ /** Size token for the badge. */
8
+ type BadgeSize = 'xs' | 'sm' | 'md' | 'lg';
9
+ /** Border-radius shape. */
10
+ type BadgeShape = 'rounded' | 'pill' | 'square';
11
+ interface BadgeProps {
12
+ /** Text or content inside the badge. */
13
+ children?: ReactNode;
14
+ /** Visual style. Defaults to `'soft'`. */
15
+ variant?: BadgeVariant;
16
+ /** Color scheme. Defaults to `'blue'`. */
17
+ color?: BadgeColor;
18
+ /** Size. Defaults to `'md'`. */
19
+ size?: BadgeSize;
20
+ /** Border-radius shape. Defaults to `'pill'`. */
21
+ shape?: BadgeShape;
22
+ /** Optional icon rendered before the label. */
23
+ icon?: ReactNode;
24
+ /** Optional icon rendered after the label (before the remove button). */
25
+ trailingIcon?: ReactNode;
26
+ /** When provided, renders a remove (×) button and calls this on click. */
27
+ onRemove?: () => void;
28
+ /** Adds a pulsing animation to the dot indicator (only works with `variant="dot"`). */
29
+ pulse?: boolean;
30
+ /** Renders a numeric count instead of (or alongside) children. When > maxCount, shows `{maxCount}+`. */
31
+ count?: number;
32
+ /** Maximum count before the overflow label is shown. Defaults to 99. */
33
+ maxCount?: number;
34
+ /** Uppercases the badge text. */
35
+ uppercase?: boolean;
36
+ /** Adds a soft letter-spacing for label readability. */
37
+ tracking?: boolean;
38
+ /** Polymorphic element override (e.g. `'a'`, `'button'`, `'li'`). Defaults to `'span'`. */
39
+ as?: ElementType;
40
+ /** Additional class name. */
41
+ className?: string;
42
+ /** Any other HTML / element props (e.g. `href`, `onClick`, `aria-*`). */
43
+ [key: string]: unknown;
44
+ }
45
+
46
+ /**
47
+ * `Badge` — a highly composable inline label component.
48
+ *
49
+ * @example
50
+ * <Badge color="green" variant="soft">Active</Badge>
51
+ * <Badge color="red" variant="gradient" size="lg" shape="rounded">Critical</Badge>
52
+ * <Badge color="blue" variant="dot" pulse>Live</Badge>
53
+ * <Badge count={42} color="red" variant="solid" shape="pill" />
54
+ */
55
+ declare function Badge({ children, variant, color, size, shape, icon, trailingIcon, onRemove, pulse, count, maxCount, uppercase, tracking, as: Tag, className, ...rest }: BadgeProps): React.JSX.Element;
56
+
57
+ export { Badge, type BadgeColor, type BadgeProps, type BadgeShape, type BadgeSize, type BadgeVariant };
@@ -0,0 +1 @@
1
+ import {XMarkIcon}from'@heroicons/react/20/solid';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsxs,jsx}from'react/jsx-runtime';function t(...e){return twMerge(clsx(e))}var z={primary:"bg-primary text-text-inverse shadow-sm shadow-primary/30",secondary:"bg-secondary text-text shadow-sm shadow-secondary/30",success:"bg-success text-text-inverse shadow-sm shadow-success/30",error:"bg-error text-text-inverse shadow-sm shadow-error/30",warning:"bg-warning text-text-inverse shadow-sm shadow-warning/30",info:"bg-info text-text-inverse shadow-sm shadow-info/30",accent:"bg-accent text-text-inverse shadow-sm shadow-accent/30",gray:"bg-surface-secondary text-text-secondary shadow-sm",blue:"bg-primary text-text-inverse shadow-sm shadow-primary/30",green:"bg-success text-text-inverse shadow-sm shadow-success/30",red:"bg-error text-text-inverse shadow-sm shadow-error/30",yellow:"bg-warning text-text-inverse shadow-sm shadow-warning/30",purple:"bg-purple-600 text-white shadow-sm shadow-purple-500/30",pink:"bg-pink-500 text-white shadow-sm shadow-pink-500/30",orange:"bg-orange-500 text-white shadow-sm shadow-orange-500/30",cyan:"bg-cyan-500 text-white shadow-sm shadow-cyan-500/30",teal:"bg-teal-500 text-white shadow-sm shadow-teal-500/30",indigo:"bg-indigo-500 text-white shadow-sm shadow-indigo-500/30"},h={primary:"bg-primary/10 text-primary ring-1 ring-inset ring-primary/20",secondary:"bg-secondary/10 text-secondary ring-1 ring-inset ring-secondary/20",success:"bg-success/10 text-success ring-1 ring-inset ring-success/20",error:"bg-error/10 text-error ring-1 ring-inset ring-error/20",warning:"bg-warning/10 text-warning ring-1 ring-inset ring-warning/20",info:"bg-info/10 text-info ring-1 ring-inset ring-info/20",accent:"bg-accent/10 text-accent ring-1 ring-inset ring-accent/20",gray:"bg-surface-secondary/60 text-text-secondary ring-1 ring-inset ring-border/40",blue:"bg-primary/10 text-primary ring-1 ring-inset ring-primary/20",green:"bg-success/10 text-success ring-1 ring-inset ring-success/20",red:"bg-error/10 text-error ring-1 ring-inset ring-error/20",yellow:"bg-warning/10 text-warning ring-1 ring-inset ring-warning/20",purple:"bg-purple-500/10 text-purple-500 ring-1 ring-inset ring-purple-500/25",pink:"bg-pink-500/10 text-pink-500 ring-1 ring-inset ring-pink-500/25",orange:"bg-orange-500/10 text-orange-500 ring-1 ring-inset ring-orange-500/25",cyan:"bg-cyan-500/10 text-cyan-500 ring-1 ring-inset ring-cyan-500/25",teal:"bg-teal-500/10 text-teal-500 ring-1 ring-inset ring-teal-500/25",indigo:"bg-indigo-500/10 text-indigo-500 ring-1 ring-inset ring-indigo-500/25"},V={primary:"border border-primary/60 text-primary bg-transparent",secondary:"border border-secondary/60 text-secondary bg-transparent",success:"border border-success/60 text-success bg-transparent",error:"border border-error/60 text-error bg-transparent",warning:"border border-warning/60 text-warning bg-transparent",info:"border border-info/60 text-info bg-transparent",accent:"border border-accent/60 text-accent bg-transparent",gray:"border border-border text-text-secondary bg-transparent",blue:"border border-primary/60 text-primary bg-transparent",green:"border border-success/60 text-success bg-transparent",red:"border border-error/60 text-error bg-transparent",yellow:"border border-warning/60 text-warning bg-transparent",purple:"border border-purple-500/60 text-purple-500 bg-transparent",pink:"border border-pink-500/60 text-pink-500 bg-transparent",orange:"border border-orange-500/60 text-orange-500 bg-transparent",cyan:"border border-cyan-500/60 text-cyan-500 bg-transparent",teal:"border border-teal-500/60 text-teal-500 bg-transparent",indigo:"border border-indigo-500/60 text-indigo-500 bg-transparent"},M={primary:"bg-gradient-to-r from-blue-500 to-indigo-600 text-white shadow-sm shadow-blue-500/30",secondary:"bg-gradient-to-r from-slate-500 to-slate-700 text-white shadow-sm shadow-slate-500/30",success:"bg-gradient-to-r from-green-400 to-emerald-600 text-white shadow-sm shadow-green-500/30",error:"bg-gradient-to-r from-red-500 to-rose-600 text-white shadow-sm shadow-red-500/30",warning:"bg-gradient-to-r from-amber-400 to-orange-500 text-white shadow-sm shadow-amber-500/30",info:"bg-gradient-to-r from-sky-400 to-blue-600 text-white shadow-sm shadow-blue-500/30",accent:"bg-gradient-to-r from-cyan-400 to-sky-600 text-white shadow-sm shadow-cyan-500/30",gray:"bg-gradient-to-r from-slate-400 to-slate-500 text-white shadow-sm",blue:"bg-gradient-to-r from-blue-500 to-indigo-600 text-white shadow-sm shadow-blue-500/30",green:"bg-gradient-to-r from-green-400 to-emerald-600 text-white shadow-sm shadow-green-500/30",red:"bg-gradient-to-r from-red-500 to-rose-600 text-white shadow-sm shadow-red-500/30",yellow:"bg-gradient-to-r from-amber-400 to-orange-500 text-white shadow-sm shadow-amber-500/30",purple:"bg-gradient-to-r from-purple-500 to-violet-600 text-white shadow-sm shadow-purple-500/30",pink:"bg-gradient-to-r from-pink-500 to-fuchsia-600 text-white shadow-sm shadow-pink-500/30",orange:"bg-gradient-to-r from-orange-400 to-red-500 text-white shadow-sm shadow-orange-500/30",cyan:"bg-gradient-to-r from-cyan-400 to-sky-500 text-white shadow-sm shadow-cyan-500/30",teal:"bg-gradient-to-r from-teal-400 to-cyan-500 text-white shadow-sm shadow-teal-500/30",indigo:"bg-gradient-to-r from-indigo-500 to-purple-600 text-white shadow-sm shadow-indigo-500/30"},p={primary:"bg-primary",secondary:"bg-secondary",success:"bg-success",error:"bg-error",warning:"bg-warning",info:"bg-info",accent:"bg-accent",gray:"bg-slate-400",blue:"bg-primary",green:"bg-success",red:"bg-error",yellow:"bg-warning",purple:"bg-purple-500",pink:"bg-pink-500",orange:"bg-orange-500",cyan:"bg-cyan-500",teal:"bg-teal-500",indigo:"bg-indigo-500"},P={solid:e=>z[e],soft:e=>h[e],outline:e=>V[e],gradient:e=>M[e]},X={xs:"px-1.5 py-px text-[10px] leading-4 gap-1",sm:"px-2 py-0.5 text-xs leading-4 gap-1",md:"px-2.5 py-0.5 text-xs leading-5 gap-1",lg:"px-3 py-1 text-sm leading-5 gap-1.5"},E={xs:"w-1.5 h-1.5",sm:"w-1.5 h-1.5",md:"w-2 h-2",lg:"w-2.5 h-2.5"},q={xs:"w-3 h-3",sm:"w-3 h-3",md:"w-3.5 h-3.5",lg:"w-4 h-4"},D={rounded:"rounded-md",pill:"rounded-full",square:"rounded-none"};function I(){return jsx(XMarkIcon,{className:"w-full h-full","aria-hidden":"true"})}function F({children:e,variant:d="soft",color:n="blue",size:s="md",shape:m="pill",icon:c,trailingIcon:l,onRemove:o,pulse:x=false,count:i,maxCount:b=99,uppercase:u=false,tracking:y=false,as:g="span",className:f,...k}){let a=d==="dot",C=a?h[n]:P[d](n),B=i!==void 0?i>b?`${b.toString()}+`:String(i):null;return jsxs(g,{className:t("inline-flex items-center font-medium leading-none select-none whitespace-nowrap","transition-all duration-150 ease-out",X[s],D[m],C,u&&"uppercase",y&&"tracking-wide",(g==="button"||g==="a")&&"cursor-pointer",f),...k,children:[a&&jsxs("span",{className:"relative inline-flex shrink-0","aria-hidden":"true",children:[x&&jsx("span",{className:t("absolute inset-0 rounded-full animate-ping opacity-60",p[n])}),jsx("span",{className:t("rounded-full shrink-0",E[s],p[n])})]}),!a&&c!=null&&jsx("span",{"aria-hidden":"true",className:"shrink-0 inline-flex",children:c}),B??e,!a&&l!=null&&o==null&&jsx("span",{"aria-hidden":"true",className:"shrink-0 inline-flex",children:l}),o!=null&&jsx("button",{type:"button","aria-label":"Remove",onClick:v=>{v.stopPropagation(),o();},className:t("inline-flex items-center justify-center rounded-full shrink-0 -mr-0.5","opacity-70 hover:opacity-100","hover:bg-black/10 dark:hover:bg-white/15","transition-all duration-100",q[s]),children:jsx(I,{})})]})}export{F as Badge};
@@ -0,0 +1 @@
1
+ 'use strict';var react=require('react'),solid=require('@heroicons/react/20/solid'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function n(...e){return tailwindMerge.twMerge(clsx.clsx(e))}var p={xs:"text-xs",sm:"text-sm",md:"text-base",lg:"text-lg"},d={slash:jsxRuntime.jsx("span",{"aria-hidden":"true",className:"select-none text-text-muted/60",children:"/"}),chevron:jsxRuntime.jsx(solid.ChevronRightIcon,{"aria-hidden":"true",className:"w-4 h-4 text-text-muted/60 shrink-0"}),dot:jsxRuntime.jsx("span",{"aria-hidden":"true",className:"select-none text-text-muted/60",children:"\xB7"})};function k(e){return typeof e=="string"&&e in d?d[e]:e}function b({item:e,isCurrent:o,size:a}){let r=n("inline-flex items-center gap-1 transition-colors leading-none",p[a],o?"font-bold text-text cursor-default":e.disabled?"text-text-muted cursor-not-allowed":"text-primary hover:text-primary-hover hover:underline underline-offset-4 cursor-pointer");return o?jsxRuntime.jsx("span",{className:r,"aria-current":"page",children:e.label}):e.disabled?jsxRuntime.jsx("span",{className:r,children:e.label}):e.onClick!=null?jsxRuntime.jsx("button",{type:"button",onClick:e.onClick,className:r,children:e.label}):e.href!=null?jsxRuntime.jsx("a",{href:e.href,className:r,children:e.label}):jsxRuntime.jsx("span",{className:r,children:e.label})}function I({items:e,separator:o="chevron",size:a="sm",collapsible:r=false,maxItems:f=4,className:x}){let[h,N]=react.useState(false);if(e.length===0)return null;let c=k(o),u,m=false;if(r&&!h&&e.length>f){let l=Math.max(1,f-1);u=e.slice(0,l),m=true;}else u=e;let s=[];if(u.forEach((l,i)=>{let g=!m&&i===e.length-1;i>0&&s.push(jsxRuntime.jsx("li",{role:"presentation",className:"flex items-center",children:c},`sep-${String(i)}`)),s.push(jsxRuntime.jsx("li",{className:"flex items-center",children:jsxRuntime.jsx(b,{item:l,isCurrent:g,size:a})},`item-${String(i)}`));}),m){s.push(jsxRuntime.jsx("li",{role:"presentation",className:"flex items-center",children:c},"sep-ellipsis")),s.push(jsxRuntime.jsx("li",{className:"flex items-center",children:jsxRuntime.jsx("button",{type:"button","aria-label":"Show full path",onClick:()=>{N(true);},className:n("text-text-muted hover:text-text-secondary transition-colors leading-none px-1",p[a]),children:"\xB7\xB7\xB7"})},"ellipsis"));let l=e[e.length-1];l!=null&&(s.push(jsxRuntime.jsx("li",{role:"presentation",className:"flex items-center",children:c},"sep-last")),s.push(jsxRuntime.jsx("li",{className:"flex items-center",children:jsxRuntime.jsx(b,{item:l,isCurrent:true,size:a})},"item-last")));}return jsxRuntime.jsx("nav",{"aria-label":"Breadcrumb",className:n("w-full",x),children:jsxRuntime.jsx("ol",{className:n("flex flex-wrap items-center gap-1",p[a]),children:s})})}exports.Breadcrumbs=I;
@@ -0,0 +1,32 @@
1
+ import { ReactNode, ReactElement } from 'react';
2
+
3
+ interface BreadcrumbItem {
4
+ /** The label shown for this crumb. */
5
+ label: ReactNode;
6
+ /** When provided the crumb renders as a link. */
7
+ href?: string;
8
+ /** onClick handler (use instead of href for SPA navigation). */
9
+ onClick?: () => void;
10
+ /** When true the crumb is shown but not clickable. */
11
+ disabled?: boolean;
12
+ }
13
+ type BreadcrumbSeparator = 'slash' | 'chevron' | 'dot' | ReactElement;
14
+ type BreadcrumbSize = 'xs' | 'sm' | 'md' | 'lg';
15
+ interface BreadcrumbsProps {
16
+ /** The list of crumb items. The last item is treated as the current page. */
17
+ items: BreadcrumbItem[];
18
+ /** Separator between crumbs. Defaults to 'chevron'. */
19
+ separator?: BreadcrumbSeparator;
20
+ /** Text size. Defaults to 'sm'. */
21
+ size?: BreadcrumbSize;
22
+ /** When true collapses middle items into an ellipsis button. Defaults to false. */
23
+ collapsible?: boolean;
24
+ /** Maximum number of items to show when collapsible=true. Defaults to 4. */
25
+ maxItems?: number;
26
+ /** Additional class for the <nav> wrapper. */
27
+ className?: string;
28
+ }
29
+
30
+ declare function Breadcrumbs({ items, separator, size, collapsible, maxItems, className, }: BreadcrumbsProps): React.JSX.Element | null;
31
+
32
+ export { type BreadcrumbItem, type BreadcrumbSeparator, type BreadcrumbSize, Breadcrumbs, type BreadcrumbsProps };
@@ -0,0 +1,32 @@
1
+ import { ReactNode, ReactElement } from 'react';
2
+
3
+ interface BreadcrumbItem {
4
+ /** The label shown for this crumb. */
5
+ label: ReactNode;
6
+ /** When provided the crumb renders as a link. */
7
+ href?: string;
8
+ /** onClick handler (use instead of href for SPA navigation). */
9
+ onClick?: () => void;
10
+ /** When true the crumb is shown but not clickable. */
11
+ disabled?: boolean;
12
+ }
13
+ type BreadcrumbSeparator = 'slash' | 'chevron' | 'dot' | ReactElement;
14
+ type BreadcrumbSize = 'xs' | 'sm' | 'md' | 'lg';
15
+ interface BreadcrumbsProps {
16
+ /** The list of crumb items. The last item is treated as the current page. */
17
+ items: BreadcrumbItem[];
18
+ /** Separator between crumbs. Defaults to 'chevron'. */
19
+ separator?: BreadcrumbSeparator;
20
+ /** Text size. Defaults to 'sm'. */
21
+ size?: BreadcrumbSize;
22
+ /** When true collapses middle items into an ellipsis button. Defaults to false. */
23
+ collapsible?: boolean;
24
+ /** Maximum number of items to show when collapsible=true. Defaults to 4. */
25
+ maxItems?: number;
26
+ /** Additional class for the <nav> wrapper. */
27
+ className?: string;
28
+ }
29
+
30
+ declare function Breadcrumbs({ items, separator, size, collapsible, maxItems, className, }: BreadcrumbsProps): React.JSX.Element | null;
31
+
32
+ export { type BreadcrumbItem, type BreadcrumbSeparator, type BreadcrumbSize, Breadcrumbs, type BreadcrumbsProps };
@@ -0,0 +1 @@
1
+ import {useState}from'react';import {ChevronRightIcon}from'@heroicons/react/20/solid';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function n(...e){return twMerge(clsx(e))}var p={xs:"text-xs",sm:"text-sm",md:"text-base",lg:"text-lg"},d={slash:jsx("span",{"aria-hidden":"true",className:"select-none text-text-muted/60",children:"/"}),chevron:jsx(ChevronRightIcon,{"aria-hidden":"true",className:"w-4 h-4 text-text-muted/60 shrink-0"}),dot:jsx("span",{"aria-hidden":"true",className:"select-none text-text-muted/60",children:"\xB7"})};function k(e){return typeof e=="string"&&e in d?d[e]:e}function b({item:e,isCurrent:o,size:a}){let r=n("inline-flex items-center gap-1 transition-colors leading-none",p[a],o?"font-bold text-text cursor-default":e.disabled?"text-text-muted cursor-not-allowed":"text-primary hover:text-primary-hover hover:underline underline-offset-4 cursor-pointer");return o?jsx("span",{className:r,"aria-current":"page",children:e.label}):e.disabled?jsx("span",{className:r,children:e.label}):e.onClick!=null?jsx("button",{type:"button",onClick:e.onClick,className:r,children:e.label}):e.href!=null?jsx("a",{href:e.href,className:r,children:e.label}):jsx("span",{className:r,children:e.label})}function I({items:e,separator:o="chevron",size:a="sm",collapsible:r=false,maxItems:f=4,className:x}){let[h,N]=useState(false);if(e.length===0)return null;let c=k(o),u,m=false;if(r&&!h&&e.length>f){let l=Math.max(1,f-1);u=e.slice(0,l),m=true;}else u=e;let s=[];if(u.forEach((l,i)=>{let g=!m&&i===e.length-1;i>0&&s.push(jsx("li",{role:"presentation",className:"flex items-center",children:c},`sep-${String(i)}`)),s.push(jsx("li",{className:"flex items-center",children:jsx(b,{item:l,isCurrent:g,size:a})},`item-${String(i)}`));}),m){s.push(jsx("li",{role:"presentation",className:"flex items-center",children:c},"sep-ellipsis")),s.push(jsx("li",{className:"flex items-center",children:jsx("button",{type:"button","aria-label":"Show full path",onClick:()=>{N(true);},className:n("text-text-muted hover:text-text-secondary transition-colors leading-none px-1",p[a]),children:"\xB7\xB7\xB7"})},"ellipsis"));let l=e[e.length-1];l!=null&&(s.push(jsx("li",{role:"presentation",className:"flex items-center",children:c},"sep-last")),s.push(jsx("li",{className:"flex items-center",children:jsx(b,{item:l,isCurrent:true,size:a})},"item-last")));}return jsx("nav",{"aria-label":"Breadcrumb",className:n("w-full",x),children:jsx("ol",{className:n("flex flex-wrap items-center gap-1",p[a]),children:s})})}export{I as Breadcrumbs};
@@ -0,0 +1,2 @@
1
+ 'use strict';var react=require('react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),reactDom=require('react-dom'),jsxRuntime=require('react/jsx-runtime');function o(...P){return tailwindMerge.twMerge(clsx.clsx(P))}var rt=150,ft={top:"-translate-x-1/2 -translate-y-full",bottom:"-translate-x-1/2",left:"-translate-x-full -translate-y-1/2",right:"-translate-y-1/2"},bt={top:"top-full left-1/2 -translate-x-1/2",bottom:"bottom-full left-1/2 -translate-x-1/2",left:"left-full top-1/2 -translate-y-1/2",right:"right-full top-1/2 -translate-y-1/2"},gt={top:"border-l-transparent border-r-transparent border-b-transparent",bottom:"border-l-transparent border-r-transparent border-t-transparent",left:"border-t-transparent border-b-transparent border-r-transparent",right:"border-t-transparent border-b-transparent border-l-transparent"},ht={top:"translate-y-1",bottom:"-translate-y-1",left:"translate-x-1",right:"-translate-x-1"},yt={sm:"px-2 py-1 text-xs rounded-md",md:"px-3 py-1.5 text-sm rounded-lg",lg:"px-4 py-2 text-sm rounded-xl"},xt={dark:["bg-gray-900 text-gray-50","shadow-[0_4px_16px_rgba(0,0,0,0.35)]","ring-1 ring-white/10"].join(" "),primary:["bg-gradient-to-b from-blue-500 to-blue-600 text-white","shadow-[0_4px_16px_rgba(59,130,246,0.45)]","ring-1 ring-blue-400/30"].join(" "),light:["bg-white text-gray-800","border border-gray-200/80","shadow-[0_4px_16px_rgba(0,0,0,0.10)]"].join(" ")},vt={dark:{top:"border-t-gray-900",bottom:"border-b-gray-900",left:"border-l-gray-900",right:"border-r-gray-900"},primary:{top:"border-t-blue-600",bottom:"border-b-blue-500",left:"border-l-blue-600",right:"border-r-blue-500"},light:{top:"border-t-gray-200",bottom:"border-b-gray-200",left:"border-l-gray-200",right:"border-r-gray-200"}};function nt({content:P,children:V,placement:e="top",trigger:b="hover",showDelay:g=0,hideDelay:v=100,size:i="md",variant:h="dark",open:k,disabled:r=false,maxWidth:N=240,className:z,wrapperClassName:F}){let[H,y]=react.useState(false),[j,x]=react.useState(false),[M,w]=react.useState(false),[W,at]=react.useState({top:0,left:0}),[T,it]=react.useState(e),m=k!==void 0,l=m?k:H,K=react.useRef(null),D=react.useRef(null),L=react.useRef(null),I=react.useRef(null),R=react.useRef(null),U=react.useId(),n=react.useCallback(()=>{L.current&&clearTimeout(L.current),I.current&&clearTimeout(I.current),R.current&&clearTimeout(R.current);},[]),X=react.useCallback(()=>{if(r||m)return;n();let t=()=>{y(true);};g>0?L.current=setTimeout(t,g):t();},[r,m,n,g]),J=react.useCallback(()=>{m||(n(),I.current=setTimeout(()=>{y(false);},v));},[m,n,v]),$=react.useCallback(()=>{r||m||y(t=>!t);},[r,m]);react.useEffect(()=>{let t=null;return l&&!r?(n(),t=requestAnimationFrame(()=>{x(true),t=requestAnimationFrame(()=>{w(true);});})):(t=requestAnimationFrame(()=>{w(false);}),R.current=setTimeout(()=>{x(false);},rt)),()=>{t&&cancelAnimationFrame(t),R.current&&clearTimeout(R.current);}},[l,r,n]);let G=react.useCallback(()=>{if(!K.current||!l)return;let t=K.current.getBoundingClientRect(),s=D.current,u=8,c=e,Q=p=>{switch(p){case "top":return {t:t.top-u,l:t.left+t.width/2};case "bottom":return {t:t.bottom+u,l:t.left+t.width/2};case "left":return {t:t.top+t.height/2,l:t.left-u};case "right":return {t:t.top+t.height/2,l:t.right+u}}},Y=Q(e),S=Y.t,_=Y.l;if(s){let p=s.getBoundingClientRect(),d=12;if(e==="top"&&t.top-p.height-u<d?c="bottom":e==="bottom"&&t.bottom+p.height+u>window.innerHeight-d?c="top":e==="left"&&t.left-p.width-u<d?c="right":e==="right"&&t.right+p.width+u>window.innerWidth-d&&(c="left"),c!==e){let et=Q(c);S=et.t,_=et.l;}let Z=p.width/2,tt=p.height/2;c==="top"||c==="bottom"?_=Math.max(d+Z,Math.min(window.innerWidth-d-Z,_)):S=Math.max(d+tt,Math.min(window.innerHeight-d-tt,S));}it(c),at({top:S,left:_});},[l,e]);react.useLayoutEffect(()=>{if(!l)return;let t=null,s=()=>{t=requestAnimationFrame(G);};return s(),window.addEventListener("resize",s),window.addEventListener("scroll",s,true),()=>{t!==null&&cancelAnimationFrame(t),window.removeEventListener("resize",s),window.removeEventListener("scroll",s,true);}},[l,G]),react.useEffect(()=>{if(!l)return;let t=s=>{s.key==="Escape"&&(n(),y(false));};return document.addEventListener("keydown",t),()=>{document.removeEventListener("keydown",t);}},[l,n]),react.useEffect(()=>n,[n]);let f={};(b==="hover"||b==="focus")&&(f.onFocus=X,f.onBlur=J),b==="hover"?(f.onMouseEnter=X,f.onMouseLeave=J):b==="click"&&(f.onClick=$),f.onKeyDown=t=>{(t.key==="Enter"||t.key===" ")&&$();};let lt=V;return jsxRuntime.jsxs("span",{ref:K,className:o("relative inline-flex isolate z-0",F),"aria-describedby":l&&!r?U:void 0,...f,children:[jsxRuntime.jsx("span",{className:"relative z-0",children:lt}),j&&!r&&reactDom.createPortal(jsxRuntime.jsx("div",{ref:D,className:o("pointer-events-none fixed z-[9999]",ft[T]),style:{top:W.top,left:W.left},children:jsxRuntime.jsxs("div",{id:U,role:"tooltip",style:{maxWidth:N,transitionDuration:`${rt.toString()}ms`},className:o("relative min-w-max whitespace-normal break-words","font-sans font-medium tracking-tight text-center leading-snug","transition-[opacity,transform] ease-out",M?"opacity-100 translate-x-0 translate-y-0":["opacity-0",ht[T]].join(" "),xt[h],yt[i],z),children:[jsxRuntime.jsx("div",{"aria-hidden":"true",className:o("absolute border-[6px]","drop-shadow-sm",bt[T],gt[T],vt[h][T])}),P]})}),document.body)]})}var Tt={xs:"h-6 px-2.5 text-xs",sm:"h-8 px-3 text-sm",md:"h-10 px-4 text-sm",lg:"h-11 px-6 text-base",xl:"h-12 px-8 text-lg"},Rt={xs:"w-3 h-3",sm:"w-3.5 h-3.5",md:"w-4 h-4",lg:"w-5 h-5",xl:"w-5 h-5"},Et={primary:"bg-primary text-text-inverse hover:bg-primary-hover hover:shadow-xl hover:shadow-primary/20 active:scale-95 border border-transparent shadow-md focus-visible:ring-primary/40 transition-all duration-normal",secondary:"bg-secondary text-text hover:bg-secondary-hover border border-transparent focus-visible:ring-primary/40",outline:"bg-transparent text-text border border-border hover:bg-hover hover:text-text focus-visible:ring-primary/40",ghost:"bg-transparent text-text border border-transparent hover:bg-hover hover:text-text focus-visible:ring-primary/40",danger:"bg-error text-text-inverse hover:bg-error/90 border border-transparent shadow-sm focus-visible:ring-error/40",success:"bg-success text-text-inverse hover:bg-success/90 border border-transparent shadow-sm focus-visible:ring-success/40",warning:"bg-warning text-text-inverse hover:bg-warning/90 border border-transparent shadow-sm focus-visible:ring-warning/40",info:"bg-info text-text-inverse hover:bg-info/90 border border-transparent shadow-sm focus-visible:ring-info/40"},Ct="opacity-50 cursor-not-allowed shadow-none",Bt=react.forwardRef(function({children:V,className:e,variant:b="primary",size:g="md",fullWidth:v=false,isLoading:i=false,loadingText:h,disabled:k=false,leftIcon:r,rightIcon:N,tooltip:z,tooltipPlacement:F="top",type:H="button",...y},j){let x=k||i,M=jsxRuntime.jsxs("div",{className:o("relative flex items-center justify-center",Rt[g]),children:[jsxRuntime.jsx("div",{className:"absolute inset-0 rounded-full border-1 border-current opacity-20 animate-ping"}),jsxRuntime.jsxs("svg",{className:"animate-spin relative z-10 w-full h-full",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",role:"status",children:[jsxRuntime.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),jsxRuntime.jsx("path",{className:"opacity-90",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]})]}),w=jsxRuntime.jsx("button",{ref:j,type:H,disabled:x,"aria-disabled":x,"aria-busy":i,className:o("relative inline-flex items-center justify-center gap-2 font-bold rounded-md transition-[background-color,border-color,color,box-shadow,transform,opacity] duration-normal focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-surface",Tt[g],Et[b],v?"w-full":"",x?Ct:"",e),...y,children:i&&h?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[M,jsxRuntime.jsx("span",{children:h})]}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[r&&jsxRuntime.jsx("span",{className:o("inline-flex shrink-0",i&&"invisible opacity-0"),children:r}),jsxRuntime.jsx("span",{className:o("truncate flex items-center justify-center",i&&"invisible opacity-0"),children:V}),N&&jsxRuntime.jsx("span",{className:o("inline-flex shrink-0",i&&"invisible opacity-0"),children:N}),i&&!h&&jsxRuntime.jsx("span",{className:"absolute inset-0 flex items-center justify-center",children:M})]})});return z?jsxRuntime.jsx(nt,{content:z,placement:F,wrapperClassName:v?"w-full":"",children:w}):w});Bt.displayName="Button";
2
+ exports.Button=Bt;
@@ -0,0 +1,8 @@
1
+ import { B as ButtonProps } from '../Button.types-D-srlWFf.mjs';
2
+ export { a as ButtonSize, b as ButtonVariant } from '../Button.types-D-srlWFf.mjs';
3
+ import 'react';
4
+ import '../Tooltip.types-PbUasE3C.mjs';
5
+
6
+ declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
7
+
8
+ export { Button, ButtonProps };
@@ -0,0 +1,8 @@
1
+ import { B as ButtonProps } from '../Button.types-BsQYqZml.js';
2
+ export { a as ButtonSize, b as ButtonVariant } from '../Button.types-BsQYqZml.js';
3
+ import 'react';
4
+ import '../Tooltip.types-PbUasE3C.js';
5
+
6
+ declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
7
+
8
+ export { Button, ButtonProps };
@@ -0,0 +1,2 @@
1
+ import {forwardRef,useState,useRef,useId,useCallback,useEffect,useLayoutEffect}from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {createPortal}from'react-dom';import {jsxs,jsx,Fragment}from'react/jsx-runtime';function o(...P){return twMerge(clsx(P))}var rt=150,ft={top:"-translate-x-1/2 -translate-y-full",bottom:"-translate-x-1/2",left:"-translate-x-full -translate-y-1/2",right:"-translate-y-1/2"},bt={top:"top-full left-1/2 -translate-x-1/2",bottom:"bottom-full left-1/2 -translate-x-1/2",left:"left-full top-1/2 -translate-y-1/2",right:"right-full top-1/2 -translate-y-1/2"},gt={top:"border-l-transparent border-r-transparent border-b-transparent",bottom:"border-l-transparent border-r-transparent border-t-transparent",left:"border-t-transparent border-b-transparent border-r-transparent",right:"border-t-transparent border-b-transparent border-l-transparent"},ht={top:"translate-y-1",bottom:"-translate-y-1",left:"translate-x-1",right:"-translate-x-1"},yt={sm:"px-2 py-1 text-xs rounded-md",md:"px-3 py-1.5 text-sm rounded-lg",lg:"px-4 py-2 text-sm rounded-xl"},xt={dark:["bg-gray-900 text-gray-50","shadow-[0_4px_16px_rgba(0,0,0,0.35)]","ring-1 ring-white/10"].join(" "),primary:["bg-gradient-to-b from-blue-500 to-blue-600 text-white","shadow-[0_4px_16px_rgba(59,130,246,0.45)]","ring-1 ring-blue-400/30"].join(" "),light:["bg-white text-gray-800","border border-gray-200/80","shadow-[0_4px_16px_rgba(0,0,0,0.10)]"].join(" ")},vt={dark:{top:"border-t-gray-900",bottom:"border-b-gray-900",left:"border-l-gray-900",right:"border-r-gray-900"},primary:{top:"border-t-blue-600",bottom:"border-b-blue-500",left:"border-l-blue-600",right:"border-r-blue-500"},light:{top:"border-t-gray-200",bottom:"border-b-gray-200",left:"border-l-gray-200",right:"border-r-gray-200"}};function nt({content:P,children:V,placement:e="top",trigger:b="hover",showDelay:g=0,hideDelay:v=100,size:i="md",variant:h="dark",open:k,disabled:r=false,maxWidth:N=240,className:z,wrapperClassName:F}){let[H,y]=useState(false),[j,x]=useState(false),[M,w]=useState(false),[W,at]=useState({top:0,left:0}),[T,it]=useState(e),m=k!==void 0,l=m?k:H,K=useRef(null),D=useRef(null),L=useRef(null),I=useRef(null),R=useRef(null),U=useId(),n=useCallback(()=>{L.current&&clearTimeout(L.current),I.current&&clearTimeout(I.current),R.current&&clearTimeout(R.current);},[]),X=useCallback(()=>{if(r||m)return;n();let t=()=>{y(true);};g>0?L.current=setTimeout(t,g):t();},[r,m,n,g]),J=useCallback(()=>{m||(n(),I.current=setTimeout(()=>{y(false);},v));},[m,n,v]),$=useCallback(()=>{r||m||y(t=>!t);},[r,m]);useEffect(()=>{let t=null;return l&&!r?(n(),t=requestAnimationFrame(()=>{x(true),t=requestAnimationFrame(()=>{w(true);});})):(t=requestAnimationFrame(()=>{w(false);}),R.current=setTimeout(()=>{x(false);},rt)),()=>{t&&cancelAnimationFrame(t),R.current&&clearTimeout(R.current);}},[l,r,n]);let G=useCallback(()=>{if(!K.current||!l)return;let t=K.current.getBoundingClientRect(),s=D.current,u=8,c=e,Q=p=>{switch(p){case "top":return {t:t.top-u,l:t.left+t.width/2};case "bottom":return {t:t.bottom+u,l:t.left+t.width/2};case "left":return {t:t.top+t.height/2,l:t.left-u};case "right":return {t:t.top+t.height/2,l:t.right+u}}},Y=Q(e),S=Y.t,_=Y.l;if(s){let p=s.getBoundingClientRect(),d=12;if(e==="top"&&t.top-p.height-u<d?c="bottom":e==="bottom"&&t.bottom+p.height+u>window.innerHeight-d?c="top":e==="left"&&t.left-p.width-u<d?c="right":e==="right"&&t.right+p.width+u>window.innerWidth-d&&(c="left"),c!==e){let et=Q(c);S=et.t,_=et.l;}let Z=p.width/2,tt=p.height/2;c==="top"||c==="bottom"?_=Math.max(d+Z,Math.min(window.innerWidth-d-Z,_)):S=Math.max(d+tt,Math.min(window.innerHeight-d-tt,S));}it(c),at({top:S,left:_});},[l,e]);useLayoutEffect(()=>{if(!l)return;let t=null,s=()=>{t=requestAnimationFrame(G);};return s(),window.addEventListener("resize",s),window.addEventListener("scroll",s,true),()=>{t!==null&&cancelAnimationFrame(t),window.removeEventListener("resize",s),window.removeEventListener("scroll",s,true);}},[l,G]),useEffect(()=>{if(!l)return;let t=s=>{s.key==="Escape"&&(n(),y(false));};return document.addEventListener("keydown",t),()=>{document.removeEventListener("keydown",t);}},[l,n]),useEffect(()=>n,[n]);let f={};(b==="hover"||b==="focus")&&(f.onFocus=X,f.onBlur=J),b==="hover"?(f.onMouseEnter=X,f.onMouseLeave=J):b==="click"&&(f.onClick=$),f.onKeyDown=t=>{(t.key==="Enter"||t.key===" ")&&$();};let lt=V;return jsxs("span",{ref:K,className:o("relative inline-flex isolate z-0",F),"aria-describedby":l&&!r?U:void 0,...f,children:[jsx("span",{className:"relative z-0",children:lt}),j&&!r&&createPortal(jsx("div",{ref:D,className:o("pointer-events-none fixed z-[9999]",ft[T]),style:{top:W.top,left:W.left},children:jsxs("div",{id:U,role:"tooltip",style:{maxWidth:N,transitionDuration:`${rt.toString()}ms`},className:o("relative min-w-max whitespace-normal break-words","font-sans font-medium tracking-tight text-center leading-snug","transition-[opacity,transform] ease-out",M?"opacity-100 translate-x-0 translate-y-0":["opacity-0",ht[T]].join(" "),xt[h],yt[i],z),children:[jsx("div",{"aria-hidden":"true",className:o("absolute border-[6px]","drop-shadow-sm",bt[T],gt[T],vt[h][T])}),P]})}),document.body)]})}var Tt={xs:"h-6 px-2.5 text-xs",sm:"h-8 px-3 text-sm",md:"h-10 px-4 text-sm",lg:"h-11 px-6 text-base",xl:"h-12 px-8 text-lg"},Rt={xs:"w-3 h-3",sm:"w-3.5 h-3.5",md:"w-4 h-4",lg:"w-5 h-5",xl:"w-5 h-5"},Et={primary:"bg-primary text-text-inverse hover:bg-primary-hover hover:shadow-xl hover:shadow-primary/20 active:scale-95 border border-transparent shadow-md focus-visible:ring-primary/40 transition-all duration-normal",secondary:"bg-secondary text-text hover:bg-secondary-hover border border-transparent focus-visible:ring-primary/40",outline:"bg-transparent text-text border border-border hover:bg-hover hover:text-text focus-visible:ring-primary/40",ghost:"bg-transparent text-text border border-transparent hover:bg-hover hover:text-text focus-visible:ring-primary/40",danger:"bg-error text-text-inverse hover:bg-error/90 border border-transparent shadow-sm focus-visible:ring-error/40",success:"bg-success text-text-inverse hover:bg-success/90 border border-transparent shadow-sm focus-visible:ring-success/40",warning:"bg-warning text-text-inverse hover:bg-warning/90 border border-transparent shadow-sm focus-visible:ring-warning/40",info:"bg-info text-text-inverse hover:bg-info/90 border border-transparent shadow-sm focus-visible:ring-info/40"},Ct="opacity-50 cursor-not-allowed shadow-none",Bt=forwardRef(function({children:V,className:e,variant:b="primary",size:g="md",fullWidth:v=false,isLoading:i=false,loadingText:h,disabled:k=false,leftIcon:r,rightIcon:N,tooltip:z,tooltipPlacement:F="top",type:H="button",...y},j){let x=k||i,M=jsxs("div",{className:o("relative flex items-center justify-center",Rt[g]),children:[jsx("div",{className:"absolute inset-0 rounded-full border-1 border-current opacity-20 animate-ping"}),jsxs("svg",{className:"animate-spin relative z-10 w-full h-full",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",role:"status",children:[jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),jsx("path",{className:"opacity-90",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]})]}),w=jsx("button",{ref:j,type:H,disabled:x,"aria-disabled":x,"aria-busy":i,className:o("relative inline-flex items-center justify-center gap-2 font-bold rounded-md transition-[background-color,border-color,color,box-shadow,transform,opacity] duration-normal focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-surface",Tt[g],Et[b],v?"w-full":"",x?Ct:"",e),...y,children:i&&h?jsxs(Fragment,{children:[M,jsx("span",{children:h})]}):jsxs(Fragment,{children:[r&&jsx("span",{className:o("inline-flex shrink-0",i&&"invisible opacity-0"),children:r}),jsx("span",{className:o("truncate flex items-center justify-center",i&&"invisible opacity-0"),children:V}),N&&jsx("span",{className:o("inline-flex shrink-0",i&&"invisible opacity-0"),children:N}),i&&!h&&jsx("span",{className:"absolute inset-0 flex items-center justify-center",children:M})]})});return z?jsx(nt,{content:z,placement:F,wrapperClassName:v?"w-full":"",children:w}):w});Bt.displayName="Button";
2
+ export{Bt as Button};
@@ -0,0 +1 @@
1
+ 'use strict';var react=require('react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function o(...a){return tailwindMerge.twMerge(clsx.clsx(a))}var l={default:"bg-surface text-text border border-border shadow-sm",outlined:"bg-surface text-text border border-border",elevated:"bg-surface text-text border-transparent shadow-md",filled:"bg-surface-secondary border-transparent text-text-secondary"},C={none:"p-0",sm:"p-2",md:"p-4",lg:"p-6",xl:"p-8"},m=react.forwardRef(function({className:e,variant:r="default",padding:t="none",...s},i){return jsxRuntime.jsx("div",{ref:i,className:o("rounded-lg flex flex-col transition-all duration-normal",l[r],C[t],e),...s})});m.displayName="Card";var f=react.forwardRef(function({className:e,...r},t){return jsxRuntime.jsx("div",{ref:t,className:o("flex flex-col space-y-1 p-4",e),...r})});f.displayName="CardHeader";var x=react.forwardRef(function({className:e,children:r,...t},s){return jsxRuntime.jsx("h3",{ref:s,className:o("font-bold leading-none tracking-tight text-lg text-text",e),...t,children:r})});x.displayName="CardTitle";var u=react.forwardRef(function({className:e,...r},t){return jsxRuntime.jsx("p",{ref:t,className:o("text-sm text-text-secondary",e),...r})});u.displayName="CardDescription";var R=react.forwardRef(function({className:e,...r},t){return jsxRuntime.jsx("div",{ref:t,className:o("p-4 pt-0",e),...r})});R.displayName="CardContent";var P=react.forwardRef(function({className:e,...r},t){return jsxRuntime.jsx("div",{ref:t,className:o("flex items-center p-4 pt-0",e),...r})});P.displayName="CardFooter";exports.Card=m;exports.CardContent=R;exports.CardDescription=u;exports.CardFooter=P;exports.CardHeader=f;exports.CardTitle=x;