@cloudgrid-io/ui 0.0.2 → 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 (184) hide show
  1. package/README.md +109 -0
  2. package/dist/blocks/agent-prompt.d.ts +37 -0
  3. package/dist/blocks/agent-prompt.d.ts.map +1 -0
  4. package/dist/blocks/agent-prompt.js +53 -0
  5. package/dist/blocks/agent-prompt.js.map +1 -0
  6. package/dist/blocks/card-grid.d.ts +38 -0
  7. package/dist/blocks/card-grid.d.ts.map +1 -0
  8. package/dist/blocks/card-grid.js +32 -0
  9. package/dist/blocks/card-grid.js.map +1 -0
  10. package/dist/blocks/compare-table.d.ts +13 -0
  11. package/dist/blocks/compare-table.d.ts.map +1 -0
  12. package/dist/blocks/compare-table.js +55 -0
  13. package/dist/blocks/compare-table.js.map +1 -0
  14. package/dist/blocks/creation-tile.d.ts +57 -0
  15. package/dist/blocks/creation-tile.d.ts.map +1 -0
  16. package/dist/blocks/creation-tile.js +32 -0
  17. package/dist/blocks/creation-tile.js.map +1 -0
  18. package/dist/blocks/cta-banner.d.ts +31 -0
  19. package/dist/blocks/cta-banner.d.ts.map +1 -0
  20. package/dist/blocks/cta-banner.js +31 -0
  21. package/dist/blocks/cta-banner.js.map +1 -0
  22. package/dist/blocks/drop-zone.d.ts +54 -0
  23. package/dist/blocks/drop-zone.d.ts.map +1 -0
  24. package/dist/blocks/drop-zone.js +121 -0
  25. package/dist/blocks/drop-zone.js.map +1 -0
  26. package/dist/blocks/feature-cells.d.ts +46 -0
  27. package/dist/blocks/feature-cells.d.ts.map +1 -0
  28. package/dist/blocks/feature-cells.js +46 -0
  29. package/dist/blocks/feature-cells.js.map +1 -0
  30. package/dist/blocks/hub-index.d.ts +55 -0
  31. package/dist/blocks/hub-index.d.ts.map +1 -0
  32. package/dist/blocks/hub-index.js +22 -0
  33. package/dist/blocks/hub-index.js.map +1 -0
  34. package/dist/blocks/logo.d.ts +24 -0
  35. package/dist/blocks/logo.d.ts.map +1 -0
  36. package/dist/blocks/logo.js +34 -0
  37. package/dist/blocks/logo.js.map +1 -0
  38. package/dist/blocks/option-card.d.ts +31 -0
  39. package/dist/blocks/option-card.d.ts.map +1 -0
  40. package/dist/blocks/option-card.js +32 -0
  41. package/dist/blocks/option-card.js.map +1 -0
  42. package/dist/blocks/page-heading.d.ts +33 -0
  43. package/dist/blocks/page-heading.d.ts.map +1 -0
  44. package/dist/blocks/page-heading.js +30 -0
  45. package/dist/blocks/page-heading.js.map +1 -0
  46. package/dist/blocks/plug-method.d.ts +76 -0
  47. package/dist/blocks/plug-method.d.ts.map +1 -0
  48. package/dist/blocks/plug-method.js +30 -0
  49. package/dist/blocks/plug-method.js.map +1 -0
  50. package/dist/blocks/pricing-tier-cards.d.ts +47 -0
  51. package/dist/blocks/pricing-tier-cards.d.ts.map +1 -0
  52. package/dist/blocks/pricing-tier-cards.js +12 -0
  53. package/dist/blocks/pricing-tier-cards.js.map +1 -0
  54. package/dist/blocks/pricing-tiers.d.ts +29 -0
  55. package/dist/blocks/pricing-tiers.d.ts.map +1 -0
  56. package/dist/blocks/pricing-tiers.js +30 -0
  57. package/dist/blocks/pricing-tiers.js.map +1 -0
  58. package/dist/blocks/quote.d.ts +27 -0
  59. package/dist/blocks/quote.d.ts.map +1 -0
  60. package/dist/blocks/quote.js +28 -0
  61. package/dist/blocks/quote.js.map +1 -0
  62. package/dist/blocks/rich-text.d.ts +38 -0
  63. package/dist/blocks/rich-text.d.ts.map +1 -0
  64. package/dist/blocks/rich-text.js +39 -0
  65. package/dist/blocks/rich-text.js.map +1 -0
  66. package/dist/blocks/stage-panel.d.ts +5 -0
  67. package/dist/blocks/stage-panel.d.ts.map +1 -0
  68. package/dist/blocks/stage-panel.js +30 -0
  69. package/dist/blocks/stage-panel.js.map +1 -0
  70. package/dist/blocks/step-item.d.ts +24 -0
  71. package/dist/blocks/step-item.d.ts.map +1 -0
  72. package/dist/blocks/step-item.js +34 -0
  73. package/dist/blocks/step-item.js.map +1 -0
  74. package/dist/blocks/tool-logo.d.ts +15 -0
  75. package/dist/blocks/tool-logo.d.ts.map +1 -0
  76. package/dist/blocks/tool-logo.js +59 -0
  77. package/dist/blocks/tool-logo.js.map +1 -0
  78. package/dist/blocks/tool-marks.d.ts +120 -0
  79. package/dist/blocks/tool-marks.d.ts.map +1 -0
  80. package/dist/blocks/tool-marks.js +94 -0
  81. package/dist/blocks/tool-marks.js.map +1 -0
  82. package/dist/index.d.ts +45 -0
  83. package/dist/index.d.ts.map +1 -0
  84. package/dist/index.js +63 -0
  85. package/dist/index.js.map +1 -0
  86. package/dist/lib/cloudgrid-cn.d.ts +65 -0
  87. package/dist/lib/cloudgrid-cn.d.ts.map +1 -0
  88. package/dist/lib/cloudgrid-cn.js +90 -0
  89. package/dist/lib/cloudgrid-cn.js.map +1 -0
  90. package/dist/tokens/base.json +57 -38
  91. package/dist/tokens.css +38 -19
  92. package/dist/ui/accordion.d.ts +7 -0
  93. package/dist/ui/accordion.d.ts.map +1 -0
  94. package/dist/ui/accordion.js +19 -0
  95. package/dist/ui/accordion.js.map +1 -0
  96. package/dist/ui/badge.d.ts +8 -0
  97. package/dist/ui/badge.d.ts.map +1 -0
  98. package/dist/ui/badge.js +34 -0
  99. package/dist/ui/badge.js.map +1 -0
  100. package/dist/ui/button.d.ts +9 -0
  101. package/dist/ui/button.d.ts.map +1 -0
  102. package/dist/ui/button.js +35 -0
  103. package/dist/ui/button.js.map +1 -0
  104. package/dist/ui/card.d.ts +12 -0
  105. package/dist/ui/card.d.ts.map +1 -0
  106. package/dist/ui/card.js +26 -0
  107. package/dist/ui/card.js.map +1 -0
  108. package/dist/ui/carousel.d.ts +37 -0
  109. package/dist/ui/carousel.d.ts.map +1 -0
  110. package/dist/ui/carousel.js +34 -0
  111. package/dist/ui/carousel.js.map +1 -0
  112. package/dist/ui/checkbox.d.ts +4 -0
  113. package/dist/ui/checkbox.d.ts.map +1 -0
  114. package/dist/ui/checkbox.js +10 -0
  115. package/dist/ui/checkbox.js.map +1 -0
  116. package/dist/ui/code-block.d.ts +9 -0
  117. package/dist/ui/code-block.d.ts.map +1 -0
  118. package/dist/ui/code-block.js +57 -0
  119. package/dist/ui/code-block.js.map +1 -0
  120. package/dist/ui/combobox.d.ts +25 -0
  121. package/dist/ui/combobox.d.ts.map +1 -0
  122. package/dist/ui/combobox.js +59 -0
  123. package/dist/ui/combobox.js.map +1 -0
  124. package/dist/ui/dialog.d.ts +18 -0
  125. package/dist/ui/dialog.d.ts.map +1 -0
  126. package/dist/ui/dialog.js +39 -0
  127. package/dist/ui/dialog.js.map +1 -0
  128. package/dist/ui/dropdown-menu.d.ts +30 -0
  129. package/dist/ui/dropdown-menu.d.ts.map +1 -0
  130. package/dist/ui/dropdown-menu.js +53 -0
  131. package/dist/ui/dropdown-menu.js.map +1 -0
  132. package/dist/ui/input-group.d.ts +19 -0
  133. package/dist/ui/input-group.d.ts.map +1 -0
  134. package/dist/ui/input-group.js +59 -0
  135. package/dist/ui/input-group.js.map +1 -0
  136. package/dist/ui/input.d.ts +4 -0
  137. package/dist/ui/input.d.ts.map +1 -0
  138. package/dist/ui/input.js +9 -0
  139. package/dist/ui/input.js.map +1 -0
  140. package/dist/ui/number-field.d.ts +10 -0
  141. package/dist/ui/number-field.d.ts.map +1 -0
  142. package/dist/ui/number-field.js +39 -0
  143. package/dist/ui/number-field.js.map +1 -0
  144. package/dist/ui/panel.d.ts +36 -0
  145. package/dist/ui/panel.d.ts.map +1 -0
  146. package/dist/ui/panel.js +39 -0
  147. package/dist/ui/panel.js.map +1 -0
  148. package/dist/ui/select.d.ts +16 -0
  149. package/dist/ui/select.d.ts.map +1 -0
  150. package/dist/ui/select.js +36 -0
  151. package/dist/ui/select.js.map +1 -0
  152. package/dist/ui/separator.d.ts +4 -0
  153. package/dist/ui/separator.d.ts.map +1 -0
  154. package/dist/ui/separator.js +9 -0
  155. package/dist/ui/separator.js.map +1 -0
  156. package/dist/ui/skeleton.d.ts +3 -0
  157. package/dist/ui/skeleton.d.ts.map +1 -0
  158. package/dist/ui/skeleton.js +7 -0
  159. package/dist/ui/skeleton.js.map +1 -0
  160. package/dist/ui/sonner.d.ts +4 -0
  161. package/dist/ui/sonner.d.ts.map +1 -0
  162. package/dist/ui/sonner.js +36 -0
  163. package/dist/ui/sonner.js.map +1 -0
  164. package/dist/ui/switch.d.ts +6 -0
  165. package/dist/ui/switch.d.ts.map +1 -0
  166. package/dist/ui/switch.js +9 -0
  167. package/dist/ui/switch.js.map +1 -0
  168. package/dist/ui/table.d.ts +11 -0
  169. package/dist/ui/table.d.ts.map +1 -0
  170. package/dist/ui/table.js +30 -0
  171. package/dist/ui/table.js.map +1 -0
  172. package/dist/ui/tabs.d.ts +11 -0
  173. package/dist/ui/tabs.d.ts.map +1 -0
  174. package/dist/ui/tabs.js +38 -0
  175. package/dist/ui/tabs.js.map +1 -0
  176. package/dist/ui/textarea.d.ts +4 -0
  177. package/dist/ui/textarea.d.ts.map +1 -0
  178. package/dist/ui/textarea.js +8 -0
  179. package/dist/ui/textarea.js.map +1 -0
  180. package/dist/ui/tooltip.d.ts +8 -0
  181. package/dist/ui/tooltip.d.ts.map +1 -0
  182. package/dist/ui/tooltip.js +37 -0
  183. package/dist/ui/tooltip.js.map +1 -0
  184. package/package.json +42 -8
