@wellingtonhlc/shared-ui 0.29.0 → 0.29.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.
- package/README.md +25 -10
- package/dist/cli/check-page-actions.d.ts +9 -0
- package/dist/cli/check-page-actions.d.ts.map +1 -0
- package/dist/cli/check-page-actions.js +108 -0
- package/dist/components/ActionBar.d.ts +26 -0
- package/dist/components/ActionBar.d.ts.map +1 -0
- package/dist/components/ActionBar.js +29 -0
- package/dist/components/ActionPrimitives.d.ts +31 -0
- package/dist/components/ActionPrimitives.d.ts.map +1 -0
- package/dist/components/ActionPrimitives.js +27 -0
- package/dist/components/AppShell.d.ts +65 -0
- package/dist/components/AppShell.d.ts.map +1 -0
- package/dist/components/AppShell.js +50 -0
- package/dist/components/AppShellActions.d.ts +24 -0
- package/dist/components/AppShellActions.d.ts.map +1 -0
- package/dist/components/AppShellActions.js +15 -0
- package/dist/components/Badge.d.ts +16 -0
- package/dist/components/Badge.d.ts.map +1 -0
- package/dist/components/Badge.js +36 -0
- package/dist/components/Banner.d.ts +13 -0
- package/dist/components/Banner.d.ts.map +1 -0
- package/dist/components/Banner.js +29 -0
- package/dist/components/Button.d.ts +14 -0
- package/dist/components/Button.d.ts.map +1 -0
- package/dist/components/Button.js +39 -0
- package/dist/components/Card.d.ts +36 -0
- package/dist/components/Card.d.ts.map +1 -0
- package/dist/components/Card.js +56 -0
- package/dist/components/ConfirmationDialog.d.ts +74 -0
- package/dist/components/ConfirmationDialog.d.ts.map +1 -0
- package/dist/components/ConfirmationDialog.js +234 -0
- package/dist/components/CopyableField.d.ts +10 -0
- package/dist/components/CopyableField.d.ts.map +1 -0
- package/dist/components/CopyableField.js +60 -0
- package/dist/components/DateField.d.ts +20 -0
- package/dist/components/DateField.d.ts.map +1 -0
- package/dist/components/DateField.js +172 -0
- package/dist/components/DecimalField.d.ts +21 -0
- package/dist/components/DecimalField.d.ts.map +1 -0
- package/dist/components/DecimalField.js +137 -0
- package/dist/components/DismissiblePopover.d.ts +14 -0
- package/dist/components/DismissiblePopover.d.ts.map +1 -0
- package/dist/components/DismissiblePopover.js +51 -0
- package/dist/components/EmptyState.d.ts +15 -0
- package/dist/components/EmptyState.d.ts.map +1 -0
- package/dist/components/EmptyState.js +32 -0
- package/dist/components/FieldControl.d.ts +20 -0
- package/dist/components/FieldControl.d.ts.map +1 -0
- package/dist/components/FieldControl.js +73 -0
- package/dist/components/FieldGroup.d.ts +11 -0
- package/dist/components/FieldGroup.d.ts.map +1 -0
- package/dist/components/FieldGroup.js +11 -0
- package/dist/components/FieldSkeleton.d.ts +14 -0
- package/dist/components/FieldSkeleton.d.ts.map +1 -0
- package/dist/components/FieldSkeleton.js +23 -0
- package/dist/components/FieldValidationError.d.ts +8 -0
- package/dist/components/FieldValidationError.d.ts.map +1 -0
- package/dist/components/FieldValidationError.js +7 -0
- package/dist/components/Filter.d.ts +51 -0
- package/dist/components/Filter.d.ts.map +1 -0
- package/dist/components/Filter.js +68 -0
- package/dist/components/Loading.d.ts +17 -0
- package/dist/components/Loading.d.ts.map +1 -0
- package/dist/components/Loading.js +15 -0
- package/dist/components/LoadingOverlay.d.ts +11 -0
- package/dist/components/LoadingOverlay.d.ts.map +1 -0
- package/dist/components/LoadingOverlay.js +8 -0
- package/dist/components/Modal.d.ts +49 -0
- package/dist/components/Modal.d.ts.map +1 -0
- package/dist/components/Modal.js +108 -0
- package/dist/components/MultiSelectField.d.ts +22 -0
- package/dist/components/MultiSelectField.d.ts.map +1 -0
- package/dist/components/MultiSelectField.js +84 -0
- package/dist/components/NavCard.d.ts +15 -0
- package/dist/components/NavCard.d.ts.map +1 -0
- package/dist/components/NavCard.js +13 -0
- package/dist/components/Page.d.ts +89 -0
- package/dist/components/Page.d.ts.map +1 -0
- package/dist/components/Page.js +347 -0
- package/dist/components/PageMessage.d.ts +12 -0
- package/dist/components/PageMessage.d.ts.map +1 -0
- package/dist/components/PageMessage.js +36 -0
- package/dist/components/Pagination.d.ts +15 -0
- package/dist/components/Pagination.d.ts.map +1 -0
- package/dist/components/Pagination.js +57 -0
- package/dist/components/PasswordInput.d.ts +8 -0
- package/dist/components/PasswordInput.d.ts.map +1 -0
- package/dist/components/PasswordInput.js +17 -0
- package/dist/components/RadioGroup.d.ts +32 -0
- package/dist/components/RadioGroup.d.ts.map +1 -0
- package/dist/components/RadioGroup.js +86 -0
- package/dist/components/RenderCase.d.ts +20 -0
- package/dist/components/RenderCase.d.ts.map +1 -0
- package/dist/components/RenderCase.js +31 -0
- package/dist/components/RenderIf.d.ts +10 -0
- package/dist/components/RenderIf.d.ts.map +1 -0
- package/dist/components/RenderIf.js +9 -0
- package/dist/components/SearchField.d.ts +22 -0
- package/dist/components/SearchField.d.ts.map +1 -0
- package/dist/components/SearchField.js +43 -0
- package/dist/components/SelectField.d.ts +31 -0
- package/dist/components/SelectField.d.ts.map +1 -0
- package/dist/components/SelectField.js +26 -0
- package/dist/components/SelectionField.d.ts +39 -0
- package/dist/components/SelectionField.d.ts.map +1 -0
- package/dist/components/SelectionField.js +105 -0
- package/dist/components/Sidebar.d.ts +104 -0
- package/dist/components/Sidebar.d.ts.map +1 -0
- package/dist/components/Sidebar.js +146 -0
- package/dist/components/StatCard.d.ts +16 -0
- package/dist/components/StatCard.d.ts.map +1 -0
- package/dist/components/StatCard.js +62 -0
- package/dist/components/Switch.d.ts +20 -0
- package/dist/components/Switch.d.ts.map +1 -0
- package/dist/components/Switch.js +63 -0
- package/dist/components/Table.d.ts +65 -0
- package/dist/components/Table.d.ts.map +1 -0
- package/dist/components/Table.js +118 -0
- package/dist/components/TabsUnderlined.d.ts +23 -0
- package/dist/components/TabsUnderlined.d.ts.map +1 -0
- package/dist/components/TabsUnderlined.js +29 -0
- package/dist/components/TextField.d.ts +25 -0
- package/dist/components/TextField.d.ts.map +1 -0
- package/dist/components/TextField.js +71 -0
- package/dist/components/TextareaField.d.ts +14 -0
- package/dist/components/TextareaField.d.ts.map +1 -0
- package/dist/components/TextareaField.js +34 -0
- package/dist/components/ThemePreferencesSelector.d.ts +29 -0
- package/dist/components/ThemePreferencesSelector.d.ts.map +1 -0
- package/dist/components/ThemePreferencesSelector.js +37 -0
- package/dist/components/Tooltip.d.ts +13 -0
- package/dist/components/Tooltip.d.ts.map +1 -0
- package/dist/components/Tooltip.js +40 -0
- package/dist/components/Workspace.d.ts +22 -0
- package/dist/components/Workspace.d.ts.map +1 -0
- package/dist/components/Workspace.js +33 -0
- package/dist/components/WorkspaceContext.d.ts +2 -0
- package/dist/components/WorkspaceContext.d.ts.map +1 -0
- package/dist/components/WorkspaceContext.js +2 -0
- package/dist/components/form-control-helpers.d.ts +24 -0
- package/dist/components/form-control-helpers.d.ts.map +1 -0
- package/dist/components/form-control-helpers.js +20 -0
- package/dist/index.d.ts +45 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/styles.css +21 -41
- package/dist/tailwind-preset.d.ts +23 -0
- package/dist/tailwind-preset.d.ts.map +1 -0
- package/dist/tailwind-preset.js +22 -0
- package/dist/utils/cn.d.ts +2 -0
- package/dist/utils/cn.d.ts.map +1 -0
- package/dist/utils/cn.js +33 -0
- package/package.json +1 -1
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { cn } from '../utils/cn';
|
|
4
|
+
import { controlClasses } from './form-control-helpers';
|
|
5
|
+
import { FieldControl } from './FieldControl';
|
|
6
|
+
export const TextField = React.forwardRef(({ label, errorMessage, error, id, className, wrapperClassName, labelClassName = '', labelPosition = 'top', icon, iconPosition = 'right', children, startAdornment, endAdornment, adornmentClassName, roundedFull = false, size = 'sm', variant = 'default', placeholder, disabled = false, helperText, hasValidation = false, ...props }, ref) => {
|
|
7
|
+
const componentId = id || props.name;
|
|
8
|
+
const positionedIcon = icon;
|
|
9
|
+
const resolvedStartAdornment = startAdornment ?? (iconPosition === 'left' ? positionedIcon : undefined);
|
|
10
|
+
const resolvedEndAdornment = endAdornment ?? children ?? (iconPosition === 'right' ? positionedIcon : undefined);
|
|
11
|
+
const hasStartAdornment = !!resolvedStartAdornment;
|
|
12
|
+
const hasEndAdornment = !!resolvedEndAdornment;
|
|
13
|
+
const resolvedError = errorMessage ?? error;
|
|
14
|
+
const sizeMap = {
|
|
15
|
+
xs: 'h-7 text-xs',
|
|
16
|
+
sm: 'h-9 text-sm',
|
|
17
|
+
md: 'h-12 text-md',
|
|
18
|
+
lg: 'h-14 text-base',
|
|
19
|
+
};
|
|
20
|
+
const roundedClass = roundedFull ? 'rounded-full' : size === 'lg' ? 'rounded-lg' : 'rounded-md';
|
|
21
|
+
const sizeClass = `${sizeMap[size ?? 'sm']} ${roundedClass}`;
|
|
22
|
+
const paddingClass = {
|
|
23
|
+
xs: 'px-2',
|
|
24
|
+
sm: 'px-3',
|
|
25
|
+
md: 'px-4',
|
|
26
|
+
lg: 'px-6',
|
|
27
|
+
};
|
|
28
|
+
const rightPaddingMap = {
|
|
29
|
+
xs: 'pr-8',
|
|
30
|
+
sm: 'pr-10',
|
|
31
|
+
md: 'pr-12',
|
|
32
|
+
lg: 'pr-14',
|
|
33
|
+
};
|
|
34
|
+
const leftPaddingMap = {
|
|
35
|
+
xs: 'pl-8',
|
|
36
|
+
sm: 'pl-10',
|
|
37
|
+
md: 'pl-12',
|
|
38
|
+
lg: 'pl-14',
|
|
39
|
+
};
|
|
40
|
+
const startAdornmentOffsetMap = {
|
|
41
|
+
xs: 'left-2',
|
|
42
|
+
sm: 'left-2',
|
|
43
|
+
md: 'left-3',
|
|
44
|
+
lg: 'left-4',
|
|
45
|
+
};
|
|
46
|
+
const endAdornmentOffsetMap = {
|
|
47
|
+
xs: 'right-1.5',
|
|
48
|
+
sm: 'right-2',
|
|
49
|
+
md: 'right-3',
|
|
50
|
+
lg: 'right-4',
|
|
51
|
+
};
|
|
52
|
+
const adornmentSizeMap = {
|
|
53
|
+
xs: '[&>svg]:size-3.5',
|
|
54
|
+
sm: '[&>svg]:size-4',
|
|
55
|
+
md: '[&>svg]:size-[1.125rem]',
|
|
56
|
+
lg: '[&>svg]:size-5',
|
|
57
|
+
};
|
|
58
|
+
return (_jsx(FieldControl, { label: label, id: componentId, labelClassName: labelClassName, labelPosition: labelPosition, wrapperClassName: wrapperClassName, errorMessage: resolvedError, hasValidation: hasValidation || !!helperText || props['aria-invalid'] === true, roundedFull: roundedFull, size: size, disabled: disabled, children: ({ controlId, describedBy, errorMessage: controlError, disabled: controlDisabled, label: controlLabel }) => {
|
|
59
|
+
const helperId = `${controlId}-helper`;
|
|
60
|
+
const inputDescribedBy = cn(describedBy, helperText && !controlError && helperId);
|
|
61
|
+
return (_jsxs("div", { children: [_jsxs("div", { className: "relative", children: [_jsx("input", { ref: ref, ...props, id: controlId, disabled: controlDisabled, placeholder: placeholder ?? controlLabel, "aria-invalid": !!controlError, "aria-describedby": inputDescribedBy || undefined, className: controlClasses({
|
|
62
|
+
errorMessage: controlError,
|
|
63
|
+
disabled: controlDisabled,
|
|
64
|
+
variant,
|
|
65
|
+
extra: cn(className, 'truncate', roundedFull
|
|
66
|
+
? cn('rounded-full', paddingClass[size ?? 'sm'], sizeClass, hasStartAdornment && leftPaddingMap[size ?? 'sm'], hasEndAdornment && rightPaddingMap[size ?? 'sm'])
|
|
67
|
+
: cn(paddingClass[size ?? 'sm'], sizeClass, hasStartAdornment && leftPaddingMap[size ?? 'sm'], hasEndAdornment && rightPaddingMap[size ?? 'sm'])),
|
|
68
|
+
}) }), hasStartAdornment && (_jsx("div", { className: cn('pointer-events-none absolute inset-y-0 flex items-center justify-center text-foreground-muted', startAdornmentOffsetMap[size ?? 'sm'], adornmentSizeMap[size ?? 'sm'], adornmentClassName), children: resolvedStartAdornment })), hasEndAdornment && (_jsx("div", { className: cn('pointer-events-none absolute inset-y-0 flex items-center justify-center text-foreground-muted', endAdornmentOffsetMap[size ?? 'sm'], adornmentSizeMap[size ?? 'sm'], adornmentClassName), children: resolvedEndAdornment }))] }), helperText && !controlError ? (_jsx("p", { id: helperId, className: "mt-1 text-xs font-medium text-foreground-muted", children: helperText })) : null] }));
|
|
69
|
+
} }));
|
|
70
|
+
});
|
|
71
|
+
TextField.displayName = 'TextField';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface TextareaFieldProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'> {
|
|
3
|
+
wrapperClassName?: string;
|
|
4
|
+
labelClassName?: string;
|
|
5
|
+
label?: string;
|
|
6
|
+
errorMessage?: string;
|
|
7
|
+
hasValidation?: boolean;
|
|
8
|
+
roundedFull?: boolean;
|
|
9
|
+
size?: 'xs' | 'sm' | 'md' | 'lg';
|
|
10
|
+
/** Faz o textarea preencher a altura disponivel do container em vez de usar altura fixa. */
|
|
11
|
+
stretch?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare const TextareaField: React.ForwardRefExoticComponent<TextareaFieldProps & React.RefAttributes<HTMLTextAreaElement>>;
|
|
14
|
+
//# sourceMappingURL=TextareaField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextareaField.d.ts","sourceRoot":"","sources":["../../src/components/TextareaField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IACzG,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACjC,4FAA4F;IAC5F,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,aAAa,gGA8EzB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { cn } from '../utils/cn';
|
|
4
|
+
import { controlClasses } from './form-control-helpers';
|
|
5
|
+
import { FieldControl } from './FieldControl';
|
|
6
|
+
export const TextareaField = React.forwardRef(({ label, errorMessage, id, className, wrapperClassName = '', labelClassName = '', roundedFull = false, size = 'sm', stretch = false, placeholder, disabled = false, hasValidation = false, ...props }, ref) => {
|
|
7
|
+
const componentId = id || props.name;
|
|
8
|
+
const sizeMap = {
|
|
9
|
+
xs: 'text-xs px-2',
|
|
10
|
+
sm: 'text-sm px-3',
|
|
11
|
+
md: 'text-sm px-4',
|
|
12
|
+
lg: 'text-base px-6',
|
|
13
|
+
};
|
|
14
|
+
const heightMap = {
|
|
15
|
+
xs: 'h-7',
|
|
16
|
+
sm: 'h-9',
|
|
17
|
+
md: 'h-12',
|
|
18
|
+
lg: 'h-14',
|
|
19
|
+
};
|
|
20
|
+
const roundedClass = roundedFull ? 'rounded-full' : size === 'lg' ? 'rounded-lg' : 'rounded-md';
|
|
21
|
+
const sizeClassArr = [];
|
|
22
|
+
if (!props.rows) {
|
|
23
|
+
sizeClassArr.push(sizeMap[size ?? 'sm']);
|
|
24
|
+
if (!stretch)
|
|
25
|
+
sizeClassArr.push(heightMap[size ?? 'sm']);
|
|
26
|
+
sizeClassArr.push(roundedClass);
|
|
27
|
+
}
|
|
28
|
+
return (_jsx(FieldControl, { label: label, id: componentId, labelClassName: labelClassName, wrapperClassName: wrapperClassName, errorMessage: errorMessage, roundedFull: roundedFull, size: size, stretch: stretch, disabled: disabled, hasValidation: hasValidation, children: ({ controlId, describedBy, errorMessage: controlError, disabled: controlDisabled, label: controlLabel }) => (_jsx("textarea", { ref: ref, ...props, id: controlId, disabled: controlDisabled, placeholder: placeholder ?? controlLabel, "aria-invalid": !!controlError, "aria-describedby": describedBy, className: controlClasses({
|
|
29
|
+
errorMessage: controlError,
|
|
30
|
+
disabled: controlDisabled,
|
|
31
|
+
extra: cn(...sizeClassArr, roundedFull && 'min-h-[2rem] px-4 py-1.5', stretch && 'h-full min-h-0', className),
|
|
32
|
+
}) })) }));
|
|
33
|
+
});
|
|
34
|
+
TextareaField.displayName = 'TextareaField';
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { CSSProperties } from 'react';
|
|
2
|
+
export type ThemeAppearance = 'system' | 'light' | 'dark';
|
|
3
|
+
export type ThemeColorOption = {
|
|
4
|
+
key: string;
|
|
5
|
+
label: string;
|
|
6
|
+
primary: string;
|
|
7
|
+
locked?: boolean;
|
|
8
|
+
requiredPlan?: string;
|
|
9
|
+
};
|
|
10
|
+
export type ThemePreferencesValue = {
|
|
11
|
+
color: string;
|
|
12
|
+
appearance: ThemeAppearance;
|
|
13
|
+
};
|
|
14
|
+
export interface ThemePreferencesSelectorProps {
|
|
15
|
+
value: ThemePreferencesValue;
|
|
16
|
+
options: ThemeColorOption[];
|
|
17
|
+
onChange: (value: ThemePreferencesValue) => void;
|
|
18
|
+
disabled?: boolean;
|
|
19
|
+
locked?: boolean;
|
|
20
|
+
showAppearanceSelector?: boolean;
|
|
21
|
+
showColorSelector?: boolean;
|
|
22
|
+
appearanceButtonClassName?: string;
|
|
23
|
+
selectedAppearanceButtonClassName?: string;
|
|
24
|
+
appearanceButtonStyle?: CSSProperties;
|
|
25
|
+
selectedAppearanceButtonStyle?: CSSProperties;
|
|
26
|
+
onLockedOptionClick?: (option: ThemeColorOption) => void;
|
|
27
|
+
}
|
|
28
|
+
export declare function ThemePreferencesSelector({ disabled, locked, onChange, onLockedOptionClick, options, appearanceButtonClassName, appearanceButtonStyle, selectedAppearanceButtonClassName, selectedAppearanceButtonStyle, showAppearanceSelector, showColorSelector, value, }: ThemePreferencesSelectorProps): import("react").JSX.Element;
|
|
29
|
+
//# sourceMappingURL=ThemePreferencesSelector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThemePreferencesSelector.d.ts","sourceRoot":"","sources":["../../src/components/ThemePreferencesSelector.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAG3C,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAE1D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,eAAe,CAAC;CAC7B,CAAC;AAEF,MAAM,WAAW,6BAA6B;IAC5C,KAAK,EAAE,qBAAqB,CAAC;IAC7B,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,QAAQ,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,iCAAiC,CAAC,EAAE,MAAM,CAAC;IAC3C,qBAAqB,CAAC,EAAE,aAAa,CAAC;IACtC,6BAA6B,CAAC,EAAE,aAAa,CAAC;IAC9C,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC1D;AAQD,wBAAgB,wBAAwB,CAAC,EACvC,QAAgB,EAChB,MAAc,EACd,QAAQ,EACR,mBAAmB,EACnB,OAAO,EACP,yBAAyB,EACzB,qBAAqB,EACrB,iCAAiC,EACjC,6BAA6B,EAC7B,sBAA6B,EAC7B,iBAAwB,EACxB,KAAK,GACN,EAAE,6BAA6B,+BAsF/B"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Monitor, Moon, Sun } from 'lucide-react';
|
|
3
|
+
import { cn } from '../utils/cn';
|
|
4
|
+
const appearanceOptions = [
|
|
5
|
+
{ value: 'system', label: 'Sistema', Icon: Monitor },
|
|
6
|
+
{ value: 'light', label: 'Claro', Icon: Sun },
|
|
7
|
+
{ value: 'dark', label: 'Escuro', Icon: Moon },
|
|
8
|
+
];
|
|
9
|
+
export function ThemePreferencesSelector({ disabled = false, locked = false, onChange, onLockedOptionClick, options, appearanceButtonClassName, appearanceButtonStyle, selectedAppearanceButtonClassName, selectedAppearanceButtonStyle, showAppearanceSelector = true, showColorSelector = true, value, }) {
|
|
10
|
+
function selectAppearance(appearance) {
|
|
11
|
+
if (disabled || locked)
|
|
12
|
+
return;
|
|
13
|
+
onChange({ ...value, appearance });
|
|
14
|
+
}
|
|
15
|
+
function selectColor(option) {
|
|
16
|
+
if (disabled || locked)
|
|
17
|
+
return;
|
|
18
|
+
if (option.locked) {
|
|
19
|
+
onLockedOptionClick?.(option);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
onChange({ ...value, color: option.key });
|
|
23
|
+
}
|
|
24
|
+
return (_jsxs("div", { className: "grid gap-4", children: [showColorSelector ? (_jsxs("section", { className: "grid gap-2", children: [_jsx("span", { className: "text-xs font-bold uppercase tracking-[var(--letter-spacing-caps)] text-foreground-muted", children: "Cor do sistema" }), _jsx("div", { className: "flex flex-wrap gap-2", children: options.map((option) => {
|
|
25
|
+
const isSelected = value.color === option.key;
|
|
26
|
+
const isOptionLocked = locked || option.locked;
|
|
27
|
+
return (_jsx("button", { type: "button", className: cn('relative size-8 cursor-pointer rounded-full border-2 border-transparent shadow-[var(--shadow-theme-swatch)] transition-[border-color,box-shadow,transform,opacity] hover:-translate-y-px hover:border-[color-mix(in_srgb,var(--brand)_52%,transparent)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand/35 disabled:opacity-60', isSelected && 'border-[color-mix(in_srgb,var(--brand)_64%,var(--on-solid))] shadow-[var(--shadow-focus)]', isOptionLocked && 'cursor-not-allowed opacity-45 saturate-50 hover:translate-y-0 hover:border-transparent'), style: { '--theme-color': option.primary, background: option.primary }, onClick: () => selectColor(option), disabled: disabled, "aria-pressed": isSelected, "aria-label": isOptionLocked ? `${option.label} bloqueado` : option.label, title: isOptionLocked && option.requiredPlan
|
|
28
|
+
? `${option.label} exige ${option.requiredPlan}`
|
|
29
|
+
: option.label }, option.key));
|
|
30
|
+
}) })] })) : null, showAppearanceSelector ? (_jsxs("section", { className: "grid gap-2", children: [_jsx("span", { className: "text-xs font-bold uppercase tracking-[var(--letter-spacing-caps)] text-foreground-muted", children: "Aparencia" }), _jsx("div", { className: "flex flex-wrap items-center justify-start gap-2", children: appearanceOptions.map((option) => {
|
|
31
|
+
const Icon = option.Icon;
|
|
32
|
+
const isSelected = value.appearance === option.value;
|
|
33
|
+
return (_jsxs("button", { type: "button", className: cn('border-app-border bg-surface inline-flex h-9 w-full max-w-[120px] cursor-pointer items-center justify-center gap-1.5 rounded-md border px-3 text-xs font-bold text-foreground-muted transition-[background-color,border-color,color,box-shadow] 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 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand/35 disabled:cursor-not-allowed disabled:opacity-60', appearanceButtonClassName, isSelected &&
|
|
34
|
+
(selectedAppearanceButtonClassName ??
|
|
35
|
+
'border-brand bg-brand text-primary-foreground shadow-[var(--shadow-focus)]')), style: isSelected ? { ...appearanceButtonStyle, ...selectedAppearanceButtonStyle } : appearanceButtonStyle, onClick: () => selectAppearance(option.value), disabled: disabled || locked, "aria-pressed": isSelected, "data-selected": isSelected, children: [_jsx(Icon, { "aria-hidden": "true", size: 14, strokeWidth: 2 }), option.label] }, option.value));
|
|
36
|
+
}) })] })) : null] }));
|
|
37
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React, { type ReactNode } from 'react';
|
|
2
|
+
export type TooltipSide = 'top' | 'right' | 'bottom' | 'left';
|
|
3
|
+
export interface TooltipProps {
|
|
4
|
+
children: ReactNode;
|
|
5
|
+
className?: string;
|
|
6
|
+
content: ReactNode;
|
|
7
|
+
delayDuration?: number;
|
|
8
|
+
openOnClick?: boolean;
|
|
9
|
+
side?: TooltipSide;
|
|
10
|
+
sideOffset?: number;
|
|
11
|
+
}
|
|
12
|
+
export declare function Tooltip({ children, className, content, delayDuration, openOnClick, side, sideOffset, }: TooltipProps): React.JSX.Element;
|
|
13
|
+
//# sourceMappingURL=Tooltip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../../src/components/Tooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAA+B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAK3E,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE9D,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,SAAS,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,OAAO,CAAC,EACtB,QAAQ,EACR,SAAS,EACT,OAAO,EACP,aAAmB,EACnB,WAAmB,EACnB,IAAe,EACf,UAAc,GACf,EAAE,YAAY,qBA+Dd"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef, useState } from 'react';
|
|
3
|
+
import * as TooltipPrimitive from '@radix-ui/react-tooltip';
|
|
4
|
+
import { cn } from '../utils/cn';
|
|
5
|
+
export function Tooltip({ children, className, content, delayDuration = 300, openOnClick = false, side = 'bottom', sideOffset = 6, }) {
|
|
6
|
+
const [open, setOpen] = useState(false);
|
|
7
|
+
const triggerRef = useRef(null);
|
|
8
|
+
const contentRef = useRef(null);
|
|
9
|
+
useEffect(() => {
|
|
10
|
+
if (!openOnClick || !open)
|
|
11
|
+
return undefined;
|
|
12
|
+
function handlePointerDown(event) {
|
|
13
|
+
const target = event.target;
|
|
14
|
+
if (!target)
|
|
15
|
+
return;
|
|
16
|
+
if (triggerRef.current?.contains(target) || contentRef.current?.contains(target))
|
|
17
|
+
return;
|
|
18
|
+
setOpen(false);
|
|
19
|
+
}
|
|
20
|
+
function handleKeyDown(event) {
|
|
21
|
+
if (event.key === 'Escape')
|
|
22
|
+
setOpen(false);
|
|
23
|
+
}
|
|
24
|
+
document.addEventListener('pointerdown', handlePointerDown);
|
|
25
|
+
document.addEventListener('keydown', handleKeyDown);
|
|
26
|
+
return () => {
|
|
27
|
+
document.removeEventListener('pointerdown', handlePointerDown);
|
|
28
|
+
document.removeEventListener('keydown', handleKeyDown);
|
|
29
|
+
};
|
|
30
|
+
}, [open, openOnClick]);
|
|
31
|
+
function handleOpenChange(nextOpen) {
|
|
32
|
+
setOpen(nextOpen);
|
|
33
|
+
}
|
|
34
|
+
function handleTriggerClick() {
|
|
35
|
+
if (!openOnClick)
|
|
36
|
+
return;
|
|
37
|
+
setOpen((current) => !current);
|
|
38
|
+
}
|
|
39
|
+
return (_jsx(TooltipPrimitive.Provider, { delayDuration: delayDuration, children: _jsxs(TooltipPrimitive.Root, { open: openOnClick ? open : undefined, onOpenChange: openOnClick ? handleOpenChange : undefined, children: [_jsx(TooltipPrimitive.Trigger, { asChild: true, ref: triggerRef, onClick: handleTriggerClick, children: children }), _jsx(TooltipPrimitive.Portal, { children: _jsxs(TooltipPrimitive.Content, { ref: contentRef, className: cn('border-app-border bg-surface text-foreground z-[var(--z-tooltip)] rounded-md border px-3 py-1.5 text-xs shadow-[var(--shadow-md)]', 'data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=closed]:animate-out data-[state=closed]:fade-out-0', className), side: side, sideOffset: sideOffset, children: [content, _jsx(TooltipPrimitive.Arrow, { className: "fill-surface" })] }) })] }) }));
|
|
40
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type ReactElement, type ReactNode } from 'react';
|
|
2
|
+
export interface WorkspaceRootProps {
|
|
3
|
+
/** Painel de filtros exibido a esquerda (ex.: `Filter.Root`). */
|
|
4
|
+
filters: ReactNode;
|
|
5
|
+
/** Resultado principal encapsulado por `Workspace.Table`. */
|
|
6
|
+
children: ReactElement<WorkspaceTableProps, typeof WorkspaceTable>;
|
|
7
|
+
className?: string;
|
|
8
|
+
appearance?: 'separated' | 'joined';
|
|
9
|
+
}
|
|
10
|
+
export interface WorkspaceTableProps {
|
|
11
|
+
children: ReactNode;
|
|
12
|
+
}
|
|
13
|
+
declare function WorkspaceTable({ children }: WorkspaceTableProps): import("react").JSX.Element;
|
|
14
|
+
declare function WorkspaceFilterTrigger(): import("react").JSX.Element;
|
|
15
|
+
declare function WorkspaceRoot({ filters, children, className, appearance, }: WorkspaceRootProps): import("react").JSX.Element;
|
|
16
|
+
export declare const Workspace: {
|
|
17
|
+
Root: typeof WorkspaceRoot;
|
|
18
|
+
Table: typeof WorkspaceTable;
|
|
19
|
+
FilterTrigger: typeof WorkspaceFilterTrigger;
|
|
20
|
+
};
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=Workspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Workspace.d.ts","sourceRoot":"","sources":["../../src/components/Workspace.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAYtE,MAAM,WAAW,kBAAkB;IACjC,iEAAiE;IACjE,OAAO,EAAE,SAAS,CAAC;IACnB,6DAA6D;IAC7D,QAAQ,EAAE,YAAY,CAAC,mBAAmB,EAAE,OAAO,cAAc,CAAC,CAAC;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC;CACrC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,iBAAS,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE,mBAAmB,+BAExD;AAED,iBAAS,sBAAsB,gCAgB9B;AAED,iBAAS,aAAa,CAAC,EACrB,OAAO,EACP,QAAQ,EACR,SAAS,EACT,UAAwB,GACzB,EAAE,kBAAkB,+BAgDpB;AAED,eAAO,MAAM,SAAS;;;;CAIrB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useContext } from 'react';
|
|
3
|
+
import { FilterIcon, FilterXIcon } from 'lucide-react';
|
|
4
|
+
import { cn } from '../utils/cn';
|
|
5
|
+
import { Card } from './Card';
|
|
6
|
+
import { EmptyState } from './EmptyState';
|
|
7
|
+
import { Filter, FilterVisibilityContext } from './Filter';
|
|
8
|
+
import { Page } from './Page';
|
|
9
|
+
import { RenderCase } from './RenderCase';
|
|
10
|
+
import { RenderIf } from './RenderIf';
|
|
11
|
+
import { WorkspaceResultContext } from './WorkspaceContext';
|
|
12
|
+
function WorkspaceTable({ children }) {
|
|
13
|
+
return _jsx(_Fragment, { children: children });
|
|
14
|
+
}
|
|
15
|
+
function WorkspaceFilterTrigger() {
|
|
16
|
+
const visibility = useContext(FilterVisibilityContext);
|
|
17
|
+
const isFilterOpen = visibility?.open ?? true;
|
|
18
|
+
return (_jsx(Filter.Trigger, { triggerSlot: (_jsx(Page.ActionButton, { "aria-label": isFilterOpen ? 'Ocultar filtros' : 'Mostrar filtros', icon: isFilterOpen ? _jsx(FilterXIcon, { "aria-hidden": "true" }) : _jsx(FilterIcon, { "aria-hidden": "true" }), label: isFilterOpen ? 'Ocultar filtros' : 'Mostrar filtros', tooltip: isFilterOpen ? 'Ocultar filtros' : 'Mostrar filtros' })) }));
|
|
19
|
+
}
|
|
20
|
+
function WorkspaceRoot({ filters, children, className, appearance = 'separated', }) {
|
|
21
|
+
const visibility = useContext(FilterVisibilityContext);
|
|
22
|
+
const isJoined = appearance === 'joined';
|
|
23
|
+
const isFilterOpen = visibility?.open ?? true;
|
|
24
|
+
const result = children;
|
|
25
|
+
return (_jsxs("div", { className: cn('grid h-full min-h-0 flex-1 xl:grid-rows-[minmax(0,1fr)]', isJoined
|
|
26
|
+
? 'gap-0 overflow-hidden rounded-[var(--radius)] border border-app-border bg-background-secondary [&_[data-slot=filter-root]]:rounded-none [&_[data-slot=filter-root]]:border-0 [&_[data-slot=filter-root]]:!border-r [&_[data-slot=filter-root]]:!border-app-border [&_[data-slot=filter-header]]:!h-10 [&_[data-slot=filter-header]]:!rounded-none [&_[data-slot=filter-header]]:!bg-background-secondary [&_[data-slot=filter-footer]]:!px-3 [&_[data-slot=filter-footer]]:!py-2 [&_[data-slot=filter-footer]_button]:!h-8 [&_[data-slot=filter-footer]_button]:!min-h-8 [&_[data-slot=filter-footer]_button]:!px-2.5 [&_[data-slot=filter-footer]_button]:!py-0 [&_[data-slot=filter-footer]_button]:!text-xs [&_[data-slot=table-root]]:!rounded-none [&_[data-slot=table-root]]:!border-0 [&_[data-slot=table-root]]:!shadow-none [&_[data-slot=table-pagination]]:!px-3 [&_[data-slot=table-pagination]]:!py-2'
|
|
27
|
+
: 'gap-3', isFilterOpen ? 'xl:grid-cols-[280px_minmax(0,1fr)]' : 'xl:grid-cols-[minmax(0,1fr)]', className), children: [_jsx(RenderIf, { when: isFilterOpen, children: _jsx("aside", { className: "min-h-0 xl:self-stretch xl:[&>*]:h-full xl:[&>*]:min-h-0", children: filters }) }), _jsx("section", { className: cn("flex h-full min-h-0 flex-1 flex-col", isJoined ? "bg-background-secondary" : "bg-transparent"), children: _jsx(WorkspaceResultContext.Provider, { value: true, children: _jsxs(RenderCase.Root, { children: [_jsx(RenderCase.If, { when: Boolean(result && (Array.isArray(result) ? result.length > 0 : true)), children: result }), _jsx(RenderCase.Else, { children: _jsx(Card.Root, { className: "flex flex-1 items-center justify-center bg-surface/60 p-8 shadow-sm", children: _jsx(EmptyState, { title: "Nenhum resultado", description: "Ajuste os filtros e pesquise novamente." }) }) })] }) }) })] }));
|
|
28
|
+
}
|
|
29
|
+
export const Workspace = {
|
|
30
|
+
Root: WorkspaceRoot,
|
|
31
|
+
Table: WorkspaceTable,
|
|
32
|
+
FilterTrigger: WorkspaceFilterTrigger,
|
|
33
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkspaceContext.d.ts","sourceRoot":"","sources":["../../src/components/WorkspaceContext.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,sBAAsB,kCAAuB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare const fieldWrapper = "flex w-full flex-col space-y-1";
|
|
2
|
+
export declare const labelBase = "text-md font-medium";
|
|
3
|
+
export type FormControlVariant = 'default' | 'filled' | 'ghost' | 'neutral';
|
|
4
|
+
interface ControlClassOptions {
|
|
5
|
+
errorMessage?: string;
|
|
6
|
+
extra?: string;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
variant?: FormControlVariant;
|
|
9
|
+
}
|
|
10
|
+
export type FormControlSize = 'xs' | 'sm' | 'md' | 'lg';
|
|
11
|
+
export interface FormControlRenderProps {
|
|
12
|
+
controlId: string;
|
|
13
|
+
errorId: string;
|
|
14
|
+
describedBy?: string;
|
|
15
|
+
errorMessage?: string;
|
|
16
|
+
disabled?: boolean;
|
|
17
|
+
label?: string;
|
|
18
|
+
roundedFull: boolean;
|
|
19
|
+
size: FormControlSize;
|
|
20
|
+
}
|
|
21
|
+
export declare function controlClasses(errorMessage?: string, extra?: string, disabled?: boolean): string;
|
|
22
|
+
export declare function controlClasses(options?: ControlClassOptions): string;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=form-control-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-control-helpers.d.ts","sourceRoot":"","sources":["../../src/components/form-control-helpers.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,mCAAmC,CAAC;AAE7D,eAAO,MAAM,SAAS,wBAAwB,CAAC;AAE/C,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAgC5E,UAAU,mBAAmB;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,eAAe,CAAC;CACvB;AAED,wBAAgB,cAAc,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;AAClG,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { cn } from '../utils/cn';
|
|
2
|
+
export const fieldWrapper = 'flex w-full flex-col space-y-1';
|
|
3
|
+
export const labelBase = 'text-md font-medium';
|
|
4
|
+
const controlShared = cn('text-foreground placeholder:text-foreground-muted w-full rounded-md px-3 py-2 font-medium border', 'transition-[background-color,border-color,box-shadow,color] duration-[var(--duration-normal)]', 'disabled:cursor-not-allowed disabled:opacity-60');
|
|
5
|
+
const controlDefault = cn(controlShared, 'bg-surface border-app-border', 'enabled:hover:border-brand', 'focus:outline-none focus:bg-surface focus:border-brand focus:ring-2 focus:ring-inset focus:ring-brand/35', 'disabled:bg-input-bg disabled:border-app-border');
|
|
6
|
+
const controlFilled = cn(controlShared, 'bg-input-bg border-app-border', 'enabled:hover:border-brand enabled:hover:bg-[color-mix(in_srgb,var(--input-bg)_75%,var(--surface))]', 'focus:outline-none focus:bg-surface focus:border-brand focus:ring-2 focus:ring-inset focus:ring-brand/35', 'disabled:bg-input-bg disabled:border-app-border');
|
|
7
|
+
const controlGhost = cn(controlShared, 'bg-transparent border-transparent', 'enabled:hover:bg-[color-mix(in_srgb,var(--foreground-muted)_8%,transparent)] enabled:hover:border-[color-mix(in_srgb,var(--foreground-muted)_24%,transparent)]', 'focus:outline-none focus:bg-surface focus:border-brand focus:ring-2 focus:ring-inset focus:ring-brand/25', 'disabled:bg-transparent disabled:border-transparent');
|
|
8
|
+
export function controlClasses(errorMessageOrOptions, extra, disabled) {
|
|
9
|
+
const options = typeof errorMessageOrOptions === 'object'
|
|
10
|
+
? errorMessageOrOptions
|
|
11
|
+
: { errorMessage: errorMessageOrOptions, extra, disabled };
|
|
12
|
+
const variant = options.variant === 'neutral' ? 'ghost' : options.variant ?? 'default';
|
|
13
|
+
const base = variant === 'filled'
|
|
14
|
+
? controlFilled
|
|
15
|
+
: variant === 'ghost'
|
|
16
|
+
? controlGhost
|
|
17
|
+
: controlDefault;
|
|
18
|
+
return cn(base, options.errorMessage &&
|
|
19
|
+
'border-red-500 focus:border-red-500 focus:ring-inset focus:ring-red-200 dark:focus:border-red-400 dark:focus:ring-red-950', options.extra);
|
|
20
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export { cn } from './utils/cn';
|
|
2
|
+
export { AppShell, type AppShellContentMode, type AppShellMainProps, type AppShellOverlayProps, type AppShellOverlayVariant, type AppShellTopbarButtonProps, type AppShellTopbarProps, } from './components/AppShell';
|
|
3
|
+
export { AppShellActionButton, AppShellActions, AppShellActionsSeparator, type AppShellActionButtonProps, type AppShellActionButtonVariant, type AppShellActionsAlign, type AppShellActionsProps, type AppShellActionsRegion, type AppShellActionsSeparatorProps, } from './components/AppShellActions';
|
|
4
|
+
export { Badge, type BadgeProps, type BadgeVariant } from './components/Badge';
|
|
5
|
+
export { Banner, type BannerProps, type BannerSize, type BannerVariant } from './components/Banner';
|
|
6
|
+
export { Button, type ButtonProps, type ButtonSize, type ButtonVariant } from './components/Button';
|
|
7
|
+
export { Loading, type LoadingProps, type LoadingSize } from './components/Loading';
|
|
8
|
+
export { LoadingOverlay, type LoadingOverlayProps, type LoadingOverlayVariant, } from './components/LoadingOverlay';
|
|
9
|
+
export { DismissiblePopover, type DismissiblePopoverProps } from './components/DismissiblePopover';
|
|
10
|
+
export { ConfirmationDialog, type ConfirmationDialogAction, type ConfirmationDialogProps, type ConfirmationDialogVariant, type ConfirmationDialogVariantInput, } from './components/ConfirmationDialog';
|
|
11
|
+
export { CopyableField, type CopyableFieldProps } from './components/CopyableField';
|
|
12
|
+
export { FieldGroup, FormSection, type FieldGroupProps } from './components/FieldGroup';
|
|
13
|
+
export { EmptyState, type EmptyStateProps, type EmptyStateVariant } from './components/EmptyState';
|
|
14
|
+
export { FieldControl, type FieldControlProps } from './components/FieldControl';
|
|
15
|
+
export { FieldSkeleton, type FieldSkeletonProps } from './components/FieldSkeleton';
|
|
16
|
+
export { FieldValidationError } from './components/FieldValidationError';
|
|
17
|
+
export { Modal, type ModalBodyProps, type ModalDensity, type ModalRootProps, type ModalSectionProps, type ModalSize, type ModalVariant } from './components/Modal';
|
|
18
|
+
export { MultiSelectField, type MultiSelectFieldProps, type MultiSelectOption } from './components/MultiSelectField';
|
|
19
|
+
export { TextField, type TextFieldIconPosition, type TextFieldProps, type TextFieldVariant } from './components/TextField';
|
|
20
|
+
export { RadioGroup, type RadioGroupItemProps, type RadioGroupProps } from './components/RadioGroup';
|
|
21
|
+
export { RenderCase, type RenderCaseChildProps, type RenderCaseRootProps } from './components/RenderCase';
|
|
22
|
+
export { RenderIf, type RenderIfProps } from './components/RenderIf';
|
|
23
|
+
export { SelectField, type SelectFieldAction, type SelectFieldProps, type ValidValues } from './components/SelectField';
|
|
24
|
+
export { SearchField, type SearchFieldProps } from './components/SearchField';
|
|
25
|
+
export { SelectionField, type SelectionDisplayValue, type SelectionFieldProps, type SelectionFieldSize, type SelectionFieldVariant, } from './components/SelectionField';
|
|
26
|
+
export { Switch, type SwitchProps } from './components/Switch';
|
|
27
|
+
export { TextareaField, type TextareaFieldProps } from './components/TextareaField';
|
|
28
|
+
export { DateField, type DateFieldMode, type DateFieldProps } from './components/DateField';
|
|
29
|
+
export { DecimalField, type DecimalFieldProps } from './components/DecimalField';
|
|
30
|
+
export { Pagination, type PaginationProps, type PaginationSize } from './components/Pagination';
|
|
31
|
+
export { Page, type PageActionButtonProps, type PageActionsAlign, type PageActionsElement, type PageActionsHelpContentProps, type PageActionsPreferences, type PageActionsPosition, type PageActionsProps, type PageActionsSeparatorProps, type PageActionsSize, type PageDescriptionProps, type PageTitleProps, } from './components/Page';
|
|
32
|
+
export { PageMessage, type PageMessageProps, type PageMessageVariant } from './components/PageMessage';
|
|
33
|
+
export { PasswordInput, type PasswordInputProps } from './components/PasswordInput';
|
|
34
|
+
export { Filter, FilterVisibilityContext, type FilterFooterProps, type FilterRootProps, type FilterTriggerProps, type FilterVisibilityProps, } from './components/Filter';
|
|
35
|
+
export { Workspace, type WorkspaceRootProps } from './components/Workspace';
|
|
36
|
+
export { Sidebar, type SidebarRootProps } from './components/Sidebar';
|
|
37
|
+
export { Table, TABLE_ACTION_CELL_WIDTH_PX, TABLE_ACTION_EDGE_GUTTER_PX, TABLE_ACTION_GROUP_MIN_WIDTH_PX, getTableActionColumnWidth, type TableActionColumnSize, type TableActionTone, } from './components/Table';
|
|
38
|
+
export { TabsUnderlined, type TabsUnderlinedProps, type UnderlinedTabItem } from './components/TabsUnderlined';
|
|
39
|
+
export { Tooltip, type TooltipProps, type TooltipSide } from './components/Tooltip';
|
|
40
|
+
export { ThemePreferencesSelector, type ThemeAppearance, type ThemeColorOption, type ThemePreferencesSelectorProps, type ThemePreferencesValue, } from './components/ThemePreferencesSelector';
|
|
41
|
+
export * from './components/ActionPrimitives';
|
|
42
|
+
export { Card, type CardActionsProps, type CardBodyProps, type CardDensity, type CardDescriptionProps, type CardHeaderProps, type CardProps, type CardToolbarProps, type CardVariant, } from './components/Card';
|
|
43
|
+
export { StatCard, type StatCardProps, type StatCardSize, type StatCardVariant } from './components/StatCard';
|
|
44
|
+
export { NavCard, type NavCardProps } from './components/NavCard';
|
|
45
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export { cn } from './utils/cn';
|
|
2
|
+
export { AppShell, } from './components/AppShell';
|
|
3
|
+
export { AppShellActionButton, AppShellActions, AppShellActionsSeparator, } from './components/AppShellActions';
|
|
4
|
+
export { Badge } from './components/Badge';
|
|
5
|
+
export { Banner } from './components/Banner';
|
|
6
|
+
export { Button } from './components/Button';
|
|
7
|
+
export { Loading } from './components/Loading';
|
|
8
|
+
export { LoadingOverlay, } from './components/LoadingOverlay';
|
|
9
|
+
export { DismissiblePopover } from './components/DismissiblePopover';
|
|
10
|
+
export { ConfirmationDialog, } from './components/ConfirmationDialog';
|
|
11
|
+
export { CopyableField } from './components/CopyableField';
|
|
12
|
+
export { FieldGroup, FormSection } from './components/FieldGroup';
|
|
13
|
+
export { EmptyState } from './components/EmptyState';
|
|
14
|
+
export { FieldControl } from './components/FieldControl';
|
|
15
|
+
export { FieldSkeleton } from './components/FieldSkeleton';
|
|
16
|
+
export { FieldValidationError } from './components/FieldValidationError';
|
|
17
|
+
export { Modal } from './components/Modal';
|
|
18
|
+
export { MultiSelectField } from './components/MultiSelectField';
|
|
19
|
+
export { TextField } from './components/TextField';
|
|
20
|
+
export { RadioGroup } from './components/RadioGroup';
|
|
21
|
+
export { RenderCase } from './components/RenderCase';
|
|
22
|
+
export { RenderIf } from './components/RenderIf';
|
|
23
|
+
export { SelectField } from './components/SelectField';
|
|
24
|
+
export { SearchField } from './components/SearchField';
|
|
25
|
+
export { SelectionField, } from './components/SelectionField';
|
|
26
|
+
export { Switch } from './components/Switch';
|
|
27
|
+
export { TextareaField } from './components/TextareaField';
|
|
28
|
+
export { DateField } from './components/DateField';
|
|
29
|
+
export { DecimalField } from './components/DecimalField';
|
|
30
|
+
export { Pagination } from './components/Pagination';
|
|
31
|
+
export { Page, } from './components/Page';
|
|
32
|
+
export { PageMessage } from './components/PageMessage';
|
|
33
|
+
export { PasswordInput } from './components/PasswordInput';
|
|
34
|
+
export { Filter, FilterVisibilityContext, } from './components/Filter';
|
|
35
|
+
export { Workspace } from './components/Workspace';
|
|
36
|
+
export { Sidebar } from './components/Sidebar';
|
|
37
|
+
export { Table, TABLE_ACTION_CELL_WIDTH_PX, TABLE_ACTION_EDGE_GUTTER_PX, TABLE_ACTION_GROUP_MIN_WIDTH_PX, getTableActionColumnWidth, } from './components/Table';
|
|
38
|
+
export { TabsUnderlined } from './components/TabsUnderlined';
|
|
39
|
+
export { Tooltip } from './components/Tooltip';
|
|
40
|
+
export { ThemePreferencesSelector, } from './components/ThemePreferencesSelector';
|
|
41
|
+
export * from './components/ActionPrimitives';
|
|
42
|
+
export { Card, } from './components/Card';
|
|
43
|
+
export { StatCard } from './components/StatCard';
|
|
44
|
+
export { NavCard } from './components/NavCard';
|