@vllnt/ui 0.2.1-canary.06f0e84 → 0.2.1-canary.0aaaad2
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/dist/components/accordion/accordion.js +2 -2
- package/dist/components/activity-heatmap/activity-heatmap.js +15 -13
- package/dist/components/activity-log/activity-log.js +5 -5
- package/dist/components/agent-activity/agent-activity.js +8 -8
- package/dist/components/ai-artifact/ai-artifact.js +8 -8
- package/dist/components/ai-chat-input/ai-chat-input.js +2 -2
- package/dist/components/ai-message-bubble/ai-message-bubble.js +1 -1
- package/dist/components/ai-sidebar/ai-sidebar.js +4 -4
- package/dist/components/ai-source-citation/ai-source-citation.js +2 -2
- package/dist/components/ai-tool-call-display/ai-tool-call-display.js +4 -4
- package/dist/components/animated-text/animated-text.js +1 -4
- package/dist/components/auto-reload/auto-reload.js +14 -4
- package/dist/components/avatar/avatar.js +1 -1
- package/dist/components/avatar-group/avatar-group.js +4 -4
- package/dist/components/banner/banner.js +3 -3
- package/dist/components/bottom-activity-strip/bottom-activity-strip.js +1 -1
- package/dist/components/breadcrumb/breadcrumb.js +33 -26
- package/dist/components/button/button.js +1 -1
- package/dist/components/calendar/calendar.js +6 -6
- package/dist/components/callout/callout.js +1 -1
- package/dist/components/candlestick-chart/candlestick-chart.js +1 -1
- package/dist/components/canvas-shell/canvas-foundation-demo.js +4 -4
- package/dist/components/carousel/carousel.js +4 -4
- package/dist/components/chat-dock-section/chat-dock-section.js +1 -1
- package/dist/components/checkbox/checkbox.js +2 -2
- package/dist/components/checklist/checklist.js +3 -3
- package/dist/components/chronological-timeline/chronological-timeline.js +6 -5
- package/dist/components/civilization-card/civilization-card.js +1 -1
- package/dist/components/code-block/code-block.js +2 -2
- package/dist/components/code-playground/code-playground.js +8 -7
- package/dist/components/combobox/combobox.js +2 -2
- package/dist/components/command/command.js +1 -1
- package/dist/components/comment-pin/comment-pin.js +1 -1
- package/dist/components/comparison/comparison.js +9 -9
- package/dist/components/completion-dialog/completion-dialog.js +1 -1
- package/dist/components/content-intro/content-intro.js +7 -6
- package/dist/components/context-menu/context-menu.js +4 -4
- package/dist/components/conversation-thread/conversation-thread.js +8 -8
- package/dist/components/cookie-consent/cookie-consent.js +1 -1
- package/dist/components/copy-button/copy-button.js +3 -3
- package/dist/components/countdown-timer/countdown-timer.js +8 -7
- package/dist/components/credit-badge/credit-badge.js +1 -7
- package/dist/components/curriculum/curriculum.js +10 -10
- package/dist/components/data-list/data-list.js +1 -1
- package/dist/components/data-table/data-table.js +5 -4
- package/dist/components/date-picker/date-picker.js +1 -1
- package/dist/components/dialog/dialog.js +1 -1
- package/dist/components/dropdown-menu/dropdown-menu.js +3 -3
- package/dist/components/empty-state/empty-state.js +3 -3
- package/dist/components/exercise/exercise.js +4 -4
- package/dist/components/faq/faq.js +2 -2
- package/dist/components/file-upload/file-upload.js +3 -3
- package/dist/components/filter-bar/filter-bar.js +2 -1
- package/dist/components/flashcard/flashcard.js +1 -1
- package/dist/components/floating-action-button/floating-action-button.js +1 -1
- package/dist/components/floating-toolbar/floating-toolbar.js +1 -1
- package/dist/components/flow-diagram/flow-controls.js +9 -9
- package/dist/components/flow-diagram/flow-error-boundary.js +2 -2
- package/dist/components/flow-diagram/flow-fullscreen.js +2 -2
- package/dist/components/gantt-chart/gantt-chart.js +15 -13
- package/dist/components/handoff-beacon/handoff-beacon.js +1 -1
- package/dist/components/historic-timeline/historic-timeline.js +2 -2
- package/dist/components/historical-figure-card/historical-figure-card.js +4 -7
- package/dist/components/horizontal-scroll-row/horizontal-scroll-row.js +4 -4
- package/dist/components/input-otp/input-otp.js +1 -1
- package/dist/components/interactive-timeline/interactive-timeline.js +4 -4
- package/dist/components/jarvis-dock/jarvis-dock.js +2 -2
- package/dist/components/key-concept/key-concept.js +4 -4
- package/dist/components/keyboard-shortcuts-help/keyboard-shortcuts-help.js +2 -2
- package/dist/components/knowledge-check/knowledge-check.js +3 -3
- package/dist/components/learning-objectives/learning-objectives.js +12 -12
- package/dist/components/live-feed/live-feed.js +15 -13
- package/dist/components/map-2d/map-2d.js +2 -2
- package/dist/components/market-treemap/market-treemap.js +1 -1
- package/dist/components/mdx-content/mdx-content.js +2 -1
- package/dist/components/menubar/menubar.js +4 -4
- package/dist/components/metric-cluster/metric-cluster.js +1 -1
- package/dist/components/metric-gauge/metric-gauge.js +1 -1
- package/dist/components/model-comparison/model-comparison.js +2 -2
- package/dist/components/model-selector/model-selector.js +2 -2
- package/dist/components/multi-select/multi-select.js +3 -3
- package/dist/components/navbar-saas/navbar-saas.js +3 -2
- package/dist/components/navigation-menu/navigation-menu.js +2 -2
- package/dist/components/newsletter-signup/newsletter-signup.js +3 -3
- package/dist/components/number-input/number-input.js +1 -1
- package/dist/components/number-ticker/number-ticker.js +11 -4
- package/dist/components/object-inspector/object-inspector.js +1 -1
- package/dist/components/parallel-timeline/parallel-timeline.js +2 -2
- package/dist/components/password-input/password-input.js +1 -1
- package/dist/components/plan-badge/plan-badge.js +1 -7
- package/dist/components/presence-stack/presence-stack.js +2 -2
- package/dist/components/presence-sync-indicator/presence-sync-indicator.js +1 -1
- package/dist/components/pricing-table/pricing-table.js +3 -3
- package/dist/components/pro-tip/pro-tip.js +6 -6
- package/dist/components/profile-section/profile-section.js +1 -1
- package/dist/components/progress-card/progress-card.js +4 -3
- package/dist/components/progress-tracker/progress-tracker.js +7 -5
- package/dist/components/prompt-templates/prompt-templates.js +2 -2
- package/dist/components/quiz/quiz.js +5 -5
- package/dist/components/radio-group/radio-group.js +2 -2
- package/dist/components/rating/rating.js +3 -3
- package/dist/components/resizable/resizable.js +1 -1
- package/dist/components/runtime-overview-panel/runtime-overview-panel.js +1 -1
- package/dist/components/scope-selector/scope-selector.js +7 -7
- package/dist/components/search-bar/search-bar.js +24 -2
- package/dist/components/search-dialog/search-dialog.js +1 -1
- package/dist/components/select/select.js +5 -5
- package/dist/components/selection-halo/selection-halo.js +1 -1
- package/dist/components/severity-badge/severity-badge.js +2 -2
- package/dist/components/sheet/sheet.js +1 -1
- package/dist/components/sidebar/sidebar.js +1 -1
- package/dist/components/sidebar-toggle/sidebar-toggle.js +2 -2
- package/dist/components/slider/slider.js +1 -1
- package/dist/components/slideshow/slideshow.js +12 -11
- package/dist/components/social-fab/social-fab.js +2 -1
- package/dist/components/sparkline-grid/sparkline-grid.js +1 -1
- package/dist/components/spinner/spinner.js +3 -3
- package/dist/components/stat-card/stat-card.js +3 -3
- package/dist/components/state-badge-overlay/state-badge-overlay.js +1 -1
- package/dist/components/status-board/status-board.js +1 -1
- package/dist/components/status-indicator/status-indicator.js +3 -3
- package/dist/components/step-by-step/step-by-step.js +8 -7
- package/dist/components/step-navigation/step-navigation.js +2 -2
- package/dist/components/stepper/stepper.js +3 -3
- package/dist/components/sticky-metric/sticky-metric.js +1 -1
- package/dist/components/subscription-card/subscription-card.js +1 -1
- package/dist/components/switch/switch.js +1 -1
- package/dist/components/table-of-contents-panel/table-of-contents-panel.js +5 -5
- package/dist/components/tags-input/tags-input.js +1 -1
- package/dist/components/terminal/terminal.js +48 -34
- package/dist/components/thinking-block/thinking-block.js +1 -1
- package/dist/components/ticker-tape/ticker-tape.js +3 -3
- package/dist/components/timeline/timeline.js +2 -2
- package/dist/components/tldr-section/tldr-section.js +2 -2
- package/dist/components/tour/tour.js +1 -1
- package/dist/components/transaction-list/transaction-list.js +30 -9
- package/dist/components/tree-view/tree-view.js +2 -2
- package/dist/components/tutorial-complete/tutorial-complete.js +8 -8
- package/dist/components/usage-breakdown/usage-breakdown.js +9 -5
- package/dist/components/video-embed/video-embed.js +2 -2
- package/dist/components/viewport-bookmarks/viewport-bookmarks.js +1 -1
- package/dist/components/wallet-card/wallet-card.js +1 -1
- package/dist/components/watchlist/watchlist.js +5 -5
- package/dist/components/world-clock-bar/world-clock-bar.js +32 -12
- package/dist/index.d.ts +1 -1
- package/package.json +1 -1
|
@@ -45,7 +45,7 @@ const ChatDockSection = forwardRef(
|
|
|
45
45
|
},
|
|
46
46
|
message.id
|
|
47
47
|
)) }),
|
|
48
|
-
/* @__PURE__ */ jsx("div", { className: "rounded-xl border border-dashed border-border/80 bg-background/70
|
|
48
|
+
/* @__PURE__ */ jsx("div", { className: "rounded-xl border border-dashed border-border/80 bg-background/70 p-3 text-sm text-muted-foreground", children: composerPlaceholder })
|
|
49
49
|
]
|
|
50
50
|
}
|
|
51
51
|
)
|
|
@@ -8,7 +8,7 @@ const Checkbox = React.forwardRef(({ className, ...props }, reference) => /* @__
|
|
|
8
8
|
CheckboxPrimitive.Root,
|
|
9
9
|
{
|
|
10
10
|
className: cn(
|
|
11
|
-
"peer
|
|
11
|
+
"peer size-4 shrink-0 rounded border border-input bg-background ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary",
|
|
12
12
|
className
|
|
13
13
|
),
|
|
14
14
|
ref: reference,
|
|
@@ -17,7 +17,7 @@ const Checkbox = React.forwardRef(({ className, ...props }, reference) => /* @__
|
|
|
17
17
|
CheckboxPrimitive.Indicator,
|
|
18
18
|
{
|
|
19
19
|
className: cn("flex items-center justify-center text-current"),
|
|
20
|
-
children: /* @__PURE__ */ jsx(Check, { className: "
|
|
20
|
+
children: /* @__PURE__ */ jsx(Check, { className: "size-4" })
|
|
21
21
|
}
|
|
22
22
|
)
|
|
23
23
|
}
|
|
@@ -21,7 +21,7 @@ function ChecklistItemRow({
|
|
|
21
21
|
isChecked ? /* @__PURE__ */ jsx(
|
|
22
22
|
"svg",
|
|
23
23
|
{
|
|
24
|
-
className: "
|
|
24
|
+
className: "size-5 text-green-500 flex-shrink-0 mt-0.5",
|
|
25
25
|
fill: "none",
|
|
26
26
|
stroke: "currentColor",
|
|
27
27
|
viewBox: "0 0 24 24",
|
|
@@ -38,7 +38,7 @@ function ChecklistItemRow({
|
|
|
38
38
|
) : /* @__PURE__ */ jsx(
|
|
39
39
|
"svg",
|
|
40
40
|
{
|
|
41
|
-
className: "
|
|
41
|
+
className: "size-5 text-muted-foreground flex-shrink-0 mt-0.5",
|
|
42
42
|
fill: "none",
|
|
43
43
|
stroke: "currentColor",
|
|
44
44
|
viewBox: "0 0 24 24",
|
|
@@ -77,7 +77,7 @@ function ChecklistHeader({
|
|
|
77
77
|
/* @__PURE__ */ jsx(
|
|
78
78
|
"svg",
|
|
79
79
|
{
|
|
80
|
-
className: "
|
|
80
|
+
className: "size-5 text-primary",
|
|
81
81
|
fill: "none",
|
|
82
82
|
stroke: "currentColor",
|
|
83
83
|
viewBox: "0 0 24 24",
|
|
@@ -38,6 +38,7 @@ function ImageMedia({ media }) {
|
|
|
38
38
|
] });
|
|
39
39
|
}
|
|
40
40
|
function VideoMedia({ media }) {
|
|
41
|
+
const iframeTitle = media.title || "Embedded timeline video";
|
|
41
42
|
return /* @__PURE__ */ jsxs("figure", { className: "overflow-hidden rounded-xl border bg-muted", children: [
|
|
42
43
|
/* @__PURE__ */ jsx("div", { className: "aspect-video w-full", children: /* @__PURE__ */ jsx(
|
|
43
44
|
"iframe",
|
|
@@ -46,7 +47,7 @@ function VideoMedia({ media }) {
|
|
|
46
47
|
allowFullScreen: true,
|
|
47
48
|
className: "h-full w-full",
|
|
48
49
|
src: media.src,
|
|
49
|
-
title:
|
|
50
|
+
title: iframeTitle
|
|
50
51
|
}
|
|
51
52
|
) }),
|
|
52
53
|
media.caption || media.credit ? /* @__PURE__ */ jsxs("figcaption", { className: "border-t bg-background px-3 py-2 text-xs text-muted-foreground", children: [
|
|
@@ -56,7 +57,7 @@ function VideoMedia({ media }) {
|
|
|
56
57
|
] });
|
|
57
58
|
}
|
|
58
59
|
function AudioMedia({ media }) {
|
|
59
|
-
return /* @__PURE__ */ jsxs("figure", { className: "overflow-hidden rounded-xl border bg-muted
|
|
60
|
+
return /* @__PURE__ */ jsxs("figure", { className: "overflow-hidden rounded-xl border bg-muted p-3", children: [
|
|
60
61
|
/* @__PURE__ */ jsx(
|
|
61
62
|
"audio",
|
|
62
63
|
{
|
|
@@ -94,8 +95,8 @@ function RailColumn({ featured }) {
|
|
|
94
95
|
"span",
|
|
95
96
|
{
|
|
96
97
|
className: cn(
|
|
97
|
-
"relative z-10 mt-3 block
|
|
98
|
-
featured ? "
|
|
98
|
+
"relative z-10 mt-3 block size-3 rounded-full border-2 border-background bg-primary",
|
|
99
|
+
featured ? "size-4" : ""
|
|
99
100
|
)
|
|
100
101
|
}
|
|
101
102
|
)
|
|
@@ -308,7 +309,7 @@ const ChronologicalTimeline = forwardRef((props, ref) => {
|
|
|
308
309
|
...rest,
|
|
309
310
|
children: [
|
|
310
311
|
/* @__PURE__ */ jsx(ProgressStrip, { activeId, ids, label: progressLabel }),
|
|
311
|
-
title ? /* @__PURE__ */ jsx("header", { className: "
|
|
312
|
+
title ? /* @__PURE__ */ jsx("header", { className: "p-6", children: /* @__PURE__ */ jsx("h2", { className: "text-2xl font-semibold tracking-tight", id: titleId, children: title }) }) : null,
|
|
312
313
|
/* @__PURE__ */ jsx(EventList, { activeId, children })
|
|
313
314
|
]
|
|
314
315
|
}
|
|
@@ -71,7 +71,7 @@ function CivilizationHero({ color, image, imageAlt }) {
|
|
|
71
71
|
className: "h-full w-full object-cover mix-blend-multiply",
|
|
72
72
|
src: image
|
|
73
73
|
}
|
|
74
|
-
) : /* @__PURE__ */ jsx("div", { className: "flex h-full w-full items-center justify-center text-muted-foreground/50", children: /* @__PURE__ */ jsx(Globe, { "aria-hidden": "true", className: "
|
|
74
|
+
) : /* @__PURE__ */ jsx("div", { className: "flex h-full w-full items-center justify-center text-muted-foreground/50", children: /* @__PURE__ */ jsx(Globe, { "aria-hidden": "true", className: "size-12" }) })
|
|
75
75
|
}
|
|
76
76
|
);
|
|
77
77
|
}
|
|
@@ -107,11 +107,11 @@ function CodeBlock({
|
|
|
107
107
|
/* @__PURE__ */ jsx(
|
|
108
108
|
Button,
|
|
109
109
|
{
|
|
110
|
-
className: "
|
|
110
|
+
className: "size-8",
|
|
111
111
|
onClick: handleCopy,
|
|
112
112
|
size: "icon",
|
|
113
113
|
variant: "ghost",
|
|
114
|
-
children: copied ? /* @__PURE__ */ jsx(Check, { className: "
|
|
114
|
+
children: copied ? /* @__PURE__ */ jsx(Check, { className: "size-3" }) : /* @__PURE__ */ jsx(Copy, { className: "size-3" })
|
|
115
115
|
}
|
|
116
116
|
)
|
|
117
117
|
] })
|
|
@@ -11,11 +11,12 @@ function CodeLine({ highlightLines, line, lineNumber }) {
|
|
|
11
11
|
/* @__PURE__ */ jsx("span", { children: line })
|
|
12
12
|
] });
|
|
13
13
|
}
|
|
14
|
+
const EMPTY_HIGHLIGHT_LINES = [];
|
|
14
15
|
function CodePlayground({
|
|
15
16
|
children,
|
|
16
17
|
description,
|
|
17
18
|
filename,
|
|
18
|
-
highlightLines =
|
|
19
|
+
highlightLines = EMPTY_HIGHLIGHT_LINES,
|
|
19
20
|
language = "typescript",
|
|
20
21
|
showLineNumbers = false,
|
|
21
22
|
title
|
|
@@ -33,7 +34,7 @@ function CodePlayground({
|
|
|
33
34
|
return /* @__PURE__ */ jsxs("div", { className: "my-6 rounded-lg border bg-card overflow-hidden", children: [
|
|
34
35
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-4 py-3 border-b bg-muted/30", children: [
|
|
35
36
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
|
|
36
|
-
/* @__PURE__ */ jsx("div", { className: "flex
|
|
37
|
+
/* @__PURE__ */ jsx("div", { className: "flex size-8 items-center justify-center rounded bg-primary/10", children: /* @__PURE__ */ jsx(Code, { className: "size-4 text-primary" }) }),
|
|
37
38
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
38
39
|
/* @__PURE__ */ jsx("h4", { className: "font-semibold text-sm", children: title }),
|
|
39
40
|
description ? /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: description }) : null
|
|
@@ -41,17 +42,17 @@ function CodePlayground({
|
|
|
41
42
|
] }),
|
|
42
43
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
43
44
|
filename ? /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [
|
|
44
|
-
/* @__PURE__ */ jsx(FileCode, { className: "
|
|
45
|
+
/* @__PURE__ */ jsx(FileCode, { className: "size-3" }),
|
|
45
46
|
/* @__PURE__ */ jsx("span", { className: "font-mono", children: filename })
|
|
46
47
|
] }) : null,
|
|
47
48
|
/* @__PURE__ */ jsx(
|
|
48
49
|
Button,
|
|
49
50
|
{
|
|
50
|
-
className: "
|
|
51
|
+
className: "size-8",
|
|
51
52
|
onClick: handleCopy,
|
|
52
53
|
size: "icon",
|
|
53
54
|
variant: "ghost",
|
|
54
|
-
children: copied ? /* @__PURE__ */ jsx(Check, { className: "
|
|
55
|
+
children: copied ? /* @__PURE__ */ jsx(Check, { className: "size-3" }) : /* @__PURE__ */ jsx(Copy, { className: "size-3" })
|
|
55
56
|
}
|
|
56
57
|
)
|
|
57
58
|
] })
|
|
@@ -63,7 +64,7 @@ function CodePlayground({
|
|
|
63
64
|
line,
|
|
64
65
|
lineNumber: index + 1
|
|
65
66
|
},
|
|
66
|
-
index
|
|
67
|
+
`${line}-${index + 1}`
|
|
67
68
|
)) }) : /* @__PURE__ */ jsx("code", { children: code }) }) }),
|
|
68
69
|
/* @__PURE__ */ jsx("div", { className: "px-4 py-2 border-t bg-muted/30", children: /* @__PURE__ */ jsx("span", { className: "text-xs font-mono text-muted-foreground uppercase tracking-wider", children: language }) })
|
|
69
70
|
] });
|
|
@@ -74,7 +75,7 @@ function FileTree({
|
|
|
74
75
|
}) {
|
|
75
76
|
return /* @__PURE__ */ jsxs("div", { className: "my-6 rounded-lg border bg-card overflow-hidden", children: [
|
|
76
77
|
/* @__PURE__ */ jsx("div", { className: "px-4 py-2 border-b bg-muted/30", children: /* @__PURE__ */ jsxs("h4", { className: "font-semibold text-sm flex items-center gap-2", children: [
|
|
77
|
-
/* @__PURE__ */ jsx(FileCode, { className: "
|
|
78
|
+
/* @__PURE__ */ jsx(FileCode, { className: "size-4" }),
|
|
78
79
|
title
|
|
79
80
|
] }) }),
|
|
80
81
|
/* @__PURE__ */ jsx("div", { className: "p-4 font-mono text-sm [&>ul]:m-0 [&>ul]:list-none [&_ul]:ml-4 [&_ul]:list-none [&_li]:text-muted-foreground", children })
|
|
@@ -48,7 +48,7 @@ function ComboboxOptionItem({
|
|
|
48
48
|
Check,
|
|
49
49
|
{
|
|
50
50
|
className: cn(
|
|
51
|
-
"mr-2
|
|
51
|
+
"mr-2 size-4",
|
|
52
52
|
selectedValue === option.value ? "opacity-100" : "opacity-0"
|
|
53
53
|
)
|
|
54
54
|
}
|
|
@@ -128,7 +128,7 @@ const Combobox = React.forwardRef(
|
|
|
128
128
|
variant: "outline",
|
|
129
129
|
children: [
|
|
130
130
|
/* @__PURE__ */ jsx("span", { className: "truncate", children: selectedOption ? selectedOption.label : placeholder }),
|
|
131
|
-
/* @__PURE__ */ jsx(ChevronsUpDown, { className: "ml-2
|
|
131
|
+
/* @__PURE__ */ jsx(ChevronsUpDown, { className: "ml-2 size-4 shrink-0 opacity-50" })
|
|
132
132
|
]
|
|
133
133
|
}
|
|
134
134
|
) }),
|
|
@@ -26,7 +26,7 @@ const CommandDialog = ({ children, ...props }) => {
|
|
|
26
26
|
const CommandInput = React.forwardRef(({ className, ...props }, reference) => (
|
|
27
27
|
// eslint-disable-next-line react/no-unknown-property
|
|
28
28
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center border-b px-3", "cmdk-input-wrapper": "", children: [
|
|
29
|
-
/* @__PURE__ */ jsx(Search, { className: "mr-2
|
|
29
|
+
/* @__PURE__ */ jsx(Search, { className: "mr-2 size-4 shrink-0 opacity-50" }),
|
|
30
30
|
/* @__PURE__ */ jsx(
|
|
31
31
|
CommandPrimitive.Input,
|
|
32
32
|
{
|
|
@@ -21,7 +21,7 @@ const PinBody = (props) => {
|
|
|
21
21
|
{
|
|
22
22
|
"aria-hidden": "true",
|
|
23
23
|
className: cn(
|
|
24
|
-
"flex
|
|
24
|
+
"flex size-7 items-center justify-center rounded-full border border-background text-[11px] font-semibold shadow-sm",
|
|
25
25
|
STATE_FILL[props.state]
|
|
26
26
|
),
|
|
27
27
|
"data-comment-pin-body": true,
|
|
@@ -53,18 +53,18 @@ function Comparison({
|
|
|
53
53
|
children: before.title
|
|
54
54
|
}
|
|
55
55
|
),
|
|
56
|
-
/* @__PURE__ */ jsx("ul", { className: "p-4 space-y-2", children: before.items.map((item
|
|
56
|
+
/* @__PURE__ */ jsx("ul", { className: "p-4 space-y-2", children: before.items.map((item) => /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-2 text-sm", children: [
|
|
57
57
|
/* @__PURE__ */ jsx(
|
|
58
58
|
BeforeIcon,
|
|
59
59
|
{
|
|
60
60
|
className: cn(
|
|
61
|
-
"
|
|
61
|
+
"size-4 mt-0.5 flex-shrink-0",
|
|
62
62
|
beforeConfig.iconClass
|
|
63
63
|
)
|
|
64
64
|
}
|
|
65
65
|
),
|
|
66
66
|
/* @__PURE__ */ jsx("span", { children: item })
|
|
67
|
-
] },
|
|
67
|
+
] }, item)) })
|
|
68
68
|
] }),
|
|
69
69
|
/* @__PURE__ */ jsxs("div", { className: cn("rounded-lg border", afterConfig.className), children: [
|
|
70
70
|
/* @__PURE__ */ jsx(
|
|
@@ -77,18 +77,18 @@ function Comparison({
|
|
|
77
77
|
children: after.title
|
|
78
78
|
}
|
|
79
79
|
),
|
|
80
|
-
/* @__PURE__ */ jsx("ul", { className: "p-4 space-y-2", children: after.items.map((item
|
|
80
|
+
/* @__PURE__ */ jsx("ul", { className: "p-4 space-y-2", children: after.items.map((item) => /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-2 text-sm", children: [
|
|
81
81
|
/* @__PURE__ */ jsx(
|
|
82
82
|
AfterIcon,
|
|
83
83
|
{
|
|
84
84
|
className: cn(
|
|
85
|
-
"
|
|
85
|
+
"size-4 mt-0.5 flex-shrink-0",
|
|
86
86
|
afterConfig.iconClass
|
|
87
87
|
)
|
|
88
88
|
}
|
|
89
89
|
),
|
|
90
90
|
/* @__PURE__ */ jsx("span", { children: item })
|
|
91
|
-
] },
|
|
91
|
+
] }, item)) })
|
|
92
92
|
] })
|
|
93
93
|
] })
|
|
94
94
|
] });
|
|
@@ -99,15 +99,15 @@ function BeforeAfter({ after, before, title }) {
|
|
|
99
99
|
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 md:grid-cols-[1fr_auto_1fr] gap-4 items-start", children: [
|
|
100
100
|
/* @__PURE__ */ jsxs("div", { className: "rounded-lg border border-red-500/30 bg-red-500/5 overflow-hidden", children: [
|
|
101
101
|
/* @__PURE__ */ jsxs("div", { className: "px-4 py-2 bg-red-500/10 text-red-700 dark:text-red-300 font-medium text-sm flex items-center gap-2", children: [
|
|
102
|
-
/* @__PURE__ */ jsx(X, { className: "
|
|
102
|
+
/* @__PURE__ */ jsx(X, { className: "size-4" }),
|
|
103
103
|
"Before"
|
|
104
104
|
] }),
|
|
105
105
|
/* @__PURE__ */ jsx("div", { className: "p-4 text-sm [&>pre]:my-0", children: before })
|
|
106
106
|
] }),
|
|
107
|
-
/* @__PURE__ */ jsx("div", { className: "hidden md:flex items-center justify-center h-full", children: /* @__PURE__ */ jsx(ArrowRight, { className: "
|
|
107
|
+
/* @__PURE__ */ jsx("div", { className: "hidden md:flex items-center justify-center h-full", children: /* @__PURE__ */ jsx(ArrowRight, { className: "size-6 text-muted-foreground" }) }),
|
|
108
108
|
/* @__PURE__ */ jsxs("div", { className: "rounded-lg border border-green-500/30 bg-green-500/5 overflow-hidden", children: [
|
|
109
109
|
/* @__PURE__ */ jsxs("div", { className: "px-4 py-2 bg-green-500/10 text-green-700 dark:text-green-300 font-medium text-sm flex items-center gap-2", children: [
|
|
110
|
-
/* @__PURE__ */ jsx(Check, { className: "
|
|
110
|
+
/* @__PURE__ */ jsx(Check, { className: "size-4" }),
|
|
111
111
|
"After"
|
|
112
112
|
] }),
|
|
113
113
|
/* @__PURE__ */ jsx("div", { className: "p-4 text-sm [&>pre]:my-0", children: after })
|
|
@@ -8,12 +8,13 @@ const DEFAULT_LABELS = {
|
|
|
8
8
|
startLabel: "Start Tutorial",
|
|
9
9
|
tableOfContentsLabel: "Table of Contents"
|
|
10
10
|
};
|
|
11
|
+
const EMPTY_CONTENT_INTRO_LABELS = {};
|
|
11
12
|
function ContentIntroImpl({
|
|
12
13
|
additionalContent,
|
|
13
14
|
completedSections,
|
|
14
15
|
estimatedTime,
|
|
15
16
|
isLoading = false,
|
|
16
|
-
labels =
|
|
17
|
+
labels = EMPTY_CONTENT_INTRO_LABELS,
|
|
17
18
|
onGoToSection,
|
|
18
19
|
onStart,
|
|
19
20
|
renderIntroContent,
|
|
@@ -60,7 +61,7 @@ function ContentIntroImpl({
|
|
|
60
61
|
"span",
|
|
61
62
|
{
|
|
62
63
|
className: cn(
|
|
63
|
-
"flex-shrink-0
|
|
64
|
+
"flex-shrink-0 size-6 rounded-full flex items-center justify-center text-xs font-medium tabular-nums transition-colors",
|
|
64
65
|
isLoading && "animate-pulse bg-muted",
|
|
65
66
|
!isLoading && isCompleted && "bg-foreground text-background",
|
|
66
67
|
!isLoading && !isCompleted && "bg-muted"
|
|
@@ -68,7 +69,7 @@ function ContentIntroImpl({
|
|
|
68
69
|
children: isCompleted ? /* @__PURE__ */ jsx(
|
|
69
70
|
"svg",
|
|
70
71
|
{
|
|
71
|
-
className: "
|
|
72
|
+
className: "size-3",
|
|
72
73
|
fill: "none",
|
|
73
74
|
stroke: "currentColor",
|
|
74
75
|
viewBox: "0 0 24 24",
|
|
@@ -97,12 +98,12 @@ function ContentIntroImpl({
|
|
|
97
98
|
)
|
|
98
99
|
]
|
|
99
100
|
}
|
|
100
|
-
) },
|
|
101
|
+
) }, section.id);
|
|
101
102
|
}) })
|
|
102
103
|
] }),
|
|
103
104
|
additionalContent
|
|
104
105
|
] }),
|
|
105
|
-
/* @__PURE__ */ jsx("div", { className: "fixed bottom-0 left-0 right-0 z-50 border-t border-border bg-background/80 backdrop-blur-sm safe-bottom", children: /* @__PURE__ */ jsx("div", { className: "mx-auto max-w-3xl
|
|
106
|
+
/* @__PURE__ */ jsx("div", { className: "fixed bottom-0 left-0 right-0 z-50 border-t border-border bg-background/80 backdrop-blur-sm safe-bottom", children: /* @__PURE__ */ jsx("div", { className: "mx-auto max-w-3xl p-4", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-4", children: [
|
|
106
107
|
/* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground hidden sm:block", children: hasProgress ? `${completedSections.size}/${sections.length} completed` : `${sections.length} sections \xB7 ${estimatedTime}` }),
|
|
107
108
|
/* @__PURE__ */ jsxs(
|
|
108
109
|
Button,
|
|
@@ -114,7 +115,7 @@ function ContentIntroImpl({
|
|
|
114
115
|
/* @__PURE__ */ jsx(
|
|
115
116
|
"svg",
|
|
116
117
|
{
|
|
117
|
-
className: "
|
|
118
|
+
className: "size-5",
|
|
118
119
|
fill: "none",
|
|
119
120
|
stroke: "currentColor",
|
|
120
121
|
viewBox: "0 0 24 24",
|
|
@@ -22,7 +22,7 @@ const ContextMenuSubTrigger = forwardRef(({ children, className, inset, ...props
|
|
|
22
22
|
...props,
|
|
23
23
|
children: [
|
|
24
24
|
children,
|
|
25
|
-
/* @__PURE__ */ jsx(ChevronRight, { className: "ml-auto
|
|
25
|
+
/* @__PURE__ */ jsx(ChevronRight, { className: "ml-auto size-4" })
|
|
26
26
|
]
|
|
27
27
|
}
|
|
28
28
|
));
|
|
@@ -75,7 +75,7 @@ const ContextMenuCheckboxItem = forwardRef(({ checked, children, className, ...p
|
|
|
75
75
|
ref,
|
|
76
76
|
...props,
|
|
77
77
|
children: [
|
|
78
|
-
/* @__PURE__ */ jsx("span", { className: "absolute left-2 flex
|
|
78
|
+
/* @__PURE__ */ jsx("span", { className: "absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(ContextMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(Check, { className: "size-4" }) }) }),
|
|
79
79
|
children
|
|
80
80
|
]
|
|
81
81
|
}
|
|
@@ -91,7 +91,7 @@ const ContextMenuRadioItem = forwardRef(({ children, className, ...props }, ref)
|
|
|
91
91
|
ref,
|
|
92
92
|
...props,
|
|
93
93
|
children: [
|
|
94
|
-
/* @__PURE__ */ jsx("span", { className: "absolute left-2 flex
|
|
94
|
+
/* @__PURE__ */ jsx("span", { className: "absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(ContextMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(Circle, { className: "size-2 fill-current" }) }) }),
|
|
95
95
|
children
|
|
96
96
|
]
|
|
97
97
|
}
|
|
@@ -113,7 +113,7 @@ ContextMenuLabel.displayName = ContextMenuPrimitive.Label.displayName;
|
|
|
113
113
|
const ContextMenuSeparator = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
114
114
|
ContextMenuPrimitive.Separator,
|
|
115
115
|
{
|
|
116
|
-
className: cn("-
|
|
116
|
+
className: cn("-m-1 h-px bg-border", className),
|
|
117
117
|
ref,
|
|
118
118
|
...props
|
|
119
119
|
}
|
|
@@ -35,7 +35,7 @@ function MessageActions({ messageId }) {
|
|
|
35
35
|
onRetry(messageId);
|
|
36
36
|
},
|
|
37
37
|
type: "button",
|
|
38
|
-
children: /* @__PURE__ */ jsx(RefreshCw, { className: "
|
|
38
|
+
children: /* @__PURE__ */ jsx(RefreshCw, { className: "size-3" })
|
|
39
39
|
}
|
|
40
40
|
) : null,
|
|
41
41
|
onFeedback ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
@@ -48,7 +48,7 @@ function MessageActions({ messageId }) {
|
|
|
48
48
|
onFeedback(messageId, "positive");
|
|
49
49
|
},
|
|
50
50
|
type: "button",
|
|
51
|
-
children: /* @__PURE__ */ jsx(ThumbsUp, { className: "
|
|
51
|
+
children: /* @__PURE__ */ jsx(ThumbsUp, { className: "size-3" })
|
|
52
52
|
}
|
|
53
53
|
),
|
|
54
54
|
/* @__PURE__ */ jsx(
|
|
@@ -60,7 +60,7 @@ function MessageActions({ messageId }) {
|
|
|
60
60
|
onFeedback(messageId, "negative");
|
|
61
61
|
},
|
|
62
62
|
type: "button",
|
|
63
|
-
children: /* @__PURE__ */ jsx(ThumbsDown, { className: "
|
|
63
|
+
children: /* @__PURE__ */ jsx(ThumbsDown, { className: "size-3" })
|
|
64
64
|
}
|
|
65
65
|
)
|
|
66
66
|
] }) : null
|
|
@@ -290,13 +290,13 @@ const ConversationScrollButton = forwardRef(({ className }, reference) => {
|
|
|
290
290
|
{
|
|
291
291
|
"aria-label": "Scroll to bottom",
|
|
292
292
|
className: cn(
|
|
293
|
-
"absolute bottom-4 right-4 flex
|
|
293
|
+
"absolute bottom-4 right-4 flex size-8 items-center justify-center rounded-full border bg-background shadow-md transition-colors hover:bg-muted",
|
|
294
294
|
className
|
|
295
295
|
),
|
|
296
296
|
onClick: scrollToBottom,
|
|
297
297
|
ref: reference,
|
|
298
298
|
type: "button",
|
|
299
|
-
children: /* @__PURE__ */ jsx(ArrowDown, { className: "
|
|
299
|
+
children: /* @__PURE__ */ jsx(ArrowDown, { className: "size-4" })
|
|
300
300
|
}
|
|
301
301
|
);
|
|
302
302
|
});
|
|
@@ -319,18 +319,18 @@ const ConversationLoading = forwardRef(({ className }, reference) => {
|
|
|
319
319
|
/* @__PURE__ */ jsx(
|
|
320
320
|
"span",
|
|
321
321
|
{
|
|
322
|
-
className: "
|
|
322
|
+
className: "size-2 animate-bounce rounded-full bg-muted-foreground",
|
|
323
323
|
style: { animationDelay: "-0.3s" }
|
|
324
324
|
}
|
|
325
325
|
),
|
|
326
326
|
/* @__PURE__ */ jsx(
|
|
327
327
|
"span",
|
|
328
328
|
{
|
|
329
|
-
className: "
|
|
329
|
+
className: "size-2 animate-bounce rounded-full bg-muted-foreground",
|
|
330
330
|
style: { animationDelay: "-0.15s" }
|
|
331
331
|
}
|
|
332
332
|
),
|
|
333
|
-
/* @__PURE__ */ jsx("span", { className: "
|
|
333
|
+
/* @__PURE__ */ jsx("span", { className: "size-2 animate-bounce rounded-full bg-muted-foreground" })
|
|
334
334
|
]
|
|
335
335
|
}
|
|
336
336
|
);
|
|
@@ -160,7 +160,7 @@ const CookieConsent = forwardRef(
|
|
|
160
160
|
className: "absolute -right-2 -top-2 rounded-full border bg-background p-1 text-muted-foreground hover:text-foreground",
|
|
161
161
|
onClick: handleClose,
|
|
162
162
|
type: "button",
|
|
163
|
-
children: /* @__PURE__ */ jsx(X, { className: "
|
|
163
|
+
children: /* @__PURE__ */ jsx(X, { className: "size-3" })
|
|
164
164
|
}
|
|
165
165
|
) : null
|
|
166
166
|
]
|
|
@@ -59,7 +59,7 @@ function CopyIcon({
|
|
|
59
59
|
size
|
|
60
60
|
}) {
|
|
61
61
|
const Icon = copied ? Check : Copy;
|
|
62
|
-
const sizeClass = size === "xs" ? "
|
|
62
|
+
const sizeClass = size === "xs" ? "size-3" : "size-4";
|
|
63
63
|
return /* @__PURE__ */ jsx(Icon, { "aria-hidden": "true", className: cn(sizeClass, className) });
|
|
64
64
|
}
|
|
65
65
|
const ButtonTrigger = forwardRef(
|
|
@@ -101,7 +101,7 @@ const ButtonTrigger = forwardRef(
|
|
|
101
101
|
{
|
|
102
102
|
"aria-label": accessibleLabel,
|
|
103
103
|
className: cn(
|
|
104
|
-
"
|
|
104
|
+
"size-6 align-middle text-muted-foreground hover:text-foreground",
|
|
105
105
|
className
|
|
106
106
|
),
|
|
107
107
|
onClick: onClickHandler,
|
|
@@ -118,7 +118,7 @@ const ButtonTrigger = forwardRef(
|
|
|
118
118
|
Button,
|
|
119
119
|
{
|
|
120
120
|
"aria-label": accessibleLabel,
|
|
121
|
-
className: cn("
|
|
121
|
+
className: cn("size-8", className),
|
|
122
122
|
onClick: onClickHandler,
|
|
123
123
|
ref,
|
|
124
124
|
size: "icon",
|
|
@@ -73,14 +73,15 @@ function formatSegments(milliseconds) {
|
|
|
73
73
|
{ label: "Seconds", value: String(seconds).padStart(2, "0") }
|
|
74
74
|
];
|
|
75
75
|
}
|
|
76
|
+
const DEADLINE_FORMATTER = new Intl.DateTimeFormat("en-US", {
|
|
77
|
+
day: "numeric",
|
|
78
|
+
hour: "numeric",
|
|
79
|
+
minute: "2-digit",
|
|
80
|
+
month: "short",
|
|
81
|
+
timeZoneName: "short"
|
|
82
|
+
});
|
|
76
83
|
function formatDeadline(date) {
|
|
77
|
-
return
|
|
78
|
-
day: "numeric",
|
|
79
|
-
hour: "numeric",
|
|
80
|
-
minute: "2-digit",
|
|
81
|
-
month: "short",
|
|
82
|
-
timeZoneName: "short"
|
|
83
|
-
}).format(date);
|
|
84
|
+
return DEADLINE_FORMATTER.format(date);
|
|
84
85
|
}
|
|
85
86
|
function getProgress(deadline, now, startedAt) {
|
|
86
87
|
if (!startedAt) {
|
|
@@ -40,13 +40,7 @@ const CreditBadge = React.forwardRef(
|
|
|
40
40
|
ref: reference,
|
|
41
41
|
...props,
|
|
42
42
|
children: [
|
|
43
|
-
/* @__PURE__ */ jsx(
|
|
44
|
-
"span",
|
|
45
|
-
{
|
|
46
|
-
"aria-hidden": "true",
|
|
47
|
-
className: "h-1.5 w-1.5 rounded-full bg-current"
|
|
48
|
-
}
|
|
49
|
-
),
|
|
43
|
+
/* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "size-1.5 rounded-full bg-current" }),
|
|
50
44
|
/* @__PURE__ */ jsx("span", { children: amount ? `${amount} \u2022 ${label ?? getStatusLabel(status)}` : label ?? getStatusLabel(status) })
|
|
51
45
|
]
|
|
52
46
|
}
|
|
@@ -56,15 +56,15 @@ function statusLabel(status) {
|
|
|
56
56
|
}
|
|
57
57
|
function statusIcon(status) {
|
|
58
58
|
if (status === "completed") {
|
|
59
|
-
return /* @__PURE__ */ jsx(CheckCircle2, { className: "
|
|
59
|
+
return /* @__PURE__ */ jsx(CheckCircle2, { className: "size-4 flex-shrink-0 text-green-500" });
|
|
60
60
|
}
|
|
61
61
|
if (status === "in-progress") {
|
|
62
|
-
return /* @__PURE__ */ jsx(PlayCircle, { className: "
|
|
62
|
+
return /* @__PURE__ */ jsx(PlayCircle, { className: "size-4 flex-shrink-0 text-primary" });
|
|
63
63
|
}
|
|
64
64
|
if (status === "locked") {
|
|
65
|
-
return /* @__PURE__ */ jsx(Lock, { className: "
|
|
65
|
+
return /* @__PURE__ */ jsx(Lock, { className: "size-4 flex-shrink-0 text-muted-foreground" });
|
|
66
66
|
}
|
|
67
|
-
return /* @__PURE__ */ jsx(BookOpen, { className: "
|
|
67
|
+
return /* @__PURE__ */ jsx(BookOpen, { className: "size-4 flex-shrink-0 text-muted-foreground" });
|
|
68
68
|
}
|
|
69
69
|
const difficultyStyles = {
|
|
70
70
|
advanced: "bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400",
|
|
@@ -105,7 +105,7 @@ function LessonMeta({
|
|
|
105
105
|
"aria-label": prerequisitesLabel,
|
|
106
106
|
className: "flex items-center gap-1 text-xs text-muted-foreground",
|
|
107
107
|
title: prerequisitesLabel,
|
|
108
|
-
children: /* @__PURE__ */ jsx(Link2, { "aria-hidden": "true", className: "
|
|
108
|
+
children: /* @__PURE__ */ jsx(Link2, { "aria-hidden": "true", className: "size-3" })
|
|
109
109
|
}
|
|
110
110
|
) : null,
|
|
111
111
|
difficulty ? /* @__PURE__ */ jsx(
|
|
@@ -119,7 +119,7 @@ function LessonMeta({
|
|
|
119
119
|
}
|
|
120
120
|
) : null,
|
|
121
121
|
duration ? /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [
|
|
122
|
-
/* @__PURE__ */ jsx(Clock, { className: "
|
|
122
|
+
/* @__PURE__ */ jsx(Clock, { className: "size-3" }),
|
|
123
123
|
duration
|
|
124
124
|
] }) : null
|
|
125
125
|
] });
|
|
@@ -162,7 +162,7 @@ function ModuleTrigger({
|
|
|
162
162
|
] }),
|
|
163
163
|
/* @__PURE__ */ jsxs("div", { className: "mt-0.5 flex flex-shrink-0 items-center gap-3", children: [
|
|
164
164
|
estimatedHours === void 0 ? null : /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [
|
|
165
|
-
/* @__PURE__ */ jsx(Clock, { className: "
|
|
165
|
+
/* @__PURE__ */ jsx(Clock, { className: "size-3.5" }),
|
|
166
166
|
estimatedHours,
|
|
167
167
|
"h"
|
|
168
168
|
] }),
|
|
@@ -170,7 +170,7 @@ function ModuleTrigger({
|
|
|
170
170
|
ChevronDown,
|
|
171
171
|
{
|
|
172
172
|
className: cn(
|
|
173
|
-
"
|
|
173
|
+
"size-4 text-muted-foreground transition-transform duration-200",
|
|
174
174
|
isExpanded && "rotate-180"
|
|
175
175
|
)
|
|
176
176
|
}
|
|
@@ -215,11 +215,11 @@ function CurriculumRoot({
|
|
|
215
215
|
children: [
|
|
216
216
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between border-b px-6 py-4", children: [
|
|
217
217
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
218
|
-
/* @__PURE__ */ jsx(GraduationCap, { className: "
|
|
218
|
+
/* @__PURE__ */ jsx(GraduationCap, { className: "size-5 text-primary" }),
|
|
219
219
|
/* @__PURE__ */ jsx("h2", { className: "text-lg font-semibold", children: title })
|
|
220
220
|
] }),
|
|
221
221
|
totalHours === void 0 ? null : /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 text-sm text-muted-foreground", children: [
|
|
222
|
-
/* @__PURE__ */ jsx(Clock, { className: "
|
|
222
|
+
/* @__PURE__ */ jsx(Clock, { className: "size-4" }),
|
|
223
223
|
/* @__PURE__ */ jsxs("span", { children: [
|
|
224
224
|
totalHours,
|
|
225
225
|
"h total"
|
|
@@ -18,7 +18,7 @@ const dataListVariants = cva(
|
|
|
18
18
|
}
|
|
19
19
|
);
|
|
20
20
|
const dataListItemVariants = cva(
|
|
21
|
-
"grid gap-1
|
|
21
|
+
"grid gap-1 p-4 sm:grid-cols-[minmax(0,12rem)_1fr] sm:gap-4 sm:px-5",
|
|
22
22
|
{
|
|
23
23
|
defaultVariants: {
|
|
24
24
|
density: "default"
|