@cianfrani/ai-ui 0.1.0-alpha.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 (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +144 -0
  3. package/dist/ai-ui.js +3218 -0
  4. package/dist/types/index.d.ts +7 -0
  5. package/dist/types/lib/has-slot-controller.d.ts +21 -0
  6. package/dist/types/lib/tool-tone.d.ts +2 -0
  7. package/dist/types/native-styles.d.ts +5 -0
  8. package/dist/types/semantic/ai-conversation.d.ts +28 -0
  9. package/dist/types/semantic/ai-event.d.ts +91 -0
  10. package/dist/types/semantic/ai-message.d.ts +45 -0
  11. package/dist/types/semantic/ai-thinking.d.ts +41 -0
  12. package/dist/types/semantic/ai-tool-call.d.ts +59 -0
  13. package/dist/types/semantic/ai-tool-result.d.ts +44 -0
  14. package/dist/types/semantic/index.d.ts +6 -0
  15. package/dist/types/visual/avatar.d.ts +34 -0
  16. package/dist/types/visual/badge.d.ts +32 -0
  17. package/dist/types/visual/divider.d.ts +26 -0
  18. package/dist/types/visual/icon.d.ts +24 -0
  19. package/dist/types/visual/index.d.ts +9 -0
  20. package/dist/types/visual/markdown.d.ts +52 -0
  21. package/dist/types/visual/stack.d.ts +32 -0
  22. package/dist/types/visual/status.d.ts +33 -0
  23. package/dist/types/visual/surface.d.ts +34 -0
  24. package/dist/types/visual/text.d.ts +37 -0
  25. package/package.json +67 -0
  26. package/src/custom-elements.json +3741 -0
  27. package/src/index.ts +8 -0
  28. package/src/lib/has-slot-controller.ts +61 -0
  29. package/src/lib/tool-tone.ts +18 -0
  30. package/src/native-styles.ts +29 -0
  31. package/src/semantic/ai-conversation.ts +84 -0
  32. package/src/semantic/ai-event.ts +452 -0
  33. package/src/semantic/ai-message.ts +235 -0
  34. package/src/semantic/ai-thinking.ts +190 -0
  35. package/src/semantic/ai-tool-call.ts +513 -0
  36. package/src/semantic/ai-tool-result.ts +239 -0
  37. package/src/semantic/index.ts +6 -0
  38. package/src/visual/avatar.ts +163 -0
  39. package/src/visual/badge.ts +141 -0
  40. package/src/visual/divider.ts +97 -0
  41. package/src/visual/icon.ts +97 -0
  42. package/src/visual/index.ts +9 -0
  43. package/src/visual/markdown.ts +888 -0
  44. package/src/visual/stack.ts +115 -0
  45. package/src/visual/status.ts +170 -0
  46. package/src/visual/surface.ts +150 -0
  47. package/src/visual/text.ts +141 -0
@@ -0,0 +1,97 @@
1
+ import { LitElement, css, html } from "lit";
2
+ import { customElement, property } from "lit/decorators.js";
3
+
4
+ const SIZE_MAP: Record<string, string> = {
5
+ xs: "12px",
6
+ sm: "14px",
7
+ md: "16px",
8
+ lg: "20px",
9
+ };
10
+
11
+ /**
12
+ * Consistent icon sizing/tone wrapper.
13
+ *
14
+ * @slot - SVG/icon content.
15
+ *
16
+ * @cssprop --size - Icon width/height.
17
+ * @cssprop --color - Icon color.
18
+ */
19
+ @customElement("ai-icon")
20
+ export class AiIcon extends LitElement {
21
+ /** Size preset. */
22
+ @property({ reflect: true }) size: "xs" | "sm" | "md" | "lg" = "md";
23
+ /** Semantic color tone. */
24
+ @property({ reflect: true }) tone:
25
+ | "default"
26
+ | "muted"
27
+ | "accent"
28
+ | "success"
29
+ | "warning"
30
+ | "error" = "default";
31
+
32
+ static override styles = css`
33
+ :host {
34
+ box-sizing: border-box;
35
+ display: inline-flex;
36
+ align-items: center;
37
+ justify-content: center;
38
+ width: var(--size, 16px);
39
+ height: var(--size, 16px);
40
+ color: var(--color, inherit);
41
+ margin: 0;
42
+ padding: 0;
43
+ }
44
+
45
+ ::slotted(*) {
46
+ width: 100%;
47
+ height: 100%;
48
+ }
49
+
50
+ ::slotted(svg) {
51
+ fill: currentColor;
52
+ }
53
+
54
+ *,
55
+ *::before,
56
+ *::after {
57
+ box-sizing: inherit;
58
+ }
59
+ `;
60
+
61
+ override render() {
62
+ return html`
63
+ <slot></slot>
64
+ `;
65
+ }
66
+
67
+ protected override updated(): void {
68
+ const size = SIZE_MAP[this.size] ?? "16px";
69
+ this.style.setProperty("--size", `var(--size, ${size})`);
70
+
71
+ const toneColor = this.getToneColor();
72
+ this.style.setProperty("--color", `var(--color, ${toneColor})`);
73
+ }
74
+
75
+ private getToneColor(): string {
76
+ switch (this.tone) {
77
+ case "muted":
78
+ return "var(--ai-color-text-muted, rgba(128, 128, 128, 0.7))";
79
+ case "accent":
80
+ return "var(--ai-color-accent, #4a90d9)";
81
+ case "success":
82
+ return "var(--ai-color-success, #2ea043)";
83
+ case "warning":
84
+ return "var(--ai-color-warning, #d29922)";
85
+ case "error":
86
+ return "var(--ai-color-error, #e33e33)";
87
+ default:
88
+ return "inherit";
89
+ }
90
+ }
91
+ }
92
+
93
+ declare global {
94
+ interface HTMLElementTagNameMap {
95
+ "ai-icon": AiIcon;
96
+ }
97
+ }
@@ -0,0 +1,9 @@
1
+ export * from "./stack";
2
+ export * from "./surface";
3
+ export * from "./text";
4
+ export * from "./markdown";
5
+ export * from "./badge";
6
+ export * from "./status";
7
+ export * from "./avatar";
8
+ export * from "./icon";
9
+ export * from "./divider";