@invergent/ui-sdk 2.19.0 → 2.19.2
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 +11 -2
- package/dist/badge.d.cts +1 -1
- package/dist/badge.d.ts +1 -1
- package/dist/button-group.cjs +80 -0
- package/dist/button-group.cjs.map +1 -0
- package/dist/button-group.d.cts +17 -0
- package/dist/button-group.d.ts +17 -0
- package/dist/button-group.js +75 -0
- package/dist/button-group.js.map +1 -0
- package/dist/button.d.cts +1 -1
- package/dist/button.d.ts +1 -1
- package/dist/chip.cjs +3 -3
- package/dist/chip.cjs.map +1 -1
- package/dist/chip.d.cts +2 -4
- package/dist/chip.d.ts +2 -4
- package/dist/chip.js +3 -3
- package/dist/chip.js.map +1 -1
- package/dist/{chunk-IVMZANP7.cjs → chunk-ILCP5QXL.cjs} +6 -3
- package/dist/chunk-ILCP5QXL.cjs.map +1 -0
- package/dist/chunk-NSK344BJ.js +80 -0
- package/dist/chunk-NSK344BJ.js.map +1 -0
- package/dist/chunk-PH733KDD.js +141 -0
- package/dist/chunk-PH733KDD.js.map +1 -0
- package/dist/chunk-QEBQ5NUN.cjs +148 -0
- package/dist/chunk-QEBQ5NUN.cjs.map +1 -0
- package/dist/chunk-UXSDDJXM.cjs +88 -0
- package/dist/chunk-UXSDDJXM.cjs.map +1 -0
- package/dist/{chunk-CPAFEXKR.js → chunk-WO2SXSNH.js} +6 -3
- package/dist/chunk-WO2SXSNH.js.map +1 -0
- package/dist/collapsible-header.cjs +14 -3
- package/dist/collapsible-header.cjs.map +1 -1
- package/dist/collapsible-header.d.cts +4 -1
- package/dist/collapsible-header.d.ts +4 -1
- package/dist/collapsible-header.js +14 -3
- package/dist/collapsible-header.js.map +1 -1
- package/dist/command.cjs +177 -0
- package/dist/command.cjs.map +1 -0
- package/dist/command.d.cts +22 -0
- package/dist/command.d.ts +22 -0
- package/dist/command.js +167 -0
- package/dist/command.js.map +1 -0
- package/dist/confirm-dialog.cjs +5 -3
- package/dist/confirm-dialog.cjs.map +1 -1
- package/dist/confirm-dialog.d.cts +4 -1
- package/dist/confirm-dialog.d.ts +4 -1
- package/dist/confirm-dialog.js +5 -3
- package/dist/confirm-dialog.js.map +1 -1
- package/dist/field.cjs +1 -1
- package/dist/field.js +1 -1
- package/dist/hover-card.cjs +43 -0
- package/dist/hover-card.cjs.map +1 -0
- package/dist/hover-card.d.cts +9 -0
- package/dist/hover-card.d.ts +9 -0
- package/dist/hover-card.js +39 -0
- package/dist/hover-card.js.map +1 -0
- package/dist/input-group.cjs +30 -142
- package/dist/input-group.cjs.map +1 -1
- package/dist/input-group.js +5 -139
- package/dist/input-group.js.map +1 -1
- package/dist/item.cjs +196 -0
- package/dist/item.cjs.map +1 -0
- package/dist/item.d.cts +28 -0
- package/dist/item.d.ts +28 -0
- package/dist/item.js +185 -0
- package/dist/item.js.map +1 -0
- package/dist/popover.cjs +31 -82
- package/dist/popover.cjs.map +1 -1
- package/dist/popover.js +2 -78
- package/dist/popover.js.map +1 -1
- package/dist/progress-bar.cjs +22 -10
- package/dist/progress-bar.cjs.map +1 -1
- package/dist/progress-bar.d.cts +2 -1
- package/dist/progress-bar.d.ts +2 -1
- package/dist/progress-bar.js +22 -10
- package/dist/progress-bar.js.map +1 -1
- package/dist/rabbit-mark.cjs +30 -0
- package/dist/rabbit-mark.cjs.map +1 -0
- package/dist/rabbit-mark.d.cts +16 -0
- package/dist/rabbit-mark.d.ts +16 -0
- package/dist/rabbit-mark.js +26 -0
- package/dist/rabbit-mark.js.map +1 -0
- package/dist/responsive-panel.cjs +85 -0
- package/dist/responsive-panel.cjs.map +1 -0
- package/dist/responsive-panel.d.cts +33 -0
- package/dist/responsive-panel.d.ts +33 -0
- package/dist/responsive-panel.js +83 -0
- package/dist/responsive-panel.js.map +1 -0
- package/dist/tab-strip.cjs +74 -0
- package/dist/tab-strip.cjs.map +1 -0
- package/dist/tab-strip.d.cts +22 -0
- package/dist/tab-strip.d.ts +22 -0
- package/dist/tab-strip.js +71 -0
- package/dist/tab-strip.js.map +1 -0
- package/dist/tabs.d.cts +1 -1
- package/dist/tabs.d.ts +1 -1
- package/dist/timeline.cjs +171 -0
- package/dist/timeline.cjs.map +1 -0
- package/dist/timeline.d.cts +28 -0
- package/dist/timeline.d.ts +28 -0
- package/dist/timeline.js +162 -0
- package/dist/timeline.js.map +1 -0
- package/dist/toggle-group.cjs +4 -2
- package/dist/toggle-group.cjs.map +1 -1
- package/dist/toggle-group.js +3 -1
- package/dist/toggle-group.js.map +1 -1
- package/dist/toggle.cjs +4 -4
- package/dist/toggle.d.cts +1 -1
- package/dist/toggle.d.ts +1 -1
- package/dist/toggle.js +1 -1
- package/package.json +2 -1
- package/dist/chunk-CPAFEXKR.js.map +0 -1
- package/dist/chunk-IVMZANP7.cjs.map +0 -1
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunk6YHDDRIM_cjs = require('./chunk-6YHDDRIM.cjs');
|
|
4
|
+
var react = require('react');
|
|
5
|
+
var radixUi = require('radix-ui');
|
|
6
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
+
|
|
8
|
+
var TimelineContext = react.createContext(
|
|
9
|
+
void 0
|
|
10
|
+
);
|
|
11
|
+
var useTimeline = () => {
|
|
12
|
+
const context = react.useContext(TimelineContext);
|
|
13
|
+
if (!context) {
|
|
14
|
+
throw new Error("useTimeline must be used within a Timeline");
|
|
15
|
+
}
|
|
16
|
+
return context;
|
|
17
|
+
};
|
|
18
|
+
function Timeline({
|
|
19
|
+
defaultValue = 1,
|
|
20
|
+
value,
|
|
21
|
+
onValueChange,
|
|
22
|
+
orientation = "vertical",
|
|
23
|
+
className,
|
|
24
|
+
children,
|
|
25
|
+
...props
|
|
26
|
+
}) {
|
|
27
|
+
const [activeStep, setInternalStep] = react.useState(defaultValue);
|
|
28
|
+
const setActiveStep = react.useCallback(
|
|
29
|
+
(step) => {
|
|
30
|
+
if (value === void 0) {
|
|
31
|
+
setInternalStep(step);
|
|
32
|
+
}
|
|
33
|
+
onValueChange?.(step);
|
|
34
|
+
},
|
|
35
|
+
[value, onValueChange]
|
|
36
|
+
);
|
|
37
|
+
const currentStep = value ?? activeStep;
|
|
38
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
39
|
+
TimelineContext.Provider,
|
|
40
|
+
{
|
|
41
|
+
value: { activeStep: currentStep, setActiveStep },
|
|
42
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
43
|
+
"div",
|
|
44
|
+
{
|
|
45
|
+
className: chunk6YHDDRIM_cjs.cn(
|
|
46
|
+
"group/timeline flex flex-col",
|
|
47
|
+
className
|
|
48
|
+
),
|
|
49
|
+
"data-orientation": orientation,
|
|
50
|
+
"data-slot": "timeline",
|
|
51
|
+
...props,
|
|
52
|
+
children
|
|
53
|
+
}
|
|
54
|
+
)
|
|
55
|
+
}
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
function TimelineContent({
|
|
59
|
+
className,
|
|
60
|
+
...props
|
|
61
|
+
}) {
|
|
62
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
63
|
+
"div",
|
|
64
|
+
{
|
|
65
|
+
className: chunk6YHDDRIM_cjs.cn("text-foreground text-sm min-w-0 overflow-hidden", className),
|
|
66
|
+
"data-slot": "timeline-content",
|
|
67
|
+
...props
|
|
68
|
+
}
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
function TimelineDate({
|
|
72
|
+
asChild = false,
|
|
73
|
+
className,
|
|
74
|
+
...props
|
|
75
|
+
}) {
|
|
76
|
+
const Comp = asChild ? radixUi.Slot.Root : "time";
|
|
77
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
78
|
+
Comp,
|
|
79
|
+
{
|
|
80
|
+
className: chunk6YHDDRIM_cjs.cn(
|
|
81
|
+
"text-muted-foreground mb-1 block text-xs font-medium max-sm:h-4",
|
|
82
|
+
className
|
|
83
|
+
),
|
|
84
|
+
"data-slot": "timeline-date",
|
|
85
|
+
...props
|
|
86
|
+
}
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
function TimelineHeader({
|
|
90
|
+
className,
|
|
91
|
+
...props
|
|
92
|
+
}) {
|
|
93
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunk6YHDDRIM_cjs.cn(className), "data-slot": "timeline-header", ...props });
|
|
94
|
+
}
|
|
95
|
+
function TimelineIndicator({
|
|
96
|
+
asChild = false,
|
|
97
|
+
className,
|
|
98
|
+
children,
|
|
99
|
+
...props
|
|
100
|
+
}) {
|
|
101
|
+
const Comp = asChild ? radixUi.Slot.Root : "div";
|
|
102
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
103
|
+
Comp,
|
|
104
|
+
{
|
|
105
|
+
"aria-hidden": "true",
|
|
106
|
+
className: chunk6YHDDRIM_cjs.cn(
|
|
107
|
+
"border-primary/20 group-data-completed/timeline-item:border-primary absolute size-4 rounded-full border-2 top-1.25 -left-6 -translate-x-1/2",
|
|
108
|
+
className
|
|
109
|
+
),
|
|
110
|
+
"data-slot": "timeline-indicator",
|
|
111
|
+
...props,
|
|
112
|
+
children
|
|
113
|
+
}
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
function TimelineItem({ step, className, ...props }) {
|
|
117
|
+
const { activeStep } = useTimeline();
|
|
118
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
119
|
+
"div",
|
|
120
|
+
{
|
|
121
|
+
className: chunk6YHDDRIM_cjs.cn(
|
|
122
|
+
"group/timeline-item has-[+[data-completed]]:**:data-[slot=timeline-separator]:bg-primary relative flex flex-col gap-0.5 ms-8 not-last:pb-6",
|
|
123
|
+
className
|
|
124
|
+
),
|
|
125
|
+
"data-completed": step <= activeStep || void 0,
|
|
126
|
+
"data-slot": "timeline-item",
|
|
127
|
+
...props
|
|
128
|
+
}
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
function TimelineSeparator({
|
|
132
|
+
className,
|
|
133
|
+
...props
|
|
134
|
+
}) {
|
|
135
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
136
|
+
"div",
|
|
137
|
+
{
|
|
138
|
+
"aria-hidden": "true",
|
|
139
|
+
className: chunk6YHDDRIM_cjs.cn(
|
|
140
|
+
"bg-primary/10 absolute self-start group-last/timeline-item:hidden -left-6 h-[calc(100%-1rem-0.25rem)] w-0.5 -translate-x-1/2 translate-y-4.5",
|
|
141
|
+
className
|
|
142
|
+
),
|
|
143
|
+
"data-slot": "timeline-separator",
|
|
144
|
+
...props
|
|
145
|
+
}
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
function TimelineTitle({
|
|
149
|
+
className,
|
|
150
|
+
...props
|
|
151
|
+
}) {
|
|
152
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
153
|
+
"h3",
|
|
154
|
+
{
|
|
155
|
+
className: chunk6YHDDRIM_cjs.cn("text-sm font-medium", className),
|
|
156
|
+
"data-slot": "timeline-title",
|
|
157
|
+
...props
|
|
158
|
+
}
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
exports.Timeline = Timeline;
|
|
163
|
+
exports.TimelineContent = TimelineContent;
|
|
164
|
+
exports.TimelineDate = TimelineDate;
|
|
165
|
+
exports.TimelineHeader = TimelineHeader;
|
|
166
|
+
exports.TimelineIndicator = TimelineIndicator;
|
|
167
|
+
exports.TimelineItem = TimelineItem;
|
|
168
|
+
exports.TimelineSeparator = TimelineSeparator;
|
|
169
|
+
exports.TimelineTitle = TimelineTitle;
|
|
170
|
+
//# sourceMappingURL=timeline.cjs.map
|
|
171
|
+
//# sourceMappingURL=timeline.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/timeline.tsx"],"names":["createContext","useContext","useState","useCallback","jsx","cn","Slot"],"mappings":"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","file":"timeline.cjs","sourcesContent":["import {\n createContext,\n type HTMLAttributes,\n useCallback,\n useContext,\n useState,\n} from \"react\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"./lib/utils\"\n\n// Types\ntype TimelineContextValue = {\n activeStep: number\n setActiveStep: (step: number) => void\n}\n\n// Context\nconst TimelineContext = createContext<TimelineContextValue | undefined>(\n undefined\n)\n\nconst useTimeline = () => {\n const context = useContext(TimelineContext)\n if (!context) {\n throw new Error(\"useTimeline must be used within a Timeline\")\n }\n return context\n}\n\n// Components\ninterface TimelineProps extends HTMLAttributes<HTMLDivElement> {\n defaultValue?: number\n value?: number\n onValueChange?: (value: number) => void\n orientation?: \"horizontal\" | \"vertical\"\n}\n\nfunction Timeline({\n defaultValue = 1,\n value,\n onValueChange,\n orientation = \"vertical\",\n className,\n children,\n ...props\n}: TimelineProps) {\n const [activeStep, setInternalStep] = useState(defaultValue)\n\n const setActiveStep = useCallback(\n (step: number) => {\n if (value === undefined) {\n setInternalStep(step)\n }\n onValueChange?.(step)\n },\n [value, onValueChange]\n )\n\n const currentStep = value ?? activeStep\n\n return (\n <TimelineContext.Provider\n value={{ activeStep: currentStep, setActiveStep }}\n >\n <div\n className={cn(\n \"group/timeline flex flex-col\",\n className\n )}\n data-orientation={orientation}\n data-slot=\"timeline\"\n {...props}\n >\n {children}\n </div>\n </TimelineContext.Provider>\n )\n}\n\n// TimelineContent\nfunction TimelineContent({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\"text-foreground text-sm min-w-0 overflow-hidden\", className)}\n data-slot=\"timeline-content\"\n {...props}\n />\n )\n}\n\n// TimelineDate\ninterface TimelineDateProps extends HTMLAttributes<HTMLTimeElement> {\n asChild?: boolean\n}\n\nfunction TimelineDate({\n asChild = false,\n className,\n ...props\n}: TimelineDateProps) {\n const Comp = asChild ? Slot.Root : \"time\"\n\n return (\n <Comp\n className={cn(\n \"text-muted-foreground mb-1 block text-xs font-medium max-sm:h-4\",\n className\n )}\n data-slot=\"timeline-date\"\n {...props}\n />\n )\n}\n\n// TimelineHeader\nfunction TimelineHeader({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div className={cn(className)} data-slot=\"timeline-header\" {...props} />\n )\n}\n\n// TimelineIndicator\ninterface TimelineIndicatorProps extends HTMLAttributes<HTMLDivElement> {\n asChild?: boolean\n}\n\nfunction TimelineIndicator({\n asChild = false,\n className,\n children,\n ...props\n}: TimelineIndicatorProps) {\n const Comp = asChild ? Slot.Root : \"div\"\n\n return (\n <Comp\n aria-hidden=\"true\"\n className={cn(\n \"border-primary/20 group-data-completed/timeline-item:border-primary absolute size-4 rounded-full border-2 top-1.25 -left-6 -translate-x-1/2\",\n className\n )}\n data-slot=\"timeline-indicator\"\n {...props}\n >\n {children}\n </Comp>\n )\n}\n\n// TimelineItem\ninterface TimelineItemProps extends HTMLAttributes<HTMLDivElement> {\n step: number\n}\n\nfunction TimelineItem({ step, className, ...props }: TimelineItemProps) {\n const { activeStep } = useTimeline()\n\n return (\n <div\n className={cn(\n \"group/timeline-item has-[+[data-completed]]:**:data-[slot=timeline-separator]:bg-primary relative flex flex-col gap-0.5 ms-8 not-last:pb-6\",\n className\n )}\n data-completed={step <= activeStep || undefined}\n data-slot=\"timeline-item\"\n {...props}\n />\n )\n}\n\n// TimelineSeparator\nfunction TimelineSeparator({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n aria-hidden=\"true\"\n className={cn(\n \"bg-primary/10 absolute self-start group-last/timeline-item:hidden -left-6 h-[calc(100%-1rem-0.25rem)] w-0.5 -translate-x-1/2 translate-y-4.5\",\n className\n )}\n data-slot=\"timeline-separator\"\n {...props}\n />\n )\n}\n\n// TimelineTitle\nfunction TimelineTitle({\n className,\n ...props\n}: HTMLAttributes<HTMLHeadingElement>) {\n return (\n <h3\n className={cn(\"text-sm font-medium\", className)}\n data-slot=\"timeline-title\"\n {...props}\n />\n )\n}\n\nexport {\n Timeline,\n TimelineContent,\n TimelineDate,\n TimelineHeader,\n TimelineIndicator,\n TimelineItem,\n TimelineSeparator,\n TimelineTitle,\n}"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { HTMLAttributes } from 'react';
|
|
3
|
+
|
|
4
|
+
interface TimelineProps extends HTMLAttributes<HTMLDivElement> {
|
|
5
|
+
defaultValue?: number;
|
|
6
|
+
value?: number;
|
|
7
|
+
onValueChange?: (value: number) => void;
|
|
8
|
+
orientation?: "horizontal" | "vertical";
|
|
9
|
+
}
|
|
10
|
+
declare function Timeline({ defaultValue, value, onValueChange, orientation, className, children, ...props }: TimelineProps): react_jsx_runtime.JSX.Element;
|
|
11
|
+
declare function TimelineContent({ className, ...props }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
12
|
+
interface TimelineDateProps extends HTMLAttributes<HTMLTimeElement> {
|
|
13
|
+
asChild?: boolean;
|
|
14
|
+
}
|
|
15
|
+
declare function TimelineDate({ asChild, className, ...props }: TimelineDateProps): react_jsx_runtime.JSX.Element;
|
|
16
|
+
declare function TimelineHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
17
|
+
interface TimelineIndicatorProps extends HTMLAttributes<HTMLDivElement> {
|
|
18
|
+
asChild?: boolean;
|
|
19
|
+
}
|
|
20
|
+
declare function TimelineIndicator({ asChild, className, children, ...props }: TimelineIndicatorProps): react_jsx_runtime.JSX.Element;
|
|
21
|
+
interface TimelineItemProps extends HTMLAttributes<HTMLDivElement> {
|
|
22
|
+
step: number;
|
|
23
|
+
}
|
|
24
|
+
declare function TimelineItem({ step, className, ...props }: TimelineItemProps): react_jsx_runtime.JSX.Element;
|
|
25
|
+
declare function TimelineSeparator({ className, ...props }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
26
|
+
declare function TimelineTitle({ className, ...props }: HTMLAttributes<HTMLHeadingElement>): react_jsx_runtime.JSX.Element;
|
|
27
|
+
|
|
28
|
+
export { Timeline, TimelineContent, TimelineDate, TimelineHeader, TimelineIndicator, TimelineItem, TimelineSeparator, TimelineTitle };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { HTMLAttributes } from 'react';
|
|
3
|
+
|
|
4
|
+
interface TimelineProps extends HTMLAttributes<HTMLDivElement> {
|
|
5
|
+
defaultValue?: number;
|
|
6
|
+
value?: number;
|
|
7
|
+
onValueChange?: (value: number) => void;
|
|
8
|
+
orientation?: "horizontal" | "vertical";
|
|
9
|
+
}
|
|
10
|
+
declare function Timeline({ defaultValue, value, onValueChange, orientation, className, children, ...props }: TimelineProps): react_jsx_runtime.JSX.Element;
|
|
11
|
+
declare function TimelineContent({ className, ...props }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
12
|
+
interface TimelineDateProps extends HTMLAttributes<HTMLTimeElement> {
|
|
13
|
+
asChild?: boolean;
|
|
14
|
+
}
|
|
15
|
+
declare function TimelineDate({ asChild, className, ...props }: TimelineDateProps): react_jsx_runtime.JSX.Element;
|
|
16
|
+
declare function TimelineHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
17
|
+
interface TimelineIndicatorProps extends HTMLAttributes<HTMLDivElement> {
|
|
18
|
+
asChild?: boolean;
|
|
19
|
+
}
|
|
20
|
+
declare function TimelineIndicator({ asChild, className, children, ...props }: TimelineIndicatorProps): react_jsx_runtime.JSX.Element;
|
|
21
|
+
interface TimelineItemProps extends HTMLAttributes<HTMLDivElement> {
|
|
22
|
+
step: number;
|
|
23
|
+
}
|
|
24
|
+
declare function TimelineItem({ step, className, ...props }: TimelineItemProps): react_jsx_runtime.JSX.Element;
|
|
25
|
+
declare function TimelineSeparator({ className, ...props }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
26
|
+
declare function TimelineTitle({ className, ...props }: HTMLAttributes<HTMLHeadingElement>): react_jsx_runtime.JSX.Element;
|
|
27
|
+
|
|
28
|
+
export { Timeline, TimelineContent, TimelineDate, TimelineHeader, TimelineIndicator, TimelineItem, TimelineSeparator, TimelineTitle };
|
package/dist/timeline.js
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { cn } from './chunk-LZGII7SX.js';
|
|
2
|
+
import { createContext, useState, useCallback, useContext } from 'react';
|
|
3
|
+
import { Slot } from 'radix-ui';
|
|
4
|
+
import { jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
var TimelineContext = createContext(
|
|
7
|
+
void 0
|
|
8
|
+
);
|
|
9
|
+
var useTimeline = () => {
|
|
10
|
+
const context = useContext(TimelineContext);
|
|
11
|
+
if (!context) {
|
|
12
|
+
throw new Error("useTimeline must be used within a Timeline");
|
|
13
|
+
}
|
|
14
|
+
return context;
|
|
15
|
+
};
|
|
16
|
+
function Timeline({
|
|
17
|
+
defaultValue = 1,
|
|
18
|
+
value,
|
|
19
|
+
onValueChange,
|
|
20
|
+
orientation = "vertical",
|
|
21
|
+
className,
|
|
22
|
+
children,
|
|
23
|
+
...props
|
|
24
|
+
}) {
|
|
25
|
+
const [activeStep, setInternalStep] = useState(defaultValue);
|
|
26
|
+
const setActiveStep = useCallback(
|
|
27
|
+
(step) => {
|
|
28
|
+
if (value === void 0) {
|
|
29
|
+
setInternalStep(step);
|
|
30
|
+
}
|
|
31
|
+
onValueChange?.(step);
|
|
32
|
+
},
|
|
33
|
+
[value, onValueChange]
|
|
34
|
+
);
|
|
35
|
+
const currentStep = value ?? activeStep;
|
|
36
|
+
return /* @__PURE__ */ jsx(
|
|
37
|
+
TimelineContext.Provider,
|
|
38
|
+
{
|
|
39
|
+
value: { activeStep: currentStep, setActiveStep },
|
|
40
|
+
children: /* @__PURE__ */ jsx(
|
|
41
|
+
"div",
|
|
42
|
+
{
|
|
43
|
+
className: cn(
|
|
44
|
+
"group/timeline flex flex-col",
|
|
45
|
+
className
|
|
46
|
+
),
|
|
47
|
+
"data-orientation": orientation,
|
|
48
|
+
"data-slot": "timeline",
|
|
49
|
+
...props,
|
|
50
|
+
children
|
|
51
|
+
}
|
|
52
|
+
)
|
|
53
|
+
}
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
function TimelineContent({
|
|
57
|
+
className,
|
|
58
|
+
...props
|
|
59
|
+
}) {
|
|
60
|
+
return /* @__PURE__ */ jsx(
|
|
61
|
+
"div",
|
|
62
|
+
{
|
|
63
|
+
className: cn("text-foreground text-sm min-w-0 overflow-hidden", className),
|
|
64
|
+
"data-slot": "timeline-content",
|
|
65
|
+
...props
|
|
66
|
+
}
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
function TimelineDate({
|
|
70
|
+
asChild = false,
|
|
71
|
+
className,
|
|
72
|
+
...props
|
|
73
|
+
}) {
|
|
74
|
+
const Comp = asChild ? Slot.Root : "time";
|
|
75
|
+
return /* @__PURE__ */ jsx(
|
|
76
|
+
Comp,
|
|
77
|
+
{
|
|
78
|
+
className: cn(
|
|
79
|
+
"text-muted-foreground mb-1 block text-xs font-medium max-sm:h-4",
|
|
80
|
+
className
|
|
81
|
+
),
|
|
82
|
+
"data-slot": "timeline-date",
|
|
83
|
+
...props
|
|
84
|
+
}
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
function TimelineHeader({
|
|
88
|
+
className,
|
|
89
|
+
...props
|
|
90
|
+
}) {
|
|
91
|
+
return /* @__PURE__ */ jsx("div", { className: cn(className), "data-slot": "timeline-header", ...props });
|
|
92
|
+
}
|
|
93
|
+
function TimelineIndicator({
|
|
94
|
+
asChild = false,
|
|
95
|
+
className,
|
|
96
|
+
children,
|
|
97
|
+
...props
|
|
98
|
+
}) {
|
|
99
|
+
const Comp = asChild ? Slot.Root : "div";
|
|
100
|
+
return /* @__PURE__ */ jsx(
|
|
101
|
+
Comp,
|
|
102
|
+
{
|
|
103
|
+
"aria-hidden": "true",
|
|
104
|
+
className: cn(
|
|
105
|
+
"border-primary/20 group-data-completed/timeline-item:border-primary absolute size-4 rounded-full border-2 top-1.25 -left-6 -translate-x-1/2",
|
|
106
|
+
className
|
|
107
|
+
),
|
|
108
|
+
"data-slot": "timeline-indicator",
|
|
109
|
+
...props,
|
|
110
|
+
children
|
|
111
|
+
}
|
|
112
|
+
);
|
|
113
|
+
}
|
|
114
|
+
function TimelineItem({ step, className, ...props }) {
|
|
115
|
+
const { activeStep } = useTimeline();
|
|
116
|
+
return /* @__PURE__ */ jsx(
|
|
117
|
+
"div",
|
|
118
|
+
{
|
|
119
|
+
className: cn(
|
|
120
|
+
"group/timeline-item has-[+[data-completed]]:**:data-[slot=timeline-separator]:bg-primary relative flex flex-col gap-0.5 ms-8 not-last:pb-6",
|
|
121
|
+
className
|
|
122
|
+
),
|
|
123
|
+
"data-completed": step <= activeStep || void 0,
|
|
124
|
+
"data-slot": "timeline-item",
|
|
125
|
+
...props
|
|
126
|
+
}
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
function TimelineSeparator({
|
|
130
|
+
className,
|
|
131
|
+
...props
|
|
132
|
+
}) {
|
|
133
|
+
return /* @__PURE__ */ jsx(
|
|
134
|
+
"div",
|
|
135
|
+
{
|
|
136
|
+
"aria-hidden": "true",
|
|
137
|
+
className: cn(
|
|
138
|
+
"bg-primary/10 absolute self-start group-last/timeline-item:hidden -left-6 h-[calc(100%-1rem-0.25rem)] w-0.5 -translate-x-1/2 translate-y-4.5",
|
|
139
|
+
className
|
|
140
|
+
),
|
|
141
|
+
"data-slot": "timeline-separator",
|
|
142
|
+
...props
|
|
143
|
+
}
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
function TimelineTitle({
|
|
147
|
+
className,
|
|
148
|
+
...props
|
|
149
|
+
}) {
|
|
150
|
+
return /* @__PURE__ */ jsx(
|
|
151
|
+
"h3",
|
|
152
|
+
{
|
|
153
|
+
className: cn("text-sm font-medium", className),
|
|
154
|
+
"data-slot": "timeline-title",
|
|
155
|
+
...props
|
|
156
|
+
}
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
export { Timeline, TimelineContent, TimelineDate, TimelineHeader, TimelineIndicator, TimelineItem, TimelineSeparator, TimelineTitle };
|
|
161
|
+
//# sourceMappingURL=timeline.js.map
|
|
162
|
+
//# sourceMappingURL=timeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/timeline.tsx"],"names":[],"mappings":"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","file":"timeline.js","sourcesContent":["import {\n createContext,\n type HTMLAttributes,\n useCallback,\n useContext,\n useState,\n} from \"react\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"./lib/utils\"\n\n// Types\ntype TimelineContextValue = {\n activeStep: number\n setActiveStep: (step: number) => void\n}\n\n// Context\nconst TimelineContext = createContext<TimelineContextValue | undefined>(\n undefined\n)\n\nconst useTimeline = () => {\n const context = useContext(TimelineContext)\n if (!context) {\n throw new Error(\"useTimeline must be used within a Timeline\")\n }\n return context\n}\n\n// Components\ninterface TimelineProps extends HTMLAttributes<HTMLDivElement> {\n defaultValue?: number\n value?: number\n onValueChange?: (value: number) => void\n orientation?: \"horizontal\" | \"vertical\"\n}\n\nfunction Timeline({\n defaultValue = 1,\n value,\n onValueChange,\n orientation = \"vertical\",\n className,\n children,\n ...props\n}: TimelineProps) {\n const [activeStep, setInternalStep] = useState(defaultValue)\n\n const setActiveStep = useCallback(\n (step: number) => {\n if (value === undefined) {\n setInternalStep(step)\n }\n onValueChange?.(step)\n },\n [value, onValueChange]\n )\n\n const currentStep = value ?? activeStep\n\n return (\n <TimelineContext.Provider\n value={{ activeStep: currentStep, setActiveStep }}\n >\n <div\n className={cn(\n \"group/timeline flex flex-col\",\n className\n )}\n data-orientation={orientation}\n data-slot=\"timeline\"\n {...props}\n >\n {children}\n </div>\n </TimelineContext.Provider>\n )\n}\n\n// TimelineContent\nfunction TimelineContent({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\"text-foreground text-sm min-w-0 overflow-hidden\", className)}\n data-slot=\"timeline-content\"\n {...props}\n />\n )\n}\n\n// TimelineDate\ninterface TimelineDateProps extends HTMLAttributes<HTMLTimeElement> {\n asChild?: boolean\n}\n\nfunction TimelineDate({\n asChild = false,\n className,\n ...props\n}: TimelineDateProps) {\n const Comp = asChild ? Slot.Root : \"time\"\n\n return (\n <Comp\n className={cn(\n \"text-muted-foreground mb-1 block text-xs font-medium max-sm:h-4\",\n className\n )}\n data-slot=\"timeline-date\"\n {...props}\n />\n )\n}\n\n// TimelineHeader\nfunction TimelineHeader({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div className={cn(className)} data-slot=\"timeline-header\" {...props} />\n )\n}\n\n// TimelineIndicator\ninterface TimelineIndicatorProps extends HTMLAttributes<HTMLDivElement> {\n asChild?: boolean\n}\n\nfunction TimelineIndicator({\n asChild = false,\n className,\n children,\n ...props\n}: TimelineIndicatorProps) {\n const Comp = asChild ? Slot.Root : \"div\"\n\n return (\n <Comp\n aria-hidden=\"true\"\n className={cn(\n \"border-primary/20 group-data-completed/timeline-item:border-primary absolute size-4 rounded-full border-2 top-1.25 -left-6 -translate-x-1/2\",\n className\n )}\n data-slot=\"timeline-indicator\"\n {...props}\n >\n {children}\n </Comp>\n )\n}\n\n// TimelineItem\ninterface TimelineItemProps extends HTMLAttributes<HTMLDivElement> {\n step: number\n}\n\nfunction TimelineItem({ step, className, ...props }: TimelineItemProps) {\n const { activeStep } = useTimeline()\n\n return (\n <div\n className={cn(\n \"group/timeline-item has-[+[data-completed]]:**:data-[slot=timeline-separator]:bg-primary relative flex flex-col gap-0.5 ms-8 not-last:pb-6\",\n className\n )}\n data-completed={step <= activeStep || undefined}\n data-slot=\"timeline-item\"\n {...props}\n />\n )\n}\n\n// TimelineSeparator\nfunction TimelineSeparator({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n aria-hidden=\"true\"\n className={cn(\n \"bg-primary/10 absolute self-start group-last/timeline-item:hidden -left-6 h-[calc(100%-1rem-0.25rem)] w-0.5 -translate-x-1/2 translate-y-4.5\",\n className\n )}\n data-slot=\"timeline-separator\"\n {...props}\n />\n )\n}\n\n// TimelineTitle\nfunction TimelineTitle({\n className,\n ...props\n}: HTMLAttributes<HTMLHeadingElement>) {\n return (\n <h3\n className={cn(\"text-sm font-medium\", className)}\n data-slot=\"timeline-title\"\n {...props}\n />\n )\n}\n\nexport {\n Timeline,\n TimelineContent,\n TimelineDate,\n TimelineHeader,\n TimelineIndicator,\n TimelineItem,\n TimelineSeparator,\n TimelineTitle,\n}"]}
|
package/dist/toggle-group.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkILCP5QXL_cjs = require('./chunk-ILCP5QXL.cjs');
|
|
4
4
|
var chunk6YHDDRIM_cjs = require('./chunk-6YHDDRIM.cjs');
|
|
5
5
|
var React = require('react');
|
|
6
6
|
var radixUi = require('radix-ui');
|
|
@@ -97,8 +97,10 @@ function ToggleGroupItem({
|
|
|
97
97
|
"data-spacing": context.spacing,
|
|
98
98
|
className: chunk6YHDDRIM_cjs.cn(
|
|
99
99
|
"shrink-0 focus:z-10 focus-visible:z-10",
|
|
100
|
-
|
|
100
|
+
chunkILCP5QXL_cjs.toggleVariants({ variant: itemVariant, size: itemSize }),
|
|
101
101
|
context.spacing === 0 && JOINED_ITEM[itemVariant ?? "default"],
|
|
102
|
+
// A joined segment pads its label; an icon segment stays square.
|
|
103
|
+
itemSize?.startsWith("icon") && "px-0",
|
|
102
104
|
className
|
|
103
105
|
),
|
|
104
106
|
...props,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/toggle-group.tsx"],"names":["React","jsx","ToggleGroupPrimitive","cn","toggleVariants"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,IAAM,qBAA2BA,gBAAA,CAAA,aAAA,CAK/B;AAAA,EACA,IAAA,EAAM,SAAA;AAAA,EACN,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,CAAA;AAAA,EACT,WAAA,EAAa;AACf,CAAC,CAAA;AAQD,IAAM,YAAA,GAAe;AAAA,EACnB,OAAA,EAAS,6CAAA;AAAA,EACT,OAAA,EAAS;AACX,CAAA;AAEA,IAAM,WAAA,GAAc;AAAA,EAClB,OAAA,EACE,8MAAA;AAAA,EACF,OAAA,EACE;AACJ,CAAA;AAEA,SAAS,WAAA,CAAY;AAAA,EACnB,SAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA,GAAU,CAAA;AAAA,EACV,WAAA,GAAc,YAAA;AAAA,EACd,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAIK;AACH,EAAA,uBACEC,cAAA;AAAA,IAACC,mBAAA,CAAqB,IAAA;AAAA,IAArB;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAA,EAAW,IAAA;AAAA,MACX,cAAA,EAAc,OAAA;AAAA,MACd,kBAAA,EAAkB,WAAA;AAAA,MAClB,KAAA,EAAO,EAAE,OAAA,EAAS,OAAA,EAAQ;AAAA,MAC1B,SAAA,EAAWC,oBAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAKT,4KAAA;AAAA,QACA,OAAA,KAAY,CAAA,IAAK,YAAA,CAAa,OAAA,IAAW,SAAS,CAAA;AAAA,QAClD;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAAF,cAAA;AAAA,QAAC,kBAAA,CAAmB,QAAA;AAAA,QAAnB;AAAA,UACC,KAAA,EAAO,EAAE,OAAA,EAAS,IAAA,EAAM,SAAS,WAAA,EAAY;AAAA,UAE5C;AAAA;AAAA;AACH;AAAA,GACF;AAEJ;AAEA,SAAS,eAAA,CAAgB;AAAA,EACvB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,SAAA;AAAA,EACP,GAAG;AACL,CAAA,EACuC;AACrC,EAAA,MAAM,OAAA,GAAgBD,4BAAW,kBAAkB,CAAA;AACnD,EAAA,MAAM,WAAA,GAAc,QAAQ,OAAA,IAAW,OAAA;AACvC,EAAA,MAAM,QAAA,GAAW,QAAQ,IAAA,IAAQ,IAAA;AAEjC,EAAA,uBACEC,cAAA;AAAA,IAACC,mBAAA,CAAqB,IAAA;AAAA,IAArB;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,cAAA,EAAc,WAAA;AAAA,MACd,WAAA,EAAW,QAAA;AAAA,MACX,gBAAc,OAAA,CAAQ,OAAA;AAAA,MACtB,SAAA,EAAWC,oBAAA;AAAA,QACT,wCAAA;AAAA,QACAC,iCAAe,EAAE,OAAA,EAAS,WAAA,EAAa,IAAA,EAAM,UAAU,CAAA;AAAA,QACvD,OAAA,CAAQ,OAAA,KAAY,CAAA,IAAK,WAAA,CAAY,eAAe,SAAS,CAAA;AAAA,
|
|
1
|
+
{"version":3,"sources":["../src/toggle-group.tsx"],"names":["React","jsx","ToggleGroupPrimitive","cn","toggleVariants"],"mappings":"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","file":"toggle-group.cjs","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { type VariantProps } from \"class-variance-authority\"\nimport { ToggleGroup as ToggleGroupPrimitive } from \"radix-ui\"\n\nimport { cn } from \"./lib/utils\"\nimport { toggleVariants } from \"./toggle\"\n\nconst ToggleGroupContext = React.createContext<\n VariantProps<typeof toggleVariants> & {\n spacing?: number\n orientation?: \"horizontal\" | \"vertical\"\n }\n>({\n size: \"default\",\n variant: \"default\",\n spacing: 0,\n orientation: \"horizontal\",\n})\n\n// With spacing the items are separate toggles, drawn as `toggle` draws them.\n// Joined (spacing 0) they are one segmented control, as the Work console\n// draws its two: `default` is the Work / Dev switch — a round track with the\n// picked segment an amber pill — and `outline` its view switch (Steps |\n// Stats, Open | Resolved) — a 10px bordered track, the picked segment a\n// faint fill.\nconst JOINED_TRACK = {\n default: \"gap-1 rounded-full bg-foreground/[0.06] p-1\",\n outline: \"gap-0 rounded-[10px] border border-foreground/10 p-0.5\",\n} as const\n\nconst JOINED_ITEM = {\n default:\n \"rounded-full border-transparent bg-transparent px-4 font-semibold text-muted-foreground hover:text-foreground data-[state=on]:border-transparent data-[state=on]:bg-amber-400 data-[state=on]:text-stone-950\",\n outline:\n \"rounded-[8px] border-transparent bg-transparent px-3 text-[12.5px] font-normal text-muted-foreground hover:text-foreground data-[state=on]:border-transparent data-[state=on]:bg-foreground/[0.08] data-[state=on]:font-medium data-[state=on]:text-foreground\",\n} as const\n\nfunction ToggleGroup({\n className,\n variant,\n size,\n spacing = 0,\n orientation = \"horizontal\",\n children,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Root> &\n VariantProps<typeof toggleVariants> & {\n spacing?: number\n orientation?: \"horizontal\" | \"vertical\"\n }) {\n return (\n <ToggleGroupPrimitive.Root\n data-slot=\"toggle-group\"\n data-variant={variant}\n data-size={size}\n data-spacing={spacing}\n data-orientation={orientation}\n style={{ \"--gap\": spacing } as React.CSSProperties}\n className={cn(\n // `w-fit` sizes to content and refuses to shrink, so a segmented\n // control wider than a phone dragged the whole page sideways rather\n // than containing itself. Capped at its container, scrolling inside\n // as a last resort — call sites should still shorten their labels.\n \"group/toggle-group no-scrollbar flex w-fit max-w-full flex-row items-center gap-[--spacing(var(--gap))] overflow-x-auto data-vertical:flex-col data-vertical:items-stretch\",\n spacing === 0 && JOINED_TRACK[variant ?? \"default\"],\n className\n )}\n {...props}\n >\n <ToggleGroupContext.Provider\n value={{ variant, size, spacing, orientation }}\n >\n {children}\n </ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n )\n}\n\nfunction ToggleGroupItem({\n className,\n children,\n variant = \"default\",\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Item> &\n VariantProps<typeof toggleVariants>) {\n const context = React.useContext(ToggleGroupContext)\n const itemVariant = context.variant || variant\n const itemSize = context.size || size\n\n return (\n <ToggleGroupPrimitive.Item\n data-slot=\"toggle-group-item\"\n data-variant={itemVariant}\n data-size={itemSize}\n data-spacing={context.spacing}\n className={cn(\n \"shrink-0 focus:z-10 focus-visible:z-10\",\n toggleVariants({ variant: itemVariant, size: itemSize }),\n context.spacing === 0 && JOINED_ITEM[itemVariant ?? \"default\"],\n // A joined segment pads its label; an icon segment stays square.\n itemSize?.startsWith(\"icon\") && \"px-0\",\n className\n )}\n {...props}\n >\n {children}\n </ToggleGroupPrimitive.Item>\n )\n}\n\n/**\n * A tab's two or three views (Steps | Stats, Members | Recent alerts): the\n * Work view switch. One view is always picked — clicking the picked one\n * again does not clear it.\n */\nfunction ViewSwitch<T extends string>({\n views,\n value,\n onChange,\n label = \"Show\",\n className,\n}: {\n views: readonly { id: T; label: React.ReactNode }[]\n value: T\n onChange: (v: T) => void\n label?: string\n className?: string\n}) {\n return (\n <ToggleGroup\n type=\"single\"\n variant=\"outline\"\n aria-label={label}\n value={value}\n onValueChange={(v) => {\n if (v) onChange(v as T)\n }}\n className={className}\n >\n {views.map((v) => (\n <ToggleGroupItem key={v.id} value={v.id}>\n {v.label}\n </ToggleGroupItem>\n ))}\n </ToggleGroup>\n )\n}\n\n/** The view last chosen under `key`, else the first; storage may be off. */\nfunction useRememberedView<T extends string>(\n key: string,\n views: readonly T[]\n): [T, (v: T) => void] {\n const [view, setView] = React.useState<T>(() => {\n try {\n const saved = localStorage.getItem(key)\n return views.find((v) => v === saved) ?? views[0]\n } catch {\n return views[0]\n }\n })\n const choose = (v: T) => {\n setView(v)\n try {\n localStorage.setItem(key, v)\n } catch {\n // A private window keeps the choice for this visit only.\n }\n }\n return [view, choose]\n}\n\nexport { ToggleGroup, ToggleGroupItem, ViewSwitch, useRememberedView }\n"]}
|
package/dist/toggle-group.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { toggleVariants } from './chunk-
|
|
1
|
+
import { toggleVariants } from './chunk-WO2SXSNH.js';
|
|
2
2
|
import { cn } from './chunk-LZGII7SX.js';
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { ToggleGroup as ToggleGroup$1 } from 'radix-ui';
|
|
@@ -77,6 +77,8 @@ function ToggleGroupItem({
|
|
|
77
77
|
"shrink-0 focus:z-10 focus-visible:z-10",
|
|
78
78
|
toggleVariants({ variant: itemVariant, size: itemSize }),
|
|
79
79
|
context.spacing === 0 && JOINED_ITEM[itemVariant ?? "default"],
|
|
80
|
+
// A joined segment pads its label; an icon segment stays square.
|
|
81
|
+
itemSize?.startsWith("icon") && "px-0",
|
|
80
82
|
className
|
|
81
83
|
),
|
|
82
84
|
...props,
|
package/dist/toggle-group.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/toggle-group.tsx"],"names":["ToggleGroupPrimitive"],"mappings":";;;;;;AASA,IAAM,qBAA2B,KAAA,CAAA,aAAA,CAK/B;AAAA,EACA,IAAA,EAAM,SAAA;AAAA,EACN,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,CAAA;AAAA,EACT,WAAA,EAAa;AACf,CAAC,CAAA;AAQD,IAAM,YAAA,GAAe;AAAA,EACnB,OAAA,EAAS,6CAAA;AAAA,EACT,OAAA,EAAS;AACX,CAAA;AAEA,IAAM,WAAA,GAAc;AAAA,EAClB,OAAA,EACE,8MAAA;AAAA,EACF,OAAA,EACE;AACJ,CAAA;AAEA,SAAS,WAAA,CAAY;AAAA,EACnB,SAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA,GAAU,CAAA;AAAA,EACV,WAAA,GAAc,YAAA;AAAA,EACd,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAIK;AACH,EAAA,uBACE,GAAA;AAAA,IAACA,aAAA,CAAqB,IAAA;AAAA,IAArB;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAA,EAAW,IAAA;AAAA,MACX,cAAA,EAAc,OAAA;AAAA,MACd,kBAAA,EAAkB,WAAA;AAAA,MAClB,KAAA,EAAO,EAAE,OAAA,EAAS,OAAA,EAAQ;AAAA,MAC1B,SAAA,EAAW,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAKT,4KAAA;AAAA,QACA,OAAA,KAAY,CAAA,IAAK,YAAA,CAAa,OAAA,IAAW,SAAS,CAAA;AAAA,QAClD;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAA,GAAA;AAAA,QAAC,kBAAA,CAAmB,QAAA;AAAA,QAAnB;AAAA,UACC,KAAA,EAAO,EAAE,OAAA,EAAS,IAAA,EAAM,SAAS,WAAA,EAAY;AAAA,UAE5C;AAAA;AAAA;AACH;AAAA,GACF;AAEJ;AAEA,SAAS,eAAA,CAAgB;AAAA,EACvB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,SAAA;AAAA,EACP,GAAG;AACL,CAAA,EACuC;AACrC,EAAA,MAAM,OAAA,GAAgB,iBAAW,kBAAkB,CAAA;AACnD,EAAA,MAAM,WAAA,GAAc,QAAQ,OAAA,IAAW,OAAA;AACvC,EAAA,MAAM,QAAA,GAAW,QAAQ,IAAA,IAAQ,IAAA;AAEjC,EAAA,uBACE,GAAA;AAAA,IAACA,aAAA,CAAqB,IAAA;AAAA,IAArB;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,cAAA,EAAc,WAAA;AAAA,MACd,WAAA,EAAW,QAAA;AAAA,MACX,gBAAc,OAAA,CAAQ,OAAA;AAAA,MACtB,SAAA,EAAW,EAAA;AAAA,QACT,wCAAA;AAAA,QACA,eAAe,EAAE,OAAA,EAAS,WAAA,EAAa,IAAA,EAAM,UAAU,CAAA;AAAA,QACvD,OAAA,CAAQ,OAAA,KAAY,CAAA,IAAK,WAAA,CAAY,eAAe,SAAS,CAAA;AAAA,
|
|
1
|
+
{"version":3,"sources":["../src/toggle-group.tsx"],"names":["ToggleGroupPrimitive"],"mappings":"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","file":"toggle-group.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { type VariantProps } from \"class-variance-authority\"\nimport { ToggleGroup as ToggleGroupPrimitive } from \"radix-ui\"\n\nimport { cn } from \"./lib/utils\"\nimport { toggleVariants } from \"./toggle\"\n\nconst ToggleGroupContext = React.createContext<\n VariantProps<typeof toggleVariants> & {\n spacing?: number\n orientation?: \"horizontal\" | \"vertical\"\n }\n>({\n size: \"default\",\n variant: \"default\",\n spacing: 0,\n orientation: \"horizontal\",\n})\n\n// With spacing the items are separate toggles, drawn as `toggle` draws them.\n// Joined (spacing 0) they are one segmented control, as the Work console\n// draws its two: `default` is the Work / Dev switch — a round track with the\n// picked segment an amber pill — and `outline` its view switch (Steps |\n// Stats, Open | Resolved) — a 10px bordered track, the picked segment a\n// faint fill.\nconst JOINED_TRACK = {\n default: \"gap-1 rounded-full bg-foreground/[0.06] p-1\",\n outline: \"gap-0 rounded-[10px] border border-foreground/10 p-0.5\",\n} as const\n\nconst JOINED_ITEM = {\n default:\n \"rounded-full border-transparent bg-transparent px-4 font-semibold text-muted-foreground hover:text-foreground data-[state=on]:border-transparent data-[state=on]:bg-amber-400 data-[state=on]:text-stone-950\",\n outline:\n \"rounded-[8px] border-transparent bg-transparent px-3 text-[12.5px] font-normal text-muted-foreground hover:text-foreground data-[state=on]:border-transparent data-[state=on]:bg-foreground/[0.08] data-[state=on]:font-medium data-[state=on]:text-foreground\",\n} as const\n\nfunction ToggleGroup({\n className,\n variant,\n size,\n spacing = 0,\n orientation = \"horizontal\",\n children,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Root> &\n VariantProps<typeof toggleVariants> & {\n spacing?: number\n orientation?: \"horizontal\" | \"vertical\"\n }) {\n return (\n <ToggleGroupPrimitive.Root\n data-slot=\"toggle-group\"\n data-variant={variant}\n data-size={size}\n data-spacing={spacing}\n data-orientation={orientation}\n style={{ \"--gap\": spacing } as React.CSSProperties}\n className={cn(\n // `w-fit` sizes to content and refuses to shrink, so a segmented\n // control wider than a phone dragged the whole page sideways rather\n // than containing itself. Capped at its container, scrolling inside\n // as a last resort — call sites should still shorten their labels.\n \"group/toggle-group no-scrollbar flex w-fit max-w-full flex-row items-center gap-[--spacing(var(--gap))] overflow-x-auto data-vertical:flex-col data-vertical:items-stretch\",\n spacing === 0 && JOINED_TRACK[variant ?? \"default\"],\n className\n )}\n {...props}\n >\n <ToggleGroupContext.Provider\n value={{ variant, size, spacing, orientation }}\n >\n {children}\n </ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n )\n}\n\nfunction ToggleGroupItem({\n className,\n children,\n variant = \"default\",\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Item> &\n VariantProps<typeof toggleVariants>) {\n const context = React.useContext(ToggleGroupContext)\n const itemVariant = context.variant || variant\n const itemSize = context.size || size\n\n return (\n <ToggleGroupPrimitive.Item\n data-slot=\"toggle-group-item\"\n data-variant={itemVariant}\n data-size={itemSize}\n data-spacing={context.spacing}\n className={cn(\n \"shrink-0 focus:z-10 focus-visible:z-10\",\n toggleVariants({ variant: itemVariant, size: itemSize }),\n context.spacing === 0 && JOINED_ITEM[itemVariant ?? \"default\"],\n // A joined segment pads its label; an icon segment stays square.\n itemSize?.startsWith(\"icon\") && \"px-0\",\n className\n )}\n {...props}\n >\n {children}\n </ToggleGroupPrimitive.Item>\n )\n}\n\n/**\n * A tab's two or three views (Steps | Stats, Members | Recent alerts): the\n * Work view switch. One view is always picked — clicking the picked one\n * again does not clear it.\n */\nfunction ViewSwitch<T extends string>({\n views,\n value,\n onChange,\n label = \"Show\",\n className,\n}: {\n views: readonly { id: T; label: React.ReactNode }[]\n value: T\n onChange: (v: T) => void\n label?: string\n className?: string\n}) {\n return (\n <ToggleGroup\n type=\"single\"\n variant=\"outline\"\n aria-label={label}\n value={value}\n onValueChange={(v) => {\n if (v) onChange(v as T)\n }}\n className={className}\n >\n {views.map((v) => (\n <ToggleGroupItem key={v.id} value={v.id}>\n {v.label}\n </ToggleGroupItem>\n ))}\n </ToggleGroup>\n )\n}\n\n/** The view last chosen under `key`, else the first; storage may be off. */\nfunction useRememberedView<T extends string>(\n key: string,\n views: readonly T[]\n): [T, (v: T) => void] {\n const [view, setView] = React.useState<T>(() => {\n try {\n const saved = localStorage.getItem(key)\n return views.find((v) => v === saved) ?? views[0]\n } catch {\n return views[0]\n }\n })\n const choose = (v: T) => {\n setView(v)\n try {\n localStorage.setItem(key, v)\n } catch {\n // A private window keeps the choice for this visit only.\n }\n }\n return [view, choose]\n}\n\nexport { ToggleGroup, ToggleGroupItem, ViewSwitch, useRememberedView }\n"]}
|
package/dist/toggle.cjs
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkILCP5QXL_cjs = require('./chunk-ILCP5QXL.cjs');
|
|
4
4
|
require('./chunk-6YHDDRIM.cjs');
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
Object.defineProperty(exports, "FilterPill", {
|
|
9
9
|
enumerable: true,
|
|
10
|
-
get: function () { return
|
|
10
|
+
get: function () { return chunkILCP5QXL_cjs.FilterPill; }
|
|
11
11
|
});
|
|
12
12
|
Object.defineProperty(exports, "Toggle", {
|
|
13
13
|
enumerable: true,
|
|
14
|
-
get: function () { return
|
|
14
|
+
get: function () { return chunkILCP5QXL_cjs.Toggle; }
|
|
15
15
|
});
|
|
16
16
|
Object.defineProperty(exports, "toggleVariants", {
|
|
17
17
|
enumerable: true,
|
|
18
|
-
get: function () { return
|
|
18
|
+
get: function () { return chunkILCP5QXL_cjs.toggleVariants; }
|
|
19
19
|
});
|
|
20
20
|
//# sourceMappingURL=toggle.cjs.map
|
|
21
21
|
//# sourceMappingURL=toggle.cjs.map
|
package/dist/toggle.d.cts
CHANGED
|
@@ -6,7 +6,7 @@ import { Toggle as Toggle$1 } from 'radix-ui';
|
|
|
6
6
|
|
|
7
7
|
declare const toggleVariants: (props?: ({
|
|
8
8
|
variant?: "default" | "outline" | null | undefined;
|
|
9
|
-
size?: "default" | "sm" | "lg" | null | undefined;
|
|
9
|
+
size?: "default" | "sm" | "lg" | "icon" | "icon-xs" | null | undefined;
|
|
10
10
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
11
11
|
declare function Toggle({ className, variant, size, ...props }: React.ComponentProps<typeof Toggle$1.Root> & VariantProps<typeof toggleVariants>): react_jsx_runtime.JSX.Element;
|
|
12
12
|
/**
|
package/dist/toggle.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ import { Toggle as Toggle$1 } from 'radix-ui';
|
|
|
6
6
|
|
|
7
7
|
declare const toggleVariants: (props?: ({
|
|
8
8
|
variant?: "default" | "outline" | null | undefined;
|
|
9
|
-
size?: "default" | "sm" | "lg" | null | undefined;
|
|
9
|
+
size?: "default" | "sm" | "lg" | "icon" | "icon-xs" | null | undefined;
|
|
10
10
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
11
11
|
declare function Toggle({ className, variant, size, ...props }: React.ComponentProps<typeof Toggle$1.Root> & VariantProps<typeof toggleVariants>): react_jsx_runtime.JSX.Element;
|
|
12
12
|
/**
|
package/dist/toggle.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@invergent/ui-sdk",
|
|
3
|
-
"version": "2.19.
|
|
3
|
+
"version": "2.19.2",
|
|
4
4
|
"description": "Shared theme and UI components for Surogate's web client, chat SDK, desktop and ops console.",
|
|
5
5
|
"license": "AGPL-3.0-only",
|
|
6
6
|
"homepage": "https://github.com/invergent-ai/surogates/tree/master/sdk/ui-sdk#readme",
|
|
@@ -44,6 +44,7 @@
|
|
|
44
44
|
"@fontsource-variable/jetbrains-mono": "^5.2.8",
|
|
45
45
|
"class-variance-authority": "^0.7.1",
|
|
46
46
|
"clsx": "^2.1.1",
|
|
47
|
+
"cmdk": "^1.1.1",
|
|
47
48
|
"lucide-react": "^1.8.0",
|
|
48
49
|
"next-themes": "^0.4.6",
|
|
49
50
|
"radix-ui": "^1.4.3",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/toggle.tsx"],"names":["TogglePrimitive"],"mappings":";;;;;AAWA,IAAM,cAAA,GAAiB,GAAA;AAAA,EACrB,oVAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EACE,6NAAA;AAAA,QACF,OAAA,EACE;AAAA,OACJ;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,OAAA,EAAS,gDAAA;AAAA,QACT,EAAA,EAAI,+CAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ;AAEA,SAAS,MAAA,CAAO;AAAA,EACd,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,SAAA;AAAA,EACP,GAAG;AACL,CAAA,EACuC;AACrC,EAAA,uBACE,GAAA;AAAA,IAACA,QAAA,CAAgB,IAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,QAAA;AAAA,MACV,SAAA,EAAW,GAAG,cAAA,CAAe,EAAE,SAAS,IAAA,EAAM,SAAA,EAAW,CAAC,CAAA;AAAA,MACzD,GAAG;AAAA;AAAA,GACN;AAEJ;AAMA,SAAS,UAAA,CAAW;AAAA,EAClB,EAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAQG;AACD,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,SAAA;AAAA,MACR,IAAA,EAAK,IAAA;AAAA,MACL,OAAA,EAAS,EAAA;AAAA,MACT,eAAA,EAAiB,MAAM,OAAA,EAAQ;AAAA,MAC/B,WAAW,EAAA,CAAG,GAAA,IAAO,CAAC,EAAA,IAAM,cAAc,SAAS,CAAA;AAAA,MAClD,GAAG;AAAA;AAAA,GACN;AAEJ","file":"chunk-CPAFEXKR.js","sourcesContent":["import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Toggle as TogglePrimitive } from \"radix-ui\"\n\nimport { cn } from \"./lib/utils\"\n\n// The Work console's pressed-state toggles. `default` is the 9px chip its\n// forms use for a choice that is on or off (Once / Repeating, the days of the\n// week): a faint box, amber-tinted once pressed. `outline` is its filter\n// pill: round, bordered, a neutral fill once on. Muted text brightens on\n// hover. Touch keeps 40px or more, a mouse the compact height.\nconst toggleVariants = cva(\n \"group/toggle inline-flex shrink-0 items-center justify-center gap-1.5 border whitespace-nowrap transition-colors outline-none focus-visible:ring-2 focus-visible:ring-ring/40 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-3.5\",\n {\n variants: {\n variant: {\n default:\n \"rounded-[9px] border-foreground/[0.08] bg-foreground/[0.04] font-medium text-muted-foreground hover:text-foreground data-[state=on]:border-amber-500/40 data-[state=on]:bg-amber-500/[0.12] data-[state=on]:text-foreground\",\n outline:\n \"rounded-full border-foreground/10 text-muted-foreground hover:text-foreground data-[state=on]:border-foreground/30 data-[state=on]:bg-foreground/[0.08] data-[state=on]:font-medium data-[state=on]:text-foreground\",\n },\n size: {\n default: \"min-h-10 px-3 text-[13px] pointer-fine:min-h-8\",\n sm: \"min-h-9 px-3 text-[12px] pointer-fine:min-h-7\",\n lg: \"min-h-11 px-4 text-sm pointer-fine:min-h-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Toggle({\n className,\n variant = \"default\",\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> &\n VariantProps<typeof toggleVariants>) {\n return (\n <TogglePrimitive.Root\n data-slot=\"toggle\"\n className={cn(toggleVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\n/**\n * The Work filter pill (a row of them filters a list: \"All channels\",\n * \"Slack 3\"…). An empty filter stays clickable, just quieter.\n */\nfunction FilterPill({\n on,\n onClick,\n dim,\n className,\n ...props\n}: Omit<\n React.ComponentProps<typeof TogglePrimitive.Root>,\n \"pressed\" | \"onPressedChange\" | \"onClick\"\n> & {\n on: boolean\n onClick: () => void\n /** Nothing behind it yet: still clickable, just quieter. */\n dim?: boolean\n}) {\n return (\n <Toggle\n variant=\"outline\"\n size=\"sm\"\n pressed={on}\n onPressedChange={() => onClick()}\n className={cn(dim && !on && \"opacity-55\", className)}\n {...props}\n />\n )\n}\n\nexport { Toggle, FilterPill, toggleVariants }\n"]}
|