@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,163 +1,163 @@
1
- import * as React from "react"
2
- import { Dialog as DialogPrimitive } from "radix-ui"
3
-
4
- import { cn } from "@/lib/utils"
5
- import { Button } from "@/components/ui/button"
6
- import { XIcon } from "lucide-react"
7
-
8
- function Dialog({
9
- ...props
10
- }: React.ComponentProps<typeof DialogPrimitive.Root>) {
11
- return <DialogPrimitive.Root data-slot="dialog" {...props} />
12
- }
13
-
14
- function DialogTrigger({
15
- ...props
16
- }: React.ComponentProps<typeof DialogPrimitive.Trigger>) {
17
- return <DialogPrimitive.Trigger data-slot="dialog-trigger" {...props} />
18
- }
19
-
20
- function DialogPortal({
21
- ...props
22
- }: React.ComponentProps<typeof DialogPrimitive.Portal>) {
23
- return <DialogPrimitive.Portal data-slot="dialog-portal" {...props} />
24
- }
25
-
26
- function DialogClose({
27
- ...props
28
- }: React.ComponentProps<typeof DialogPrimitive.Close>) {
29
- return <DialogPrimitive.Close data-slot="dialog-close" {...props} />
30
- }
31
-
32
- function DialogOverlay({
33
- className,
34
- ...props
35
- }: React.ComponentProps<typeof DialogPrimitive.Overlay>) {
36
- return (
37
- <DialogPrimitive.Overlay
38
- data-slot="dialog-overlay"
39
- className={cn(
40
- "fixed inset-0 isolate z-50 bg-black/80 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
41
- className
42
- )}
43
- {...props}
44
- />
45
- )
46
- }
47
-
48
- function DialogContent({
49
- className,
50
- children,
51
- showCloseButton = true,
52
- ...props
53
- }: React.ComponentProps<typeof DialogPrimitive.Content> & {
54
- showCloseButton?: boolean
55
- }) {
56
- return (
57
- <DialogPortal>
58
- <DialogOverlay />
59
- <DialogPrimitive.Content
60
- data-slot="dialog-content"
61
- className={cn(
62
- "fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-xs/relaxed text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
63
- className
64
- )}
65
- {...props}
66
- >
67
- {children}
68
- {showCloseButton && (
69
- <DialogPrimitive.Close data-slot="dialog-close" asChild>
70
- <Button
71
- variant="ghost"
72
- className="absolute top-2 right-2"
73
- size="icon-sm"
74
- >
75
- <XIcon
76
- />
77
- <span className="sr-only">Close</span>
78
- </Button>
79
- </DialogPrimitive.Close>
80
- )}
81
- </DialogPrimitive.Content>
82
- </DialogPortal>
83
- )
84
- }
85
-
86
- function DialogHeader({ className, ...props }: React.ComponentProps<"div">) {
87
- return (
88
- <div
89
- data-slot="dialog-header"
90
- className={cn("flex flex-col gap-1", className)}
91
- {...props}
92
- />
93
- )
94
- }
95
-
96
- function DialogFooter({
97
- className,
98
- showCloseButton = false,
99
- children,
100
- ...props
101
- }: React.ComponentProps<"div"> & {
102
- showCloseButton?: boolean
103
- }) {
104
- return (
105
- <div
106
- data-slot="dialog-footer"
107
- className={cn(
108
- "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",
109
- className
110
- )}
111
- {...props}
112
- >
113
- {children}
114
- {showCloseButton && (
115
- <DialogPrimitive.Close asChild>
116
- <Button variant="outline">Close</Button>
117
- </DialogPrimitive.Close>
118
- )}
119
- </div>
120
- )
121
- }
122
-
123
- function DialogTitle({
124
- className,
125
- ...props
126
- }: React.ComponentProps<typeof DialogPrimitive.Title>) {
127
- return (
128
- <DialogPrimitive.Title
129
- data-slot="dialog-title"
130
- className={cn("font-heading text-sm font-medium", className)}
131
- {...props}
132
- />
133
- )
134
- }
135
-
136
- function DialogDescription({
137
- className,
138
- ...props
139
- }: React.ComponentProps<typeof DialogPrimitive.Description>) {
140
- return (
141
- <DialogPrimitive.Description
142
- data-slot="dialog-description"
143
- className={cn(
144
- "text-xs/relaxed text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",
145
- className
146
- )}
147
- {...props}
148
- />
149
- )
150
- }
151
-
152
- export {
153
- Dialog,
154
- DialogClose,
155
- DialogContent,
156
- DialogDescription,
157
- DialogFooter,
158
- DialogHeader,
159
- DialogOverlay,
160
- DialogPortal,
161
- DialogTitle,
162
- DialogTrigger,
163
- }
1
+ import * as React from "react"
2
+ import { Dialog as DialogPrimitive } from "radix-ui"
3
+
4
+ import { cn } from "@/lib/utils"
5
+ import { Button } from "@/components/ui/button"
6
+ import { XIcon } from "lucide-react"
7
+
8
+ function Dialog({
9
+ ...props
10
+ }: React.ComponentProps<typeof DialogPrimitive.Root>) {
11
+ return <DialogPrimitive.Root data-slot="dialog" {...props} />
12
+ }
13
+
14
+ function DialogTrigger({
15
+ ...props
16
+ }: React.ComponentProps<typeof DialogPrimitive.Trigger>) {
17
+ return <DialogPrimitive.Trigger data-slot="dialog-trigger" {...props} />
18
+ }
19
+
20
+ function DialogPortal({
21
+ ...props
22
+ }: React.ComponentProps<typeof DialogPrimitive.Portal>) {
23
+ return <DialogPrimitive.Portal data-slot="dialog-portal" {...props} />
24
+ }
25
+
26
+ function DialogClose({
27
+ ...props
28
+ }: React.ComponentProps<typeof DialogPrimitive.Close>) {
29
+ return <DialogPrimitive.Close data-slot="dialog-close" {...props} />
30
+ }
31
+
32
+ function DialogOverlay({
33
+ className,
34
+ ...props
35
+ }: React.ComponentProps<typeof DialogPrimitive.Overlay>) {
36
+ return (
37
+ <DialogPrimitive.Overlay
38
+ data-slot="dialog-overlay"
39
+ className={cn(
40
+ "fixed inset-0 isolate z-50 bg-black/80 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
41
+ className
42
+ )}
43
+ {...props}
44
+ />
45
+ )
46
+ }
47
+
48
+ function DialogContent({
49
+ className,
50
+ children,
51
+ showCloseButton = true,
52
+ ...props
53
+ }: React.ComponentProps<typeof DialogPrimitive.Content> & {
54
+ showCloseButton?: boolean
55
+ }) {
56
+ return (
57
+ <DialogPortal>
58
+ <DialogOverlay />
59
+ <DialogPrimitive.Content
60
+ data-slot="dialog-content"
61
+ className={cn(
62
+ "fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-xs/relaxed text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
63
+ className
64
+ )}
65
+ {...props}
66
+ >
67
+ {children}
68
+ {showCloseButton && (
69
+ <DialogPrimitive.Close data-slot="dialog-close" asChild>
70
+ <Button
71
+ variant="ghost"
72
+ className="absolute top-2 right-2"
73
+ size="icon-sm"
74
+ >
75
+ <XIcon
76
+ />
77
+ <span className="sr-only">Close</span>
78
+ </Button>
79
+ </DialogPrimitive.Close>
80
+ )}
81
+ </DialogPrimitive.Content>
82
+ </DialogPortal>
83
+ )
84
+ }
85
+
86
+ function DialogHeader({ className, ...props }: React.ComponentProps<"div">) {
87
+ return (
88
+ <div
89
+ data-slot="dialog-header"
90
+ className={cn("flex flex-col gap-1", className)}
91
+ {...props}
92
+ />
93
+ )
94
+ }
95
+
96
+ function DialogFooter({
97
+ className,
98
+ showCloseButton = false,
99
+ children,
100
+ ...props
101
+ }: React.ComponentProps<"div"> & {
102
+ showCloseButton?: boolean
103
+ }) {
104
+ return (
105
+ <div
106
+ data-slot="dialog-footer"
107
+ className={cn(
108
+ "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",
109
+ className
110
+ )}
111
+ {...props}
112
+ >
113
+ {children}
114
+ {showCloseButton && (
115
+ <DialogPrimitive.Close asChild>
116
+ <Button variant="outline">Close</Button>
117
+ </DialogPrimitive.Close>
118
+ )}
119
+ </div>
120
+ )
121
+ }
122
+
123
+ function DialogTitle({
124
+ className,
125
+ ...props
126
+ }: React.ComponentProps<typeof DialogPrimitive.Title>) {
127
+ return (
128
+ <DialogPrimitive.Title
129
+ data-slot="dialog-title"
130
+ className={cn("font-heading text-sm font-medium", className)}
131
+ {...props}
132
+ />
133
+ )
134
+ }
135
+
136
+ function DialogDescription({
137
+ className,
138
+ ...props
139
+ }: React.ComponentProps<typeof DialogPrimitive.Description>) {
140
+ return (
141
+ <DialogPrimitive.Description
142
+ data-slot="dialog-description"
143
+ className={cn(
144
+ "text-xs/relaxed text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",
145
+ className
146
+ )}
147
+ {...props}
148
+ />
149
+ )
150
+ }
151
+
152
+ export {
153
+ Dialog,
154
+ DialogClose,
155
+ DialogContent,
156
+ DialogDescription,
157
+ DialogFooter,
158
+ DialogHeader,
159
+ DialogOverlay,
160
+ DialogPortal,
161
+ DialogTitle,
162
+ DialogTrigger,
163
+ }
@@ -1,155 +1,155 @@
1
- "use client"
2
-
3
- import * as React from "react"
4
- import { cva, type VariantProps } from "class-variance-authority"
5
-
6
- import { cn } from "@/lib/utils"
7
- import { Button } from "@/components/ui/button"
8
- import { Input } from "@/components/ui/input"
9
- import { Textarea } from "@/components/ui/textarea"
10
-
11
- function InputGroup({ className, ...props }: React.ComponentProps<"div">) {
12
- return (
13
- <div
14
- data-slot="input-group"
15
- role="group"
16
- className={cn(
17
- "group/input-group relative flex h-7 w-full min-w-0 items-center rounded-md border border-input bg-input/20 transition-colors outline-none in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-data-[align=block-end]:rounded-md has-data-[align=block-start]:rounded-md has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-2 has-[[data-slot=input-group-control]:focus-visible]:ring-ring/30 has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-2 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[textarea]:rounded-md has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>textarea]:h-auto dark:bg-input/30 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5",
18
- className
19
- )}
20
- {...props}
21
- />
22
- )
23
- }
24
-
25
- const inputGroupAddonVariants = cva(
26
- "flex h-auto cursor-text items-center justify-center gap-1 py-2 text-xs/relaxed font-medium text-muted-foreground select-none group-data-[disabled=true]/input-group:opacity-50 **:data-[slot=kbd]:rounded-[calc(var(--radius-sm)-2px)] **:data-[slot=kbd]:bg-muted-foreground/10 **:data-[slot=kbd]:px-1 **:data-[slot=kbd]:text-[0.625rem] [&>svg:not([class*='size-'])]:size-3.5",
27
- {
28
- variants: {
29
- align: {
30
- "inline-start":
31
- "order-first pl-2 has-[>button]:ml-[-0.275rem] has-[>kbd]:ml-[-0.275rem]",
32
- "inline-end":
33
- "order-last pr-2 has-[>button]:mr-[-0.275rem] has-[>kbd]:mr-[-0.275rem]",
34
- "block-start":
35
- "order-first w-full justify-start px-2 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2",
36
- "block-end":
37
- "order-last w-full justify-start px-2 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2",
38
- },
39
- },
40
- defaultVariants: {
41
- align: "inline-start",
42
- },
43
- }
44
- )
45
-
46
- function InputGroupAddon({
47
- className,
48
- align = "inline-start",
49
- ...props
50
- }: React.ComponentProps<"div"> & VariantProps<typeof inputGroupAddonVariants>) {
51
- return (
52
- <div
53
- role="group"
54
- data-slot="input-group-addon"
55
- data-align={align}
56
- className={cn(inputGroupAddonVariants({ align }), className)}
57
- onClick={(e) => {
58
- if ((e.target as HTMLElement).closest("button")) {
59
- return
60
- }
61
- e.currentTarget.parentElement?.querySelector("input")?.focus()
62
- }}
63
- {...props}
64
- />
65
- )
66
- }
67
-
68
- const inputGroupButtonVariants = cva(
69
- "flex items-center gap-2 rounded-md text-xs/relaxed shadow-none",
70
- {
71
- variants: {
72
- size: {
73
- xs: "h-5 gap-1 rounded-[calc(var(--radius-sm)-2px)] px-1 [&>svg:not([class*='size-'])]:size-3",
74
- sm: "gap-1",
75
- "icon-xs": "size-6 p-0 has-[>svg]:p-0",
76
- "icon-sm": "size-7 p-0 has-[>svg]:p-0",
77
- },
78
- },
79
- defaultVariants: {
80
- size: "xs",
81
- },
82
- }
83
- )
84
-
85
- function InputGroupButton({
86
- className,
87
- type = "button",
88
- variant = "ghost",
89
- size = "xs",
90
- ...props
91
- }: Omit<React.ComponentProps<typeof Button>, "size"> &
92
- VariantProps<typeof inputGroupButtonVariants>) {
93
- return (
94
- <Button
95
- type={type}
96
- data-size={size}
97
- variant={variant}
98
- className={cn(inputGroupButtonVariants({ size }), className)}
99
- {...props}
100
- />
101
- )
102
- }
103
-
104
- function InputGroupText({ className, ...props }: React.ComponentProps<"span">) {
105
- return (
106
- <span
107
- className={cn(
108
- "flex items-center gap-2 text-xs/relaxed text-muted-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",
109
- className
110
- )}
111
- {...props}
112
- />
113
- )
114
- }
115
-
116
- function InputGroupInput({
117
- className,
118
- ...props
119
- }: React.ComponentProps<"input">) {
120
- return (
121
- <Input
122
- data-slot="input-group-control"
123
- className={cn(
124
- "flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent",
125
- className
126
- )}
127
- {...props}
128
- />
129
- )
130
- }
131
-
132
- function InputGroupTextarea({
133
- className,
134
- ...props
135
- }: React.ComponentProps<"textarea">) {
136
- return (
137
- <Textarea
138
- data-slot="input-group-control"
139
- className={cn(
140
- "flex-1 resize-none rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent",
141
- className
142
- )}
143
- {...props}
144
- />
145
- )
146
- }
147
-
148
- export {
149
- InputGroup,
150
- InputGroupAddon,
151
- InputGroupButton,
152
- InputGroupText,
153
- InputGroupInput,
154
- InputGroupTextarea,
155
- }
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import { cva, type VariantProps } from "class-variance-authority"
5
+
6
+ import { cn } from "@/lib/utils"
7
+ import { Button } from "@/components/ui/button"
8
+ import { Input } from "@/components/ui/input"
9
+ import { Textarea } from "@/components/ui/textarea"
10
+
11
+ function InputGroup({ className, ...props }: React.ComponentProps<"div">) {
12
+ return (
13
+ <div
14
+ data-slot="input-group"
15
+ role="group"
16
+ className={cn(
17
+ "group/input-group relative flex h-7 w-full min-w-0 items-center rounded-md border border-input bg-input/20 transition-colors outline-none in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-data-[align=block-end]:rounded-md has-data-[align=block-start]:rounded-md has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-2 has-[[data-slot=input-group-control]:focus-visible]:ring-ring/30 has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-2 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[textarea]:rounded-md has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>textarea]:h-auto dark:bg-input/30 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5",
18
+ className
19
+ )}
20
+ {...props}
21
+ />
22
+ )
23
+ }
24
+
25
+ const inputGroupAddonVariants = cva(
26
+ "flex h-auto cursor-text items-center justify-center gap-1 py-2 text-xs/relaxed font-medium text-muted-foreground select-none group-data-[disabled=true]/input-group:opacity-50 **:data-[slot=kbd]:rounded-[calc(var(--radius-sm)-2px)] **:data-[slot=kbd]:bg-muted-foreground/10 **:data-[slot=kbd]:px-1 **:data-[slot=kbd]:text-[0.625rem] [&>svg:not([class*='size-'])]:size-3.5",
27
+ {
28
+ variants: {
29
+ align: {
30
+ "inline-start":
31
+ "order-first pl-2 has-[>button]:ml-[-0.275rem] has-[>kbd]:ml-[-0.275rem]",
32
+ "inline-end":
33
+ "order-last pr-2 has-[>button]:mr-[-0.275rem] has-[>kbd]:mr-[-0.275rem]",
34
+ "block-start":
35
+ "order-first w-full justify-start px-2 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2",
36
+ "block-end":
37
+ "order-last w-full justify-start px-2 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2",
38
+ },
39
+ },
40
+ defaultVariants: {
41
+ align: "inline-start",
42
+ },
43
+ }
44
+ )
45
+
46
+ function InputGroupAddon({
47
+ className,
48
+ align = "inline-start",
49
+ ...props
50
+ }: React.ComponentProps<"div"> & VariantProps<typeof inputGroupAddonVariants>) {
51
+ return (
52
+ <div
53
+ role="group"
54
+ data-slot="input-group-addon"
55
+ data-align={align}
56
+ className={cn(inputGroupAddonVariants({ align }), className)}
57
+ onClick={(e) => {
58
+ if ((e.target as HTMLElement).closest("button")) {
59
+ return
60
+ }
61
+ e.currentTarget.parentElement?.querySelector("input")?.focus()
62
+ }}
63
+ {...props}
64
+ />
65
+ )
66
+ }
67
+
68
+ const inputGroupButtonVariants = cva(
69
+ "flex items-center gap-2 rounded-md text-xs/relaxed shadow-none",
70
+ {
71
+ variants: {
72
+ size: {
73
+ xs: "h-5 gap-1 rounded-[calc(var(--radius-sm)-2px)] px-1 [&>svg:not([class*='size-'])]:size-3",
74
+ sm: "gap-1",
75
+ "icon-xs": "size-6 p-0 has-[>svg]:p-0",
76
+ "icon-sm": "size-7 p-0 has-[>svg]:p-0",
77
+ },
78
+ },
79
+ defaultVariants: {
80
+ size: "xs",
81
+ },
82
+ }
83
+ )
84
+
85
+ function InputGroupButton({
86
+ className,
87
+ type = "button",
88
+ variant = "ghost",
89
+ size = "xs",
90
+ ...props
91
+ }: Omit<React.ComponentProps<typeof Button>, "size"> &
92
+ VariantProps<typeof inputGroupButtonVariants>) {
93
+ return (
94
+ <Button
95
+ type={type}
96
+ data-size={size}
97
+ variant={variant}
98
+ className={cn(inputGroupButtonVariants({ size }), className)}
99
+ {...props}
100
+ />
101
+ )
102
+ }
103
+
104
+ function InputGroupText({ className, ...props }: React.ComponentProps<"span">) {
105
+ return (
106
+ <span
107
+ className={cn(
108
+ "flex items-center gap-2 text-xs/relaxed text-muted-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",
109
+ className
110
+ )}
111
+ {...props}
112
+ />
113
+ )
114
+ }
115
+
116
+ function InputGroupInput({
117
+ className,
118
+ ...props
119
+ }: React.ComponentProps<"input">) {
120
+ return (
121
+ <Input
122
+ data-slot="input-group-control"
123
+ className={cn(
124
+ "flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent",
125
+ className
126
+ )}
127
+ {...props}
128
+ />
129
+ )
130
+ }
131
+
132
+ function InputGroupTextarea({
133
+ className,
134
+ ...props
135
+ }: React.ComponentProps<"textarea">) {
136
+ return (
137
+ <Textarea
138
+ data-slot="input-group-control"
139
+ className={cn(
140
+ "flex-1 resize-none rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent",
141
+ className
142
+ )}
143
+ {...props}
144
+ />
145
+ )
146
+ }
147
+
148
+ export {
149
+ InputGroup,
150
+ InputGroupAddon,
151
+ InputGroupButton,
152
+ InputGroupText,
153
+ InputGroupInput,
154
+ InputGroupTextarea,
155
+ }