tio-design-make-experiments 0.0.1

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.
Files changed (108) hide show
  1. package/ATTRIBUTIONS.md +3 -0
  2. package/README.md +11 -0
  3. package/guidelines/Guidelines.md +61 -0
  4. package/index.html +15 -0
  5. package/package.json +91 -0
  6. package/postcss.config.mjs +15 -0
  7. package/src/app/App.tsx +6 -0
  8. package/src/app/components/design-system/Buttons.tsx +623 -0
  9. package/src/app/components/design-system/Cards.tsx +123 -0
  10. package/src/app/components/design-system/Charts.tsx +135 -0
  11. package/src/app/components/design-system/ColorPalette.tsx +86 -0
  12. package/src/app/components/design-system/CopyButton.tsx +102 -0
  13. package/src/app/components/design-system/Forms.tsx +409 -0
  14. package/src/app/components/design-system/Icons.tsx +140 -0
  15. package/src/app/components/design-system/ListItems.tsx +234 -0
  16. package/src/app/components/design-system/Navigation.tsx +344 -0
  17. package/src/app/components/design-system/Patterns.tsx +235 -0
  18. package/src/app/components/design-system/PopoverMenu.tsx +81 -0
  19. package/src/app/components/design-system/SectionHeader.tsx +22 -0
  20. package/src/app/components/design-system/Spacing.tsx +109 -0
  21. package/src/app/components/design-system/StatusIndicators.tsx +194 -0
  22. package/src/app/components/design-system/Typography.tsx +88 -0
  23. package/src/app/components/figma/ImageWithFallback.tsx +27 -0
  24. package/src/app/components/ui/accordion.tsx +66 -0
  25. package/src/app/components/ui/alert-dialog.tsx +157 -0
  26. package/src/app/components/ui/alert.tsx +66 -0
  27. package/src/app/components/ui/aspect-ratio.tsx +11 -0
  28. package/src/app/components/ui/avatar.tsx +53 -0
  29. package/src/app/components/ui/badge.tsx +46 -0
  30. package/src/app/components/ui/breadcrumb.tsx +109 -0
  31. package/src/app/components/ui/button.tsx +58 -0
  32. package/src/app/components/ui/calendar.tsx +75 -0
  33. package/src/app/components/ui/card.tsx +92 -0
  34. package/src/app/components/ui/carousel.tsx +241 -0
  35. package/src/app/components/ui/chart.tsx +353 -0
  36. package/src/app/components/ui/checkbox.tsx +32 -0
  37. package/src/app/components/ui/collapsible.tsx +33 -0
  38. package/src/app/components/ui/command.tsx +177 -0
  39. package/src/app/components/ui/context-menu.tsx +252 -0
  40. package/src/app/components/ui/dialog.tsx +135 -0
  41. package/src/app/components/ui/drawer.tsx +132 -0
  42. package/src/app/components/ui/dropdown-menu.tsx +257 -0
  43. package/src/app/components/ui/form.tsx +168 -0
  44. package/src/app/components/ui/hover-card.tsx +44 -0
  45. package/src/app/components/ui/input-otp.tsx +77 -0
  46. package/src/app/components/ui/input.tsx +21 -0
  47. package/src/app/components/ui/label.tsx +24 -0
  48. package/src/app/components/ui/menubar.tsx +276 -0
  49. package/src/app/components/ui/navigation-menu.tsx +168 -0
  50. package/src/app/components/ui/pagination.tsx +127 -0
  51. package/src/app/components/ui/popover.tsx +48 -0
  52. package/src/app/components/ui/progress.tsx +31 -0
  53. package/src/app/components/ui/radio-group.tsx +45 -0
  54. package/src/app/components/ui/resizable.tsx +56 -0
  55. package/src/app/components/ui/scroll-area.tsx +58 -0
  56. package/src/app/components/ui/select.tsx +189 -0
  57. package/src/app/components/ui/separator.tsx +28 -0
  58. package/src/app/components/ui/sheet.tsx +139 -0
  59. package/src/app/components/ui/sidebar.tsx +726 -0
  60. package/src/app/components/ui/skeleton.tsx +13 -0
  61. package/src/app/components/ui/slider.tsx +63 -0
  62. package/src/app/components/ui/sonner.tsx +25 -0
  63. package/src/app/components/ui/switch.tsx +31 -0
  64. package/src/app/components/ui/table.tsx +116 -0
  65. package/src/app/components/ui/tabs.tsx +66 -0
  66. package/src/app/components/ui/textarea.tsx +18 -0
  67. package/src/app/components/ui/toggle-group.tsx +73 -0
  68. package/src/app/components/ui/toggle.tsx +47 -0
  69. package/src/app/components/ui/tooltip.tsx +61 -0
  70. package/src/app/components/ui/use-mobile.ts +21 -0
  71. package/src/app/components/ui/utils.ts +6 -0
  72. package/src/app/pages/DesignSystem.tsx +189 -0
  73. package/src/app/pages/Team.tsx +168 -0
  74. package/src/app/routes.tsx +14 -0
  75. package/src/assets/6276cd19433d265f363bddc7f52f4937da9b1dd4.png +0 -0
  76. package/src/assets/9d7a018c9a6938d439d9059f82753d232ce63804.png +0 -0
  77. package/src/imports/Buttons-3-409.tsx +46 -0
  78. package/src/imports/Buttons-3-962.tsx +155 -0
  79. package/src/imports/ButtonsAndActions.tsx +139 -0
  80. package/src/imports/Dashboard.tsx +1914 -0
  81. package/src/imports/DesignSystem.tsx +6008 -0
  82. package/src/imports/Forms.tsx +1088 -0
  83. package/src/imports/Navigation-17-3259.tsx +564 -0
  84. package/src/imports/Navigation-18-957.tsx +873 -0
  85. package/src/imports/Wireframe.tsx +112 -0
  86. package/src/imports/svg-1ifosis1tx.ts +3 -0
  87. package/src/imports/svg-5spfd.tsx +1 -0
  88. package/src/imports/svg-6180by7m37.ts +3 -0
  89. package/src/imports/svg-guy0p.tsx +1 -0
  90. package/src/imports/svg-hm2n0.tsx +2 -0
  91. package/src/imports/svg-j8o95ccqq7.ts +26 -0
  92. package/src/imports/svg-liuy2nykz3.ts +10 -0
  93. package/src/imports/svg-pp9c3.tsx +1 -0
  94. package/src/imports/svg-pr0k9194w9.ts +33 -0
  95. package/src/imports/svg-umftvfphsk.ts +48 -0
  96. package/src/imports/svg-vbi95q76mb.ts +23 -0
  97. package/src/imports/svg-vxjpl.tsx +1 -0
  98. package/src/imports/svg-wl30wxxv53.ts +3 -0
  99. package/src/main.tsx +7 -0
  100. package/src/styles/fonts.css +1 -0
  101. package/src/styles/forms.css +181 -0
  102. package/src/styles/header.css +48 -0
  103. package/src/styles/index.css +7 -0
  104. package/src/styles/navlinks.css +112 -0
  105. package/src/styles/popover.css +48 -0
  106. package/src/styles/tailwind.css +4 -0
  107. package/src/styles/theme.css +312 -0
  108. package/vite.config.ts +38 -0
