@actioneer/ads 0.1.0

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 (231) hide show
  1. package/LICENSE +21 -0
  2. package/bin/ads-init.mjs +314 -0
  3. package/components/accordion.d.ts +13 -0
  4. package/components/accordion.js +91 -0
  5. package/components/agents-ui/agent-audio-visualizer-aura.d.ts +11 -0
  6. package/components/agents-ui/agent-audio-visualizer-aura.js +277 -0
  7. package/components/agents-ui/agent-audio-visualizer-wave.d.ts +12 -0
  8. package/components/agents-ui/agent-audio-visualizer-wave.js +203 -0
  9. package/components/agents-ui/react-shader-toy.d.ts +87 -0
  10. package/components/agents-ui/react-shader-toy.js +531 -0
  11. package/components/ai-elements/chain-of-thought.d.ts +30 -0
  12. package/components/ai-elements/chain-of-thought.js +182 -0
  13. package/components/ai-elements/index.d.ts +11 -0
  14. package/components/ai-elements/inline-citation.d.ts +44 -0
  15. package/components/ai-elements/inline-citation.js +314 -0
  16. package/components/ai-elements/message.d.ts +96 -0
  17. package/components/ai-elements/message.js +308 -0
  18. package/components/ai-elements/queue.d.ts +60 -0
  19. package/components/ai-elements/queue.js +193 -0
  20. package/components/ai-elements/reasoning.d.ts +26 -0
  21. package/components/ai-elements/reasoning.js +131 -0
  22. package/components/ai-elements/shimmer.d.ts +25 -0
  23. package/components/ai-elements/shimmer.js +44 -0
  24. package/components/ai-elements/speech-input.d.ts +16 -0
  25. package/components/ai-elements/speech-input.js +151 -0
  26. package/components/ai-elements/task-progress.d.ts +41 -0
  27. package/components/ai-elements/task-progress.js +211 -0
  28. package/components/ai-elements/task.d.ts +35 -0
  29. package/components/ai-elements/task.js +73 -0
  30. package/components/ai-elements/tool.d.ts +53 -0
  31. package/components/ai-elements/tool.js +116 -0
  32. package/components/ai-elements/voice.d.ts +74 -0
  33. package/components/ai-elements/voice.js +875 -0
  34. package/components/alert.d.ts +21 -0
  35. package/components/alert.js +76 -0
  36. package/components/answer.d.ts +984 -0
  37. package/components/answer.js +543 -0
  38. package/components/assistant-ui/action-bar.d.ts +3 -0
  39. package/components/assistant-ui/action-bar.js +57 -0
  40. package/components/assistant-ui/answer-tool-ui.d.ts +5 -0
  41. package/components/assistant-ui/answer-tool-ui.js +42 -0
  42. package/components/assistant-ui/attachment.d.ts +50 -0
  43. package/components/assistant-ui/attachment.js +353 -0
  44. package/components/assistant-ui/badge.d.ts +11 -0
  45. package/components/assistant-ui/badge.js +54 -0
  46. package/components/assistant-ui/branch-picker.d.ts +3 -0
  47. package/components/assistant-ui/branch-picker.js +36 -0
  48. package/components/assistant-ui/chain-of-thought.d.ts +46 -0
  49. package/components/assistant-ui/composer-add-context.d.ts +50 -0
  50. package/components/assistant-ui/composer-add-context.js +209 -0
  51. package/components/assistant-ui/composer-deep-research.d.ts +16 -0
  52. package/components/assistant-ui/composer-deep-research.js +38 -0
  53. package/components/assistant-ui/composer-harness.d.ts +18 -0
  54. package/components/assistant-ui/composer-harness.js +186 -0
  55. package/components/assistant-ui/composer-trigger-popover.d.ts +47 -0
  56. package/components/assistant-ui/composer-trigger-popover.js +147 -0
  57. package/components/assistant-ui/composer.d.ts +8 -0
  58. package/components/assistant-ui/composer.js +276 -0
  59. package/components/assistant-ui/directive-text.d.ts +16 -0
  60. package/components/assistant-ui/directive-text.js +40 -0
  61. package/components/assistant-ui/error.d.ts +6 -0
  62. package/components/assistant-ui/error.js +39 -0
  63. package/components/assistant-ui/file.d.ts +37 -0
  64. package/components/assistant-ui/file.js +159 -0
  65. package/components/assistant-ui/follow-up-suggestions.d.ts +7 -0
  66. package/components/assistant-ui/follow-up-suggestions.js +44 -0
  67. package/components/assistant-ui/image.d.ts +46 -0
  68. package/components/assistant-ui/image.js +351 -0
  69. package/components/assistant-ui/index.d.ts +28 -0
  70. package/components/assistant-ui/markdown-text.d.ts +1 -0
  71. package/components/assistant-ui/markdown-text.js +242 -0
  72. package/components/assistant-ui/message-timing.d.ts +25 -0
  73. package/components/assistant-ui/message-timing.js +56 -0
  74. package/components/assistant-ui/message.d.ts +4 -0
  75. package/components/assistant-ui/message.js +159 -0
  76. package/components/assistant-ui/primitives.d.ts +2 -0
  77. package/components/assistant-ui/quote.d.ts +37 -0
  78. package/components/assistant-ui/quote.js +150 -0
  79. package/components/assistant-ui/reasoning.d.ts +44 -0
  80. package/components/assistant-ui/reasoning.js +261 -0
  81. package/components/assistant-ui/selection-toolbar.d.ts +29 -0
  82. package/components/assistant-ui/selection-toolbar.js +91 -0
  83. package/components/assistant-ui/smart-message-text.d.ts +15 -0
  84. package/components/assistant-ui/smart-message-text.js +29 -0
  85. package/components/assistant-ui/sources.d.ts +17 -0
  86. package/components/assistant-ui/sources.js +121 -0
  87. package/components/assistant-ui/suggestions.d.ts +7 -0
  88. package/components/assistant-ui/suggestions.js +19 -0
  89. package/components/assistant-ui/thread-context.d.ts +37 -0
  90. package/components/assistant-ui/thread-context.js +8 -0
  91. package/components/assistant-ui/thread.d.ts +5 -0
  92. package/components/assistant-ui/thread.js +77 -0
  93. package/components/assistant-ui/tool-fallback.d.ts +36 -0
  94. package/components/assistant-ui/tool-fallback.js +428 -0
  95. package/components/assistant-ui/tool-group.d.ts +33 -0
  96. package/components/assistant-ui/tool-group.js +173 -0
  97. package/components/assistant-ui/tooltip-icon-button.d.ts +7 -0
  98. package/components/assistant-ui/tooltip-icon-button.js +31 -0
  99. package/components/assistant-ui/voice.d.ts +18 -0
  100. package/components/autocomplete.d.ts +18 -0
  101. package/components/autocomplete.js +162 -0
  102. package/components/avatar.d.ts +26 -0
  103. package/components/avatar.js +92 -0
  104. package/components/badge.d.ts +10 -0
  105. package/components/badge.js +83 -0
  106. package/components/brand-loader.d.ts +16 -0
  107. package/components/brand-loader.js +64 -0
  108. package/components/breadcrumbs.d.ts +8 -0
  109. package/components/breadcrumbs.js +58 -0
  110. package/components/button.d.ts +13 -0
  111. package/components/button.js +100 -0
  112. package/components/card.d.ts +19 -0
  113. package/components/card.js +82 -0
  114. package/components/carousel.d.ts +31 -0
  115. package/components/carousel.js +351 -0
  116. package/components/chart.d.ts +165 -0
  117. package/components/chart.js +841 -0
  118. package/components/checkbox.d.ts +13 -0
  119. package/components/checkbox.js +84 -0
  120. package/components/chip.d.ts +13 -0
  121. package/components/chip.js +112 -0
  122. package/components/collapsible.d.ts +5 -0
  123. package/components/collapsible.js +31 -0
  124. package/components/connector-card.d.ts +62 -0
  125. package/components/connector-card.js +154 -0
  126. package/components/divider.d.ts +23 -0
  127. package/components/divider.js +69 -0
  128. package/components/drawer.d.ts +45 -0
  129. package/components/drawer.js +234 -0
  130. package/components/dropdown.d.ts +33 -0
  131. package/components/dropdown.js +198 -0
  132. package/components/empty-state.d.ts +8 -0
  133. package/components/empty-state.js +30 -0
  134. package/components/field.d.ts +20 -0
  135. package/components/field.js +74 -0
  136. package/components/index.d.ts +56 -0
  137. package/components/index.js +444 -0
  138. package/components/input-field.d.ts +22 -0
  139. package/components/input-field.js +91 -0
  140. package/components/input.d.ts +8 -0
  141. package/components/input.js +61 -0
  142. package/components/kbd.d.ts +6 -0
  143. package/components/kbd.js +26 -0
  144. package/components/link.d.ts +14 -0
  145. package/components/link.js +72 -0
  146. package/components/modal.d.ts +18 -0
  147. package/components/modal.js +156 -0
  148. package/components/navbar.d.ts +15 -0
  149. package/components/navbar.js +68 -0
  150. package/components/number-field.d.ts +11 -0
  151. package/components/number-field.js +89 -0
  152. package/components/pagination.d.ts +28 -0
  153. package/components/pagination.js +179 -0
  154. package/components/panel.d.ts +14 -0
  155. package/components/panel.js +71 -0
  156. package/components/pixel-blast-svg.d.ts +22 -0
  157. package/components/pixel-blast-svg.js +154 -0
  158. package/components/popover.d.ts +20 -0
  159. package/components/popover.js +101 -0
  160. package/components/progress-circle.d.ts +11 -0
  161. package/components/progress-circle.js +75 -0
  162. package/components/progress.d.ts +22 -0
  163. package/components/progress.js +66 -0
  164. package/components/radio.d.ts +16 -0
  165. package/components/radio.js +101 -0
  166. package/components/segmented.d.ts +16 -0
  167. package/components/segmented.js +103 -0
  168. package/components/select.d.ts +28 -0
  169. package/components/select.js +180 -0
  170. package/components/selection-action-bar.d.ts +11 -0
  171. package/components/selection-action-bar.js +59 -0
  172. package/components/sidebar.d.ts +118 -0
  173. package/components/sidebar.js +375 -0
  174. package/components/skeleton.d.ts +6 -0
  175. package/components/skeleton.js +26 -0
  176. package/components/slider.d.ts +11 -0
  177. package/components/slider.js +62 -0
  178. package/components/spinner.d.ts +11 -0
  179. package/components/spinner.js +62 -0
  180. package/components/switch.d.ts +7 -0
  181. package/components/switch.js +61 -0
  182. package/components/table.d.ts +59 -0
  183. package/components/table.js +254 -0
  184. package/components/tabs.d.ts +29 -0
  185. package/components/tabs.js +371 -0
  186. package/components/textarea.d.ts +5 -0
  187. package/components/textarea.js +24 -0
  188. package/components/timeline.d.ts +7 -0
  189. package/components/timeline.js +47 -0
  190. package/components/toast.d.ts +74 -0
  191. package/components/toast.js +211 -0
  192. package/components/tooltip.d.ts +11 -0
  193. package/components/tooltip.js +143 -0
  194. package/components/tree.d.ts +42 -0
  195. package/components/tree.js +86 -0
  196. package/components/typography.d.ts +33 -0
  197. package/components/typography.js +65 -0
  198. package/components/ui/avatar.d.ts +11 -0
  199. package/components/ui/avatar.js +56 -0
  200. package/components/ui/button.d.ts +10 -0
  201. package/components/ui/button.js +57 -0
  202. package/components/ui/collapsible.d.ts +5 -0
  203. package/components/ui/collapsible.js +35 -0
  204. package/components/ui/dialog.d.ts +17 -0
  205. package/components/ui/dialog.js +93 -0
  206. package/components/ui/tabs.d.ts +22 -0
  207. package/components/ui/tooltip.d.ts +7 -0
  208. package/components/ui/tooltip.js +56 -0
  209. package/fonts/aribau-grotesk-400.otf +0 -0
  210. package/fonts/aribau-grotesk-700.otf +0 -0
  211. package/fonts.css +21 -0
  212. package/hooks/agents-ui/use-agent-audio-visualizer-aura.d.ts +8 -0
  213. package/hooks/agents-ui/use-agent-audio-visualizer-aura.js +62 -0
  214. package/hooks/agents-ui/use-agent-audio-visualizer-wave.d.ts +7 -0
  215. package/hooks/agents-ui/use-agent-audio-visualizer-wave.js +60 -0
  216. package/hooks/agents-ui/voice-visualizer-types.d.ts +9 -0
  217. package/lib/cn.d.ts +3 -0
  218. package/lib/cn.js +9 -0
  219. package/lib/icons.d.ts +378 -0
  220. package/lib/icons.js +119 -0
  221. package/lib/interactive.d.ts +24 -0
  222. package/lib/interactive.js +36 -0
  223. package/lib/motion.d.ts +58 -0
  224. package/lib/motion.js +70 -0
  225. package/lib/router.d.ts +3 -0
  226. package/lib/utils.d.ts +6 -0
  227. package/llms.txt +537 -0
  228. package/manifest.json +5085 -0
  229. package/package.json +60 -0
  230. package/styles.css +653 -0
  231. package/theme.css +273 -0
