@customercity/react 0.1.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 (205) hide show
  1. package/dist/components/agent-activity.d.ts +11 -0
  2. package/dist/components/agent-activity.d.ts.map +1 -0
  3. package/dist/components/agent-activity.js +9 -0
  4. package/dist/components/agent-activity.js.map +1 -0
  5. package/dist/components/agent-card.d.ts +11 -0
  6. package/dist/components/agent-card.d.ts.map +1 -0
  7. package/dist/components/agent-card.js +8 -0
  8. package/dist/components/agent-card.js.map +1 -0
  9. package/dist/components/agent-message.d.ts +14 -0
  10. package/dist/components/agent-message.d.ts.map +1 -0
  11. package/dist/components/agent-message.js +15 -0
  12. package/dist/components/agent-message.js.map +1 -0
  13. package/dist/components/alert.d.ts +12 -0
  14. package/dist/components/alert.d.ts.map +1 -0
  15. package/dist/components/alert.js +27 -0
  16. package/dist/components/alert.js.map +1 -0
  17. package/dist/components/avatar.d.ts +11 -0
  18. package/dist/components/avatar.d.ts.map +1 -0
  19. package/dist/components/avatar.js +25 -0
  20. package/dist/components/avatar.js.map +1 -0
  21. package/dist/components/breadcrumbs.d.ts +10 -0
  22. package/dist/components/breadcrumbs.d.ts.map +1 -0
  23. package/dist/components/breadcrumbs.js +10 -0
  24. package/dist/components/breadcrumbs.js.map +1 -0
  25. package/dist/components/button.d.ts +17 -0
  26. package/dist/components/button.d.ts.map +1 -0
  27. package/dist/components/button.js +34 -0
  28. package/dist/components/button.js.map +1 -0
  29. package/dist/components/card.d.ts +19 -0
  30. package/dist/components/card.d.ts.map +1 -0
  31. package/dist/components/card.js +22 -0
  32. package/dist/components/card.js.map +1 -0
  33. package/dist/components/checkbox.d.ts +8 -0
  34. package/dist/components/checkbox.d.ts.map +1 -0
  35. package/dist/components/checkbox.js +16 -0
  36. package/dist/components/checkbox.js.map +1 -0
  37. package/dist/components/chip.d.ts +12 -0
  38. package/dist/components/chip.d.ts.map +1 -0
  39. package/dist/components/chip.js +14 -0
  40. package/dist/components/chip.js.map +1 -0
  41. package/dist/components/citations.d.ts +18 -0
  42. package/dist/components/citations.d.ts.map +1 -0
  43. package/dist/components/citations.js +22 -0
  44. package/dist/components/citations.js.map +1 -0
  45. package/dist/components/code-block.d.ts +9 -0
  46. package/dist/components/code-block.d.ts.map +1 -0
  47. package/dist/components/code-block.js +20 -0
  48. package/dist/components/code-block.js.map +1 -0
  49. package/dist/components/combobox.d.ts +17 -0
  50. package/dist/components/combobox.d.ts.map +1 -0
  51. package/dist/components/combobox.js +41 -0
  52. package/dist/components/combobox.js.map +1 -0
  53. package/dist/components/confidence-meter.d.ts +12 -0
  54. package/dist/components/confidence-meter.d.ts.map +1 -0
  55. package/dist/components/confidence-meter.js +15 -0
  56. package/dist/components/confidence-meter.js.map +1 -0
  57. package/dist/components/data-table.d.ts +17 -0
  58. package/dist/components/data-table.d.ts.map +1 -0
  59. package/dist/components/data-table.js +8 -0
  60. package/dist/components/data-table.js.map +1 -0
  61. package/dist/components/date-picker.d.ts +11 -0
  62. package/dist/components/date-picker.d.ts.map +1 -0
  63. package/dist/components/date-picker.js +6 -0
  64. package/dist/components/date-picker.js.map +1 -0
  65. package/dist/components/dialog.d.ts +10 -0
  66. package/dist/components/dialog.d.ts.map +1 -0
  67. package/dist/components/dialog.js +21 -0
  68. package/dist/components/dialog.js.map +1 -0
  69. package/dist/components/drawer.d.ts +11 -0
  70. package/dist/components/drawer.d.ts.map +1 -0
  71. package/dist/components/drawer.js +18 -0
  72. package/dist/components/drawer.js.map +1 -0
  73. package/dist/components/dropdown-menu.d.ts +10 -0
  74. package/dist/components/dropdown-menu.d.ts.map +1 -0
  75. package/dist/components/dropdown-menu.js +19 -0
  76. package/dist/components/dropdown-menu.js.map +1 -0
  77. package/dist/components/empty-state.d.ts +11 -0
  78. package/dist/components/empty-state.d.ts.map +1 -0
  79. package/dist/components/empty-state.js +6 -0
  80. package/dist/components/empty-state.js.map +1 -0
  81. package/dist/components/epistemic-badge.d.ts +10 -0
  82. package/dist/components/epistemic-badge.d.ts.map +1 -0
  83. package/dist/components/epistemic-badge.js +38 -0
  84. package/dist/components/epistemic-badge.js.map +1 -0
  85. package/dist/components/field.d.ts +25 -0
  86. package/dist/components/field.d.ts.map +1 -0
  87. package/dist/components/field.js +52 -0
  88. package/dist/components/field.js.map +1 -0
  89. package/dist/components/input.d.ts +6 -0
  90. package/dist/components/input.d.ts.map +1 -0
  91. package/dist/components/input.js +6 -0
  92. package/dist/components/input.js.map +1 -0
  93. package/dist/components/insight-callout.d.ts +10 -0
  94. package/dist/components/insight-callout.d.ts.map +1 -0
  95. package/dist/components/insight-callout.js +7 -0
  96. package/dist/components/insight-callout.js.map +1 -0
  97. package/dist/components/link.d.ts +6 -0
  98. package/dist/components/link.d.ts.map +1 -0
  99. package/dist/components/link.js +7 -0
  100. package/dist/components/link.js.map +1 -0
  101. package/dist/components/logo.d.ts +31 -0
  102. package/dist/components/logo.d.ts.map +1 -0
  103. package/dist/components/logo.js +94 -0
  104. package/dist/components/logo.js.map +1 -0
  105. package/dist/components/markdown.d.ts +7 -0
  106. package/dist/components/markdown.d.ts.map +1 -0
  107. package/dist/components/markdown.js +31 -0
  108. package/dist/components/markdown.js.map +1 -0
  109. package/dist/components/memory-reference.d.ts +12 -0
  110. package/dist/components/memory-reference.d.ts.map +1 -0
  111. package/dist/components/memory-reference.js +21 -0
  112. package/dist/components/memory-reference.js.map +1 -0
  113. package/dist/components/menu.d.ts +18 -0
  114. package/dist/components/menu.d.ts.map +1 -0
  115. package/dist/components/menu.js +11 -0
  116. package/dist/components/menu.js.map +1 -0
  117. package/dist/components/motion.d.ts +38 -0
  118. package/dist/components/motion.d.ts.map +1 -0
  119. package/dist/components/motion.js +67 -0
  120. package/dist/components/motion.js.map +1 -0
  121. package/dist/components/pagination.d.ts +10 -0
  122. package/dist/components/pagination.d.ts.map +1 -0
  123. package/dist/components/pagination.js +23 -0
  124. package/dist/components/pagination.js.map +1 -0
  125. package/dist/components/popover.d.ts +7 -0
  126. package/dist/components/popover.d.ts.map +1 -0
  127. package/dist/components/popover.js +11 -0
  128. package/dist/components/popover.js.map +1 -0
  129. package/dist/components/progress.d.ts +11 -0
  130. package/dist/components/progress.d.ts.map +1 -0
  131. package/dist/components/progress.js +13 -0
  132. package/dist/components/progress.js.map +1 -0
  133. package/dist/components/prompt-input.d.ts +14 -0
  134. package/dist/components/prompt-input.d.ts.map +1 -0
  135. package/dist/components/prompt-input.js +29 -0
  136. package/dist/components/prompt-input.js.map +1 -0
  137. package/dist/components/radio.d.ts +9 -0
  138. package/dist/components/radio.d.ts.map +1 -0
  139. package/dist/components/radio.js +17 -0
  140. package/dist/components/radio.js.map +1 -0
  141. package/dist/components/score-badge.d.ts +21 -0
  142. package/dist/components/score-badge.d.ts.map +1 -0
  143. package/dist/components/score-badge.js +36 -0
  144. package/dist/components/score-badge.js.map +1 -0
  145. package/dist/components/select.d.ts +18 -0
  146. package/dist/components/select.d.ts.map +1 -0
  147. package/dist/components/select.js +9 -0
  148. package/dist/components/select.js.map +1 -0
  149. package/dist/components/skeleton.d.ts +4 -0
  150. package/dist/components/skeleton.d.ts.map +1 -0
  151. package/dist/components/skeleton.js +7 -0
  152. package/dist/components/skeleton.js.map +1 -0
  153. package/dist/components/slider.d.ts +4 -0
  154. package/dist/components/slider.d.ts.map +1 -0
  155. package/dist/components/slider.js +11 -0
  156. package/dist/components/slider.js.map +1 -0
  157. package/dist/components/sparkle-badge.d.ts +27 -0
  158. package/dist/components/sparkle-badge.d.ts.map +1 -0
  159. package/dist/components/sparkle-badge.js +23 -0
  160. package/dist/components/sparkle-badge.js.map +1 -0
  161. package/dist/components/spinner.d.ts +9 -0
  162. package/dist/components/spinner.d.ts.map +1 -0
  163. package/dist/components/spinner.js +8 -0
  164. package/dist/components/spinner.js.map +1 -0
  165. package/dist/components/streaming-text.d.ts +13 -0
  166. package/dist/components/streaming-text.d.ts.map +1 -0
  167. package/dist/components/streaming-text.js +26 -0
  168. package/dist/components/streaming-text.js.map +1 -0
  169. package/dist/components/switch.d.ts +8 -0
  170. package/dist/components/switch.d.ts.map +1 -0
  171. package/dist/components/switch.js +15 -0
  172. package/dist/components/switch.js.map +1 -0
  173. package/dist/components/tabs.d.ts +18 -0
  174. package/dist/components/tabs.d.ts.map +1 -0
  175. package/dist/components/tabs.js +29 -0
  176. package/dist/components/tabs.js.map +1 -0
  177. package/dist/components/textarea.d.ts +8 -0
  178. package/dist/components/textarea.d.ts.map +1 -0
  179. package/dist/components/textarea.js +12 -0
  180. package/dist/components/textarea.js.map +1 -0
  181. package/dist/components/toast.d.ts +8 -0
  182. package/dist/components/toast.d.ts.map +1 -0
  183. package/dist/components/toast.js +20 -0
  184. package/dist/components/toast.js.map +1 -0
  185. package/dist/components/tooltip.d.ts +13 -0
  186. package/dist/components/tooltip.d.ts.map +1 -0
  187. package/dist/components/tooltip.js +10 -0
  188. package/dist/components/tooltip.js.map +1 -0
  189. package/dist/components/verified-badge.d.ts +14 -0
  190. package/dist/components/verified-badge.d.ts.map +1 -0
  191. package/dist/components/verified-badge.js +20 -0
  192. package/dist/components/verified-badge.js.map +1 -0
  193. package/dist/index.d.ts +51 -0
  194. package/dist/index.d.ts.map +1 -0
  195. package/dist/index.js +55 -0
  196. package/dist/index.js.map +1 -0
  197. package/dist/lib/types.d.ts +20 -0
  198. package/dist/lib/types.d.ts.map +1 -0
  199. package/dist/lib/types.js +7 -0
  200. package/dist/lib/types.js.map +1 -0
  201. package/dist/lib/utils.d.ts +4 -0
  202. package/dist/lib/utils.d.ts.map +1 -0
  203. package/dist/lib/utils.js +7 -0
  204. package/dist/lib/utils.js.map +1 -0
  205. package/package.json +70 -0