@@ -0,0 +1,234 @@
1
+ import React from "react";
2
+ import svgPaths from "../../../imports/svg-umftvfphsk";
3
+ import { SectionHeader } from "./SectionHeader";
4
+ import { CopyButton } from "./CopyButton";
5
+
6
+ export function ListItems() {
7
+ return (
8
+ <section>
9
+ <SectionHeader
10
+ title="List Items"
11
+ description="Various list item patterns used throughout the application"
12
+ />
13
+
14
+ {/* Session List Items */}
15
+ <div className="mb-8">
16
+ <p className="font-['Source_Sans_3',sans-serif] text-sm text-muted-foreground uppercase tracking-wider mb-4">
17
+ Session Grid List Items
18
+ </p>
19
+ <div className="space-y-2.5 max-w-3xl">
20
+ {/* With all 3 counters */}
21
+ <div className="group/row bg-secondary rounded-md relative">
22
+ <div className="absolute inset-0 border border-secondary rounded-md pointer-events-none" />
23
+ <div className="flex items-center gap-2.5 px-5 py-2.5">
24
+ <div className="flex-1">
25
+ <span className="font-['Source_Sans_3',sans-serif] text-sm text-foreground">Test session title</span>
26
+ </div>
27
+ <div className="flex items-center gap-5">
28
+ <div className="flex items-center gap-2.5">
29
+ <svg width="20" height="20" viewBox="0 0 20 20" fill="none">
30
+ <path d={svgPaths.p30b87920} fill="var(--chart-1)" />
31
+ </svg>
32
+ <span className="font-['Source_Sans_3',sans-serif] text-sm text-foreground w-[15px]">50</span>
33
+ </div>
34
+ <div className="flex items-center gap-2.5">
35
+ <svg width="20" height="20" viewBox="0 0 20 20" fill="none">
36
+ <path d={svgPaths.p30bab400} fill="var(--chart-2)" />
37
+ </svg>
38
+ <span className="font-['Source_Sans_3',sans-serif] text-sm text-foreground w-[15px]">10</span>
39
+ </div>
40
+ <div className="flex items-center gap-2.5">
41
+ <svg width="20" height="20" viewBox="0 0 20 20" fill="none">
42
+ <path d={svgPaths.p13555100} fill="var(--chart-3)" />
43
+ </svg>
44
+ <span className="font-['Source_Sans_3',sans-serif] text-sm text-foreground w-[15px]">1</span>
45
+ </div>
46
+ <span className="font-['Source_Sans_3',sans-serif] text-sm text-foreground text-right w-[87px]">99 checks total</span>
47
+ </div>
48
+ </div>
49
+ <div className="absolute top-1 right-1 opacity-0 group-hover/row:opacity-100 transition-opacity z-10">
50
+ <CopyButton token="bg-secondary rounded-md px-5 py-2.5 | border border-secondary" />
51
+ </div>
52
+ </div>
53
+
54
+ {/* Only passed */}
55
+ <div className="group/row bg-secondary rounded-md relative">
56
+ <div className="absolute inset-0 border border-secondary rounded-md pointer-events-none" />
57
+ <div className="flex items-center gap-2.5 px-5 py-2.5">
58
+ <div className="flex-1">
59
+ <span className="font-['Source_Sans_3',sans-serif] text-sm text-foreground">All passing session</span>
60
+ </div>
61
+ <div className="flex items-center gap-5">
62
+ <div className="flex items-center gap-2.5">
63
+ <svg width="20" height="20" viewBox="0 0 20 20" fill="none">
64
+ <path d={svgPaths.p30b87920} fill="var(--chart-1)" />
65
+ </svg>
66
+ <span className="font-['Source_Sans_3',sans-serif] text-sm text-foreground w-[15px]">99</span>
67
+ </div>
68
+ <span className="font-['Source_Sans_3',sans-serif] text-sm text-foreground text-right w-[87px]">99 checks total</span>
69
+ </div>
70
+ </div>
71
+ <div className="absolute top-1 right-1 opacity-0 group-hover/row:opacity-100 transition-opacity z-10">
72
+ <CopyButton token="bg-secondary rounded-md px-5 py-2.5 | border border-secondary" />
73
+ </div>
74
+ </div>
75
+ </div>
76
+ </div>
77
+
78
+ {/* Splitview Collapsable Items */}
79
+ <div className="mb-8">
80
+ <p className="font-['Source_Sans_3',sans-serif] text-sm text-muted-foreground uppercase tracking-wider mb-4">
81
+ Splitview Collapsable Items
82
+ </p>
83
+ <div className="space-y-2.5 max-w-2xl">
84
+ {/* Expanded */}
85
+ <div className="group/row bg-secondary h-11 rounded-t-lg relative">
86
+ <div className="flex items-center px-5 py-2.5 size-full">
87
+ <svg width="20" height="20" viewBox="0 0 20 20" fill="none" className="shrink-0">
88
+ <path d="M10 15L4 5H16L10 15Z" fill="var(--muted-foreground)" />
89
+ </svg>
90
+ <div className="w-2.5" />
91
+ <svg width="20" height="20" viewBox="0 0 20 20" fill="none" className="shrink-0">
92
+ <circle cx="10" cy="10" r="8" stroke="var(--border)" strokeWidth="4" />
93
+ </svg>
94
+ <div className="w-[15px]" />
95
+ <span className="font-['Source_Sans_3',sans-serif] text-lg text-foreground flex-1 truncate" style={{ fontWeight: 300 }}>
96
+ https://pageurl.com
97
+ </span>
98
+ </div>
99
+ <div className="absolute top-1 right-1 opacity-0 group-hover/row:opacity-100 transition-opacity z-10">
100
+ <CopyButton token="bg-secondary h-11 rounded-t-lg | expanded state" />
101
+ </div>
102
+ </div>
103
+
104
+ {/* Collapsed */}
105
+ <div className="group/row bg-secondary h-11 rounded-lg relative">
106
+ <div className="flex items-center px-5 py-2.5 size-full">
107
+ <svg width="20" height="20" viewBox="0 0 20 20" fill="none" className="shrink-0">
108
+ <path d="M15 10L5 16V4L15 10Z" fill="var(--muted-foreground)" />
109
+ </svg>
110
+ <div className="w-2.5" />
111
+ <svg width="20" height="20" viewBox="0 0 20 20" fill="none" className="shrink-0">
112
+ <circle cx="10" cy="10" r="8" stroke="var(--border)" strokeWidth="4" />
113
+ </svg>
114
+ <div className="w-[15px]" />
115
+ <span className="font-['Source_Sans_3',sans-serif] text-lg text-foreground flex-1 truncate" style={{ fontWeight: 300 }}>
116
+ https://akademija.by/some_super_long_url
117
+ </span>
118
+ </div>
119
+ <div className="absolute top-1 right-1 opacity-0 group-hover/row:opacity-100 transition-opacity z-10">
120
+ <CopyButton token="bg-secondary h-11 rounded-lg | collapsed state" />
121
+ </div>
122
+ </div>
123
+
124
+ {/* With counter */}
125
+ <div className="group/row bg-secondary h-11 rounded-lg relative">
126
+ <div className="flex items-center px-5 py-2.5 size-full">
127
+ <svg width="20" height="20" viewBox="0 0 20 20" fill="none" className="shrink-0">
128
+ <path d="M15 10L5 16V4L15 10Z" fill="var(--muted-foreground)" />
129
+ </svg>
130
+ <div className="w-2.5" />
131
+ <svg width="20" height="20" viewBox="0 0 20 20" fill="none" className="shrink-0">
132
+ <circle cx="10" cy="10" r="8" stroke="var(--border)" strokeWidth="4" />
133
+ </svg>
134
+ <div className="w-[15px]" />
135
+ <span className="font-['Source_Sans_3',sans-serif] text-lg text-foreground flex-1 truncate" style={{ fontWeight: 300 }}>
136
+ https://pageurl.com
137
+ </span>
138
+ <div className="w-[15px]" />
139
+ <div className="flex items-center gap-2.5 shrink-0">
140
+ <svg width="20" height="20" viewBox="0 0 20 20" fill="none">
141
+ <path d={svgPaths.p3ed72680} fill="var(--muted-foreground)" />
142
+ </svg>
143
+ <span className="font-['Source_Sans_3',sans-serif] text-sm text-muted-foreground">execute checks</span>
144
+ </div>
145
+ {/* New marker */}
146
+ <div className="absolute right-[7px] top-[7px]">
147
+ <svg width="5" height="5" viewBox="0 0 5 5" fill="none">
148
+ <circle cx="2.5" cy="2.5" r="2.5" fill="var(--accent)" />
149
+ </svg>
150
+ </div>
151
+ </div>
152
+ <div className="absolute top-1 right-8 opacity-0 group-hover/row:opacity-100 transition-opacity z-10">
153
+ <CopyButton token="bg-secondary h-11 rounded-lg | with new-marker: var(--accent) 5px dot" />
154
+ </div>
155
+ </div>
156
+ </div>
157
+ </div>
158
+
159
+ {/* Child Items */}
160
+ <div className="mb-8">
161
+ <p className="font-['Source_Sans_3',sans-serif] text-sm text-muted-foreground uppercase tracking-wider mb-4">
162
+ Splitview Child Items
163
+ </p>
164
+ <div className="max-w-2xl">
165
+ <div className="bg-secondary h-10 relative">
166
+ <div className="flex items-center gap-[15px] pl-[50px] pr-5 py-2.5 size-full">
167
+ <svg width="20" height="20" viewBox="0 0 20 20" fill="none" className="shrink-0">
168
+ <path d={svgPaths.p3ed72680} fill="var(--muted-foreground)" />
169
+ </svg>
170
+ <span className="font-['Source_Sans_3',sans-serif] text-sm text-foreground flex-1" style={{ fontWeight: 300 }}>
171
+ Check title
172
+ </span>
173
+ <div className="absolute right-[7px] top-[7px]">
174
+ <svg width="5" height="5" viewBox="0 0 5 5" fill="none">
175
+ <circle cx="2.5" cy="2.5" r="2.5" fill="var(--accent)" />
176
+ </svg>
177
+ </div>
178
+ </div>
179
+ </div>
180
+ <div className="bg-background h-px" />
181
+ <div className="bg-secondary h-10">
182
+ <div className="flex items-center gap-[15px] pl-[50px] pr-5 py-2.5 size-full">
183
+ <svg width="20" height="20" viewBox="0 0 20 20" fill="none" className="shrink-0">
184
+ <path d={svgPaths.p30b87920} fill="var(--chart-1)" />
185
+ </svg>
186
+ <span className="font-['Source_Sans_3',sans-serif] text-sm text-foreground flex-1" style={{ fontWeight: 300 }}>
187
+ Another check (passed)
188
+ </span>
189
+ </div>
190
+ </div>
191
+ <div className="bg-background h-px" />
192
+ <div className="bg-secondary h-10">
193
+ <div className="flex items-center gap-[15px] pl-[50px] pr-5 py-2.5 size-full">
194
+ <svg width="20" height="20" viewBox="0 0 20 20" fill="none" className="shrink-0">
195
+ <path d={svgPaths.p30bab400} fill="var(--chart-2)" />
196
+ </svg>
197
+ <span className="font-['Source_Sans_3',sans-serif] text-sm text-foreground flex-1" style={{ fontWeight: 300 }}>
198
+ Failed check
199
+ </span>
200
+ </div>
201
+ </div>
202
+ </div>
203
+ </div>
204
+
205
+ {/* Check Steps */}
206
+ <div>
207
+ <p className="font-['Source_Sans_3',sans-serif] text-sm text-muted-foreground uppercase tracking-wider mb-4">
208
+ Check Step Items
209
+ </p>
210
+ <div className="space-y-2.5 max-w-2xl">
211
+ {["Action", "Another action", "Doing some nice things", "Scroll bottom"].map((step, i) => (
212
+ <div key={step} className="flex h-10 rounded-lg overflow-hidden">
213
+ <div className="bg-secondary flex-1 relative">
214
+ <div className="flex items-center gap-2.5 pl-[60px] pr-2.5 py-2.5 h-full">
215
+ <span className="font-['Source_Sans_3',sans-serif] text-sm text-foreground">{step}</span>
216
+ <div className="absolute bg-muted flex items-center justify-center left-0 top-0 rounded-l-lg size-10">
217
+ <span className="font-['Source_Sans_3',sans-serif] text-lg text-foreground" style={{ fontWeight: 800 }}>{i + 1}</span>
218
+ </div>
219
+ </div>
220
+ </div>
221
+ <div className="bg-secondary flex items-center justify-center rounded-r-lg">
222
+ <div className="p-2.5 size-10 flex items-center justify-center">
223
+ <svg width="20" height="20" viewBox="0 0 20 20" fill="none">
224
+ <path d="M15 16L5 10L15 4V16Z" fill="var(--muted-foreground)" />
225
+ </svg>
226
+ </div>
227
+ </div>
228
+ </div>
229
+ ))}
230
+ </div>
231
+ </div>
232
+ </section>
233
+ );
234
+ }
@@ -0,0 +1,344 @@
1
+ import React from "react";
2
+ import svgPaths from "../../../imports/svg-umftvfphsk";
3
+ import { imgLogoTestinator } from "../../../imports/svg-hm2n0";
4
+ import imgProfileDropdown from "figma:asset/6276cd19433d265f363bddc7f52f4937da9b1dd4.png";
5
+ import { SectionHeader } from "./SectionHeader";
6
+ import { CopyButton } from "./CopyButton";
7
+
8
+ /* ─── Icon helpers ─── */
9
+ function TestIcon({ className = "fill-foreground" }: { className?: string }) {
10
+ return (
11
+ <svg width="20" height="20" viewBox="0 0 20 20" fill="none" className="shrink-0">
12
+ <path clipRule="evenodd" d={svgPaths.p390b0800} className={className} fillRule="evenodd" />
13
+ </svg>
14
+ );
15
+ }
16
+
17
+ function PlusIcon({ className = "fill-foreground" }: { className?: string }) {
18
+ return (
19
+ <svg width="20" height="20" viewBox="0 0 20 20" fill="none" className="shrink-0">
20
+ <path d={svgPaths.p185c8f80} className={className} />
21
+ </svg>
22
+ );
23
+ }
24
+
25
+ function CheckCircleFilledIcon() {
26
+ return (
27
+ <svg width="20" height="20" viewBox="0 0 20 20" fill="none" className="shrink-0">
28
+ <path d={svgPaths.p30b87920} className="fill-chart-1" />
29
+ </svg>
30
+ );
31
+ }
32
+
33
+ function CrossCircleFilledIcon() {
34
+ return (
35
+ <svg width="20" height="20" viewBox="0 0 20 20" fill="none" className="shrink-0">
36
+ <path d={svgPaths.p30bab400} className="fill-destructive" />
37
+ </svg>
38
+ );
39
+ }
40
+
41
+ function BlockedIcon() {
42
+ return (
43
+ <svg width="20" height="20" viewBox="0 0 20 20" fill="none" className="shrink-0">
44
+ <path d={svgPaths.p13555100} className="fill-chart-3" />
45
+ </svg>
46
+ );
47
+ }
48
+
49
+ /* ─── Logo component ─── */
50
+ function Logo() {
51
+ return (
52
+ <div className="h-[34px] w-[148px] overflow-clip relative shrink-0">
53
+ <div
54
+ className="absolute inset-0 mask-alpha mask-intersect mask-no-clip mask-no-repeat mask-position-[0px_0px] mask-size-[148px_34px]"
55
+ style={{ maskImage: `url('${imgLogoTestinator}')` }}
56
+ >
57
+ <svg className="block size-full" fill="none" preserveAspectRatio="none" viewBox="0 0 147.351 34.0003">
58
+ <path d={svgPaths.pd3f4900} fill="white" />
59
+ <path d={svgPaths.p2ef9e700} fill="white" />
60
+ <path d={svgPaths.p1507e900} fill="white" />
61
+ <path d={svgPaths.p63b5500} fill="white" />
62
+ <path d={svgPaths.p73e5c00} fill="white" />
63
+ <path d={svgPaths.p269eee80} fill="white" />
64
+ <path d={svgPaths.p32f5f900} fill="white" />
65
+ <path d={svgPaths.p166df900} fill="white" />
66
+ <path d={svgPaths.p3af52100} fill="white" />
67
+ <path d={svgPaths.p224ff200} fill="white" />
68
+ <path d={svgPaths.p29a28100} fill="white" />
69
+ <path d={svgPaths.p38feaa80} fill="white" />
70
+ <path d={svgPaths.p1649b700} fill="white" />
71
+ <path d={svgPaths.p5b04f70} fill="white" />
72
+ <path d={svgPaths.pafbcd00} fill="white" />
73
+ <path d={svgPaths.p94ead80} fill="white" />
74
+ <path d={svgPaths.p3e1a5280} fill="white" />
75
+ <path d={svgPaths.p288b2800} fill="#7954FF" />
76
+ <path clipRule="evenodd" d={svgPaths.p1f8b5980} fill="#78EAC1" fillRule="evenodd" />
77
+ </svg>
78
+ </div>
79
+ </div>
80
+ );
81
+ }
82
+
83
+ /* ─── Sub-section label ─── */
84
+ function SubLabel({ children }: { children: React.ReactNode }) {
85
+ return (
86
+ <p className="font-['Source_Sans_3',sans-serif] text-foreground mb-5">
87
+ {children}
88
+ </p>
89
+ );
90
+ }
91
+
92
+ /* ─── Section title (lighter weight, larger) ─── */
93
+ function SectionTitle({ children }: { children: React.ReactNode }) {
94
+ return (
95
+ <p className="font-['Source_Sans_Pro',sans-serif] text-foreground mb-2.5" style={{ fontWeight: 300, fontSize: 25, lineHeight: "28px" }}>
96
+ {children}
97
+ </p>
98
+ );
99
+ }
100
+
101
+ /* ════════════════════════════════════════════════════
102
+ Main export
103
+ ════════════════════════════════════════════════════ */
104
+ export function Navigation() {
105
+ return (
106
+ <section>
107
+ <SectionHeader
108
+ title="Navigation"
109
+ description="Header bar, navlinks, and tab navigation — extracted as CSS component classes in header.css and navlinks.css"
110
+ />
111
+
112
+ {/* ═══════════ HEADER ═══════════ */}
113
+ <div className="mb-12">
114
+ <SectionTitle>Header</SectionTitle>
115
+
116
+ {/* ── Header: Signed In ── */}
117
+ <SubLabel>Header when the user is signed in</SubLabel>
118
+ <div className="group/nav header-bar rounded-xl overflow-hidden relative mb-8">
119
+ <div className="absolute top-2 right-2 opacity-0 group-hover/nav:opacity-100 transition-opacity z-10">
120
+ <CopyButton token="header-bar" />
121
+ </div>
122
+ <div className="header-wrapper">
123
+ <Logo />
124
+ <div className="header-left">
125
+ <div className="header-left-inner">
126
+ <div className="header-nav">
127
+ <a className="navlink hover:[&_svg_path]:fill-link-hover-foreground">
128
+ <div className="flex items-center pr-2 shrink-0">
129
+ <PlusIcon className="fill-foreground transition-colors duration-200" />
130
+ </div>
131
+ <span>New Test Session</span>
132
+ </a>
133
+ <a className="navlink"><span>Test Sessions</span></a>
134
+ <a className="navlink"><span>Check Suites</span></a>
135
+ </div>
136
+ </div>
137
+ </div>
138
+ <div className="header-right">
139
+ <div className="header-avatar">
140
+ <img alt="Profile" src={imgProfileDropdown} />
141
+ </div>
142
+ </div>
143
+ </div>
144
+ </div>
145
+
146
+ {/* ── Header: Not Signed In ── */}
147
+ <SubLabel>Header when the user is not signed in</SubLabel>
148
+ <div className="group/nav header-bar rounded-xl overflow-hidden relative">
149
+ <div className="absolute top-2 right-2 opacity-0 group-hover/nav:opacity-100 transition-opacity z-10">
150
+ <CopyButton token="header-bar (no-auth)" />
151
+ </div>
152
+ <div className="header-wrapper">
153
+ <Logo />
154
+ <div className="header-left">
155
+ <div className="header-left-inner">
156
+ <div className="header-nav" />
157
+ </div>
158
+ </div>
159
+ <div className="header-right">
160
+ <a className="navlink-highlight"><span>Sign in</span></a>
161
+ </div>
162
+ </div>
163
+ </div>
164
+ </div>
165
+
166
+ {/* ═══════════ NAVLINKS ═══════════ */}
167
+ <div className="mb-12">
168
+ <SectionTitle>Navlinks</SectionTitle>
169
+
170
+ {/* ── Navlinks used in the header ── */}
171
+ <SubLabel>Navlinks used in the header</SubLabel>
172
+ <div className="flex flex-wrap gap-2.5 items-start mb-8">
173
+ {/* Default */}
174
+ <div className="group/item relative">
175
+ <div className="navlink pointer-events-none"><span>Nav link</span></div>
176
+ <div className="absolute -top-1 -right-1 opacity-0 group-hover/item:opacity-100 transition-opacity">
177
+ <CopyButton token=".navlink" />
178
+ </div>
179
+ </div>
180
+ {/* Active */}
181
+ <div className="group/item relative">
182
+ <div className="navlink-active pointer-events-none"><span>Active</span></div>
183
+ <div className="absolute -top-1 -right-1 opacity-0 group-hover/item:opacity-100 transition-opacity">
184
+ <CopyButton token=".navlink-active" />
185
+ </div>
186
+ </div>
187
+ {/* Hover */}
188
+ <div className="group/item relative">
189
+ <div className="navlink bg-link-hover text-link-hover-foreground pointer-events-none"><span>Hover</span></div>
190
+ <div className="absolute -top-1 -right-1 opacity-0 group-hover/item:opacity-100 transition-opacity">
191
+ <CopyButton token=".navlink (hover state)" />
192
+ </div>
193
+ </div>
194
+ {/* Active Hover */}
195
+ <div className="group/item relative">
196
+ <div className="navlink-active bg-link-hover text-link-hover-foreground pointer-events-none"><span>Active Hover</span></div>
197
+ <div className="absolute -top-1 -right-1 opacity-0 group-hover/item:opacity-100 transition-opacity">
198
+ <CopyButton token=".navlink-active (hover state)" />
199
+ </div>
200
+ </div>
201
+ {/* Highlight */}
202
+ <div className="group/item relative">
203
+ <div className="navlink-highlight pointer-events-none"><span>Highlight</span></div>
204
+ <div className="absolute -top-1 -right-1 opacity-0 group-hover/item:opacity-100 transition-opacity">
205
+ <CopyButton token=".navlink-highlight" />
206
+ </div>
207
+ </div>
208
+ </div>
209
+
210
+ {/* ── Navlinks with icons ── */}
211
+ <SubLabel>Navlinks with icons</SubLabel>
212
+ <div className="flex flex-wrap gap-2.5 items-start">
213
+ {/* Default */}
214
+ <div className="group/item relative">
215
+ <div className="navlink pointer-events-none">
216
+ <div className="flex items-center pr-2 shrink-0"><TestIcon className="fill-foreground" /></div>
217
+ <span>Nav link</span>
218
+ </div>
219
+ <div className="absolute -top-1 -right-1 opacity-0 group-hover/item:opacity-100 transition-opacity">
220
+ <CopyButton token=".navlink + icon" />
221
+ </div>
222
+ </div>
223
+ {/* Active */}
224
+ <div className="group/item relative">
225
+ <div className="navlink-active pointer-events-none">
226
+ <div className="flex items-center pr-2 shrink-0"><TestIcon className="fill-foreground" /></div>
227
+ <span>Active</span>
228
+ </div>
229
+ <div className="absolute -top-1 -right-1 opacity-0 group-hover/item:opacity-100 transition-opacity">
230
+ <CopyButton token=".navlink-active + icon" />
231
+ </div>
232
+ </div>
233
+ {/* Hover */}
234
+ <div className="group/item relative">
235
+ <div className="navlink bg-link-hover text-link-hover-foreground pointer-events-none">
236
+ <div className="flex items-center pr-2 shrink-0"><TestIcon className="fill-link-hover-foreground" /></div>
237
+ <span>Hover</span>
238
+ </div>
239
+ <div className="absolute -top-1 -right-1 opacity-0 group-hover/item:opacity-100 transition-opacity">
240
+ <CopyButton token=".navlink (hover) + icon" />
241
+ </div>
242
+ </div>
243
+ {/* Active Hover */}
244
+ <div className="group/item relative">
245
+ <div className="navlink-active bg-link-hover text-link-hover-foreground pointer-events-none">
246
+ <div className="flex items-center pr-2 shrink-0"><TestIcon className="fill-link-hover-foreground" /></div>
247
+ <span>Active Hover</span>
248
+ </div>
249
+ <div className="absolute -top-1 -right-1 opacity-0 group-hover/item:opacity-100 transition-opacity">
250
+ <CopyButton token=".navlink-active (hover) + icon" />
251
+ </div>
252
+ </div>
253
+ {/* Highlight */}
254
+ <div className="group/item relative">
255
+ <div className="navlink-highlight pointer-events-none">
256
+ <div className="flex items-center pr-2 shrink-0"><TestIcon className="fill-primary-foreground" /></div>
257
+ <span>Highlight</span>
258
+ </div>
259
+ <div className="absolute -top-1 -right-1 opacity-0 group-hover/item:opacity-100 transition-opacity">
260
+ <CopyButton token=".navlink-highlight + icon" />
261
+ </div>
262
+ </div>
263
+ </div>
264
+ </div>
265
+
266
+ {/* ═══════════ TABNAVIGATION ═══════════ */}
267
+ <div>
268
+ <SectionTitle>Tabnavigation</SectionTitle>
269
+
270
+ {/* ── Tab navigation ── */}
271
+ <SubLabel>Tab navigation</SubLabel>
272
+ <div className="mb-8">
273
+ <div className="group/tabs relative flex items-center -ml-[15px]">
274
+ <a className="tablink-active"><span>11 Pages</span></a>
275
+ <a className="tablink"><span>6 checks</span></a>
276
+ <div className="absolute -top-1 right-0 opacity-0 group-hover/tabs:opacity-100 transition-opacity">
277
+ <CopyButton token=".tablink-active | .tablink" />
278
+ </div>
279
+ </div>
280
+ </div>
281
+
282
+ {/* ── Tab navigation with metrics ── */}
283
+ <SubLabel>Tab navigation with metrics</SubLabel>
284
+ <div className="mb-8">
285
+ <div className="group/tabs relative flex items-center -ml-[15px]">
286
+ <a className="tablink-active"><span>11 Pages</span></a>
287
+ <a className="tablink"><span>6 checks</span></a>
288
+ <div className="flex-1" />
289
+ <div className="flex items-center gap-5">
290
+ <div className="tab-metric">
291
+ <CheckCircleFilledIcon />
292
+ <span className="tab-metric-value">50</span>
293
+ </div>
294
+ <div className="tab-metric">
295
+ <CrossCircleFilledIcon />
296
+ <span className="tab-metric-value">10</span>
297
+ </div>
298
+ <div className="tab-metric">
299
+ <BlockedIcon />
300
+ <span className="tab-metric-value">1</span>
301
+ </div>
302
+ </div>
303
+ <div className="absolute -top-1 right-0 opacity-0 group-hover/tabs:opacity-100 transition-opacity">
304
+ <CopyButton token=".tab-metric + .tab-metric-value" />
305
+ </div>
306
+ </div>
307
+ </div>
308
+
309
+ {/* ── Tab navigation navlinks ── */}
310
+ <SubLabel>Tab navigation navlinks</SubLabel>
311
+ <div className="flex flex-wrap gap-2.5 items-start">
312
+ {/* Default (muted) */}
313
+ <div className="group/item relative">
314
+ <div className="tablink pointer-events-none"><span>Navlink</span></div>
315
+ <div className="absolute -top-1 -right-1 opacity-0 group-hover/item:opacity-100 transition-opacity">
316
+ <CopyButton token=".tablink" />
317
+ </div>
318
+ </div>
319
+ {/* Hover (purple + marker) */}
320
+ <div className="group/item relative">
321
+ <div className="tablink-active bg-link-hover text-link-hover-foreground pointer-events-none"><span>Hover</span></div>
322
+ <div className="absolute -top-1 -right-1 opacity-0 group-hover/item:opacity-100 transition-opacity">
323
+ <CopyButton token=".tablink (hover state)" />
324
+ </div>
325
+ </div>
326
+ {/* Active (white + marker) */}
327
+ <div className="group/item relative">
328
+ <div className="tablink-active pointer-events-none"><span>Active</span></div>
329
+ <div className="absolute -top-1 -right-1 opacity-0 group-hover/item:opacity-100 transition-opacity">
330
+ <CopyButton token=".tablink-active" />
331
+ </div>
332
+ </div>
333
+ {/* Active Hover (purple + marker) */}
334
+ <div className="group/item relative">
335
+ <div className="tablink-active bg-link-hover text-link-hover-foreground pointer-events-none"><span>Active Hover</span></div>
336
+ <div className="absolute -top-1 -right-1 opacity-0 group-hover/item:opacity-100 transition-opacity">
337
+ <CopyButton token=".tablink-active (hover state)" />
338
+ </div>
339
+ </div>
340
+ </div>
341
+ </div>
342
+ </section>
343
+ );
344
+ }