@wellingtonhlc/shared-ui 0.24.21 → 0.25.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 CHANGED
@@ -186,7 +186,7 @@ Componentes disponiveis na API publica:
186
186
  | Layout | `AppShell`, `Page`, `Sidebar`, `Card`, `StatCard` |
187
187
  | Acoes | `Button`, `ActionPrimitives`, `AppShellActions`, `ConfirmationDialog` |
188
188
  | Feedback | `Badge`, `EmptyState`, `PageMessage`, `Tooltip`, `CopyableField` |
189
- | Formularios | `FieldControl`, `FieldGroup`, `TextField`, `TextareaField`, `SelectField`, `DateField`, `DecimalField`, `MultiSelectField`, `PasswordInput`, `Switch`, `RadioGroup` |
189
+ | Formularios | `FieldControl`, `FieldGroup`, `TextField`, `TextareaField`, `SelectField`, `SelectionField`, `DateField`, `DecimalField`, `MultiSelectField`, `PasswordInput`, `Switch`, `RadioGroup` |
190
190
  | Consulta | `Filter`, `Workspace` |
191
191
  | Dados | `Table`, `Pagination`, `TabsUnderlined` |
192
192
  | Controle de renderizacao | `RenderIf`, `RenderCase` |
@@ -239,6 +239,42 @@ Pontos de validacao:
239
239
  - Use `showColorSelector={false}` ou `showAppearanceSelector={false}` quando o consumidor precisar exibir apenas uma parte do controle.
240
240
  - A story `AppearanceStates` mostra as tres aparencias ja selecionadas para validacao visual rapida.
241
241
 
242
+ ## SelectionField
243
+
244
+ `SelectionField` padroniza campos de selecao que exibem um registro, abrem uma busca externa e permitem limpar o valor selecionado. O componente nao gerencia modal nem estado interno do registro; o consumidor controla `value`, `onClick` e `onClear`.
245
+
246
+ Contrato minimo:
247
+
248
+ ```tsx
249
+ import { SelectionField, type SelectionDisplayValue } from '@wellingtonhlc/shared-ui';
250
+ import { UserCheck } from 'lucide-react';
251
+
252
+ const value: SelectionDisplayValue = {
253
+ title: 'Registro selecionado',
254
+ subtitle: 'Descricao complementar',
255
+ meta: 'COD-1024',
256
+ };
257
+
258
+ <SelectionField
259
+ label="Registro"
260
+ value={value}
261
+ icon={<UserCheck />}
262
+ clearable
263
+ size="sm"
264
+ selectTooltip="Selecionar registro"
265
+ clearTooltip="Limpar registro"
266
+ onClick={openSearch}
267
+ onClear={clearSelection}
268
+ />;
269
+ ```
270
+
271
+ Pontos de validacao:
272
+
273
+ - `size` segue a mesma escala visual dos campos base (`xs`, `sm`, `md`, `lg`).
274
+ - Use `triggerSlot` quando o consumidor precisar injetar um botao proprio para abrir a selecao.
275
+ - `clearable` exibe a acao de limpar somente quando ha `value` e `onClear`.
276
+ - `shortcutHint` pode exibir atalhos de teclado, como `F1`.
277
+
242
278
  ## Filter
243
279
 
244
280
  `Filter.Root` organiza filtros compactos, ocupando apenas o espaço necessário. Quando houver muitos filtros, somente o corpo do painel rola e as ações continuam visíveis.
