@wellingtonhlc/shared-ui 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/dist/components/ActionBar.d.ts +26 -0
  2. package/dist/components/ActionBar.d.ts.map +1 -0
  3. package/dist/components/ActionBar.js +29 -0
  4. package/dist/components/ActionPrimitives.d.ts +30 -0
  5. package/dist/components/ActionPrimitives.d.ts.map +1 -0
  6. package/dist/components/ActionPrimitives.js +23 -0
  7. package/dist/components/AppShell.d.ts +58 -0
  8. package/dist/components/AppShell.d.ts.map +1 -0
  9. package/dist/components/AppShell.js +45 -0
  10. package/dist/components/AppShellActions.d.ts +24 -0
  11. package/dist/components/AppShellActions.d.ts.map +1 -0
  12. package/dist/components/AppShellActions.js +15 -0
  13. package/dist/components/Badge.d.ts +9 -0
  14. package/dist/components/Badge.d.ts.map +1 -0
  15. package/dist/components/Badge.js +34 -0
  16. package/dist/components/Button.d.ts +14 -0
  17. package/dist/components/Button.d.ts.map +1 -0
  18. package/dist/components/Button.js +40 -0
  19. package/dist/components/Card.d.ts +21 -0
  20. package/dist/components/Card.d.ts.map +1 -0
  21. package/dist/components/Card.js +21 -0
  22. package/dist/components/ConfirmationDialog.d.ts +73 -0
  23. package/dist/components/ConfirmationDialog.d.ts.map +1 -0
  24. package/dist/components/ConfirmationDialog.js +216 -0
  25. package/dist/components/CopyableField.d.ts +10 -0
  26. package/dist/components/CopyableField.d.ts.map +1 -0
  27. package/dist/components/CopyableField.js +38 -0
  28. package/dist/components/DateField.d.ts +17 -0
  29. package/dist/components/DateField.d.ts.map +1 -0
  30. package/dist/components/DateField.js +127 -0
  31. package/dist/components/DecimalField.d.ts +21 -0
  32. package/dist/components/DecimalField.d.ts.map +1 -0
  33. package/dist/components/DecimalField.js +137 -0
  34. package/dist/components/EmptyState.d.ts +13 -0
  35. package/dist/components/EmptyState.d.ts.map +1 -0
  36. package/dist/components/EmptyState.js +15 -0
  37. package/dist/components/FieldControl.d.ts +17 -0
  38. package/dist/components/FieldControl.d.ts.map +1 -0
  39. package/dist/components/FieldControl.js +72 -0
  40. package/dist/components/FieldGroup.d.ts +10 -0
  41. package/dist/components/FieldGroup.d.ts.map +1 -0
  42. package/dist/components/FieldGroup.js +11 -0
  43. package/dist/components/FieldSkeleton.d.ts +14 -0
  44. package/dist/components/FieldSkeleton.d.ts.map +1 -0
  45. package/dist/components/FieldSkeleton.js +23 -0
  46. package/dist/components/FieldValidationError.d.ts +8 -0
  47. package/dist/components/FieldValidationError.d.ts.map +1 -0
  48. package/dist/components/FieldValidationError.js +7 -0
  49. package/dist/components/FormControl.d.ts +17 -0
  50. package/dist/components/FormControl.d.ts.map +1 -0
  51. package/dist/components/FormControl.js +72 -0
  52. package/dist/components/FormValidationError.d.ts +8 -0
  53. package/dist/components/FormValidationError.d.ts.map +1 -0
  54. package/dist/components/FormValidationError.js +7 -0
  55. package/dist/components/Input.d.ts +19 -0
  56. package/dist/components/Input.d.ts.map +1 -0
  57. package/dist/components/Input.js +41 -0
  58. package/dist/components/Modal.d.ts +60 -0
  59. package/dist/components/Modal.d.ts.map +1 -0
  60. package/dist/components/Modal.js +84 -0
  61. package/dist/components/MultiSelectField.d.ts +22 -0
  62. package/dist/components/MultiSelectField.d.ts.map +1 -0
  63. package/dist/components/MultiSelectField.js +84 -0
  64. package/dist/components/Page.d.ts +55 -0
  65. package/dist/components/Page.d.ts.map +1 -0
  66. package/dist/components/Page.js +81 -0
  67. package/dist/components/PageMessage.d.ts +12 -0
  68. package/dist/components/PageMessage.d.ts.map +1 -0
  69. package/dist/components/PageMessage.js +36 -0
  70. package/dist/components/Pagination.d.ts +13 -0
  71. package/dist/components/Pagination.d.ts.map +1 -0
  72. package/dist/components/Pagination.js +37 -0
  73. package/dist/components/PasswordInput.d.ts +8 -0
  74. package/dist/components/PasswordInput.d.ts.map +1 -0
  75. package/dist/components/PasswordInput.js +17 -0
  76. package/dist/components/RadioGroup.d.ts +34 -0
  77. package/dist/components/RadioGroup.d.ts.map +1 -0
  78. package/dist/components/RadioGroup.js +52 -0
  79. package/dist/components/RenderCase.d.ts +26 -0
  80. package/dist/components/RenderCase.d.ts.map +1 -0
  81. package/dist/components/RenderCase.js +32 -0
  82. package/dist/components/RenderIf.d.ts +11 -0
  83. package/dist/components/RenderIf.d.ts.map +1 -0
  84. package/dist/components/RenderIf.js +10 -0
  85. package/dist/components/SearchField.d.ts +22 -0
  86. package/dist/components/SearchField.d.ts.map +1 -0
  87. package/dist/components/SearchField.js +43 -0
  88. package/dist/components/Select.d.ts +24 -0
  89. package/dist/components/Select.d.ts.map +1 -0
  90. package/dist/components/Select.js +26 -0
  91. package/dist/components/SelectField.d.ts +22 -0
  92. package/dist/components/SelectField.d.ts.map +1 -0
  93. package/dist/components/SelectField.js +24 -0
  94. package/dist/components/Sidebar.d.ts +104 -0
  95. package/dist/components/Sidebar.d.ts.map +1 -0
  96. package/dist/components/Sidebar.js +146 -0
  97. package/dist/components/StatCard.d.ts +16 -0
  98. package/dist/components/StatCard.d.ts.map +1 -0
  99. package/dist/components/StatCard.js +62 -0
  100. package/dist/components/Switch.d.ts +20 -0
  101. package/dist/components/Switch.d.ts.map +1 -0
  102. package/dist/components/Switch.js +57 -0
  103. package/dist/components/Table.d.ts +25 -0
  104. package/dist/components/Table.d.ts.map +1 -0
  105. package/dist/components/Table.js +40 -0
  106. package/dist/components/TabsUnderlined.d.ts +21 -0
  107. package/dist/components/TabsUnderlined.d.ts.map +1 -0
  108. package/dist/components/TabsUnderlined.js +20 -0
  109. package/dist/components/TextField.d.ts +17 -0
  110. package/dist/components/TextField.d.ts.map +1 -0
  111. package/dist/components/TextField.js +43 -0
  112. package/dist/components/Textarea.d.ts +8 -0
  113. package/dist/components/Textarea.d.ts.map +1 -0
  114. package/dist/components/Textarea.js +12 -0
  115. package/dist/components/TextareaField.d.ts +12 -0
  116. package/dist/components/TextareaField.d.ts.map +1 -0
  117. package/dist/components/TextareaField.js +26 -0
  118. package/dist/components/ThemePreferencesSelector.d.ts +24 -0
  119. package/dist/components/ThemePreferencesSelector.d.ts.map +1 -0
  120. package/dist/components/ThemePreferencesSelector.js +34 -0
  121. package/dist/components/Tooltip.d.ts +12 -0
  122. package/dist/components/Tooltip.d.ts.map +1 -0
  123. package/dist/components/Tooltip.js +6 -0
  124. package/dist/components/form-control-helpers.d.ts +23 -0
  125. package/dist/components/form-control-helpers.d.ts.map +1 -0
  126. package/dist/components/form-control-helpers.js +18 -0
  127. package/dist/index.d.ts +38 -0
  128. package/dist/index.d.ts.map +1 -0
  129. package/dist/index.js +37 -0
  130. package/dist/styles.css +3615 -0
  131. package/dist/tailwind-preset.d.ts +23 -0
  132. package/dist/tailwind-preset.d.ts.map +1 -0
  133. package/dist/tailwind-preset.js +22 -0
  134. package/dist/utils/cn.d.ts +2 -0
  135. package/dist/utils/cn.d.ts.map +1 -0
  136. package/dist/utils/cn.js +3 -0
  137. package/package.json +63 -0
