@wellingtonhlc/shared-ui 0.29.4 → 0.30.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
@@ -207,7 +207,8 @@ Componentes disponiveis na API publica:
207
207
  |-------|-------------|
208
208
  | Layout | `AppShell`, `Page`, `Sidebar`, `Card`, `StatCard` |
209
209
  | Acoes | `Button`, `ActionPrimitives`, `AppShellActions`, `ConfirmationDialog` |
210
- | Feedback | `Badge`, `EmptyState`, `PageMessage`, `Tooltip`, `CopyableField` |
210
+ | Feedback | `Badge`, `EmptyState`, `PageMessage`, `Tooltip`, `CopyableField`, `NotificationCard` |
211
+ | Identidade | `Avatar` |
211
212
  | Formularios | `FieldControl`, `FieldGroup`, `TextField`, `TextareaField`, `SelectField`, `SelectionField`, `DateField`, `DecimalField`, `MultiSelectField`, `PasswordInput`, `Switch`, `RadioGroup` |
212
213
  | Consulta | `Filter`, `Workspace` |
213
214
  | Dados | `Table`, `Pagination`, `TabsUnderlined` |
@@ -261,7 +262,7 @@ import { RadioGroup } from '@wellingtonhlc/shared-ui';
261
262
  </RadioGroup>;
262
263
  ```
263
264
 
264
- ## AppShell.Topbar.Button
265
+ ## AppShell.Topbar.Button
265
266
 
266
267
  Use `AppShell.Topbar.Button` para acoes de icone na barra superior, como notificacoes,
267
268
  configuracoes e atalhos globais. O componente reutiliza o mesmo contrato visual dos
@@ -277,6 +278,19 @@ import { Bell, Settings } from 'lucide-react';
277
278
  </AppShell.Actions>
278
279
  ```
279
280
 
281
+ `AppShell.Topbar.Button` usa 32 px por padrão, a mesma escala do `Avatar size="md"`.
282
+
283
+ ## Avatar
284
+
285
+ `Avatar` exibe uma imagem ou as iniciais acessíveis do nome informado. As cores do fallback
286
+ usam `--avatar-background` e `--avatar-foreground`, com contraste mais escuro no tema dark.
287
+
288
+ ```tsx
289
+ import { Avatar } from '@wellingtonhlc/shared-ui/components/Avatar';
290
+
291
+ <Avatar name="Wellington Silva" src={avatarUrl} />
292
+ ```
293
+
280
294
  ## Sidebar
281
295
 
282
296
  Use `Sidebar.ActionButton`, `Sidebar.SubActionButton` e `Sidebar.NavGroup` para navegação.
