@hiroleague/taskmanager 0.0.2 → 0.0.4

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 (179) hide show
  1. package/README.md +1 -1
  2. package/dist/assets/architecture-YZFGNWBL-DoE0KxgG.js +1 -0
  3. package/dist/assets/architectureDiagram-Q4EWVU46-DeuBhy7X.js +36 -0
  4. package/dist/assets/{blockDiagram-DXYQGD6D-DQzEOPT2.js → blockDiagram-DXYQGD6D-BDBy9ns9.js} +1 -1
  5. package/dist/assets/{c4Diagram-AHTNJAMY-B2Yfcwbo.js → c4Diagram-AHTNJAMY-CpqJj_8a.js} +1 -1
  6. package/dist/assets/channel-PHRyjspt.js +1 -0
  7. package/dist/assets/{chunk-2KRD3SAO-C2e-_49I.js → chunk-2KRD3SAO-DEpUsxdZ.js} +1 -1
  8. package/dist/assets/chunk-336JU56O-BGQvSwLk.js +2 -0
  9. package/dist/assets/chunk-426QAEUC-Cl9nQN9c.js +1 -0
  10. package/dist/assets/{chunk-4TB4RGXK-AZq3s1Dh.js → chunk-4TB4RGXK-Dq7aiIrZ.js} +2 -2
  11. package/dist/assets/{chunk-5FUZZQ4R-XEga0hMC.js → chunk-5FUZZQ4R-B_HuuUjf.js} +1 -1
  12. package/dist/assets/{chunk-5PVQY5BW-BrmXs2Gs.js → chunk-5PVQY5BW-cGfZCZGU.js} +2 -2
  13. package/dist/assets/{chunk-67CJDMHE-B1-M78qu.js → chunk-67CJDMHE-BMYAVZfw.js} +1 -1
  14. package/dist/assets/{chunk-7N4EOEYR-D7mYFpz-.js → chunk-7N4EOEYR-Ct-EY7Nc.js} +1 -1
  15. package/dist/assets/{chunk-AA7GKIK3-VWI9k39i.js → chunk-AA7GKIK3-Bd4HFpeo.js} +1 -1
  16. package/dist/assets/{chunk-CIAEETIT-hnu4zamm.js → chunk-CIAEETIT-CrFUkPMT.js} +1 -1
  17. package/dist/assets/{chunk-EDXVE4YY-DxUqDyxy.js → chunk-EDXVE4YY-DMDyt0NF.js} +1 -1
  18. package/dist/assets/{chunk-ENJZ2VHE-BgZKYo1l.js → chunk-ENJZ2VHE-DrWzOrpd.js} +1 -1
  19. package/dist/assets/{chunk-FOC6F5B3-BJsh9nO9.js → chunk-FOC6F5B3-Bemzq96j.js} +1 -1
  20. package/dist/assets/{chunk-ICPOFSXX-BNR1V8rT.js → chunk-ICPOFSXX-DkUVjrLw.js} +5 -5
  21. package/dist/assets/{chunk-K5T4RW27-BLIPdXaZ.js → chunk-K5T4RW27-ALKIf000.js} +5 -5
  22. package/dist/assets/{chunk-KGLVRYIC-DvaW2TkT.js → chunk-KGLVRYIC-Bg6HNTZ-.js} +1 -1
  23. package/dist/assets/{chunk-LIHQZDEY-CUsM0M11.js → chunk-LIHQZDEY-DeyGongE.js} +1 -1
  24. package/dist/assets/{chunk-ORNJ4GCN-CfluNV0_.js → chunk-ORNJ4GCN-Bx83s1bJ.js} +1 -1
  25. package/dist/assets/{chunk-OYMX7WX6-CkWzw4JX.js → chunk-OYMX7WX6-BqRUtRpL.js} +1 -1
  26. package/dist/assets/{chunk-U2HBQHQK-DTJPeU7W.js → chunk-U2HBQHQK-DogcerR6.js} +1 -1
  27. package/dist/assets/{chunk-X2U36JSP-CrTnmMqG.js → chunk-X2U36JSP-CwVWdmZV.js} +1 -1
  28. package/dist/assets/chunk-XPW4576I-DQpNCogT.js +32 -0
  29. package/dist/assets/{chunk-YZCP3GAM-9wq0QKUn.js → chunk-YZCP3GAM-crQSbji9.js} +1 -1
  30. package/dist/assets/{chunk-ZZ45TVLE-D3I1kLlo.js → chunk-ZZ45TVLE-Bk1S1YtS.js} +1 -1
  31. package/dist/assets/classDiagram-6PBFFD2Q-B_TabGaU.js +1 -0
  32. package/dist/assets/classDiagram-v2-HSJHXN6E-CGnZkUWw.js +1 -0
  33. package/dist/assets/clone-D4ka472w.js +1 -0
  34. package/dist/assets/{cose-bilkent-S5V4N54A-BygGvZGW.js → cose-bilkent-S5V4N54A-RBTHUit8.js} +1 -1
  35. package/dist/assets/cytoscape.esm-BGJwlmkf.js +321 -0
  36. package/dist/assets/dagre-B32eYLtm.js +1 -0
  37. package/dist/assets/{dagre-KV5264BT-lveZDhBf.js → dagre-KV5264BT-nX7tuXXn.js} +1 -1
  38. package/dist/assets/diagram-5BDNPKRD-DRxMXlQr.js +10 -0
  39. package/dist/assets/diagram-G4DWMVQ6-CoojevGm.js +24 -0
  40. package/dist/assets/diagram-MMDJMWI5-CWtJyfVW.js +43 -0
  41. package/dist/assets/diagram-TYMM5635-CsDJC4Hq.js +24 -0
  42. package/dist/assets/{erDiagram-SMLLAGMA-dx09stuy.js → erDiagram-SMLLAGMA-Cf7Xtd9A.js} +2 -2
  43. package/dist/assets/{flatten-B2BZ0pzY.js → flatten-CYX_pHZ7.js} +1 -1
  44. package/dist/assets/{flowDiagram-DWJPFMVM-CJi2WISS.js → flowDiagram-DWJPFMVM-DQaeR16a.js} +3 -3
  45. package/dist/assets/{ganttDiagram-T4ZO3ILL-OCTvbRxF.js → ganttDiagram-T4ZO3ILL-8EIcztcH.js} +1 -1
  46. package/dist/assets/gitGraph-7Q5UKJZL-BH9A1SAZ.js +1 -0
  47. package/dist/assets/{gitGraphDiagram-UUTBAWPF-Bjj94M12.js → gitGraphDiagram-UUTBAWPF-DO9ODqYw.js} +1 -1
  48. package/dist/assets/graphlib-bPBqlJKT.js +1 -0
  49. package/dist/assets/identity-Me9aart9.js +1 -0
  50. package/dist/assets/index-BpzHnKdP.css +1 -0
  51. package/dist/assets/index-DmNErTAP.js +273 -0
  52. package/dist/assets/info-OMHHGYJF-BvKR-zWh.js +1 -0
  53. package/dist/assets/infoDiagram-42DDH7IO-pRTXCm5C.js +2 -0
  54. package/dist/assets/isEmpty-Cu0k-j1j.js +1 -0
  55. package/dist/assets/{ishikawaDiagram-UXIWVN3A-Cnc1bwBo.js → ishikawaDiagram-UXIWVN3A-BP2YE5QI.js} +2 -2
  56. package/dist/assets/{journeyDiagram-VCZTEJTY-BkMxoaPq.js → journeyDiagram-VCZTEJTY-B3l2juoL.js} +1 -1
  57. package/dist/assets/{kanban-definition-6JOO6SKY-CwHbIze0.js → kanban-definition-6JOO6SKY-BpIpEOZZ.js} +4 -4
  58. package/dist/assets/{line-DNzQATGr.js → line-otOkzGl8.js} +1 -1
  59. package/dist/assets/mermaid-parser.core-xWsW24Gq.js +4 -0
  60. package/dist/assets/{mindmap-definition-QFDTVHPH-DswAJiEd.js → mindmap-definition-QFDTVHPH-B9khyC7X.js} +3 -3
  61. package/dist/assets/packet-4T2RLAQJ-D8Dw3nmf.js +1 -0
  62. package/dist/assets/pie-ZZUOXDRM-ZghowlAE.js +1 -0
  63. package/dist/assets/{pieDiagram-DEJITSTG-DgQTCddl.js → pieDiagram-DEJITSTG-v32hL3i7.js} +1 -1
  64. package/dist/assets/{quadrantDiagram-34T5L4WZ-c0iZxo2I.js → quadrantDiagram-34T5L4WZ-DIL3GDFt.js} +1 -1
  65. package/dist/assets/radar-PYXPWWZC-D-PK3JOd.js +1 -0
  66. package/dist/assets/reduce-CImcgAcU.js +1 -0
  67. package/dist/assets/{requirementDiagram-MS252O5E-D1moa23Z.js → requirementDiagram-MS252O5E-D8os2-4y.js} +2 -2
  68. package/dist/assets/{sankeyDiagram-XADWPNL6-woJZoQ58.js → sankeyDiagram-XADWPNL6-BV70D4l5.js} +1 -1
  69. package/dist/assets/{sequenceDiagram-FGHM5R23-Dvhj7HGn.js → sequenceDiagram-FGHM5R23-Cwu8hQW1.js} +1 -1
  70. package/dist/assets/stateDiagram-FHFEXIEX-oYUWv7Fb.js +1 -0
  71. package/dist/assets/stateDiagram-v2-QKLJ7IA2-CFUTpFu-.js +1 -0
  72. package/dist/assets/{timeline-definition-GMOUNBTQ-z-IncVmK.js → timeline-definition-GMOUNBTQ-CxSdKxpL.js} +1 -1
  73. package/dist/assets/treeView-SZITEDCU-uVgaJQzG.js +1 -0
  74. package/dist/assets/treemap-W4RFUUIX-Dcad_9AN.js +1 -0
  75. package/dist/assets/vennDiagram-DHZGUBPP-D4wgD7QI.js +34 -0
  76. package/dist/assets/wardley-RL74JXVD-CFXrK8mx.js +1 -0
  77. package/dist/assets/{wardleyDiagram-NUSXRM2D-D-kouujI.js → wardleyDiagram-NUSXRM2D-5Q201ea3.js} +1 -1
  78. package/dist/assets/{xychartDiagram-5P7HB3ND-D1lnM0pL.js → xychartDiagram-5P7HB3ND-BPZv_axd.js} +3 -3
  79. package/dist/index.html +17 -13
  80. package/package.json +2 -4
  81. package/skills/hiro-task-manager-cli/SKILL.md +6 -4
  82. package/skills/hiro-task-manager-cli/reference/cli-access-policy.md +1 -0
  83. package/skills/hiro-task-manager-cli/reference/releases.md +14 -0
  84. package/src/cli/bootstrap/launcher.ts +19 -5
  85. package/src/cli/bootstrap/program.test.ts +46 -0
  86. package/src/cli/bootstrap/program.ts +50 -1
  87. package/src/cli/commands/query.ts +56 -56
  88. package/src/cli/commands/releases.ts +22 -0
  89. package/src/cli/handlers/boards.test.ts +669 -669
  90. package/src/cli/handlers/cli-wiring.test.ts +38 -1
  91. package/src/cli/handlers/releases.ts +15 -0
  92. package/src/cli/handlers/search.test.ts +374 -374
  93. package/src/cli/handlers/search.ts +17 -17
  94. package/src/cli/lib/cli-http-errors.test.ts +85 -85
  95. package/src/cli/lib/launcherUi.test.ts +74 -0
  96. package/src/cli/lib/launcherUi.ts +47 -0
  97. package/src/cli/lib/write/releases.ts +64 -1
  98. package/src/cli/lib/write-result.test.ts +3 -0
  99. package/src/cli/lib/write-result.ts +3 -0
  100. package/src/cli/lib/writeCommands.breadth.test.ts +143 -0
  101. package/src/cli/lib/writeCommands.ts +1 -0
  102. package/src/cli/subprocess.real-stack.test.ts +625 -611
  103. package/src/cli/subprocess.smoke.test.ts +954 -954
  104. package/src/client/api/useBoardChangeStream.ts +421 -168
  105. package/src/client/api/useBoardIndexStream.ts +35 -0
  106. package/src/client/components/board/BoardStatsChips.tsx +233 -233
  107. package/src/client/components/board/BoardStatsContext.tsx +41 -41
  108. package/src/client/components/board/boardHeaderButtonStyles.ts +38 -38
  109. package/src/client/components/board/shortcuts/useBoardShortcutKeydown.ts +49 -49
  110. package/src/client/components/board/useBoardCanvasPanScroll.ts +108 -108
  111. package/src/client/components/board/useBoardTaskContainerDroppableReact.ts +33 -33
  112. package/src/client/components/board/useBoardTaskSortableReact.ts +26 -26
  113. package/src/client/components/layout/AppShell.tsx +5 -2
  114. package/src/client/components/layout/NotificationToasts.tsx +38 -1
  115. package/src/client/components/multi-select.tsx +1206 -1206
  116. package/src/client/components/routing/BoardPage.tsx +20 -20
  117. package/src/client/components/routing/NavigationRegistrar.tsx +13 -13
  118. package/src/client/components/task/TaskCard.tsx +643 -643
  119. package/src/client/components/ui/badge.tsx +49 -49
  120. package/src/client/components/ui/button.tsx +65 -65
  121. package/src/client/components/ui/command.tsx +193 -193
  122. package/src/client/components/ui/dialog.tsx +163 -163
  123. package/src/client/components/ui/input-group.tsx +155 -155
  124. package/src/client/components/ui/input.tsx +19 -19
  125. package/src/client/components/ui/popover.tsx +87 -87
  126. package/src/client/components/ui/separator.tsx +28 -28
  127. package/src/client/components/ui/textarea.tsx +18 -18
  128. package/src/client/index.css +248 -248
  129. package/src/client/lib/appNavigate.ts +16 -16
  130. package/src/client/lib/taskCardDate.ts +111 -111
  131. package/src/client/lib/utils.ts +6 -6
  132. package/src/client/store/notificationUi.ts +14 -0
  133. package/src/server/auth.ts +351 -351
  134. package/src/server/events.ts +31 -4
  135. package/src/server/migrations/registry.ts +43 -43
  136. package/src/server/notificationEvents.ts +8 -1
  137. package/src/server/routes/boards.ts +15 -1
  138. package/src/server/routes/trash.ts +6 -1
  139. package/src/shared/boardEvents.ts +6 -0
  140. package/src/shared/runtimeConfig.ts +256 -256
  141. package/src/shared/skillsInstall.ts +2 -3
  142. package/dist/assets/architecture-YZFGNWBL-C1MoQeSs.js +0 -1
  143. package/dist/assets/architectureDiagram-Q4EWVU46-DUEfvDBu.js +0 -36
  144. package/dist/assets/channel-yBmN_ln0.js +0 -1
  145. package/dist/assets/classDiagram-6PBFFD2Q-Dx_f-9b7.js +0 -1
  146. package/dist/assets/classDiagram-v2-HSJHXN6E-CSfvZ-nt.js +0 -1
  147. package/dist/assets/clone-CXokakwV.js +0 -1
  148. package/dist/assets/cytoscape.esm-BIYWHPG0.js +0 -321
  149. package/dist/assets/dagre-Do0eD9eI.js +0 -1
  150. package/dist/assets/diagram-5BDNPKRD-Dq5yM_uY.js +0 -10
  151. package/dist/assets/diagram-G4DWMVQ6-D-SYOmKm.js +0 -24
  152. package/dist/assets/diagram-MMDJMWI5-lU5t9BZA.js +0 -43
  153. package/dist/assets/diagram-TYMM5635-6tfUbY3R.js +0 -24
  154. package/dist/assets/gitGraph-7Q5UKJZL-BXTuQaDM.js +0 -1
  155. package/dist/assets/graphlib-BIlXYGdM.js +0 -1
  156. package/dist/assets/identity-D4WOnl_h.js +0 -1
  157. package/dist/assets/index-CZZuue3D.js +0 -304
  158. package/dist/assets/index-hMFTu7sr.css +0 -1
  159. package/dist/assets/info-OMHHGYJF-BeeKt8-X.js +0 -1
  160. package/dist/assets/infoDiagram-42DDH7IO-wq_opQKO.js +0 -2
  161. package/dist/assets/mermaid-parser.core-DrLhKJ48.js +0 -4
  162. package/dist/assets/packet-4T2RLAQJ-DQ-H9_jd.js +0 -1
  163. package/dist/assets/pie-ZZUOXDRM-BSj0Jsyj.js +0 -1
  164. package/dist/assets/radar-PYXPWWZC-B7-oRPFL.js +0 -1
  165. package/dist/assets/reduce-Uumu9GdR.js +0 -1
  166. package/dist/assets/stateDiagram-FHFEXIEX-Dx5CjenB.js +0 -1
  167. package/dist/assets/stateDiagram-v2-QKLJ7IA2-C_PkrTdc.js +0 -1
  168. package/dist/assets/treeView-SZITEDCU-CFXle9Az.js +0 -1
  169. package/dist/assets/treemap-W4RFUUIX-CAW3vWh8.js +0 -1
  170. package/dist/assets/vennDiagram-DHZGUBPP-CT1ehozU.js +0 -34
  171. package/dist/assets/wardley-RL74JXVD-7q3ju4kc.js +0 -1
  172. package/scripts/postinstall-message.mjs +0 -160
  173. /package/dist/assets/{chunk-4BX2VUAB-ean5NKtU.js → chunk-4BX2VUAB-C70mcfQR.js} +0 -0
  174. /package/dist/assets/{chunk-55IACEB6-CvSRyJqy.js → chunk-55IACEB6-CWfnqcLM.js} +0 -0
  175. /package/dist/assets/{chunk-BSJP7CBP-D8kBlJsf.js → chunk-BSJP7CBP-B0LrXV9y.js} +0 -0
  176. /package/dist/assets/{chunk-FMBD7UC4-DrNhFt1N.js → chunk-FMBD7UC4-_mV71Mwu.js} +0 -0
  177. /package/dist/assets/{chunk-QZHKN3VN-Csp3OYJY.js → chunk-QZHKN3VN-t2nrsegL.js} +0 -0
  178. /package/dist/assets/{katex-8mXVa4k3.js → katex-B2dtGfSp.js} +0 -0
  179. /package/dist/assets/{rough.esm-DtEqI08j.js → rough.esm-DEh6Frf9.js} +0 -0
