@fragment-build/ui 3.3.0 → 4.0.0
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/components/code-snippet/CodeSnippet.d.ts +9 -0
- package/components/code-snippet/CodeSnippet.js +14 -4
- package/components/code-snippet/CodeSnippet.js.map +1 -1
- package/components/code-snippet/code-snippet.css +18 -0
- package/components/segmented-control/SegmentedControl.d.ts +16 -0
- package/components/segmented-control/SegmentedControl.js +18 -0
- package/components/segmented-control/SegmentedControl.js.map +1 -0
- package/components/segmented-control/SegmentedControl.styles.d.ts +46 -0
- package/components/segmented-control/SegmentedControl.styles.js +20 -0
- package/components/segmented-control/SegmentedControl.styles.js.map +1 -0
- package/components/segmented-control/segmented-control.css +41 -0
- package/fragments/empty-state/EmptyState.d.ts +12 -0
- package/fragments/empty-state/EmptyState.js +12 -0
- package/fragments/empty-state/EmptyState.js.map +1 -0
- package/fragments/empty-state/EmptyState.styles.d.ts +55 -0
- package/fragments/empty-state/EmptyState.styles.js +23 -0
- package/fragments/empty-state/EmptyState.styles.js.map +1 -0
- package/fragments/empty-state/empty-state.css +39 -0
- package/fragments/form/FormCard.d.ts +14 -0
- package/fragments/form/FormCard.js +14 -0
- package/fragments/form/FormCard.js.map +1 -0
- package/fragments/form/FormCard.styles.d.ts +49 -0
- package/fragments/form/FormCard.styles.js +23 -0
- package/fragments/form/FormCard.styles.js.map +1 -0
- package/fragments/form/FormSection.d.ts +3 -1
- package/fragments/form/FormSection.js +2 -2
- package/fragments/form/FormSection.js.map +1 -1
- package/fragments/form/FormSection.styles.d.ts +6 -0
- package/fragments/form/FormSection.styles.js +2 -0
- package/fragments/form/FormSection.styles.js.map +1 -1
- package/fragments/form/form-card.css +42 -0
- package/fragments/form/form-section.css +22 -10
- package/fragments/form/form.css +1 -1
- package/fragments/page/PageHeader.d.ts +7 -2
- package/fragments/page/PageHeader.js +3 -3
- package/fragments/page/PageHeader.js.map +1 -1
- package/fragments/page/PageHeader.styles.d.ts +30 -21
- package/fragments/page/PageHeader.styles.js +10 -0
- package/fragments/page/PageHeader.styles.js.map +1 -1
- package/fragments/page/page-header.css +23 -3
- package/fragments/save-bar/SaveBar.d.ts +12 -0
- package/fragments/save-bar/SaveBar.js +15 -0
- package/fragments/save-bar/SaveBar.js.map +1 -0
- package/fragments/save-bar/SaveBar.styles.d.ts +37 -0
- package/fragments/save-bar/SaveBar.styles.js +16 -0
- package/fragments/save-bar/SaveBar.styles.js.map +1 -0
- package/fragments/save-bar/save-bar.css +28 -0
- package/fragments/shell/shell.css +8 -4
- package/fragments/sidebar/Sidebar.js +4 -1
- package/fragments/sidebar/Sidebar.js.map +1 -1
- package/fragments/sidebar/sidebar.css +41 -24
- package/fragments/stat/StatCard.d.ts +29 -0
- package/fragments/stat/StatCard.js +20 -0
- package/fragments/stat/StatCard.js.map +1 -0
- package/fragments/stat/StatCard.styles.d.ts +85 -0
- package/fragments/stat/StatCard.styles.js +26 -0
- package/fragments/stat/StatCard.styles.js.map +1 -0
- package/fragments/stat/stat-card.css +64 -0
- package/fragments/widget/Widget.d.ts +9 -2
- package/fragments/widget/Widget.js +4 -3
- package/fragments/widget/Widget.js.map +1 -1
- package/fragments/widget/Widget.styles.d.ts +51 -0
- package/fragments/widget/Widget.styles.js +12 -0
- package/fragments/widget/Widget.styles.js.map +1 -1
- package/fragments/widget/widget.css +49 -4
- package/index.css +112 -38
- package/index.d.ts +5 -0
- package/index.js +5 -0
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/code-snippet/code-snippet.css +18 -0
- package/src/components/segmented-control/segmented-control.css +41 -0
- package/src/fragments/empty-state/empty-state.css +39 -0
- package/src/fragments/form/form-card.css +42 -0
- package/src/fragments/form/form-section.css +22 -10
- package/src/fragments/form/form.css +1 -1
- package/src/fragments/page/page-header.css +23 -3
- package/src/fragments/save-bar/save-bar.css +28 -0
- package/src/fragments/shell/shell.css +8 -4
- package/src/fragments/sidebar/sidebar.css +41 -24
- package/src/fragments/stat/stat-card.css +64 -0
- package/src/fragments/widget/widget.css +49 -4
- package/src/index.css +112 -38
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
export interface CodeSnippetProps {
|
|
2
2
|
code: string;
|
|
3
3
|
prefix?: string;
|
|
4
|
+
/**
|
|
5
|
+
* `inline` (default) is a one-line command with the copy button beside it. `block` is a panel
|
|
6
|
+
* for multi-line code, with a header carrying `title` and a labelled copy button.
|
|
7
|
+
*/
|
|
8
|
+
variant?: 'inline' | 'block';
|
|
9
|
+
/** The block header's label, e.g. the file or language the snippet belongs to. */
|
|
10
|
+
title?: React.ReactNode;
|
|
11
|
+
copyLabel?: string;
|
|
12
|
+
copiedLabel?: string;
|
|
4
13
|
}
|
|
5
14
|
export declare const CodeSnippet: React.FC<CodeSnippetProps>;
|
|
@@ -1,15 +1,25 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import {
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useState } from 'react';
|
|
4
4
|
import { Button, Tooltip } from '@heroui/react';
|
|
5
5
|
import { IconCheck, IconCopy } from '@tabler/icons-react';
|
|
6
|
-
export const CodeSnippet = ({ code, prefix = '$' }) => {
|
|
6
|
+
export const CodeSnippet = ({ code, prefix = '$', variant = 'inline', title, copyLabel = 'Copy', copiedLabel = 'Copied', }) => {
|
|
7
7
|
const [copied, setCopied] = useState(false);
|
|
8
8
|
const handleCopy = async () => {
|
|
9
|
-
|
|
9
|
+
try {
|
|
10
|
+
await navigator.clipboard.writeText(code);
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
// Denied outside a secure context and in some embedded browsers. The code is on screen and
|
|
14
|
+
// selectable either way, so the button simply does not claim a copy that did not happen.
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
10
17
|
setCopied(true);
|
|
11
18
|
setTimeout(() => setCopied(false), 2000);
|
|
12
19
|
};
|
|
13
|
-
|
|
20
|
+
if (variant === 'block') {
|
|
21
|
+
return (_jsxs("div", { className: "fragment-code-snippet--block", children: [_jsxs("div", { className: "fragment-code-snippet__header", children: [_jsx("span", { className: "fragment-code-snippet__title", children: title }), _jsxs(Button, { "aria-live": "polite", onPress: handleCopy, size: "sm", variant: "ghost", children: [copied ? _jsx(IconCheck, { size: 14 }) : _jsx(IconCopy, { size: 14 }), copied ? copiedLabel : copyLabel] })] }), _jsxs("pre", { className: "fragment-code-snippet__block-code", children: [prefix && _jsxs("span", { className: "fragment-code-snippet__prefix", children: [prefix, " "] }), code] })] }));
|
|
22
|
+
}
|
|
23
|
+
return (_jsxs("div", { className: "fragment-code-snippet", children: [_jsxs("pre", { className: "fragment-code-snippet__code", children: [prefix && _jsxs("span", { className: "fragment-code-snippet__prefix", children: [prefix, " "] }), code] }), _jsxs(Tooltip, { children: [_jsx(Button, { isIconOnly: true, "aria-label": copyLabel, size: "sm", variant: "ghost", onPress: handleCopy, children: copied ? _jsx(IconCheck, { size: 14 }) : _jsx(IconCopy, { size: 14 }) }), _jsx(Tooltip.Content, { children: copied ? copiedLabel : copyLabel })] })] }));
|
|
14
24
|
};
|
|
15
25
|
//# sourceMappingURL=CodeSnippet.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeSnippet.js","sourceRoot":"","sources":["../../src/components/code-snippet/CodeSnippet.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"CodeSnippet.js","sourceRoot":"","sources":["../../src/components/code-snippet/CodeSnippet.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAgB1D,MAAM,CAAC,MAAM,WAAW,GAA+B,CAAC,EACtD,IAAI,EAAE,MAAM,GAAG,GAAG,EAAE,OAAO,GAAG,QAAQ,EAAE,KAAK,EAAE,SAAS,GAAG,MAAM,EAAE,WAAW,GAAG,QAAQ,GAC1F,EAAE,EAAE;IACH,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE5C,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;QAC5B,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACP,2FAA2F;YAC3F,yFAAyF;YACzF,OAAO;QACT,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC,CAAC;IAEF,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,CACL,eAAK,SAAS,EAAC,8BAA8B,aAC3C,eAAK,SAAS,EAAC,+BAA+B,aAC5C,eAAM,SAAS,EAAC,8BAA8B,YAAE,KAAK,GAAQ,EAC7D,MAAC,MAAM,iBAAW,QAAQ,EAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAC,IAAI,EAAC,OAAO,EAAC,OAAO,aACtE,MAAM,CAAC,CAAC,CAAC,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,GAAI,CAAC,CAAC,CAAC,KAAC,QAAQ,IAAC,IAAI,EAAE,EAAE,GAAI,EACzD,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,IAC1B,IACL,EACN,eAAK,SAAS,EAAC,mCAAmC,aAC/C,MAAM,IAAI,gBAAM,SAAS,EAAC,+BAA+B,aAAE,MAAM,SAAS,EAC1E,IAAI,IACD,IACF,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAC,uBAAuB,aACpC,eAAK,SAAS,EAAC,6BAA6B,aACzC,MAAM,IAAI,gBAAM,SAAS,EAAC,+BAA+B,aAAE,MAAM,SAAS,EAC1E,IAAI,IACD,EACN,MAAC,OAAO,eACN,KAAC,MAAM,IACL,UAAU,sBACE,SAAS,EACrB,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,OAAO,EACf,OAAO,EAAE,UAAU,YAElB,MAAM,CAAC,CAAC,CAAC,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,GAAI,CAAC,CAAC,CAAC,KAAC,QAAQ,IAAC,IAAI,EAAE,EAAE,GAAI,GACnD,EACT,KAAC,OAAO,CAAC,OAAO,cAAE,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,GAAmB,IAC7D,IACN,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -11,3 +11,21 @@
|
|
|
11
11
|
@apply text-muted;
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
|
+
|
|
15
|
+
@layer components {
|
|
16
|
+
.fragment-code-snippet--block {
|
|
17
|
+
@apply overflow-hidden rounded-xl border border-border bg-surface-secondary;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.fragment-code-snippet__header {
|
|
21
|
+
@apply flex items-center justify-between gap-2 border-b border-border py-1 pr-1 pl-4;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.fragment-code-snippet__title {
|
|
25
|
+
@apply text-xs font-medium text-muted;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.fragment-code-snippet__block-code {
|
|
29
|
+
@apply overflow-x-auto px-4 py-3 font-mono text-xs leading-relaxed text-foreground;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface SegmentedControlOption<K extends string> {
|
|
2
|
+
id: K;
|
|
3
|
+
label: React.ReactNode;
|
|
4
|
+
icon?: React.ReactNode;
|
|
5
|
+
isDisabled?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface SegmentedControlProps<K extends string> {
|
|
8
|
+
options: SegmentedControlOption<K>[];
|
|
9
|
+
value: K;
|
|
10
|
+
onChange: (value: K) => void;
|
|
11
|
+
'aria-label': string;
|
|
12
|
+
size?: 'sm' | 'md';
|
|
13
|
+
fullWidth?: boolean;
|
|
14
|
+
className?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare const SegmentedControl: <K extends string>({ options, value, onChange, size, fullWidth, className, ...props }: SegmentedControlProps<K>) => import("react").JSX.Element;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* A small set of mutually exclusive options shown all at once: a time range, a view mode, a metric.
|
|
5
|
+
* A Select hides the alternatives behind a click; for two to five short options this keeps them
|
|
6
|
+
* visible and one click apart.
|
|
7
|
+
*/
|
|
8
|
+
import { ToggleButton, ToggleButtonGroup } from '@heroui/react';
|
|
9
|
+
import { segmentedControl } from './SegmentedControl.styles';
|
|
10
|
+
export const SegmentedControl = ({ options, value, onChange, size, fullWidth, className, ...props }) => {
|
|
11
|
+
const v = segmentedControl({ size, fullWidth });
|
|
12
|
+
return (_jsx(ToggleButtonGroup, { "aria-label": props['aria-label'], className: v.base({ className }), disallowEmptySelection: true, isDetached: true, onSelectionChange: (keys) => {
|
|
13
|
+
const next = [...keys][0];
|
|
14
|
+
if (next !== undefined)
|
|
15
|
+
onChange(String(next));
|
|
16
|
+
}, selectedKeys: [value], selectionMode: "single", children: options.map((option) => (_jsxs(ToggleButton, { className: v.item(), id: option.id, isDisabled: option.isDisabled, children: [option.icon, option.label] }, option.id))) }));
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=SegmentedControl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SegmentedControl.js","sourceRoot":"","sources":["../../src/components/segmented-control/SegmentedControl.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAmB7D,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAmB,EACjD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,KAAK,EACrC,EAAE,EAAE;IAC7B,MAAM,CAAC,GAAG,gBAAgB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAEhD,OAAO,CACL,KAAC,iBAAiB,kBACJ,KAAK,CAAC,YAAY,CAAC,EAC/B,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,EAChC,sBAAsB,QACtB,UAAU,QACV,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE;YAC1B,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,IAAI,KAAK,SAAS;gBAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAM,CAAC,CAAC;QACtD,CAAC,EACD,YAAY,EAAE,CAAC,KAAK,CAAC,EACrB,aAAa,EAAC,QAAQ,YAErB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,MAAC,YAAY,IAAC,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,aAC5E,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,KAAK,KAFuE,MAAM,CAAC,EAAE,CAGhF,CAChB,CAAC,GACgB,CACrB,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export declare const segmentedControl: import("tailwind-variants").TVReturnType<{
|
|
2
|
+
size: {
|
|
3
|
+
sm: {
|
|
4
|
+
base: string;
|
|
5
|
+
};
|
|
6
|
+
md: {};
|
|
7
|
+
};
|
|
8
|
+
fullWidth: {
|
|
9
|
+
true: {
|
|
10
|
+
base: string;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
}, {
|
|
14
|
+
base: string;
|
|
15
|
+
item: string;
|
|
16
|
+
}, undefined, {
|
|
17
|
+
size: {
|
|
18
|
+
sm: {
|
|
19
|
+
base: string;
|
|
20
|
+
};
|
|
21
|
+
md: {};
|
|
22
|
+
};
|
|
23
|
+
fullWidth: {
|
|
24
|
+
true: {
|
|
25
|
+
base: string;
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
}, {
|
|
29
|
+
base: string;
|
|
30
|
+
item: string;
|
|
31
|
+
}, import("tailwind-variants").TVReturnTypeLike<{
|
|
32
|
+
size: {
|
|
33
|
+
sm: {
|
|
34
|
+
base: string;
|
|
35
|
+
};
|
|
36
|
+
md: {};
|
|
37
|
+
};
|
|
38
|
+
fullWidth: {
|
|
39
|
+
true: {
|
|
40
|
+
base: string;
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
}, {
|
|
44
|
+
base: string;
|
|
45
|
+
item: string;
|
|
46
|
+
}>>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { tv } from 'tailwind-variants';
|
|
2
|
+
export const segmentedControl = tv({
|
|
3
|
+
slots: {
|
|
4
|
+
base: 'fragment-segmented-control',
|
|
5
|
+
item: 'fragment-segmented-control__item',
|
|
6
|
+
},
|
|
7
|
+
variants: {
|
|
8
|
+
size: {
|
|
9
|
+
sm: { base: 'fragment-segmented-control--sm' },
|
|
10
|
+
md: {},
|
|
11
|
+
},
|
|
12
|
+
fullWidth: {
|
|
13
|
+
true: { base: 'fragment-segmented-control--full-width' },
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
defaultVariants: {
|
|
17
|
+
size: 'md',
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=SegmentedControl.styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SegmentedControl.styles.js","sourceRoot":"","sources":["../../src/components/segmented-control/SegmentedControl.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAEvC,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;IACjC,KAAK,EAAE;QACL,IAAI,EAAE,4BAA4B;QAClC,IAAI,EAAE,kCAAkC;KACzC;IACD,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,EAAE,EAAE,EAAE,IAAI,EAAE,gCAAgC,EAAE;YAC9C,EAAE,EAAE,EAAE;SACP;QACD,SAAS,EAAE;YACT,IAAI,EAAE,EAAE,IAAI,EAAE,wCAAwC,EAAE;SACzD;KACF;IACD,eAAe,EAAE;QACf,IAAI,EAAE,IAAI;KACX;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
.fragment-segmented-control {
|
|
3
|
+
@apply inline-flex items-center gap-0.5 rounded-[var(--field-radius)] bg-default p-0.5;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.fragment-segmented-control--full-width {
|
|
7
|
+
@apply flex w-full;
|
|
8
|
+
|
|
9
|
+
.fragment-segmented-control__item {
|
|
10
|
+
@apply flex-1;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.fragment-segmented-control__item.toggle-button {
|
|
15
|
+
@apply h-8 rounded-[calc(var(--field-radius)-0.125rem)] px-3 text-sm font-medium text-muted md:h-8;
|
|
16
|
+
|
|
17
|
+
--toggle-button-bg: transparent;
|
|
18
|
+
--toggle-button-bg-hover: transparent;
|
|
19
|
+
--toggle-button-bg-pressed: transparent;
|
|
20
|
+
--toggle-button-bg-selected: var(--surface);
|
|
21
|
+
--toggle-button-bg-selected-hover: var(--surface);
|
|
22
|
+
--toggle-button-bg-selected-pressed: var(--surface);
|
|
23
|
+
--toggle-button-fg-selected: var(--surface-foreground, var(--foreground));
|
|
24
|
+
|
|
25
|
+
&:hover, &[data-hovered="true"] {
|
|
26
|
+
@apply text-foreground;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
&[data-selected="true"] {
|
|
30
|
+
@apply shadow-sm text-foreground;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
& svg {
|
|
34
|
+
@apply size-4;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.fragment-segmented-control--sm .fragment-segmented-control__item.toggle-button {
|
|
39
|
+
@apply h-7 px-2.5 text-xs md:h-7;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface EmptyStateProps {
|
|
2
|
+
icon?: React.ReactNode;
|
|
3
|
+
title: React.ReactNode;
|
|
4
|
+
description?: React.ReactNode;
|
|
5
|
+
/** Buttons or links. */
|
|
6
|
+
children?: React.ReactNode;
|
|
7
|
+
size?: 'sm' | 'md';
|
|
8
|
+
/** Draws a dashed outline, for an empty state that stands in for a whole card. */
|
|
9
|
+
bordered?: boolean;
|
|
10
|
+
className?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare const EmptyState: React.FC<EmptyStateProps>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* What a list, table or panel shows when there is nothing in it yet: an icon, one line saying
|
|
5
|
+
* what would be here, one saying how to get it there, and the action that does.
|
|
6
|
+
*/
|
|
7
|
+
import { emptyState } from './EmptyState.styles';
|
|
8
|
+
export const EmptyState = ({ icon, title, description, children, className, ...props }) => {
|
|
9
|
+
const v = emptyState(props);
|
|
10
|
+
return (_jsxs("div", { className: v.base({ className }), children: [icon && _jsx("div", { className: v.icon(), children: icon }), _jsx("p", { className: v.title(), children: title }), description && _jsx("p", { className: v.description(), children: description }), children && _jsx("div", { className: v.actions(), children: children })] }));
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=EmptyState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmptyState.js","sourceRoot":"","sources":["../../src/fragments/empty-state/EmptyState.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAcjD,MAAM,CAAC,MAAM,UAAU,GAA8B,CAAC,EACpD,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,EACxD,EAAE,EAAE;IACH,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAE5B,OAAO,CACL,eAAK,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,aAClC,IAAI,IAAI,cAAK,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,YAAG,IAAI,GAAO,EAC/C,YAAG,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,YAAG,KAAK,GAAK,EACnC,WAAW,IAAI,YAAG,SAAS,EAAE,CAAC,CAAC,WAAW,EAAE,YAAG,WAAW,GAAK,EAC/D,QAAQ,IAAI,cAAK,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,YAAG,QAAQ,GAAO,IACtD,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export declare const emptyState: import("tailwind-variants").TVReturnType<{
|
|
2
|
+
size: {
|
|
3
|
+
sm: {
|
|
4
|
+
base: string;
|
|
5
|
+
};
|
|
6
|
+
md: {};
|
|
7
|
+
};
|
|
8
|
+
bordered: {
|
|
9
|
+
true: {
|
|
10
|
+
base: string;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
}, {
|
|
14
|
+
base: string;
|
|
15
|
+
icon: string;
|
|
16
|
+
title: string;
|
|
17
|
+
description: string;
|
|
18
|
+
actions: string;
|
|
19
|
+
}, undefined, {
|
|
20
|
+
size: {
|
|
21
|
+
sm: {
|
|
22
|
+
base: string;
|
|
23
|
+
};
|
|
24
|
+
md: {};
|
|
25
|
+
};
|
|
26
|
+
bordered: {
|
|
27
|
+
true: {
|
|
28
|
+
base: string;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
}, {
|
|
32
|
+
base: string;
|
|
33
|
+
icon: string;
|
|
34
|
+
title: string;
|
|
35
|
+
description: string;
|
|
36
|
+
actions: string;
|
|
37
|
+
}, import("tailwind-variants").TVReturnTypeLike<{
|
|
38
|
+
size: {
|
|
39
|
+
sm: {
|
|
40
|
+
base: string;
|
|
41
|
+
};
|
|
42
|
+
md: {};
|
|
43
|
+
};
|
|
44
|
+
bordered: {
|
|
45
|
+
true: {
|
|
46
|
+
base: string;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
}, {
|
|
50
|
+
base: string;
|
|
51
|
+
icon: string;
|
|
52
|
+
title: string;
|
|
53
|
+
description: string;
|
|
54
|
+
actions: string;
|
|
55
|
+
}>>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { tv } from 'tailwind-variants';
|
|
2
|
+
export const emptyState = tv({
|
|
3
|
+
slots: {
|
|
4
|
+
base: 'fragment-empty-state',
|
|
5
|
+
icon: 'fragment-empty-state__icon',
|
|
6
|
+
title: 'fragment-empty-state__title',
|
|
7
|
+
description: 'fragment-empty-state__description',
|
|
8
|
+
actions: 'fragment-empty-state__actions',
|
|
9
|
+
},
|
|
10
|
+
variants: {
|
|
11
|
+
size: {
|
|
12
|
+
sm: { base: 'fragment-empty-state--sm' },
|
|
13
|
+
md: {},
|
|
14
|
+
},
|
|
15
|
+
bordered: {
|
|
16
|
+
true: { base: 'fragment-empty-state--bordered' },
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
defaultVariants: {
|
|
20
|
+
size: 'md',
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=EmptyState.styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmptyState.styles.js","sourceRoot":"","sources":["../../src/fragments/empty-state/EmptyState.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAEvC,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,CAAC;IAC3B,KAAK,EAAE;QACL,IAAI,EAAE,sBAAsB;QAC5B,IAAI,EAAE,4BAA4B;QAClC,KAAK,EAAE,6BAA6B;QACpC,WAAW,EAAE,mCAAmC;QAChD,OAAO,EAAE,+BAA+B;KACzC;IACD,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,EAAE,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE;YACxC,EAAE,EAAE,EAAE;SACP;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,EAAE,IAAI,EAAE,gCAAgC,EAAE;SACjD;KACF;IACD,eAAe,EAAE;QACf,IAAI,EAAE,IAAI;KACX;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
.fragment-empty-state {
|
|
3
|
+
@apply flex flex-col items-center justify-center text-center px-6 py-12;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.fragment-empty-state--sm {
|
|
7
|
+
@apply py-8;
|
|
8
|
+
|
|
9
|
+
.fragment-empty-state__icon {
|
|
10
|
+
@apply size-9 mb-3;
|
|
11
|
+
& svg {
|
|
12
|
+
@apply size-[18px];
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.fragment-empty-state--bordered {
|
|
18
|
+
@apply rounded-2xl border border-dashed border-border bg-surface;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.fragment-empty-state__icon {
|
|
22
|
+
@apply mb-4 flex size-11 items-center justify-center rounded-xl bg-default text-muted;
|
|
23
|
+
& svg {
|
|
24
|
+
@apply size-5;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.fragment-empty-state__title {
|
|
29
|
+
@apply text-sm font-semibold text-foreground;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.fragment-empty-state__description {
|
|
33
|
+
@apply mt-1 max-w-sm text-sm text-muted text-balance;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.fragment-empty-state__actions {
|
|
37
|
+
@apply mt-5 flex flex-wrap items-center justify-center gap-2;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface FormCardProps {
|
|
2
|
+
children: React.ReactNode;
|
|
3
|
+
title: React.ReactNode;
|
|
4
|
+
description?: React.ReactNode;
|
|
5
|
+
/** Beside the title: a status chip, a "reset" link, a switch that enables the whole group. */
|
|
6
|
+
titleEndContent?: React.ReactNode;
|
|
7
|
+
/** Behind a hairline at the bottom: secondary actions, or a note on when the change applies. */
|
|
8
|
+
footer?: React.ReactNode;
|
|
9
|
+
/** `danger` marks a group of irreversible actions. */
|
|
10
|
+
variant?: 'default' | 'danger';
|
|
11
|
+
id?: string;
|
|
12
|
+
className?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare const FormCard: React.FC<FormCardProps>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* One group of settings drawn as a card: a heading that says what the group is for, then its
|
|
5
|
+
* fields. Where FormSection separates groups with rules on one sheet, FormCard gives each group its
|
|
6
|
+
* own surface — the better fit for a long settings page, where the eye needs landmarks to scan by.
|
|
7
|
+
*/
|
|
8
|
+
import { Card } from '@heroui/react';
|
|
9
|
+
import { formCard } from './FormCard.styles';
|
|
10
|
+
export const FormCard = ({ children, title, description, titleEndContent, footer, id, className, ...props }) => {
|
|
11
|
+
const v = formCard(props);
|
|
12
|
+
return (_jsxs(Card, { className: v.base({ className }), id: id, children: [_jsxs("div", { className: v.header(), children: [_jsxs("div", { className: v.heading(), children: [_jsx("h3", { className: v.title(), children: title }), description && _jsx("div", { className: v.description(), children: description })] }), titleEndContent && _jsx("div", { className: v.headerEnd(), children: titleEndContent })] }), _jsx("div", { className: v.body(), children: children }), footer && _jsx("div", { className: v.footer(), children: footer })] }));
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=FormCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormCard.js","sourceRoot":"","sources":["../../src/fragments/form/FormCard.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAgB7C,MAAM,CAAC,MAAM,QAAQ,GAA4B,CAAC,EAChD,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,KAAK,EAC/E,EAAE,EAAE;IACH,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE1B,OAAO,CACL,MAAC,IAAI,IAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,aAC5C,eAAK,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,aACxB,eAAK,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,aACzB,aAAI,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,YAAG,KAAK,GAAM,EACrC,WAAW,IAAI,cAAK,SAAS,EAAE,CAAC,CAAC,WAAW,EAAE,YAAG,WAAW,GAAO,IAChE,EACL,eAAe,IAAI,cAAK,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,YAAG,eAAe,GAAO,IACtE,EACN,cAAK,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,YAAG,QAAQ,GAAO,EACzC,MAAM,IAAI,cAAK,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,YAAG,MAAM,GAAO,IAChD,CACR,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export declare const formCard: import("tailwind-variants").TVReturnType<{
|
|
2
|
+
variant: {
|
|
3
|
+
default: {};
|
|
4
|
+
danger: {
|
|
5
|
+
base: string;
|
|
6
|
+
};
|
|
7
|
+
};
|
|
8
|
+
}, {
|
|
9
|
+
base: string;
|
|
10
|
+
header: string;
|
|
11
|
+
heading: string;
|
|
12
|
+
title: string;
|
|
13
|
+
description: string;
|
|
14
|
+
headerEnd: string;
|
|
15
|
+
body: string;
|
|
16
|
+
footer: string;
|
|
17
|
+
}, undefined, {
|
|
18
|
+
variant: {
|
|
19
|
+
default: {};
|
|
20
|
+
danger: {
|
|
21
|
+
base: string;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
}, {
|
|
25
|
+
base: string;
|
|
26
|
+
header: string;
|
|
27
|
+
heading: string;
|
|
28
|
+
title: string;
|
|
29
|
+
description: string;
|
|
30
|
+
headerEnd: string;
|
|
31
|
+
body: string;
|
|
32
|
+
footer: string;
|
|
33
|
+
}, import("tailwind-variants").TVReturnTypeLike<{
|
|
34
|
+
variant: {
|
|
35
|
+
default: {};
|
|
36
|
+
danger: {
|
|
37
|
+
base: string;
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
}, {
|
|
41
|
+
base: string;
|
|
42
|
+
header: string;
|
|
43
|
+
heading: string;
|
|
44
|
+
title: string;
|
|
45
|
+
description: string;
|
|
46
|
+
headerEnd: string;
|
|
47
|
+
body: string;
|
|
48
|
+
footer: string;
|
|
49
|
+
}>>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { tv } from 'tailwind-variants';
|
|
2
|
+
export const formCard = tv({
|
|
3
|
+
slots: {
|
|
4
|
+
base: 'fragment-form-card',
|
|
5
|
+
header: 'fragment-form-card__header',
|
|
6
|
+
heading: 'fragment-form-card__heading',
|
|
7
|
+
title: 'fragment-form-card__title',
|
|
8
|
+
description: 'fragment-form-card__description',
|
|
9
|
+
headerEnd: 'fragment-form-card__header-end',
|
|
10
|
+
body: 'fragment-form-card__body',
|
|
11
|
+
footer: 'fragment-form-card__footer',
|
|
12
|
+
},
|
|
13
|
+
variants: {
|
|
14
|
+
variant: {
|
|
15
|
+
default: {},
|
|
16
|
+
danger: { base: 'fragment-form-card--danger' },
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
defaultVariants: {
|
|
20
|
+
variant: 'default',
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=FormCard.styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormCard.styles.js","sourceRoot":"","sources":["../../src/fragments/form/FormCard.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAEvC,MAAM,CAAC,MAAM,QAAQ,GAAG,EAAE,CAAC;IACzB,KAAK,EAAE;QACL,IAAI,EAAE,oBAAoB;QAC1B,MAAM,EAAE,4BAA4B;QACpC,OAAO,EAAE,6BAA6B;QACtC,KAAK,EAAE,2BAA2B;QAClC,WAAW,EAAE,iCAAiC;QAC9C,SAAS,EAAE,gCAAgC;QAC3C,IAAI,EAAE,0BAA0B;QAChC,MAAM,EAAE,4BAA4B;KACrC;IACD,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE;SAC/C;KACF;IACD,eAAe,EAAE;QACf,OAAO,EAAE,SAAS;KACnB;CACF,CAAC,CAAC"}
|
|
@@ -4,8 +4,10 @@
|
|
|
4
4
|
import React from 'react';
|
|
5
5
|
export interface FormSectionProps {
|
|
6
6
|
children: React.ReactNode;
|
|
7
|
-
title:
|
|
7
|
+
title: React.ReactNode;
|
|
8
8
|
description?: React.ReactNode;
|
|
9
|
+
/** Sits beside the title, for a status chip or a "reset to default" link. */
|
|
10
|
+
titleEndContent?: React.ReactNode;
|
|
9
11
|
direction?: 'vertical' | 'horizontal';
|
|
10
12
|
fullWidth?: boolean;
|
|
11
13
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { formSection } from './FormSection.styles';
|
|
4
|
-
export const FormSection = ({ children, title, description, ...props }) => {
|
|
4
|
+
export const FormSection = ({ children, title, description, titleEndContent, ...props }) => {
|
|
5
5
|
const v = formSection(props);
|
|
6
|
-
return (_jsx("div", { className: v.base(), children: _jsxs("div", { className: v.main(), children: [_jsxs("div", { className: v.info(), children: [_jsx("h3", { children: title }), _jsx("div", { className: v.description(), children: description })] }), _jsx("div", { className: v.content(), children: children })] }) }));
|
|
6
|
+
return (_jsx("div", { className: v.base(), children: _jsxs("div", { className: v.main(), children: [_jsxs("div", { className: v.info(), children: [_jsxs("div", { className: v.titleRow(), children: [_jsx("h3", { className: v.title(), children: title }), titleEndContent] }), description && _jsx("div", { className: v.description(), children: description })] }), _jsx("div", { className: v.content(), children: children })] }) }));
|
|
7
7
|
};
|
|
8
8
|
//# sourceMappingURL=FormSection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormSection.js","sourceRoot":"","sources":["../../src/fragments/form/FormSection.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAOb,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"FormSection.js","sourceRoot":"","sources":["../../src/fragments/form/FormSection.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAOb,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAYnD,MAAM,CAAC,MAAM,WAAW,GAA+B,CAAC,EACtD,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,KAAK,EACxD,EAAE,EAAE;IACH,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAE7B,OAAO,CACL,cAAK,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,YACtB,eAAK,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,aACtB,eAAK,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,aACtB,eAAK,SAAS,EAAE,CAAC,CAAC,QAAQ,EAAE,aAC1B,aAAI,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,YAAG,KAAK,GAAM,EACrC,eAAe,IACZ,EACL,WAAW,IAAI,cAAK,SAAS,EAAE,CAAC,CAAC,WAAW,EAAE,YAAG,WAAW,GAAO,IAChE,EACN,cAAK,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,YACxB,QAAQ,GACL,IACF,GACF,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -16,6 +16,8 @@ export declare const formSection: import("tailwind-variants").TVReturnType<{
|
|
|
16
16
|
base: string;
|
|
17
17
|
main: string;
|
|
18
18
|
info: string;
|
|
19
|
+
titleRow: string;
|
|
20
|
+
title: string;
|
|
19
21
|
content: string;
|
|
20
22
|
description: string;
|
|
21
23
|
}, undefined, {
|
|
@@ -36,6 +38,8 @@ export declare const formSection: import("tailwind-variants").TVReturnType<{
|
|
|
36
38
|
base: string;
|
|
37
39
|
main: string;
|
|
38
40
|
info: string;
|
|
41
|
+
titleRow: string;
|
|
42
|
+
title: string;
|
|
39
43
|
content: string;
|
|
40
44
|
description: string;
|
|
41
45
|
}, import("tailwind-variants").TVReturnTypeLike<{
|
|
@@ -56,6 +60,8 @@ export declare const formSection: import("tailwind-variants").TVReturnType<{
|
|
|
56
60
|
base: string;
|
|
57
61
|
main: string;
|
|
58
62
|
info: string;
|
|
63
|
+
titleRow: string;
|
|
64
|
+
title: string;
|
|
59
65
|
content: string;
|
|
60
66
|
description: string;
|
|
61
67
|
}>>;
|
|
@@ -4,6 +4,8 @@ export const formSection = tv({
|
|
|
4
4
|
base: 'fragment-form-section',
|
|
5
5
|
main: 'fragment-form-section__main',
|
|
6
6
|
info: 'fragment-form-section__info',
|
|
7
|
+
titleRow: 'fragment-form-section__title-row',
|
|
8
|
+
title: 'fragment-form-section__title',
|
|
7
9
|
content: 'fragment-form-section__content',
|
|
8
10
|
description: 'fragment-form-section__description',
|
|
9
11
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormSection.styles.js","sourceRoot":"","sources":["../../src/fragments/form/FormSection.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAEvC,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;IAC5B,KAAK,EAAE;QACL,IAAI,EAAE,uBAAuB;QAC7B,IAAI,EAAE,6BAA6B;QACnC,IAAI,EAAE,6BAA6B;QACnC,OAAO,EAAE,gCAAgC;QACzC,WAAW,EAAE,oCAAoC;KAClD;IACD,QAAQ,EAAE;QACR,SAAS,EAAE;YACT,UAAU,EAAE,EAAE,IAAI,EAAE,mCAAmC,EAAE;YACzD,QAAQ,EAAE,EAAE,IAAI,EAAE,iCAAiC,EAAE;SACtD;QACD,SAAS,EAAE;YACT,IAAI,EAAE,EAAE,IAAI,EAAE,mCAAmC,EAAE;SACpD;KACF;IACD,eAAe,EAAE;QACf,SAAS,EAAE,UAAU;QACrB,SAAS,EAAE,KAAK;KACjB;CACF,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"FormSection.styles.js","sourceRoot":"","sources":["../../src/fragments/form/FormSection.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAEvC,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;IAC5B,KAAK,EAAE;QACL,IAAI,EAAE,uBAAuB;QAC7B,IAAI,EAAE,6BAA6B;QACnC,IAAI,EAAE,6BAA6B;QACnC,QAAQ,EAAE,kCAAkC;QAC5C,KAAK,EAAE,8BAA8B;QACrC,OAAO,EAAE,gCAAgC;QACzC,WAAW,EAAE,oCAAoC;KAClD;IACD,QAAQ,EAAE;QACR,SAAS,EAAE;YACT,UAAU,EAAE,EAAE,IAAI,EAAE,mCAAmC,EAAE;YACzD,QAAQ,EAAE,EAAE,IAAI,EAAE,iCAAiC,EAAE;SACtD;QACD,SAAS,EAAE;YACT,IAAI,EAAE,EAAE,IAAI,EAAE,mCAAmC,EAAE;SACpD;KACF;IACD,eAAe,EAAE;QACf,SAAS,EAAE,UAAU;QACrB,SAAS,EAAE,KAAK;KACjB;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
.fragment-form-card {
|
|
3
|
+
@apply p-0 gap-0 overflow-visible;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.fragment-form-card__header {
|
|
7
|
+
@apply flex items-start gap-4 px-6 pt-5;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.fragment-form-card__heading {
|
|
11
|
+
@apply min-w-0 flex-1;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.fragment-form-card__title {
|
|
15
|
+
@apply text-base font-semibold;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.fragment-form-card__description {
|
|
19
|
+
@apply mt-1 text-sm text-muted;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.fragment-form-card__header-end {
|
|
23
|
+
@apply shrink-0 flex items-center gap-2;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.fragment-form-card__body {
|
|
27
|
+
@apply flex flex-col gap-5 px-6 pt-5 pb-6;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.fragment-form-card__footer {
|
|
31
|
+
@apply flex items-center justify-between gap-3 rounded-b-[inherit] border-t border-separator bg-surface-secondary px-6 py-3
|
|
32
|
+
text-xs text-muted;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.fragment-form-card--danger {
|
|
36
|
+
@apply border-danger/30;
|
|
37
|
+
|
|
38
|
+
.fragment-form-card__title {
|
|
39
|
+
@apply text-danger;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|