@exxatdesignux/ui 0.2.14 → 0.2.16
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/CHANGELOG.md +20 -0
- package/consumer-extras/cursor-skills/exxat-collaboration-access/SKILL.md +3 -1
- package/consumer-extras/cursor-skills/exxat-ds-skill/SKILL.md +3 -0
- package/consumer-extras/cursor-skills/exxat-primary-nav-secondary-panel/SKILL.md +3 -1
- package/consumer-extras/patterns/collaboration-access-pattern.md +2 -0
- package/package.json +1 -1
- package/src/components/ui/dropdown-menu.tsx +2 -0
- package/src/components/ui/popover.tsx +2 -2
- package/src/components/ui/select.tsx +1 -1
- package/src/components/ui/tooltip.tsx +7 -1
- package/src/globals.css +27 -2
- package/src/theme.css +4 -2
- package/template/AGENTS.md +6 -4
- package/template/app/(app)/question-bank/layout.tsx +11 -4
- package/template/app/globals.css +34 -2
- package/template/components/app-sidebar.tsx +89 -41
- package/template/components/ask-leo-sidebar.tsx +1 -2
- package/template/components/compliance-board-view.tsx +11 -3
- package/template/components/compliance-list-view.tsx +16 -3
- package/template/components/compliance-table.tsx +5 -1
- package/template/components/data-table/index.tsx +25 -11
- package/template/components/data-views/finder-panel-view.tsx +2 -2
- package/template/components/data-views/index.ts +19 -0
- package/template/components/data-views/list-page-split-details-placeholder.tsx +3 -3
- package/template/components/data-views/list-page-split-hub-tokens.ts +1 -1
- package/template/components/data-views/list-page-tree-column-header.tsx +1 -1
- package/template/components/data-views/outline-tree-menu.tsx +157 -0
- package/template/components/data-views/question-bank-folder-tree-branch.tsx +210 -0
- package/template/components/exxat-product-logo.tsx +11 -72
- package/template/components/folder-details-shell.tsx +1 -1
- package/template/components/hub-tree-panel-view.tsx +88 -80
- package/template/components/key-metrics.tsx +50 -13
- package/template/components/page-header.tsx +19 -10
- package/template/components/product-switcher.tsx +1 -4
- package/template/components/question-bank-board-view.tsx +11 -2
- package/template/components/question-bank-client.tsx +111 -69
- package/template/components/question-bank-list-view.tsx +12 -1
- package/template/components/question-bank-page-header.tsx +18 -2
- package/template/components/question-bank-secondary-nav.tsx +12 -225
- package/template/components/question-bank-table.tsx +6 -1
- package/template/components/secondary-panel.tsx +1 -1
- package/template/components/site-header.tsx +21 -2
- package/template/components/team-board-view.tsx +11 -3
- package/template/components/team-list-view.tsx +16 -3
- package/template/components/team-table.tsx +6 -2
- package/template/components/templates/dedicated-search-landing-template.tsx +86 -20
- package/template/components/templates/list-page.tsx +1 -3
- package/template/components/templates/nested-secondary-panel-shell.tsx +3 -4
- package/template/docs/collaboration-access-pattern.md +2 -0
- package/template/docs/question-bank-hub-header-pattern.md +25 -0
- package/template/hooks/use-secondary-panel-hub-nav.ts +17 -1
- package/template/lib/mock/navigation.tsx +30 -1
- package/template/lib/question-bank-nav.ts +26 -0
- package/template/package.json +3 -3
- package/template/components/command-menu-01.tsx +0 -133
- package/template/components/command-menu-02.tsx +0 -386
|
@@ -1,386 +0,0 @@
|
|
|
1
|
-
"use client"
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
IconArrowRight,
|
|
5
|
-
IconAt,
|
|
6
|
-
IconCopy,
|
|
7
|
-
IconDeviceDesktop,
|
|
8
|
-
IconDownload,
|
|
9
|
-
IconFile,
|
|
10
|
-
IconFileSearch,
|
|
11
|
-
IconKeyboard,
|
|
12
|
-
IconLink,
|
|
13
|
-
IconLogout,
|
|
14
|
-
IconMessage,
|
|
15
|
-
IconPencil,
|
|
16
|
-
IconPlus,
|
|
17
|
-
IconSend,
|
|
18
|
-
IconSettings,
|
|
19
|
-
IconTemplate,
|
|
20
|
-
IconUser,
|
|
21
|
-
IconUsers,
|
|
22
|
-
} from "@tabler/icons-react"
|
|
23
|
-
import { useEffect, useState } from "react"
|
|
24
|
-
import { Button } from "@/components/ui/button"
|
|
25
|
-
import {
|
|
26
|
-
Command,
|
|
27
|
-
CommandEmpty,
|
|
28
|
-
CommandGroup,
|
|
29
|
-
CommandInput,
|
|
30
|
-
CommandItem,
|
|
31
|
-
CommandList,
|
|
32
|
-
} from "@/components/ui/command"
|
|
33
|
-
import {
|
|
34
|
-
Dialog,
|
|
35
|
-
DialogContent,
|
|
36
|
-
DialogDescription,
|
|
37
|
-
DialogHeader,
|
|
38
|
-
DialogTitle,
|
|
39
|
-
} from "@/components/ui/dialog"
|
|
40
|
-
import { Kbd, KbdGroup } from "@/components/ui/kbd"
|
|
41
|
-
|
|
42
|
-
export function CommandMenu02() {
|
|
43
|
-
const [open, setOpen] = useState(false)
|
|
44
|
-
const [inputValue, setInputValue] = useState("")
|
|
45
|
-
|
|
46
|
-
useEffect(() => {
|
|
47
|
-
const down = (e: KeyboardEvent) => {
|
|
48
|
-
if (e.key === "k" && (e.metaKey || e.ctrlKey)) {
|
|
49
|
-
e.preventDefault()
|
|
50
|
-
setOpen((prev) => !prev)
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
document.addEventListener("keydown", down)
|
|
55
|
-
return () => document.removeEventListener("keydown", down)
|
|
56
|
-
}, [])
|
|
57
|
-
|
|
58
|
-
return (
|
|
59
|
-
<>
|
|
60
|
-
<Button onClick={() => setOpen(true)} type="button" variant="outline">
|
|
61
|
-
Open Command Menu
|
|
62
|
-
</Button>
|
|
63
|
-
|
|
64
|
-
<Dialog onOpenChange={setOpen} open={open}>
|
|
65
|
-
<DialogContent
|
|
66
|
-
className="max-w-[min(42rem,calc(100%-2rem))] gap-0 overflow-hidden rounded-xl border-border/50 p-0 ring-0 shadow-[0_0_0_1px_color-mix(in_oklch,var(--brand-color)_48%,transparent),0_0_72px_-14px_color-mix(in_oklch,var(--brand-color)_58%,transparent),0_10px_15px_-3px_oklch(0_0_0_/_0.1)] dark:shadow-[0_0_0_1px_color-mix(in_oklch,var(--brand-color)_55%,transparent),0_0_80px_-12px_color-mix(in_oklch,var(--brand-color)_65%,transparent),0_10px_15px_-3px_oklch(0_0_0_/_0.35)] sm:max-w-3xl md:max-w-4xl"
|
|
67
|
-
showCloseButton={false}
|
|
68
|
-
>
|
|
69
|
-
<DialogHeader className="sr-only">
|
|
70
|
-
<DialogTitle>Command Menu</DialogTitle>
|
|
71
|
-
<DialogDescription>
|
|
72
|
-
Use the command menu to navigate through the app.
|
|
73
|
-
</DialogDescription>
|
|
74
|
-
</DialogHeader>
|
|
75
|
-
<Command className="flex h-full w-full flex-col overflow-hidden bg-popover p-0">
|
|
76
|
-
<div className="flex h-12 items-center gap-2 border-border/50 border-b px-4">
|
|
77
|
-
<CommandInput
|
|
78
|
-
variant="palette"
|
|
79
|
-
onValueChange={setInputValue}
|
|
80
|
-
placeholder="What do you need?"
|
|
81
|
-
value={inputValue}
|
|
82
|
-
/>
|
|
83
|
-
<Button
|
|
84
|
-
type="button"
|
|
85
|
-
variant="ghost"
|
|
86
|
-
size="icon-sm"
|
|
87
|
-
tabIndex={-1}
|
|
88
|
-
className="shrink-0 text-muted-foreground hover:text-foreground"
|
|
89
|
-
aria-label="Close command menu"
|
|
90
|
-
onClick={() => setOpen(false)}
|
|
91
|
-
>
|
|
92
|
-
<Kbd>Esc</Kbd>
|
|
93
|
-
</Button>
|
|
94
|
-
</div>
|
|
95
|
-
|
|
96
|
-
<CommandList className="max-h-[min(640px,72vh)] py-2">
|
|
97
|
-
<CommandEmpty>No results found.</CommandEmpty>
|
|
98
|
-
|
|
99
|
-
<CommandGroup>
|
|
100
|
-
<CommandItem
|
|
101
|
-
className="mx-2 rounded-lg py-2.5"
|
|
102
|
-
onSelect={() => setOpen(false)}
|
|
103
|
-
>
|
|
104
|
-
<IconSettings aria-hidden />
|
|
105
|
-
Account Settings...
|
|
106
|
-
<KbdGroup className="ml-auto">
|
|
107
|
-
<Kbd>⌘</Kbd>
|
|
108
|
-
<Kbd>,</Kbd>
|
|
109
|
-
</KbdGroup>
|
|
110
|
-
</CommandItem>
|
|
111
|
-
<CommandItem
|
|
112
|
-
className="mx-2 rounded-lg py-2.5"
|
|
113
|
-
onSelect={() => setOpen(false)}
|
|
114
|
-
>
|
|
115
|
-
<IconUser aria-hidden />
|
|
116
|
-
Switch Workspace...
|
|
117
|
-
</CommandItem>
|
|
118
|
-
<CommandItem
|
|
119
|
-
className="mx-2 rounded-lg py-2.5"
|
|
120
|
-
onSelect={() => setOpen(false)}
|
|
121
|
-
>
|
|
122
|
-
<IconLogout aria-hidden />
|
|
123
|
-
Log Out
|
|
124
|
-
<KbdGroup className="ml-auto">
|
|
125
|
-
<Kbd>⌘</Kbd>
|
|
126
|
-
<Kbd>Q</Kbd>
|
|
127
|
-
</KbdGroup>
|
|
128
|
-
</CommandItem>
|
|
129
|
-
</CommandGroup>
|
|
130
|
-
|
|
131
|
-
<CommandGroup heading="Documents">
|
|
132
|
-
<CommandItem
|
|
133
|
-
className="mx-2 rounded-lg py-2.5"
|
|
134
|
-
onSelect={() => setOpen(false)}
|
|
135
|
-
>
|
|
136
|
-
<IconFile aria-hidden />
|
|
137
|
-
Search Documents...
|
|
138
|
-
<KbdGroup className="ml-auto">
|
|
139
|
-
<Kbd>⌘</Kbd>
|
|
140
|
-
<Kbd>F</Kbd>
|
|
141
|
-
</KbdGroup>
|
|
142
|
-
</CommandItem>
|
|
143
|
-
<CommandItem
|
|
144
|
-
className="mx-2 rounded-lg py-2.5"
|
|
145
|
-
onSelect={() => setOpen(false)}
|
|
146
|
-
>
|
|
147
|
-
<IconPlus aria-hidden />
|
|
148
|
-
Create New Document...
|
|
149
|
-
<KbdGroup className="ml-auto">
|
|
150
|
-
<Kbd>⌘</Kbd>
|
|
151
|
-
<Kbd>N</Kbd>
|
|
152
|
-
</KbdGroup>
|
|
153
|
-
</CommandItem>
|
|
154
|
-
<CommandItem
|
|
155
|
-
className="mx-2 rounded-lg py-2.5"
|
|
156
|
-
onSelect={() => setOpen(false)}
|
|
157
|
-
>
|
|
158
|
-
<IconFile aria-hidden />
|
|
159
|
-
Upload Document...
|
|
160
|
-
<KbdGroup className="ml-auto">
|
|
161
|
-
<Kbd>⌘</Kbd>
|
|
162
|
-
<Kbd>U</Kbd>
|
|
163
|
-
</KbdGroup>
|
|
164
|
-
</CommandItem>
|
|
165
|
-
</CommandGroup>
|
|
166
|
-
|
|
167
|
-
<CommandGroup heading="Signing">
|
|
168
|
-
<CommandItem
|
|
169
|
-
className="mx-2 rounded-lg py-2.5"
|
|
170
|
-
onSelect={() => setOpen(false)}
|
|
171
|
-
>
|
|
172
|
-
<IconSend aria-hidden />
|
|
173
|
-
Request Signature...
|
|
174
|
-
</CommandItem>
|
|
175
|
-
<CommandItem
|
|
176
|
-
className="mx-2 rounded-lg py-2.5"
|
|
177
|
-
onSelect={() => setOpen(false)}
|
|
178
|
-
>
|
|
179
|
-
<IconPencil aria-hidden />
|
|
180
|
-
Sign a Document...
|
|
181
|
-
</CommandItem>
|
|
182
|
-
<CommandItem
|
|
183
|
-
className="mx-2 rounded-lg py-2.5"
|
|
184
|
-
onSelect={() => setOpen(false)}
|
|
185
|
-
>
|
|
186
|
-
<IconUsers aria-hidden />
|
|
187
|
-
Bulk Send for Signature...
|
|
188
|
-
</CommandItem>
|
|
189
|
-
</CommandGroup>
|
|
190
|
-
|
|
191
|
-
<CommandGroup heading="Templates">
|
|
192
|
-
<CommandItem
|
|
193
|
-
className="mx-2 rounded-lg py-2.5"
|
|
194
|
-
onSelect={() => setOpen(false)}
|
|
195
|
-
>
|
|
196
|
-
<IconTemplate aria-hidden />
|
|
197
|
-
Search Templates...
|
|
198
|
-
</CommandItem>
|
|
199
|
-
<CommandItem
|
|
200
|
-
className="mx-2 rounded-lg py-2.5"
|
|
201
|
-
onSelect={() => setOpen(false)}
|
|
202
|
-
>
|
|
203
|
-
<IconPlus aria-hidden />
|
|
204
|
-
Create New Template...
|
|
205
|
-
</CommandItem>
|
|
206
|
-
</CommandGroup>
|
|
207
|
-
|
|
208
|
-
<CommandGroup heading="General">
|
|
209
|
-
<CommandItem
|
|
210
|
-
className="mx-2 rounded-lg py-2.5"
|
|
211
|
-
onSelect={() => setOpen(false)}
|
|
212
|
-
>
|
|
213
|
-
<IconDeviceDesktop aria-hidden />
|
|
214
|
-
Change Theme...
|
|
215
|
-
<KbdGroup className="ml-auto">
|
|
216
|
-
<Kbd>⌘</Kbd>
|
|
217
|
-
<Kbd>T</Kbd>
|
|
218
|
-
</KbdGroup>
|
|
219
|
-
</CommandItem>
|
|
220
|
-
<CommandItem
|
|
221
|
-
className="mx-2 rounded-lg py-2.5"
|
|
222
|
-
onSelect={() => setOpen(false)}
|
|
223
|
-
>
|
|
224
|
-
<IconCopy aria-hidden />
|
|
225
|
-
Copy Current URL
|
|
226
|
-
<KbdGroup className="ml-auto">
|
|
227
|
-
<Kbd>⌘</Kbd>
|
|
228
|
-
<Kbd>⇧</Kbd>
|
|
229
|
-
<Kbd>C</Kbd>
|
|
230
|
-
</KbdGroup>
|
|
231
|
-
</CommandItem>
|
|
232
|
-
</CommandGroup>
|
|
233
|
-
|
|
234
|
-
<CommandGroup heading="Navigation">
|
|
235
|
-
<CommandItem
|
|
236
|
-
className="mx-2 rounded-lg py-2.5"
|
|
237
|
-
onSelect={() => setOpen(false)}
|
|
238
|
-
>
|
|
239
|
-
<IconArrowRight aria-hidden />
|
|
240
|
-
<span>
|
|
241
|
-
Go to <strong className="font-semibold">Inbox</strong>
|
|
242
|
-
</span>
|
|
243
|
-
</CommandItem>
|
|
244
|
-
<CommandItem
|
|
245
|
-
className="mx-2 rounded-lg py-2.5"
|
|
246
|
-
onSelect={() => setOpen(false)}
|
|
247
|
-
>
|
|
248
|
-
<IconArrowRight aria-hidden />
|
|
249
|
-
<span>
|
|
250
|
-
Go to
|
|
251
|
-
<strong className="font-semibold">Action Required</strong>
|
|
252
|
-
</span>
|
|
253
|
-
</CommandItem>
|
|
254
|
-
<CommandItem
|
|
255
|
-
className="mx-2 rounded-lg py-2.5"
|
|
256
|
-
onSelect={() => setOpen(false)}
|
|
257
|
-
>
|
|
258
|
-
<IconArrowRight aria-hidden />
|
|
259
|
-
<span>
|
|
260
|
-
Go to
|
|
261
|
-
<strong className="font-semibold">
|
|
262
|
-
Waiting for Others
|
|
263
|
-
</strong>
|
|
264
|
-
</span>
|
|
265
|
-
</CommandItem>
|
|
266
|
-
<CommandItem
|
|
267
|
-
className="mx-2 rounded-lg py-2.5"
|
|
268
|
-
onSelect={() => setOpen(false)}
|
|
269
|
-
>
|
|
270
|
-
<IconArrowRight aria-hidden />
|
|
271
|
-
<span>
|
|
272
|
-
Go to
|
|
273
|
-
<strong className="font-semibold">Completed</strong>
|
|
274
|
-
</span>
|
|
275
|
-
</CommandItem>
|
|
276
|
-
<CommandItem
|
|
277
|
-
className="mx-2 rounded-lg py-2.5"
|
|
278
|
-
onSelect={() => setOpen(false)}
|
|
279
|
-
>
|
|
280
|
-
<IconArrowRight aria-hidden />
|
|
281
|
-
<span>
|
|
282
|
-
Go to <strong className="font-semibold">Drafts</strong>
|
|
283
|
-
</span>
|
|
284
|
-
</CommandItem>
|
|
285
|
-
<CommandItem
|
|
286
|
-
className="mx-2 rounded-lg py-2.5"
|
|
287
|
-
onSelect={() => setOpen(false)}
|
|
288
|
-
>
|
|
289
|
-
<IconArrowRight aria-hidden />
|
|
290
|
-
<span>
|
|
291
|
-
Go to
|
|
292
|
-
<strong className="font-semibold">Templates</strong>
|
|
293
|
-
</span>
|
|
294
|
-
</CommandItem>
|
|
295
|
-
<CommandItem
|
|
296
|
-
className="mx-2 rounded-lg py-2.5"
|
|
297
|
-
onSelect={() => setOpen(false)}
|
|
298
|
-
>
|
|
299
|
-
<IconArrowRight aria-hidden />
|
|
300
|
-
<span>
|
|
301
|
-
Go to
|
|
302
|
-
<strong className="font-semibold">Archive</strong>
|
|
303
|
-
</span>
|
|
304
|
-
</CommandItem>
|
|
305
|
-
<CommandItem
|
|
306
|
-
className="mx-2 rounded-lg py-2.5"
|
|
307
|
-
onSelect={() => setOpen(false)}
|
|
308
|
-
>
|
|
309
|
-
<IconArrowRight aria-hidden />
|
|
310
|
-
<span>
|
|
311
|
-
Go to <strong className="font-semibold">Trash</strong>
|
|
312
|
-
</span>
|
|
313
|
-
</CommandItem>
|
|
314
|
-
<CommandItem
|
|
315
|
-
className="mx-2 rounded-lg py-2.5"
|
|
316
|
-
onSelect={() => setOpen(false)}
|
|
317
|
-
>
|
|
318
|
-
<IconArrowRight aria-hidden />
|
|
319
|
-
<span>
|
|
320
|
-
Go to
|
|
321
|
-
<strong className="font-semibold">Settings</strong>
|
|
322
|
-
</span>
|
|
323
|
-
</CommandItem>
|
|
324
|
-
</CommandGroup>
|
|
325
|
-
|
|
326
|
-
<CommandGroup heading="Quick Actions">
|
|
327
|
-
<CommandItem
|
|
328
|
-
className="mx-2 rounded-lg py-2.5"
|
|
329
|
-
onSelect={() => setOpen(false)}
|
|
330
|
-
>
|
|
331
|
-
<IconLink aria-hidden />
|
|
332
|
-
Copy Signing Link
|
|
333
|
-
</CommandItem>
|
|
334
|
-
<CommandItem
|
|
335
|
-
className="mx-2 rounded-lg py-2.5"
|
|
336
|
-
onSelect={() => setOpen(false)}
|
|
337
|
-
>
|
|
338
|
-
<IconDownload aria-hidden />
|
|
339
|
-
Download Document
|
|
340
|
-
</CommandItem>
|
|
341
|
-
</CommandGroup>
|
|
342
|
-
|
|
343
|
-
<CommandGroup heading="Help">
|
|
344
|
-
<CommandItem
|
|
345
|
-
className="mx-2 rounded-lg py-2.5"
|
|
346
|
-
onSelect={() => setOpen(false)}
|
|
347
|
-
>
|
|
348
|
-
<IconFileSearch aria-hidden />
|
|
349
|
-
Search Help Center...
|
|
350
|
-
</CommandItem>
|
|
351
|
-
<CommandItem
|
|
352
|
-
className="mx-2 rounded-lg py-2.5"
|
|
353
|
-
onSelect={() => setOpen(false)}
|
|
354
|
-
>
|
|
355
|
-
<IconMessage aria-hidden />
|
|
356
|
-
Send Feedback...
|
|
357
|
-
</CommandItem>
|
|
358
|
-
<CommandItem
|
|
359
|
-
className="mx-2 rounded-lg py-2.5"
|
|
360
|
-
onSelect={() => setOpen(false)}
|
|
361
|
-
>
|
|
362
|
-
<IconAt aria-hidden />
|
|
363
|
-
Contact Support
|
|
364
|
-
</CommandItem>
|
|
365
|
-
</CommandGroup>
|
|
366
|
-
|
|
367
|
-
<CommandGroup heading="Keyboard Shortcuts">
|
|
368
|
-
<CommandItem
|
|
369
|
-
className="mx-2 rounded-lg py-2.5"
|
|
370
|
-
onSelect={() => setOpen(false)}
|
|
371
|
-
>
|
|
372
|
-
<IconKeyboard aria-hidden />
|
|
373
|
-
View Keyboard Shortcuts
|
|
374
|
-
<KbdGroup className="ml-auto">
|
|
375
|
-
<Kbd>⌘</Kbd>
|
|
376
|
-
<Kbd>/</Kbd>
|
|
377
|
-
</KbdGroup>
|
|
378
|
-
</CommandItem>
|
|
379
|
-
</CommandGroup>
|
|
380
|
-
</CommandList>
|
|
381
|
-
</Command>
|
|
382
|
-
</DialogContent>
|
|
383
|
-
</Dialog>
|
|
384
|
-
</>
|
|
385
|
-
)
|
|
386
|
-
}
|