@fragments-sdk/ui 0.9.4 → 0.9.6

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 (126) hide show
  1. package/dist/assets/ui.css +443 -247
  2. package/dist/blocks/components/index.d.ts +0 -2
  3. package/dist/blocks/components/index.d.ts.map +1 -1
  4. package/dist/codeblock.cjs +187 -184
  5. package/dist/codeblock.cjs.map +1 -1
  6. package/dist/codeblock.js +183 -180
  7. package/dist/codeblock.js.map +1 -1
  8. package/dist/components/Box/Box.module.scss.cjs +73 -0
  9. package/dist/components/Box/Box.module.scss.cjs.map +1 -1
  10. package/dist/components/Box/Box.module.scss.js +73 -0
  11. package/dist/components/Box/Box.module.scss.js.map +1 -1
  12. package/dist/components/ButtonGroup/ButtonGroup.module.scss.cjs +6 -0
  13. package/dist/components/ButtonGroup/ButtonGroup.module.scss.cjs.map +1 -1
  14. package/dist/components/ButtonGroup/ButtonGroup.module.scss.js +6 -0
  15. package/dist/components/ButtonGroup/ButtonGroup.module.scss.js.map +1 -1
  16. package/dist/components/CodeBlock/CodeBlock.module.scss.cjs +20 -23
  17. package/dist/components/CodeBlock/CodeBlock.module.scss.cjs.map +1 -1
  18. package/dist/components/CodeBlock/CodeBlock.module.scss.js +20 -23
  19. package/dist/components/CodeBlock/CodeBlock.module.scss.js.map +1 -1
  20. package/dist/components/CodeBlock/index.d.ts +11 -7
  21. package/dist/components/CodeBlock/index.d.ts.map +1 -1
  22. package/dist/components/Combobox/Combobox.module.scss.cjs +15 -15
  23. package/dist/components/Combobox/Combobox.module.scss.js +15 -15
  24. package/dist/components/DataTable/DataTable.module.scss.cjs +84 -0
  25. package/dist/components/DataTable/DataTable.module.scss.cjs.map +1 -0
  26. package/dist/components/DataTable/DataTable.module.scss.js +84 -0
  27. package/dist/components/DataTable/DataTable.module.scss.js.map +1 -0
  28. package/dist/components/DataTable/index.cjs +383 -0
  29. package/dist/components/DataTable/index.cjs.map +1 -0
  30. package/dist/components/DataTable/index.d.ts +78 -0
  31. package/dist/components/DataTable/index.d.ts.map +1 -0
  32. package/dist/components/DataTable/index.js +366 -0
  33. package/dist/components/DataTable/index.js.map +1 -0
  34. package/dist/components/Drawer/Drawer.module.scss.cjs +9 -0
  35. package/dist/components/Drawer/Drawer.module.scss.cjs.map +1 -1
  36. package/dist/components/Drawer/Drawer.module.scss.js +9 -0
  37. package/dist/components/Drawer/Drawer.module.scss.js.map +1 -1
  38. package/dist/components/Image/Image.module.scss.cjs +12 -0
  39. package/dist/components/Image/Image.module.scss.cjs.map +1 -1
  40. package/dist/components/Image/Image.module.scss.js +12 -0
  41. package/dist/components/Image/Image.module.scss.js.map +1 -1
  42. package/dist/components/Link/Link.module.scss.cjs +3 -0
  43. package/dist/components/Link/Link.module.scss.cjs.map +1 -1
  44. package/dist/components/Link/Link.module.scss.js +3 -0
  45. package/dist/components/Link/Link.module.scss.js.map +1 -1
  46. package/dist/components/List/List.module.scss.cjs +5 -0
  47. package/dist/components/List/List.module.scss.cjs.map +1 -1
  48. package/dist/components/List/List.module.scss.js +5 -0
  49. package/dist/components/List/List.module.scss.js.map +1 -1
  50. package/dist/components/Loading/Loading.module.scss.cjs +5 -0
  51. package/dist/components/Loading/Loading.module.scss.cjs.map +1 -1
  52. package/dist/components/Loading/Loading.module.scss.js +5 -0
  53. package/dist/components/Loading/Loading.module.scss.js.map +1 -1
  54. package/dist/components/Markdown/Markdown.module.scss.cjs +1 -1
  55. package/dist/components/Markdown/Markdown.module.scss.js +1 -1
  56. package/dist/components/Message/Message.module.scss.cjs +22 -16
  57. package/dist/components/Message/Message.module.scss.cjs.map +1 -1
  58. package/dist/components/Message/Message.module.scss.js +22 -16
  59. package/dist/components/Message/Message.module.scss.js.map +1 -1
  60. package/dist/components/Message/index.cjs +5 -3
  61. package/dist/components/Message/index.cjs.map +1 -1
  62. package/dist/components/Message/index.d.ts +5 -1
  63. package/dist/components/Message/index.d.ts.map +1 -1
  64. package/dist/components/Message/index.js +5 -3
  65. package/dist/components/Message/index.js.map +1 -1
  66. package/dist/components/Skeleton/Skeleton.module.scss.cjs +14 -0
  67. package/dist/components/Skeleton/Skeleton.module.scss.cjs.map +1 -1
  68. package/dist/components/Skeleton/Skeleton.module.scss.js +14 -0
  69. package/dist/components/Skeleton/Skeleton.module.scss.js.map +1 -1
  70. package/dist/components/Stack/Stack.module.scss.cjs +14 -0
  71. package/dist/components/Stack/Stack.module.scss.cjs.map +1 -1
  72. package/dist/components/Stack/Stack.module.scss.js +14 -0
  73. package/dist/components/Stack/Stack.module.scss.js.map +1 -1
  74. package/dist/components/Table/Table.module.scss.cjs +21 -36
  75. package/dist/components/Table/Table.module.scss.cjs.map +1 -1
  76. package/dist/components/Table/Table.module.scss.js +21 -36
  77. package/dist/components/Table/Table.module.scss.js.map +1 -1
  78. package/dist/components/Table/index.d.ts +35 -55
  79. package/dist/components/Table/index.d.ts.map +1 -1
  80. package/dist/components/Text/Text.module.scss.cjs +14 -0
  81. package/dist/components/Text/Text.module.scss.cjs.map +1 -1
  82. package/dist/components/Text/Text.module.scss.js +14 -0
  83. package/dist/components/Text/Text.module.scss.js.map +1 -1
  84. package/dist/components/Textarea/Textarea.module.scss.cjs +4 -0
  85. package/dist/components/Textarea/Textarea.module.scss.cjs.map +1 -1
  86. package/dist/components/Textarea/Textarea.module.scss.js +4 -0
  87. package/dist/components/Textarea/Textarea.module.scss.js.map +1 -1
  88. package/dist/components/ToggleGroup/ToggleGroup.module.scss.cjs +5 -0
  89. package/dist/components/ToggleGroup/ToggleGroup.module.scss.cjs.map +1 -1
  90. package/dist/components/ToggleGroup/ToggleGroup.module.scss.js +5 -0
  91. package/dist/components/ToggleGroup/ToggleGroup.module.scss.js.map +1 -1
  92. package/dist/index.cjs +119 -117
  93. package/dist/index.cjs.map +1 -1
  94. package/dist/index.d.ts +2 -1
  95. package/dist/index.d.ts.map +1 -1
  96. package/dist/index.js +3 -1
  97. package/dist/index.js.map +1 -1
  98. package/dist/table.cjs +44 -262
  99. package/dist/table.cjs.map +1 -1
  100. package/dist/table.js +47 -248
  101. package/dist/table.js.map +1 -1
  102. package/fragments.json +1 -1
  103. package/package.json +110 -118
  104. package/src/blocks/components/index.ts +0 -3
  105. package/src/components/CodeBlock/CodeBlock.module.scss +16 -34
  106. package/src/components/CodeBlock/index.tsx +351 -345
  107. package/src/components/Combobox/Combobox.module.scss +13 -9
  108. package/src/components/ConversationList/ConversationList.fragment.tsx +96 -129
  109. package/src/components/DataTable/DataTable.fragment.tsx +754 -0
  110. package/src/components/DataTable/DataTable.module.scss +300 -0
  111. package/src/components/DataTable/DataTable.test.tsx +224 -0
  112. package/src/components/DataTable/index.tsx +533 -0
  113. package/src/components/Message/Message.fragment.tsx +34 -0
  114. package/src/components/Message/Message.module.scss +11 -0
  115. package/src/components/Message/index.tsx +12 -3
  116. package/src/components/Table/Table.fragment.tsx +190 -175
  117. package/src/components/Table/Table.module.scss +15 -88
  118. package/src/components/Table/Table.test.tsx +184 -94
  119. package/src/components/Table/index.tsx +105 -374
  120. package/src/index.ts +15 -4
  121. package/src/tokens/_computed.scss +7 -6
  122. package/src/tokens/_density.scss +87 -47
  123. package/src/tokens/_variables.scss +46 -31
  124. package/dist/blocks/components/DataTable.d.ts +0 -19
  125. package/dist/blocks/components/DataTable.d.ts.map +0 -1
  126. package/src/blocks/components/DataTable.tsx +0 -124