@@ -1,49 +1,49 @@
1
- import * as React from "react"
2
- import { cva, type VariantProps } from "class-variance-authority"
3
- import { Slot } from "radix-ui"
4
-
5
- import { cn } from "@/lib/utils"
6
-
7
- const badgeVariants = cva(
8
- "group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-[0.625rem] font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-2.5!",
9
- {
10
- variants: {
11
- variant: {
12
- default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80",
13
- secondary:
14
- "bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",
15
- destructive:
16
- "bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",
17
- outline:
18
- "border-border bg-input/20 text-foreground dark:bg-input/30 [a]:hover:bg-muted [a]:hover:text-muted-foreground",
19
- ghost:
20
- "hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",
21
- link: "text-primary underline-offset-4 hover:underline",
22
- },
23
- },
24
- defaultVariants: {
25
- variant: "default",
26
- },
27
- }
28
- )
29
-
30
- function Badge({
31
- className,
32
- variant = "default",
33
- asChild = false,
34
- ...props
35
- }: React.ComponentProps<"span"> &
36
- VariantProps<typeof badgeVariants> & { asChild?: boolean }) {
37
- const Comp = asChild ? Slot.Root : "span"
38
-
39
- return (
40
- <Comp
41
- data-slot="badge"
42
- data-variant={variant}
43
- className={cn(badgeVariants({ variant }), className)}
44
- {...props}
45
- />
46
- )
47
- }
48
-
49
- export { Badge, badgeVariants }
1
+ import * as React from "react"
2
+ import { cva, type VariantProps } from "class-variance-authority"
3
+ import { Slot } from "radix-ui"
4
+
5
+ import { cn } from "@/lib/utils"
6
+
7
+ const badgeVariants = cva(
8
+ "group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-[0.625rem] font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-2.5!",
9
+ {
10
+ variants: {
11
+ variant: {
12
+ default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80",
13
+ secondary:
14
+ "bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",
15
+ destructive:
16
+ "bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",
17
+ outline:
18
+ "border-border bg-input/20 text-foreground dark:bg-input/30 [a]:hover:bg-muted [a]:hover:text-muted-foreground",
19
+ ghost:
20
+ "hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",
21
+ link: "text-primary underline-offset-4 hover:underline",
22
+ },
23
+ },
24
+ defaultVariants: {
25
+ variant: "default",
26
+ },
27
+ }
28
+ )
29
+
30
+ function Badge({
31
+ className,
32
+ variant = "default",
33
+ asChild = false,
34
+ ...props
35
+ }: React.ComponentProps<"span"> &
36
+ VariantProps<typeof badgeVariants> & { asChild?: boolean }) {
37
+ const Comp = asChild ? Slot.Root : "span"
38
+
39
+ return (
40
+ <Comp
41
+ data-slot="badge"
42
+ data-variant={variant}
43
+ className={cn(badgeVariants({ variant }), className)}
44
+ {...props}
45
+ />
46
+ )
47
+ }
48
+
49
+ export { Badge, badgeVariants }
@@ -1,65 +1,65 @@
1
- import * as React from "react"
2
- import { cva, type VariantProps } from "class-variance-authority"
3
- import { Slot } from "radix-ui"
4
-
5
- import { cn } from "@/lib/utils"
6
-
7
- const buttonVariants = cva(
8
- "group/button inline-flex shrink-0 items-center justify-center rounded-md border border-transparent bg-clip-padding text-xs/relaxed font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
9
- {
10
- variants: {
11
- variant: {
12
- default: "bg-primary text-primary-foreground hover:bg-primary/80",
13
- outline:
14
- "border-border hover:bg-input/50 hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:bg-input/30",
15
- secondary:
16
- "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
17
- ghost:
18
- "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",
19
- destructive:
20
- "bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",
21
- link: "text-primary underline-offset-4 hover:underline",
22
- },
23
- size: {
24
- default:
25
- "h-7 gap-1 px-2 text-xs/relaxed has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
26
- xs: "h-5 gap-1 rounded-sm px-2 text-[0.625rem] has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-2.5",
27
- sm: "h-6 gap-1 px-2 text-xs/relaxed has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
28
- lg: "h-8 gap-1 px-2.5 text-xs/relaxed has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-4",
29
- icon: "size-7 [&_svg:not([class*='size-'])]:size-3.5",
30
- "icon-xs": "size-5 rounded-sm [&_svg:not([class*='size-'])]:size-2.5",
31
- "icon-sm": "size-6 [&_svg:not([class*='size-'])]:size-3",
32
- "icon-lg": "size-8 [&_svg:not([class*='size-'])]:size-4",
33
- },
34
- },
35
- defaultVariants: {
36
- variant: "default",
37
- size: "default",
38
- },
39
- }
40
- )
41
-
42
- function Button({
43
- className,
44
- variant = "default",
45
- size = "default",
46
- asChild = false,
47
- ...props
48
- }: React.ComponentProps<"button"> &
49
- VariantProps<typeof buttonVariants> & {
50
- asChild?: boolean
51
- }) {
52
- const Comp = asChild ? Slot.Root : "button"
53
-
54
- return (
55
- <Comp
56
- data-slot="button"
57
- data-variant={variant}
58
- data-size={size}
59
- className={cn(buttonVariants({ variant, size, className }))}
60
- {...props}
61
- />
62
- )
63
- }
64
-
65
- export { Button, buttonVariants }
1
+ import * as React from "react"
2
+ import { cva, type VariantProps } from "class-variance-authority"
3
+ import { Slot } from "radix-ui"
4
+
5
+ import { cn } from "@/lib/utils"
6
+
7
+ const buttonVariants = cva(
8
+ "group/button inline-flex shrink-0 items-center justify-center rounded-md border border-transparent bg-clip-padding text-xs/relaxed font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
9
+ {
10
+ variants: {
11
+ variant: {
12
+ default: "bg-primary text-primary-foreground hover:bg-primary/80",
13
+ outline:
14
+ "border-border hover:bg-input/50 hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:bg-input/30",
15
+ secondary:
16
+ "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
17
+ ghost:
18
+ "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",
19
+ destructive:
20
+ "bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",
21
+ link: "text-primary underline-offset-4 hover:underline",
22
+ },
23
+ size: {
24
+ default:
25
+ "h-7 gap-1 px-2 text-xs/relaxed has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
26
+ xs: "h-5 gap-1 rounded-sm px-2 text-[0.625rem] has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-2.5",
27
+ sm: "h-6 gap-1 px-2 text-xs/relaxed has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
28
+ lg: "h-8 gap-1 px-2.5 text-xs/relaxed has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-4",
29
+ icon: "size-7 [&_svg:not([class*='size-'])]:size-3.5",
30
+ "icon-xs": "size-5 rounded-sm [&_svg:not([class*='size-'])]:size-2.5",
31
+ "icon-sm": "size-6 [&_svg:not([class*='size-'])]:size-3",
32
+ "icon-lg": "size-8 [&_svg:not([class*='size-'])]:size-4",
33
+ },
34
+ },
35
+ defaultVariants: {
36
+ variant: "default",
37
+ size: "default",
38
+ },
39
+ }
40
+ )
41
+
42
+ function Button({
43
+ className,
44
+ variant = "default",
45
+ size = "default",
46
+ asChild = false,
47
+ ...props
48
+ }: React.ComponentProps<"button"> &
49
+ VariantProps<typeof buttonVariants> & {
50
+ asChild?: boolean
51
+ }) {
52
+ const Comp = asChild ? Slot.Root : "button"
53
+
54
+ return (
55
+ <Comp
56
+ data-slot="button"
57
+ data-variant={variant}
58
+ data-size={size}
59
+ className={cn(buttonVariants({ variant, size, className }))}
60
+ {...props}
61
+ />
62
+ )
63
+ }
64
+
65
+ export { Button, buttonVariants }
@@ -1,193 +1,193 @@
1
- import * as React from "react"
2
- import { Command as CommandPrimitive } from "cmdk"
3
-
4
- import { cn } from "@/lib/utils"
5
- import {
6
- Dialog,
7
- DialogContent,
8
- DialogDescription,
9
- DialogHeader,
10
- DialogTitle,
11
- } from "@/components/ui/dialog"
12
- import {
13
- InputGroup,
14
- InputGroupAddon,
15
- } from "@/components/ui/input-group"
16
- import { SearchIcon, CheckIcon } from "lucide-react"
17
-
18
- function Command({
19
- className,
20
- ...props
21
- }: React.ComponentProps<typeof CommandPrimitive>) {
22
- return (
23
- <CommandPrimitive
24
- data-slot="command"
25
- className={cn(
26
- "flex size-full flex-col overflow-hidden rounded-xl bg-popover p-1 text-popover-foreground",
27
- className
28
- )}
29
- {...props}
30
- />
31
- )
32
- }
33
-
34
- function CommandDialog({
35
- title = "Command Palette",
36
- description = "Search for a command to run...",
37
- children,
38
- className,
39
- showCloseButton = false,
40
- ...props
41
- }: React.ComponentProps<typeof Dialog> & {
42
- title?: string
43
- description?: string
44
- className?: string
45
- showCloseButton?: boolean
46
- }) {
47
- return (
48
- <Dialog {...props}>
49
- <DialogHeader className="sr-only">
50
- <DialogTitle>{title}</DialogTitle>
51
- <DialogDescription>{description}</DialogDescription>
52
- </DialogHeader>
53
- <DialogContent
54
- className={cn(
55
- "top-1/3 translate-y-0 overflow-hidden rounded-xl! p-0",
56
- className
57
- )}
58
- showCloseButton={showCloseButton}
59
- >
60
- {children}
61
- </DialogContent>
62
- </Dialog>
63
- )
64
- }
65
-
66
- function CommandInput({
67
- className,
68
- ...props
69
- }: React.ComponentProps<typeof CommandPrimitive.Input>) {
70
- return (
71
- <div data-slot="command-input-wrapper" className="p-1 pb-0">
72
- <InputGroup className="h-8! bg-input/20 dark:bg-input/30">
73
- <CommandPrimitive.Input
74
- data-slot="command-input"
75
- className={cn(
76
- "w-full text-xs/relaxed outline-hidden disabled:cursor-not-allowed disabled:opacity-50",
77
- className
78
- )}
79
- {...props}
80
- />
81
- <InputGroupAddon>
82
- <SearchIcon className="size-3.5 shrink-0 opacity-50" />
83
- </InputGroupAddon>
84
- </InputGroup>
85
- </div>
86
- )
87
- }
88
-
89
- function CommandList({
90
- className,
91
- ...props
92
- }: React.ComponentProps<typeof CommandPrimitive.List>) {
93
- return (
94
- <CommandPrimitive.List
95
- data-slot="command-list"
96
- className={cn(
97
- "no-scrollbar max-h-72 scroll-py-1 overflow-x-hidden overflow-y-auto outline-none",
98
- className
99
- )}
100
- {...props}
101
- />
102
- )
103
- }
104
-
105
- function CommandEmpty({
106
- className,
107
- ...props
108
- }: React.ComponentProps<typeof CommandPrimitive.Empty>) {
109
- return (
110
- <CommandPrimitive.Empty
111
- data-slot="command-empty"
112
- className={cn("py-6 text-center text-xs/relaxed", className)}
113
- {...props}
114
- />
115
- )
116
- }
117
-
118
- function CommandGroup({
119
- className,
120
- ...props
121
- }: React.ComponentProps<typeof CommandPrimitive.Group>) {
122
- return (
123
- <CommandPrimitive.Group
124
- data-slot="command-group"
125
- className={cn(
126
- "overflow-hidden p-1 text-foreground **:[[cmdk-group-heading]]:px-2.5 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium **:[[cmdk-group-heading]]:text-muted-foreground",
127
- className
128
- )}
129
- {...props}
130
- />
131
- )
132
- }
133
-
134
- function CommandSeparator({
135
- className,
136
- ...props
137
- }: React.ComponentProps<typeof CommandPrimitive.Separator>) {
138
- return (
139
- <CommandPrimitive.Separator
140
- data-slot="command-separator"
141
- className={cn("-mx-1 my-1 h-px bg-border/50", className)}
142
- {...props}
143
- />
144
- )
145
- }
146
-
147
- function CommandItem({
148
- className,
149
- children,
150
- ...props
151
- }: React.ComponentProps<typeof CommandPrimitive.Item>) {
152
- return (
153
- <CommandPrimitive.Item
154
- data-slot="command-item"
155
- className={cn(
156
- "group/command-item relative flex min-h-7 cursor-default items-center gap-2 rounded-md px-2.5 py-1.5 text-xs/relaxed outline-hidden select-none in-data-[slot=dialog-content]:rounded-md data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-selected:bg-muted data-selected:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-3.5 data-selected:*:[svg]:text-foreground",
157
- className
158
- )}
159
- {...props}
160
- >
161
- {children}
162
- <CheckIcon className="ml-auto opacity-0 group-has-data-[slot=command-shortcut]/command-item:hidden group-data-[checked=true]/command-item:opacity-100" />
163
- </CommandPrimitive.Item>
164
- )
165
- }
166
-
167
- function CommandShortcut({
168
- className,
169
- ...props
170
- }: React.ComponentProps<"span">) {
171
- return (
172
- <span
173
- data-slot="command-shortcut"
174
- className={cn(
175
- "ml-auto text-[0.625rem] tracking-widest text-muted-foreground group-data-selected/command-item:text-foreground",
176
- className
177
- )}
178
- {...props}
179
- />
180
- )
181
- }
182
-
183
- export {
184
- Command,
185
- CommandDialog,
186
- CommandInput,
187
- CommandList,
188
- CommandEmpty,
189
- CommandGroup,
190
- CommandItem,
191
- CommandShortcut,
192
- CommandSeparator,
193
- }
1
+ import * as React from "react"
2
+ import { Command as CommandPrimitive } from "cmdk"
3
+
4
+ import { cn } from "@/lib/utils"
5
+ import {
6
+ Dialog,
7
+ DialogContent,
8
+ DialogDescription,
9
+ DialogHeader,
10
+ DialogTitle,
11
+ } from "@/components/ui/dialog"
12
+ import {
13
+ InputGroup,
14
+ InputGroupAddon,
15
+ } from "@/components/ui/input-group"
16
+ import { SearchIcon, CheckIcon } from "lucide-react"
17
+
18
+ function Command({
19
+ className,
20
+ ...props
21
+ }: React.ComponentProps<typeof CommandPrimitive>) {
22
+ return (
23
+ <CommandPrimitive
24
+ data-slot="command"
25
+ className={cn(
26
+ "flex size-full flex-col overflow-hidden rounded-xl bg-popover p-1 text-popover-foreground",
27
+ className
28
+ )}
29
+ {...props}
30
+ />
31
+ )
32
+ }
33
+
34
+ function CommandDialog({
35
+ title = "Command Palette",
36
+ description = "Search for a command to run...",
37
+ children,
38
+ className,
39
+ showCloseButton = false,
40
+ ...props
41
+ }: React.ComponentProps<typeof Dialog> & {
42
+ title?: string
43
+ description?: string
44
+ className?: string
45
+ showCloseButton?: boolean
46
+ }) {
47
+ return (
48
+ <Dialog {...props}>
49
+ <DialogHeader className="sr-only">
50
+ <DialogTitle>{title}</DialogTitle>
51
+ <DialogDescription>{description}</DialogDescription>
52
+ </DialogHeader>
53
+ <DialogContent
54
+ className={cn(
55
+ "top-1/3 translate-y-0 overflow-hidden rounded-xl! p-0",
56
+ className
57
+ )}
58
+ showCloseButton={showCloseButton}
59
+ >
60
+ {children}
61
+ </DialogContent>
62
+ </Dialog>
63
+ )
64
+ }
65
+
66
+ function CommandInput({
67
+ className,
68
+ ...props
69
+ }: React.ComponentProps<typeof CommandPrimitive.Input>) {
70
+ return (
71
+ <div data-slot="command-input-wrapper" className="p-1 pb-0">
72
+ <InputGroup className="h-8! bg-input/20 dark:bg-input/30">
73
+ <CommandPrimitive.Input
74
+ data-slot="command-input"
75
+ className={cn(
76
+ "w-full text-xs/relaxed outline-hidden disabled:cursor-not-allowed disabled:opacity-50",
77
+ className
78
+ )}
79
+ {...props}
80
+ />
81
+ <InputGroupAddon>
82
+ <SearchIcon className="size-3.5 shrink-0 opacity-50" />
83
+ </InputGroupAddon>
84
+ </InputGroup>
85
+ </div>
86
+ )
87
+ }
88
+
89
+ function CommandList({
90
+ className,
91
+ ...props
92
+ }: React.ComponentProps<typeof CommandPrimitive.List>) {
93
+ return (
94
+ <CommandPrimitive.List
95
+ data-slot="command-list"
96
+ className={cn(
97
+ "no-scrollbar max-h-72 scroll-py-1 overflow-x-hidden overflow-y-auto outline-none",
98
+ className
99
+ )}
100
+ {...props}
101
+ />
102
+ )
103
+ }
104
+
105
+ function CommandEmpty({
106
+ className,
107
+ ...props
108
+ }: React.ComponentProps<typeof CommandPrimitive.Empty>) {
109
+ return (
110
+ <CommandPrimitive.Empty
111
+ data-slot="command-empty"
112
+ className={cn("py-6 text-center text-xs/relaxed", className)}
113
+ {...props}
114
+ />
115
+ )
116
+ }
117
+
118
+ function CommandGroup({
119
+ className,
120
+ ...props
121
+ }: React.ComponentProps<typeof CommandPrimitive.Group>) {
122
+ return (
123
+ <CommandPrimitive.Group
124
+ data-slot="command-group"
125
+ className={cn(
126
+ "overflow-hidden p-1 text-foreground **:[[cmdk-group-heading]]:px-2.5 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium **:[[cmdk-group-heading]]:text-muted-foreground",
127
+ className
128
+ )}
129
+ {...props}
130
+ />
131
+ )
132
+ }
133
+
134
+ function CommandSeparator({
135
+ className,
136
+ ...props
137
+ }: React.ComponentProps<typeof CommandPrimitive.Separator>) {
138
+ return (
139
+ <CommandPrimitive.Separator
140
+ data-slot="command-separator"
141
+ className={cn("-mx-1 my-1 h-px bg-border/50", className)}
142
+ {...props}
143
+ />
144
+ )
145
+ }
146
+
147
+ function CommandItem({
148
+ className,
149
+ children,
150
+ ...props
151
+ }: React.ComponentProps<typeof CommandPrimitive.Item>) {
152
+ return (
153
+ <CommandPrimitive.Item
154
+ data-slot="command-item"
155
+ className={cn(
156
+ "group/command-item relative flex min-h-7 cursor-default items-center gap-2 rounded-md px-2.5 py-1.5 text-xs/relaxed outline-hidden select-none in-data-[slot=dialog-content]:rounded-md data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-selected:bg-muted data-selected:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-3.5 data-selected:*:[svg]:text-foreground",
157
+ className
158
+ )}
159
+ {...props}
160
+ >
161
+ {children}
162
+ <CheckIcon className="ml-auto opacity-0 group-has-data-[slot=command-shortcut]/command-item:hidden group-data-[checked=true]/command-item:opacity-100" />
163
+ </CommandPrimitive.Item>
164
+ )
165
+ }
166
+
167
+ function CommandShortcut({
168
+ className,
169
+ ...props
170
+ }: React.ComponentProps<"span">) {
171
+ return (
172
+ <span
173
+ data-slot="command-shortcut"
174
+ className={cn(
175
+ "ml-auto text-[0.625rem] tracking-widest text-muted-foreground group-data-selected/command-item:text-foreground",
176
+ className
177
+ )}
178
+ {...props}
179
+ />
180
+ )
181
+ }
182
+
183
+ export {
184
+ Command,
185
+ CommandDialog,
186
+ CommandInput,
187
+ CommandList,
188
+ CommandEmpty,
189
+ CommandGroup,
190
+ CommandItem,
191
+ CommandShortcut,
192
+ CommandSeparator,
193
+ }