@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.
Files changed (56) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/consumer-extras/cursor-skills/exxat-collaboration-access/SKILL.md +3 -1
  3. package/consumer-extras/cursor-skills/exxat-ds-skill/SKILL.md +3 -0
  4. package/consumer-extras/cursor-skills/exxat-primary-nav-secondary-panel/SKILL.md +3 -1
  5. package/consumer-extras/patterns/collaboration-access-pattern.md +2 -0
  6. package/package.json +1 -1
  7. package/src/components/ui/dropdown-menu.tsx +2 -0
  8. package/src/components/ui/popover.tsx +2 -2
  9. package/src/components/ui/select.tsx +1 -1
  10. package/src/components/ui/tooltip.tsx +7 -1
  11. package/src/globals.css +27 -2
  12. package/src/theme.css +4 -2
  13. package/template/AGENTS.md +6 -4
  14. package/template/app/(app)/question-bank/layout.tsx +11 -4
  15. package/template/app/globals.css +34 -2
  16. package/template/components/app-sidebar.tsx +89 -41
  17. package/template/components/ask-leo-sidebar.tsx +1 -2
  18. package/template/components/compliance-board-view.tsx +11 -3
  19. package/template/components/compliance-list-view.tsx +16 -3
  20. package/template/components/compliance-table.tsx +5 -1
  21. package/template/components/data-table/index.tsx +25 -11
  22. package/template/components/data-views/finder-panel-view.tsx +2 -2
  23. package/template/components/data-views/index.ts +19 -0
  24. package/template/components/data-views/list-page-split-details-placeholder.tsx +3 -3
  25. package/template/components/data-views/list-page-split-hub-tokens.ts +1 -1
  26. package/template/components/data-views/list-page-tree-column-header.tsx +1 -1
  27. package/template/components/data-views/outline-tree-menu.tsx +157 -0
  28. package/template/components/data-views/question-bank-folder-tree-branch.tsx +210 -0
  29. package/template/components/exxat-product-logo.tsx +11 -72
  30. package/template/components/folder-details-shell.tsx +1 -1
  31. package/template/components/hub-tree-panel-view.tsx +88 -80
  32. package/template/components/key-metrics.tsx +50 -13
  33. package/template/components/page-header.tsx +19 -10
  34. package/template/components/product-switcher.tsx +1 -4
  35. package/template/components/question-bank-board-view.tsx +11 -2
  36. package/template/components/question-bank-client.tsx +111 -69
  37. package/template/components/question-bank-list-view.tsx +12 -1
  38. package/template/components/question-bank-page-header.tsx +18 -2
  39. package/template/components/question-bank-secondary-nav.tsx +12 -225
  40. package/template/components/question-bank-table.tsx +6 -1
  41. package/template/components/secondary-panel.tsx +1 -1
  42. package/template/components/site-header.tsx +21 -2
  43. package/template/components/team-board-view.tsx +11 -3
  44. package/template/components/team-list-view.tsx +16 -3
  45. package/template/components/team-table.tsx +6 -2
  46. package/template/components/templates/dedicated-search-landing-template.tsx +86 -20
  47. package/template/components/templates/list-page.tsx +1 -3
  48. package/template/components/templates/nested-secondary-panel-shell.tsx +3 -4
  49. package/template/docs/collaboration-access-pattern.md +2 -0
  50. package/template/docs/question-bank-hub-header-pattern.md +25 -0
  51. package/template/hooks/use-secondary-panel-hub-nav.ts +17 -1
  52. package/template/lib/mock/navigation.tsx +30 -1
  53. package/template/lib/question-bank-nav.ts +26 -0
  54. package/template/package.json +3 -3
  55. package/template/components/command-menu-01.tsx +0 -133
  56. 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&nbsp;<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&nbsp;
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&nbsp;
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&nbsp;
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&nbsp;<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&nbsp;
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&nbsp;
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&nbsp;<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&nbsp;
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
- }