@@ -24,7 +24,7 @@ const ContentColumn = forwardRef(({ children, className }, ref) => (_jsx("div",
24
24
  ContentColumn.displayName = 'AppShell.ContentColumn';
25
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
26
  WorkArea.displayName = 'AppShell.WorkArea';
27
- const TopbarButton = forwardRef(({ className, ...props }, ref) => (_jsx(AppShellActionButton, { ref: ref, className: cn('relative size-10 min-h-10 min-w-10 !rounded-full', className), ...props })));
27
+ const TopbarButton = forwardRef(({ className, ...props }, ref) => (_jsx(AppShellActionButton, { ref: ref, className: cn('relative size-8 min-h-8 min-w-8 !rounded-full', className), ...props })));
28
28
  TopbarButton.displayName = 'AppShell.Topbar.Button';
29
29
  const TopbarRoot = forwardRef(({ actions, actionsClassName, children, className, icon, mobileToggle, pageTitle, titleContainerClassName, }, ref) => (_jsxs("header", { ref: ref, className: cn('border-app-border bg-[var(--topbar-background)] flex min-h-16 items-center justify-between border-b px-4 pr-4 shadow-[var(--shadow-topbar)] 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-[var(--letter-spacing-title)] text-foreground-muted", children: pageTitle })] }), (children || actions) && (_jsxs("div", { className: cn('flex shrink-0 items-center gap-4', actionsClassName), children: [children, actions] }))] })));
30
30
  TopbarRoot.displayName = 'AppShell.Topbar';
@@ -0,0 +1,9 @@
1
+ import type { HTMLAttributes } from 'react';
2
+ export type AvatarSize = 'sm' | 'md' | 'lg';
3
+ export interface AvatarProps extends HTMLAttributes<HTMLSpanElement> {
4
+ name: string;
5
+ size?: AvatarSize;
6
+ src?: string | null;
7
+ }
8
+ export declare function Avatar({ className, name, size, src, ...props }: AvatarProps): import("react").JSX.Element;
9
+ //# sourceMappingURL=Avatar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../src/components/Avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAI5C,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5C,MAAM,WAAW,WAAY,SAAQ,cAAc,CAAC,eAAe,CAAC;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAiBD,wBAAgB,MAAM,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,IAAW,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,EAAE,WAAW,+BAoBlF"}
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn } from '../utils/cn';
3
+ const sizeClasses = {
4
+ sm: 'size-7 text-xs',
5
+ md: 'size-8 text-sm',
6
+ lg: 'size-10 text-sm',
7
+ };
8
+ function getInitials(name) {
9
+ const parts = name.trim().split(/\s+/).filter(Boolean);
10
+ if (parts.length === 0)
11
+ return '?';
12
+ if (parts.length === 1)
13
+ return parts[0].charAt(0).toUpperCase();
14
+ return `${parts[0].charAt(0)}${parts[parts.length - 1].charAt(0)}`.toUpperCase();
15
+ }
16
+ export function Avatar({ className, name, size = 'md', src, ...props }) {
17
+ const classes = cn('inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full bg-[var(--avatar-background)] font-semibold text-[var(--avatar-foreground)] select-none', sizeClasses[size], className);
18
+ if (src) {
19
+ return (_jsx("span", { className: classes, ...props, children: _jsx("img", { className: "size-full object-cover", src: src, alt: name }) }));
20
+ }
21
+ return (_jsx("span", { className: classes, role: "img", "aria-label": name, ...props, children: getInitials(name) }));
22
+ }
@@ -26,8 +26,8 @@ const dialogVariantStyles = {
26
26
  },
27
27
  destructive: {
28
28
  icon: AlertCircleIcon,
29
- iconClassName: 'text-[var(--status-danger-icon)]',
30
- titleClassName: 'text-[var(--status-danger-text)]',
29
+ iconClassName: 'text-[var(--destructive)]',
30
+ titleClassName: 'text-[var(--destructive)]',
31
31
  },
32
32
  };
33
33
  const buttonVariantDefaults = {
@@ -0,0 +1,16 @@
1
+ import type { ButtonHTMLAttributes, MouseEvent, ReactNode } from 'react';
2
+ export type NotificationCardVariant = 'info' | 'success' | 'warning' | 'danger';
3
+ export interface NotificationCardProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'title'> {
4
+ title: ReactNode;
5
+ description?: ReactNode;
6
+ meta?: ReactNode;
7
+ variant?: NotificationCardVariant;
8
+ icon?: ReactNode;
9
+ unread?: boolean;
10
+ interactive?: boolean;
11
+ onDismiss?: (event: MouseEvent<HTMLButtonElement>) => void;
12
+ dismissLabel?: string;
13
+ isDismissing?: boolean;
14
+ }
15
+ export declare function NotificationCard({ title, description, meta, variant, icon, unread, interactive, onDismiss, dismissLabel, isDismissing, className, onClick, ...props }: NotificationCardProps): import("react").JSX.Element;
16
+ //# sourceMappingURL=NotificationCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotificationCard.d.ts","sourceRoot":"","sources":["../../src/components/NotificationCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMzE,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEhF,MAAM,WAAW,qBACf,SAAQ,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC9D,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAClC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAgBD,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,WAAW,EACX,IAAI,EACJ,OAAgB,EAChB,IAAI,EACJ,MAAc,EACd,WAAW,EACX,SAAS,EACT,YAAsC,EACtC,YAAoB,EACpB,SAAS,EACT,OAAO,EACP,GAAG,KAAK,EACT,EAAE,qBAAqB,+BAoEvB"}
@@ -0,0 +1,24 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { CircleAlert, CircleCheck, Info, TriangleAlert, X } from 'lucide-react';
3
+ import { cn } from '../utils/cn';
4
+ const variantClasses = {
5
+ info: 'text-sky-600 dark:text-sky-700',
6
+ success: 'text-green-600',
7
+ warning: 'text-amber-600',
8
+ danger: 'text-red-600',
9
+ };
10
+ const variantIcons = {
11
+ info: _jsx(Info, { className: "size-4" }),
12
+ success: _jsx(CircleCheck, { className: "size-4" }),
13
+ warning: _jsx(CircleAlert, { className: "size-4" }),
14
+ danger: _jsx(TriangleAlert, { className: "size-4" }),
15
+ };
16
+ export function NotificationCard({ title, description, meta, variant = 'info', icon, unread = false, interactive, onDismiss, dismissLabel = 'Descartar notificação', isDismissing = false, className, onClick, ...props }) {
17
+ function handleDismiss(event) {
18
+ event.stopPropagation();
19
+ onDismiss?.(event);
20
+ }
21
+ return (_jsxs("article", { className: "relative", children: [_jsx("button", { type: "button", className: cn('w-full rounded-md border p-3 text-left transition', onDismiss ? 'pr-8' : 'pr-3', unread
22
+ ? 'border-brand/40 bg-brand/5 hover:bg-brand/10 dark:bg-[color-mix(in_srgb,var(--brand)_8%,var(--background))] dark:hover:bg-[color-mix(in_srgb,var(--brand)_12%,var(--background))]'
23
+ : 'border-app-border bg-[color-mix(in_srgb,var(--foreground-muted)_5%,var(--surface))] hover:bg-[color-mix(in_srgb,var(--brand)_7%,var(--surface))] dark:bg-[color-mix(in_srgb,var(--foreground-muted)_4%,var(--background))] dark:hover:bg-[color-mix(in_srgb,var(--brand)_8%,var(--background))]', (interactive ?? Boolean(onClick)) ? 'cursor-pointer' : 'cursor-default', className), onClick: onClick, ...props, children: _jsxs("span", { className: "flex items-start gap-3", children: [_jsx("span", { className: cn('mt-0.5 inline-flex size-7 shrink-0 items-center justify-center', variantClasses[variant]), children: icon ?? variantIcons[variant] }), _jsxs("span", { className: "min-w-0 flex-1", children: [_jsxs("span", { className: "flex min-w-0 items-center justify-between gap-2", children: [_jsx("span", { className: "text-foreground truncate text-sm font-semibold", children: title }), unread ? (_jsx("span", { className: "bg-brand size-2 shrink-0 rounded-full", "aria-hidden": "true" })) : null] }), description ? (_jsx("span", { className: "text-foreground-muted mt-1 block text-sm break-words", children: description })) : null, meta ? (_jsx("span", { className: "text-foreground-muted mt-2 flex flex-wrap items-center gap-2 text-[11px]", children: meta })) : null] })] }) }), onDismiss ? (_jsx("button", { type: "button", "aria-label": dismissLabel, disabled: isDismissing, className: "text-foreground-muted hover:text-foreground hover:bg-background absolute top-2 right-2 z-10 rounded p-0.5 transition disabled:cursor-not-allowed disabled:opacity-40", onClick: handleDismiss, children: _jsx(X, { className: "size-3.5" }) })) : null] }));
24
+ }
@@ -86,8 +86,8 @@ const ActionCell = forwardRef(({ children, className, style, ...props }, ref) =>
86
86
  }, ...props, children: _jsx("div", { className: "flex min-h-7 items-center justify-center", children: children }) })));
87
87
  ActionCell.displayName = 'Table.ActionCell';
88
88
  /**
89
- * Os tons usam os tokens semanticos de icone, que preservam saturacao e contraste
90
- * nos temas claro e escuro sem repetir hexadecimais no componente.
89
+ * Success usa o token de status. Danger representa uma acao destrutiva e usa o
90
+ * token forte `--destructive`, sem herdar o rosa dos status sobre fundo escuro.
91
91
  *
92
92
  * `!` obrigatorio: o cn do pacote nao usa tailwind-merge, entao sem ele o
93
93
  * `text-foreground-muted`/`hover:bg` do ghost venceria pela ordem do CSS.
@@ -95,7 +95,7 @@ ActionCell.displayName = 'Table.ActionCell';
95
95
  const actionToneClasses = {
96
96
  default: '',
97
97
  success: 'text-[var(--status-success-icon)]! hover:bg-[color-mix(in_srgb,var(--status-success-icon)_10%,transparent)]! hover:text-[var(--status-success-icon)]! dark:hover:bg-[color-mix(in_srgb,var(--status-success-icon)_16%,transparent)]!',
98
- danger: 'text-[var(--status-danger-icon)]! hover:bg-[color-mix(in_srgb,var(--status-danger-icon)_10%,transparent)]! hover:text-[var(--status-danger-icon)]! dark:hover:bg-[color-mix(in_srgb,var(--status-danger-icon)_16%,transparent)]!',
98
+ danger: 'text-[var(--destructive)]! hover:bg-[color-mix(in_srgb,var(--destructive)_10%,transparent)]! hover:text-[var(--destructive)]! dark:hover:bg-[color-mix(in_srgb,var(--destructive)_16%,transparent)]!',
99
99
  };
100
100
  const Action = forwardRef(({ className, size = 'xs', tone = 'default', tooltip, ...props }, ref) => (
101
101
  // `props` vem primeiro: o corpo (variant/size/className) e do Table.Action, e nao
package/dist/index.d.ts CHANGED
@@ -2,6 +2,7 @@ export { cn } from './utils/cn';
2
2
  export { AppShell, type AppShellContentMode, type AppShellMainProps, type AppShellOverlayProps, type AppShellOverlayVariant, type AppShellTopbarButtonProps, type AppShellTopbarProps, } from './components/AppShell';
3
3
  export { AppShellActionButton, AppShellActions, AppShellActionsSeparator, type AppShellActionButtonProps, type AppShellActionButtonVariant, type AppShellActionsAlign, type AppShellActionsProps, type AppShellActionsRegion, type AppShellActionsSeparatorProps, } from './components/AppShellActions';
4
4
  export { Badge, type BadgeProps, type BadgeVariant } from './components/Badge';
5
+ export { Avatar, type AvatarProps, type AvatarSize } from './components/Avatar';
5
6
  export { Banner, type BannerProps, type BannerSize, type BannerVariant } from './components/Banner';
6
7
  export { Button, type ButtonProps, type ButtonSize, type ButtonVariant } from './components/Button';
7
8
  export { Loading, type LoadingProps, type LoadingSize } from './components/Loading';
@@ -42,4 +43,5 @@ export * from './components/ActionPrimitives';
42
43
  export { Card, type CardActionsProps, type CardBodyProps, type CardDensity, type CardDescriptionProps, type CardHeaderProps, type CardProps, type CardToolbarProps, type CardVariant, } from './components/Card';
43
44
  export { StatCard, type StatCardProps, type StatCardSize, type StatCardVariant } from './components/StatCard';
44
45
  export { NavCard, type NavCardProps } from './components/NavCard';
46
+ export { NotificationCard, type NotificationCardProps, type NotificationCardVariant, } from './components/NotificationCard';
45
47
  //# sourceMappingURL=index.d.ts.map
@@ -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
@@ -2,6 +2,7 @@ export { cn } from './utils/cn';
2
2
  export { AppShell, } from './components/AppShell';
3
3
  export { AppShellActionButton, AppShellActions, AppShellActionsSeparator, } from './components/AppShellActions';
4
4
  export { Badge } from './components/Badge';
5
+ export { Avatar } from './components/Avatar';
5
6
  export { Banner } from './components/Banner';
6
7
  export { Button } from './components/Button';
7
8
  export { Loading } from './components/Loading';
@@ -42,3 +43,4 @@ export * from './components/ActionPrimitives';
42
43
  export { Card, } from './components/Card';
43
44
  export { StatCard } from './components/StatCard';
44
45
  export { NavCard } from './components/NavCard';
46
+ export { NotificationCard, } from './components/NotificationCard';
package/dist/styles.css CHANGED
@@ -599,6 +599,8 @@ h2.react-datepicker__current-month {
599
599
  --color-amber-600: oklch(66.6% 0.179 58.318);
600
600
  --color-green-600: oklch(62.7% 0.194 149.214);
601
601
  --color-sky-600: oklch(58.8% 0.158 241.966);
602
+ --color-sky-700: oklch(50% 0.134 242.749);
603
+ --color-white: #fff;
602
604
  --spacing: 0.25rem;
603
605
  --container-xs: 20rem;
604
606
  --container-sm: 24rem;
@@ -1157,6 +1159,10 @@ h2.react-datepicker__current-month {
1157
1159
  width: calc(var(--spacing) * 14);
1158
1160
  height: calc(var(--spacing) * 14);
1159
1161
  }
1162
+ .size-full {
1163
+ width: 100%;
1164
+ height: 100%;
1165
+ }
1160
1166
  .\!h-4 {
1161
1167
  height: calc(var(--spacing) * 4) !important;
1162
1168
  }
@@ -1658,6 +1664,9 @@ h2.react-datepicker__current-month {
1658
1664
  .animate-spin {
1659
1665
  animation: var(--animate-spin);
1660
1666
  }
1667
+ .cursor-default {
1668
+ cursor: default;
1669
+ }
1661
1670
  .cursor-not-allowed {
1662
1671
  cursor: not-allowed;
1663
1672
  }
@@ -2081,6 +2090,9 @@ h2.react-datepicker__current-month {
2081
2090
  background-color: color-mix(in srgb,var(--foreground-muted) 18%,var(--surface));
2082
2091
  }
2083
2092
  }
2093
+ .bg-\[var\(--avatar-background\)\] {
2094
+ background-color: var(--avatar-background);
2095
+ }
2084
2096
  .bg-\[var\(--brand\)\] {
2085
2097
  background-color: var(--brand);
2086
2098
  }
@@ -2171,6 +2183,9 @@ h2.react-datepicker__current-month {
2171
2183
  .bg-input-bg {
2172
2184
  background-color: var(--color-input-bg);
2173
2185
  }
2186
+ .bg-red-600 {
2187
+ background-color: var(--color-red-600);
2188
+ }
2174
2189
  .bg-surface {
2175
2190
  background-color: var(--color-surface);
2176
2191
  }
@@ -2192,6 +2207,9 @@ h2.react-datepicker__current-month {
2192
2207
  .fill-surface {
2193
2208
  fill: var(--color-surface);
2194
2209
  }
2210
+ .object-cover {
2211
+ object-fit: cover;
2212
+ }
2195
2213
  .\!p-0 {
2196
2214
  padding: calc(var(--spacing) * 0) !important;
2197
2215
  }
@@ -2318,6 +2336,9 @@ h2.react-datepicker__current-month {
2318
2336
  .pr-2 {
2319
2337
  padding-right: calc(var(--spacing) * 2);
2320
2338
  }
2339
+ .pr-3 {
2340
+ padding-right: calc(var(--spacing) * 3);
2341
+ }
2321
2342
  .pr-4 {
2322
2343
  padding-right: calc(var(--spacing) * 4);
2323
2344
  }
@@ -2569,9 +2590,18 @@ h2.react-datepicker__current-month {
2569
2590
  color: color-mix(in srgb,var(--destructive) 86%,var(--foreground));
2570
2591
  }
2571
2592
  }
2593
+ .text-\[var\(--avatar-foreground\)\] {
2594
+ color: var(--avatar-foreground);
2595
+ }
2572
2596
  .text-\[var\(--brand\)\] {
2573
2597
  color: var(--brand);
2574
2598
  }
2599
+ .text-\[var\(--destructive\)\] {
2600
+ color: var(--destructive);
2601
+ }
2602
+ .text-\[var\(--destructive\)\]\! {
2603
+ color: var(--destructive) !important;
2604
+ }
2575
2605
  .text-\[var\(--on-solid\)\] {
2576
2606
  color: var(--on-solid);
2577
2607
  }
@@ -2581,9 +2611,6 @@ h2.react-datepicker__current-month {
2581
2611
  .text-\[var\(--status-danger-icon\)\] {
2582
2612
  color: var(--status-danger-icon);
2583
2613
  }
2584
- .text-\[var\(--status-danger-icon\)\]\! {
2585
- color: var(--status-danger-icon) !important;
2586
- }
2587
2614
  .text-\[var\(--status-danger-text\)\] {
2588
2615
  color: var(--status-danger-text);
2589
2616
  }
@@ -2647,6 +2674,9 @@ h2.react-datepicker__current-month {
2647
2674
  .text-sky-600 {
2648
2675
  color: var(--color-sky-600);
2649
2676
  }
2677
+ .text-white {
2678
+ color: var(--color-white);
2679
+ }
2650
2680
  .uppercase {
2651
2681
  text-transform: uppercase;
2652
2682
  }
@@ -3172,32 +3202,32 @@ h2.react-datepicker__current-month {
3172
3202
  }
3173
3203
  }
3174
3204
  }
3175
- .hover\:bg-\[color-mix\(in_srgb\,var\(--foreground-muted\)_8\%\,var\(--tabs-background\)\)\] {
3205
+ .hover\:bg-\[color-mix\(in_srgb\,var\(--destructive\)_10\%\,transparent\)\]\! {
3176
3206
  &:hover {
3177
3207
  @media (hover: hover) {
3178
- background-color: var(--foreground-muted);
3208
+ background-color: var(--destructive) !important;
3179
3209
  @supports (color: color-mix(in lab, red, red)) {
3180
- background-color: color-mix(in srgb,var(--foreground-muted) 8%,var(--tabs-background));
3210
+ background-color: color-mix(in srgb,var(--destructive) 10%,transparent) !important;
3181
3211
  }
3182
3212
  }
3183
3213
  }
3184
3214
  }
3185
- .hover\:bg-\[color-mix\(in_srgb\,var\(--status-danger-bg\)_78\%\,var\(--status-danger-border\)\)\] {
3215
+ .hover\:bg-\[color-mix\(in_srgb\,var\(--foreground-muted\)_8\%\,var\(--tabs-background\)\)\] {
3186
3216
  &:hover {
3187
3217
  @media (hover: hover) {
3188
- background-color: var(--status-danger-bg);
3218
+ background-color: var(--foreground-muted);
3189
3219
  @supports (color: color-mix(in lab, red, red)) {
3190
- background-color: color-mix(in srgb,var(--status-danger-bg) 78%,var(--status-danger-border));
3220
+ background-color: color-mix(in srgb,var(--foreground-muted) 8%,var(--tabs-background));
3191
3221
  }
3192
3222
  }
3193
3223
  }
3194
3224
  }
3195
- .hover\:bg-\[color-mix\(in_srgb\,var\(--status-danger-icon\)_10\%\,transparent\)\]\! {
3225
+ .hover\:bg-\[color-mix\(in_srgb\,var\(--status-danger-bg\)_78\%\,var\(--status-danger-border\)\)\] {
3196
3226
  &:hover {
3197
3227
  @media (hover: hover) {
3198
- background-color: var(--status-danger-icon) !important;
3228
+ background-color: var(--status-danger-bg);
3199
3229
  @supports (color: color-mix(in lab, red, red)) {
3200
- background-color: color-mix(in srgb,var(--status-danger-icon) 10%,transparent) !important;
3230
+ background-color: color-mix(in srgb,var(--status-danger-bg) 78%,var(--status-danger-border));
3201
3231
  }
3202
3232
  }
3203
3233
  }
@@ -3371,17 +3401,17 @@ h2.react-datepicker__current-month {
3371
3401
  }
3372
3402
  }
3373
3403
  }
3374
- .hover\:text-\[var\(--on-solid\)\] {
3404
+ .hover\:text-\[var\(--destructive\)\]\! {
3375
3405
  &:hover {
3376
3406
  @media (hover: hover) {
3377
- color: var(--on-solid);
3407
+ color: var(--destructive) !important;
3378
3408
  }
3379
3409
  }
3380
3410
  }
3381
- .hover\:text-\[var\(--status-danger-icon\)\]\! {
3411
+ .hover\:text-\[var\(--on-solid\)\] {
3382
3412
  &:hover {
3383
3413
  @media (hover: hover) {
3384
- color: var(--status-danger-icon) !important;
3414
+ color: var(--on-solid);
3385
3415
  }
3386
3416
  }
3387
3417
  }
@@ -3676,6 +3706,11 @@ h2.react-datepicker__current-month {
3676
3706
  opacity: 30%;
3677
3707
  }
3678
3708
  }
3709
+ .disabled\:opacity-40 {
3710
+ &:disabled {
3711
+ opacity: 40%;
3712
+ }
3713
+ }
3679
3714
  .disabled\:opacity-45 {
3680
3715
  &:disabled {
3681
3716
  opacity: 45%;
@@ -4019,6 +4054,22 @@ h2.react-datepicker__current-month {
4019
4054
  border-color: var(--color-red-400);
4020
4055
  }
4021
4056
  }
4057
+ .dark\:bg-\[color-mix\(in_srgb\,var\(--brand\)_8\%\,var\(--background\)\)\] {
4058
+ @media (prefers-color-scheme: dark) {
4059
+ background-color: var(--brand);
4060
+ @supports (color: color-mix(in lab, red, red)) {
4061
+ background-color: color-mix(in srgb,var(--brand) 8%,var(--background));
4062
+ }
4063
+ }
4064
+ }
4065
+ .dark\:bg-\[color-mix\(in_srgb\,var\(--foreground-muted\)_4\%\,var\(--background\)\)\] {
4066
+ @media (prefers-color-scheme: dark) {
4067
+ background-color: var(--foreground-muted);
4068
+ @supports (color: color-mix(in lab, red, red)) {
4069
+ background-color: color-mix(in srgb,var(--foreground-muted) 4%,var(--background));
4070
+ }
4071
+ }
4072
+ }
4022
4073
  .dark\:bg-\[color-mix\(in_srgb\,var\(--foreground-muted\)_28\%\,var\(--surface\)\)\] {
4023
4074
  @media (prefers-color-scheme: dark) {
4024
4075
  background-color: var(--foreground-muted);
@@ -4035,11 +4086,21 @@ h2.react-datepicker__current-month {
4035
4086
  }
4036
4087
  }
4037
4088
  }
4089
+ .dark\:bg-background-secondary {
4090
+ @media (prefers-color-scheme: dark) {
4091
+ background-color: var(--color-background-secondary);
4092
+ }
4093
+ }
4038
4094
  .dark\:text-red-400 {
4039
4095
  @media (prefers-color-scheme: dark) {
4040
4096
  color: var(--color-red-400);
4041
4097
  }
4042
4098
  }
4099
+ .dark\:text-sky-700 {
4100
+ @media (prefers-color-scheme: dark) {
4101
+ color: var(--color-sky-700);
4102
+ }
4103
+ }
4043
4104
  .dark\:hover\:border-\[color-mix\(in_srgb\,var\(--brand\)_54\%\,var\(--app-border\)\)\] {
4044
4105
  @media (prefers-color-scheme: dark) {
4045
4106
  &:hover {
@@ -4052,13 +4113,37 @@ h2.react-datepicker__current-month {
4052
4113
  }
4053
4114
  }
4054
4115
  }
4055
- .dark\:hover\:bg-\[color-mix\(in_srgb\,var\(--status-danger-icon\)_16\%\,transparent\)\]\! {
4116
+ .dark\:hover\:bg-\[color-mix\(in_srgb\,var\(--brand\)_8\%\,var\(--background\)\)\] {
4117
+ @media (prefers-color-scheme: dark) {
4118
+ &:hover {
4119
+ @media (hover: hover) {
4120
+ background-color: var(--brand);
4121
+ @supports (color: color-mix(in lab, red, red)) {
4122
+ background-color: color-mix(in srgb,var(--brand) 8%,var(--background));
4123
+ }
4124
+ }
4125
+ }
4126
+ }
4127
+ }
4128
+ .dark\:hover\:bg-\[color-mix\(in_srgb\,var\(--brand\)_12\%\,var\(--background\)\)\] {
4129
+ @media (prefers-color-scheme: dark) {
4130
+ &:hover {
4131
+ @media (hover: hover) {
4132
+ background-color: var(--brand);
4133
+ @supports (color: color-mix(in lab, red, red)) {
4134
+ background-color: color-mix(in srgb,var(--brand) 12%,var(--background));
4135
+ }
4136
+ }
4137
+ }
4138
+ }
4139
+ }
4140
+ .dark\:hover\:bg-\[color-mix\(in_srgb\,var\(--destructive\)_16\%\,transparent\)\]\! {
4056
4141
  @media (prefers-color-scheme: dark) {
4057
4142
  &:hover {
4058
4143
  @media (hover: hover) {
4059
- background-color: var(--status-danger-icon) !important;
4144
+ background-color: var(--destructive) !important;
4060
4145
  @supports (color: color-mix(in lab, red, red)) {
4061
- background-color: color-mix(in srgb,var(--status-danger-icon) 16%,transparent) !important;
4146
+ background-color: color-mix(in srgb,var(--destructive) 16%,transparent) !important;
4062
4147
  }
4063
4148
  }
4064
4149
  }
@@ -4537,6 +4622,11 @@ h2.react-datepicker__current-month {
4537
4622
  @supports (color: color-mix(in lab, red, red)) {
4538
4623
  --brand-surface-active: color-mix(in srgb, var(--brand) 16%, transparent);
4539
4624
  }
4625
+ --avatar-background: var(--brand);
4626
+ @supports (color: color-mix(in lab, red, red)) {
4627
+ --avatar-background: color-mix(in srgb, var(--brand) 88%, #000);
4628
+ }
4629
+ --avatar-foreground: var(--on-solid);
4540
4630
  --contrast-hover: color-mix(in srgb, #000 10%, transparent);
4541
4631
  --sidebar-background: var(--surface);
4542
4632
  --sidebar-flyout-background: var(--surface);
@@ -4653,6 +4743,10 @@ h2.react-datepicker__current-month {
4653
4743
  @supports (color: color-mix(in lab, red, red)) {
4654
4744
  --brand-surface-active: color-mix(in srgb, var(--brand) 21%, transparent);
4655
4745
  }
4746
+ --avatar-background: var(--brand);
4747
+ @supports (color: color-mix(in lab, red, red)) {
4748
+ --avatar-background: color-mix(in srgb, var(--brand) 42%, #000);
4749
+ }
4656
4750
  --contrast-hover: var(--on-solid);
4657
4751
  @supports (color: color-mix(in lab, red, red)) {
4658
4752
  --contrast-hover: color-mix(in srgb, var(--on-solid) 10%, transparent);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wellingtonhlc/shared-ui",
3
- "version": "0.29.4",
3
+ "version": "0.30.1",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -49,6 +49,7 @@
49
49
  "prepare": "npm run setup:hooks",
50
50
  "build": "node scripts/clean-dist.mjs && tsc -p tsconfig.json && node scripts/copy-assets.mjs",
51
51
  "prepack": "npm run build",
52
+ "prepublishOnly": "node scripts/validate-release.mjs --require-tag",
52
53
  "typecheck": "tsc -p tsconfig.json --noEmit",
53
54
  "test": "vitest run",
54
55
  "test:watch": "vitest",