@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.
- package/dist/assets/ui.css +443 -247
- package/dist/blocks/components/index.d.ts +0 -2
- package/dist/blocks/components/index.d.ts.map +1 -1
- package/dist/codeblock.cjs +187 -184
- package/dist/codeblock.cjs.map +1 -1
- package/dist/codeblock.js +183 -180
- package/dist/codeblock.js.map +1 -1
- package/dist/components/Box/Box.module.scss.cjs +73 -0
- package/dist/components/Box/Box.module.scss.cjs.map +1 -1
- package/dist/components/Box/Box.module.scss.js +73 -0
- package/dist/components/Box/Box.module.scss.js.map +1 -1
- package/dist/components/ButtonGroup/ButtonGroup.module.scss.cjs +6 -0
- package/dist/components/ButtonGroup/ButtonGroup.module.scss.cjs.map +1 -1
- package/dist/components/ButtonGroup/ButtonGroup.module.scss.js +6 -0
- package/dist/components/ButtonGroup/ButtonGroup.module.scss.js.map +1 -1
- package/dist/components/CodeBlock/CodeBlock.module.scss.cjs +20 -23
- package/dist/components/CodeBlock/CodeBlock.module.scss.cjs.map +1 -1
- package/dist/components/CodeBlock/CodeBlock.module.scss.js +20 -23
- package/dist/components/CodeBlock/CodeBlock.module.scss.js.map +1 -1
- package/dist/components/CodeBlock/index.d.ts +11 -7
- package/dist/components/CodeBlock/index.d.ts.map +1 -1
- package/dist/components/Combobox/Combobox.module.scss.cjs +15 -15
- package/dist/components/Combobox/Combobox.module.scss.js +15 -15
- package/dist/components/DataTable/DataTable.module.scss.cjs +84 -0
- package/dist/components/DataTable/DataTable.module.scss.cjs.map +1 -0
- package/dist/components/DataTable/DataTable.module.scss.js +84 -0
- package/dist/components/DataTable/DataTable.module.scss.js.map +1 -0
- package/dist/components/DataTable/index.cjs +383 -0
- package/dist/components/DataTable/index.cjs.map +1 -0
- package/dist/components/DataTable/index.d.ts +78 -0
- package/dist/components/DataTable/index.d.ts.map +1 -0
- package/dist/components/DataTable/index.js +366 -0
- package/dist/components/DataTable/index.js.map +1 -0
- package/dist/components/Drawer/Drawer.module.scss.cjs +9 -0
- package/dist/components/Drawer/Drawer.module.scss.cjs.map +1 -1
- package/dist/components/Drawer/Drawer.module.scss.js +9 -0
- package/dist/components/Drawer/Drawer.module.scss.js.map +1 -1
- package/dist/components/Image/Image.module.scss.cjs +12 -0
- package/dist/components/Image/Image.module.scss.cjs.map +1 -1
- package/dist/components/Image/Image.module.scss.js +12 -0
- package/dist/components/Image/Image.module.scss.js.map +1 -1
- package/dist/components/Link/Link.module.scss.cjs +3 -0
- package/dist/components/Link/Link.module.scss.cjs.map +1 -1
- package/dist/components/Link/Link.module.scss.js +3 -0
- package/dist/components/Link/Link.module.scss.js.map +1 -1
- package/dist/components/List/List.module.scss.cjs +5 -0
- package/dist/components/List/List.module.scss.cjs.map +1 -1
- package/dist/components/List/List.module.scss.js +5 -0
- package/dist/components/List/List.module.scss.js.map +1 -1
- package/dist/components/Loading/Loading.module.scss.cjs +5 -0
- package/dist/components/Loading/Loading.module.scss.cjs.map +1 -1
- package/dist/components/Loading/Loading.module.scss.js +5 -0
- package/dist/components/Loading/Loading.module.scss.js.map +1 -1
- package/dist/components/Markdown/Markdown.module.scss.cjs +1 -1
- package/dist/components/Markdown/Markdown.module.scss.js +1 -1
- package/dist/components/Message/Message.module.scss.cjs +22 -16
- package/dist/components/Message/Message.module.scss.cjs.map +1 -1
- package/dist/components/Message/Message.module.scss.js +22 -16
- package/dist/components/Message/Message.module.scss.js.map +1 -1
- package/dist/components/Message/index.cjs +5 -3
- package/dist/components/Message/index.cjs.map +1 -1
- package/dist/components/Message/index.d.ts +5 -1
- package/dist/components/Message/index.d.ts.map +1 -1
- package/dist/components/Message/index.js +5 -3
- package/dist/components/Message/index.js.map +1 -1
- package/dist/components/Skeleton/Skeleton.module.scss.cjs +14 -0
- package/dist/components/Skeleton/Skeleton.module.scss.cjs.map +1 -1
- package/dist/components/Skeleton/Skeleton.module.scss.js +14 -0
- package/dist/components/Skeleton/Skeleton.module.scss.js.map +1 -1
- package/dist/components/Stack/Stack.module.scss.cjs +14 -0
- package/dist/components/Stack/Stack.module.scss.cjs.map +1 -1
- package/dist/components/Stack/Stack.module.scss.js +14 -0
- package/dist/components/Stack/Stack.module.scss.js.map +1 -1
- package/dist/components/Table/Table.module.scss.cjs +21 -36
- package/dist/components/Table/Table.module.scss.cjs.map +1 -1
- package/dist/components/Table/Table.module.scss.js +21 -36
- package/dist/components/Table/Table.module.scss.js.map +1 -1
- package/dist/components/Table/index.d.ts +35 -55
- package/dist/components/Table/index.d.ts.map +1 -1
- package/dist/components/Text/Text.module.scss.cjs +14 -0
- package/dist/components/Text/Text.module.scss.cjs.map +1 -1
- package/dist/components/Text/Text.module.scss.js +14 -0
- package/dist/components/Text/Text.module.scss.js.map +1 -1
- package/dist/components/Textarea/Textarea.module.scss.cjs +4 -0
- package/dist/components/Textarea/Textarea.module.scss.cjs.map +1 -1
- package/dist/components/Textarea/Textarea.module.scss.js +4 -0
- package/dist/components/Textarea/Textarea.module.scss.js.map +1 -1
- package/dist/components/ToggleGroup/ToggleGroup.module.scss.cjs +5 -0
- package/dist/components/ToggleGroup/ToggleGroup.module.scss.cjs.map +1 -1
- package/dist/components/ToggleGroup/ToggleGroup.module.scss.js +5 -0
- package/dist/components/ToggleGroup/ToggleGroup.module.scss.js.map +1 -1
- package/dist/index.cjs +119 -117
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/table.cjs +44 -262
- package/dist/table.cjs.map +1 -1
- package/dist/table.js +47 -248
- package/dist/table.js.map +1 -1
- package/fragments.json +1 -1
- package/package.json +110 -118
- package/src/blocks/components/index.ts +0 -3
- package/src/components/CodeBlock/CodeBlock.module.scss +16 -34
- package/src/components/CodeBlock/index.tsx +351 -345
- package/src/components/Combobox/Combobox.module.scss +13 -9
- package/src/components/ConversationList/ConversationList.fragment.tsx +96 -129
- package/src/components/DataTable/DataTable.fragment.tsx +754 -0
- package/src/components/DataTable/DataTable.module.scss +300 -0
- package/src/components/DataTable/DataTable.test.tsx +224 -0
- package/src/components/DataTable/index.tsx +533 -0
- package/src/components/Message/Message.fragment.tsx +34 -0
- package/src/components/Message/Message.module.scss +11 -0
- package/src/components/Message/index.tsx +12 -3
- package/src/components/Table/Table.fragment.tsx +190 -175
- package/src/components/Table/Table.module.scss +15 -88
- package/src/components/Table/Table.test.tsx +184 -94
- package/src/components/Table/index.tsx +105 -374
- package/src/index.ts +15 -4
- package/src/tokens/_computed.scss +7 -6
- package/src/tokens/_density.scss +87 -47
- package/src/tokens/_variables.scss +46 -31
- package/dist/blocks/components/DataTable.d.ts +0 -19
- package/dist/blocks/components/DataTable.d.ts.map +0 -1
- 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,21 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
-
const message = "
|
|
4
|
-
const actions = "
|
|
5
|
-
const user = "
|
|
6
|
-
const body = "
|
|
7
|
-
const content = "
|
|
8
|
-
const assistant = "
|
|
9
|
-
const system = "
|
|
10
|
-
const avatar = "
|
|
11
|
-
const error = "
|
|
12
|
-
const sending = "
|
|
13
|
-
const avatarUser = "
|
|
14
|
-
const avatarAssistant = "
|
|
15
|
-
const avatarSystem = "
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const
|
|
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 = "
|
|
2
|
-
const actions = "
|
|
3
|
-
const user = "
|
|
4
|
-
const body = "
|
|
5
|
-
const content = "
|
|
6
|
-
const assistant = "
|
|
7
|
-
const system = "
|
|
8
|
-
const avatar = "
|
|
9
|
-
const error = "
|
|
10
|
-
const sending = "
|
|
11
|
-
const avatarUser = "
|
|
12
|
-
const avatarAssistant = "
|
|
13
|
-
const avatarSystem = "
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const
|
|
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: "
|
|
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
|
-
|
|
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;
|
|
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: "
|
|
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
|
-
|
|
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":"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"}
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|