@@ -0,0 +1,39 @@
1
+ import React from 'react';
2
+ import { type FormControlSize, type FormControlVariant } from './form-control-helpers';
3
+ export interface SelectionDisplayValue {
4
+ title: string;
5
+ subtitle?: string | null;
6
+ meta?: string | null;
7
+ }
8
+ export type SelectionFieldSize = FormControlSize;
9
+ export type SelectionFieldVariant = FormControlVariant;
10
+ type SelectionTriggerProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {
11
+ tooltip?: string;
12
+ };
13
+ export interface SelectionFieldProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children' | 'className' | 'disabled' | 'required' | 'value'> {
14
+ label?: string;
15
+ description?: string;
16
+ value?: SelectionDisplayValue | null;
17
+ placeholder?: string;
18
+ icon?: React.ReactNode;
19
+ emptyIcon?: React.ReactNode;
20
+ triggerSlot?: React.ReactElement<SelectionTriggerProps>;
21
+ clearable?: boolean;
22
+ disabled?: boolean;
23
+ loading?: boolean;
24
+ required?: boolean;
25
+ errorMessage?: string;
26
+ size?: SelectionFieldSize;
27
+ variant?: SelectionFieldVariant;
28
+ shortcutHint?: string;
29
+ selectTooltip?: string;
30
+ clearTooltip?: string;
31
+ className?: string;
32
+ controlClassName?: string;
33
+ labelClassName?: string;
34
+ labelPosition?: 'top' | 'right' | 'bottom' | 'left';
35
+ onClear?: () => void;
36
+ }
37
+ export declare function SelectionField({ label, description, value, placeholder, icon, emptyIcon, triggerSlot, clearable, disabled, loading, required, errorMessage, size, variant, shortcutHint, selectTooltip, clearTooltip, className, controlClassName, labelClassName, labelPosition, onClear, onClick, title: triggerTitle, type, ...triggerButtonProps }: SelectionFieldProps): React.JSX.Element;
38
+ export {};
39
+ //# sourceMappingURL=SelectionField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectionField.d.ts","sourceRoot":"","sources":["../../src/components/SelectionField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAkB,KAAK,eAAe,EAAE,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAIvG,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,MAAM,kBAAkB,GAAG,eAAe,CAAC;AACjD,MAAM,MAAM,qBAAqB,GAAG,kBAAkB,CAAC;AAEvD,KAAK,qBAAqB,GAAG,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,WAAW,mBACf,SAAQ,IAAI,CACV,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAC7C,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,CAC7D;IACD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B,WAAW,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC;IACxD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IACpD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAuDD,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,WAAW,EACX,KAAK,EACL,WAAqC,EACrC,IAAI,EACJ,SAAS,EACT,WAAW,EACX,SAAiB,EACjB,QAAgB,EAChB,OAAe,EACf,QAAgB,EAChB,YAAY,EACZ,IAAW,EACX,OAAmB,EACnB,YAAY,EACZ,aAA4B,EAC5B,YAA+B,EAC/B,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,aAAqB,EACrB,OAAO,EACP,OAAO,EACP,KAAK,EAAE,YAAY,EACnB,IAAe,EACf,GAAG,kBAAkB,EACtB,EAAE,mBAAmB,qBAiMrB"}
@@ -0,0 +1,105 @@
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
+ import { Search, X } from 'lucide-react';
7
+ const controlSizeClass = {
8
+ xs: '!h-7 !pr-0.5 !py-0 text-xs',
9
+ sm: '!h-9 !pr-1 !py-0 text-sm',
10
+ md: '!h-12 !pr-1.5 !py-0 text-md',
11
+ lg: '!h-14 !pr-2 !py-0 text-base',
12
+ };
13
+ const controlLeadingPaddingClass = {
14
+ xs: '!pl-2',
15
+ sm: '!pl-3',
16
+ md: '!pl-4',
17
+ lg: '!pl-6',
18
+ };
19
+ const controlIconPaddingClass = {
20
+ xs: '!pl-0.5',
21
+ sm: '!pl-1',
22
+ md: '!pl-1.5',
23
+ lg: '!pl-2',
24
+ };
25
+ const controlGapClass = {
26
+ xs: 'gap-0.5',
27
+ sm: 'gap-1',
28
+ md: 'gap-1.5',
29
+ lg: 'gap-2',
30
+ };
31
+ const iconSizeClass = {
32
+ xs: '[&>svg]:size-3.5',
33
+ sm: '[&>svg]:size-4',
34
+ md: '[&>svg]:size-[1.125rem]',
35
+ lg: '[&>svg]:size-5',
36
+ };
37
+ const actionSizeClass = {
38
+ xs: '!size-6 !min-h-6 !min-w-6 !p-0 [&>svg]:size-3.5',
39
+ sm: '!size-7 !min-h-7 !min-w-7 !p-0 [&>svg]:size-4',
40
+ md: '!size-9 !min-h-9 !min-w-9 !p-0 [&>svg]:size-[1.125rem]',
41
+ lg: '!size-10 !min-h-10 !min-w-10 !p-0 [&>svg]:size-5',
42
+ };
43
+ const textGapClass = {
44
+ xs: 'gap-0',
45
+ sm: 'gap-0',
46
+ md: 'gap-1',
47
+ lg: 'gap-1',
48
+ };
49
+ function stopPropagation(event) {
50
+ event.stopPropagation();
51
+ }
52
+ export function SelectionField({ label, description, value, placeholder = 'Selecione um registro', icon, emptyIcon, triggerSlot, clearable = false, disabled = false, loading = false, required = false, errorMessage, size = 'sm', variant = 'default', shortcutHint, selectTooltip = 'Selecionar', clearTooltip = 'Limpar selecao', className, controlClassName, labelClassName, labelPosition = 'top', onClear, onClick, title: triggerTitle, type = 'button', ...triggerButtonProps }) {
53
+ const hasValue = !!value;
54
+ const resolvedIcon = hasValue ? icon : emptyIcon ?? icon;
55
+ const title = value?.title ?? placeholder;
56
+ const subtitle = value?.subtitle;
57
+ const meta = value?.meta;
58
+ const generatedDescriptionId = React.useId().replace(/:/g, '');
59
+ const describedById = description ? `${generatedDescriptionId}-description` : undefined;
60
+ const showClear = clearable && hasValue && !disabled && !loading && !!onClear;
61
+ const [isClearHover, setIsClearHover] = React.useState(false);
62
+ function handleClear(event) {
63
+ event.stopPropagation();
64
+ onClear?.();
65
+ }
66
+ function handleClearMouseEnter() {
67
+ setIsClearHover(true);
68
+ }
69
+ function handleClearMouseLeave() {
70
+ setIsClearHover(false);
71
+ }
72
+ function handleOpen(event) {
73
+ if (disabled || loading || event.defaultPrevented) {
74
+ return;
75
+ }
76
+ if (onClick) {
77
+ onClick(event);
78
+ return;
79
+ }
80
+ triggerSlot?.props.onClick?.(event);
81
+ }
82
+ const triggerClassName = cn('inline-flex cursor-pointer shrink-0 items-center justify-center rounded-md border border-transparent bg-transparent text-foreground-muted transition-colors', 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand/30 disabled:pointer-events-none disabled:opacity-50', actionSizeClass[size]);
83
+ const selectionTrigger = triggerSlot
84
+ ? React.cloneElement(triggerSlot, {
85
+ 'aria-label': triggerSlot.props['aria-label'] ?? selectTooltip,
86
+ className: cn(triggerClassName, triggerSlot.props.className),
87
+ disabled: disabled || loading || triggerSlot.props.disabled,
88
+ title: triggerSlot.props.title ?? triggerSlot.props.tooltip ?? selectTooltip,
89
+ type: triggerSlot.props.type ?? 'button',
90
+ onClick: triggerSlot.props.onClick,
91
+ })
92
+ : (_jsx("button", { ...triggerButtonProps, type: type, "aria-label": triggerButtonProps['aria-label'] ?? selectTooltip, className: triggerClassName, disabled: disabled || loading, title: triggerTitle ?? selectTooltip, onClick: onClick, children: _jsx(Search, { "aria-hidden": "true" }) }));
93
+ return (_jsx(FieldControl, { label: label, labelClassName: labelClassName, labelPosition: labelPosition, wrapperClassName: className, errorMessage: errorMessage, hasValidation: !!description, size: size, disabled: disabled || loading, children: ({ controlId, describedBy, errorMessage: controlError }) => {
94
+ const ariaDescribedBy = cn(describedBy, describedById);
95
+ return (_jsxs("div", { children: [_jsxs("div", { id: controlId, "aria-describedby": ariaDescribedBy || undefined, "aria-disabled": disabled || loading || undefined, "aria-invalid": !!controlError || undefined, className: controlClasses({
96
+ errorMessage: controlError,
97
+ disabled: disabled || loading,
98
+ variant,
99
+ extra: cn('group flex items-center overflow-hidden border-dashed', !hasValue && 'bg-[color-mix(in_srgb,var(--brand)_5%,var(--surface))]', hasValue && 'bg-surface', disabled || loading
100
+ ? 'cursor-not-allowed'
101
+ : cn('cursor-pointer', !isClearHover &&
102
+ 'hover:border-[color-mix(in_srgb,var(--brand)_58%,var(--app-border))] hover:bg-[color-mix(in_srgb,var(--brand)_8%,var(--surface))]'), size === 'lg' ? 'rounded-lg' : 'rounded-md', controlSizeClass[size], controlGapClass[size], resolvedIcon ? controlIconPaddingClass[size] : controlLeadingPaddingClass[size], controlClassName),
103
+ }), "data-empty": !hasValue || undefined, "data-loading": loading || undefined, onClick: handleOpen, children: [resolvedIcon ? (_jsx("span", { className: cn('inline-flex shrink-0 items-center justify-center rounded-md text-foreground-muted', !hasValue && 'text-[color-mix(in_srgb,var(--brand)_72%,var(--foreground-muted))]', actionSizeClass[size], iconSizeClass[size]), "aria-hidden": "true", children: resolvedIcon })) : null, _jsxs("div", { className: cn('min-w-0 flex-1 text-left', textGapClass[size]), children: [_jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [_jsxs("span", { className: cn('min-w-0 truncate font-semibold', hasValue ? 'text-foreground' : 'text-foreground-muted'), children: [title, required && !hasValue ? _jsx("span", { "aria-hidden": "true", children: " *" }) : null] }), meta ? (_jsx("span", { className: "border-app-border bg-background text-foreground-muted shrink-0 rounded border px-1.5 py-0.5 font-mono text-[0.65rem] leading-none", children: meta })) : null] }), subtitle ? (_jsx("p", { className: cn('text-foreground-muted truncate text-xs font-medium', (size === 'xs' || size === 'sm') && 'sr-only'), children: subtitle })) : null] }), shortcutHint ? (_jsx("kbd", { className: "border-app-border bg-background text-foreground-muted hidden shrink-0 rounded border px-1.5 py-1 font-mono text-[0.65rem] leading-none sm:inline-flex", children: shortcutHint })) : null, showClear ? (_jsx("button", { type: "button", "aria-label": clearTooltip, className: cn('inline-flex cursor-pointer shrink-0 items-center justify-center rounded-md border border-transparent bg-transparent text-foreground-muted transition-colors', 'hover:bg-[color-mix(in_srgb,var(--destructive)_10%,transparent)] hover:text-[var(--destructive)]', 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--destructive)]/25', actionSizeClass[size]), title: clearTooltip, onClick: handleClear, onMouseEnter: handleClearMouseEnter, onMouseLeave: handleClearMouseLeave, children: _jsx(X, { "aria-hidden": "true" }) })) : null, _jsx("span", { onClick: stopPropagation, children: selectionTrigger })] }), description ? (_jsx("p", { id: describedById, className: "mt-1 text-xs font-medium text-foreground-muted", children: description })) : null] }));
104
+ } }));
105
+ }
package/dist/index.d.ts CHANGED
@@ -18,6 +18,7 @@ export { RenderCase, type RenderCaseChildProps, type RenderCaseRootProps } from
18
18
  export { RenderIf, type RenderIfProps } from './components/RenderIf';
19
19
  export { SelectField, type SelectFieldProps, type ValidValues } from './components/SelectField';
20
20
  export { SearchField, type SearchFieldProps } from './components/SearchField';
21
+ export { SelectionField, type SelectionDisplayValue, type SelectionFieldProps, type SelectionFieldSize, type SelectionFieldVariant, } from './components/SelectionField';
21
22
  export { Switch, type SwitchProps } from './components/Switch';
22
23
  export { TextareaField, type TextareaFieldProps } from './components/TextareaField';
23
24
  export { DateField, type DateFieldProps } from './components/DateField';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -18,6 +18,7 @@ export { RenderCase } from './components/RenderCase';
18
18
  export { RenderIf } from './components/RenderIf';
19
19
  export { SelectField } from './components/SelectField';
20
20
  export { SearchField } from './components/SearchField';
21
+ export { SelectionField, } from './components/SelectionField';
21
22
  export { Switch } from './components/Switch';
22
23
  export { TextareaField } from './components/TextareaField';
23
24
  export { DateField } from './components/DateField';
package/dist/styles.css CHANGED
@@ -607,6 +607,7 @@ h2.react-datepicker__current-month {
607
607
  --container-sm: 24rem;
608
608
  --container-md: 28rem;
609
609
  --container-lg: 32rem;
610
+ --container-xl: 36rem;
610
611
  --text-xs: 0.75rem;
611
612
  --text-xs--line-height: calc(1 / 0.75);
612
613
  --text-sm: 0.875rem;
@@ -1068,6 +1069,22 @@ h2.react-datepicker__current-month {
1068
1069
  .table {
1069
1070
  display: table;
1070
1071
  }
1072
+ .\!size-6 {
1073
+ width: calc(var(--spacing) * 6) !important;
1074
+ height: calc(var(--spacing) * 6) !important;
1075
+ }
1076
+ .\!size-7 {
1077
+ width: calc(var(--spacing) * 7) !important;
1078
+ height: calc(var(--spacing) * 7) !important;
1079
+ }
1080
+ .\!size-9 {
1081
+ width: calc(var(--spacing) * 9) !important;
1082
+ height: calc(var(--spacing) * 9) !important;
1083
+ }
1084
+ .\!size-10 {
1085
+ width: calc(var(--spacing) * 10) !important;
1086
+ height: calc(var(--spacing) * 10) !important;
1087
+ }
1071
1088
  .size-3 {
1072
1089
  width: calc(var(--spacing) * 3);
1073
1090
  height: calc(var(--spacing) * 3);
@@ -1108,6 +1125,18 @@ h2.react-datepicker__current-month {
1108
1125
  width: calc(var(--spacing) * 14);
1109
1126
  height: calc(var(--spacing) * 14);
1110
1127
  }
1128
+ .\!h-7 {
1129
+ height: calc(var(--spacing) * 7) !important;
1130
+ }
1131
+ .\!h-9 {
1132
+ height: calc(var(--spacing) * 9) !important;
1133
+ }
1134
+ .\!h-12 {
1135
+ height: calc(var(--spacing) * 12) !important;
1136
+ }
1137
+ .\!h-14 {
1138
+ height: calc(var(--spacing) * 14) !important;
1139
+ }
1111
1140
  .h-1\.5 {
1112
1141
  height: calc(var(--spacing) * 1.5);
1113
1142
  }
@@ -1201,6 +1230,18 @@ h2.react-datepicker__current-month {
1201
1230
  .max-h-\[calc\(100vh-12rem\)\] {
1202
1231
  max-height: calc(100vh - 12rem);
1203
1232
  }
1233
+ .\!min-h-6 {
1234
+ min-height: calc(var(--spacing) * 6) !important;
1235
+ }
1236
+ .\!min-h-7 {
1237
+ min-height: calc(var(--spacing) * 7) !important;
1238
+ }
1239
+ .\!min-h-9 {
1240
+ min-height: calc(var(--spacing) * 9) !important;
1241
+ }
1242
+ .\!min-h-10 {
1243
+ min-height: calc(var(--spacing) * 10) !important;
1244
+ }
1204
1245
  .min-h-0 {
1205
1246
  min-height: calc(var(--spacing) * 0);
1206
1247
  }
@@ -1393,9 +1434,24 @@ h2.react-datepicker__current-month {
1393
1434
  .max-w-sm {
1394
1435
  max-width: var(--container-sm);
1395
1436
  }
1437
+ .max-w-xl {
1438
+ max-width: var(--container-xl);
1439
+ }
1396
1440
  .max-w-xs {
1397
1441
  max-width: var(--container-xs);
1398
1442
  }
1443
+ .\!min-w-6 {
1444
+ min-width: calc(var(--spacing) * 6) !important;
1445
+ }
1446
+ .\!min-w-7 {
1447
+ min-width: calc(var(--spacing) * 7) !important;
1448
+ }
1449
+ .\!min-w-9 {
1450
+ min-width: calc(var(--spacing) * 9) !important;
1451
+ }
1452
+ .\!min-w-10 {
1453
+ min-width: calc(var(--spacing) * 10) !important;
1454
+ }
1399
1455
  .min-w-0 {
1400
1456
  min-width: calc(var(--spacing) * 0);
1401
1457
  }
@@ -1822,6 +1878,12 @@ h2.react-datepicker__current-month {
1822
1878
  .\!bg-transparent {
1823
1879
  background-color: transparent !important;
1824
1880
  }
1881
+ .bg-\[color-mix\(in_srgb\,var\(--brand\)_5\%\,var\(--surface\)\)\] {
1882
+ background-color: var(--brand);
1883
+ @supports (color: color-mix(in lab, red, red)) {
1884
+ background-color: color-mix(in srgb,var(--brand) 5%,var(--surface));
1885
+ }
1886
+ }
1825
1887
  .bg-\[color-mix\(in_srgb\,var\(--brand\)_10\%\,var\(--surface\)\)\] {
1826
1888
  background-color: var(--brand);
1827
1889
  @supports (color: color-mix(in lab, red, red)) {
@@ -1993,6 +2055,9 @@ h2.react-datepicker__current-month {
1993
2055
  .fill-surface {
1994
2056
  fill: var(--color-surface);
1995
2057
  }
2058
+ .\!p-0 {
2059
+ padding: calc(var(--spacing) * 0) !important;
2060
+ }
1996
2061
  .p-0 {
1997
2062
  padding: calc(var(--spacing) * 0);
1998
2063
  }
@@ -2044,6 +2109,9 @@ h2.react-datepicker__current-month {
2044
2109
  .px-6 {
2045
2110
  padding-inline: calc(var(--spacing) * 6);
2046
2111
  }
2112
+ .\!py-0 {
2113
+ padding-block: calc(var(--spacing) * 0) !important;
2114
+ }
2047
2115
  .py-0 {
2048
2116
  padding-block: calc(var(--spacing) * 0);
2049
2117
  }
@@ -2086,6 +2154,18 @@ h2.react-datepicker__current-month {
2086
2154
  .pt-5 {
2087
2155
  padding-top: calc(var(--spacing) * 5);
2088
2156
  }
2157
+ .\!pr-0\.5 {
2158
+ padding-right: calc(var(--spacing) * 0.5) !important;
2159
+ }
2160
+ .\!pr-1 {
2161
+ padding-right: calc(var(--spacing) * 1) !important;
2162
+ }
2163
+ .\!pr-1\.5 {
2164
+ padding-right: calc(var(--spacing) * 1.5) !important;
2165
+ }
2166
+ .\!pr-2 {
2167
+ padding-right: calc(var(--spacing) * 2) !important;
2168
+ }
2089
2169
  .pr-1 {
2090
2170
  padding-right: calc(var(--spacing) * 1);
2091
2171
  }
@@ -2110,6 +2190,27 @@ h2.react-datepicker__current-month {
2110
2190
  .pb-4 {
2111
2191
  padding-bottom: calc(var(--spacing) * 4);
2112
2192
  }
2193
+ .\!pl-0\.5 {
2194
+ padding-left: calc(var(--spacing) * 0.5) !important;
2195
+ }
2196
+ .\!pl-1 {
2197
+ padding-left: calc(var(--spacing) * 1) !important;
2198
+ }
2199
+ .\!pl-1\.5 {
2200
+ padding-left: calc(var(--spacing) * 1.5) !important;
2201
+ }
2202
+ .\!pl-2 {
2203
+ padding-left: calc(var(--spacing) * 2) !important;
2204
+ }
2205
+ .\!pl-3 {
2206
+ padding-left: calc(var(--spacing) * 3) !important;
2207
+ }
2208
+ .\!pl-4 {
2209
+ padding-left: calc(var(--spacing) * 4) !important;
2210
+ }
2211
+ .\!pl-6 {
2212
+ padding-left: calc(var(--spacing) * 6) !important;
2213
+ }
2113
2214
  .pl-4 {
2114
2215
  padding-left: calc(var(--spacing) * 4);
2115
2216
  }
@@ -2177,6 +2278,9 @@ h2.react-datepicker__current-month {
2177
2278
  font-size: var(--text-xs);
2178
2279
  line-height: var(--tw-leading, var(--text-xs--line-height));
2179
2280
  }
2281
+ .text-\[0\.65rem\] {
2282
+ font-size: 0.65rem;
2283
+ }
2180
2284
  .text-\[0\.625rem\] {
2181
2285
  font-size: 0.625rem;
2182
2286
  }
@@ -2299,6 +2403,12 @@ h2.react-datepicker__current-month {
2299
2403
  color: color-mix(in srgb,var(--brand) 72%,var(--foreground));
2300
2404
  }
2301
2405
  }
2406
+ .text-\[color-mix\(in_srgb\,var\(--brand\)_72\%\,var\(--foreground-muted\)\)\] {
2407
+ color: var(--brand);
2408
+ @supports (color: color-mix(in lab, red, red)) {
2409
+ color: color-mix(in srgb,var(--brand) 72%,var(--foreground-muted));
2410
+ }
2411
+ }
2302
2412
  .text-\[color-mix\(in_srgb\,var\(--brand\)_82\%\,var\(--foreground\)\)\] {
2303
2413
  color: var(--brand);
2304
2414
  @supports (color: color-mix(in lab, red, red)) {
@@ -2750,6 +2860,16 @@ h2.react-datepicker__current-month {
2750
2860
  }
2751
2861
  }
2752
2862
  }
2863
+ .hover\:border-\[color-mix\(in_srgb\,var\(--brand\)_58\%\,var\(--app-border\)\)\] {
2864
+ &:hover {
2865
+ @media (hover: hover) {
2866
+ border-color: var(--brand);
2867
+ @supports (color: color-mix(in lab, red, red)) {
2868
+ border-color: color-mix(in srgb,var(--brand) 58%,var(--app-border));
2869
+ }
2870
+ }
2871
+ }
2872
+ }
2753
2873
  .hover\:border-\[var\(--destructive\)\] {
2754
2874
  &:hover {
2755
2875
  @media (hover: hover) {
@@ -2825,6 +2945,16 @@ h2.react-datepicker__current-month {
2825
2945
  }
2826
2946
  }
2827
2947
  }
2948
+ .hover\:bg-\[color-mix\(in_srgb\,var\(--brand\)_8\%\,var\(--surface\)\)\] {
2949
+ &:hover {
2950
+ @media (hover: hover) {
2951
+ background-color: var(--brand);
2952
+ @supports (color: color-mix(in lab, red, red)) {
2953
+ background-color: color-mix(in srgb,var(--brand) 8%,var(--surface));
2954
+ }
2955
+ }
2956
+ }
2957
+ }
2828
2958
  .hover\:bg-\[color-mix\(in_srgb\,var\(--brand\)_10\%\,transparent\)\] {
2829
2959
  &:hover {
2830
2960
  @media (hover: hover) {
@@ -2865,6 +2995,16 @@ h2.react-datepicker__current-month {
2865
2995
  }
2866
2996
  }
2867
2997
  }
2998
+ .hover\:bg-\[color-mix\(in_srgb\,var\(--destructive\)_10\%\,transparent\)\] {
2999
+ &:hover {
3000
+ @media (hover: hover) {
3001
+ background-color: var(--destructive);
3002
+ @supports (color: color-mix(in lab, red, red)) {
3003
+ background-color: color-mix(in srgb,var(--destructive) 10%,transparent);
3004
+ }
3005
+ }
3006
+ }
3007
+ }
2868
3008
  .hover\:bg-\[color-mix\(in_srgb\,var\(--destructive\)_12\%\,transparent\)\] {
2869
3009
  &:hover {
2870
3010
  @media (hover: hover) {
@@ -3022,6 +3162,13 @@ h2.react-datepicker__current-month {
3022
3162
  }
3023
3163
  }
3024
3164
  }
3165
+ .hover\:text-\[var\(--destructive\)\] {
3166
+ &:hover {
3167
+ @media (hover: hover) {
3168
+ color: var(--destructive);
3169
+ }
3170
+ }
3171
+ }
3025
3172
  .hover\:text-amber-700 {
3026
3173
  &:hover {
3027
3174
  @media (hover: hover) {
@@ -3186,6 +3333,14 @@ h2.react-datepicker__current-month {
3186
3333
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3187
3334
  }
3188
3335
  }
3336
+ .focus-visible\:ring-\[var\(--destructive\)\]\/25 {
3337
+ &:focus-visible {
3338
+ --tw-ring-color: var(--destructive);
3339
+ @supports (color: color-mix(in lab, red, red)) {
3340
+ --tw-ring-color: color-mix(in oklab, var(--destructive) 25%, transparent);
3341
+ }
3342
+ }
3343
+ }
3189
3344
  .focus-visible\:ring-brand\/30 {
3190
3345
  &:focus-visible {
3191
3346
  --tw-ring-color: var(--color-brand);
@@ -3496,6 +3651,11 @@ h2.react-datepicker__current-month {
3496
3651
  min-width: 6.75rem;
3497
3652
  }
3498
3653
  }
3654
+ .sm\:inline-flex {
3655
+ @media (width >= 40rem) {
3656
+ display: inline-flex;
3657
+ }
3658
+ }
3499
3659
  .sm\:flex-row {
3500
3660
  @media (width >= 40rem) {
3501
3661
  flex-direction: row;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wellingtonhlc/shared-ui",
3
- "version": "0.24.21",
3
+ "version": "0.25.1",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",