@@ -0,0 +1,31 @@
1
+ import * as React from "react";
2
+ export type LogoLayout = "horizontal" | "vertical" | "mark";
3
+ export type LogoBadge = "shadow" | "flat" | "none";
4
+ export type LogoTextColor = "black" | "white";
5
+ export interface LogoMarkProps extends React.HTMLAttributes<SVGSVGElement> {
6
+ /** Mark size in px (square). */
7
+ size?: number;
8
+ /** White tile behind the glyph: "shadow" / "flat" / "none" (bare glyph). */
9
+ badge?: LogoBadge;
10
+ /** Glyph colour. Defaults to brand blue with a tile, currentColor when bare. */
11
+ color?: string;
12
+ /** Accessible name; omit to mark decorative. */
13
+ title?: string;
14
+ }
15
+ /** The squared Customer City mark — glyph in a white rounded tile. */
16
+ export declare const LogoMark: React.ForwardRefExoticComponent<LogoMarkProps & React.RefAttributes<SVGSVGElement>>;
17
+ export interface LogoProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, "color"> {
18
+ /** Lockup orientation. `mark` renders the squared mark only. */
19
+ layout?: LogoLayout;
20
+ /** White tile behind the mark. */
21
+ badge?: LogoBadge;
22
+ /** Wordmark colour. */
23
+ textColor?: LogoTextColor;
24
+ /** Mark height in px; the wordmark scales from it. */
25
+ size?: number;
26
+ /** Accessible name. Defaults to "Customer City". */
27
+ title?: string;
28
+ }
29
+ /** Full Customer City logo lockup. */
30
+ export declare const Logo: React.ForwardRefExoticComponent<LogoProps & React.RefAttributes<HTMLSpanElement>>;
31
+ //# sourceMappingURL=logo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logo.d.ts","sourceRoot":"","sources":["../../src/components/logo.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAkE/B,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,UAAU,GAAG,MAAM,CAAC;AAC5D,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AACnD,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,OAAO,CAAC;AAE9C,MAAM,WAAW,aAAc,SAAQ,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC;IACxE,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,sEAAsE;AACtE,eAAO,MAAM,QAAQ,qFA0CpB,CAAC;AAqBF,MAAM,WAAW,SAAU,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACrF,gEAAgE;IAChE,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,kCAAkC;IAClC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,uBAAuB;IACvB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,sCAAsC;AACtC,eAAO,MAAM,IAAI,mFA+BhB,CAAC"}
@@ -0,0 +1,94 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ /**
4
+ * Customer City — Logo.
5
+ *
6
+ * Built from the OFFICIAL vector artwork exported from the brand Figma
7
+ * (file gM66S8PXlK8k2CRhMetUP3, frame `Logo_assets`, node 1066:55540). The mark
8
+ * glyph and the "Customer City" wordmark are the real outlined paths — not a font
9
+ * render — so the lockup is pixel-faithful and needs no webfont.
10
+ *
11
+ * The component composes two primitives (LogoMark + the wordmark) to reproduce the
12
+ * full Figma variant matrix:
13
+ * layout: "horizontal" | "vertical" | "mark"
14
+ * textColor: "black" (#1E232C) | "white" (#FFFFFF) — wordmark colour
15
+ * badge: "shadow" | "flat" | "none" — the white rounded mark tile
16
+ *
17
+ * ┌─ Figma named asset ─────────────────┬─ props ─────────────────────────────────────────┐
18
+ * │ logo/white_text/horizontal/+shadow │ layout="horizontal" textColor="white" badge="shadow" │
19
+ * │ logo/white_text/horizontal/no_shadow│ layout="horizontal" textColor="white" badge="flat" │
20
+ * │ logo/black_text/horizontal/+shadow │ layout="horizontal" textColor="black" badge="shadow" │
21
+ * │ logo/black_text/horizontal/no_shadow│ layout="horizontal" textColor="black" badge="flat" │
22
+ * │ logo/white_text/vertical/* │ layout="vertical" textColor="white" … │
23
+ * │ logo/black_text/vertical/* │ layout="vertical" textColor="black" … │
24
+ * │ logo/no_text/squared/+shadow │ layout="mark" badge="shadow" │
25
+ * │ logo/no_text/squared/no_shadow │ layout="mark" badge="flat" │
26
+ * └─────────────────────────────────────┴─────────────────────────────────────────────────┘
27
+ *
28
+ * Brand colours are fixed (NOT themed tokens) so the logo renders identically in
29
+ * light and dark, per brand convention. Use textColor="white" + a coloured/dark
30
+ * surface for the reversed lockup.
31
+ */
32
+ const BRAND = "#1554FF";
33
+ const INK = "#1E232C";
34
+ // --- Official artwork (Figma) ------------------------------------------------
35
+ // Mark tile: 80×80 rounded square.
36
+ const MARK_BADGE = "M0 16C0 7.16344 7.16344 0 16 0H64C72.8366 0 80 7.16344 80 16V64C80 72.8366 72.8366 80 64 80H16C7.16344 80 0 72.8366 0 64V16Z";
37
+ // Mark glyph (the "C-bracket + 3 lines"), within the 80×80 tile.
38
+ const MARK_GLYPH = [
39
+ "M24.1273 11H48.8348L53.1273 15.2925V19.4364H24.1273C22.0888 19.4364 20.4364 21.0888 20.4364 23.1273V56.8727C20.4364 58.9112 22.0888 60.5636 24.1273 60.5636H53.1273V64.8565L48.9838 69H24.1273C17.4296 69 12 63.5704 12 56.8727V23.1273C12 16.4296 17.4296 11 24.1273 11Z",
40
+ "M24.6545 27.8727C24.6545 25.5431 26.5431 23.6545 28.8727 23.6545H63.6727C66.0024 23.6545 67.8909 25.5431 67.8909 27.8727C67.8909 30.2024 66.0024 32.0909 63.6727 32.0909H28.8727C26.5431 32.0909 24.6545 30.2024 24.6545 27.8727Z",
41
+ "M24.6545 40C24.6545 37.6704 26.5431 35.7818 28.8727 35.7818H53.1273C55.4569 35.7818 57.3455 37.6704 57.3455 40C57.3455 42.3296 55.4569 44.2182 53.1273 44.2182H28.8727C26.5431 44.2182 24.6545 42.3296 24.6545 40Z",
42
+ "M24.6545 52.1273C24.6545 49.7976 26.5431 47.9091 28.8727 47.9091H42.5818C44.9115 47.9091 46.8 49.7976 46.8 52.1273C46.8 54.4569 44.9115 56.3455 42.5818 56.3455H28.8727C26.5431 56.3455 24.6545 54.4569 24.6545 52.1273Z",
43
+ ];
44
+ // "Customer City" wordmark — outlined letterforms, in their native 450×80 space.
45
+ const WORDMARK_VIEWBOX = "110 18.428 339.1 51.612";
46
+ const WORDMARK = [
47
+ "M110 50.0024V29.9096C110 23.9112 112.999 20.912 118.998 20.912H134.012L137.269 23.4512V27.0392H119.163C117.544 27.0392 116.734 27.8304 116.734 29.4128V50.4992C116.734 52.0816 117.544 52.8728 119.163 52.8728H137.269V56.4608L134.012 59H118.998C112.999 59 110 56.0008 110 50.0024Z",
48
+ "M141.956 50.2784V30.02H148.414V50.8304C148.414 52.5232 149.261 53.3696 150.953 53.3696H160.061V30.02H166.52V59H150.677C144.863 59 141.956 56.0928 141.956 50.2784Z",
49
+ "M171.741 56.8472V53.3696H184.492C186.185 53.3696 187.031 52.468 187.031 50.6648C187.031 48.788 186.332 47.7208 184.934 47.4632L178.751 46.4696C174.078 45.66 171.741 43.0104 171.741 38.5208C171.741 32.8536 174.648 30.02 180.463 30.02H189.239L192.165 32.1728V35.6504H180.739C179.009 35.6504 178.144 36.552 178.144 38.3552C178.144 40.1584 178.88 41.1888 180.352 41.4464L186.535 42.44C191.171 43.2128 193.49 45.8808 193.49 50.444C193.49 56.148 190.564 59 184.713 59H174.667L171.741 56.8472Z",
50
+ "M198.439 50.2784V20.912H204.897V30.02H214.778V35.6504H204.897V50.8304C204.897 52.5232 205.743 53.3696 207.436 53.3696H215.33V56.8472L212.404 59H207.16C201.346 59 198.439 56.0928 198.439 50.2784Z",
51
+ "M219.02 50.2784V38.7416C219.02 32.9272 221.927 30.02 227.742 30.02H235.47C241.247 30.02 244.136 32.9272 244.136 38.7416V50.2784C244.136 56.0928 241.247 59 235.47 59H227.742C221.927 59 219.02 56.0928 219.02 50.2784ZM225.479 50.8304C225.479 52.5232 226.325 53.3696 228.018 53.3696H235.139C236.831 53.3696 237.678 52.5232 237.678 50.8304V38.1896C237.678 36.4968 236.831 35.6504 235.139 35.6504H228.018C226.325 35.6504 225.479 36.4968 225.479 38.1896V50.8304Z",
52
+ "M249.967 59V30.02H282.977C288.754 30.02 291.643 32.9272 291.643 38.7416V59H285.185V38.1896C285.185 36.4968 284.338 35.6504 282.646 35.6504H274.034V59H267.576V35.6504H256.426V59H249.967Z",
53
+ "M297.281 50.2784V38.7416C297.281 32.9272 300.188 30.02 306.003 30.02H313.179C318.956 30.02 321.845 32.9272 321.845 38.7416V46.9112H303.739V50.8304C303.739 52.5232 304.586 53.3696 306.279 53.3696H320.741V56.8472L317.815 59H306.003C300.188 59 297.281 56.0928 297.281 50.2784ZM303.739 41.888H315.387V38.1896C315.387 36.4968 314.54 35.6504 312.847 35.6504H306.279C304.586 35.6504 303.739 36.4968 303.739 38.1896V41.888Z",
54
+ "M327.468 59V33.608C328.793 31.216 331.332 30.02 335.086 30.02H340.882L343.807 32.1728V35.6504H336.576C335.325 35.6504 334.442 35.9632 333.927 36.5888V59H327.468Z",
55
+ "M358.62 50.0024V29.9096C358.62 23.9112 361.619 20.912 367.618 20.912H382.632L385.889 23.4512V27.0392H367.783C366.164 27.0392 365.355 27.8304 365.355 29.4128V50.4992C365.355 52.0816 366.164 52.8728 367.783 52.8728H385.889V56.4608L382.632 59H367.618C361.619 59 358.62 56.0008 358.62 50.0024Z",
56
+ "M390.631 24.9968V18.428H397.421V24.9968H390.631ZM390.797 59V30.02H397.255V59H390.797Z",
57
+ "M403.292 50.2784V20.912H409.751V30.02H419.632V35.6504H409.751V50.8304C409.751 52.5232 410.597 53.3696 412.29 53.3696H420.184V56.8472L417.258 59H412.014C406.2 59 403.292 56.0928 403.292 50.2784Z",
58
+ "M421.224 31.0136L421.887 30.02H427.462L434.748 53.3696H435.576L442.863 30.02H448.438L449.1 31.0136L436.46 70.04H430.884L430.222 69.0464L433.7 59H430.332L421.224 31.0136Z",
59
+ ];
60
+ // Native aspect ratio of the wordmark (width / height).
61
+ const WORDMARK_RATIO = 339.1 / 51.612;
62
+ /** The squared Customer City mark — glyph in a white rounded tile. */
63
+ export const LogoMark = React.forwardRef(({ size = 40, badge = "flat", color, title, ...rest }, ref) => {
64
+ const uid = React.useId();
65
+ const shadowId = `cc-mark-shadow-${uid}`;
66
+ const clipId = `cc-mark-clip-${uid}`;
67
+ const bare = badge === "none";
68
+ const glyphColor = color ?? (bare ? "currentColor" : BRAND);
69
+ return (_jsxs("svg", { ref: ref, width: size, height: size, viewBox: "0 0 80 80", fill: "none", xmlns: "http://www.w3.org/2000/svg", role: title ? "img" : "presentation", "aria-label": title, "aria-hidden": title ? undefined : true, ...rest, children: [badge === "shadow" && (_jsx("defs", { children: _jsx("filter", { id: shadowId, x: "-25%", y: "-25%", width: "150%", height: "160%", children: _jsx("feDropShadow", { dx: "0", dy: "4", stdDeviation: "5", floodColor: BRAND, floodOpacity: "0.28" }) }) })), title && _jsx("title", { children: title }), !bare && (_jsx("path", { d: MARK_BADGE, fill: "#FFFFFF", filter: badge === "shadow" ? `url(#${shadowId})` : undefined })), _jsx("clipPath", { id: clipId, children: _jsx("rect", { width: "55.8909", height: "58", transform: "translate(12 11)", fill: "#FFFFFF" }) }), _jsx("g", { clipPath: `url(#${clipId})`, children: MARK_GLYPH.map((d) => (_jsx("path", { d: d, fill: glyphColor }, d))) })] }));
70
+ });
71
+ LogoMark.displayName = "LogoMark";
72
+ function Wordmark({ height, color }) {
73
+ return (_jsx("svg", { height: height, width: Math.round(height * WORDMARK_RATIO), viewBox: WORDMARK_VIEWBOX, fill: "none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true", focusable: "false", children: WORDMARK.map((d) => (_jsx("path", { d: d, fill: color }, d))) }));
74
+ }
75
+ /** Full Customer City logo lockup. */
76
+ export const Logo = React.forwardRef(({ layout = "horizontal", badge = "flat", textColor = "black", size = 40, title = "Customer City", style, ...rest }, ref) => {
77
+ if (layout === "mark") {
78
+ return _jsx(LogoMark, { size: size, badge: badge, title: title, ...rest });
79
+ }
80
+ const vertical = layout === "vertical";
81
+ const ink = textColor === "white" ? "#FFFFFF" : INK;
82
+ const markColor = badge === "none" ? ink : undefined; // bare mark inherits wordmark colour
83
+ // Figma horizontal: wordmark ≈ 0.645× mark height. Vertical wordmark sits a touch smaller.
84
+ const wordHeight = Math.round(size * (vertical ? 0.5 : 0.645));
85
+ return (_jsxs("span", { ref: ref, role: "img", "aria-label": title, style: {
86
+ display: "inline-flex",
87
+ flexDirection: vertical ? "column" : "row",
88
+ alignItems: "center",
89
+ gap: vertical ? Math.round(size * 0.22) : Math.round(size * 0.3),
90
+ ...style,
91
+ }, ...rest, children: [_jsx(LogoMark, { size: size, badge: badge, color: markColor }), _jsx(Wordmark, { height: wordHeight, color: ink })] }));
92
+ });
93
+ Logo.displayName = "Logo";
94
+ //# sourceMappingURL=logo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logo.js","sourceRoot":"","sources":["../../src/components/logo.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import * as React from "react";
2
+ /** Token-styled markdown renderer for agent content. */
3
+ export declare function MarkdownRenderer({ children, className }: {
4
+ children: string;
5
+ className?: string;
6
+ }): React.JSX.Element;
7
+ //# sourceMappingURL=markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/components/markdown.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,wDAAwD;AACxD,wBAAgB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,qBA0CjG"}
@@ -0,0 +1,31 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import ReactMarkdown from "react-markdown";
3
+ import remarkGfm from "remark-gfm";
4
+ import { cn } from "../lib/utils";
5
+ import { CodeBlock } from "./code-block";
6
+ /** Token-styled markdown renderer for agent content. */
7
+ export function MarkdownRenderer({ children, className }) {
8
+ return (_jsx("div", { className: cn("text-[14px] leading-relaxed text-foreground", className), children: _jsx(ReactMarkdown, { remarkPlugins: [remarkGfm], components: {
9
+ h1: ({ children }) => _jsx("h1", { className: "mb-2 mt-4 text-[22px] font-bold text-foreground first:mt-0", children: children }),
10
+ h2: ({ children }) => _jsx("h2", { className: "mb-2 mt-4 text-[17px] font-bold text-foreground first:mt-0", children: children }),
11
+ h3: ({ children }) => _jsx("h3", { className: "mb-1.5 mt-3 text-[15px] font-semibold text-foreground first:mt-0", children: children }),
12
+ p: ({ children }) => _jsx("p", { className: "mb-3 text-foreground last:mb-0", children: children }),
13
+ a: ({ children, href }) => (_jsx("a", { href: href, className: "font-medium text-brand hover:underline", target: "_blank", rel: "noopener noreferrer", children: children })),
14
+ ul: ({ children }) => _jsx("ul", { className: "mb-3 ml-5 list-disc space-y-1 text-foreground", children: children }),
15
+ ol: ({ children }) => _jsx("ol", { className: "mb-3 ml-5 list-decimal space-y-1 text-foreground", children: children }),
16
+ blockquote: ({ children }) => (_jsx("blockquote", { className: "my-3 border-l-2 border-border pl-3 text-muted", children: children })),
17
+ hr: () => _jsx("hr", { className: "my-4 border-border-light" }),
18
+ table: ({ children }) => (_jsx("div", { className: "my-3 overflow-x-auto", children: _jsx("table", { className: "w-full border-collapse overflow-hidden rounded-md border border-border-light text-[13px]", children: children }) })),
19
+ th: ({ children }) => _jsx("th", { className: "border border-border-light bg-background-alt px-2.5 py-1.5 text-left font-semibold", children: children }),
20
+ td: ({ children }) => _jsx("td", { className: "border border-border-light px-2.5 py-1.5", children: children }),
21
+ code: ({ className: cls, children }) => {
22
+ const match = /language-(\w+)/.exec(cls || "");
23
+ const text = String(children).replace(/\n$/, "");
24
+ if (match || text.includes("\n")) {
25
+ return _jsx(CodeBlock, { code: text, language: match?.[1] });
26
+ }
27
+ return _jsx("code", { className: "rounded bg-accent px-1.5 py-0.5 font-mono text-[12.5px] text-foreground", children: children });
28
+ },
29
+ }, children: children }) }));
30
+ }
31
+ //# sourceMappingURL=markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/components/markdown.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ interface MemoryReferenceProps {
2
+ /** One-line summary shown inline. */
3
+ summary: string;
4
+ category?: string;
5
+ content?: string;
6
+ source?: string;
7
+ className?: string;
8
+ }
9
+ /** Inline "based on agent memory" callout with an optional detail modal. */
10
+ export declare function MemoryReference({ summary, category, content, source, className }: MemoryReferenceProps): import("react").JSX.Element;
11
+ export {};
12
+ //# sourceMappingURL=memory-reference.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-reference.d.ts","sourceRoot":"","sources":["../../src/components/memory-reference.tsx"],"names":[],"mappings":"AAQA,UAAU,oBAAoB;IAC5B,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,oBAAoB,+BAqFtG"}
@@ -0,0 +1,21 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useState, useEffect } from "react";
4
+ import { AnimatePresence, motion } from "framer-motion";
5
+ import { Brain, Eye, X } from "lucide-react";
6
+ import { MetaSparkle } from "./sparkle-badge";
7
+ import { cn } from "../lib/utils";
8
+ /** Inline "based on agent memory" callout with an optional detail modal. */
9
+ export function MemoryReference({ summary, category, content, source, className }) {
10
+ const [open, setOpen] = useState(false);
11
+ const hasDetail = Boolean(content);
12
+ useEffect(() => {
13
+ if (!open)
14
+ return;
15
+ const onKey = (e) => e.key === "Escape" && setOpen(false);
16
+ document.addEventListener("keydown", onKey);
17
+ return () => document.removeEventListener("keydown", onKey);
18
+ }, [open]);
19
+ return (_jsxs(_Fragment, { children: [_jsx("div", { className: cn("rounded-lg border border-sparkle-border bg-sparkle-light p-3", className), role: "complementary", "aria-label": "Memory-based context", children: _jsxs("div", { className: "flex items-start gap-2", children: [_jsx(Brain, { className: "mt-0.5 h-3.5 w-3.5 shrink-0 text-sparkle" }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("p", { className: "mb-0.5 text-[12px] font-semibold text-sparkle", children: "Based on agent memory" }), _jsx("p", { className: "text-[13px] leading-[18px] text-muted", children: summary }), hasDetail && (_jsxs("button", { type: "button", onClick: () => setOpen(true), className: "mt-1.5 inline-flex items-center gap-1 text-[12px] font-semibold text-brand hover:text-brand-hover", "aria-haspopup": "dialog", children: [_jsx(Eye, { className: "h-3 w-3" }), " View memory"] }))] })] }) }), _jsx(AnimatePresence, { children: open && hasDetail && (_jsx("div", { className: "fixed inset-0 z-[1300] flex items-center justify-center bg-black/50 p-4", onClick: (e) => e.target === e.currentTarget && setOpen(false), role: "dialog", "aria-modal": "true", children: _jsxs(motion.div, { initial: { opacity: 0, scale: 0.95 }, animate: { opacity: 1, scale: 1 }, exit: { opacity: 0, scale: 0.95 }, transition: { duration: 0.2 }, className: "w-full max-w-[480px] overflow-auto rounded-lg bg-card card-shadow-lg", children: [_jsxs("div", { className: "flex items-center justify-between border-b border-border-light p-5", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(MetaSparkle, { size: 16 }), _jsx("h3", { className: "text-[17px] font-bold text-foreground", children: "Memory detail" })] }), _jsx("button", { onClick: () => setOpen(false), "aria-label": "Close", className: "flex h-8 w-8 items-center justify-center rounded-full hover:bg-accent", children: _jsx(X, { className: "h-4 w-4 text-muted" }) })] }), _jsxs("div", { className: "space-y-4 p-5", children: [category && (_jsxs("div", { children: [_jsx("p", { className: "mb-1 text-[11px] font-bold uppercase tracking-[0.04em] text-muted-foreground", children: "Category" }), _jsx("span", { className: "rounded-md bg-sparkle-bg px-2 py-0.5 text-[12px] font-semibold text-sparkle", children: category })] })), _jsxs("div", { children: [_jsx("p", { className: "mb-1 text-[11px] font-bold uppercase tracking-[0.04em] text-muted-foreground", children: "Content" }), _jsx("p", { className: "text-[14px] leading-relaxed text-foreground", children: content })] }), source && (_jsxs("div", { children: [_jsx("p", { className: "mb-1 text-[11px] font-bold uppercase tracking-[0.04em] text-muted-foreground", children: "Source" }), _jsx("p", { className: "text-[13px] text-muted", children: source })] }))] })] }) })) })] }));
20
+ }
21
+ //# sourceMappingURL=memory-reference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-reference.js","sourceRoot":"","sources":["../../src/components/memory-reference.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import * as React from "react";
2
+ export interface MenuItem {
3
+ id: string;
4
+ label: string;
5
+ icon?: React.ReactNode;
6
+ shortcut?: string;
7
+ disabled?: boolean;
8
+ }
9
+ interface MenuProps {
10
+ items: MenuItem[];
11
+ value?: string;
12
+ onSelect?: (id: string) => void;
13
+ className?: string;
14
+ }
15
+ /** Inline vertical menu list (e.g. settings nav). For floating menus use DropdownMenu. */
16
+ export declare function Menu({ items, value, onSelect, className }: MenuProps): React.JSX.Element;
17
+ export {};
18
+ //# sourceMappingURL=menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../src/components/menu.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,SAAS;IACjB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,0FAA0F;AAC1F,wBAAgB,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,SAAS,qBAwBpE"}
@@ -0,0 +1,11 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { cn } from "../lib/utils";
4
+ /** Inline vertical menu list (e.g. settings nav). For floating menus use DropdownMenu. */
5
+ export function Menu({ items, value, onSelect, className }) {
6
+ return (_jsx("nav", { className: cn("flex flex-col gap-0.5", className), role: "menu", children: items.map((item) => {
7
+ const active = item.id === value;
8
+ return (_jsxs("button", { role: "menuitem", disabled: item.disabled, onClick: () => onSelect?.(item.id), className: cn("flex items-center gap-2.5 rounded-md px-3 py-2 text-left text-[13px] transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand disabled:opacity-50", active ? "bg-brand-light font-semibold text-brand" : "text-foreground hover:bg-accent"), children: [item.icon && _jsx("span", { className: cn("shrink-0", active ? "text-brand" : "text-muted"), children: item.icon }), _jsx("span", { className: "flex-1", children: item.label }), item.shortcut && _jsx("span", { className: "font-mono text-[11px] text-muted-foreground", children: item.shortcut })] }, item.id));
9
+ }) }));
10
+ }
11
+ //# sourceMappingURL=menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu.js","sourceRoot":"","sources":["../../src/components/menu.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAiBlC,0FAA0F;AAC1F,MAAM,UAAU,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAa;IACnE,OAAO,CACL,cAAK,SAAS,EAAE,EAAE,CAAC,uBAAuB,EAAE,SAAS,CAAC,EAAE,IAAI,EAAC,MAAM,YAChE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAClB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC;YACjC,OAAO,CACL,kBAEE,IAAI,EAAC,UAAU,EACf,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAClC,SAAS,EAAE,EAAE,CACX,qLAAqL,EACrL,MAAM,CAAC,CAAC,CAAC,yCAAyC,CAAC,CAAC,CAAC,iCAAiC,CACvF,aAEA,IAAI,CAAC,IAAI,IAAI,eAAM,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,YAAG,IAAI,CAAC,IAAI,GAAQ,EACvG,eAAM,SAAS,EAAC,QAAQ,YAAE,IAAI,CAAC,KAAK,GAAQ,EAC3C,IAAI,CAAC,QAAQ,IAAI,eAAM,SAAS,EAAC,6CAA6C,YAAE,IAAI,CAAC,QAAQ,GAAQ,KAXjG,IAAI,CAAC,EAAE,CAYL,CACV,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,38 @@
1
+ import type { ReactNode } from "react";
2
+ /** Subtle fade + slide-up on mount. Respects prefers-reduced-motion. */
3
+ export declare function PageTransition({ children, className }: {
4
+ children: ReactNode;
5
+ className?: string;
6
+ }): import("react").JSX.Element;
7
+ /** Container for a staggered list; wrap children in <StaggerItem>. */
8
+ export declare function StaggerList({ children, className }: {
9
+ children: ReactNode;
10
+ className?: string;
11
+ }): import("react").JSX.Element;
12
+ export declare function StaggerItem({ children, className }: {
13
+ children: ReactNode;
14
+ className?: string;
15
+ }): import("react").JSX.Element;
16
+ /** Simple fade-in wrapper. */
17
+ export declare function FadeIn({ children, className, delay }: {
18
+ children: ReactNode;
19
+ className?: string;
20
+ delay?: number;
21
+ }): import("react").JSX.Element;
22
+ /** Subtle press-down scale for interactive elements. */
23
+ export declare function ScalePress({ children, className }: {
24
+ children: ReactNode;
25
+ className?: string;
26
+ }): import("react").JSX.Element;
27
+ /** Agent shimmer border — violet → purple → pink (CC agent identity). */
28
+ export declare function AgentSparkleShimmer({ children, className }: {
29
+ children: ReactNode;
30
+ className?: string;
31
+ }): import("react").JSX.Element;
32
+ /** Animated collapsible content. */
33
+ export declare function Collapse({ isOpen, children, className }: {
34
+ isOpen: boolean;
35
+ children: ReactNode;
36
+ className?: string;
37
+ }): import("react").JSX.Element;
38
+ //# sourceMappingURL=motion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motion.d.ts","sourceRoot":"","sources":["../../src/components/motion.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAalG;AAWD,sEAAsE;AACtE,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAQ/F;AAED,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAQ/F;AAED,8BAA8B;AAC9B,wBAAgB,MAAM,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAS,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,+BAarH;AAED,wDAAwD;AACxD,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAQ9F;AAED,yEAAyE;AACzE,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAmBvG;AAED,oCAAoC;AACpC,wBAAgB,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAkBrH"}
@@ -0,0 +1,67 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { motion, AnimatePresence, useReducedMotion } from "framer-motion";
4
+ const SPRING_GENTLE = { type: "spring", stiffness: 260, damping: 30 };
5
+ const EASE_OUT = [0.22, 1, 0.36, 1];
6
+ /** Subtle fade + slide-up on mount. Respects prefers-reduced-motion. */
7
+ export function PageTransition({ children, className }) {
8
+ const reduced = useReducedMotion();
9
+ if (reduced)
10
+ return _jsx("div", { className: className, children: children });
11
+ return (_jsx(motion.div, { initial: { opacity: 0, y: 8 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.3, ease: EASE_OUT }, className: className, children: children }));
12
+ }
13
+ const containerVariants = {
14
+ hidden: {},
15
+ visible: { transition: { staggerChildren: 0.05, delayChildren: 0.1 } },
16
+ };
17
+ const itemVariants = {
18
+ hidden: { opacity: 0, y: 12 },
19
+ visible: { opacity: 1, y: 0, transition: { duration: 0.3, ease: EASE_OUT } },
20
+ };
21
+ /** Container for a staggered list; wrap children in <StaggerItem>. */
22
+ export function StaggerList({ children, className }) {
23
+ const reduced = useReducedMotion();
24
+ if (reduced)
25
+ return _jsx("div", { className: className, children: children });
26
+ return (_jsx(motion.div, { variants: containerVariants, initial: "hidden", animate: "visible", className: className, children: children }));
27
+ }
28
+ export function StaggerItem({ children, className }) {
29
+ const reduced = useReducedMotion();
30
+ if (reduced)
31
+ return _jsx("div", { className: className, children: children });
32
+ return (_jsx(motion.div, { variants: itemVariants, className: className, children: children }));
33
+ }
34
+ /** Simple fade-in wrapper. */
35
+ export function FadeIn({ children, className, delay = 0 }) {
36
+ const reduced = useReducedMotion();
37
+ if (reduced)
38
+ return _jsx("div", { className: className, children: children });
39
+ return (_jsx(motion.div, { initial: { opacity: 0 }, animate: { opacity: 1 }, transition: { duration: 0.4, delay, ease: EASE_OUT }, className: className, children: children }));
40
+ }
41
+ /** Subtle press-down scale for interactive elements. */
42
+ export function ScalePress({ children, className }) {
43
+ const reduced = useReducedMotion();
44
+ if (reduced)
45
+ return _jsx("div", { className: className, children: children });
46
+ return (_jsx(motion.div, { whileTap: { scale: 0.97 }, transition: SPRING_GENTLE, className: className, children: children }));
47
+ }
48
+ /** Agent shimmer border — violet → purple → pink (CC agent identity). */
49
+ export function AgentSparkleShimmer({ children, className }) {
50
+ const reduced = useReducedMotion();
51
+ if (reduced)
52
+ return _jsx("div", { className: className, children: children });
53
+ return (_jsx(motion.div, { className: className, animate: {
54
+ boxShadow: [
55
+ "0 0 0 1px rgba(170, 0, 255, 0.18)",
56
+ "0 0 0 1px rgba(118, 55, 255, 0.18)",
57
+ "0 0 0 1px rgba(213, 0, 249, 0.18)",
58
+ "0 0 0 1px rgba(170, 0, 255, 0.18)",
59
+ ],
60
+ }, transition: { duration: 4, ease: "easeInOut", repeat: Infinity }, children: children }));
61
+ }
62
+ /** Animated collapsible content. */
63
+ export function Collapse({ isOpen, children, className }) {
64
+ const reduced = useReducedMotion();
65
+ return (_jsx(AnimatePresence, { initial: false, children: isOpen && (_jsx(motion.div, { initial: reduced ? { opacity: 1 } : { height: 0, opacity: 0 }, animate: reduced ? { opacity: 1 } : { height: "auto", opacity: 1 }, exit: reduced ? { opacity: 0 } : { height: 0, opacity: 0 }, transition: { duration: 0.2, ease: EASE_OUT }, className: className, style: { overflow: "hidden" }, children: children })) }));
66
+ }
67
+ //# sourceMappingURL=motion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motion.js","sourceRoot":"","sources":["../../src/components/motion.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,gBAAgB,EAAiB,MAAM,eAAe,CAAC;AAGzF,MAAM,aAAa,GAAG,EAAE,IAAI,EAAE,QAAiB,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AAC/E,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAU,CAAC;AAE7C,wEAAwE;AACxE,MAAM,UAAU,cAAc,CAAC,EAAE,QAAQ,EAAE,SAAS,EAA+C;IACjG,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IACnC,IAAI,OAAO;QAAE,OAAO,cAAK,SAAS,EAAE,SAAS,YAAG,QAAQ,GAAO,CAAC;IAChE,OAAO,CACL,KAAC,MAAM,CAAC,GAAG,IACT,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAC7B,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAC7B,UAAU,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,EAC7C,SAAS,EAAE,SAAS,YAEnB,QAAQ,GACE,CACd,CAAC;AACJ,CAAC;AAED,MAAM,iBAAiB,GAAa;IAClC,MAAM,EAAE,EAAE;IACV,OAAO,EAAE,EAAE,UAAU,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,EAAE;CACvE,CAAC;AACF,MAAM,YAAY,GAAa;IAC7B,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;IAC7B,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;CAC7E,CAAC;AAEF,sEAAsE;AACtE,MAAM,UAAU,WAAW,CAAC,EAAE,QAAQ,EAAE,SAAS,EAA+C;IAC9F,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IACnC,IAAI,OAAO;QAAE,OAAO,cAAK,SAAS,EAAE,SAAS,YAAG,QAAQ,GAAO,CAAC;IAChE,OAAO,CACL,KAAC,MAAM,CAAC,GAAG,IAAC,QAAQ,EAAE,iBAAiB,EAAE,OAAO,EAAC,QAAQ,EAAC,OAAO,EAAC,SAAS,EAAC,SAAS,EAAE,SAAS,YAC7F,QAAQ,GACE,CACd,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAE,QAAQ,EAAE,SAAS,EAA+C;IAC9F,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IACnC,IAAI,OAAO;QAAE,OAAO,cAAK,SAAS,EAAE,SAAS,YAAG,QAAQ,GAAO,CAAC;IAChE,OAAO,CACL,KAAC,MAAM,CAAC,GAAG,IAAC,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,YACrD,QAAQ,GACE,CACd,CAAC;AACJ,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,MAAM,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,GAAG,CAAC,EAA+D;IACpH,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IACnC,IAAI,OAAO;QAAE,OAAO,cAAK,SAAS,EAAE,SAAS,YAAG,QAAQ,GAAO,CAAC;IAChE,OAAO,CACL,KAAC,MAAM,CAAC,GAAG,IACT,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EACvB,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EACvB,UAAU,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EACpD,SAAS,EAAE,SAAS,YAEnB,QAAQ,GACE,CACd,CAAC;AACJ,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,UAAU,CAAC,EAAE,QAAQ,EAAE,SAAS,EAA+C;IAC7F,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IACnC,IAAI,OAAO;QAAE,OAAO,cAAK,SAAS,EAAE,SAAS,YAAG,QAAQ,GAAO,CAAC;IAChE,OAAO,CACL,KAAC,MAAM,CAAC,GAAG,IAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,YACnF,QAAQ,GACE,CACd,CAAC;AACJ,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,mBAAmB,CAAC,EAAE,QAAQ,EAAE,SAAS,EAA+C;IACtG,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IACnC,IAAI,OAAO;QAAE,OAAO,cAAK,SAAS,EAAE,SAAS,YAAG,QAAQ,GAAO,CAAC;IAChE,OAAO,CACL,KAAC,MAAM,CAAC,GAAG,IACT,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE;YACP,SAAS,EAAE;gBACT,mCAAmC;gBACnC,oCAAoC;gBACpC,mCAAmC;gBACnC,mCAAmC;aACpC;SACF,EACD,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,YAE/D,QAAQ,GACE,CACd,CAAC;AACJ,CAAC;AAED,oCAAoC;AACpC,MAAM,UAAU,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAgE;IACpH,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IACnC,OAAO,CACL,KAAC,eAAe,IAAC,OAAO,EAAE,KAAK,YAC5B,MAAM,IAAI,CACT,KAAC,MAAM,CAAC,GAAG,IACT,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAC7D,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,EAClE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAC1D,UAAU,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,EAC7C,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAE5B,QAAQ,GACE,CACd,GACe,CACnB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ import * as React from "react";
2
+ interface PaginationProps {
3
+ page: number;
4
+ pageCount: number;
5
+ onPageChange: (page: number) => void;
6
+ className?: string;
7
+ }
8
+ export declare function Pagination({ page, pageCount, onPageChange, className }: PaginationProps): React.JSX.Element;
9
+ export {};
10
+ //# sourceMappingURL=pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/components/pagination.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAcD,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,eAAe,qBA8BvF"}
@@ -0,0 +1,23 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { ChevronLeft, ChevronRight } from "lucide-react";
4
+ import { cn } from "../lib/utils";
5
+ function range(start, end) {
6
+ return Array.from({ length: end - start + 1 }, (_, i) => start + i);
7
+ }
8
+ /** Page list with prev/next + ellipsis for large ranges. */
9
+ function getPages(page, pageCount) {
10
+ if (pageCount <= 7)
11
+ return range(1, pageCount);
12
+ if (page <= 4)
13
+ return [...range(1, 5), "…", pageCount];
14
+ if (page >= pageCount - 3)
15
+ return [1, "…", ...range(pageCount - 4, pageCount)];
16
+ return [1, "…", page - 1, page, page + 1, "…", pageCount];
17
+ }
18
+ export function Pagination({ page, pageCount, onPageChange, className }) {
19
+ const pages = getPages(page, pageCount);
20
+ const btn = "inline-flex h-9 min-w-9 items-center justify-center rounded-md px-2 text-[13px] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand disabled:opacity-40";
21
+ return (_jsxs("nav", { "aria-label": "Pagination", className: cn("flex items-center gap-1", className), children: [_jsx("button", { className: cn(btn, "text-muted hover:bg-accent"), onClick: () => onPageChange(page - 1), disabled: page <= 1, "aria-label": "Previous", children: _jsx(ChevronLeft, { className: "h-4 w-4" }) }), pages.map((p, i) => p === "…" ? (_jsx("span", { className: "px-1 text-muted-foreground", children: "\u2026" }, `e${i}`)) : (_jsx("button", { onClick: () => onPageChange(p), "aria-current": p === page ? "page" : undefined, className: cn(btn, p === page ? "bg-brand font-semibold text-white" : "text-foreground hover:bg-accent"), children: p }, p))), _jsx("button", { className: cn(btn, "text-muted hover:bg-accent"), onClick: () => onPageChange(page + 1), disabled: page >= pageCount, "aria-label": "Next", children: _jsx(ChevronRight, { className: "h-4 w-4" }) })] }));
22
+ }
23
+ //# sourceMappingURL=pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/components/pagination.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AASlC,SAAS,KAAK,CAAC,KAAa,EAAE,GAAW;IACvC,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,4DAA4D;AAC5D,SAAS,QAAQ,CAAC,IAAY,EAAE,SAAiB;IAC/C,IAAI,SAAS,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC/C,IAAI,IAAI,IAAI,CAAC;QAAE,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;IACvD,IAAI,IAAI,IAAI,SAAS,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IAC/E,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAmB;IACtF,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACxC,MAAM,GAAG,GACP,8KAA8K,CAAC;IACjL,OAAO,CACL,6BAAgB,YAAY,EAAC,SAAS,EAAE,EAAE,CAAC,yBAAyB,EAAE,SAAS,CAAC,aAC9E,iBAAQ,SAAS,EAAE,EAAE,CAAC,GAAG,EAAE,4BAA4B,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,gBAAa,UAAU,YACzI,KAAC,WAAW,IAAC,SAAS,EAAC,SAAS,GAAG,GAC5B,EACR,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAClB,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CACV,eAAoB,SAAS,EAAC,4BAA4B,wBAA/C,IAAI,CAAC,EAAE,CAEX,CACR,CAAC,CAAC,CAAC,CACF,iBAEE,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,kBAChB,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAC7C,SAAS,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,iCAAiC,CAAC,YAEvG,CAAC,IALG,CAAC,CAMC,CACV,CACF,EACD,iBAAQ,SAAS,EAAE,EAAE,CAAC,GAAG,EAAE,4BAA4B,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,IAAI,SAAS,gBAAa,MAAM,YAC7I,KAAC,YAAY,IAAC,SAAS,EAAC,SAAS,GAAG,GAC7B,IACL,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import * as React from "react";
2
+ import * as RP from "@radix-ui/react-popover";
3
+ export declare const Popover: React.FC<RP.PopoverProps>;
4
+ export declare const PopoverTrigger: React.ForwardRefExoticComponent<RP.PopoverTriggerProps & React.RefAttributes<HTMLButtonElement>>;
5
+ export declare const PopoverClose: React.ForwardRefExoticComponent<RP.PopoverCloseProps & React.RefAttributes<HTMLButtonElement>>;
6
+ export declare const PopoverContent: React.ForwardRefExoticComponent<Omit<RP.PopoverContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
7
+ //# sourceMappingURL=popover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popover.d.ts","sourceRoot":"","sources":["../../src/components/popover.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAG9C,eAAO,MAAM,OAAO,2BAAU,CAAC;AAC/B,eAAO,MAAM,cAAc,kGAAa,CAAC;AACzC,eAAO,MAAM,YAAY,gGAAW,CAAC;AAErC,eAAO,MAAM,cAAc,kJAgBzB,CAAC"}
@@ -0,0 +1,11 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import * as RP from "@radix-ui/react-popover";
5
+ import { cn } from "../lib/utils";
6
+ export const Popover = RP.Root;
7
+ export const PopoverTrigger = RP.Trigger;
8
+ export const PopoverClose = RP.Close;
9
+ export const PopoverContent = React.forwardRef(({ className, align = "center", sideOffset = 6, ...props }, ref) => (_jsx(RP.Portal, { children: _jsx(RP.Content, { ref: ref, align: align, sideOffset: sideOffset, className: cn("z-[1400] w-72 rounded-lg border border-border bg-card p-4 card-shadow-lg focus:outline-none", className), ...props }) })));
10
+ PopoverContent.displayName = "PopoverContent";
11
+ //# sourceMappingURL=popover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popover.js","sourceRoot":"","sources":["../../src/components/popover.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,MAAM,CAAC,MAAM,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC;AAC/B,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC,OAAO,CAAC;AACzC,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC,KAAK,CAAC;AAErC,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,CAG5C,CAAC,EAAE,SAAS,EAAE,KAAK,GAAG,QAAQ,EAAE,UAAU,GAAG,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CACpE,KAAC,EAAE,CAAC,MAAM,cACR,KAAC,EAAE,CAAC,OAAO,IACT,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,EAAE,CACX,6FAA6F,EAC7F,SAAS,CACV,KACG,KAAK,GACT,GACQ,CACb,CAAC,CAAC;AACH,cAAc,CAAC,WAAW,GAAG,gBAAgB,CAAC"}
@@ -0,0 +1,11 @@
1
+ interface ProgressProps {
2
+ /** 0–100 */
3
+ value: number;
4
+ label?: string;
5
+ state?: "default" | "success" | "warning" | "danger";
6
+ showValue?: boolean;
7
+ className?: string;
8
+ }
9
+ export declare function Progress({ value, label, state, showValue, className }: ProgressProps): import("react").JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/components/progress.tsx"],"names":[],"mappings":"AAEA,UAAU,aAAa;IACrB,YAAY;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IACrD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AASD,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAiB,EAAE,SAAiB,EAAE,SAAS,EAAE,EAAE,aAAa,+BAyBxG"}
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from "../lib/utils";
3
+ const barColors = {
4
+ default: "bg-brand",
5
+ success: "bg-green",
6
+ warning: "bg-orange",
7
+ danger: "bg-red",
8
+ };
9
+ export function Progress({ value, label, state = "default", showValue = false, className }) {
10
+ const clamped = Math.max(0, Math.min(100, value));
11
+ return (_jsxs("div", { className: className, children: [(label || showValue) && (_jsxs("div", { className: "mb-1.5 flex items-center justify-between", children: [label && _jsx("span", { className: "text-[13px] text-foreground", children: label }), showValue && _jsxs("span", { className: "font-mono text-[12px] text-muted-foreground tabular-nums", children: [clamped, "%"] })] })), _jsx("div", { className: "h-2 overflow-hidden rounded-full bg-border-light", role: "progressbar", "aria-valuenow": clamped, "aria-valuemin": 0, "aria-valuemax": 100, "aria-label": label, children: _jsx("div", { className: cn("h-full rounded-full transition-all duration-700", barColors[state]), style: { width: `${clamped}%` } }) })] }));
12
+ }
13
+ //# sourceMappingURL=progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/components/progress.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAWlC,MAAM,SAAS,GAAG;IAChB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,WAAW;IACpB,MAAM,EAAE,QAAQ;CACjB,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,SAAS,EAAE,SAAS,GAAG,KAAK,EAAE,SAAS,EAAiB;IACvG,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAClD,OAAO,CACL,eAAK,SAAS,EAAE,SAAS,aACtB,CAAC,KAAK,IAAI,SAAS,CAAC,IAAI,CACvB,eAAK,SAAS,EAAC,0CAA0C,aACtD,KAAK,IAAI,eAAM,SAAS,EAAC,6BAA6B,YAAE,KAAK,GAAQ,EACrE,SAAS,IAAI,gBAAM,SAAS,EAAC,0DAA0D,aAAE,OAAO,SAAS,IACtG,CACP,EACD,cACE,SAAS,EAAC,kDAAkD,EAC5D,IAAI,EAAC,aAAa,mBACH,OAAO,mBACP,CAAC,mBACD,GAAG,gBACN,KAAK,YAEjB,cACE,SAAS,EAAE,EAAE,CAAC,iDAAiD,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,EAClF,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,OAAO,GAAG,EAAE,GAC/B,GACE,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ import * as React from "react";
2
+ interface PromptInputProps {
3
+ value: string;
4
+ onChange: (value: string) => void;
5
+ onSubmit: () => void;
6
+ placeholder?: string;
7
+ suggestions?: string[];
8
+ showAttach?: boolean;
9
+ className?: string;
10
+ }
11
+ /** Presentational agent prompt box. Enter submits; Shift+Enter newlines. */
12
+ export declare function PromptInput({ value, onChange, onSubmit, placeholder, suggestions, showAttach, className, }: PromptInputProps): React.JSX.Element;
13
+ export {};
14
+ //# sourceMappingURL=prompt-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-input.d.ts","sourceRoot":"","sources":["../../src/components/prompt-input.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,UAAU,gBAAgB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,4EAA4E;AAC5E,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,WAA+B,EAC/B,WAAW,EACX,UAAkB,EAClB,SAAS,GACV,EAAE,gBAAgB,qBAiDlB"}
@@ -0,0 +1,29 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { Send, Paperclip } from "lucide-react";
5
+ import { cn } from "../lib/utils";
6
+ import { IconButton } from "./button";
7
+ import { Chip } from "./chip";
8
+ /** Presentational agent prompt box. Enter submits; Shift+Enter newlines. */
9
+ export function PromptInput({ value, onChange, onSubmit, placeholder = "Ask your agent…", suggestions, showAttach = false, className, }) {
10
+ const ref = React.useRef(null);
11
+ React.useEffect(() => {
12
+ const el = ref.current;
13
+ if (!el)
14
+ return;
15
+ el.style.height = "auto";
16
+ el.style.height = `${Math.min(el.scrollHeight, 160)}px`;
17
+ }, [value]);
18
+ const submit = () => {
19
+ if (value.trim())
20
+ onSubmit();
21
+ };
22
+ return (_jsxs("div", { className: cn("flex flex-col gap-2", className), children: [suggestions && suggestions.length > 0 && (_jsx("div", { className: "flex flex-wrap gap-1.5", children: suggestions.map((s) => (_jsx(Chip, { label: s, onClick: () => onChange(s) }, s))) })), _jsxs("div", { className: "flex items-end gap-2 rounded-lg border border-border bg-card p-2 focus-within:ring-2 focus-within:ring-brand", children: [showAttach && (_jsx(IconButton, { "aria-label": "Attach", variant: "ghost", size: "sm", className: "shrink-0", children: _jsx(Paperclip, { className: "h-4 w-4" }) })), _jsx("textarea", { ref: ref, value: value, onChange: (e) => onChange(e.target.value), onKeyDown: (e) => {
23
+ if (e.key === "Enter" && !e.shiftKey) {
24
+ e.preventDefault();
25
+ submit();
26
+ }
27
+ }, rows: 1, placeholder: placeholder, className: "max-h-40 flex-1 resize-none bg-transparent px-1 py-1.5 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none" }), _jsx(IconButton, { "aria-label": "Send", variant: "primary", size: "sm", className: "shrink-0", disabled: !value.trim(), onClick: submit, children: _jsx(Send, { className: "h-4 w-4" }) })] })] }));
28
+ }
29
+ //# sourceMappingURL=prompt-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-input.js","sourceRoot":"","sources":["../../src/components/prompt-input.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAY9B,4EAA4E;AAC5E,MAAM,UAAU,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,WAAW,GAAG,iBAAiB,EAC/B,WAAW,EACX,UAAU,GAAG,KAAK,EAClB,SAAS,GACQ;IACjB,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAsB,IAAI,CAAC,CAAC;IAEpD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC;QACvB,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QACzB,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC;IAC1D,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,IAAI,KAAK,CAAC,IAAI,EAAE;YAAE,QAAQ,EAAE,CAAC;IAC/B,CAAC,CAAC;IAEF,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,aACjD,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CACxC,cAAK,SAAS,EAAC,wBAAwB,YACpC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACtB,KAAC,IAAI,IAAS,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAvC,CAAC,CAA0C,CACvD,CAAC,GACE,CACP,EACD,eAAK,SAAS,EAAC,8GAA8G,aAC1H,UAAU,IAAI,CACb,KAAC,UAAU,kBAAY,QAAQ,EAAC,OAAO,EAAC,OAAO,EAAC,IAAI,EAAC,IAAI,EAAC,SAAS,EAAC,UAAU,YAC5E,KAAC,SAAS,IAAC,SAAS,EAAC,SAAS,GAAG,GACtB,CACd,EACD,mBACE,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACzC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;4BACf,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;gCACrC,CAAC,CAAC,cAAc,EAAE,CAAC;gCACnB,MAAM,EAAE,CAAC;4BACX,CAAC;wBACH,CAAC,EACD,IAAI,EAAE,CAAC,EACP,WAAW,EAAE,WAAW,EACxB,SAAS,EAAC,qIAAqI,GAC/I,EACF,KAAC,UAAU,kBAAY,MAAM,EAAC,OAAO,EAAC,SAAS,EAAC,IAAI,EAAC,IAAI,EAAC,SAAS,EAAC,UAAU,EAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,YACrH,KAAC,IAAI,IAAC,SAAS,EAAC,SAAS,GAAG,GACjB,IACT,IACF,CACP,CAAC;AACJ,CAAC"}