@alpic-ai/ui 1.160.0 → 1.161.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.
@@ -1,14 +1,10 @@
1
1
  //#region src/components/attachment-tile.d.ts
2
2
  interface AttachmentTileProps {
3
- /** Source URL for the attachment thumbnail */
4
3
  src?: string;
5
- /** Whether the attachment is an image */
6
4
  isImage?: boolean;
7
5
  /** Accessible label describing the attachment */
8
6
  label?: string;
9
- /** Called when the remove button is clicked */
10
7
  onRemove?: () => void;
11
- /** Called when the tile is clicked (e.g. to open a preview) */
12
8
  onClick?: () => void;
13
9
  className?: string;
14
10
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alpic-ai/ui",
3
- "version": "1.160.0",
3
+ "version": "1.161.0",
4
4
  "description": "Alpic design system — shared UI components",
5
5
  "type": "module",
6
6
  "exports": {
@@ -7,15 +7,11 @@ import { cn } from "../lib/cn";
7
7
  import { TooltipIconButton } from "./tooltip-icon-button";
8
8
 
9
9
  interface AttachmentTileProps {
10
- /** Source URL for the attachment thumbnail */
11
10
  src?: string;
12
- /** Whether the attachment is an image */
13
11
  isImage?: boolean;
14
12
  /** Accessible label describing the attachment */
15
13
  label?: string;
16
- /** Called when the remove button is clicked */
17
14
  onRemove?: () => void;
18
- /** Called when the tile is clicked (e.g. to open a preview) */
19
15
  onClick?: () => void;
20
16
  className?: string;
21
17
  }
@@ -84,8 +84,6 @@ function AvatarFallback({ className, ...props }: React.ComponentProps<typeof Ava
84
84
  );
85
85
  }
86
86
 
87
- // ─── AvatarLabelGroup ─────────────────────────────────────────────────────────
88
-
89
87
  interface AvatarLabelGroupProps extends React.ComponentProps<"div"> {
90
88
  size?: "sm" | "md";
91
89
  src?: string;
@@ -10,8 +10,6 @@ import { Popover, PopoverContent, PopoverTrigger } from "./popover";
10
10
  import { selectTriggerVariants } from "./select-trigger-variants";
11
11
  import { TagDismissible } from "./tag";
12
12
 
13
- /* ── Context ──────────────────────────────────────────────────────────────── */
14
-
15
13
  interface ComboboxContextValue {
16
14
  multiple: boolean;
17
15
  value: string | null;
@@ -35,8 +33,6 @@ function useComboboxContext() {
35
33
  return context;
36
34
  }
37
35
 
38
- /* ── Root ─────────────────────────────────────────────────────────────────── */
39
-
40
36
  interface ComboboxBaseProps {
41
37
  children: ReactNode;
42
38
  open?: boolean;
@@ -194,8 +190,6 @@ function Combobox(props: ComboboxProps) {
194
190
  );
195
191
  }
196
192
 
197
- /* ── Trigger ──────────────────────────────────────────────────────────────── */
198
-
199
193
  interface ComboboxTriggerProps
200
194
  extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "size">,
201
195
  VariantProps<typeof selectTriggerVariants> {
@@ -232,8 +226,6 @@ function ComboboxTrigger({ className, size, placeholder, children, ...props }: C
232
226
  );
233
227
  }
234
228
 
235
- /* ── Tags (internal, for multi-select trigger) ────────────────────────────── */
236
-
237
229
  function ComboboxTags({ values, onDeselect }: { values: string[]; onDeselect: (value: string) => void }) {
238
230
  const { getOptionLabel } = useComboboxContext();
239
231
  return (
@@ -251,8 +243,6 @@ function ComboboxTags({ values, onDeselect }: { values: string[]; onDeselect: (v
251
243
  );
252
244
  }
253
245
 
254
- /* ── Content ──────────────────────────────────────────────────────────────── */
255
-
256
246
  interface ComboboxContentProps extends React.ComponentProps<typeof PopoverContent> {
257
247
  className?: string;
258
248
  children?: ReactNode;
@@ -280,8 +270,6 @@ function ComboboxContent({ className, children, filter, ...props }: ComboboxCont
280
270
  );
281
271
  }
282
272
 
283
- /* ── Search ───────────────────────────────────────────────────────────────── */
284
-
285
273
  function ComboboxSearch({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Input>) {
286
274
  return (
287
275
  <div data-slot="combobox-search" className="flex items-center gap-2 border-b border-border-secondary px-3 py-2.5">
@@ -300,8 +288,6 @@ function ComboboxSearch({ className, ...props }: React.ComponentProps<typeof Com
300
288
  );
301
289
  }
302
290
 
303
- /* ── List ─────────────────────────────────────────────────────────────────── */
304
-
305
291
  function ComboboxList({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.List>) {
306
292
  return (
307
293
  <CommandPrimitive.List
@@ -312,8 +298,6 @@ function ComboboxList({ className, ...props }: React.ComponentProps<typeof Comma
312
298
  );
313
299
  }
314
300
 
315
- /* ── Empty ────────────────────────────────────────────────────────────────── */
316
-
317
301
  function ComboboxEmpty({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Empty>) {
318
302
  return (
319
303
  <CommandPrimitive.Empty
@@ -324,8 +308,6 @@ function ComboboxEmpty({ className, ...props }: React.ComponentProps<typeof Comm
324
308
  );
325
309
  }
326
310
 
327
- /* ── Group ────────────────────────────────────────────────────────────────── */
328
-
329
311
  function ComboboxGroup({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Group>) {
330
312
  return (
331
313
  <CommandPrimitive.Group
@@ -339,8 +321,6 @@ function ComboboxGroup({ className, ...props }: React.ComponentProps<typeof Comm
339
321
  );
340
322
  }
341
323
 
342
- /* ── Separator ────────────────────────────────────────────────────────────── */
343
-
344
324
  function ComboboxSeparator({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Separator>) {
345
325
  return (
346
326
  <CommandPrimitive.Separator
@@ -351,8 +331,6 @@ function ComboboxSeparator({ className, ...props }: React.ComponentProps<typeof
351
331
  );
352
332
  }
353
333
 
354
- /* ── Item ─────────────────────────────────────────────────────────────────── */
355
-
356
334
  interface ComboboxItemProps extends Omit<React.ComponentProps<typeof CommandPrimitive.Item>, "onSelect"> {
357
335
  /** The value stored when this item is selected */
358
336
  itemValue: string;
@@ -384,8 +362,6 @@ function ComboboxItem({ className, children, itemValue, ...props }: ComboboxItem
384
362
  );
385
363
  }
386
364
 
387
- /* ── Item supporting text ─────────────────────────────────────────────────── */
388
-
389
365
  function ComboboxItemText({ className, children, ...props }: React.HTMLAttributes<HTMLSpanElement>) {
390
366
  return (
391
367
  <span
@@ -51,8 +51,6 @@ function DropdownMenuGroup({ ...props }: React.ComponentProps<typeof DropdownMen
51
51
  return <DropdownMenuPrimitive.Group data-slot="dropdown-menu-group" {...props} />;
52
52
  }
53
53
 
54
- /* ── Item ─────────────────────────────────────────────────────────────────── */
55
-
56
54
  const dropdownMenuItemVariants = cva(
57
55
  [
58
56
  "relative flex cursor-default items-center gap-2 rounded-sm px-2.5 py-2 outline-hidden select-none",
@@ -103,8 +101,6 @@ function DropdownMenuItem({
103
101
  );
104
102
  }
105
103
 
106
- /* ── Label ────────────────────────────────────────────────────────────────── */
107
-
108
104
  function DropdownMenuLabel({
109
105
  className,
110
106
  inset,
@@ -135,8 +131,6 @@ function DropdownMenuHeader({ className, children, ...props }: React.HTMLAttribu
135
131
  );
136
132
  }
137
133
 
138
- /* ── Separator ────────────────────────────────────────────────────────────── */
139
-
140
134
  function DropdownMenuSeparator({ className, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {
141
135
  return (
142
136
  <DropdownMenuPrimitive.Separator
@@ -147,8 +141,6 @@ function DropdownMenuSeparator({ className, ...props }: React.ComponentProps<typ
147
141
  );
148
142
  }
149
143
 
150
- /* ── Shortcut ─────────────────────────────────────────────────────────────── */
151
-
152
144
  function DropdownMenuShortcut({ className, ...props }: React.ComponentProps<"span">) {
153
145
  return (
154
146
  <span
@@ -162,8 +154,6 @@ function DropdownMenuShortcut({ className, ...props }: React.ComponentProps<"spa
162
154
  );
163
155
  }
164
156
 
165
- /* ── Sub menu ─────────────────────────────────────────────────────────────── */
166
-
167
157
  function DropdownMenuSub({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {
168
158
  return <DropdownMenuPrimitive.Sub data-slot="dropdown-menu-sub" {...props} />;
169
159
  }
@@ -166,8 +166,6 @@ function FormMessage({ className, ...props }: React.ComponentProps<"p">) {
166
166
  );
167
167
  }
168
168
 
169
- /* ── Layout components ───────────────────────────────────────────────────── */
170
-
171
169
  interface FormHeaderProps extends React.ComponentProps<"div"> {
172
170
  title: string;
173
171
  description?: string;
@@ -186,8 +184,6 @@ function FormFields({ className, ...props }: React.ComponentProps<"div">) {
186
184
  return <div className={cn("flex flex-col gap-6", className)} {...props} />;
187
185
  }
188
186
 
189
- /* ── Convenience field wrappers ─────────────────────────────────────────── */
190
-
191
187
  interface FormFieldBaseProps<TFieldValues extends FieldValues, TName extends FieldPath<TFieldValues>> {
192
188
  control: ControllerProps<TFieldValues, TName>["control"];
193
189
  name: TName;
@@ -20,8 +20,6 @@ function SelectValue({ ...props }: React.ComponentProps<typeof SelectPrimitive.V
20
20
  return <SelectPrimitive.Value data-slot="select-value" {...props} />;
21
21
  }
22
22
 
23
- /* ── Trigger ──────────────────────────────────────────────────────────────── */
24
-
25
23
  function SelectTrigger({
26
24
  className,
27
25
  size = "md",
@@ -47,8 +45,6 @@ function SelectTrigger({
47
45
  );
48
46
  }
49
47
 
50
- /* ── Content ──────────────────────────────────────────────────────────────── */
51
-
52
48
  function SelectContent({
53
49
  className,
54
50
  children,
@@ -89,8 +85,6 @@ function SelectContent({
89
85
  );
90
86
  }
91
87
 
92
- /* ── Label ────────────────────────────────────────────────────────────────── */
93
-
94
88
  function SelectLabel({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.Label>) {
95
89
  return (
96
90
  <SelectPrimitive.Label
@@ -101,8 +95,6 @@ function SelectLabel({ className, ...props }: React.ComponentProps<typeof Select
101
95
  );
102
96
  }
103
97
 
104
- /* ── Item ─────────────────────────────────────────────────────────────────── */
105
-
106
98
  function SelectItem({ className, children, ...props }: React.ComponentProps<typeof SelectPrimitive.Item>) {
107
99
  return (
108
100
  <SelectPrimitive.Item
@@ -128,8 +120,6 @@ function SelectItem({ className, children, ...props }: React.ComponentProps<type
128
120
  );
129
121
  }
130
122
 
131
- /* ── Separator ────────────────────────────────────────────────────────────── */
132
-
133
123
  function SelectSeparator({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.Separator>) {
134
124
  return (
135
125
  <SelectPrimitive.Separator
@@ -88,7 +88,6 @@ function SidebarProvider({
88
88
  [setOpenProp, open],
89
89
  );
90
90
 
91
- // Helper to toggle the sidebar.
92
91
  const toggleSidebar = React.useCallback(() => {
93
92
  return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open);
94
93
  }, [isMobile, setOpen]);
@@ -240,7 +239,6 @@ function Sidebar({
240
239
  side === "left"
241
240
  ? "left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]"
242
241
  : "right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]",
243
- // Adjust the padding for floating and inset variants.
244
242
  variant === "floating" || variant === "inset"
245
243
  ? "p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]"
246
244
  : "border-sidebar-border group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l",
@@ -21,8 +21,6 @@ import { createContext, use } from "react";
21
21
 
22
22
  import { cn } from "../lib/cn";
23
23
 
24
- /* ─── Shared trigger styles ──────────────────────────────────────────────── */
25
-
26
24
  const tabsTriggerVariants = cva(
27
25
  [
28
26
  "type-text-sm items-center gap-1.5 font-medium",
@@ -57,8 +55,6 @@ const tabsTriggerVariants = cva(
57
55
  },
58
56
  );
59
57
 
60
- /* ─── Tabs (state-based, in-page content switching) ────────────────── */
61
-
62
58
  function Tabs({ className, orientation = "horizontal", ...props }: React.ComponentProps<typeof TabsPrimitive.Root>) {
63
59
  return (
64
60
  <TabsPrimitive.Root
@@ -134,8 +130,6 @@ function TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPr
134
130
  return <TabsPrimitive.Content data-slot="tabs-content" className={cn("flex-1 outline-none", className)} {...props} />;
135
131
  }
136
132
 
137
- /* ─── Navigation tabs (semantic <nav>/<ul>/<a>, for URL-based routing) ──── */
138
-
139
133
  type TabsNavVariant = "line" | "pill";
140
134
  type TabsNavOrientation = "horizontal" | "vertical";
141
135
 
@@ -9,8 +9,6 @@ interface TagBaseProps {
9
9
  icon?: React.ReactNode;
10
10
  }
11
11
 
12
- /* ── Tag (text only) ──────────────────────────────────────────── */
13
-
14
12
  interface TagProps extends React.ComponentProps<"span">, TagBaseProps {}
15
13
 
16
14
  function Tag({ className, icon, children, ...props }: TagProps) {
@@ -22,8 +20,6 @@ function Tag({ className, icon, children, ...props }: TagProps) {
22
20
  );
23
21
  }
24
22
 
25
- /* ── TagDismissible (with × button) ───────────────────────────── */
26
-
27
23
  interface TagDismissibleProps extends React.ComponentProps<"span">, TagBaseProps {
28
24
  onDismiss?: () => void;
29
25
  }
@@ -61,8 +57,6 @@ function TagDismissible({ className, icon, children, onDismiss, ...props }: TagD
61
57
  );
62
58
  }
63
59
 
64
- /* ── TagCount (with count badge) ──────────────────────────────── */
65
-
66
60
  interface TagCountProps extends React.ComponentProps<"span">, TagBaseProps {
67
61
  count: number;
68
62
  }
@@ -16,7 +16,6 @@ const ICON_STATE_HEADER = "type-text-xs text-muted-foreground font-medium w-16 t
16
16
  export const AllVariants = () => {
17
17
  return (
18
18
  <div className="flex flex-col gap-3 p-8">
19
- {/* ── Text buttons ────────────────────────────────────────────────── */}
20
19
  <span className={SECTION_HEADER}>Text</span>
21
20
 
22
21
  <div className={ROW}>
@@ -26,7 +25,6 @@ export const AllVariants = () => {
26
25
  <div className={STATE_HEADER}>Loading</div>
27
26
  </div>
28
27
 
29
- {/* Primary */}
30
28
  <div className={ROW}>
31
29
  <span className={VARIANT_LABEL}>Primary</span>
32
30
  <div className={CELL}>
@@ -46,7 +44,6 @@ export const AllVariants = () => {
46
44
  </div>
47
45
  </div>
48
46
 
49
- {/* Secondary */}
50
47
  <div className={ROW}>
51
48
  <span className={VARIANT_LABEL}>Secondary</span>
52
49
  <div className={CELL}>
@@ -66,7 +63,6 @@ export const AllVariants = () => {
66
63
  </div>
67
64
  </div>
68
65
 
69
- {/* Tertiary */}
70
66
  <div className={ROW}>
71
67
  <span className={VARIANT_LABEL}>Tertiary</span>
72
68
  <div className={CELL}>
@@ -86,7 +82,6 @@ export const AllVariants = () => {
86
82
  </div>
87
83
  </div>
88
84
 
89
- {/* Link color */}
90
85
  <div className={ROW}>
91
86
  <span className={VARIANT_LABEL}>Link</span>
92
87
  <div className={CELL}>
@@ -104,7 +99,6 @@ export const AllVariants = () => {
104
99
  </div>
105
100
  </div>
106
101
 
107
- {/* Link gray */}
108
102
  <div className={ROW}>
109
103
  <span className={VARIANT_LABEL}>Link muted</span>
110
104
  <div className={CELL}>
@@ -122,7 +116,6 @@ export const AllVariants = () => {
122
116
  </div>
123
117
  </div>
124
118
 
125
- {/* Destructive */}
126
119
  <div className={ROW}>
127
120
  <span className={VARIANT_LABEL}>Destructive</span>
128
121
  <div className={CELL}>
@@ -142,7 +135,6 @@ export const AllVariants = () => {
142
135
  </div>
143
136
  </div>
144
137
 
145
- {/* ── Icon only ───────────────────────────────────────────────────── */}
146
138
  <span className={SECTION_HEADER}>Icon only</span>
147
139
 
148
140
  <div className={ROW}>
@@ -213,7 +205,6 @@ export const AllVariants = () => {
213
205
  </div>
214
206
  </div>
215
207
 
216
- {/* ── Icon rounded ────────────────────────────────────────────────── */}
217
208
  <span className={SECTION_HEADER}>Icon rounded</span>
218
209
 
219
210
  <div className={ROW}>
@@ -284,7 +275,6 @@ export const AllVariants = () => {
284
275
  </div>
285
276
  </div>
286
277
 
287
- {/* ── Pill ──────────────────────────────────────────────────────────── */}
288
278
  <span className={SECTION_HEADER}>Pill</span>
289
279
 
290
280
  <div className="flex items-center gap-3">
@@ -302,7 +292,6 @@ export const AllVariants = () => {
302
292
  </Button>
303
293
  </div>
304
294
 
305
- {/* ── With icon (leading) ──────────────────────────────────────────── */}
306
295
  <span className={SECTION_HEADER}>With icon</span>
307
296
 
308
297
  <div className="flex items-center gap-3">
@@ -323,7 +312,6 @@ export const AllVariants = () => {
323
312
  </Button>
324
313
  </div>
325
314
 
326
- {/* ── CTA (animated gradient ring) ────────────────────────────────── */}
327
315
  <span className={SECTION_HEADER}>CTA — animated</span>
328
316
  <p className="type-text-xs text-muted-foreground -mt-2 max-w-md">
329
317
  Hover to rotate the conic gradient around the border and ignite the soft halo.
@@ -345,7 +333,6 @@ export const AllVariants = () => {
345
333
  </Button>
346
334
  </div>
347
335
 
348
- {/* ── asChild ─────────────────────────────────────────────────────── */}
349
336
  <span className={SECTION_HEADER}>asChild</span>
350
337
 
351
338
  <div className="flex items-center gap-3">
@@ -15,8 +15,6 @@ import {
15
15
  } from "../components/combobox";
16
16
  import { CommandItem } from "../components/command";
17
17
 
18
- /* ── With search ──────────────────────────────────────────────────────────── */
19
-
20
18
  const branches = ["main", "develop", "feature/auth", "feature/dashboard", "fix/login-bug", "release/v2.0"];
21
19
 
22
20
  function SearchCombobox() {
@@ -44,8 +42,6 @@ function SearchCombobox() {
44
42
  );
45
43
  }
46
44
 
47
- /* ── Custom trigger content (avatars + supporting text) ──────────────────── */
48
-
49
45
  const people = [
50
46
  { id: "olivia", name: "Olivia Rhye", handle: "@olivia" },
51
47
  { id: "phoenix", name: "Phoenix Baker", handle: "@phoenix" },
@@ -90,8 +86,6 @@ function AvatarCombobox() {
90
86
  );
91
87
  }
92
88
 
93
- /* ── With CommandItem action ─────────────────────────────────────────────── */
94
-
95
89
  const namespaces = [
96
90
  { id: "acme", name: "acme-corp" },
97
91
  { id: "personal", name: "johndoe" },
@@ -127,8 +121,6 @@ function CommandActionCombobox() {
127
121
  );
128
122
  }
129
123
 
130
- /* ── Grouped with headings ───────────────────────────────────────────────── */
131
-
132
124
  function GroupedCombobox() {
133
125
  const [value, setValue] = useState<string | null>(null);
134
126
  return (
@@ -154,8 +146,6 @@ function GroupedCombobox() {
154
146
  );
155
147
  }
156
148
 
157
- /* ── Multi-select with tags ───────────────────────────────────────────────── */
158
-
159
149
  function MultiCombobox() {
160
150
  const [values, setValues] = useState<string[]>(["phoenix", "olivia"]);
161
151
  return (
@@ -182,8 +172,6 @@ function MultiCombobox() {
182
172
  );
183
173
  }
184
174
 
185
- /* ── Story ────────────────────────────────────────────────────────────────── */
186
-
187
175
  export const AllVariants: Story = () => (
188
176
  <div className="grid grid-cols-1 gap-10 p-10 md:grid-cols-2">
189
177
  <div className="flex flex-col gap-1.5">
@@ -34,7 +34,6 @@ import {
34
34
 
35
35
  export const AllVariants: Story = () => (
36
36
  <div className="flex flex-col gap-10 p-10">
37
- {/* Basic with icons & shortcuts */}
38
37
  <div className="flex flex-col gap-1.5">
39
38
  <p className="type-text-xs font-medium text-subtle-foreground">Default with icons &amp; shortcuts</p>
40
39
  <DropdownMenu>
@@ -122,7 +121,6 @@ export const AllVariants: Story = () => (
122
121
  </DropdownMenu>
123
122
  </div>
124
123
 
125
- {/* Destructive variant */}
126
124
  <div className="flex flex-col gap-1.5">
127
125
  <p className="type-text-xs font-medium text-subtle-foreground">Destructive item</p>
128
126
  <DropdownMenu>
@@ -143,7 +141,6 @@ export const AllVariants: Story = () => (
143
141
  </DropdownMenu>
144
142
  </div>
145
143
 
146
- {/* Header with avatar */}
147
144
  <div className="flex flex-col gap-1.5">
148
145
  <p className="type-text-xs font-medium text-subtle-foreground">With header (avatar group)</p>
149
146
  <DropdownMenu>
@@ -173,7 +170,6 @@ export const AllVariants: Story = () => (
173
170
  </DropdownMenu>
174
171
  </div>
175
172
 
176
- {/* Disabled items */}
177
173
  <div className="flex flex-col gap-1.5">
178
174
  <p className="type-text-xs font-medium text-subtle-foreground">Disabled items</p>
179
175
  <DropdownMenu>
@@ -13,8 +13,6 @@ import {
13
13
  TextareaField,
14
14
  } from "../components/form";
15
15
 
16
- /* ── Types ───────────────────────────────────────────────────────────────── */
17
-
18
16
  interface CreateProjectForm {
19
17
  email: string;
20
18
  role: string;
@@ -43,8 +41,6 @@ const capabilities = [
43
41
  { value: "admin", label: "Admin" },
44
42
  ];
45
43
 
46
- /* ── Composed Form ───────────────────────────────────────────────────────── */
47
-
48
44
  function ComposedForm() {
49
45
  const form = useForm<CreateProjectForm>({
50
46
  defaultValues: {
@@ -141,8 +137,6 @@ function ComposedForm() {
141
137
  );
142
138
  }
143
139
 
144
- /* ── Story ────────────────────────────────────────────────────────────────── */
145
-
146
140
  export const AllVariants: Story = () => (
147
141
  <div className="flex flex-col gap-3">
148
142
  <p className="type-text-xs font-medium text-subtle-foreground uppercase tracking-wide">
@@ -7,7 +7,6 @@ const SECTION_HEADER = "type-text-xs font-medium text-muted-foreground uppercase
7
7
 
8
8
  export const AllVariants: Story = () => (
9
9
  <div className="flex flex-col gap-6 p-8 max-w-lg">
10
- {/* Textarea with block-end addon */}
11
10
  <span className={SECTION_HEADER}>Textarea + block-end footer</span>
12
11
  <InputGroup>
13
12
  <InputGroupTextarea placeholder="Type a message…" />
@@ -21,7 +20,6 @@ export const AllVariants: Story = () => (
21
20
  </InputGroupAddon>
22
21
  </InputGroup>
23
22
 
24
- {/* Inline-start addon */}
25
23
  <span className={SECTION_HEADER}>Inline-start addon (icon)</span>
26
24
  <InputGroup>
27
25
  <InputGroupAddon align="inline-start">
@@ -34,7 +32,6 @@ export const AllVariants: Story = () => (
34
32
  />
35
33
  </InputGroup>
36
34
 
37
- {/* Inline-end addon */}
38
35
  <span className={SECTION_HEADER}>Inline-end addon (button)</span>
39
36
  <InputGroup>
40
37
  <input
@@ -49,7 +46,6 @@ export const AllVariants: Story = () => (
49
46
  </InputGroupAddon>
50
47
  </InputGroup>
51
48
 
52
- {/* Disabled state */}
53
49
  <span className={SECTION_HEADER}>Disabled</span>
54
50
  <InputGroup>
55
51
  <InputGroupTextarea placeholder="Cannot type here…" disabled />
@@ -7,11 +7,9 @@ const SECTION_HEADER = "type-text-xs font-medium text-muted-foreground uppercase
7
7
 
8
8
  export const AllVariants: Story = () => (
9
9
  <div className="flex flex-col gap-6 p-8 max-w-sm">
10
- {/* Default */}
11
10
  <span className={SECTION_HEADER}>Default</span>
12
11
  <Input id="default" placeholder="alice@example.com" />
13
12
 
14
- {/* With label + hint */}
15
13
  <span className={SECTION_HEADER}>With label + hint</span>
16
14
  <Input
17
15
  id="with-label"
@@ -21,7 +19,6 @@ export const AllVariants: Story = () => (
21
19
  hint="This is a hint text to help user."
22
20
  />
23
21
 
24
- {/* With tooltip */}
25
22
  <span className={SECTION_HEADER}>With tooltip</span>
26
23
  <Input
27
24
  id="with-tooltip"
@@ -31,7 +28,6 @@ export const AllVariants: Story = () => (
31
28
  placeholder="alice@example.com"
32
29
  />
33
30
 
34
- {/* Error */}
35
31
  <span className={SECTION_HEADER}>Error</span>
36
32
  <Input
37
33
  id="error"
@@ -41,7 +37,6 @@ export const AllVariants: Story = () => (
41
37
  error="Please enter a valid email address."
42
38
  />
43
39
 
44
- {/* Disabled */}
45
40
  <span className={SECTION_HEADER}>Disabled</span>
46
41
  <Input
47
42
  id="disabled"
@@ -51,15 +46,12 @@ export const AllVariants: Story = () => (
51
46
  disabled
52
47
  />
53
48
 
54
- {/* Leading icon */}
55
49
  <span className={SECTION_HEADER}>Leading icon (email)</span>
56
50
  <Input id="leading-icon" label="Email" required placeholder="alice@example.com" leadingIcon={<Mail />} />
57
51
 
58
- {/* Leading text (website) */}
59
52
  <span className={SECTION_HEADER}>Leading text</span>
60
53
  <Input id="leading-text" label="Website" required placeholder="www.example.com" leadingText="http://" />
61
54
 
62
- {/* Small size */}
63
55
  <span className={SECTION_HEADER}>Small size</span>
64
56
  <Input id="sm-default" size="sm" placeholder="alice@example.com" label="Email" />
65
57
 
@@ -4,7 +4,6 @@ import { Skeleton } from "../components/skeleton";
4
4
 
5
5
  export const AllVariants: Story = () => (
6
6
  <div className="flex flex-col gap-8">
7
- {/* Shape variants */}
8
7
  <div className="flex flex-col gap-1.5">
9
8
  <p className="type-text-xs font-medium text-subtle-foreground">Rectangle (default)</p>
10
9
  <div className="flex flex-col gap-2">
@@ -23,7 +22,6 @@ export const AllVariants: Story = () => (
23
22
  </div>
24
23
  </div>
25
24
 
26
- {/* Common compositions */}
27
25
  <div className="flex flex-col gap-1.5">
28
26
  <p className="type-text-xs font-medium text-subtle-foreground">Card placeholder</p>
29
27
  <div className="flex flex-col gap-3 rounded-lg border border-border p-4">
@@ -88,7 +88,6 @@ const PAGE_SIZE = 3;
88
88
 
89
89
  export const AllVariants: Story = () => (
90
90
  <div className="flex flex-col gap-8 p-6 bg-background max-w-4xl">
91
- {/* Text-only table */}
92
91
  <div className="flex flex-col gap-1.5">
93
92
  <p className="type-text-xs font-medium text-subtle-foreground">Text cells</p>
94
93
  <Table>
@@ -115,7 +114,6 @@ export const AllVariants: Story = () => (
115
114
  </Table>
116
115
  </div>
117
116
 
118
- {/* Avatar cells + checkbox */}
119
117
  <div className="flex flex-col gap-1.5">
120
118
  <p className="type-text-xs font-medium text-subtle-foreground">Avatar cells + checkbox</p>
121
119
  <Table>
@@ -148,7 +146,6 @@ export const AllVariants: Story = () => (
148
146
  </Table>
149
147
  </div>
150
148
 
151
- {/* With footer */}
152
149
  <div className="flex flex-col gap-1.5">
153
150
  <p className="type-text-xs font-medium text-subtle-foreground">With caption + footer</p>
154
151
  <Table>
@@ -178,7 +175,6 @@ export const AllVariants: Story = () => (
178
175
  </Table>
179
176
  </div>
180
177
 
181
- {/* Selected row state */}
182
178
  <div className="flex flex-col gap-1.5">
183
179
  <p className="type-text-xs font-medium text-subtle-foreground">Selected row state</p>
184
180
  <Table>
@@ -201,7 +197,6 @@ export const AllVariants: Story = () => (
201
197
  </Table>
202
198
  </div>
203
199
 
204
- {/* Paginated table */}
205
200
  <PaginatedTableExample />
206
201
  </div>
207
202
  );
@@ -42,9 +42,6 @@ export const AllVariants: Story = () => {
42
42
 
43
43
  return (
44
44
  <div className="flex flex-col gap-10 p-8">
45
- {/* ─── Navigation tabs ─────────────────────────────────────── */}
46
-
47
- {/* Horizontal + line (default) */}
48
45
  <div>
49
46
  <p className={SECTION_HEADER}>Nav — horizontal, variant="line" (default)</p>
50
47
  <div className="mt-4">
@@ -61,7 +58,6 @@ export const AllVariants: Story = () => {
61
58
  </div>
62
59
  </div>
63
60
 
64
- {/* Horizontal + pill */}
65
61
  <div>
66
62
  <p className={SECTION_HEADER}>Nav — horizontal, variant="pill"</p>
67
63
  <div className="mt-4">
@@ -78,7 +74,6 @@ export const AllVariants: Story = () => {
78
74
  </div>
79
75
  </div>
80
76
 
81
- {/* Vertical + pill (default) */}
82
77
  <div>
83
78
  <p className={SECTION_HEADER}>Nav — vertical, variant="pill" (default)</p>
84
79
  <div className="mt-4 flex gap-6">
@@ -99,9 +94,6 @@ export const AllVariants: Story = () => {
99
94
  </div>
100
95
  </div>
101
96
 
102
- {/* ─── Tabs (state-based) ────────────────────────────── */}
103
-
104
- {/* Tabs — line */}
105
97
  <div>
106
98
  <p className={SECTION_HEADER}>Tabs — line variant</p>
107
99
  <Tabs defaultValue="all" className="mt-4">
@@ -118,7 +110,6 @@ export const AllVariants: Story = () => {
118
110
  </Tabs>
119
111
  </div>
120
112
 
121
- {/* Tabs — default (horizontal) */}
122
113
  <div>
123
114
  <p className={SECTION_HEADER}>Tabs — default variant (horizontal)</p>
124
115
  <Tabs defaultValue="all" className="mt-4">
@@ -135,7 +126,6 @@ export const AllVariants: Story = () => {
135
126
  </Tabs>
136
127
  </div>
137
128
 
138
- {/* Tabs — default (vertical) */}
139
129
  <div>
140
130
  <p className={SECTION_HEADER}>Tabs — default variant (vertical)</p>
141
131
  <Tabs defaultValue="overview" orientation="vertical" className="mt-4">
@@ -150,7 +140,6 @@ export const AllVariants: Story = () => {
150
140
  </Tabs>
151
141
  </div>
152
142
 
153
- {/* Tabs — disabled */}
154
143
  <div>
155
144
  <p className={SECTION_HEADER}>Tabs — disabled trigger</p>
156
145
  <Tabs defaultValue="one" className="mt-4">
@@ -8,7 +8,6 @@ const LABEL = "type-text-xs text-muted-foreground w-20 shrink-0";
8
8
 
9
9
  export const AllVariants = () => (
10
10
  <div className="flex flex-col gap-4 p-8">
11
- {/* ── Default variant ──────────────────────────────────────────────── */}
12
11
  <span className={SECTION_HEADER}>Default variant</span>
13
12
 
14
13
  <div className={ROW}>
@@ -44,7 +43,6 @@ export const AllVariants = () => (
44
43
  </ToggleGroup>
45
44
  </div>
46
45
 
47
- {/* ── Outline variant ─────────────────────────────────────────────── */}
48
46
  <span className={SECTION_HEADER}>Outline variant</span>
49
47
 
50
48
  <div className={ROW}>
@@ -77,7 +75,6 @@ export const AllVariants = () => (
77
75
  </ToggleGroup>
78
76
  </div>
79
77
 
80
- {/* ── Sizes ───────────────────────────────────────────────────────── */}
81
78
  <span className={SECTION_HEADER}>Sizes</span>
82
79
 
83
80
  <div className={ROW}>
@@ -104,7 +101,6 @@ export const AllVariants = () => (
104
101
  </ToggleGroup>
105
102
  </div>
106
103
 
107
- {/* ── Disabled ────────────────────────────────────────────────────── */}
108
104
  <span className={SECTION_HEADER}>Disabled</span>
109
105
 
110
106
  <div className={ROW}>
@@ -119,7 +115,6 @@ export const AllVariants = () => (
119
115
  </ToggleGroup>
120
116
  </div>
121
117
 
122
- {/* ── Real-world: Log level filter ────────────────────────────────── */}
123
118
  <span className={SECTION_HEADER}>Log level filter (real-world)</span>
124
119
 
125
120
  <div className={ROW}>
@@ -36,7 +36,6 @@ export const AllVariants: Story = () => {
36
36
 
37
37
  return (
38
38
  <div className="flex flex-col gap-10 p-8">
39
- {/* Full rail (steps + progress) */}
40
39
  <div>
41
40
  <p className={SECTION_HEADER}>Full rail — steps + progress</p>
42
41
  <div className="mt-4 flex gap-6">
@@ -50,7 +49,6 @@ export const AllVariants: Story = () => {
50
49
  </div>
51
50
  </div>
52
51
 
53
- {/* Steps only */}
54
52
  <div>
55
53
  <p className={SECTION_HEADER}>Steps only</p>
56
54
  <div className="mt-4 max-w-56">
@@ -58,7 +56,6 @@ export const AllVariants: Story = () => {
58
56
  </div>
59
57
  </div>
60
58
 
61
- {/* Progress only — various positions */}
62
59
  <div>
63
60
  <p className={SECTION_HEADER}>Progress — first step</p>
64
61
  <div className="mt-4 max-w-56">