@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 +23 -0
- package/dist/components/CopyableField.d.ts.map +1 -1
- package/dist/components/CopyableField.js +25 -3
- package/dist/components/EmptyState.js +1 -1
- package/dist/components/TabsUnderlined.d.ts +6 -2
- package/dist/components/TabsUnderlined.d.ts.map +1 -1
- package/dist/components/TabsUnderlined.js +13 -4
- package/dist/styles.css +53 -46
- package/package.json +1 -1
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;
|
|
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 (
|
|
37
|
-
'
|
|
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;
|
|
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
|
-
|
|
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-
|
|
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
|
-
|
|
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\)
|
|
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)
|
|
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\)
|
|
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)
|
|
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\)
|
|
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)
|
|
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-
|
|
3591
|
+
.data-\[state\=active\]\:border-b-background-secondary {
|
|
3585
3592
|
&[data-state="active"] {
|
|
3586
|
-
border-bottom-color: var(--color-
|
|
3593
|
+
border-bottom-color: var(--color-background-secondary);
|
|
3587
3594
|
}
|
|
3588
3595
|
}
|
|
3589
|
-
.data-\[state\=active\]\:bg-
|
|
3596
|
+
.data-\[state\=active\]\:bg-background-secondary {
|
|
3590
3597
|
&[data-state="active"] {
|
|
3591
|
-
background-color: var(--color-
|
|
3598
|
+
background-color: var(--color-background-secondary);
|
|
3592
3599
|
}
|
|
3593
3600
|
}
|
|
3594
3601
|
.data-\[state\=active\]\:text-foreground {
|