@@ -9,8 +9,11 @@ const styles = {
9
9
  "default": "_default_77ogl_27",
10
10
  subtle,
11
11
  muted,
12
+ "underline-always": "_underline-always_77ogl_48",
12
13
  underlineAlways,
14
+ "underline-hover": "_underline-hover_77ogl_53",
13
15
  underlineHover,
16
+ "underline-none": "_underline-none_77ogl_61",
14
17
  underlineNone
15
18
  };
16
19
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"Link.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Link.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;"}
@@ -20,10 +20,15 @@ const styles = {
20
20
  disc,
21
21
  decimal,
22
22
  icon,
23
+ "gap-none": "_gap-none_16fbx_26",
23
24
  gapNone,
25
+ "gap-xs": "_gap-xs_16fbx_30",
24
26
  gapXs,
27
+ "gap-sm": "_gap-sm_16fbx_34",
25
28
  gapSm,
29
+ "gap-md": "_gap-md_16fbx_38",
26
30
  gapMd,
31
+ "gap-lg": "_gap-lg_16fbx_42",
27
32
  gapLg,
28
33
  item,
29
34
  iconItem,
@@ -1 +1 @@
1
- {"version":3,"file":"List.module.scss.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"List.module.scss.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -18,10 +18,15 @@ const styles = {
18
18
  disc,
19
19
  decimal,
20
20
  icon,
21
+ "gap-none": "_gap-none_16fbx_26",
21
22
  gapNone,
23
+ "gap-xs": "_gap-xs_16fbx_30",
22
24
  gapXs,
25
+ "gap-sm": "_gap-sm_16fbx_34",
23
26
  gapSm,
27
+ "gap-md": "_gap-md_16fbx_38",
24
28
  gapMd,
29
+ "gap-lg": "_gap-lg_16fbx_42",
25
30
  gapLg,
26
31
  item,
27
32
  iconItem,
@@ -1 +1 @@
1
- {"version":3,"file":"List.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"List.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -31,8 +31,11 @@ const styles = {
31
31
  md,
32
32
  lg,
33
33
  xl,
34
+ "color-accent": "_color-accent_f3s9k_24",
34
35
  colorAccent,
36
+ "color-current": "_color-current_f3s9k_28",
35
37
  colorCurrent,
38
+ "color-muted": "_color-muted_f3s9k_32",
36
39
  colorMuted,
37
40
  centered,
38
41
  fill,
@@ -46,7 +49,9 @@ const styles = {
46
49
  pulseDot,
47
50
  overlayBackdrop,
48
51
  inline,
52
+ "inline-sm": "_inline-sm_f3s9k_168",
49
53
  inlineSm,
54
+ "inline-md": "_inline-md_f3s9k_172",
50
55
  inlineMd,
51
56
  inlineSpinner,
52
57
  screen,
@@ -1 +1 @@
1
- {"version":3,"file":"Loading.module.scss.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Loading.module.scss.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -29,8 +29,11 @@ const styles = {
29
29
  md,
30
30
  lg,
31
31
  xl,
32
+ "color-accent": "_color-accent_f3s9k_24",
32
33
  colorAccent,
34
+ "color-current": "_color-current_f3s9k_28",
33
35
  colorCurrent,
36
+ "color-muted": "_color-muted_f3s9k_32",
34
37
  colorMuted,
35
38
  centered,
36
39
  fill,
@@ -44,7 +47,9 @@ const styles = {
44
47
  pulseDot,
45
48
  overlayBackdrop,
46
49
  inline,
50
+ "inline-sm": "_inline-sm_f3s9k_168",
47
51
  inlineSm,
52
+ "inline-md": "_inline-md_f3s9k_172",
48
53
  inlineMd,
49
54
  inlineSpinner,
50
55
  screen,
@@ -1 +1 @@
1
- {"version":3,"file":"Loading.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Loading.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
- const markdown = "_markdown_17m4r_1";
3
+ const markdown = "_markdown_u63zl_1";
4
4
  const styles = {
5
5
  markdown
6
6
  };
@@ -1,4 +1,4 @@
1
- const markdown = "_markdown_17m4r_1";
1
+ const markdown = "_markdown_u63zl_1";
2
2
  const styles = {
3
3
  markdown
4
4
  };
@@ -1,21 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
- const message = "_message_hkbox_1";
4
- const actions = "_actions_hkbox_8";
5
- const user = "_user_hkbox_15";
6
- const body = "_body_hkbox_19";
7
- const content = "_content_hkbox_22";
8
- const assistant = "_assistant_hkbox_27";
9
- const system = "_system_hkbox_32";
10
- const avatar = "_avatar_hkbox_42";
11
- const error = "_error_hkbox_46";
12
- const sending = "_sending_hkbox_52";
13
- const avatarUser = "_avatarUser_hkbox_72";
14
- const avatarAssistant = "_avatarAssistant_hkbox_77";
15
- const avatarSystem = "_avatarSystem_hkbox_82";
16
- const streaming = "_streaming_hkbox_137";
17
- const blink = "_blink_hkbox_1";
18
- const timestamp = "_timestamp_hkbox_163";
3
+ const message = "_message_1052q_1";
4
+ const actions = "_actions_1052q_8";
5
+ const user = "_user_1052q_15";
6
+ const body = "_body_1052q_19";
7
+ const content = "_content_1052q_22";
8
+ const assistant = "_assistant_1052q_27";
9
+ const system = "_system_1052q_32";
10
+ const avatar = "_avatar_1052q_42";
11
+ const error = "_error_1052q_46";
12
+ const sending = "_sending_1052q_52";
13
+ const avatarUser = "_avatarUser_1052q_72";
14
+ const avatarAssistant = "_avatarAssistant_1052q_77";
15
+ const avatarSystem = "_avatarSystem_1052q_82";
16
+ const avatarImage = "_avatarImage_1052q_87";
17
+ const avatarImg = "_avatarImg_1052q_92";
18
+ const streaming = "_streaming_1052q_148";
19
+ const blink = "_blink_1052q_1";
20
+ const timestamp = "_timestamp_1052q_174";
19
21
  const styles = {
20
22
  message,
21
23
  actions,
@@ -30,6 +32,8 @@ const styles = {
30
32
  avatarUser,
31
33
  avatarAssistant,
32
34
  avatarSystem,
35
+ avatarImage,
36
+ avatarImg,
33
37
  streaming,
34
38
  blink,
35
39
  timestamp
@@ -38,6 +42,8 @@ exports.actions = actions;
38
42
  exports.assistant = assistant;
39
43
  exports.avatar = avatar;
40
44
  exports.avatarAssistant = avatarAssistant;
45
+ exports.avatarImage = avatarImage;
46
+ exports.avatarImg = avatarImg;
41
47
  exports.avatarSystem = avatarSystem;
42
48
  exports.avatarUser = avatarUser;
43
49
  exports.blink = blink;
@@ -1 +1 @@
1
- {"version":3,"file":"Message.module.scss.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Message.module.scss.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,19 +1,21 @@
1
- const message = "_message_hkbox_1";
2
- const actions = "_actions_hkbox_8";
3
- const user = "_user_hkbox_15";
4
- const body = "_body_hkbox_19";
5
- const content = "_content_hkbox_22";
6
- const assistant = "_assistant_hkbox_27";
7
- const system = "_system_hkbox_32";
8
- const avatar = "_avatar_hkbox_42";
9
- const error = "_error_hkbox_46";
10
- const sending = "_sending_hkbox_52";
11
- const avatarUser = "_avatarUser_hkbox_72";
12
- const avatarAssistant = "_avatarAssistant_hkbox_77";
13
- const avatarSystem = "_avatarSystem_hkbox_82";
14
- const streaming = "_streaming_hkbox_137";
15
- const blink = "_blink_hkbox_1";
16
- const timestamp = "_timestamp_hkbox_163";
1
+ const message = "_message_1052q_1";
2
+ const actions = "_actions_1052q_8";
3
+ const user = "_user_1052q_15";
4
+ const body = "_body_1052q_19";
5
+ const content = "_content_1052q_22";
6
+ const assistant = "_assistant_1052q_27";
7
+ const system = "_system_1052q_32";
8
+ const avatar = "_avatar_1052q_42";
9
+ const error = "_error_1052q_46";
10
+ const sending = "_sending_1052q_52";
11
+ const avatarUser = "_avatarUser_1052q_72";
12
+ const avatarAssistant = "_avatarAssistant_1052q_77";
13
+ const avatarSystem = "_avatarSystem_1052q_82";
14
+ const avatarImage = "_avatarImage_1052q_87";
15
+ const avatarImg = "_avatarImg_1052q_92";
16
+ const streaming = "_streaming_1052q_148";
17
+ const blink = "_blink_1052q_1";
18
+ const timestamp = "_timestamp_1052q_174";
17
19
  const styles = {
18
20
  message,
19
21
  actions,
@@ -28,6 +30,8 @@ const styles = {
28
30
  avatarUser,
29
31
  avatarAssistant,
30
32
  avatarSystem,
33
+ avatarImage,
34
+ avatarImg,
31
35
  streaming,
32
36
  blink,
33
37
  timestamp
@@ -37,6 +41,8 @@ export {
37
41
  assistant,
38
42
  avatar,
39
43
  avatarAssistant,
44
+ avatarImage,
45
+ avatarImg,
40
46
  avatarSystem,
41
47
  avatarUser,
42
48
  blink,
@@ -1 +1 @@
1
- {"version":3,"file":"Message.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Message.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -68,7 +68,7 @@ function AssistantIcon() {
68
68
  viewBox: "0 0 24 24",
69
69
  fill: "currentColor",
70
70
  "aria-hidden": "true",
71
- children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z" })
71
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M19 9l1.25-2.75L23 5l-2.75-1.25L19 1l-1.25 2.75L15 5l2.75 1.25L19 9zm-7.5.5L9 4 6.5 9.5 1 12l5.5 2.5L9 20l2.5-5.5L17 12l-5.5-2.5zM19 15l-1.25 2.75L15 19l2.75 1.25L19 23l1.25-2.75L23 19l-2.75-1.25L19 15z" })
72
72
  }
73
73
  );
74
74
  }
@@ -113,15 +113,17 @@ function MessageTimestamp({
113
113
  const classes = [Message_module.default.timestamp, className].filter(Boolean).join(" ");
114
114
  return /* @__PURE__ */ jsxRuntime.jsx("span", { ...htmlProps, className: classes, children: formatted });
115
115
  }
116
- function MessageAvatar({ children, className, ...htmlProps }) {
116
+ function MessageAvatar({ children, src, alt, className, ...htmlProps }) {
117
117
  const { role } = useMessageContext();
118
118
  const classes = [
119
119
  Message_module.default.avatar,
120
120
  Message_module.default[`avatar${role.charAt(0).toUpperCase() + role.slice(1)}`],
121
+ src && Message_module.default.avatarImage,
121
122
  className
122
123
  ].filter(Boolean).join(" ");
123
124
  const defaultIcon = role === "user" ? /* @__PURE__ */ jsxRuntime.jsx(UserIcon, {}) : role === "assistant" ? /* @__PURE__ */ jsxRuntime.jsx(AssistantIcon, {}) : /* @__PURE__ */ jsxRuntime.jsx(SystemIcon, {});
124
- return /* @__PURE__ */ jsxRuntime.jsx("div", { ...htmlProps, className: classes, children: children ?? defaultIcon });
125
+ const content = children ?? (src ? /* @__PURE__ */ jsxRuntime.jsx("img", { src, alt: alt ?? role, className: Message_module.default.avatarImg }) : defaultIcon);
126
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ...htmlProps, className: classes, children: content });
125
127
  }
126
128
  function MessageRoot({
127
129
  role,
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../src/components/Message/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport styles from './Message.module.scss';\nimport { Markdown } from '../Markdown';\n\n// ============================================\n// Types\n// ============================================\n\nexport type MessageRole = 'user' | 'assistant' | 'system';\nexport type MessageStatus = 'sending' | 'streaming' | 'complete' | 'error';\n\nexport interface MessageProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Message role determines styling and alignment */\n role: MessageRole;\n /** Message content */\n children: React.ReactNode;\n /** Message status */\n status?: MessageStatus;\n /** When the message was sent */\n timestamp?: Date;\n /** Custom avatar override */\n avatar?: React.ReactNode;\n /** Hover actions (copy, regenerate) */\n actions?: React.ReactNode;\n}\n\nexport interface MessageContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n /** When true, renders string children as markdown */\n markdown?: boolean;\n}\n\nexport interface MessageActionsProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n}\n\nexport interface MessageTimestampProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Date to format */\n date?: Date;\n /** Custom format function */\n format?: (date: Date) => string;\n}\n\nexport interface MessageAvatarProps extends React.HTMLAttributes<HTMLDivElement> {\n children?: React.ReactNode;\n}\n\n// ============================================\n// Context\n// ============================================\n\ninterface MessageContextValue {\n role: MessageRole;\n status: MessageStatus;\n timestamp?: Date;\n}\n\nconst MessageContext = React.createContext<MessageContextValue | null>(null);\n\nfunction useMessageContext() {\n const context = React.useContext(MessageContext);\n if (!context) {\n throw new Error('Message compound components must be used within a Message');\n }\n return context;\n}\n\n// ============================================\n// Helper Functions\n// ============================================\n\nfunction formatTimestamp(date: Date): string {\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n const minutes = Math.floor(diff / 60000);\n const hours = Math.floor(diff / 3600000);\n\n if (minutes < 1) return 'Just now';\n if (minutes < 60) return `${minutes}m ago`;\n if (hours < 24) return `${hours}h ago`;\n\n return date.toLocaleDateString(undefined, {\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n });\n}\n\n// ============================================\n// Icons\n// ============================================\n\nfunction UserIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\" />\n </svg>\n );\n}\n\nfunction AssistantIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\" />\n </svg>\n );\n}\n\nfunction SystemIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z\" />\n </svg>\n );\n}\n\n// ============================================\n// Sub-components\n// ============================================\n\nfunction MessageContent({ children, markdown, className, ...htmlProps }: MessageContentProps) {\n const { status } = useMessageContext();\n\n const classes = [\n styles.content,\n status === 'streaming' && styles.streaming,\n className,\n ].filter(Boolean).join(' ');\n\n const content = markdown && typeof children === 'string'\n ? <Markdown content={children} />\n : children;\n\n return (\n <div {...htmlProps} className={classes}>\n {content}\n </div>\n );\n}\n\nfunction MessageActions({ children, className, ...htmlProps }: MessageActionsProps) {\n const classes = [styles.actions, className].filter(Boolean).join(' ');\n\n return (\n <div {...htmlProps} className={classes}>\n {children}\n </div>\n );\n}\n\nfunction MessageTimestamp({\n date,\n format: customFormat,\n className,\n ...htmlProps\n}: MessageTimestampProps) {\n const { timestamp } = useMessageContext();\n const dateToFormat = date ?? timestamp;\n\n if (!dateToFormat) return null;\n\n const formatted = customFormat ? customFormat(dateToFormat) : formatTimestamp(dateToFormat);\n\n const classes = [styles.timestamp, className].filter(Boolean).join(' ');\n\n return (\n <span {...htmlProps} className={classes}>\n {formatted}\n </span>\n );\n}\n\nfunction MessageAvatar({ children, className, ...htmlProps }: MessageAvatarProps) {\n const { role } = useMessageContext();\n\n const classes = [\n styles.avatar,\n styles[`avatar${role.charAt(0).toUpperCase() + role.slice(1)}`],\n className,\n ].filter(Boolean).join(' ');\n\n const defaultIcon = role === 'user'\n ? <UserIcon />\n : role === 'assistant'\n ? <AssistantIcon />\n : <SystemIcon />;\n\n return (\n <div {...htmlProps} className={classes}>\n {children ?? defaultIcon}\n </div>\n );\n}\n\n// ============================================\n// Main Component\n// ============================================\n\nfunction MessageRoot({\n role,\n children,\n status = 'complete',\n timestamp,\n avatar,\n actions,\n className,\n ...htmlProps\n}: MessageProps) {\n const contextValue: MessageContextValue = {\n role,\n status,\n timestamp,\n };\n\n const classes = [\n styles.message,\n styles[role],\n status === 'error' && styles.error,\n status === 'sending' && styles.sending,\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <MessageContext.Provider value={contextValue}>\n <div\n {...htmlProps}\n className={classes}\n data-role={role}\n data-status={status}\n >\n {avatar !== undefined ? avatar : <MessageAvatar />}\n <div className={styles.body}>\n {children}\n {actions && <MessageActions>{actions}</MessageActions>}\n </div>\n </div>\n </MessageContext.Provider>\n );\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const Message = Object.assign(MessageRoot, {\n Content: MessageContent,\n Actions: MessageActions,\n Timestamp: MessageTimestamp,\n Avatar: MessageAvatar,\n});\n\nexport {\n MessageRoot,\n MessageContent,\n MessageActions,\n MessageTimestamp,\n MessageAvatar,\n};\n\nexport { useMessageContext };\n"],"names":["React","jsx","markdown","styles","Markdown","jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/components/Message/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport styles from './Message.module.scss';\nimport { Markdown } from '../Markdown';\n\n// ============================================\n// Types\n// ============================================\n\nexport type MessageRole = 'user' | 'assistant' | 'system';\nexport type MessageStatus = 'sending' | 'streaming' | 'complete' | 'error';\n\nexport interface MessageProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Message role determines styling and alignment */\n role: MessageRole;\n /** Message content */\n children: React.ReactNode;\n /** Message status */\n status?: MessageStatus;\n /** When the message was sent */\n timestamp?: Date;\n /** Custom avatar override */\n avatar?: React.ReactNode;\n /** Hover actions (copy, regenerate) */\n actions?: React.ReactNode;\n}\n\nexport interface MessageContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n /** When true, renders string children as markdown */\n markdown?: boolean;\n}\n\nexport interface MessageActionsProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n}\n\nexport interface MessageTimestampProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Date to format */\n date?: Date;\n /** Custom format function */\n format?: (date: Date) => string;\n}\n\nexport interface MessageAvatarProps extends React.HTMLAttributes<HTMLDivElement> {\n children?: React.ReactNode;\n /** Image URL for the avatar */\n src?: string;\n /** Alt text for image avatars */\n alt?: string;\n}\n\n// ============================================\n// Context\n// ============================================\n\ninterface MessageContextValue {\n role: MessageRole;\n status: MessageStatus;\n timestamp?: Date;\n}\n\nconst MessageContext = React.createContext<MessageContextValue | null>(null);\n\nfunction useMessageContext() {\n const context = React.useContext(MessageContext);\n if (!context) {\n throw new Error('Message compound components must be used within a Message');\n }\n return context;\n}\n\n// ============================================\n// Helper Functions\n// ============================================\n\nfunction formatTimestamp(date: Date): string {\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n const minutes = Math.floor(diff / 60000);\n const hours = Math.floor(diff / 3600000);\n\n if (minutes < 1) return 'Just now';\n if (minutes < 60) return `${minutes}m ago`;\n if (hours < 24) return `${hours}h ago`;\n\n return date.toLocaleDateString(undefined, {\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n });\n}\n\n// ============================================\n// Icons\n// ============================================\n\nfunction UserIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\" />\n </svg>\n );\n}\n\nfunction AssistantIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M19 9l1.25-2.75L23 5l-2.75-1.25L19 1l-1.25 2.75L15 5l2.75 1.25L19 9zm-7.5.5L9 4 6.5 9.5 1 12l5.5 2.5L9 20l2.5-5.5L17 12l-5.5-2.5zM19 15l-1.25 2.75L15 19l2.75 1.25L19 23l1.25-2.75L23 19l-2.75-1.25L19 15z\" />\n </svg>\n );\n}\n\nfunction SystemIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z\" />\n </svg>\n );\n}\n\n// ============================================\n// Sub-components\n// ============================================\n\nfunction MessageContent({ children, markdown, className, ...htmlProps }: MessageContentProps) {\n const { status } = useMessageContext();\n\n const classes = [\n styles.content,\n status === 'streaming' && styles.streaming,\n className,\n ].filter(Boolean).join(' ');\n\n const content = markdown && typeof children === 'string'\n ? <Markdown content={children} />\n : children;\n\n return (\n <div {...htmlProps} className={classes}>\n {content}\n </div>\n );\n}\n\nfunction MessageActions({ children, className, ...htmlProps }: MessageActionsProps) {\n const classes = [styles.actions, className].filter(Boolean).join(' ');\n\n return (\n <div {...htmlProps} className={classes}>\n {children}\n </div>\n );\n}\n\nfunction MessageTimestamp({\n date,\n format: customFormat,\n className,\n ...htmlProps\n}: MessageTimestampProps) {\n const { timestamp } = useMessageContext();\n const dateToFormat = date ?? timestamp;\n\n if (!dateToFormat) return null;\n\n const formatted = customFormat ? customFormat(dateToFormat) : formatTimestamp(dateToFormat);\n\n const classes = [styles.timestamp, className].filter(Boolean).join(' ');\n\n return (\n <span {...htmlProps} className={classes}>\n {formatted}\n </span>\n );\n}\n\nfunction MessageAvatar({ children, src, alt, className, ...htmlProps }: MessageAvatarProps) {\n const { role } = useMessageContext();\n\n const classes = [\n styles.avatar,\n styles[`avatar${role.charAt(0).toUpperCase() + role.slice(1)}`],\n src && styles.avatarImage,\n className,\n ].filter(Boolean).join(' ');\n\n const defaultIcon = role === 'user'\n ? <UserIcon />\n : role === 'assistant'\n ? <AssistantIcon />\n : <SystemIcon />;\n\n const content = children ?? (src\n ? <img src={src} alt={alt ?? role} className={styles.avatarImg} />\n : defaultIcon);\n\n return (\n <div {...htmlProps} className={classes}>\n {content}\n </div>\n );\n}\n\n// ============================================\n// Main Component\n// ============================================\n\nfunction MessageRoot({\n role,\n children,\n status = 'complete',\n timestamp,\n avatar,\n actions,\n className,\n ...htmlProps\n}: MessageProps) {\n const contextValue: MessageContextValue = {\n role,\n status,\n timestamp,\n };\n\n const classes = [\n styles.message,\n styles[role],\n status === 'error' && styles.error,\n status === 'sending' && styles.sending,\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <MessageContext.Provider value={contextValue}>\n <div\n {...htmlProps}\n className={classes}\n data-role={role}\n data-status={status}\n >\n {avatar !== undefined ? avatar : <MessageAvatar />}\n <div className={styles.body}>\n {children}\n {actions && <MessageActions>{actions}</MessageActions>}\n </div>\n </div>\n </MessageContext.Provider>\n );\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const Message = Object.assign(MessageRoot, {\n Content: MessageContent,\n Actions: MessageActions,\n Timestamp: MessageTimestamp,\n Avatar: MessageAvatar,\n});\n\nexport {\n MessageRoot,\n MessageContent,\n MessageActions,\n MessageTimestamp,\n MessageAvatar,\n};\n\nexport { useMessageContext };\n"],"names":["React","jsx","markdown","styles","Markdown","jsxs"],"mappings":"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"}
@@ -31,6 +31,10 @@ export interface MessageTimestampProps extends React.HTMLAttributes<HTMLSpanElem
31
31
  }
32
32
  export interface MessageAvatarProps extends React.HTMLAttributes<HTMLDivElement> {
33
33
  children?: React.ReactNode;
34
+ /** Image URL for the avatar */
35
+ src?: string;
36
+ /** Alt text for image avatars */
37
+ alt?: string;
34
38
  }
35
39
  interface MessageContextValue {
36
40
  role: MessageRole;
@@ -41,7 +45,7 @@ declare function useMessageContext(): MessageContextValue;
41
45
  declare function MessageContent({ children, markdown, className, ...htmlProps }: MessageContentProps): import("react/jsx-runtime").JSX.Element;
42
46
  declare function MessageActions({ children, className, ...htmlProps }: MessageActionsProps): import("react/jsx-runtime").JSX.Element;
43
47
  declare function MessageTimestamp({ date, format: customFormat, className, ...htmlProps }: MessageTimestampProps): import("react/jsx-runtime").JSX.Element | null;
44
- declare function MessageAvatar({ children, className, ...htmlProps }: MessageAvatarProps): import("react/jsx-runtime").JSX.Element;
48
+ declare function MessageAvatar({ children, src, alt, className, ...htmlProps }: MessageAvatarProps): import("react/jsx-runtime").JSX.Element;
45
49
  declare function MessageRoot({ role, children, status, timestamp, avatar, actions, className, ...htmlProps }: MessageProps): import("react/jsx-runtime").JSX.Element;
46
50
  export declare const Message: typeof MessageRoot & {
47
51
  Content: typeof MessageContent;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Message/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;AAC1D,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC;AAE3E,MAAM,WAAW,YAAa,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACxE,oDAAoD;IACpD,IAAI,EAAE,WAAW,CAAC;IAClB,sBAAsB;IACtB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,qBAAqB;IACrB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,gCAAgC;IAChC,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,uCAAuC;IACvC,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAoB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC/E,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,qDAAqD;IACrD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,mBAAoB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC/E,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAsB,SAAQ,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC;IAClF,qBAAqB;IACrB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,6BAA6B;IAC7B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,kBAAmB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC9E,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAMD,UAAU,mBAAmB;IAC3B,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAID,iBAAS,iBAAiB,wBAMzB;AA6ED,iBAAS,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,EAAE,mBAAmB,2CAkB3F;AAED,iBAAS,cAAc,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,EAAE,mBAAmB,2CAQjF;AAED,iBAAS,gBAAgB,CAAC,EACxB,IAAI,EACJ,MAAM,EAAE,YAAY,EACpB,SAAS,EACT,GAAG,SAAS,EACb,EAAE,qBAAqB,kDAevB;AAED,iBAAS,aAAa,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,EAAE,kBAAkB,2CAoB/E;AAMD,iBAAS,WAAW,CAAC,EACnB,IAAI,EACJ,QAAQ,EACR,MAAmB,EACnB,SAAS,EACT,MAAM,EACN,OAAO,EACP,SAAS,EACT,GAAG,SAAS,EACb,EAAE,YAAY,2CA+Bd;AAMD,eAAO,MAAM,OAAO;;;;;CAKlB,CAAC;AAEH,OAAO,EACL,WAAW,EACX,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,aAAa,GACd,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Message/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;AAC1D,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC;AAE3E,MAAM,WAAW,YAAa,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACxE,oDAAoD;IACpD,IAAI,EAAE,WAAW,CAAC;IAClB,sBAAsB;IACtB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,qBAAqB;IACrB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,gCAAgC;IAChC,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,uCAAuC;IACvC,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAoB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC/E,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,qDAAqD;IACrD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,mBAAoB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC/E,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAsB,SAAQ,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC;IAClF,qBAAqB;IACrB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,6BAA6B;IAC7B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,kBAAmB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC9E,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,+BAA+B;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAMD,UAAU,mBAAmB;IAC3B,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAID,iBAAS,iBAAiB,wBAMzB;AA6ED,iBAAS,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,EAAE,mBAAmB,2CAkB3F;AAED,iBAAS,cAAc,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,EAAE,mBAAmB,2CAQjF;AAED,iBAAS,gBAAgB,CAAC,EACxB,IAAI,EACJ,MAAM,EAAE,YAAY,EACpB,SAAS,EACT,GAAG,SAAS,EACb,EAAE,qBAAqB,kDAevB;AAED,iBAAS,aAAa,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,EAAE,kBAAkB,2CAyBzF;AAMD,iBAAS,WAAW,CAAC,EACnB,IAAI,EACJ,QAAQ,EACR,MAAmB,EACnB,SAAS,EACT,MAAM,EACN,OAAO,EACP,SAAS,EACT,GAAG,SAAS,EACb,EAAE,YAAY,2CA+Bd;AAMD,eAAO,MAAM,OAAO;;;;;CAKlB,CAAC;AAEH,OAAO,EACL,WAAW,EACX,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,aAAa,GACd,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -49,7 +49,7 @@ function AssistantIcon() {
49
49
  viewBox: "0 0 24 24",
50
50
  fill: "currentColor",
51
51
  "aria-hidden": "true",
52
- children: /* @__PURE__ */ jsx("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z" })
52
+ children: /* @__PURE__ */ jsx("path", { d: "M19 9l1.25-2.75L23 5l-2.75-1.25L19 1l-1.25 2.75L15 5l2.75 1.25L19 9zm-7.5.5L9 4 6.5 9.5 1 12l5.5 2.5L9 20l2.5-5.5L17 12l-5.5-2.5zM19 15l-1.25 2.75L15 19l2.75 1.25L19 23l1.25-2.75L23 19l-2.75-1.25L19 15z" })
53
53
  }
54
54
  );
55
55
  }
@@ -94,15 +94,17 @@ function MessageTimestamp({
94
94
  const classes = [styles.timestamp, className].filter(Boolean).join(" ");
95
95
  return /* @__PURE__ */ jsx("span", { ...htmlProps, className: classes, children: formatted });
96
96
  }
97
- function MessageAvatar({ children, className, ...htmlProps }) {
97
+ function MessageAvatar({ children, src, alt, className, ...htmlProps }) {
98
98
  const { role } = useMessageContext();
99
99
  const classes = [
100
100
  styles.avatar,
101
101
  styles[`avatar${role.charAt(0).toUpperCase() + role.slice(1)}`],
102
+ src && styles.avatarImage,
102
103
  className
103
104
  ].filter(Boolean).join(" ");
104
105
  const defaultIcon = role === "user" ? /* @__PURE__ */ jsx(UserIcon, {}) : role === "assistant" ? /* @__PURE__ */ jsx(AssistantIcon, {}) : /* @__PURE__ */ jsx(SystemIcon, {});
105
- return /* @__PURE__ */ jsx("div", { ...htmlProps, className: classes, children: children ?? defaultIcon });
106
+ const content = children ?? (src ? /* @__PURE__ */ jsx("img", { src, alt: alt ?? role, className: styles.avatarImg }) : defaultIcon);
107
+ return /* @__PURE__ */ jsx("div", { ...htmlProps, className: classes, children: content });
106
108
  }
107
109
  function MessageRoot({
108
110
  role,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/Message/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport styles from './Message.module.scss';\nimport { Markdown } from '../Markdown';\n\n// ============================================\n// Types\n// ============================================\n\nexport type MessageRole = 'user' | 'assistant' | 'system';\nexport type MessageStatus = 'sending' | 'streaming' | 'complete' | 'error';\n\nexport interface MessageProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Message role determines styling and alignment */\n role: MessageRole;\n /** Message content */\n children: React.ReactNode;\n /** Message status */\n status?: MessageStatus;\n /** When the message was sent */\n timestamp?: Date;\n /** Custom avatar override */\n avatar?: React.ReactNode;\n /** Hover actions (copy, regenerate) */\n actions?: React.ReactNode;\n}\n\nexport interface MessageContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n /** When true, renders string children as markdown */\n markdown?: boolean;\n}\n\nexport interface MessageActionsProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n}\n\nexport interface MessageTimestampProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Date to format */\n date?: Date;\n /** Custom format function */\n format?: (date: Date) => string;\n}\n\nexport interface MessageAvatarProps extends React.HTMLAttributes<HTMLDivElement> {\n children?: React.ReactNode;\n}\n\n// ============================================\n// Context\n// ============================================\n\ninterface MessageContextValue {\n role: MessageRole;\n status: MessageStatus;\n timestamp?: Date;\n}\n\nconst MessageContext = React.createContext<MessageContextValue | null>(null);\n\nfunction useMessageContext() {\n const context = React.useContext(MessageContext);\n if (!context) {\n throw new Error('Message compound components must be used within a Message');\n }\n return context;\n}\n\n// ============================================\n// Helper Functions\n// ============================================\n\nfunction formatTimestamp(date: Date): string {\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n const minutes = Math.floor(diff / 60000);\n const hours = Math.floor(diff / 3600000);\n\n if (minutes < 1) return 'Just now';\n if (minutes < 60) return `${minutes}m ago`;\n if (hours < 24) return `${hours}h ago`;\n\n return date.toLocaleDateString(undefined, {\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n });\n}\n\n// ============================================\n// Icons\n// ============================================\n\nfunction UserIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\" />\n </svg>\n );\n}\n\nfunction AssistantIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\" />\n </svg>\n );\n}\n\nfunction SystemIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z\" />\n </svg>\n );\n}\n\n// ============================================\n// Sub-components\n// ============================================\n\nfunction MessageContent({ children, markdown, className, ...htmlProps }: MessageContentProps) {\n const { status } = useMessageContext();\n\n const classes = [\n styles.content,\n status === 'streaming' && styles.streaming,\n className,\n ].filter(Boolean).join(' ');\n\n const content = markdown && typeof children === 'string'\n ? <Markdown content={children} />\n : children;\n\n return (\n <div {...htmlProps} className={classes}>\n {content}\n </div>\n );\n}\n\nfunction MessageActions({ children, className, ...htmlProps }: MessageActionsProps) {\n const classes = [styles.actions, className].filter(Boolean).join(' ');\n\n return (\n <div {...htmlProps} className={classes}>\n {children}\n </div>\n );\n}\n\nfunction MessageTimestamp({\n date,\n format: customFormat,\n className,\n ...htmlProps\n}: MessageTimestampProps) {\n const { timestamp } = useMessageContext();\n const dateToFormat = date ?? timestamp;\n\n if (!dateToFormat) return null;\n\n const formatted = customFormat ? customFormat(dateToFormat) : formatTimestamp(dateToFormat);\n\n const classes = [styles.timestamp, className].filter(Boolean).join(' ');\n\n return (\n <span {...htmlProps} className={classes}>\n {formatted}\n </span>\n );\n}\n\nfunction MessageAvatar({ children, className, ...htmlProps }: MessageAvatarProps) {\n const { role } = useMessageContext();\n\n const classes = [\n styles.avatar,\n styles[`avatar${role.charAt(0).toUpperCase() + role.slice(1)}`],\n className,\n ].filter(Boolean).join(' ');\n\n const defaultIcon = role === 'user'\n ? <UserIcon />\n : role === 'assistant'\n ? <AssistantIcon />\n : <SystemIcon />;\n\n return (\n <div {...htmlProps} className={classes}>\n {children ?? defaultIcon}\n </div>\n );\n}\n\n// ============================================\n// Main Component\n// ============================================\n\nfunction MessageRoot({\n role,\n children,\n status = 'complete',\n timestamp,\n avatar,\n actions,\n className,\n ...htmlProps\n}: MessageProps) {\n const contextValue: MessageContextValue = {\n role,\n status,\n timestamp,\n };\n\n const classes = [\n styles.message,\n styles[role],\n status === 'error' && styles.error,\n status === 'sending' && styles.sending,\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <MessageContext.Provider value={contextValue}>\n <div\n {...htmlProps}\n className={classes}\n data-role={role}\n data-status={status}\n >\n {avatar !== undefined ? avatar : <MessageAvatar />}\n <div className={styles.body}>\n {children}\n {actions && <MessageActions>{actions}</MessageActions>}\n </div>\n </div>\n </MessageContext.Provider>\n );\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const Message = Object.assign(MessageRoot, {\n Content: MessageContent,\n Actions: MessageActions,\n Timestamp: MessageTimestamp,\n Avatar: MessageAvatar,\n});\n\nexport {\n MessageRoot,\n MessageContent,\n MessageActions,\n MessageTimestamp,\n MessageAvatar,\n};\n\nexport { useMessageContext };\n"],"names":[],"mappings":";;;;AA2DA,MAAM,iBAAiB,MAAM,cAA0C,IAAI;AAE3E,SAAS,oBAAoB;AAC3B,QAAM,UAAU,MAAM,WAAW,cAAc;AAC/C,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,2DAA2D;AAAA,EAC7E;AACA,SAAO;AACT;AAMA,SAAS,gBAAgB,MAAoB;AAC3C,QAAM,0BAAU,KAAA;AAChB,QAAM,OAAO,IAAI,QAAA,IAAY,KAAK,QAAA;AAClC,QAAM,UAAU,KAAK,MAAM,OAAO,GAAK;AACvC,QAAM,QAAQ,KAAK,MAAM,OAAO,IAAO;AAEvC,MAAI,UAAU,EAAG,QAAO;AACxB,MAAI,UAAU,GAAI,QAAO,GAAG,OAAO;AACnC,MAAI,QAAQ,GAAI,QAAO,GAAG,KAAK;AAE/B,SAAO,KAAK,mBAAmB,QAAW;AAAA,IACxC,OAAO;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA,CACT;AACH;AAMA,SAAS,WAAW;AAClB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,eAAY;AAAA,MAEZ,UAAA,oBAAC,QAAA,EAAK,GAAE,gHAAA,CAAgH;AAAA,IAAA;AAAA,EAAA;AAG9H;AAEA,SAAS,gBAAgB;AACvB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,eAAY;AAAA,MAEZ,UAAA,oBAAC,QAAA,EAAK,GAAE,wHAAA,CAAwH;AAAA,IAAA;AAAA,EAAA;AAGtI;AAEA,SAAS,aAAa;AACpB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,eAAY;AAAA,MAEZ,UAAA,oBAAC,QAAA,EAAK,GAAE,mGAAA,CAAmG;AAAA,IAAA;AAAA,EAAA;AAGjH;AAMA,SAAS,eAAe,EAAE,UAAU,UAAU,WAAW,GAAG,aAAkC;AAC5F,QAAM,EAAE,OAAA,IAAW,kBAAA;AAEnB,QAAM,UAAU;AAAA,IACd,OAAO;AAAA,IACP,WAAW,eAAe,OAAO;AAAA,IACjC;AAAA,EAAA,EACA,OAAO,OAAO,EAAE,KAAK,GAAG;AAE1B,QAAM,UAAU,YAAY,OAAO,aAAa,WAC5C,oBAAC,UAAA,EAAS,SAAS,SAAA,CAAU,IAC7B;AAEJ,6BACG,OAAA,EAAK,GAAG,WAAW,WAAW,SAC5B,UAAA,SACH;AAEJ;AAEA,SAAS,eAAe,EAAE,UAAU,WAAW,GAAG,aAAkC;AAClF,QAAM,UAAU,CAAC,OAAO,SAAS,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAEpE,6BACG,OAAA,EAAK,GAAG,WAAW,WAAW,SAC5B,UACH;AAEJ;AAEA,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,GAAG;AACL,GAA0B;AACxB,QAAM,EAAE,UAAA,IAAc,kBAAA;AACtB,QAAM,eAAe,QAAQ;AAE7B,MAAI,CAAC,aAAc,QAAO;AAE1B,QAAM,YAAY,eAAe,aAAa,YAAY,IAAI,gBAAgB,YAAY;AAE1F,QAAM,UAAU,CAAC,OAAO,WAAW,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAEtE,6BACG,QAAA,EAAM,GAAG,WAAW,WAAW,SAC7B,UAAA,WACH;AAEJ;AAEA,SAAS,cAAc,EAAE,UAAU,WAAW,GAAG,aAAiC;AAChF,QAAM,EAAE,KAAA,IAAS,kBAAA;AAEjB,QAAM,UAAU;AAAA,IACd,OAAO;AAAA,IACP,OAAO,SAAS,KAAK,OAAO,CAAC,EAAE,YAAA,IAAgB,KAAK,MAAM,CAAC,CAAC,EAAE;AAAA,IAC9D;AAAA,EAAA,EACA,OAAO,OAAO,EAAE,KAAK,GAAG;AAE1B,QAAM,cAAc,SAAS,SACzB,oBAAC,UAAA,CAAA,CAAS,IACV,SAAS,cACP,oBAAC,eAAA,CAAA,CAAc,IACf,oBAAC,YAAA,EAAW;AAElB,6BACG,OAAA,EAAK,GAAG,WAAW,WAAW,SAC5B,sBAAY,aACf;AAEJ;AAMA,SAAS,YAAY;AAAA,EACnB;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAiB;AACf,QAAM,eAAoC;AAAA,IACxC;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAGF,QAAM,UAAU;AAAA,IACd,OAAO;AAAA,IACP,OAAO,IAAI;AAAA,IACX,WAAW,WAAW,OAAO;AAAA,IAC7B,WAAW,aAAa,OAAO;AAAA,IAC/B;AAAA,EAAA,EACA,OAAO,OAAO,EAAE,KAAK,GAAG;AAE1B,SACE,oBAAC,eAAe,UAAf,EAAwB,OAAO,cAC9B,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAW;AAAA,MACX,aAAW;AAAA,MACX,eAAa;AAAA,MAEZ,UAAA;AAAA,QAAA,WAAW,SAAY,SAAS,oBAAC,eAAA,CAAA,CAAc;AAAA,QAChD,qBAAC,OAAA,EAAI,WAAW,OAAO,MACpB,UAAA;AAAA,UAAA;AAAA,UACA,WAAW,oBAAC,gBAAA,EAAgB,UAAA,QAAA,CAAQ;AAAA,QAAA,EAAA,CACvC;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ;AAMO,MAAM,UAAU,OAAO,OAAO,aAAa;AAAA,EAChD,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW;AAAA,EACX,QAAQ;AACV,CAAC;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/Message/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport styles from './Message.module.scss';\nimport { Markdown } from '../Markdown';\n\n// ============================================\n// Types\n// ============================================\n\nexport type MessageRole = 'user' | 'assistant' | 'system';\nexport type MessageStatus = 'sending' | 'streaming' | 'complete' | 'error';\n\nexport interface MessageProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Message role determines styling and alignment */\n role: MessageRole;\n /** Message content */\n children: React.ReactNode;\n /** Message status */\n status?: MessageStatus;\n /** When the message was sent */\n timestamp?: Date;\n /** Custom avatar override */\n avatar?: React.ReactNode;\n /** Hover actions (copy, regenerate) */\n actions?: React.ReactNode;\n}\n\nexport interface MessageContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n /** When true, renders string children as markdown */\n markdown?: boolean;\n}\n\nexport interface MessageActionsProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n}\n\nexport interface MessageTimestampProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Date to format */\n date?: Date;\n /** Custom format function */\n format?: (date: Date) => string;\n}\n\nexport interface MessageAvatarProps extends React.HTMLAttributes<HTMLDivElement> {\n children?: React.ReactNode;\n /** Image URL for the avatar */\n src?: string;\n /** Alt text for image avatars */\n alt?: string;\n}\n\n// ============================================\n// Context\n// ============================================\n\ninterface MessageContextValue {\n role: MessageRole;\n status: MessageStatus;\n timestamp?: Date;\n}\n\nconst MessageContext = React.createContext<MessageContextValue | null>(null);\n\nfunction useMessageContext() {\n const context = React.useContext(MessageContext);\n if (!context) {\n throw new Error('Message compound components must be used within a Message');\n }\n return context;\n}\n\n// ============================================\n// Helper Functions\n// ============================================\n\nfunction formatTimestamp(date: Date): string {\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n const minutes = Math.floor(diff / 60000);\n const hours = Math.floor(diff / 3600000);\n\n if (minutes < 1) return 'Just now';\n if (minutes < 60) return `${minutes}m ago`;\n if (hours < 24) return `${hours}h ago`;\n\n return date.toLocaleDateString(undefined, {\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n });\n}\n\n// ============================================\n// Icons\n// ============================================\n\nfunction UserIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\" />\n </svg>\n );\n}\n\nfunction AssistantIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M19 9l1.25-2.75L23 5l-2.75-1.25L19 1l-1.25 2.75L15 5l2.75 1.25L19 9zm-7.5.5L9 4 6.5 9.5 1 12l5.5 2.5L9 20l2.5-5.5L17 12l-5.5-2.5zM19 15l-1.25 2.75L15 19l2.75 1.25L19 23l1.25-2.75L23 19l-2.75-1.25L19 15z\" />\n </svg>\n );\n}\n\nfunction SystemIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z\" />\n </svg>\n );\n}\n\n// ============================================\n// Sub-components\n// ============================================\n\nfunction MessageContent({ children, markdown, className, ...htmlProps }: MessageContentProps) {\n const { status } = useMessageContext();\n\n const classes = [\n styles.content,\n status === 'streaming' && styles.streaming,\n className,\n ].filter(Boolean).join(' ');\n\n const content = markdown && typeof children === 'string'\n ? <Markdown content={children} />\n : children;\n\n return (\n <div {...htmlProps} className={classes}>\n {content}\n </div>\n );\n}\n\nfunction MessageActions({ children, className, ...htmlProps }: MessageActionsProps) {\n const classes = [styles.actions, className].filter(Boolean).join(' ');\n\n return (\n <div {...htmlProps} className={classes}>\n {children}\n </div>\n );\n}\n\nfunction MessageTimestamp({\n date,\n format: customFormat,\n className,\n ...htmlProps\n}: MessageTimestampProps) {\n const { timestamp } = useMessageContext();\n const dateToFormat = date ?? timestamp;\n\n if (!dateToFormat) return null;\n\n const formatted = customFormat ? customFormat(dateToFormat) : formatTimestamp(dateToFormat);\n\n const classes = [styles.timestamp, className].filter(Boolean).join(' ');\n\n return (\n <span {...htmlProps} className={classes}>\n {formatted}\n </span>\n );\n}\n\nfunction MessageAvatar({ children, src, alt, className, ...htmlProps }: MessageAvatarProps) {\n const { role } = useMessageContext();\n\n const classes = [\n styles.avatar,\n styles[`avatar${role.charAt(0).toUpperCase() + role.slice(1)}`],\n src && styles.avatarImage,\n className,\n ].filter(Boolean).join(' ');\n\n const defaultIcon = role === 'user'\n ? <UserIcon />\n : role === 'assistant'\n ? <AssistantIcon />\n : <SystemIcon />;\n\n const content = children ?? (src\n ? <img src={src} alt={alt ?? role} className={styles.avatarImg} />\n : defaultIcon);\n\n return (\n <div {...htmlProps} className={classes}>\n {content}\n </div>\n );\n}\n\n// ============================================\n// Main Component\n// ============================================\n\nfunction MessageRoot({\n role,\n children,\n status = 'complete',\n timestamp,\n avatar,\n actions,\n className,\n ...htmlProps\n}: MessageProps) {\n const contextValue: MessageContextValue = {\n role,\n status,\n timestamp,\n };\n\n const classes = [\n styles.message,\n styles[role],\n status === 'error' && styles.error,\n status === 'sending' && styles.sending,\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <MessageContext.Provider value={contextValue}>\n <div\n {...htmlProps}\n className={classes}\n data-role={role}\n data-status={status}\n >\n {avatar !== undefined ? avatar : <MessageAvatar />}\n <div className={styles.body}>\n {children}\n {actions && <MessageActions>{actions}</MessageActions>}\n </div>\n </div>\n </MessageContext.Provider>\n );\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const Message = Object.assign(MessageRoot, {\n Content: MessageContent,\n Actions: MessageActions,\n Timestamp: MessageTimestamp,\n Avatar: MessageAvatar,\n});\n\nexport {\n MessageRoot,\n MessageContent,\n MessageActions,\n MessageTimestamp,\n MessageAvatar,\n};\n\nexport { useMessageContext };\n"],"names":[],"mappings":"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"}
@@ -25,27 +25,41 @@ const gapMd = "_gap-md_1qpb2_111";
25
25
  const textLine = "_textLine_1qpb2_115";
26
26
  const styles = {
27
27
  skeleton,
28
+ "skeleton-pulse": "_skeleton-pulse_1qpb2_1",
28
29
  skeletonPulse,
29
30
  "static": "_static_1qpb2_16",
30
31
  fill,
31
32
  text,
32
33
  heading,
33
34
  avatar,
35
+ "avatar-sm": "_avatar-sm_1qpb2_41",
34
36
  avatarSm,
37
+ "avatar-md": "_avatar-md_1qpb2_46",
35
38
  avatarMd,
39
+ "avatar-lg": "_avatar-lg_1qpb2_51",
36
40
  avatarLg,
37
41
  button,
42
+ "button-sm": "_button-sm_1qpb2_60",
38
43
  buttonSm,
44
+ "button-md": "_button-md_1qpb2_65",
39
45
  buttonMd,
46
+ "button-lg": "_button-lg_1qpb2_70",
40
47
  buttonLg,
41
48
  input,
49
+ "radius-none": "_radius-none_1qpb2_81",
42
50
  radiusNone,
51
+ "radius-sm": "_radius-sm_1qpb2_85",
43
52
  radiusSm,
53
+ "radius-md": "_radius-md_1qpb2_89",
44
54
  radiusMd,
55
+ "radius-lg": "_radius-lg_1qpb2_93",
45
56
  radiusLg,
57
+ "radius-full": "_radius-full_1qpb2_97",
46
58
  radiusFull,
47
59
  textContainer,
60
+ "gap-sm": "_gap-sm_1qpb2_107",
48
61
  gapSm,
62
+ "gap-md": "_gap-md_1qpb2_111",
49
63
  gapMd,
50
64
  textLine
51
65
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Skeleton.module.scss.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Skeleton.module.scss.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -23,27 +23,41 @@ const gapMd = "_gap-md_1qpb2_111";
23
23
  const textLine = "_textLine_1qpb2_115";
24
24
  const styles = {
25
25
  skeleton,
26
+ "skeleton-pulse": "_skeleton-pulse_1qpb2_1",
26
27
  skeletonPulse,
27
28
  "static": "_static_1qpb2_16",
28
29
  fill,
29
30
  text,
30
31
  heading,
31
32
  avatar,
33
+ "avatar-sm": "_avatar-sm_1qpb2_41",
32
34
  avatarSm,
35
+ "avatar-md": "_avatar-md_1qpb2_46",
33
36
  avatarMd,
37
+ "avatar-lg": "_avatar-lg_1qpb2_51",
34
38
  avatarLg,
35
39
  button,
40
+ "button-sm": "_button-sm_1qpb2_60",
36
41
  buttonSm,
42
+ "button-md": "_button-md_1qpb2_65",
37
43
  buttonMd,
44
+ "button-lg": "_button-lg_1qpb2_70",
38
45
  buttonLg,
39
46
  input,
47
+ "radius-none": "_radius-none_1qpb2_81",
40
48
  radiusNone,
49
+ "radius-sm": "_radius-sm_1qpb2_85",
41
50
  radiusSm,
51
+ "radius-md": "_radius-md_1qpb2_89",
42
52
  radiusMd,
53
+ "radius-lg": "_radius-lg_1qpb2_93",
43
54
  radiusLg,
55
+ "radius-full": "_radius-full_1qpb2_97",
44
56
  radiusFull,
45
57
  textContainer,
58
+ "gap-sm": "_gap-sm_1qpb2_107",
46
59
  gapSm,
60
+ "gap-md": "_gap-md_1qpb2_111",
47
61
  gapMd,
48
62
  textLine
49
63
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Skeleton.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Skeleton.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -26,20 +26,34 @@ const styles = {
26
26
  row,
27
27
  column,
28
28
  directionResponsive,
29
+ "gap-xs": "_gap-xs_ixv42_37",
29
30
  gapXs,
31
+ "gap-sm": "_gap-sm_ixv42_41",
30
32
  gapSm,
33
+ "gap-md": "_gap-md_ixv42_45",
31
34
  gapMd,
35
+ "gap-lg": "_gap-lg_ixv42_49",
32
36
  gapLg,
37
+ "gap-xl": "_gap-xl_ixv42_53",
33
38
  gapXl,
34
39
  gapResponsive,
40
+ "align-start": "_align-start_ixv42_81",
35
41
  alignStart,
42
+ "align-center": "_align-center_ixv42_85",
36
43
  alignCenter,
44
+ "align-end": "_align-end_ixv42_89",
37
45
  alignEnd,
46
+ "align-stretch": "_align-stretch_ixv42_93",
38
47
  alignStretch,
48
+ "align-baseline": "_align-baseline_ixv42_97",
39
49
  alignBaseline,
50
+ "justify-start": "_justify-start_ixv42_101",
40
51
  justifyStart,
52
+ "justify-center": "_justify-center_ixv42_105",
41
53
  justifyCenter,
54
+ "justify-end": "_justify-end_ixv42_109",
42
55
  justifyEnd,
56
+ "justify-between": "_justify-between_ixv42_113",
43
57
  justifyBetween,
44
58
  wrap,
45
59
  separator
@@ -1 +1 @@
1
- {"version":3,"file":"Stack.module.scss.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Stack.module.scss.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}