@@ -0,0 +1,173 @@
1
+ "use client";
2
+ import { jsxs as g, jsx as t } from "react/jsx-runtime";
3
+ import { memo as w, useRef as y, useState as C, useCallback as G } from "react";
4
+ import { Loader as k, ChevronDown as R } from "../../lib/icons.js";
5
+ import { cva as I } from "class-variance-authority";
6
+ import { useScrollLock as A } from "@assistant-ui/react";
7
+ import { Collapsible as S, CollapsibleTrigger as j, CollapsibleContent as z } from "../ui/collapsible.js";
8
+ import { cn as n } from "../../lib/cn.js";
9
+ const D = 200, L = I("aui-tool-group-root group/tool-group w-full", {
10
+ variants: {
11
+ variant: {
12
+ outline: "rounded-lg border py-3",
13
+ ghost: "",
14
+ muted: "border-muted-foreground/30 bg-muted/30 rounded-lg border py-3"
15
+ }
16
+ },
17
+ defaultVariants: { variant: "outline" }
18
+ });
19
+ function m({
20
+ className: r,
21
+ variant: o,
22
+ open: a,
23
+ onOpenChange: e,
24
+ defaultOpen: l = !1,
25
+ children: f,
26
+ ...h
27
+ }) {
28
+ const p = y(null), [x, b] = C(l), s = A(p, D), u = a !== void 0, N = u ? a : x, T = G(
29
+ (d) => {
30
+ s(), u || b(d), e == null || e(d);
31
+ },
32
+ [s, u, e]
33
+ );
34
+ return /* @__PURE__ */ t(
35
+ S,
36
+ {
37
+ ref: p,
38
+ "data-slot": "tool-group-root",
39
+ "data-variant": o ?? "outline",
40
+ open: N,
41
+ onOpenChange: T,
42
+ className: n(
43
+ L({ variant: o }),
44
+ "group/tool-group-root",
45
+ r
46
+ ),
47
+ ...h,
48
+ children: f
49
+ }
50
+ );
51
+ }
52
+ function c({
53
+ count: r,
54
+ active: o = !1,
55
+ className: a,
56
+ ...e
57
+ }) {
58
+ const l = `${r} tool ${r === 1 ? "call" : "calls"}`;
59
+ return /* @__PURE__ */ g(
60
+ j,
61
+ {
62
+ "data-slot": "tool-group-trigger",
63
+ className: n(
64
+ "aui-tool-group-trigger group/trigger flex origin-left items-center gap-2 text-xs transition-[color,scale] active:scale-[0.98]",
65
+ "group-data-[variant=ghost]/tool-group-root:text-muted-foreground group-data-[variant=ghost]/tool-group-root:hover:text-foreground group-data-[variant=ghost]/tool-group-root:py-1.5",
66
+ "group-data-[variant=outline]/tool-group-root:w-full group-data-[variant=outline]/tool-group-root:px-4",
67
+ "group-data-[variant=muted]/tool-group-root:w-full group-data-[variant=muted]/tool-group-root:px-4",
68
+ a
69
+ ),
70
+ ...e,
71
+ children: [
72
+ o && /* @__PURE__ */ t(
73
+ k,
74
+ {
75
+ "data-slot": "tool-group-trigger-loader",
76
+ className: "aui-tool-group-trigger-loader size-3 shrink-0 animate-spin [animation-duration:var(--duration-spin)] motion-reduce:animate-none"
77
+ }
78
+ ),
79
+ /* @__PURE__ */ g(
80
+ "span",
81
+ {
82
+ "data-slot": "tool-group-trigger-label",
83
+ className: n(
84
+ "aui-tool-group-trigger-label-wrapper relative inline-block text-start leading-none font-medium",
85
+ "group-data-[variant=ghost]/tool-group-root:font-normal",
86
+ "group-data-[variant=outline]/tool-group-root:grow",
87
+ "group-data-[variant=muted]/tool-group-root:grow"
88
+ ),
89
+ children: [
90
+ /* @__PURE__ */ t("span", { className: "text-xs", children: l }),
91
+ o && /* @__PURE__ */ t(
92
+ "span",
93
+ {
94
+ "aria-hidden": !0,
95
+ "data-slot": "tool-group-trigger-shimmer",
96
+ className: "aui-tool-group-trigger-shimmer shimmer pointer-events-none absolute inset-0 text-xs motion-reduce:animate-none",
97
+ children: l
98
+ }
99
+ )
100
+ ]
101
+ }
102
+ ),
103
+ /* @__PURE__ */ t(
104
+ R,
105
+ {
106
+ "data-slot": "tool-group-trigger-chevron",
107
+ className: n(
108
+ "aui-tool-group-trigger-chevron size-3 shrink-0",
109
+ "transition-transform duration-(--duration-normal) ease-out motion-reduce:transition-none",
110
+ "group-data-[state=closed]/trigger:-rotate-90",
111
+ "group-data-[state=open]/trigger:rotate-0"
112
+ )
113
+ }
114
+ )
115
+ ]
116
+ }
117
+ );
118
+ }
119
+ function v({
120
+ className: r,
121
+ children: o,
122
+ ...a
123
+ }) {
124
+ return /* @__PURE__ */ t(
125
+ z,
126
+ {
127
+ "data-slot": "tool-group-content",
128
+ className: n(
129
+ "aui-tool-group-content relative overflow-hidden text-xs outline-none",
130
+ "group/collapsible-content",
131
+ "data-[state=closed]:pointer-events-none",
132
+ r
133
+ ),
134
+ ...a,
135
+ children: /* @__PURE__ */ t(
136
+ "div",
137
+ {
138
+ className: n(
139
+ "mt-2 flex flex-col gap-2",
140
+ "group-data-[variant=ghost]/tool-group-root:mt-1 group-data-[variant=ghost]/tool-group-root:gap-1",
141
+ "group-data-[variant=outline]/tool-group-root:mt-3 group-data-[variant=outline]/tool-group-root:border-t group-data-[variant=outline]/tool-group-root:px-4 group-data-[variant=outline]/tool-group-root:pt-3",
142
+ "group-data-[variant=muted]/tool-group-root:mt-3 group-data-[variant=muted]/tool-group-root:border-t group-data-[variant=muted]/tool-group-root:px-4 group-data-[variant=muted]/tool-group-root:pt-3",
143
+ "[&>*]:animate-in [&>*]:fade-in-0 [&>*]:blur-in-[2px] [&>*]:slide-in-from-top-1 [&>*]:duration-(--duration-normal) [&>*]:ease-out",
144
+ "[&>*]:motion-reduce:animate-none",
145
+ "[&>*:nth-child(2)]:[animation-delay:40ms]",
146
+ "[&>*:nth-child(3)]:[animation-delay:80ms]",
147
+ "[&>*:nth-child(4)]:[animation-delay:120ms]",
148
+ "[&>*:nth-child(n+5)]:[animation-delay:160ms]"
149
+ ),
150
+ children: o
151
+ }
152
+ )
153
+ }
154
+ );
155
+ }
156
+ const U = ({ children: r, startIndex: o, endIndex: a }) => {
157
+ const e = a - o + 1;
158
+ return /* @__PURE__ */ g(m, { children: [
159
+ /* @__PURE__ */ t(c, { count: e }),
160
+ /* @__PURE__ */ t(v, { children: r })
161
+ ] });
162
+ }, i = w(U);
163
+ i.displayName = "ToolGroup";
164
+ i.Root = m;
165
+ i.Trigger = c;
166
+ i.Content = v;
167
+ export {
168
+ i as ToolGroup,
169
+ v as ToolGroupContent,
170
+ m as ToolGroupRoot,
171
+ c as ToolGroupTrigger,
172
+ L as toolGroupVariants
173
+ };
@@ -0,0 +1,7 @@
1
+ import { ComponentPropsWithRef } from 'react';
2
+ import { Button } from '../ui/button';
3
+ export type TooltipIconButtonProps = ComponentPropsWithRef<typeof Button> & {
4
+ tooltip: string;
5
+ side?: "top" | "bottom" | "left" | "right";
6
+ };
7
+ export declare const TooltipIconButton: import('react').ForwardRefExoticComponent<Omit<TooltipIconButtonProps, "ref"> & import('react').RefAttributes<HTMLButtonElement>>;
@@ -0,0 +1,31 @@
1
+ "use client";
2
+ import { jsx as o, jsxs as r } from "react/jsx-runtime";
3
+ import { forwardRef as s } from "react";
4
+ import { Slot as c } from "radix-ui";
5
+ import { TooltipProvider as m, Tooltip as p, TooltipTrigger as d, TooltipContent as u } from "../ui/tooltip.js";
6
+ import { Button as f } from "../ui/button.js";
7
+ import { cn as h } from "../../lib/cn.js";
8
+ const T = s(({ children: i, tooltip: t, side: n = "bottom", className: e, ...l }, a) => /* @__PURE__ */ o(m, { delayDuration: 0, children: /* @__PURE__ */ r(p, { children: [
9
+ /* @__PURE__ */ o(d, { asChild: !0, children: /* @__PURE__ */ r(
10
+ f,
11
+ {
12
+ variant: "ghost",
13
+ size: "icon",
14
+ ...l,
15
+ className: h(
16
+ "aui-button-icon size-6 p-1 active:scale-90",
17
+ e
18
+ ),
19
+ ref: a,
20
+ children: [
21
+ /* @__PURE__ */ o(c.Slottable, { children: i }),
22
+ /* @__PURE__ */ o("span", { className: "aui-sr-only sr-only", children: t })
23
+ ]
24
+ }
25
+ ) }),
26
+ /* @__PURE__ */ o(u, { side: n, children: t })
27
+ ] }) }));
28
+ T.displayName = "TooltipIconButton";
29
+ export {
30
+ T as TooltipIconButton
31
+ };
@@ -0,0 +1,18 @@
1
+ import { useVoiceState } from '@assistant-ui/react';
2
+ import { FC } from 'react';
3
+ export type VoiceOrbState = "idle" | "connecting" | "listening" | "speaking" | "muted";
4
+ export type VoiceOrbVariant = "default" | "blue" | "violet" | "emerald";
5
+ export type VoiceOrbProps = {
6
+ state?: VoiceOrbState;
7
+ variant?: VoiceOrbVariant;
8
+ className?: string;
9
+ };
10
+ export declare function deriveVoiceOrbState(voiceState: ReturnType<typeof useVoiceState>): VoiceOrbState;
11
+ export declare const VoiceOrb: FC<VoiceOrbProps>;
12
+ export declare const VoiceControl: FC<{
13
+ className?: string;
14
+ }>;
15
+ export declare const VoiceStatusDot: FC;
16
+ export declare const VoiceConnectButton: FC;
17
+ export declare const VoiceMuteButton: FC;
18
+ export declare const VoiceDisconnectButton: FC;
@@ -0,0 +1,18 @@
1
+ import * as React from "react";
2
+ export interface AutocompleteItem {
3
+ label: string;
4
+ value: string;
5
+ disabled?: boolean;
6
+ }
7
+ export interface AutocompleteProps {
8
+ items: AutocompleteItem[];
9
+ value?: string;
10
+ onChange?: (value: string) => void;
11
+ placeholder?: string;
12
+ disabled?: boolean;
13
+ isInvalid?: boolean;
14
+ allowsCustomValue?: boolean;
15
+ className?: string;
16
+ id?: string;
17
+ }
18
+ export declare const Autocomplete: React.ForwardRefExoticComponent<AutocompleteProps & React.RefAttributes<HTMLInputElement>>;
@@ -0,0 +1,162 @@
1
+ "use client";
2
+ import { jsxs as w, jsx as c } from "react/jsx-runtime";
3
+ import * as o from "react";
4
+ import { MotionConfig as j, AnimatePresence as z, motion as q } from "motion/react";
5
+ import { Search as O, Check as P } from "../lib/icons.js";
6
+ import { cn as y } from "../lib/cn.js";
7
+ import { inputBaseClass as B } from "./field.js";
8
+ import { floatVariants as F } from "../lib/motion.js";
9
+ const K = o.forwardRef(
10
+ ({
11
+ items: u,
12
+ value: f,
13
+ onChange: i,
14
+ placeholder: A = "Search…",
15
+ disabled: E,
16
+ isInvalid: R,
17
+ allowsCustomValue: p = !1,
18
+ className: S,
19
+ id: I
20
+ }, M) => {
21
+ const d = u.find((e) => e.value === f), [m, x] = o.useState((d == null ? void 0 : d.label) ?? ""), [r, a] = o.useState(!1), [n, h] = o.useState(-1), N = o.useRef(null), k = o.useRef(null), b = o.useId();
22
+ o.useEffect(() => {
23
+ x((d == null ? void 0 : d.label) ?? (p ? f ?? "" : ""));
24
+ }, [d, f, p]);
25
+ const l = o.useMemo(() => {
26
+ const e = m.trim().toLowerCase();
27
+ return e ? u.filter((t) => t.label.toLowerCase().includes(e)) : u;
28
+ }, [u, m]);
29
+ o.useEffect(() => {
30
+ if (!r) return;
31
+ const e = (t) => {
32
+ var s;
33
+ (s = N.current) != null && s.contains(t.target) || a(!1);
34
+ };
35
+ return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
36
+ }, [r]), o.useEffect(() => {
37
+ var t;
38
+ if (!r || n < 0) return;
39
+ const e = (t = k.current) == null ? void 0 : t.children[n];
40
+ e == null || e.scrollIntoView({ block: "nearest" });
41
+ }, [r, n]);
42
+ const D = (e) => {
43
+ l.length !== 0 && h((t) => {
44
+ let s = t;
45
+ for (let v = 0; v < l.length; v++)
46
+ if (s = (s + e + l.length) % l.length, !l[s].disabled) return s;
47
+ return t;
48
+ });
49
+ }, g = (e) => {
50
+ const t = l[e];
51
+ !t || t.disabled || (i == null || i(t.value), x(t.label), a(!1));
52
+ }, L = (e) => {
53
+ switch (e.key) {
54
+ case "ArrowDown":
55
+ e.preventDefault(), r ? D(1) : a(!0);
56
+ break;
57
+ case "ArrowUp":
58
+ e.preventDefault(), r ? D(-1) : a(!0);
59
+ break;
60
+ case "Enter":
61
+ r && n >= 0 ? (e.preventDefault(), g(n)) : p && (i == null || i(m), a(!1));
62
+ break;
63
+ case "Escape":
64
+ r && (e.preventDefault(), a(!1));
65
+ break;
66
+ case "Tab":
67
+ a(!1);
68
+ break;
69
+ }
70
+ };
71
+ return /* @__PURE__ */ w("div", { ref: N, className: "relative", children: [
72
+ /* @__PURE__ */ w("div", { className: "group/field relative", children: [
73
+ /* @__PURE__ */ c(
74
+ O,
75
+ {
76
+ className: "pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground transition-colors duration-(--duration-fast) group-focus-within/field:text-foreground group-hover/field:text-foreground",
77
+ "aria-hidden": !0
78
+ }
79
+ ),
80
+ /* @__PURE__ */ c(
81
+ "input",
82
+ {
83
+ ref: M,
84
+ id: I,
85
+ type: "text",
86
+ role: "combobox",
87
+ autoComplete: "off",
88
+ "aria-autocomplete": "list",
89
+ "aria-haspopup": "listbox",
90
+ "aria-expanded": r,
91
+ "aria-controls": b,
92
+ "aria-activedescendant": r && n >= 0 ? `${b}-opt-${n}` : void 0,
93
+ "aria-invalid": R || void 0,
94
+ disabled: E,
95
+ placeholder: A,
96
+ value: m,
97
+ onChange: (e) => {
98
+ x(e.target.value), a(!0), h(-1), p && (i == null || i(e.target.value));
99
+ },
100
+ onFocus: () => a(!0),
101
+ onKeyDown: L,
102
+ className: y(B, "h-10 pl-9", S)
103
+ }
104
+ )
105
+ ] }),
106
+ /* @__PURE__ */ c(j, { reducedMotion: "user", children: /* @__PURE__ */ c(z, { children: r && /* @__PURE__ */ c(
107
+ q.ul,
108
+ {
109
+ ref: k,
110
+ id: b,
111
+ role: "listbox",
112
+ variants: F,
113
+ initial: "hidden",
114
+ animate: "visible",
115
+ exit: "hidden",
116
+ style: { transformOrigin: "top" },
117
+ className: y(
118
+ "absolute z-50 mt-1.5 max-h-60 w-full overflow-auto p-1",
119
+ "rounded-md border border-border bg-elevated shadow-elevation"
120
+ ),
121
+ children: l.length === 0 ? /* @__PURE__ */ c(
122
+ "li",
123
+ {
124
+ role: "presentation",
125
+ className: "px-2 py-6 text-center text-xs text-muted-foreground",
126
+ children: "No results"
127
+ }
128
+ ) : l.map((e, t) => {
129
+ const s = e.value === f, v = t === n;
130
+ return /* @__PURE__ */ w(
131
+ "li",
132
+ {
133
+ id: `${b}-opt-${t}`,
134
+ role: "option",
135
+ "aria-selected": s,
136
+ "aria-disabled": e.disabled || void 0,
137
+ onMouseEnter: () => !e.disabled && h(t),
138
+ onMouseDown: ($) => $.preventDefault(),
139
+ onClick: () => g(t),
140
+ className: y(
141
+ "flex cursor-pointer items-center justify-between gap-2",
142
+ "rounded-sm px-2 py-1.5 text-xs text-foreground select-none",
143
+ v && !e.disabled && "bg-muted",
144
+ e.disabled && "pointer-events-none opacity-50"
145
+ ),
146
+ children: [
147
+ /* @__PURE__ */ c("span", { className: "truncate", children: e.label }),
148
+ s && /* @__PURE__ */ c(P, { className: "size-4 shrink-0", "aria-hidden": !0 })
149
+ ]
150
+ },
151
+ e.value
152
+ );
153
+ })
154
+ }
155
+ ) }) })
156
+ ] });
157
+ }
158
+ );
159
+ K.displayName = "Autocomplete";
160
+ export {
161
+ K as Autocomplete
162
+ };
@@ -0,0 +1,26 @@
1
+ import * as React from "react";
2
+ declare const sizeClasses: {
3
+ readonly sm: "size-8 text-xs";
4
+ readonly md: "size-10 text-xs";
5
+ readonly lg: "size-12 text-base";
6
+ readonly xl: "size-16 text-lg";
7
+ };
8
+ declare const radiusClasses: {
9
+ readonly full: "rounded-full";
10
+ readonly lg: "rounded-lg";
11
+ };
12
+ export interface AvatarProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, "children"> {
13
+ src?: string;
14
+ name?: string;
15
+ size?: keyof typeof sizeClasses;
16
+ radius?: keyof typeof radiusClasses;
17
+ }
18
+ export declare const Avatar: React.ForwardRefExoticComponent<AvatarProps & React.RefAttributes<HTMLSpanElement>>;
19
+ export interface AvatarGroupProps extends React.HTMLAttributes<HTMLDivElement> {
20
+ /** Maximum avatars to show before collapsing the rest into a `+N` chip. */
21
+ max?: number;
22
+ size?: keyof typeof sizeClasses;
23
+ radius?: keyof typeof radiusClasses;
24
+ }
25
+ export declare const AvatarGroup: React.ForwardRefExoticComponent<AvatarGroupProps & React.RefAttributes<HTMLDivElement>>;
26
+ export {};
@@ -0,0 +1,92 @@
1
+ "use client";
2
+ import { jsx as r, jsxs as v } from "react/jsx-runtime";
3
+ import * as u from "react";
4
+ import { cn as n } from "../lib/cn.js";
5
+ const m = {
6
+ sm: "size-8 text-xs",
7
+ md: "size-10 text-xs",
8
+ lg: "size-12 text-base",
9
+ xl: "size-16 text-lg"
10
+ }, g = {
11
+ full: "rounded-full",
12
+ lg: "rounded-lg"
13
+ };
14
+ function b(l) {
15
+ const e = l.trim().split(/\s+/).filter(Boolean);
16
+ return e.length === 0 ? "" : e.length === 1 ? e[0].slice(0, 2).toUpperCase() : (e[0][0] + e[e.length - 1][0]).toUpperCase();
17
+ }
18
+ const x = u.forwardRef(
19
+ ({ className: l, src: e, name: t, size: s = "md", radius: a = "full", ...o }, d) => {
20
+ const i = t ? b(t) : "";
21
+ return /* @__PURE__ */ r(
22
+ "span",
23
+ {
24
+ ref: d,
25
+ role: "img",
26
+ "aria-label": t,
27
+ className: n(
28
+ "relative inline-flex shrink-0 select-none items-center justify-center overflow-hidden font-medium",
29
+ "bg-fill text-fill-foreground",
30
+ m[s],
31
+ g[a],
32
+ l
33
+ ),
34
+ ...o,
35
+ children: e ? /* @__PURE__ */ r(
36
+ "img",
37
+ {
38
+ src: e,
39
+ alt: t ?? "",
40
+ className: "size-full object-cover"
41
+ }
42
+ ) : /* @__PURE__ */ r("span", { "aria-hidden": !0, children: i })
43
+ }
44
+ );
45
+ }
46
+ );
47
+ x.displayName = "Avatar";
48
+ const N = u.forwardRef(
49
+ ({ className: l, max: e, size: t = "md", radius: s = "full", children: a, ...o }, d) => {
50
+ const i = u.Children.toArray(a), c = typeof e == "number" ? i.length - e : 0, p = typeof e == "number" ? i.slice(0, e) : i;
51
+ return /* @__PURE__ */ v(
52
+ "div",
53
+ {
54
+ ref: d,
55
+ className: n("flex items-center", l),
56
+ ...o,
57
+ children: [
58
+ p.map((h, f) => /* @__PURE__ */ r(
59
+ "div",
60
+ {
61
+ className: n(
62
+ "ring-2 ring-background rounded-full",
63
+ f > 0 && "-ml-2"
64
+ ),
65
+ children: h
66
+ },
67
+ f
68
+ )),
69
+ c > 0 && /* @__PURE__ */ r("div", { className: n("ring-2 ring-background rounded-full -ml-2"), children: /* @__PURE__ */ r(
70
+ "span",
71
+ {
72
+ role: "img",
73
+ "aria-label": `${c} more`,
74
+ className: n(
75
+ "relative inline-flex shrink-0 select-none items-center justify-center overflow-hidden font-medium",
76
+ "bg-muted text-muted-foreground",
77
+ m[t],
78
+ g[s]
79
+ ),
80
+ children: /* @__PURE__ */ r("span", { "aria-hidden": !0, children: `+${c}` })
81
+ }
82
+ ) })
83
+ ]
84
+ }
85
+ );
86
+ }
87
+ );
88
+ N.displayName = "AvatarGroup";
89
+ export {
90
+ x as Avatar,
91
+ N as AvatarGroup
92
+ };
@@ -0,0 +1,10 @@
1
+ import { VariantProps } from 'class-variance-authority';
2
+ import * as React from "react";
3
+ declare const badgeVariants: (props?: ({
4
+ variant?: "soft" | "solid" | "outline" | "dot" | null | undefined;
5
+ color?: "success" | "warning" | "danger" | "info" | "default" | "primary" | null | undefined;
6
+ } & import('class-variance-authority/types').ClassProp) | undefined) => string;
7
+ export interface BadgeProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, "color">, VariantProps<typeof badgeVariants> {
8
+ }
9
+ export declare const Badge: React.ForwardRefExoticComponent<BadgeProps & React.RefAttributes<HTMLSpanElement>>;
10
+ export {};
@@ -0,0 +1,83 @@
1
+ "use client";
2
+ import { jsxs as i, jsx as l } from "react/jsx-runtime";
3
+ import * as d from "react";
4
+ import { cva as c } from "class-variance-authority";
5
+ import { cn as o } from "../lib/cn.js";
6
+ const g = c(
7
+ "inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium whitespace-nowrap",
8
+ {
9
+ variants: {
10
+ variant: {
11
+ solid: "",
12
+ soft: "",
13
+ outline: "bg-transparent border",
14
+ dot: "bg-transparent border border-border text-foreground"
15
+ },
16
+ color: {
17
+ default: "",
18
+ primary: "",
19
+ success: "",
20
+ warning: "",
21
+ danger: "",
22
+ info: ""
23
+ }
24
+ },
25
+ compoundVariants: [
26
+ // solid
27
+ { variant: "solid", color: "default", className: "bg-fill text-fill-foreground" },
28
+ { variant: "solid", color: "primary", className: "bg-brand text-brand-foreground" },
29
+ { variant: "solid", color: "success", className: "bg-success text-success-foreground" },
30
+ { variant: "solid", color: "warning", className: "bg-warning text-warning-foreground" },
31
+ { variant: "solid", color: "danger", className: "bg-danger text-danger-foreground" },
32
+ { variant: "solid", color: "info", className: "bg-info text-info-foreground" },
33
+ // soft
34
+ { variant: "soft", color: "default", className: "bg-muted text-muted-foreground" },
35
+ { variant: "soft", color: "primary", className: "bg-fill text-fill-foreground" },
36
+ { variant: "soft", color: "success", className: "bg-success-50 text-success-700" },
37
+ { variant: "soft", color: "warning", className: "bg-warning-50 text-warning-700" },
38
+ { variant: "soft", color: "danger", className: "bg-danger-50 text-danger-700" },
39
+ { variant: "soft", color: "info", className: "bg-info-50 text-info-700" },
40
+ // outline
41
+ { variant: "outline", color: "default", className: "border-border-strong text-foreground" },
42
+ { variant: "outline", color: "primary", className: "border-border-strong text-foreground" },
43
+ { variant: "outline", color: "success", className: "border-success-100 text-success-700" },
44
+ { variant: "outline", color: "warning", className: "border-warning-100 text-warning-700" },
45
+ { variant: "outline", color: "danger", className: "border-danger-100 text-danger-700" },
46
+ { variant: "outline", color: "info", className: "border-info-100 text-info-700" }
47
+ ],
48
+ defaultVariants: { variant: "solid", color: "default" }
49
+ }
50
+ ), f = {
51
+ default: "bg-muted-foreground",
52
+ primary: "bg-brand",
53
+ success: "bg-success",
54
+ warning: "bg-warning",
55
+ danger: "bg-danger",
56
+ info: "bg-info"
57
+ }, u = d.forwardRef(
58
+ ({ className: e, variant: r = "solid", color: a = "default", children: n, ...s }, t) => /* @__PURE__ */ i(
59
+ "span",
60
+ {
61
+ ref: t,
62
+ className: o(g({ variant: r, color: a }), e),
63
+ ...s,
64
+ children: [
65
+ r === "dot" && /* @__PURE__ */ l(
66
+ "span",
67
+ {
68
+ "aria-hidden": !0,
69
+ className: o(
70
+ "size-1.5 rounded-dot",
71
+ f[a ?? "default"]
72
+ )
73
+ }
74
+ ),
75
+ n
76
+ ]
77
+ }
78
+ )
79
+ );
80
+ u.displayName = "Badge";
81
+ export {
82
+ u as Badge
83
+ };
@@ -0,0 +1,16 @@
1
+ import * as React from "react";
2
+ export interface BrandMarkProps extends React.SVGProps<SVGSVGElement> {
3
+ /** Play the blip loop while a `group/brand` ancestor is hovered. */
4
+ hoverAnimate?: boolean;
5
+ }
6
+ /**
7
+ * BrandMark — the growth mark as a static logo that comes alive on hover:
8
+ * while the wrapping `group/brand` link is hovered, the nine cells dim and
9
+ * shrink in the brand film's staggered blip loop (rest state is the solid
10
+ * mark). Inherits `currentColor`; size with a `size-*` class. Keyframes +
11
+ * reduced-motion handling live in `src/styles/index.css` (`.ads-mark-cell`).
12
+ */
13
+ export declare function BrandMark({ className, hoverAnimate, ...props }: BrandMarkProps): React.JSX.Element;
14
+ export interface BrandLoaderProps extends React.SVGProps<SVGSVGElement> {
15
+ }
16
+ export declare function BrandLoader({ className, ...props }: BrandLoaderProps): React.JSX.Element;