@@ -0,0 +1,59 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn } from "../lib/cloudgrid-cn.js";
3
+ /**
4
+ * Renders a tool's brand mark at a consistent size and weight.
5
+ *
6
+ * **This ships no marks.** It is a renderer, and the caller supplies the SVG. That
7
+ * split is deliberate: how a mark is sized and coloured is design-system work, but
8
+ * *which* marks exist is content. The set changes when a partnership is signed, not
9
+ * when the design changes, and vendors rebrand on their own schedule. A library
10
+ * holding fourteen logos carries a maintenance burden that is not about UI, plus a
11
+ * trademark surface that travels to every consumer who installs it.
12
+ *
13
+ * It is also the shape `CompareTable` and `HubIndex` already assume, both of which
14
+ * take the mark from the caller.
15
+ *
16
+ * Ported from v0's `site/ToolLogo`, keeping the three things that are genuinely
17
+ * design-system rules and dropping the inventory:
18
+ *
19
+ * **One size box.** Every mark occupies the same square regardless of its own
20
+ * proportions, so a rail of them reads evenly.
21
+ *
22
+ * **Optical correction.** Some glyph sets sit deeper inside their viewBox than
23
+ * others, so a mark that measures the same reads smaller. `opticalScale` nudges
24
+ * those up. v0 hardcoded 1.16 for one icon source; here it is per-mark, because
25
+ * the correction belongs to the artwork rather than to a package.
26
+ *
27
+ * **The dark-mark rule.** A near-black brand hex disappears on the ink surface.
28
+ * Pass `hex` and it is used only when the mark is light enough to survive
29
+ * everywhere; below the threshold the mark follows `currentColor`, so it reads
30
+ * white on the console and ink on light, which *is* its brand colour there. Omit
31
+ * `hex` and it always follows `currentColor`.
32
+ *
33
+ * ## Supplying marks
34
+ *
35
+ * Use each vendor's official asset, unmodified. Most brand guidelines require it in
36
+ * those words, and it also sidesteps redrawn copies from icon packages, which is
37
+ * what caused the one removal this component's history records. See #47.
38
+ *
39
+ * <ToolLogo name="Claude" mark={<ClaudeMark />} hex="D97757" />
40
+ * <ToolLogo name="Bolt" /> // no mark yet: renders a monogram
41
+ */
42
+ /** Rec. 709 luminance from a 6-digit hex. Above the threshold keeps its colour. */
43
+ function luminance(hex) {
44
+ const n = parseInt(hex, 16);
45
+ return 0.2126 * ((n >> 16) & 255) + 0.7152 * ((n >> 8) & 255) + 0.0722 * (n & 255);
46
+ }
47
+ function ToolLogo({ name, mark, hex, size = 20, tone = "brand", opticalScale = 1, className, ...props }) {
48
+ if (!mark) {
49
+ return (_jsx("span", { "data-slot": "tool-logo", "aria-hidden": "true", style: { width: size, height: size, fontSize: size * 0.5 }, className: cn("inline-flex shrink-0 items-center justify-center rounded-sm border border-hairline font-mono leading-none", className), ...props, children: name.trim().charAt(0).toUpperCase() }));
50
+ }
51
+ const useHex = tone === "brand" && hex && luminance(hex) > 60;
52
+ return (_jsx("span", { "data-slot": "tool-logo", "aria-hidden": "true", style: {
53
+ width: size,
54
+ height: size,
55
+ ...(useHex ? { color: `#${hex}` } : undefined),
56
+ }, className: cn("inline-flex shrink-0 items-center justify-center [&>svg]:size-full", className), ...props, children: opticalScale === 1 ? (mark) : (_jsx("span", { style: { transform: `scale(${opticalScale})` }, className: "inline-flex size-full", children: mark })) }));
57
+ }
58
+ export { ToolLogo };
59
+ //# sourceMappingURL=tool-logo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-logo.js","sourceRoot":"","sources":["../../src/blocks/tool-logo.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAA;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,mFAAmF;AACnF,SAAS,SAAS,CAAC,GAAW;IAC5B,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IAC3B,OAAO,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAA;AACpF,CAAC;AAED,SAAS,QAAQ,CAAC,EAChB,IAAI,EACJ,IAAI,EACJ,GAAG,EACH,IAAI,GAAG,EAAE,EACT,IAAI,GAAG,OAAO,EACd,YAAY,GAAG,CAAC,EAChB,SAAS,EACT,GAAG,KAAK,EAaT;IACC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CACL,4BACY,WAAW,iBACT,MAAM,EAClB,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,GAAG,GAAG,EAAE,EAC1D,SAAS,EAAE,EAAE,CACX,2GAA2G,EAC3G,SAAS,CACV,KACG,KAAK,YAER,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAC/B,CACR,CAAA;IACH,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,KAAK,OAAO,IAAI,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;IAE7D,OAAO,CACL,4BACY,WAAW,iBAGT,MAAM,EAClB,KAAK,EAAE;YACL,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI;YACZ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;SAC/C,EACD,SAAS,EAAE,EAAE,CACX,oEAAoE,EACpE,SAAS,CACV,KACG,KAAK,YAER,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CACpB,IAAI,CACL,CAAC,CAAC,CAAC,CACF,eAAM,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,YAAY,GAAG,EAAE,EAAE,SAAS,EAAC,uBAAuB,YACpF,IAAI,GACA,CACR,GACI,CACR,CAAA;AACH,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA"}
@@ -0,0 +1,120 @@
1
+ type MarkProps = {
2
+ className?: string;
3
+ };
4
+ /** Claude. simple-icons. Brand hex D97757. */
5
+ export declare const ClaudeMark: ({ className }: MarkProps) => import("react").JSX.Element;
6
+ /** Claude Code. simple-icons. Brand hex D97757. */
7
+ export declare const ClaudeCodeMark: ({ className }: MarkProps) => import("react").JSX.Element;
8
+ /** Anthropic. simple-icons. Brand hex 191919. */
9
+ export declare const AnthropicMark: ({ className }: MarkProps) => import("react").JSX.Element;
10
+ /** Cursor. simple-icons. Brand hex 000000. */
11
+ export declare const CursorMark: ({ className }: MarkProps) => import("react").JSX.Element;
12
+ /** GitHub Copilot. simple-icons. Brand hex 000000. */
13
+ export declare const CopilotMark: ({ className }: MarkProps) => import("react").JSX.Element;
14
+ /** Windsurf. simple-icons. Brand hex 0B100F. */
15
+ export declare const WindsurfMark: ({ className }: MarkProps) => import("react").JSX.Element;
16
+ /** Replit. simple-icons. Brand hex F26207. */
17
+ export declare const ReplitMark: ({ className }: MarkProps) => import("react").JSX.Element;
18
+ /** v0. simple-icons. Brand hex 000000. */
19
+ export declare const V0Mark: ({ className }: MarkProps) => import("react").JSX.Element;
20
+ /** Vercel. simple-icons. Brand hex 000000. */
21
+ export declare const VercelMark: ({ className }: MarkProps) => import("react").JSX.Element;
22
+ /** Netlify. simple-icons. Brand hex 00C7B7. */
23
+ export declare const NetlifyMark: ({ className }: MarkProps) => import("react").JSX.Element;
24
+ /** Render. simple-icons. Brand hex 000000. */
25
+ export declare const RenderMark: ({ className }: MarkProps) => import("react").JSX.Element;
26
+ /** Google Gemini. simple-icons. Brand hex 8E75B2. */
27
+ export declare const GeminiMark: ({ className }: MarkProps) => import("react").JSX.Element;
28
+ /** OpenAI. OpenAI official brand pack, the Blossom. */
29
+ export declare const OpenAiMark: ({ className }: MarkProps) => import("react").JSX.Element;
30
+ /** Codex. supplied by the operator. */
31
+ export declare const CodexMark: ({ className }: MarkProps) => import("react").JSX.Element;
32
+ /** Lovable. @lobehub/icons. */
33
+ export declare const LovableMark: ({ className }: MarkProps) => import("react").JSX.Element;
34
+ /** Bolt. bolt.new favicon, glyph only. */
35
+ export declare const BoltMark: ({ className }: MarkProps) => import("react").JSX.Element;
36
+ /** Base44. base44.com, the leading glyph of the wordmark. */
37
+ export declare const Base44Mark: ({ className }: MarkProps) => import("react").JSX.Element;
38
+ /** Every vendored mark, by the display name ToolLogo takes. */
39
+ export declare const AntigravityMark: ({ className }: MarkProps) => import("react").JSX.Element;
40
+ export declare const TOOL_MARKS: {
41
+ readonly Claude: {
42
+ readonly Mark: ({ className }: MarkProps) => import("react").JSX.Element;
43
+ readonly hex: "D97757";
44
+ };
45
+ readonly "Claude Code": {
46
+ readonly Mark: ({ className }: MarkProps) => import("react").JSX.Element;
47
+ readonly hex: "D97757";
48
+ };
49
+ readonly Anthropic: {
50
+ readonly Mark: ({ className }: MarkProps) => import("react").JSX.Element;
51
+ readonly hex: "191919";
52
+ };
53
+ readonly Cursor: {
54
+ readonly Mark: ({ className }: MarkProps) => import("react").JSX.Element;
55
+ readonly hex: "000000";
56
+ };
57
+ readonly "GitHub Copilot": {
58
+ readonly Mark: ({ className }: MarkProps) => import("react").JSX.Element;
59
+ readonly hex: "000000";
60
+ };
61
+ readonly Windsurf: {
62
+ readonly Mark: ({ className }: MarkProps) => import("react").JSX.Element;
63
+ readonly hex: "0B100F";
64
+ };
65
+ readonly Replit: {
66
+ readonly Mark: ({ className }: MarkProps) => import("react").JSX.Element;
67
+ readonly hex: "F26207";
68
+ };
69
+ readonly v0: {
70
+ readonly Mark: ({ className }: MarkProps) => import("react").JSX.Element;
71
+ readonly hex: "000000";
72
+ };
73
+ readonly Vercel: {
74
+ readonly Mark: ({ className }: MarkProps) => import("react").JSX.Element;
75
+ readonly hex: "000000";
76
+ };
77
+ readonly Netlify: {
78
+ readonly Mark: ({ className }: MarkProps) => import("react").JSX.Element;
79
+ readonly hex: "00C7B7";
80
+ };
81
+ readonly Render: {
82
+ readonly Mark: ({ className }: MarkProps) => import("react").JSX.Element;
83
+ readonly hex: "000000";
84
+ };
85
+ readonly "Google Gemini": {
86
+ readonly Mark: ({ className }: MarkProps) => import("react").JSX.Element;
87
+ readonly hex: "8E75B2";
88
+ };
89
+ readonly OpenAI: {
90
+ readonly Mark: ({ className }: MarkProps) => import("react").JSX.Element;
91
+ readonly hex: "000000";
92
+ };
93
+ readonly ChatGPT: {
94
+ readonly Mark: ({ className }: MarkProps) => import("react").JSX.Element;
95
+ readonly hex: "000000";
96
+ };
97
+ readonly Codex: {
98
+ readonly Mark: ({ className }: MarkProps) => import("react").JSX.Element;
99
+ readonly hex: "000000";
100
+ };
101
+ readonly Lovable: {
102
+ readonly Mark: ({ className }: MarkProps) => import("react").JSX.Element;
103
+ readonly hex: "FF4785";
104
+ };
105
+ readonly Bolt: {
106
+ readonly Mark: ({ className }: MarkProps) => import("react").JSX.Element;
107
+ readonly hex: "000000";
108
+ };
109
+ readonly Base44: {
110
+ readonly Mark: ({ className }: MarkProps) => import("react").JSX.Element;
111
+ readonly hex: "FF6A00";
112
+ };
113
+ readonly Antigravity: {
114
+ readonly Mark: ({ className }: MarkProps) => import("react").JSX.Element;
115
+ readonly hex: "3186FF";
116
+ };
117
+ };
118
+ export type ToolMarkName = keyof typeof TOOL_MARKS;
119
+ export {};
120
+ //# sourceMappingURL=tool-marks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-marks.d.ts","sourceRoot":"","sources":["../../src/blocks/tool-marks.tsx"],"names":[],"mappings":"AAuDA,KAAK,SAAS,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAqBvC,8CAA8C;AAC9C,eAAO,MAAM,UAAU,kBAXe,SAAS,gCAa9C,CAAA;AAED,mDAAmD;AACnD,eAAO,MAAM,cAAc,kBAhBW,SAAS,gCAkB9C,CAAA;AAED,iDAAiD;AACjD,eAAO,MAAM,aAAa,kBArBY,SAAS,gCAuB9C,CAAA;AAED,8CAA8C;AAC9C,eAAO,MAAM,UAAU,kBA1Be,SAAS,gCA4B9C,CAAA;AAED,sDAAsD;AACtD,eAAO,MAAM,WAAW,kBA/Bc,SAAS,gCAiC9C,CAAA;AAED,gDAAgD;AAChD,eAAO,MAAM,YAAY,kBApCa,SAAS,gCAsC9C,CAAA;AAED,8CAA8C;AAC9C,eAAO,MAAM,UAAU,kBAzCe,SAAS,gCA2C9C,CAAA;AAED,0CAA0C;AAC1C,eAAO,MAAM,MAAM,kBA9CmB,SAAS,gCAgD9C,CAAA;AAED,8CAA8C;AAC9C,eAAO,MAAM,UAAU,kBAnDe,SAAS,gCAqD9C,CAAA;AAED,+CAA+C;AAC/C,eAAO,MAAM,WAAW,kBAxDc,SAAS,gCA0D9C,CAAA;AAED,8CAA8C;AAC9C,eAAO,MAAM,UAAU,kBA7De,SAAS,gCA+D9C,CAAA;AAED,qDAAqD;AACrD,eAAO,MAAM,UAAU,kBAlEe,SAAS,gCAoE9C,CAAA;AAED,uDAAuD;AACvD,eAAO,MAAM,UAAU,kBAvEe,SAAS,gCAsF9C,CAAA;AAED,uCAAuC;AACvC,eAAO,MAAM,SAAS,kBAzFgB,SAAS,gCA6F9C,CAAA;AAED,+BAA+B;AAC/B,eAAO,MAAM,WAAW,kBAhGc,SAAS,gCAmG9C,CAAA;AAED,0CAA0C;AAC1C,eAAO,MAAM,QAAQ,kBAtGiB,SAAS,gCA+G9C,CAAA;AAED,6DAA6D;AAC7D,eAAO,MAAM,UAAU,kBAlHe,SAAS,gCAqH9C,CAAA;AAED,+DAA+D;AAC/D,eAAO,MAAM,eAAe,kBAxHU,SAAS,gCA6H9C,CAAA;AAED,eAAO,MAAM,UAAU;;uCA/He,SAAS;;;;uCAAT,SAAS;;;;uCAAT,SAAS;;;;uCAAT,SAAS;;;;uCAAT,SAAS;;;;uCAAT,SAAS;;;;uCAAT,SAAS;;;;uCAAT,SAAS;;;;uCAAT,SAAS;;;;uCAAT,SAAS;;;;uCAAT,SAAS;;;;uCAAT,SAAS;;;;uCAAT,SAAS;;;;uCAAT,SAAS;;;;uCAAT,SAAS;;;;uCAAT,SAAS;;;;uCAAT,SAAS;;;;uCAAT,SAAS;;;;uCAAT,SAAS;;;CAmJrC,CAAA;AAEV,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,UAAU,CAAA"}
@@ -0,0 +1,94 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * One mark. `currentColor` so ToolLogo's tone rule can recolour it on ink.
4
+ *
5
+ * `fillRule` matters more than it looks. Codex and Bolt are drawn as a single
6
+ * path whose counters are cut out by the even-odd rule; render them with the
7
+ * default and the holes fill in, producing a solid blob that still looks like a
8
+ * deliberate shape.
9
+ */
10
+ function mark(path, viewBox = "0 0 24 24", fillRule) {
11
+ return function Mark({ className }) {
12
+ return (_jsx("svg", { viewBox: viewBox, fill: "currentColor", "aria-hidden": "true", className: className, children: _jsx("path", { d: path, ...(fillRule ? { fillRule, clipRule: fillRule } : {}) }) }));
13
+ };
14
+ }
15
+ /** Claude. simple-icons. Brand hex D97757. */
16
+ export const ClaudeMark = mark("m4.7144 15.9555 4.7174-2.6471.079-.2307-.079-.1275h-.2307l-.7893-.0486-2.6956-.0729-2.3375-.0971-2.2646-.1214-.5707-.1215-.5343-.7042.0546-.3522.4797-.3218.686.0608 1.5179.1032 2.2767.1578 1.6514.0972 2.4468.255h.3886l.0546-.1579-.1336-.0971-.1032-.0972L6.973 9.8356l-2.55-1.6879-1.3356-.9714-.7225-.4918-.3643-.4614-.1578-1.0078.6557-.7225.8803.0607.2246.0607.8925.686 1.9064 1.4754 2.4893 1.8336.3643.3035.1457-.1032.0182-.0728-.164-.2733-1.3539-2.4467-1.445-2.4893-.6435-1.032-.17-.6194c-.0607-.255-.1032-.4674-.1032-.7285L6.287.1335 6.6997 0l.9957.1336.419.3642.6192 1.4147 1.0018 2.2282 1.5543 3.0296.4553.8985.2429.8318.091.255h.1579v-.1457l.1275-1.706.2368-2.0947.2307-2.6957.0789-.7589.3764-.9107.7468-.4918.5828.2793.4797.686-.0668.4433-.2853 1.8517-.5586 2.9021-.3643 1.9429h.2125l.2429-.2429.9835-1.3053 1.6514-2.0643.7286-.8196.85-.9046.5464-.4311h1.0321l.759 1.1293-.34 1.1657-1.0625 1.3478-.8804 1.1414-1.2628 1.7-.7893 1.36.0729.1093.1882-.0183 2.8535-.607 1.5421-.2794 1.8396-.3157.8318.3886.091.3946-.3278.8075-1.967.4857-2.3072.4614-3.4364.8136-.0425.0304.0486.0607 1.5482.1457.6618.0364h1.621l3.0175.2247.7892.522.4736.6376-.079.4857-1.2142.6193-1.6393-.3886-3.825-.9107-1.3113-.3279h-.1822v.1093l1.0929 1.0686 2.0035 1.8092 2.5075 2.3314.1275.5768-.3218.4554-.34-.0486-2.2039-1.6575-.85-.7468-1.9246-1.621h-.1275v.17l.4432.6496 2.3436 3.5214.1214 1.0807-.17.3521-.6071.2125-.6679-.1214-1.3721-1.9246L14.38 17.959l-1.1414-1.9428-.1397.079-.674 7.2552-.3156.3703-.7286.2793-.6071-.4614-.3218-.7468.3218-1.4753.3886-1.9246.3157-1.53.2853-1.9004.17-.6314-.0121-.0425-.1397.0182-1.4328 1.9672-2.1796 2.9446-1.7243 1.8456-.4128.164-.7164-.3704.0667-.6618.4008-.5889 2.386-3.0357 1.4389-1.882.929-1.0868-.0062-.1579h-.0546l-6.3385 4.1164-1.1293.1457-.4857-.4554.0608-.7467.2307-.2429 1.9064-1.3114Z");
17
+ /** Claude Code. simple-icons. Brand hex D97757. */
18
+ export const ClaudeCodeMark = mark("M21 10.5h3v3h-3v3h-1.5v3H18v-3h-1.5v3H15v-3H9v3H7.5v-3H6v3H4.5v-3H3v-3H0v-3h3v-6h18Zm-15 0h1.5v-3H6Zm10.5 0H18v-3h-1.5z");
19
+ /** Anthropic. simple-icons. Brand hex 191919. */
20
+ export const AnthropicMark = mark("M17.3041 3.541h-3.6718l6.696 16.918H24Zm-10.6082 0L0 20.459h3.7442l1.3693-3.5527h7.0052l1.3693 3.5528h3.7442L10.5363 3.5409Zm-.3712 10.2232 2.2914-5.9456 2.2914 5.9456Z");
21
+ /** Cursor. simple-icons. Brand hex 000000. */
22
+ export const CursorMark = mark("M11.503.131 1.891 5.678a.84.84 0 0 0-.42.726v11.188c0 .3.162.575.42.724l9.609 5.55a1 1 0 0 0 .998 0l9.61-5.55a.84.84 0 0 0 .42-.724V6.404a.84.84 0 0 0-.42-.726L12.497.131a1.01 1.01 0 0 0-.996 0M2.657 6.338h18.55c.263 0 .43.287.297.515L12.23 22.918c-.062.107-.229.064-.229-.06V12.335a.59.59 0 0 0-.295-.51l-9.11-5.257c-.109-.063-.064-.23.061-.23");
23
+ /** GitHub Copilot. simple-icons. Brand hex 000000. */
24
+ export const CopilotMark = mark("M23.922 16.997C23.061 18.492 18.063 22.02 12 22.02 5.937 22.02.939 18.492.078 16.997A.641.641 0 0 1 0 16.741v-2.869a.883.883 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.098 10.098 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952C7.255 2.937 9.248 1.98 11.978 1.98c2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.841.841 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256Zm-11.75-5.992h-.344a4.359 4.359 0 0 1-.355.508c-.77.947-1.918 1.492-3.508 1.492-1.725 0-2.989-.359-3.782-1.259a2.137 2.137 0 0 1-.085-.104L4 11.746v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.359 4.359 0 0 1-.355-.508Zm2.328 3.25c.549 0 1 .451 1 1v2c0 .549-.451 1-1 1-.549 0-1-.451-1-1v-2c0-.549.451-1 1-1Zm-5 0c.549 0 1 .451 1 1v2c0 .549-.451 1-1 1-.549 0-1-.451-1-1v-2c0-.549.451-1 1-1Zm3.313-6.185c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z");
25
+ /** Windsurf. simple-icons. Brand hex 0B100F. */
26
+ export const WindsurfMark = mark("M23.55 5.067c-1.2038-.002-2.1806.973-2.1806 2.1765v4.8676c0 .972-.8035 1.7594-1.7597 1.7594-.568 0-1.1352-.286-1.4718-.7659l-4.9713-7.1003c-.4125-.5896-1.0837-.941-1.8103-.941-1.1334 0-2.1533.9635-2.1533 2.153v4.8957c0 .972-.7969 1.7594-1.7596 1.7594-.57 0-1.1363-.286-1.4728-.7658L.4076 5.1598C.2822 4.9798 0 5.0688 0 5.2882v4.2452c0 .2147.0656.4228.1884.599l5.4748 7.8183c.3234.462.8006.8052 1.3509.9298 1.3771.313 2.6446-.747 2.6446-2.0977v-4.893c0-.972.7875-1.7593 1.7596-1.7593h.003a1.798 1.798 0 0 1 1.4718.7658l4.9723 7.0994c.4135.5905 1.05.941 1.8093.941 1.1587 0 2.1515-.9645 2.1515-2.153v-4.8948c0-.972.7875-1.7594 1.7596-1.7594h.194a.22.22 0 0 0 .2204-.2202v-4.622a.22.22 0 0 0-.2203-.2203Z");
27
+ /** Replit. simple-icons. Brand hex F26207. */
28
+ export const ReplitMark = mark("M2 1.5A1.5 1.5 0 0 1 3.5 0h7A1.5 1.5 0 0 1 12 1.5V8H3.5A1.5 1.5 0 0 1 2 6.5ZM12 8h8.5A1.5 1.5 0 0 1 22 9.5v5a1.5 1.5 0 0 1-1.5 1.5H12ZM2 17.5A1.5 1.5 0 0 1 3.5 16H12v6.5a1.5 1.5 0 0 1-1.5 1.5h-7A1.5 1.5 0 0 1 2 22.5Z");
29
+ /** v0. simple-icons. Brand hex 000000. */
30
+ export const V0Mark = mark("M14.066 6.028v2.22h5.729q.075-.001.148.005l-5.853 5.752a2 2 0 0 1-.024-.309V8.247h-2.353v5.45c0 2.322 1.935 4.222 4.258 4.222h5.675v-2.22h-5.675q-.03 0-.059-.003l5.729-5.629q.006.082.006.166v5.465H24v-5.465a4.204 4.204 0 0 0-4.205-4.205zM0 8.245l8.28 9.266c.839.94 2.396.346 2.396-.914V8.245H8.19v5.44l-4.86-5.44Z");
31
+ /** Vercel. simple-icons. Brand hex 000000. */
32
+ export const VercelMark = mark("m12 1.608 12 20.784H0Z");
33
+ /** Netlify. simple-icons. Brand hex 00C7B7. */
34
+ export const NetlifyMark = mark("M6.49 19.04h-.23L5.13 17.9v-.23l1.73-1.71h1.2l.15.15v1.2L6.5 19.04ZM5.13 6.31V6.1l1.13-1.13h.23L8.2 6.68v1.2l-.15.15h-1.2L5.13 6.31Zm9.96 9.09h-1.65l-.14-.13v-3.83c0-.68-.27-1.2-1.1-1.23-.42 0-.9 0-1.43.02l-.07.08v4.96l-.14.14H8.9l-.13-.14V8.73l.13-.14h3.7a2.6 2.6 0 0 1 2.61 2.6v4.08l-.13.14Zm-8.37-2.44H.14L0 12.82v-1.64l.14-.14h6.58l.14.14v1.64l-.14.14Zm17.14 0h-6.58l-.14-.14v-1.64l.14-.14h6.58l.14.14v1.64l-.14.14ZM11.05 6.55V1.64l.14-.14h1.65l.14.14v4.9l-.14.14h-1.65l-.14-.13Zm0 15.81v-4.9l.14-.14h1.65l.14.13v4.91l-.14.14h-1.65l-.14-.14Z");
35
+ /** Render. simple-icons. Brand hex 000000. */
36
+ export const RenderMark = mark("M18.263.007c-3.121-.147-5.744 2.109-6.192 5.082-.018.138-.045.272-.067.405-.696 3.703-3.936 6.507-7.827 6.507-1.388 0-2.691-.356-3.825-.979a.2024.2024 0 0 0-.302.178V24H12v-8.999c0-1.656 1.338-3 2.987-3h2.988c3.382 0 6.103-2.817 5.97-6.244-.12-3.084-2.61-5.603-5.682-5.75");
37
+ /** Google Gemini. simple-icons. Brand hex 8E75B2. */
38
+ export const GeminiMark = mark("M11.04 19.32Q12 21.51 12 24q0-2.49.93-4.68.96-2.19 2.58-3.81t3.81-2.55Q21.51 12 24 12q-2.49 0-4.68-.93a12.3 12.3 0 0 1-3.81-2.58 12.3 12.3 0 0 1-2.58-3.81Q12 2.49 12 0q0 2.49-.96 4.68-.93 2.19-2.55 3.81a12.3 12.3 0 0 1-3.81 2.58Q2.49 12 0 12q2.49 0 4.68.96 2.19.93 3.81 2.55t2.55 3.81");
39
+ /** OpenAI. OpenAI official brand pack, the Blossom. */
40
+ export const OpenAiMark = mark("M508.749 317.399C516.777 287.314 508.991 253.884 485.389 230.282C461.788 206.681 428.36 198.895 398.273 206.923C376.231 184.928 343.39 174.956 311.148 183.596C278.906 192.234 255.45 217.292 247.36 247.361C217.291 255.451 192.233 278.91 183.595 311.149C174.957 343.391 184.927 376.232 206.924 398.274C198.896 428.359 206.683 461.789 230.284 485.391C253.885 508.992 287.313 516.779 317.401 508.75C339.442 530.745 372.286 540.717 404.525 532.079C436.767 523.441 460.223 498.384 468.313 468.315C498.383 460.224 523.44 436.766 532.078 404.526C540.716 372.285 530.747 339.443 508.749 317.402V317.399ZM470.899 244.776C486.892 260.77 493.488 282.601 490.687 303.412L415.577 260.046C412.411 258.218 408.509 258.218 405.345 260.046L317.401 310.82V277.526C317.401 275.191 318.652 273.005 320.676 271.837L387.644 233.174C414.178 218.353 448.346 222.223 470.901 244.776H470.899ZM357.837 311.144L398.275 334.491V381.185L357.837 404.532L317.398 381.185V334.491L357.837 311.144ZM264.776 269.693C265.207 239.305 285.644 211.649 316.453 203.393C338.3 197.54 360.505 202.744 377.127 215.573L302.014 258.937C298.848 260.764 296.898 264.144 296.898 267.798V369.346L268.065 352.699C266.043 351.531 264.776 349.353 264.776 347.017V269.691V269.693ZM203.391 316.454C209.244 294.608 224.854 277.978 244.276 269.999V356.73C244.276 360.384 246.226 363.763 249.392 365.591L337.337 416.365L308.503 433.013C306.481 434.181 303.961 434.188 301.939 433.02L234.971 394.357C208.868 378.789 195.138 347.261 203.391 316.454ZM244.775 470.9C228.781 454.906 222.186 433.075 224.986 412.264L300.096 455.63C303.263 457.457 307.164 457.457 310.328 455.63L398.273 404.856V438.149C398.273 440.485 397.022 442.671 394.997 443.839L328.029 482.502C301.495 497.322 267.327 493.452 244.772 470.9H244.775ZM450.897 445.982C450.466 476.371 430.029 504.027 399.22 512.283C377.373 518.136 355.168 512.932 338.547 500.102L413.659 456.738C416.826 454.911 418.775 451.532 418.775 447.877V346.329L447.609 362.977C449.631 364.145 450.897 366.323 450.897 368.659V445.985V445.982ZM512.282 399.221C506.429 421.068 490.819 437.697 471.397 445.676V358.946C471.397 355.292 469.448 351.912 466.281 350.085L378.336 299.311L407.17 282.663C409.192 281.495 411.712 281.487 413.734 282.655L480.702 321.318C506.805 336.887 520.536 368.415 512.282 399.221Z",
41
+ // NOT the asset's own 0 0 716 716.
42
+ //
43
+ // The Blossom is drawn 354.7 square and centred in that canvas, so a quarter of
44
+ // every edge is clear space. That is right for a brand asset, where the pack is
45
+ // telling you how much room to leave around it, and wrong in an icon rail, where
46
+ // the rail already provides the spacing and the mark just renders half size.
47
+ // Measured beside its neighbours it filled 0.50 of its box against their 0.83
48
+ // to 1.00, which is what the operator saw.
49
+ //
50
+ // Cropped to the glyph plus a small even margin, landing at 0.92. Not 1.00: a
51
+ // dense radial shape at full bleed reads heavier than a letterform at the same
52
+ // measurement, so it is held slightly back on purpose.
53
+ "165 165 386 386");
54
+ /** Codex. supplied by the operator. */
55
+ export const CodexMark = mark("M8.086.457a6.105 6.105 0 013.046-.415c1.333.153 2.521.72 3.564 1.7a.117.117 0 00.107.029c1.408-.346 2.762-.224 4.061.366l.063.03.154.076c1.357.703 2.33 1.77 2.918 3.198.278.679.418 1.388.421 2.126a5.655 5.655 0 01-.18 1.631.167.167 0 00.04.155 5.982 5.982 0 011.578 2.891c.385 1.901-.01 3.615-1.183 5.14l-.182.22a6.063 6.063 0 01-2.934 1.851.162.162 0 00-.108.102c-.255.736-.511 1.364-.987 1.992-1.199 1.582-2.962 2.462-4.948 2.451-1.583-.008-2.986-.587-4.21-1.736a.145.145 0 00-.14-.032c-.518.167-1.04.191-1.604.185a5.924 5.924 0 01-2.595-.622 6.058 6.058 0 01-2.146-1.781c-.203-.269-.404-.522-.551-.821a7.74 7.74 0 01-.495-1.283 6.11 6.11 0 01-.017-3.064.166.166 0 00.008-.074.115.115 0 00-.037-.064 5.958 5.958 0 01-1.38-2.202 5.196 5.196 0 01-.333-1.589 6.915 6.915 0 01.188-2.132c.45-1.484 1.309-2.648 2.577-3.493.282-.188.55-.334.802-.438.286-.12.573-.22.861-.304a.129.129 0 00.087-.087A6.016 6.016 0 015.635 2.31C6.315 1.464 7.132.846 8.086.457zm-.804 7.85a.848.848 0 00-1.473.842l1.694 2.965-1.688 2.848a.849.849 0 001.46.864l1.94-3.272a.849.849 0 00.007-.854l-1.94-3.393zm5.446 6.24a.849.849 0 000 1.695h4.848a.849.849 0 000-1.696h-4.848z", "0 0 24 24", "evenodd");
56
+ /** Lovable. @lobehub/icons. */
57
+ export const LovableMark = mark("M7.082 0c3.91 0 7.081 3.179 7.081 7.1v2.7h2.357c3.91 0 7.082 3.178 7.082 7.1 0 3.923-3.17 7.1-7.082 7.1H0V7.1C0 3.18 3.17 0 7.082 0z", "0 0 24 24");
58
+ /** Bolt. bolt.new favicon, glyph only. */
59
+ export const BoltMark = mark("M8.64368 11.7731C7.91976 11.7731 7.20901 11.5147 6.80099 10.9591L6.65707 11.6143L4 13L4.28684 11.6143L6.22186 3H8.59103L7.9066 6.03634C8.45941 5.44199 8.97273 5.22234 9.63083 5.22234C11.0523 5.22234 12 6.1397 12 7.81938C12 9.55074 10.9076 11.7731 8.64368 11.7731ZM9.55186 8.31036C9.55186 9.11144 8.97273 9.71871 8.22249 9.71871C7.8013 9.71871 7.4196 9.56366 7.16952 9.29233L7.53806 7.70309C7.81447 7.43176 8.13036 7.27671 8.49889 7.27671C9.06486 7.27671 9.55186 7.69017 9.55186 8.31036Z",
60
+ // Same correction as the Blossom above, from the same measurement pass. The
61
+ // favicon draws the bolt 8x10 inside a 16x16 tile, most of which was the black
62
+ // rounded rect that got dropped, so what remained was a glyph filling half its
63
+ // box. Cropped to 0.72 wide and 0.90 tall, which is where the narrow marks in
64
+ // this set sit.
65
+ "2.5 2.5 11 11", "evenodd");
66
+ /** Base44. base44.com, the leading glyph of the wordmark. */
67
+ export const Base44Mark = mark("M22.2991 19.5C22.4428 19.5 22.5806 19.5571 22.6821 19.6587L23.3198 20.2963C23.4696 20.4461 23.4897 20.6829 23.3616 20.8518C20.9876 23.9798 17.2298 26 13 26C8.76501 26 5.00305 23.9749 2.62952 20.8403C2.50167 20.6714 2.52186 20.4349 2.67163 20.2851L3.29818 19.6586C3.39976 19.5571 3.53753 19.5 3.68118 19.5H22.2991ZM13 0C20.1797 0 26 5.8203 26 13C26 13.4711 25.9747 13.9363 25.9258 14.3944C25.9105 14.5384 25.8447 14.6719 25.7423 14.7743L24.4571 16.0596C24.3352 16.1815 24.1698 16.25 23.9974 16.25H2.00257C1.83018 16.25 1.66485 16.1815 1.54295 16.0596L0.257606 14.7743C0.155245 14.6719 0.0894221 14.5384 0.0740615 14.3944C0.025174 13.9363 0 13.4711 0 13C0 5.8203 5.8203 0 13 0Z", "0 0 26 26");
68
+ /** Every vendored mark, by the display name ToolLogo takes. */
69
+ export const AntigravityMark = mark("M89.6992 93.695C94.3659 97.195 101.366 94.8617 94.9492 88.445C75.6992 69.7783 79.7825 18.445 55.8659 18.445C31.9492 18.445 36.0325 69.7783 16.7825 88.445C9.78251 95.445 17.3658 97.195 22.0325 93.695C40.1159 81.445 38.9492 59.8617 55.8659 59.8617C72.7825 59.8617 71.6159 81.445 89.6992 93.695Z",
70
+ // Square, centred on the glyph's own 83.59x77 bounds rather than the lockup's
71
+ // 869x113, so it sits at the same optical weight as the 24x24 marks beside it.
72
+ "12 13 88 88");
73
+ export const TOOL_MARKS = {
74
+ "Claude": { Mark: ClaudeMark, hex: "D97757" },
75
+ "Claude Code": { Mark: ClaudeCodeMark, hex: "D97757" },
76
+ "Anthropic": { Mark: AnthropicMark, hex: "191919" },
77
+ "Cursor": { Mark: CursorMark, hex: "000000" },
78
+ "GitHub Copilot": { Mark: CopilotMark, hex: "000000" },
79
+ "Windsurf": { Mark: WindsurfMark, hex: "0B100F" },
80
+ "Replit": { Mark: ReplitMark, hex: "F26207" },
81
+ "v0": { Mark: V0Mark, hex: "000000" },
82
+ "Vercel": { Mark: VercelMark, hex: "000000" },
83
+ "Netlify": { Mark: NetlifyMark, hex: "00C7B7" },
84
+ "Render": { Mark: RenderMark, hex: "000000" },
85
+ "Google Gemini": { Mark: GeminiMark, hex: "8E75B2" },
86
+ "OpenAI": { Mark: OpenAiMark, hex: "000000" },
87
+ "ChatGPT": { Mark: OpenAiMark, hex: "000000" },
88
+ "Codex": { Mark: CodexMark, hex: "000000" },
89
+ "Lovable": { Mark: LovableMark, hex: "FF4785" },
90
+ "Bolt": { Mark: BoltMark, hex: "000000" },
91
+ "Base44": { Mark: Base44Mark, hex: "FF6A00" },
92
+ "Antigravity": { Mark: AntigravityMark, hex: "3186FF" },
93
+ };
94
+ //# sourceMappingURL=tool-marks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-marks.js","sourceRoot":"","sources":["../../src/blocks/tool-marks.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ export * from "./ui/accordion.js";
2
+ export * from "./ui/badge.js";
3
+ export * from "./ui/button.js";
4
+ export * from "./ui/card.js";
5
+ export * from "./ui/carousel.js";
6
+ export * from "./ui/checkbox.js";
7
+ export * from "./ui/code-block.js";
8
+ export * from "./ui/combobox.js";
9
+ export * from "./ui/dialog.js";
10
+ export * from "./ui/dropdown-menu.js";
11
+ export * from "./ui/input-group.js";
12
+ export * from "./ui/input.js";
13
+ export * from "./ui/number-field.js";
14
+ export * from "./ui/panel.js";
15
+ export * from "./ui/select.js";
16
+ export * from "./ui/separator.js";
17
+ export * from "./ui/skeleton.js";
18
+ export * from "./ui/sonner.js";
19
+ export * from "./ui/switch.js";
20
+ export * from "./ui/table.js";
21
+ export * from "./ui/tabs.js";
22
+ export * from "./ui/textarea.js";
23
+ export * from "./ui/tooltip.js";
24
+ export * from "./blocks/agent-prompt.js";
25
+ export * from "./blocks/card-grid.js";
26
+ export * from "./blocks/compare-table.js";
27
+ export * from "./blocks/creation-tile.js";
28
+ export * from "./blocks/cta-banner.js";
29
+ export * from "./blocks/drop-zone.js";
30
+ export * from "./blocks/feature-cells.js";
31
+ export * from "./blocks/hub-index.js";
32
+ export * from "./blocks/logo.js";
33
+ export * from "./blocks/option-card.js";
34
+ export * from "./blocks/page-heading.js";
35
+ export * from "./blocks/plug-method.js";
36
+ export * from "./blocks/pricing-tier-cards.js";
37
+ export * from "./blocks/pricing-tiers.js";
38
+ export * from "./blocks/quote.js";
39
+ export * from "./blocks/rich-text.js";
40
+ export * from "./blocks/stage-panel.js";
41
+ export * from "./blocks/step-item.js";
42
+ export * from "./blocks/tool-logo.js";
43
+ export * from "./blocks/tool-marks.js";
44
+ export * from "./lib/cloudgrid-cn.js";
45
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiBA,cAAc,mBAAmB,CAAA;AACjC,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAG/B,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA;AACzC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,2BAA2B,CAAA;AACzC,cAAc,uBAAuB,CAAA;AACrC,cAAc,kBAAkB,CAAA;AAChC,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,yBAAyB,CAAA;AACvC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,2BAA2B,CAAA;AACzC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AAGtC,cAAc,uBAAuB,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,63 @@
1
+ // The public surface of @cloudgrid-io/ui.
2
+ //
3
+ // GENERATED shape, hand-committed: one `export *` per component module. Flat is
4
+ // safe here — the 146 exported names across all 43 components collide zero times,
5
+ // asserted by a test so a future addition cannot break it silently.
6
+ //
7
+ // Per-module re-exports rather than a bundle, deliberately. 20 of these carry a
8
+ // "use client" directive, and the client boundary is a property of the MODULE.
9
+ // tsc emits file-per-file and preserves the directive, so a React Server
10
+ // Component consumer keeps exactly the boundaries the source declares. Bundling
11
+ // them into one file would collapse 43 modules into a single client island.
12
+ //
13
+ // The CSS is NOT imported here. It ships as separate entry points
14
+ // (@cloudgrid-io/ui/tokens.css and friends) so a consumer with no React — the
15
+ // Astro site — can take the brand without pulling in a component tree.
16
+ // Primitives.
17
+ export * from "./ui/accordion.js";
18
+ export * from "./ui/badge.js";
19
+ export * from "./ui/button.js";
20
+ export * from "./ui/card.js";
21
+ export * from "./ui/carousel.js";
22
+ export * from "./ui/checkbox.js";
23
+ export * from "./ui/code-block.js";
24
+ export * from "./ui/combobox.js";
25
+ export * from "./ui/dialog.js";
26
+ export * from "./ui/dropdown-menu.js";
27
+ export * from "./ui/input-group.js";
28
+ export * from "./ui/input.js";
29
+ export * from "./ui/number-field.js";
30
+ export * from "./ui/panel.js";
31
+ export * from "./ui/select.js";
32
+ export * from "./ui/separator.js";
33
+ export * from "./ui/skeleton.js";
34
+ export * from "./ui/sonner.js";
35
+ export * from "./ui/switch.js";
36
+ export * from "./ui/table.js";
37
+ export * from "./ui/tabs.js";
38
+ export * from "./ui/textarea.js";
39
+ export * from "./ui/tooltip.js";
40
+ // Composed blocks.
41
+ export * from "./blocks/agent-prompt.js";
42
+ export * from "./blocks/card-grid.js";
43
+ export * from "./blocks/compare-table.js";
44
+ export * from "./blocks/creation-tile.js";
45
+ export * from "./blocks/cta-banner.js";
46
+ export * from "./blocks/drop-zone.js";
47
+ export * from "./blocks/feature-cells.js";
48
+ export * from "./blocks/hub-index.js";
49
+ export * from "./blocks/logo.js";
50
+ export * from "./blocks/option-card.js";
51
+ export * from "./blocks/page-heading.js";
52
+ export * from "./blocks/plug-method.js";
53
+ export * from "./blocks/pricing-tier-cards.js";
54
+ export * from "./blocks/pricing-tiers.js";
55
+ export * from "./blocks/quote.js";
56
+ export * from "./blocks/rich-text.js";
57
+ export * from "./blocks/stage-panel.js";
58
+ export * from "./blocks/step-item.js";
59
+ export * from "./blocks/tool-logo.js";
60
+ export * from "./blocks/tool-marks.js";
61
+ // The class-merge helper, which the components use and consumers may too.
62
+ export * from "./lib/cloudgrid-cn.js";
63
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,EAAE;AACF,gFAAgF;AAChF,kFAAkF;AAClF,oEAAoE;AACpE,EAAE;AACF,gFAAgF;AAChF,+EAA+E;AAC/E,yEAAyE;AACzE,gFAAgF;AAChF,4EAA4E;AAC5E,EAAE;AACF,kEAAkE;AAClE,8EAA8E;AAC9E,uEAAuE;AAEvE,cAAc;AACd,cAAc,mBAAmB,CAAA;AACjC,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAE/B,mBAAmB;AACnB,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA;AACzC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,2BAA2B,CAAA;AACzC,cAAc,uBAAuB,CAAA;AACrC,cAAc,kBAAkB,CAAA;AAChC,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,yBAAyB,CAAA;AACvC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,2BAA2B,CAAA;AACzC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AAEtC,0EAA0E;AAC1E,cAAc,uBAAuB,CAAA"}
@@ -0,0 +1,65 @@
1
+ import { type ClassValue } from "clsx";
2
+ /**
3
+ * Every font-size utility the brand scale adds, as tailwind-merge sees it:
4
+ * the part after `text-`. Must stay in step with the `--text-*` block in
5
+ * `@cloudgrid/tokens/theme.css`, and a static assertion enforces that.
6
+ *
7
+ * tailwind-merge carries a STATIC config and never reads the CSS theme, so it
8
+ * classifies `text-*` by validator. Its `font-size` group accepts `base` plus
9
+ * the anchored t-shirt regex `^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$`; its
10
+ * `text-color` group accepts anything at all. None of the names below match the
11
+ * size regex, so without this list they fall through to `text-color`, get
12
+ * treated as colours, and a real colour later in the same `cn()` deletes them:
13
+ *
14
+ * twMerge("text-body-sm text-ink") -> "text-ink"
15
+ * twMerge("text-sm text-ink") -> "text-sm text-ink"
16
+ *
17
+ * The stock utilities survived because they are t-shirt shaped. The brand ones
18
+ * do not, which is the cost of naming type for its role rather than its
19
+ * magnitude. Found by review on #31, after the change had shipped through
20
+ * 21 green assertions: every one of them checked the token layer, and the
21
+ * deletion happens later, here.
22
+ *
23
+ * **The damage runs both ways, and which way depends on class order.** A
24
+ * missing name before a colour loses the size, which is the bug above. The same
25
+ * name *after* a colour is worse, because it is the survivor and the real
26
+ * colour is what gets dropped:
27
+ *
28
+ * cn("text-body-sm", "bg-primary text-primary-foreground", "text-caption")
29
+ * -> "text-body-sm bg-primary h-6 ... text-caption"
30
+ * text-primary-foreground deleted, the button loses its foreground
31
+ *
32
+ * That second case renders the right size, so a font-size assertion passes
33
+ * while the colour is silently gone. Do not rely on the DOM size check to catch
34
+ * an unregistered name: the guard that actually covers both directions is the
35
+ * static one in `component-source.spec.ts`, which fails if anything in
36
+ * `theme.css` is missing from this list.
37
+ *
38
+ * `text-body` is deliberately absent. It is a colour (`--color-body`), and only
39
+ * the sized variants belong in this group.
40
+ */
41
+ /**
42
+ * Brand font-weight names that are not Tailwind keywords.
43
+ *
44
+ * tailwind-merge resolves the `font-` prefix across two groups, and they use
45
+ * different matchers. `font-weight` checks a **literal** list of Tailwind's own
46
+ * keywords (thin, light, normal, medium, semibold, bold, extrabold, black).
47
+ * `font-family` uses a catch-all validator that accepts anything. So a weight
48
+ * name Tailwind does not know falls through to the family group, lands beside
49
+ * `font-display`, and last-one-wins deletes the face:
50
+ *
51
+ * cn("font-display font-heavy") -> "font-heavy" the face is gone
52
+ * cn("font-display font-bold") -> both survive bold is a keyword
53
+ *
54
+ * That shipped every PageHeading in the body face at weight 800, and was caught
55
+ * in review on #42 rather than by a test: the rendered spec next door read only
56
+ * fontSize. It now reads family and weight too.
57
+ *
58
+ * `regular` is registered although nothing uses it yet. It has the identical
59
+ * defect and costs nothing to include; leaving it out would mean the next person
60
+ * to write `font-regular` rediscovers this.
61
+ */
62
+ export declare const BRAND_FONT_WEIGHTS: readonly ["heavy", "regular"];
63
+ export declare const BRAND_FONT_SIZES: readonly ["display-xl", "display-lg", "display-md", "display-sm", "heading-lg", "heading-md", "heading-sm", "body-lg", "body-md", "body-sm", "caption", "mono", "label"];
64
+ export declare function cn(...inputs: ClassValue[]): string;
65
+ //# sourceMappingURL=cloudgrid-cn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudgrid-cn.d.ts","sourceRoot":"","sources":["../../src/lib/cloudgrid-cn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,MAAM,CAAA;AAG5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,kBAAkB,+BAAgC,CAAA;AAE/D,eAAO,MAAM,gBAAgB,0KAcnB,CAAA;AAWV,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC"}
@@ -0,0 +1,90 @@
1
+ import { clsx } from "clsx";
2
+ import { extendTailwindMerge } from "tailwind-merge";
3
+ /**
4
+ * Every font-size utility the brand scale adds, as tailwind-merge sees it:
5
+ * the part after `text-`. Must stay in step with the `--text-*` block in
6
+ * `@cloudgrid/tokens/theme.css`, and a static assertion enforces that.
7
+ *
8
+ * tailwind-merge carries a STATIC config and never reads the CSS theme, so it
9
+ * classifies `text-*` by validator. Its `font-size` group accepts `base` plus
10
+ * the anchored t-shirt regex `^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$`; its
11
+ * `text-color` group accepts anything at all. None of the names below match the
12
+ * size regex, so without this list they fall through to `text-color`, get
13
+ * treated as colours, and a real colour later in the same `cn()` deletes them:
14
+ *
15
+ * twMerge("text-body-sm text-ink") -> "text-ink"
16
+ * twMerge("text-sm text-ink") -> "text-sm text-ink"
17
+ *
18
+ * The stock utilities survived because they are t-shirt shaped. The brand ones
19
+ * do not, which is the cost of naming type for its role rather than its
20
+ * magnitude. Found by review on #31, after the change had shipped through
21
+ * 21 green assertions: every one of them checked the token layer, and the
22
+ * deletion happens later, here.
23
+ *
24
+ * **The damage runs both ways, and which way depends on class order.** A
25
+ * missing name before a colour loses the size, which is the bug above. The same
26
+ * name *after* a colour is worse, because it is the survivor and the real
27
+ * colour is what gets dropped:
28
+ *
29
+ * cn("text-body-sm", "bg-primary text-primary-foreground", "text-caption")
30
+ * -> "text-body-sm bg-primary h-6 ... text-caption"
31
+ * text-primary-foreground deleted, the button loses its foreground
32
+ *
33
+ * That second case renders the right size, so a font-size assertion passes
34
+ * while the colour is silently gone. Do not rely on the DOM size check to catch
35
+ * an unregistered name: the guard that actually covers both directions is the
36
+ * static one in `component-source.spec.ts`, which fails if anything in
37
+ * `theme.css` is missing from this list.
38
+ *
39
+ * `text-body` is deliberately absent. It is a colour (`--color-body`), and only
40
+ * the sized variants belong in this group.
41
+ */
42
+ /**
43
+ * Brand font-weight names that are not Tailwind keywords.
44
+ *
45
+ * tailwind-merge resolves the `font-` prefix across two groups, and they use
46
+ * different matchers. `font-weight` checks a **literal** list of Tailwind's own
47
+ * keywords (thin, light, normal, medium, semibold, bold, extrabold, black).
48
+ * `font-family` uses a catch-all validator that accepts anything. So a weight
49
+ * name Tailwind does not know falls through to the family group, lands beside
50
+ * `font-display`, and last-one-wins deletes the face:
51
+ *
52
+ * cn("font-display font-heavy") -> "font-heavy" the face is gone
53
+ * cn("font-display font-bold") -> both survive bold is a keyword
54
+ *
55
+ * That shipped every PageHeading in the body face at weight 800, and was caught
56
+ * in review on #42 rather than by a test: the rendered spec next door read only
57
+ * fontSize. It now reads family and weight too.
58
+ *
59
+ * `regular` is registered although nothing uses it yet. It has the identical
60
+ * defect and costs nothing to include; leaving it out would mean the next person
61
+ * to write `font-regular` rediscovers this.
62
+ */
63
+ export const BRAND_FONT_WEIGHTS = ["heavy", "regular"];
64
+ export const BRAND_FONT_SIZES = [
65
+ "display-xl",
66
+ "display-lg",
67
+ "display-md",
68
+ "display-sm",
69
+ "heading-lg",
70
+ "heading-md",
71
+ "heading-sm",
72
+ "body-lg",
73
+ "body-md",
74
+ "body-sm",
75
+ "caption",
76
+ "mono",
77
+ "label",
78
+ ];
79
+ const twMerge = extendTailwindMerge({
80
+ extend: {
81
+ classGroups: {
82
+ "font-size": [{ text: [...BRAND_FONT_SIZES] }],
83
+ "font-weight": [{ font: [...BRAND_FONT_WEIGHTS] }],
84
+ },
85
+ },
86
+ });
87
+ export function cn(...inputs) {
88
+ return twMerge(clsx(inputs));
89
+ }
90
+ //# sourceMappingURL=cloudgrid-cn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudgrid-cn.js","sourceRoot":"","sources":["../../src/lib/cloudgrid-cn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAmB,MAAM,MAAM,CAAA;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAEpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE,SAAS,CAAU,CAAA;AAE/D,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,MAAM;IACN,OAAO;CACC,CAAA;AAEV,MAAM,OAAO,GAAG,mBAAmB,CAAC;IAClC,MAAM,EAAE;QACN,WAAW,EAAE;YACX,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,gBAAgB,CAAC,EAAE,CAAC;YAC9C,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,kBAAkB,CAAC,EAAE,CAAC;SACnD;KACF;CACF,CAAC,CAAA;AAEF,MAAM,UAAU,EAAE,CAAC,GAAG,MAAoB;IACxC,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;AAC9B,CAAC"}