@@ -0,0 +1,26 @@
1
+ import { type ButtonHTMLAttributes, type ReactNode } from 'react';
2
+ export type ActionBarVariant = 'default' | 'primary' | 'danger';
3
+ export interface ActionBarRootProps {
4
+ children: ReactNode;
5
+ className?: string;
6
+ }
7
+ declare function Root({ children, className }: ActionBarRootProps): import("react").JSX.Element;
8
+ export interface ActionBarSeparatorProps {
9
+ className?: string;
10
+ }
11
+ declare function Separator({ className }: ActionBarSeparatorProps): import("react").JSX.Element;
12
+ export interface ActionBarButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {
13
+ highlight?: boolean;
14
+ icon: ReactNode;
15
+ label?: string;
16
+ loading?: boolean;
17
+ tooltip?: string;
18
+ variant?: ActionBarVariant;
19
+ }
20
+ export declare const ActionBar: {
21
+ Root: typeof Root;
22
+ Button: import("react").ForwardRefExoticComponent<ActionBarButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
23
+ Separator: typeof Separator;
24
+ };
25
+ export {};
26
+ //# sourceMappingURL=ActionBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActionBar.d.ts","sourceRoot":"","sources":["../../src/components/ActionBar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAIf,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEhE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,iBAAS,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,kBAAkB,+BAWxD;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,uBAAuB,+BAQxD;AAED,MAAM,WAAW,oBACf,SAAQ,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,UAAU,CAAC;IACjE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B;AA2DD,eAAO,MAAM,SAAS;;;;CAIrB,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { forwardRef, } from 'react';
3
+ import { cn } from '../utils/cn';
4
+ function Root({ children, className }) {
5
+ return (_jsx("div", { className: cn('border-app-border bg-background-secondary flex min-w-0 items-center gap-1.5 overflow-x-auto overflow-y-hidden border-b px-2 py-1.5', className), children: children }));
6
+ }
7
+ function Separator({ className }) {
8
+ return (_jsx("div", { role: "separator", "aria-orientation": "vertical", className: cn('bg-app-border mx-1 h-5 w-px shrink-0 rounded-full', className) }));
9
+ }
10
+ const variantClasses = {
11
+ default: 'text-foreground-muted hover:bg-background hover:text-foreground data-[state=open]:bg-background data-[state=open]:text-foreground',
12
+ primary: 'text-amber-600 hover:bg-[color-mix(in_srgb,#facc15_14%,transparent)] hover:text-amber-700 data-[state=open]:bg-[color-mix(in_srgb,#facc15_14%,transparent)] data-[state=open]:text-amber-700',
13
+ danger: 'text-red-600 hover:bg-[color-mix(in_srgb,var(--destructive)_12%,transparent)] hover:text-red-700 data-[state=open]:bg-[color-mix(in_srgb,var(--destructive)_12%,transparent)] data-[state=open]:text-red-700',
14
+ };
15
+ const shapeClasses = {
16
+ icon: 'size-8 p-0',
17
+ labeled: 'min-h-8 gap-1.5 px-2 text-xs max-sm:px-1.5',
18
+ };
19
+ const Button = forwardRef(({ className, disabled = false, highlight = false, icon, label, loading = false, tooltip, type = 'button', variant = 'default', ...props }, ref) => {
20
+ const resolvedVariant = highlight ? 'primary' : variant;
21
+ const tooltipText = tooltip ?? label ?? props['aria-label'];
22
+ return (_jsxs("button", { ref: ref, ...props, type: type, disabled: disabled || loading, "aria-label": props['aria-label'] ?? tooltipText, title: tooltipText, className: cn('inline-flex shrink-0 cursor-pointer select-none items-center justify-center rounded-md border-0 bg-transparent font-semibold transition-[background-color,color,box-shadow,opacity] duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand/30 disabled:cursor-not-allowed disabled:opacity-45', label ? shapeClasses.labeled : shapeClasses.icon, variantClasses[resolvedVariant], loading && 'cursor-wait opacity-75', className), children: [_jsx("span", { className: "inline-flex size-4 shrink-0 items-center justify-center [&>svg]:size-4", children: icon }), label && _jsx("span", { className: "max-w-30 overflow-hidden text-ellipsis whitespace-nowrap max-sm:hidden", children: label })] }));
23
+ });
24
+ Button.displayName = 'ActionBar.Button';
25
+ export const ActionBar = {
26
+ Root,
27
+ Button,
28
+ Separator,
29
+ };
@@ -0,0 +1,30 @@
1
+ import { type ButtonHTMLAttributes, type ReactNode } from 'react';
2
+ export type ActionGroupAlign = 'start' | 'end';
3
+ export type ActionGroupSize = 'sm' | 'md' | 'lg';
4
+ export type ActionButtonVariant = 'default' | 'primary' | 'danger';
5
+ export interface ActionGroupPrimitiveProps {
6
+ children: ReactNode;
7
+ className?: string;
8
+ align?: ActionGroupAlign;
9
+ size?: ActionGroupSize;
10
+ }
11
+ export interface ActionSeparatorPrimitiveProps {
12
+ className?: string;
13
+ }
14
+ export interface ActionButtonPrimitiveProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {
15
+ children?: ReactNode;
16
+ icon?: ReactNode;
17
+ label?: ReactNode;
18
+ loading?: boolean;
19
+ tooltip?: string;
20
+ variant?: ActionButtonVariant;
21
+ }
22
+ export interface IconButtonPrimitiveProps extends Omit<ActionButtonPrimitiveProps, 'children' | 'label'> {
23
+ 'aria-label': string;
24
+ icon: ReactNode;
25
+ }
26
+ export declare function ActionGroupPrimitive({ align, children, className, size }: ActionGroupPrimitiveProps): import("react").JSX.Element;
27
+ export declare function ActionSeparatorPrimitive({ className }: ActionSeparatorPrimitiveProps): import("react").JSX.Element;
28
+ export declare const ActionButtonPrimitive: import("react").ForwardRefExoticComponent<ActionButtonPrimitiveProps & import("react").RefAttributes<HTMLButtonElement>>;
29
+ export declare const IconButtonPrimitive: import("react").ForwardRefExoticComponent<IconButtonPrimitiveProps & import("react").RefAttributes<HTMLButtonElement>>;
30
+ //# sourceMappingURL=ActionPrimitives.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActionPrimitives.d.ts","sourceRoot":"","sources":["../../src/components/ActionPrimitives.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,oBAAoB,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG9E,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,KAAK,CAAC;AAC/C,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACjD,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEnE,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,IAAI,CAAC,EAAE,eAAe,CAAC;CACxB;AAED,MAAM,WAAW,6BAA6B;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,0BAA2B,SAAQ,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC3G,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B;AAED,MAAM,WAAW,wBAAyB,SAAQ,IAAI,CAAC,0BAA0B,EAAE,UAAU,GAAG,OAAO,CAAC;IACtG,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,wBAAgB,oBAAoB,CAAC,EAAE,KAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAW,EAAE,EAAE,yBAAyB,+BAapH;AAED,wBAAgB,wBAAwB,CAAC,EAAE,SAAS,EAAE,EAAE,6BAA6B,+BAEpF;AAQD,eAAO,MAAM,qBAAqB,0HAyCjC,CAAC;AAIF,eAAO,MAAM,mBAAmB,wHAI/B,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { forwardRef } from 'react';
3
+ import { cn } from '../utils/cn';
4
+ export function ActionGroupPrimitive({ align = 'start', children, className, size = 'md' }) {
5
+ return (_jsx("div", { className: cn('flex flex-wrap items-center', align === 'start' ? 'justify-start' : 'justify-end', size === 'sm' ? 'gap-1.5' : size === 'lg' ? 'gap-2.5' : 'gap-2', className), children: children }));
6
+ }
7
+ export function ActionSeparatorPrimitive({ className }) {
8
+ return _jsx("span", { "aria-hidden": "true", className: cn('bg-app-border min-h-7 w-px shrink-0 self-stretch rounded-full', className) });
9
+ }
10
+ const variantClasses = {
11
+ default: 'border-app-border bg-surface text-foreground-muted hover:border-[color-mix(in_srgb,var(--brand)_44%,var(--app-border))] hover:bg-[color-mix(in_srgb,var(--brand)_10%,var(--surface))] hover:text-brand hover:shadow-[0_14px_26px_-20px_color-mix(in_srgb,var(--brand)_45%,#000)]',
12
+ primary: 'border-transparent bg-gradient-to-br from-brand to-brand-hover text-white shadow-[0_18px_32px_-22px_var(--brand-hover)] hover:text-white',
13
+ danger: 'border-transparent bg-[color-mix(in_srgb,var(--destructive)_12%,var(--surface))] text-red-700 hover:bg-destructive hover:text-white',
14
+ };
15
+ export const ActionButtonPrimitive = forwardRef(({ children, className, disabled, icon, label, loading = false, tooltip, type = 'button', variant = 'default', ...props }, ref) => {
16
+ const content = label ?? children;
17
+ const hasText = Boolean(content);
18
+ const isDisabled = disabled || loading;
19
+ return (_jsxs("button", { ref: ref, type: type, "aria-label": tooltip, title: tooltip, disabled: isDisabled, className: cn('inline-flex cursor-pointer select-none items-center justify-center rounded-md border font-bold transition-[background-color,border-color,color,box-shadow,transform,opacity] duration-150 active:translate-y-px disabled:translate-y-0 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[color-mix(in_srgb,var(--brand)_36%,transparent)] disabled:cursor-not-allowed disabled:opacity-60', variantClasses[variant], hasText ? 'min-h-8 gap-1.5 px-3 text-[0.8125rem]' : 'size-8 p-0', loading && 'cursor-wait opacity-75', className), ...props, children: [icon && _jsx("span", { className: "inline-flex shrink-0 items-center justify-center [&_svg]:size-4", children: icon }), hasText && _jsx("span", { className: "whitespace-nowrap", children: content })] }));
20
+ });
21
+ ActionButtonPrimitive.displayName = 'ActionButtonPrimitive';
22
+ export const IconButtonPrimitive = forwardRef(({ 'aria-label': ariaLabel, tooltip, ...props }, ref) => (_jsx(ActionButtonPrimitive, { ref: ref, "aria-label": ariaLabel, tooltip: tooltip ?? ariaLabel, ...props })));
23
+ IconButtonPrimitive.displayName = 'IconButtonPrimitive';
@@ -0,0 +1,58 @@
1
+ import { type ReactNode } from 'react';
2
+ import { AppShellActions, AppShellActionsSeparator } from './AppShellActions';
3
+ export type AppShellContentMode = 'default' | 'fluid' | 'fullscreen';
4
+ export type AppShellOverlayVariant = 'default' | 'soft' | 'strong';
5
+ export interface AppShellRootProps {
6
+ bannerSlot?: ReactNode;
7
+ children: ReactNode;
8
+ className?: string;
9
+ overlayVariant?: AppShellOverlayVariant;
10
+ }
11
+ export interface AppShellBodyProps {
12
+ children: ReactNode;
13
+ className?: string;
14
+ sidebar?: ReactNode;
15
+ }
16
+ export interface AppShellOverlayProps {
17
+ className?: string;
18
+ label?: string;
19
+ onClick: () => void;
20
+ variant?: AppShellOverlayVariant;
21
+ visible: boolean;
22
+ }
23
+ interface AppShellSlotProps {
24
+ children: ReactNode;
25
+ className?: string;
26
+ }
27
+ export interface AppShellTopbarProps {
28
+ actions?: ReactNode;
29
+ actionsClassName?: string;
30
+ children?: ReactNode;
31
+ className?: string;
32
+ icon?: ReactNode;
33
+ mobileToggle?: ReactNode;
34
+ pageTitle: ReactNode;
35
+ titleContainerClassName?: string;
36
+ }
37
+ export interface AppShellMainProps {
38
+ children: ReactNode;
39
+ className?: string;
40
+ contentPaddingClassName?: string;
41
+ contentMode?: AppShellContentMode;
42
+ disableContentPadding?: boolean;
43
+ scrollable?: boolean;
44
+ }
45
+ export declare const AppShell: {
46
+ Root: import("react").ForwardRefExoticComponent<AppShellRootProps & import("react").RefAttributes<HTMLDivElement>>;
47
+ Body: import("react").ForwardRefExoticComponent<AppShellBodyProps & import("react").RefAttributes<HTMLDivElement>>;
48
+ Overlay: import("react").ForwardRefExoticComponent<AppShellOverlayProps & import("react").RefAttributes<HTMLButtonElement>>;
49
+ Actions: typeof AppShellActions;
50
+ ActionButton: import("react").ForwardRefExoticComponent<import("./ActionPrimitives").ActionButtonPrimitiveProps & import("react").RefAttributes<HTMLButtonElement>>;
51
+ ActionsSeparator: typeof AppShellActionsSeparator;
52
+ ContentColumn: import("react").ForwardRefExoticComponent<AppShellSlotProps & import("react").RefAttributes<HTMLDivElement>>;
53
+ WorkArea: import("react").ForwardRefExoticComponent<AppShellSlotProps & import("react").RefAttributes<HTMLDivElement>>;
54
+ Topbar: import("react").ForwardRefExoticComponent<AppShellTopbarProps & import("react").RefAttributes<HTMLElement>>;
55
+ Main: import("react").ForwardRefExoticComponent<AppShellMainProps & import("react").RefAttributes<HTMLElement>>;
56
+ };
57
+ export {};
58
+ //# sourceMappingURL=AppShell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../../src/components/AppShell.tsx"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,EAAwB,eAAe,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAEpG,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,OAAO,GAAG,YAAY,CAAC;AACrE,MAAM,MAAM,sBAAsB,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAUnE,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,sBAAsB,CAAC;CACzC;AAcD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAeD,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,sBAAsB,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;CAClB;AAsBD,UAAU,iBAAiB;IACzB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA0BD,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,SAAS,EAAE,SAAS,CAAC;IACrB,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAqCD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAqCD,eAAO,MAAM,QAAQ;;;;;;;;;;;CAWpB,CAAC"}
@@ -0,0 +1,45 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, forwardRef, useContext, } from 'react';
3
+ import { cn } from '../utils/cn';
4
+ import { AppShellActionButton, AppShellActions, AppShellActionsSeparator } from './AppShellActions';
5
+ const AppShellOverlayContext = createContext('default');
6
+ const overlayVariantClasses = {
7
+ default: 'bg-slate-900/28 backdrop-blur-[2px]',
8
+ soft: 'bg-slate-900/18 backdrop-blur-[1.5px]',
9
+ strong: 'bg-slate-900/42 backdrop-blur-[3px]',
10
+ };
11
+ const Root = forwardRef(({ bannerSlot, children, className, overlayVariant = 'default' }, ref) => (_jsx(AppShellOverlayContext.Provider, { value: overlayVariant, children: _jsxs("div", { ref: ref, className: cn('flex h-screen flex-col', className), children: [bannerSlot, children] }) })));
12
+ Root.displayName = 'AppShell.Root';
13
+ const Body = forwardRef(({ children, className, sidebar }, ref) => (_jsxs("div", { ref: ref, className: cn('flex min-h-0 min-w-0 flex-1 overflow-hidden', className), children: [sidebar, children] })));
14
+ Body.displayName = 'AppShell.Body';
15
+ const Overlay = forwardRef(({ className, label = 'Fechar menu lateral', onClick, variant, visible }, ref) => {
16
+ const inheritedVariant = useContext(AppShellOverlayContext);
17
+ const resolvedVariant = variant ?? inheritedVariant;
18
+ if (!visible)
19
+ return null;
20
+ return (_jsx("button", { ref: ref, type: "button", "aria-label": label, className: cn('fixed inset-0 z-[29] cursor-pointer border-0', overlayVariantClasses[resolvedVariant], className), onClick: onClick }));
21
+ });
22
+ Overlay.displayName = 'AppShell.Overlay';
23
+ const ContentColumn = forwardRef(({ children, className }, ref) => (_jsx("div", { ref: ref, className: cn('flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden', className), children: children })));
24
+ ContentColumn.displayName = 'AppShell.ContentColumn';
25
+ const WorkArea = forwardRef(({ children, className }, ref) => (_jsx("div", { ref: ref, className: cn('flex min-h-0 min-w-0 flex-1 flex-col-reverse overflow-hidden md:flex-col', className), children: children })));
26
+ WorkArea.displayName = 'AppShell.WorkArea';
27
+ const Topbar = forwardRef(({ actions, actionsClassName, children, className, icon, mobileToggle, pageTitle, titleContainerClassName, }, ref) => (_jsxs("header", { ref: ref, className: cn('border-app-border bg-background-secondary flex min-h-16 items-center justify-between border-b px-4 pr-4 shadow-[0_2px_8px_-2px_color-mix(in_srgb,#000_6%,transparent)] max-md:pl-0', className), role: "banner", children: [_jsxs("div", { className: cn('flex min-w-0 items-center gap-2.5 max-md:gap-3', titleContainerClassName), children: [mobileToggle, icon && _jsx("span", { className: "shrink-0 text-foreground-muted", "aria-hidden": "true", children: icon }), _jsx("span", { className: "min-w-0 overflow-hidden text-ellipsis whitespace-nowrap text-lg font-semibold leading-7 tracking-[-0.015em] text-foreground-muted", children: pageTitle })] }), (children || actions) && (_jsxs("div", { className: cn('flex shrink-0 items-center gap-4', actionsClassName), children: [children, actions] }))] })));
28
+ Topbar.displayName = 'AppShell.Topbar';
29
+ const Main = forwardRef(({ children, className, contentPaddingClassName, contentMode = 'default', disableContentPadding = false, scrollable = true, }, ref) => {
30
+ const isFullscreen = contentMode === 'fullscreen';
31
+ return (_jsx("main", { ref: ref, className: cn('w-full flex-1 bg-background', !isFullscreen && 'overflow-x-hidden p-3', contentMode === 'default' && 'flex flex-col gap-3', contentMode === 'fluid' && 'flex flex-col gap-3 overflow-y-hidden', contentMode === 'fullscreen' && 'overflow-hidden p-0', !isFullscreen && !disableContentPadding && contentPaddingClassName, !isFullscreen && (scrollable ? 'overflow-y-auto' : 'overflow-y-hidden'), className), children: children }));
32
+ });
33
+ Main.displayName = 'AppShell.Main';
34
+ export const AppShell = {
35
+ Root,
36
+ Body,
37
+ Overlay,
38
+ Actions: AppShellActions,
39
+ ActionButton: AppShellActionButton,
40
+ ActionsSeparator: AppShellActionsSeparator,
41
+ ContentColumn,
42
+ WorkArea,
43
+ Topbar,
44
+ Main,
45
+ };
@@ -0,0 +1,24 @@
1
+ import { type ReactNode } from 'react';
2
+ import { type ActionButtonPrimitiveProps, type ActionButtonVariant, type ActionGroupAlign, type ActionGroupSize, type ActionSeparatorPrimitiveProps } from './ActionPrimitives';
3
+ export type AppShellActionsRegion = 'left' | 'top' | 'bottom' | 'right';
4
+ export type AppShellActionsAlign = ActionGroupAlign;
5
+ export type AppShellActionsSize = ActionGroupSize;
6
+ export type AppShellActionButtonVariant = ActionButtonVariant;
7
+ export interface AppShellActionsProps {
8
+ children: ReactNode;
9
+ className?: string;
10
+ region?: AppShellActionsRegion;
11
+ align?: AppShellActionsAlign;
12
+ size?: AppShellActionsSize;
13
+ }
14
+ export type AppShellActionsSeparatorProps = ActionSeparatorPrimitiveProps;
15
+ export type AppShellActionButtonProps = ActionButtonPrimitiveProps;
16
+ export declare function AppShellActions({ align, children, className, region, size }: AppShellActionsProps): import("react").JSX.Element;
17
+ export declare function AppShellActionsSeparator(props: AppShellActionsSeparatorProps): import("react").JSX.Element;
18
+ export declare const AppShellActionButton: import("react").ForwardRefExoticComponent<ActionButtonPrimitiveProps & import("react").RefAttributes<HTMLButtonElement>>;
19
+ export declare const AppShellActionsApi: {
20
+ Root: typeof AppShellActions;
21
+ Button: import("react").ForwardRefExoticComponent<ActionButtonPrimitiveProps & import("react").RefAttributes<HTMLButtonElement>>;
22
+ Separator: typeof AppShellActionsSeparator;
23
+ };
24
+ //# sourceMappingURL=AppShellActions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppShellActions.d.ts","sourceRoot":"","sources":["../../src/components/AppShellActions.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAIL,KAAK,0BAA0B,EAC/B,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,6BAA6B,EACnC,MAAM,oBAAoB,CAAC;AAG5B,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;AACxE,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;AACpD,MAAM,MAAM,mBAAmB,GAAG,eAAe,CAAC;AAClD,MAAM,MAAM,2BAA2B,GAAG,mBAAmB,CAAC;AAE9D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,KAAK,CAAC,EAAE,oBAAoB,CAAC;IAC7B,IAAI,CAAC,EAAE,mBAAmB,CAAC;CAC5B;AAED,MAAM,MAAM,6BAA6B,GAAG,6BAA6B,CAAC;AAC1E,MAAM,MAAM,yBAAyB,GAAG,0BAA0B,CAAC;AAEnE,wBAAgB,eAAe,CAAC,EAAE,KAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAc,EAAE,IAAW,EAAE,EAAE,oBAAoB,+BAgB1H;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,6BAA6B,+BAE5E;AAED,eAAO,MAAM,oBAAoB,0HAAwB,CAAC;AAE1D,eAAO,MAAM,kBAAkB;;;;CAI9B,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { ActionButtonPrimitive, ActionGroupPrimitive, ActionSeparatorPrimitive, } from './ActionPrimitives';
3
+ import { cn } from '../utils/cn';
4
+ export function AppShellActions({ align = 'start', children, className, region = 'top', size = 'md' }) {
5
+ return (_jsx(ActionGroupPrimitive, { align: align, size: size, className: cn('min-w-0', region === 'top' && 'h-full overflow-x-auto overflow-y-hidden', region === 'bottom' && 'border-app-border bg-background-secondary w-full border-t p-2', (region === 'left' || region === 'right') && 'flex-col items-stretch', className), children: children }));
6
+ }
7
+ export function AppShellActionsSeparator(props) {
8
+ return _jsx(ActionSeparatorPrimitive, { ...props });
9
+ }
10
+ export const AppShellActionButton = ActionButtonPrimitive;
11
+ export const AppShellActionsApi = {
12
+ Root: AppShellActions,
13
+ Button: AppShellActionButton,
14
+ Separator: AppShellActionsSeparator,
15
+ };
@@ -0,0 +1,9 @@
1
+ import { type HTMLAttributes } from 'react';
2
+ export type BadgeVariant = 'default' | 'primary' | 'success' | 'warning' | 'info' | 'danger' | 'muted';
3
+ export type BadgeSize = 'xs' | 'sm' | 'md';
4
+ export interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {
5
+ variant?: BadgeVariant | string;
6
+ size?: BadgeSize;
7
+ }
8
+ export declare const Badge: import("react").ForwardRefExoticComponent<BadgeProps & import("react").RefAttributes<HTMLSpanElement>>;
9
+ //# sourceMappingURL=Badge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../src/components/Badge.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AAIxD,MAAM,MAAM,YAAY,GACpB,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,MAAM,GACN,QAAQ,GACR,OAAO,CAAC;AAEZ,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE3C,MAAM,WAAW,UAAW,SAAQ,cAAc,CAAC,eAAe,CAAC;IACjE,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC;IAChC,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AA4BD,eAAO,MAAM,KAAK,wGAoBjB,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { forwardRef } from 'react';
3
+ import { cn } from '../utils/cn';
4
+ const variantAlias = {
5
+ active: 'default',
6
+ paid: 'success',
7
+ pending: 'warning',
8
+ sent: 'warning',
9
+ error: 'danger',
10
+ 'status-success': 'success',
11
+ 'status-danger': 'danger',
12
+ };
13
+ const variantClasses = {
14
+ default: 'border-app-border bg-background text-foreground',
15
+ primary: 'border-primary-light bg-primary-light text-primary',
16
+ success: 'border-[var(--status-success-border,#86efac)] bg-[var(--status-success-bg,rgba(220,252,231,0.8))] text-[var(--status-success-text,#15803d)]',
17
+ warning: 'border-[var(--status-warning-border,#fcd34d)] bg-[var(--status-warning-bg,rgba(254,243,199,0.8))] text-[var(--status-warning-text,#92400e)]',
18
+ info: 'border-[var(--status-info-border,#93c5fd)] bg-[var(--status-info-bg,rgba(219,234,254,0.8))] text-[var(--status-info-text,#1d4ed8)]',
19
+ danger: 'border-[var(--status-danger-border,#fca5a5)] bg-[var(--status-danger-bg,rgba(254,202,202,0.8))] text-[var(--status-danger-text,#b91c1c)]',
20
+ muted: 'border-app-border bg-[color-mix(in_srgb,var(--app-border)_60%,transparent)] text-foreground-muted',
21
+ };
22
+ const sizeClasses = {
23
+ xs: 'px-2 py-0.5 text-xs',
24
+ sm: 'px-2.5 py-1 text-sm',
25
+ md: 'px-3 py-1 text-base',
26
+ };
27
+ export const Badge = forwardRef(({ className, size = 'xs', variant = 'default', ...props }, ref) => {
28
+ const normalizedVariant = variant.toLowerCase();
29
+ const normalizedAlias = variantAlias[normalizedVariant] ?? normalizedVariant;
30
+ const knownVariant = normalizedAlias;
31
+ const variantClass = variantClasses[knownVariant] ?? normalizedVariant;
32
+ return (_jsx("span", { ref: ref, className: cn('inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border font-medium leading-none', variantClass, sizeClasses[size], className), ...props }));
33
+ });
34
+ Badge.displayName = 'Badge';
@@ -0,0 +1,14 @@
1
+ import { type ButtonHTMLAttributes } from 'react';
2
+ export type ButtonVariant = 'default' | 'primary' | 'secondary' | 'ghost' | 'outline' | 'success' | 'danger' | 'destructive' | 'sidebar';
3
+ export type ButtonSize = 'xs' | 'sm' | 'md' | 'lg' | 'wide';
4
+ export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
5
+ variant?: ButtonVariant;
6
+ size?: ButtonSize;
7
+ isLoading?: boolean;
8
+ isSubmitting?: boolean;
9
+ minWidth?: number | string;
10
+ rounded?: boolean;
11
+ tooltip?: string;
12
+ }
13
+ export declare const Button: import("react").ForwardRefExoticComponent<ButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
14
+ //# sourceMappingURL=Button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../src/components/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAI9D,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,SAAS,GACT,WAAW,GACX,OAAO,GACP,SAAS,GACT,SAAS,GACT,QAAQ,GACR,aAAa,GACb,SAAS,CAAC;AACd,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;AAE5D,MAAM,WAAW,WAAY,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IAC1E,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA8BD,eAAO,MAAM,MAAM,2GAmDlB,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { forwardRef } from 'react';
3
+ import { cn } from '../utils/cn';
4
+ const variantClasses = {
5
+ default: 'border-transparent bg-brand text-primary-foreground hover:bg-brand-hover',
6
+ primary: 'border-transparent bg-brand text-primary-foreground hover:bg-brand-hover',
7
+ secondary: 'border-app-border bg-surface text-foreground hover:bg-[color-mix(in_srgb,var(--brand)_10%,transparent)] hover:text-brand',
8
+ ghost: 'border-transparent bg-transparent text-foreground-muted hover:bg-[color-mix(in_srgb,var(--brand)_10%,transparent)] hover:text-brand',
9
+ outline: 'border-app-border bg-surface text-foreground hover:bg-[color-mix(in_srgb,var(--brand)_10%,transparent)] hover:text-brand',
10
+ success: 'border-transparent bg-green-600 text-white hover:bg-green-700',
11
+ danger: 'border-transparent bg-red-700 text-white hover:bg-red-800',
12
+ destructive: 'border-transparent bg-destructive text-white hover:bg-red-600',
13
+ sidebar: 'border-transparent bg-transparent text-foreground-muted hover:bg-[color-mix(in_srgb,var(--brand)_10%,transparent)] hover:text-brand',
14
+ };
15
+ const sizeClasses = {
16
+ xs: 'min-h-7 min-w-7 px-1.5 py-1 text-[0.625rem]',
17
+ sm: 'min-h-9 min-w-9 px-2.5 py-2 text-xs',
18
+ md: 'min-h-11 min-w-20 px-4 py-2.5 text-sm',
19
+ lg: 'min-h-13 min-w-24 px-6 py-3 text-base',
20
+ wide: 'min-h-11 min-w-20 w-full px-4 py-2.5 text-sm',
21
+ };
22
+ const roundedSizeClasses = {
23
+ xs: 'size-7 min-h-7 min-w-7 p-1 text-[0.625rem]',
24
+ sm: 'size-9 min-h-9 min-w-9 p-1.5 text-xs',
25
+ md: 'size-12 min-h-12 min-w-12 p-2 text-sm',
26
+ lg: 'size-14 min-h-14 min-w-14 p-3 text-base',
27
+ wide: 'min-h-11 min-w-20 w-full px-4 py-2.5 text-sm',
28
+ };
29
+ export const Button = forwardRef(({ children, className, disabled, isLoading = false, isSubmitting = false, minWidth, rounded = false, size = 'md', style, title, tooltip, type = 'button', variant = 'secondary', ...props }, ref) => {
30
+ const busy = isLoading || isSubmitting;
31
+ const resolvedSize = rounded ? roundedSizeClasses[size] : sizeClasses[size];
32
+ const ariaBusy = props['aria-busy'] ?? (busy ? true : undefined);
33
+ return (_jsx("button", { ref: ref, className: cn('inline-flex cursor-pointer items-center justify-center gap-2 rounded-[var(--radius)] border font-semibold leading-none no-underline transition-[background-color,border-color,color,opacity,box-shadow] duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand/30 disabled:cursor-not-allowed disabled:opacity-55 disabled:saturate-50', variantClasses[variant], resolvedSize, rounded && 'rounded-full', busy && 'cursor-wait opacity-90', className), disabled: disabled || busy, style: {
34
+ ...style,
35
+ ...(minWidth !== undefined
36
+ ? { minWidth: typeof minWidth === 'number' ? `${minWidth}px` : minWidth }
37
+ : {}),
38
+ }, "aria-busy": ariaBusy, title: tooltip ?? title, type: type, ...props, children: children }));
39
+ });
40
+ Button.displayName = 'Button';
@@ -0,0 +1,21 @@
1
+ import { type HTMLAttributes, type ReactNode } from 'react';
2
+ export interface CardProps extends HTMLAttributes<HTMLDivElement> {
3
+ children: ReactNode;
4
+ className?: string;
5
+ highlight?: boolean;
6
+ variant?: 'default' | 'subtle';
7
+ }
8
+ export interface CardContentProps extends HTMLAttributes<HTMLDivElement> {
9
+ density?: 'default' | 'compact';
10
+ }
11
+ declare function CardRoot({ className, children, highlight, variant, ...props }: CardProps): import("react").JSX.Element;
12
+ declare function CardTitle({ className, children, ...props }: HTMLAttributes<HTMLHeadingElement>): import("react").JSX.Element;
13
+ declare function CardContent({ className, children, density, ...props }: CardContentProps): import("react").JSX.Element;
14
+ declare function CardFooter({ className, children, ...props }: HTMLAttributes<HTMLDivElement>): import("react").JSX.Element;
15
+ export declare const Card: typeof CardRoot & {
16
+ Title: typeof CardTitle;
17
+ Content: typeof CardContent;
18
+ Footer: typeof CardFooter;
19
+ };
20
+ export {};
21
+ //# sourceMappingURL=Card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../src/components/Card.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAI5D,MAAM,WAAW,SAAU,SAAQ,cAAc,CAAC,cAAc,CAAC;IAC/D,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;CAChC;AAED,MAAM,WAAW,gBAAiB,SAAQ,cAAc,CAAC,cAAc,CAAC;IACtE,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CACjC;AAED,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAiB,EAAE,OAAmB,EAAE,GAAG,KAAK,EAAE,EAAE,SAAS,+BAgBrG;AAED,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,kBAAkB,CAAC,+BAavF;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAmB,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,+BAS5F;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,cAAc,CAAC,+BASpF;AAED,eAAO,MAAM,IAAI;;;;CAIf,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn } from '../utils/cn';
3
+ function CardRoot({ className, children, highlight = false, variant = 'default', ...props }) {
4
+ return (_jsx("div", { className: cn('border-app-border rounded-xl border', highlight
5
+ && 'bg-[linear-gradient(135deg,color-mix(in_srgb,var(--color-surface,var(--surface))_92%,var(--color-primary,var(--brand))_8%),var(--color-surface,var(--surface)))] shadow-[0_12px_32px_rgba(15,23,42,0.06)]', !highlight
6
+ && (variant === 'subtle' ? 'bg-surface/60' : 'bg-surface'), className), ...props, children: children }));
7
+ }
8
+ function CardTitle({ className, children, ...props }) {
9
+ return (_jsx("h2", { className: cn('text-foreground col-span-12 flex h-10 items-center gap-2 rounded-t-xl px-4 text-sm font-semibold', 'border-app-border border-b', className), ...props, children: children }));
10
+ }
11
+ function CardContent({ className, children, density = 'default', ...props }) {
12
+ return (_jsx("div", { className: cn('flex flex-col', density === 'compact' ? 'gap-3 p-3' : 'gap-6 p-6', className), ...props, children: children }));
13
+ }
14
+ function CardFooter({ className, children, ...props }) {
15
+ return (_jsx("div", { className: cn('border-app-border flex items-center gap-4 border-t p-4', className), ...props, children: children }));
16
+ }
17
+ export const Card = Object.assign(CardRoot, {
18
+ Title: CardTitle,
19
+ Content: CardContent,
20
+ Footer: CardFooter,
21
+ });
@@ -0,0 +1,73 @@
1
+ import React, { type ReactNode } from 'react';
2
+ import { type ButtonProps } from './Button';
3
+ export type ConfirmationDialogVariant = 'default' | 'question' | 'destructive';
4
+ export type ConfirmationDialogButtonVariant = 'cancel' | 'confirm' | 'danger' | 'success';
5
+ export interface ConfirmationDialogAction extends Omit<ButtonProps, 'children' | 'onClick'> {
6
+ children?: ReactNode;
7
+ label?: ReactNode;
8
+ onSelect: () => Promise<void> | void;
9
+ }
10
+ export interface ConfirmationDialogProps {
11
+ actions?: ConfirmationDialogAction[];
12
+ cancelLabel?: ReactNode;
13
+ children?: ReactNode;
14
+ className?: string;
15
+ confirmLabel?: ReactNode;
16
+ description?: ReactNode;
17
+ onClose: () => void;
18
+ onConfirm?: () => Promise<void> | void;
19
+ open: boolean;
20
+ title?: ReactNode;
21
+ variant?: ConfirmationDialogVariant;
22
+ }
23
+ export interface ConfirmationDialogRootProps {
24
+ children: ReactNode;
25
+ className?: string;
26
+ closeOnEscape?: boolean;
27
+ onOpenChange: (open: boolean) => void;
28
+ open: boolean;
29
+ overlayClassName?: string;
30
+ variant?: ConfirmationDialogVariant;
31
+ }
32
+ export interface ConfirmationDialogButtonProps extends Omit<ButtonProps, 'children' | 'onClick' | 'variant'> {
33
+ buttonVariant?: ButtonProps['variant'];
34
+ children?: ReactNode;
35
+ closeOnSuccess?: boolean;
36
+ label?: ReactNode;
37
+ onClick?: () => Promise<void> | void;
38
+ submit?: boolean;
39
+ variant?: ConfirmationDialogButtonVariant;
40
+ }
41
+ declare function Root({ children, className, closeOnEscape, onOpenChange, open, overlayClassName, variant, }: ConfirmationDialogRootProps): React.ReactPortal | null;
42
+ declare function Icon({ className }: {
43
+ className?: string;
44
+ }): React.JSX.Element;
45
+ declare function Title({ children, className }: {
46
+ children: ReactNode;
47
+ className?: string;
48
+ }): React.JSX.Element;
49
+ declare function Description({ children, className }: {
50
+ children: ReactNode;
51
+ className?: string;
52
+ }): React.JSX.Element;
53
+ declare function Body({ children, className }: {
54
+ children: ReactNode;
55
+ className?: string;
56
+ }): React.JSX.Element;
57
+ declare function Footer({ children, className }: {
58
+ children: ReactNode;
59
+ className?: string;
60
+ }): React.JSX.Element;
61
+ declare function Button({ children, closeOnSuccess, disabled, label, minWidth, onClick, size, submit, variant, ...props }: ConfirmationDialogButtonProps): React.JSX.Element;
62
+ declare function ConfirmationDialogSimple({ actions, cancelLabel, children, className, confirmLabel, description, onClose, onConfirm, open, title, variant, }: ConfirmationDialogProps): React.JSX.Element;
63
+ export declare const ConfirmationDialog: typeof ConfirmationDialogSimple & {
64
+ Root: typeof Root;
65
+ Icon: typeof Icon;
66
+ Title: typeof Title;
67
+ Description: typeof Description;
68
+ Body: typeof Body;
69
+ Footer: typeof Footer;
70
+ Button: typeof Button;
71
+ };
72
+ export {};
73
+ //# sourceMappingURL=ConfirmationDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfirmationDialog.d.ts","sourceRoot":"","sources":["../../src/components/ConfirmationDialog.tsx"],"names":[],"mappings":"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"}