@wellingtonhlc/shared-ui 0.25.3 → 0.25.6

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
@@ -221,6 +221,29 @@ import { Bell, Settings } from 'lucide-react';
221
221
  </AppShell.Actions>
222
222
  ```
223
223
 
224
+ ## TabsUnderlined
225
+
226
+ `TabsUnderlined` renderiza abas sublinhadas com conteudo controlado ou nao controlado.
227
+ As abas ja possuem tamanho minimo padrao e padding horizontal para comportar labels
228
+ medias, como `Configuracoes` e `Fornecedor`, sem ficarem apertadas.
229
+
230
+ Quando houver labels longas, use `tabWidth` e `truncateLabels` para manter abas
231
+ uniformes e aplicar ellipsis no texto que exceder o limite.
232
+
233
+ ```tsx
234
+ import { TabsUnderlined } from '@wellingtonhlc/shared-ui';
235
+
236
+ <TabsUnderlined
237
+ items={items}
238
+ tabWidth="12rem"
239
+ truncateLabels
240
+ />;
241
+ ```
242
+
243
+ Quando a largura puder variar dentro de uma faixa, use `tabMinWidth` e `tabMaxWidth`.
244
+ `truncateLabels` nao altera o comportamento sozinho; defina tambem `tabWidth` ou
245
+ `tabMaxWidth` para que o navegador saiba quando abreviar o texto.
246
+
224
247
  ## ThemePreferencesSelector
225
248
 
226
249
  `ThemePreferencesSelector` centraliza a escolha de cor e aparencia (`system`, `light`, `dark`) usada pelos consumidores.
@@ -1 +1 @@
1
- {"version":3,"file":"CopyableField.d.ts","sourceRoot":"","sources":["../../src/components/CopyableField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,MAAM,WAAW,kBAAmB,SAAQ,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC;IAC3E,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,aAAa,wFAiExB,CAAC"}
1
+ {"version":3,"file":"CopyableField.d.ts","sourceRoot":"","sources":["../../src/components/CopyableField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,MAAM,WAAW,kBAAmB,SAAQ,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC;IAC3E,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,aAAa,wFAuGxB,CAAC"}
@@ -1,17 +1,38 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import React from 'react';
3
3
  import { Slot } from '@radix-ui/react-slot';
4
+ import { ClipboardCheckIcon, ClipboardIcon } from 'lucide-react';
4
5
  import { toast } from 'sonner';
5
6
  import { cn } from '../utils/cn';
6
7
  export const CopyableField = React.forwardRef(function CopyableField({ asChild = false, children, className, errorMessage = 'Nao foi possivel copiar o valor.', onClick, onKeyDown, successMessage = 'Valor copiado.', title = 'Clique para copiar', value, ...props }, ref) {
7
8
  const Component = asChild ? Slot : 'span';
8
9
  const copyValue = value === null || value === undefined ? '' : String(value);
9
10
  const canCopy = copyValue.trim().length > 0;
11
+ const [copied, setCopied] = React.useState(false);
12
+ const feedbackTimerRef = React.useRef(null);
13
+ React.useEffect(() => {
14
+ return () => {
15
+ if (feedbackTimerRef.current) {
16
+ clearTimeout(feedbackTimerRef.current);
17
+ }
18
+ };
19
+ }, []);
20
+ function showCopiedFeedback() {
21
+ setCopied(true);
22
+ if (feedbackTimerRef.current) {
23
+ clearTimeout(feedbackTimerRef.current);
24
+ }
25
+ feedbackTimerRef.current = setTimeout(() => {
26
+ setCopied(false);
27
+ feedbackTimerRef.current = null;
28
+ }, 1200);
29
+ }
10
30
  async function copy() {
11
31
  if (!canCopy)
12
32
  return;
13
33
  try {
14
34
  await navigator.clipboard.writeText(copyValue);
35
+ showCopiedFeedback();
15
36
  toast.success(successMessage);
16
37
  }
17
38
  catch {
@@ -33,6 +54,7 @@ export const CopyableField = React.forwardRef(function CopyableField({ asChild =
33
54
  void copy();
34
55
  }
35
56
  }
36
- return (_jsx(Component, { ref: ref, role: canCopy ? 'button' : undefined, tabIndex: canCopy ? 0 : -1, title: canCopy ? title : undefined, "aria-disabled": !canCopy, className: cn(canCopy &&
37
- 'hover:border-brand/60 hover:bg-brand/10 focus-visible:border-brand/60 focus-visible:ring-brand/40 cursor-pointer rounded-md border border-transparent transition-colors focus-visible:ring-2 focus-visible:outline-none', className), onClick: handleClick, onKeyDown: handleKeyDown, ...props, children: children }));
57
+ return (_jsxs(Component, { ref: ref, role: canCopy ? 'button' : undefined, tabIndex: canCopy ? 0 : -1, title: canCopy ? title : undefined, "aria-disabled": !canCopy, "aria-label": canCopy && copied ? 'Copiado' : undefined, "data-copied": copied ? 'true' : undefined, className: cn(canCopy &&
58
+ 'group/copyable relative cursor-pointer rounded-md border border-transparent focus-visible:outline-none', className), onClick: handleClick, onKeyDown: handleKeyDown, ...props, children: [children, canCopy && !asChild ? (_jsx("span", { "aria-hidden": "true", className: cn('border-app-border bg-[color-mix(in_srgb,var(--foreground-muted)_3%,var(--background-secondary))] text-foreground-muted pointer-events-none absolute top-1/2 right-0 inline-flex size-6 translate-x-[calc(100%+0.25rem)] -translate-y-1/2 items-center justify-center rounded-md border opacity-0 shadow-sm transition-[opacity,color,border-color,background-color] duration-150 group-hover/copyable:opacity-100 group-focus-visible/copyable:opacity-100', copied &&
59
+ 'bg-[color-mix(in_srgb,var(--brand)_9%,var(--background-secondary))] text-brand opacity-100'), children: copied ? _jsx(ClipboardCheckIcon, { className: "size-3.5" }) : _jsx(ClipboardIcon, { className: "size-3.5" }) })) : null] }));
38
60
  });
@@ -8,7 +8,7 @@ export function EmptyState({ title = 'Nada por aqui.', description, icon = _jsx(
8
8
  className: cn('h-10 w-10 text-foreground-muted', icon.props.className),
9
9
  })
10
10
  : icon;
11
- return (_jsx("div", { className: cn('flex min-h-0 w-full items-center justify-center rounded-md border border-dashed bg-surface text-center text-foreground-muted', isCompact ? 'px-4 py-6' : 'h-full flex-1 px-5 py-10', withMargin && 'm-2', className), children: _jsxs("div", { className: cn('mx-auto grid justify-items-center', isCompact ? 'max-w-xs gap-1.5' : 'max-w-sm gap-2'), children: [showIcon && styledIcon ? (_jsx("div", { className: "text-foreground-muted mb-1 flex h-11 w-11 items-center justify-center", children: styledIcon })) : null, _jsx("strong", { className: "text-foreground text-sm font-semibold", children: title }), description ? _jsx("p", { className: "text-foreground-muted text-xs leading-5", children: description }) : null, children ? _jsx("div", { className: cn('mt-2 flex flex-wrap items-center justify-center gap-2', isCompact ? 'text-xs' : 'text-sm'), children: children }) : null] }) }));
11
+ return (_jsx("div", { className: cn('flex min-h-0 w-full items-center justify-center rounded-md border border-dashed border-[color-mix(in_srgb,var(--foreground-muted)_24%,transparent)] bg-surface text-center text-foreground-muted', isCompact ? 'px-4 py-6' : 'h-full flex-1 px-5 py-10', withMargin && 'm-2', className), children: _jsxs("div", { className: cn('mx-auto grid justify-items-center', isCompact ? 'max-w-xs gap-1.5' : 'max-w-sm gap-2'), children: [showIcon && styledIcon ? (_jsx("div", { className: "text-foreground-muted mb-1 flex h-11 w-11 items-center justify-center", children: styledIcon })) : null, _jsx("strong", { className: "text-foreground text-sm font-semibold", children: title }), description ? _jsx("p", { className: "text-foreground-muted text-xs leading-5", children: description }) : null, children ? _jsx("div", { className: cn('mt-2 flex flex-wrap items-center justify-center gap-2', isCompact ? 'text-xs' : 'text-sm'), children: children }) : null] }) }));
12
12
  }
13
13
  function DefaultEmptyIcon() {
14
14
  return (_jsx("svg", { "aria-hidden": "true", className: "h-10 w-10", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: "1.8", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3.75 8.75 6.2 5.4A2 2 0 0 1 7.82 4.6h8.36a2 2 0 0 1 1.62.8l2.45 3.35M3.75 8.75v6.9A3.75 3.75 0 0 0 7.5 19.4h9a3.75 3.75 0 0 0 3.75-3.75v-6.9M3.75 8.75h4.92a1.5 1.5 0 0 1 1.34.83l.28.56a1.5 1.5 0 0 0 1.34.83h.74a1.5 1.5 0 0 0 1.34-.83l.28-.56a1.5 1.5 0 0 1 1.34-.83h4.92" }) }));
@@ -1,4 +1,4 @@
1
- import { type ReactNode } from 'react';
1
+ import { type CSSProperties, type ReactNode } from 'react';
2
2
  export interface UnderlinedTabItem {
3
3
  id: string;
4
4
  label: string;
@@ -14,6 +14,10 @@ export interface TabsUnderlinedProps {
14
14
  listClassName?: string;
15
15
  triggerClassName?: string;
16
16
  contentClassName?: string;
17
+ tabWidth?: CSSProperties['width'];
18
+ tabMinWidth?: CSSProperties['minWidth'];
19
+ tabMaxWidth?: CSSProperties['maxWidth'];
20
+ truncateLabels?: boolean;
17
21
  }
18
- export declare function TabsUnderlined({ className, contentClassName, defaultValue, items, listClassName, onValueChange, triggerClassName, value, }: TabsUnderlinedProps): import("react").JSX.Element;
22
+ export declare function TabsUnderlined({ className, contentClassName, defaultValue, items, listClassName, onValueChange, tabMaxWidth, tabMinWidth, tabWidth, triggerClassName, truncateLabels, value, }: TabsUnderlinedProps): import("react").JSX.Element;
19
23
  //# sourceMappingURL=TabsUnderlined.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TabsUnderlined.d.ts","sourceRoot":"","sources":["../../src/components/TabsUnderlined.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAK1D,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,KAAK,EACL,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,KAAK,GACN,EAAE,mBAAmB,+BAmDrB"}
1
+ {"version":3,"file":"TabsUnderlined.d.ts","sourceRoot":"","sources":["../../src/components/TabsUnderlined.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAa9E,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IACxC,WAAW,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IACxC,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,KAAK,EACL,aAAa,EACb,aAAa,EACb,WAAW,EACX,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,cAAsB,EACtB,KAAK,GACN,EAAE,mBAAmB,+BA4DrB"}
@@ -2,7 +2,11 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useMemo, useState } from 'react';
3
3
  import * as Tabs from '@radix-ui/react-tabs';
4
4
  import { cn } from '../utils/cn';
5
- export function TabsUnderlined({ className, contentClassName, defaultValue, items, listClassName, onValueChange, triggerClassName, value, }) {
5
+ const DEFAULT_TAB_MIN_WIDTH = '8.75rem';
6
+ const TAB_BAR_BACKGROUND = 'bg-[color-mix(in_srgb,var(--foreground-muted)_5%,var(--background-secondary))]';
7
+ const TAB_INACTIVE_BACKGROUND = 'bg-[color-mix(in_srgb,var(--foreground-muted)_5%,var(--background-secondary))]';
8
+ const TAB_INACTIVE_HOVER_BACKGROUND = 'hover:bg-[color-mix(in_srgb,var(--foreground-muted)_8%,var(--background-secondary))]';
9
+ export function TabsUnderlined({ className, contentClassName, defaultValue, items, listClassName, onValueChange, tabMaxWidth, tabMinWidth, tabWidth, triggerClassName, truncateLabels = false, value, }) {
6
10
  const visibleItems = useMemo(() => items.filter((item) => item.visible ?? true), [items]);
7
11
  const initialValue = defaultValue && visibleItems.some((item) => item.id === defaultValue)
8
12
  ? defaultValue
@@ -13,8 +17,13 @@ export function TabsUnderlined({ className, contentClassName, defaultValue, item
13
17
  setInternalValue(nextValue);
14
18
  onValueChange?.(nextValue);
15
19
  }
16
- return (_jsx("div", { className: cn('border-app-border bg-surface flex h-full min-w-0 flex-col overflow-hidden rounded-xl border', className), children: _jsxs(Tabs.Root, { value: resolvedValue, onValueChange: handleValueChange, className: "flex min-w-0 flex-1 flex-col", children: [_jsx(Tabs.List, { className: cn('border-app-border flex min-w-0 overflow-x-auto overflow-y-hidden border-b bg-[color-mix(in_srgb,var(--foreground-muted)_5%,var(--surface))] text-sm', listClassName), children: visibleItems.map((item) => (_jsx(TabTrigger, { value: item.id, className: triggerClassName, children: item.label }, item.id))) }), visibleItems.map((item) => (_jsx(Tabs.Content, { value: item.id, className: cn('flex h-full min-w-0 flex-1 flex-col overflow-hidden', contentClassName), children: item.children }, item.id)))] }) }));
20
+ return (_jsx("div", { className: cn('border-app-border bg-background-secondary flex h-full min-w-0 flex-col overflow-hidden rounded-xl border', className), children: _jsxs(Tabs.Root, { value: resolvedValue, onValueChange: handleValueChange, className: "flex min-w-0 flex-1 flex-col", children: [_jsx(Tabs.List, { className: cn('border-app-border flex min-w-0 overflow-x-auto overflow-y-hidden border-b text-sm', TAB_BAR_BACKGROUND, listClassName), children: visibleItems.map((item) => (_jsx(TabTrigger, { value: item.id, className: triggerClassName, maxWidth: tabMaxWidth, minWidth: tabMinWidth, width: tabWidth, truncate: truncateLabels, children: item.label }, item.id))) }), visibleItems.map((item) => (_jsx(Tabs.Content, { value: item.id, className: cn('flex h-full min-w-0 flex-1 flex-col overflow-hidden', contentClassName), children: item.children }, item.id)))] }) }));
17
21
  }
18
- function TabTrigger({ children, className, value, }) {
19
- return (_jsx(Tabs.Trigger, { value: value, className: cn('text-foreground-muted hover:text-foreground focus-visible:ring-brand/50 data-[state=active]:border-app-border data-[state=active]:border-b-surface data-[state=active]:bg-surface data-[state=active]:text-foreground -mb-px inline-flex shrink-0 cursor-pointer items-center border border-t-0 border-transparent bg-[color-mix(in_srgb,var(--foreground-muted)_7%,var(--surface))] px-3 py-2 text-sm font-medium transition-colors first:border-l-0 hover:bg-[color-mix(in_srgb,var(--foreground-muted)_10%,var(--surface))] focus:outline-none focus-visible:ring-2', className), children: children }));
22
+ function TabTrigger({ children, className, value, maxWidth, minWidth, width, truncate, }) {
23
+ const style = {
24
+ maxWidth,
25
+ minWidth: minWidth ?? DEFAULT_TAB_MIN_WIDTH,
26
+ width,
27
+ };
28
+ return (_jsx(Tabs.Trigger, { value: value, style: style, className: cn('text-foreground-muted hover:text-foreground focus-visible:ring-brand/50 data-[state=active]:border-app-border data-[state=active]:border-b-background-secondary data-[state=active]:bg-background-secondary data-[state=active]:text-foreground -mb-px inline-flex shrink-0 cursor-pointer items-center justify-center border border-t-0 border-transparent px-4 py-2 text-sm font-medium transition-colors first:border-l-0 focus:outline-none focus-visible:ring-2', TAB_INACTIVE_BACKGROUND, TAB_INACTIVE_HOVER_BACKGROUND, className), children: _jsx("span", { className: cn('min-w-0', truncate && 'overflow-hidden text-ellipsis whitespace-nowrap'), children: children }) }));
20
29
  }
package/dist/styles.css CHANGED
@@ -1102,6 +1102,10 @@ h2.react-datepicker__current-month {
1102
1102
  width: calc(var(--spacing) * 5);
1103
1103
  height: calc(var(--spacing) * 5);
1104
1104
  }
1105
+ .size-6 {
1106
+ width: calc(var(--spacing) * 6);
1107
+ height: calc(var(--spacing) * 6);
1108
+ }
1105
1109
  .size-7 {
1106
1110
  width: calc(var(--spacing) * 7);
1107
1111
  height: calc(var(--spacing) * 7);
@@ -1192,6 +1196,9 @@ h2.react-datepicker__current-month {
1192
1196
  .h-56 {
1193
1197
  height: calc(var(--spacing) * 56);
1194
1198
  }
1199
+ .h-64 {
1200
+ height: calc(var(--spacing) * 64);
1201
+ }
1195
1202
  .h-72 {
1196
1203
  height: calc(var(--spacing) * 72);
1197
1204
  }
@@ -1372,6 +1379,9 @@ h2.react-datepicker__current-month {
1372
1379
  .w-\[42rem\] {
1373
1380
  width: 42rem;
1374
1381
  }
1382
+ .w-\[44rem\] {
1383
+ width: 44rem;
1384
+ }
1375
1385
  .w-\[46rem\] {
1376
1386
  width: 46rem;
1377
1387
  }
@@ -1543,6 +1553,10 @@ h2.react-datepicker__current-month {
1543
1553
  --tw-translate-x: calc(var(--spacing) * 0);
1544
1554
  translate: var(--tw-translate-x) var(--tw-translate-y);
1545
1555
  }
1556
+ .translate-x-\[calc\(100\%\+0\.25rem\)\] {
1557
+ --tw-translate-x: calc(100% + 0.25rem);
1558
+ translate: var(--tw-translate-x) var(--tw-translate-y);
1559
+ }
1546
1560
  .-translate-y-1\/2 {
1547
1561
  --tw-translate-y: calc(calc(1/2 * 100%) * -1);
1548
1562
  translate: var(--tw-translate-x) var(--tw-translate-y);
@@ -1891,6 +1905,12 @@ h2.react-datepicker__current-month {
1891
1905
  background-color: color-mix(in srgb,var(--brand) 5%,var(--surface));
1892
1906
  }
1893
1907
  }
1908
+ .bg-\[color-mix\(in_srgb\,var\(--brand\)_9\%\,var\(--background-secondary\)\)\] {
1909
+ background-color: var(--brand);
1910
+ @supports (color: color-mix(in lab, red, red)) {
1911
+ background-color: color-mix(in srgb,var(--brand) 9%,var(--background-secondary));
1912
+ }
1913
+ }
1894
1914
  .bg-\[color-mix\(in_srgb\,var\(--brand\)_10\%\,var\(--surface\)\)\] {
1895
1915
  background-color: var(--brand);
1896
1916
  @supports (color: color-mix(in lab, red, red)) {
@@ -1915,16 +1935,22 @@ h2.react-datepicker__current-month {
1915
1935
  background-color: color-mix(in srgb,var(--destructive) 12%,var(--surface));
1916
1936
  }
1917
1937
  }
1918
- .bg-\[color-mix\(in_srgb\,var\(--foreground-muted\)_5\%\,var\(--surface\)\)\] {
1938
+ .bg-\[color-mix\(in_srgb\,var\(--foreground-muted\)_3\%\,var\(--background-secondary\)\)\] {
1919
1939
  background-color: var(--foreground-muted);
1920
1940
  @supports (color: color-mix(in lab, red, red)) {
1921
- background-color: color-mix(in srgb,var(--foreground-muted) 5%,var(--surface));
1941
+ background-color: color-mix(in srgb,var(--foreground-muted) 3%,var(--background-secondary));
1922
1942
  }
1923
1943
  }
1924
- .bg-\[color-mix\(in_srgb\,var\(--foreground-muted\)_7\%\,var\(--surface\)\)\] {
1944
+ .bg-\[color-mix\(in_srgb\,var\(--foreground-muted\)_5\%\,var\(--background-secondary\)\)\] {
1925
1945
  background-color: var(--foreground-muted);
1926
1946
  @supports (color: color-mix(in lab, red, red)) {
1927
- background-color: color-mix(in srgb,var(--foreground-muted) 7%,var(--surface));
1947
+ background-color: color-mix(in srgb,var(--foreground-muted) 5%,var(--background-secondary));
1948
+ }
1949
+ }
1950
+ .bg-\[color-mix\(in_srgb\,var\(--foreground-muted\)_5\%\,var\(--surface\)\)\] {
1951
+ background-color: var(--foreground-muted);
1952
+ @supports (color: color-mix(in lab, red, red)) {
1953
+ background-color: color-mix(in srgb,var(--foreground-muted) 5%,var(--surface));
1928
1954
  }
1929
1955
  }
1930
1956
  .bg-\[color-mix\(in_srgb\,var\(--foreground-muted\)_8\%\,var\(--surface\)\)\] {
@@ -2733,6 +2759,11 @@ h2.react-datepicker__current-month {
2733
2759
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
2734
2760
  transition-duration: var(--tw-duration, var(--default-transition-duration));
2735
2761
  }
2762
+ .transition-\[opacity\,color\,border-color\,background-color\] {
2763
+ transition-property: opacity,color,border-color,background-color;
2764
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
2765
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
2766
+ }
2736
2767
  .transition-\[opacity\,transform\,visibility\] {
2737
2768
  transition-property: opacity,transform,visibility;
2738
2769
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
@@ -2802,6 +2833,18 @@ h2.react-datepicker__current-month {
2802
2833
  }
2803
2834
  }
2804
2835
  }
2836
+ .group-hover\/copyable\:opacity-100 {
2837
+ &:is(:where(.group\/copyable):hover *) {
2838
+ @media (hover: hover) {
2839
+ opacity: 100%;
2840
+ }
2841
+ }
2842
+ }
2843
+ .group-focus-visible\/copyable\:opacity-100 {
2844
+ &:is(:where(.group\/copyable):focus-visible *) {
2845
+ opacity: 100%;
2846
+ }
2847
+ }
2805
2848
  .placeholder\:text-foreground-muted {
2806
2849
  &::placeholder {
2807
2850
  color: var(--color-foreground-muted);
@@ -2893,16 +2936,6 @@ h2.react-datepicker__current-month {
2893
2936
  }
2894
2937
  }
2895
2938
  }
2896
- .hover\:border-brand\/60 {
2897
- &:hover {
2898
- @media (hover: hover) {
2899
- border-color: var(--color-brand);
2900
- @supports (color: color-mix(in lab, red, red)) {
2901
- border-color: color-mix(in oklab, var(--color-brand) 60%, transparent);
2902
- }
2903
- }
2904
- }
2905
- }
2906
2939
  .hover\:border-transparent {
2907
2940
  &:hover {
2908
2941
  @media (hover: hover) {
@@ -3034,12 +3067,12 @@ h2.react-datepicker__current-month {
3034
3067
  }
3035
3068
  }
3036
3069
  }
3037
- .hover\:bg-\[color-mix\(in_srgb\,var\(--foreground-muted\)_10\%\,var\(--surface\)\)\] {
3070
+ .hover\:bg-\[color-mix\(in_srgb\,var\(--foreground-muted\)_8\%\,var\(--background-secondary\)\)\] {
3038
3071
  &:hover {
3039
3072
  @media (hover: hover) {
3040
3073
  background-color: var(--foreground-muted);
3041
3074
  @supports (color: color-mix(in lab, red, red)) {
3042
- background-color: color-mix(in srgb,var(--foreground-muted) 10%,var(--surface));
3075
+ background-color: color-mix(in srgb,var(--foreground-muted) 8%,var(--background-secondary));
3043
3076
  }
3044
3077
  }
3045
3078
  }
@@ -3129,16 +3162,6 @@ h2.react-datepicker__current-month {
3129
3162
  }
3130
3163
  }
3131
3164
  }
3132
- .hover\:bg-brand\/10 {
3133
- &:hover {
3134
- @media (hover: hover) {
3135
- background-color: var(--color-brand);
3136
- @supports (color: color-mix(in lab, red, red)) {
3137
- background-color: color-mix(in oklab, var(--color-brand) 10%, transparent);
3138
- }
3139
- }
3140
- }
3141
- }
3142
3165
  .hover\:bg-destructive {
3143
3166
  &:hover {
3144
3167
  @media (hover: hover) {
@@ -3338,14 +3361,6 @@ h2.react-datepicker__current-month {
3338
3361
  --tw-ring-inset: inset;
3339
3362
  }
3340
3363
  }
3341
- .focus-visible\:border-brand\/60 {
3342
- &:focus-visible {
3343
- border-color: var(--color-brand);
3344
- @supports (color: color-mix(in lab, red, red)) {
3345
- border-color: color-mix(in oklab, var(--color-brand) 60%, transparent);
3346
- }
3347
- }
3348
- }
3349
3364
  .focus-visible\:ring-2 {
3350
3365
  &:focus-visible {
3351
3366
  --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
@@ -3376,14 +3391,6 @@ h2.react-datepicker__current-month {
3376
3391
  }
3377
3392
  }
3378
3393
  }
3379
- .focus-visible\:ring-brand\/40 {
3380
- &:focus-visible {
3381
- --tw-ring-color: var(--color-brand);
3382
- @supports (color: color-mix(in lab, red, red)) {
3383
- --tw-ring-color: color-mix(in oklab, var(--color-brand) 40%, transparent);
3384
- }
3385
- }
3386
- }
3387
3394
  .focus-visible\:ring-brand\/50 {
3388
3395
  &:focus-visible {
3389
3396
  --tw-ring-color: var(--color-brand);
@@ -3581,14 +3588,14 @@ h2.react-datepicker__current-month {
3581
3588
  border-color: var(--color-app-border);
3582
3589
  }
3583
3590
  }
3584
- .data-\[state\=active\]\:border-b-surface {
3591
+ .data-\[state\=active\]\:border-b-background-secondary {
3585
3592
  &[data-state="active"] {
3586
- border-bottom-color: var(--color-surface);
3593
+ border-bottom-color: var(--color-background-secondary);
3587
3594
  }
3588
3595
  }
3589
- .data-\[state\=active\]\:bg-surface {
3596
+ .data-\[state\=active\]\:bg-background-secondary {
3590
3597
  &[data-state="active"] {
3591
- background-color: var(--color-surface);
3598
+ background-color: var(--color-background-secondary);
3592
3599
  }
3593
3600
  }
3594
3601
  .data-\[state\=active\]\:text-foreground {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wellingtonhlc/shared-ui",
3
- "version": "0.25.3",
3
+ "version": "0.25.6",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",