@revikornmann/muka-ui 0.10.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/build/manifest.json +20 -0
  2. package/dist/cjs/components/AgentTaskList/AgentTaskList.css +22 -3
  3. package/dist/cjs/components/BottomBar/BottomBar.css +27 -2
  4. package/dist/cjs/components/BottomBar/BottomBar.js +1 -0
  5. package/dist/cjs/components/BottomBar/BottomBar.js.map +1 -1
  6. package/dist/cjs/components/Button/Button.css +13 -6
  7. package/dist/cjs/components/Button/Button.js +1 -1
  8. package/dist/cjs/components/ChatBubble/ChatBubble.css +251 -31
  9. package/dist/cjs/components/ChatBubble/ChatBubble.js +17 -4
  10. package/dist/cjs/components/ChatBubble/ChatBubble.js.map +1 -1
  11. package/dist/cjs/components/ChatComposer/ChatComposer.css +13 -1
  12. package/dist/cjs/components/ChatMessageList/ChatMessageList.css +17 -1
  13. package/dist/cjs/components/ChatPhotoGrid/ChatPhotoGrid.css +113 -0
  14. package/dist/cjs/components/ChatPhotoGrid/ChatPhotoGrid.js +47 -0
  15. package/dist/cjs/components/ChatPhotoGrid/ChatPhotoGrid.js.map +1 -0
  16. package/dist/cjs/components/ChatPhotoGrid/index.js +11 -0
  17. package/dist/cjs/components/ChatPhotoGrid/index.js.map +1 -0
  18. package/dist/cjs/components/index.js +3 -1
  19. package/dist/cjs/components/index.js.map +1 -1
  20. package/dist/esm/components/AgentTaskList/AgentTaskList.css +22 -3
  21. package/dist/esm/components/BottomBar/BottomBar.css +27 -2
  22. package/dist/esm/components/BottomBar/BottomBar.js +1 -0
  23. package/dist/esm/components/BottomBar/BottomBar.js.map +1 -1
  24. package/dist/esm/components/Button/Button.css +13 -6
  25. package/dist/esm/components/Button/Button.js +1 -1
  26. package/dist/esm/components/ChatBubble/ChatBubble.css +251 -31
  27. package/dist/esm/components/ChatBubble/ChatBubble.js +18 -5
  28. package/dist/esm/components/ChatBubble/ChatBubble.js.map +1 -1
  29. package/dist/esm/components/ChatComposer/ChatComposer.css +13 -1
  30. package/dist/esm/components/ChatMessageList/ChatMessageList.css +17 -1
  31. package/dist/esm/components/ChatPhotoGrid/ChatPhotoGrid.css +113 -0
  32. package/dist/esm/components/ChatPhotoGrid/ChatPhotoGrid.js +43 -0
  33. package/dist/esm/components/ChatPhotoGrid/ChatPhotoGrid.js.map +1 -0
  34. package/dist/esm/components/ChatPhotoGrid/index.js +3 -0
  35. package/dist/esm/components/ChatPhotoGrid/index.js.map +1 -0
  36. package/dist/esm/components/index.js +1 -0
  37. package/dist/esm/components/index.js.map +1 -1
  38. package/dist/styles/components/AgentTaskList.css +22 -3
  39. package/dist/styles/components/BottomBar.css +27 -2
  40. package/dist/styles/components/Button.css +13 -6
  41. package/dist/styles/components/ChatBubble.css +251 -31
  42. package/dist/styles/components/ChatComposer.css +13 -1
  43. package/dist/styles/components/ChatMessageList.css +17 -1
  44. package/dist/styles/components/ChatPhotoGrid.css +113 -0
  45. package/dist/styles/index.css +1178 -704
  46. package/dist/styles/muka-dark.css +1178 -704
  47. package/dist/styles/muka-light.css +1178 -704
  48. package/dist/styles/tokens-bouwplan-dark.css +61 -2
  49. package/dist/styles/tokens-bouwplan-light.css +61 -2
  50. package/dist/styles/tokens-fscl-dark.css +61 -2
  51. package/dist/styles/tokens-fscl-light.css +61 -2
  52. package/dist/styles/tokens-grip-dark.css +61 -2
  53. package/dist/styles/tokens-grip-light.css +61 -2
  54. package/dist/styles/tokens-muka-dark.css +61 -2
  55. package/dist/styles/tokens-muka-light.css +61 -2
  56. package/dist/styles/tokens-wireframe-dark.css +61 -2
  57. package/dist/styles/tokens-wireframe-light.css +61 -2
  58. package/dist/styles/wireframe-dark.css +1178 -704
  59. package/dist/styles/wireframe-light.css +1178 -704
  60. package/dist/types/components/BottomBar/BottomBar.d.ts +3 -2
  61. package/dist/types/components/BottomBar/BottomBar.d.ts.map +1 -1
  62. package/dist/types/components/Button/Button.d.ts +1 -1
  63. package/dist/types/components/ChatBubble/ChatBubble.d.ts +63 -8
  64. package/dist/types/components/ChatBubble/ChatBubble.d.ts.map +1 -1
  65. package/dist/types/components/ChatPhotoGrid/ChatPhotoGrid.d.ts +44 -0
  66. package/dist/types/components/ChatPhotoGrid/ChatPhotoGrid.d.ts.map +1 -0
  67. package/dist/types/components/ChatPhotoGrid/index.d.ts +3 -0
  68. package/dist/types/components/ChatPhotoGrid/index.d.ts.map +1 -0
  69. package/dist/types/components/index.d.ts +1 -0
  70. package/dist/types/components/index.d.ts.map +1 -1
  71. package/package.json +1 -1
  72. package/tokens/README.md +14 -0
  73. package/tokens/t2-alias/brand/bouwplan/dark.json +24 -0
  74. package/tokens/t2-alias/brand/bouwplan/light.json +24 -0
  75. package/tokens/t2-alias/brand/fscl/dark.json +24 -0
  76. package/tokens/t2-alias/brand/fscl/light.json +24 -0
  77. package/tokens/t2-alias/brand/grip/dark.json +54 -0
  78. package/tokens/t2-alias/brand/grip/light.json +54 -0
  79. package/tokens/t2-alias/brand/muka/dark.json +54 -0
  80. package/tokens/t2-alias/brand/muka/light.json +54 -0
  81. package/tokens/t2-alias/brand/wireframe/dark.json +54 -0
  82. package/tokens/t2-alias/brand/wireframe/light.json +54 -0
  83. package/tokens/t3-semantics/ui.json +190 -0
  84. package/tokens/t4-components/bottombar.json +11 -5
  85. package/tokens/t4-components/chatbubble.json +154 -0
  86. package/tokens/t4-components/chatphotogrid.json +32 -0
@@ -20,12 +20,19 @@
20
20
  margin: 0;
21
21
  cursor: pointer;
22
22
  color: var(--color-text-subtle-default);
23
+ font-family: var(--text-body-sm-regular-fontFamily);
24
+ font-weight: var(--text-body-sm-regular-fontWeight);
25
+ font-size: var(--text-body-sm-regular-fontSize);
26
+ line-height: var(--text-body-sm-regular-lineHeight);
27
+ text-align: left;
28
+ -webkit-tap-highlight-color: transparent;
29
+ }
30
+
31
+ .muka-agent-task-list--open .muka-agent-task-list__header {
23
32
  font-family: var(--text-body-sm-bold-fontFamily);
24
33
  font-weight: var(--text-body-sm-bold-fontWeight);
25
34
  font-size: var(--text-body-sm-bold-fontSize);
26
35
  line-height: var(--text-body-sm-bold-lineHeight);
27
- text-align: left;
28
- -webkit-tap-highlight-color: transparent;
29
36
  }
30
37
 
31
38
  .muka-agent-task-list__header:focus-visible {
@@ -83,7 +90,7 @@
83
90
  position: absolute;
84
91
  left: 7px;
85
92
  width: 1px;
86
- background-color: var(--color-border-default, #d9d9d9);
93
+ background-color: var(--color-border-default);
87
94
  }
88
95
 
89
96
  .muka-agent-task-list__line--top {
@@ -145,3 +152,15 @@
145
152
  line-height: var(--text-body-sm-regular-lineHeight);
146
153
  word-break: break-word;
147
154
  }
155
+
156
+ /* ─── Print ────────────────────────────────────────────── */
157
+
158
+ @media print {
159
+ .muka-agent-task-list {
160
+ break-inside: avoid;
161
+ }
162
+
163
+ .muka-agent-task-list__chevron {
164
+ display: none;
165
+ }
166
+ }
@@ -62,6 +62,25 @@
62
62
  flex-direction: row;
63
63
  }
64
64
 
65
+ /* ─── Chat variant (houses a ChatComposer) ───────────── */
66
+
67
+ .muka-bottombar--chat .muka-bottombar__content {
68
+ flex-direction: row;
69
+ max-width: var(--bottombar-chat-max-width);
70
+ width: 100%;
71
+ margin: 0 auto;
72
+ }
73
+
74
+ /* Docked chat pads its content; the floating card supplies its own padding. */
75
+ .muka-bottombar--chat:not(.muka-bottombar--floating) .muka-bottombar__content {
76
+ padding: var(--bottombar-chat-padding);
77
+ }
78
+
79
+ /* Floating chat card widens to the chat cap (overrides the md default below). */
80
+ .muka-bottombar--chat.muka-bottombar--floating .muka-bottombar__content {
81
+ max-width: var(--bottombar-chat-max-width);
82
+ }
83
+
65
84
  /* ─── Tab item ────────────────────────────────────────── */
66
85
 
67
86
  .muka-bottombar__tab {
@@ -118,8 +137,6 @@
118
137
  var(--bottombar-floating-backdrop-start),
119
138
  var(--bottombar-floating-backdrop-end)
120
139
  );
121
- backdrop-filter: blur(var(--bottombar-floating-backdrop-blur));
122
- -webkit-backdrop-filter: blur(var(--bottombar-floating-backdrop-blur));
123
140
  padding: var(--bottombar-floating-padding-top) var(--bottombar-floating-margin-x) var(--bottombar-floating-margin-bottom);
124
141
 
125
142
  /* The transparent frosted margin around the pill overlays scrolling content;
@@ -274,3 +291,11 @@
274
291
  box-shadow: none;
275
292
  }
276
293
  }
294
+
295
+ /* ─── Print ────────────────────────────────────────────── */
296
+
297
+ @media print {
298
+ .muka-bottombar {
299
+ display: none;
300
+ }
301
+ }
@@ -96,10 +96,13 @@
96
96
  }
97
97
 
98
98
  /* `[data-state="open"]` keeps a Button pressed while it's an open disclosure
99
- trigger (Radix Menu/Popover set this on the trigger). */
99
+ trigger (Radix Menu/Popover set this on the trigger). `[aria-pressed="true"]`
100
+ gives toggle buttons a visible selected state, so the toggle is not conveyed
101
+ to sighted users by the accessibility tree alone. */
100
102
  .muka-button--primary:active:not(:disabled),
101
103
  .muka-button--primary.muka-button--pressed:not(:disabled),
102
- .muka-button--primary[data-state="open"]:not(:disabled) {
104
+ .muka-button--primary[data-state="open"]:not(:disabled),
105
+ .muka-button--primary[aria-pressed="true"]:not(:disabled) {
103
106
  background-color: var(--button-color-primary-background-pressed);
104
107
  color: var(--button-color-primary-foreground-pressed);
105
108
  box-shadow: var(--button-color-primary-shadow-pressed);
@@ -128,7 +131,8 @@
128
131
 
129
132
  .muka-button--secondary:active:not(:disabled),
130
133
  .muka-button--secondary.muka-button--pressed:not(:disabled),
131
- .muka-button--secondary[data-state="open"]:not(:disabled) {
134
+ .muka-button--secondary[data-state="open"]:not(:disabled),
135
+ .muka-button--secondary[aria-pressed="true"]:not(:disabled) {
132
136
  background-color: var(--button-color-secondary-background-pressed);
133
137
  color: var(--button-color-secondary-foreground-pressed);
134
138
  box-shadow: var(--button-color-secondary-shadow-pressed);
@@ -157,7 +161,8 @@
157
161
 
158
162
  .muka-button--tertiary:active:not(:disabled),
159
163
  .muka-button--tertiary.muka-button--pressed:not(:disabled),
160
- .muka-button--tertiary[data-state="open"]:not(:disabled) {
164
+ .muka-button--tertiary[data-state="open"]:not(:disabled),
165
+ .muka-button--tertiary[aria-pressed="true"]:not(:disabled) {
161
166
  background-color: var(--button-color-tertiary-background-pressed);
162
167
  color: var(--button-color-tertiary-foreground-pressed);
163
168
  border-color: var(--button-color-tertiary-border-pressed);
@@ -186,7 +191,8 @@
186
191
 
187
192
  .muka-button--ghost:active:not(:disabled),
188
193
  .muka-button--ghost.muka-button--pressed:not(:disabled),
189
- .muka-button--ghost[data-state="open"]:not(:disabled) {
194
+ .muka-button--ghost[data-state="open"]:not(:disabled),
195
+ .muka-button--ghost[aria-pressed="true"]:not(:disabled) {
190
196
  background-color: var(--button-color-ghost-background-pressed);
191
197
  color: var(--button-color-ghost-foreground-pressed);
192
198
  border-color: var(--button-color-ghost-border-pressed);
@@ -215,7 +221,8 @@
215
221
 
216
222
  .muka-button--muted:active:not(:disabled),
217
223
  .muka-button--muted.muka-button--pressed:not(:disabled),
218
- .muka-button--muted[data-state="open"]:not(:disabled) {
224
+ .muka-button--muted[data-state="open"]:not(:disabled),
225
+ .muka-button--muted[aria-pressed="true"]:not(:disabled) {
219
226
  background-color: var(--button-color-muted-background-pressed);
220
227
  color: var(--button-color-muted-foreground-pressed);
221
228
  border-color: var(--button-color-muted-border-pressed);
@@ -3,69 +3,222 @@
3
3
  .muka-chat-bubble {
4
4
  display: flex;
5
5
  flex-direction: column;
6
- gap: var(--spacing-1);
7
6
  width: 100%;
8
7
  max-width: 100%;
9
8
  }
10
9
 
11
- /* ─── User variant — right-aligned bubble ──────────────── */
10
+ /* ─── Row: avatar rail + bubble + action bar ───────────────
11
+ *
12
+ * A two-row grid rather than a flex column, so the avatar bottom-aligns to the
13
+ * bubble itself and not to the action bar underneath it (Figma 5223:8520).
14
+ */
12
15
 
13
- .muka-chat-bubble--user {
14
- align-items: flex-end;
16
+ .muka-chat-bubble__row {
17
+ display: grid;
18
+ grid-template-columns: minmax(0, 1fr);
19
+ grid-template-areas:
20
+ 'bubble'
21
+ 'actions';
22
+ column-gap: var(--chatbubble-row-gap);
23
+ row-gap: var(--chatbubble-gap);
24
+ width: 100%;
15
25
  }
16
26
 
17
- .muka-chat-bubble--user .muka-chat-bubble__message {
18
- background-color: var(--color-surface-level2);
19
- color: var(--color-text-default-default);
20
- border-radius: var(--radius-lg);
21
- padding: var(--spacing-4);
22
- max-width: min(600px, 100%);
23
- word-break: break-word;
27
+ .muka-chat-bubble--has-avatar .muka-chat-bubble__row {
28
+ grid-template-columns: auto minmax(0, 1fr);
29
+ grid-template-areas:
30
+ 'rail bubble'
31
+ '. actions';
24
32
  }
25
33
 
26
- .muka-chat-bubble--user .muka-chat-bubble__meta {
27
- justify-content: flex-end;
34
+ .muka-chat-bubble--own.muka-chat-bubble--has-avatar .muka-chat-bubble__row {
35
+ grid-template-columns: minmax(0, 1fr) auto;
36
+ grid-template-areas:
37
+ 'bubble rail'
38
+ 'actions .';
28
39
  }
29
40
 
30
- /* ─── Agent variant — no bubble, full width ────────────── */
31
-
32
- .muka-chat-bubble--agent {
33
- align-items: flex-start;
41
+ .muka-chat-bubble__rail {
42
+ grid-area: rail;
43
+ /* Sits on the bubble's baseline, above the action bar */
44
+ align-self: end;
45
+ display: flex;
46
+ justify-content: center;
47
+ min-width: var(--chatbubble-avatar-size);
34
48
  }
35
49
 
36
- .muka-chat-bubble--agent .muka-chat-bubble__message {
37
- color: var(--color-text-default-default);
38
- padding: 0 var(--spacing-2);
50
+ /* ─── Bubble surface ───────────────────────────────────── */
51
+
52
+ .muka-chat-bubble__bubble {
53
+ grid-area: bubble;
54
+ max-width: var(--chatbubble-max-width);
55
+ position: relative;
56
+ display: flex;
57
+ flex-direction: column;
58
+ gap: var(--chatbubble-gap);
39
59
  width: 100%;
60
+ padding: var(--chatbubble-padding);
61
+ border-radius: var(--chatbubble-radius);
62
+ border: var(--border-width-regular) solid transparent;
40
63
  word-break: break-word;
41
64
  }
42
65
 
43
- .muka-chat-bubble--agent .muka-chat-bubble__meta {
44
- justify-content: flex-start;
66
+ .muka-chat-bubble--own .muka-chat-bubble__bubble,
67
+ .muka-chat-bubble--own .muka-chat-bubble__actions {
68
+ justify-self: end;
69
+ }
70
+
71
+ .muka-chat-bubble--own .muka-chat-bubble__bubble {
72
+ background-color: var(--chatbubble-color-own-background);
73
+ border-color: var(--chatbubble-color-own-border);
74
+ color: var(--chatbubble-color-own-foreground);
75
+ /* Room for the inset timestamp in the bottom-right corner */
76
+ padding-right: var(--spacing-6);
77
+ }
78
+
79
+ .muka-chat-bubble--peer .muka-chat-bubble__bubble {
80
+ background-color: var(--chatbubble-color-peer-background);
81
+ border-color: var(--chatbubble-color-peer-border);
82
+ color: var(--chatbubble-color-peer-foreground);
83
+ box-shadow: var(--shadow-level2);
84
+ }
85
+
86
+ .muka-chat-bubble--agent .muka-chat-bubble__bubble {
87
+ background-color: var(--chatbubble-color-agent-background);
88
+ border-color: var(--chatbubble-color-agent-border);
89
+ color: var(--chatbubble-color-agent-foreground);
45
90
  }
46
91
 
47
- /* ─── Message typography ───────────────────────────────── */
92
+ /* ─── Header row (author · meta · time · badge) ────────── */
93
+
94
+ .muka-chat-bubble__header {
95
+ display: flex;
96
+ flex-flow: row wrap;
97
+ align-items: center;
98
+ gap: var(--chatbubble-row-gap);
99
+ }
100
+
101
+ .muka-chat-bubble__author {
102
+ font-family: var(--text-body-base-bold-fontFamily);
103
+ font-weight: var(--text-body-base-bold-fontWeight);
104
+ font-size: var(--text-body-base-bold-fontSize);
105
+ line-height: var(--text-body-base-bold-lineHeight);
106
+ }
107
+
108
+ .muka-chat-bubble__author-meta {
109
+ /* Inherits the variant's body colour from the bubble */
110
+ color: inherit;
111
+ font-family: var(--text-body-base-regular-fontFamily);
112
+ font-weight: var(--text-body-base-regular-fontWeight);
113
+ font-size: var(--text-body-base-regular-fontSize);
114
+ line-height: var(--text-body-base-regular-lineHeight);
115
+ }
116
+
117
+ .muka-chat-bubble__badge {
118
+ display: inline-flex;
119
+ align-items: center;
120
+ }
121
+
122
+ /*
123
+ * Keep the first line of content clear of the absolutely positioned menu
124
+ * button in the bubble's top-right corner.
125
+ */
126
+ .muka-chat-bubble--has-menu .muka-chat-bubble__header,
127
+ .muka-chat-bubble--has-menu.muka-chat-bubble--no-header .muka-chat-bubble__message {
128
+ padding-right: var(--spacing-6);
129
+ }
130
+
131
+ /* ─── Body ─────────────────────────────────────────────── */
132
+
133
+ .muka-chat-bubble__body {
134
+ display: flex;
135
+ flex-direction: column;
136
+ gap: var(--chatbubble-gap);
137
+ min-width: 0;
138
+ }
139
+
140
+ /* The agent balloon spaces its blocks further apart (Figma 5223:8520) */
141
+ .muka-chat-bubble--agent .muka-chat-bubble__body {
142
+ gap: var(--chatbubble-body-gap);
143
+ }
144
+
145
+ .muka-chat-bubble__media {
146
+ min-width: 0;
147
+ }
48
148
 
49
149
  .muka-chat-bubble__message {
50
150
  font-family: var(--text-body-base-regular-fontFamily);
51
151
  font-weight: var(--text-body-base-regular-fontWeight);
52
152
  font-size: var(--text-body-base-regular-fontSize);
53
153
  line-height: var(--text-body-base-regular-lineHeight);
154
+ white-space: pre-wrap;
155
+ word-break: break-word;
54
156
  }
55
157
 
56
- /* ─── Meta row (timestamp + actions) ───────────────────── */
158
+ /* Empty message block should not add a gap of its own */
159
+ .muka-chat-bubble__message:empty {
160
+ display: none;
161
+ }
57
162
 
58
- .muka-chat-bubble__meta {
163
+ /* ─── Embedded card ────────────────────────────────────── */
164
+
165
+ .muka-chat-bubble__embed {
166
+ position: relative;
59
167
  display: flex;
60
- align-items: center;
61
- gap: var(--spacing-1);
168
+ flex-direction: column;
169
+ gap: var(--chatbubble-embed-gap);
170
+ padding: var(--chatbubble-embed-padding);
171
+ border-radius: var(--chatbubble-embed-radius);
172
+ border: var(--border-width-regular) solid transparent;
62
173
  }
63
174
 
175
+ /*
176
+ * The embed sits on the raised surface of its author's role, one step apart
177
+ * from the bubble it is nested in, and reuses that role's border colour.
178
+ */
179
+ .muka-chat-bubble--own .muka-chat-bubble__embed {
180
+ background-color: var(--chatbubble-embed-color-own-background);
181
+ border-color: var(--chatbubble-embed-color-own-border);
182
+ color: var(--chatbubble-embed-color-own-foreground);
183
+ }
184
+
185
+ .muka-chat-bubble--peer .muka-chat-bubble__embed {
186
+ background-color: var(--chatbubble-embed-color-peer-background);
187
+ border-color: var(--chatbubble-embed-color-peer-border);
188
+ color: var(--chatbubble-embed-color-peer-foreground);
189
+ }
190
+
191
+ .muka-chat-bubble--agent .muka-chat-bubble__embed {
192
+ background-color: var(--chatbubble-embed-color-agent-background);
193
+ border-color: var(--chatbubble-embed-color-agent-border);
194
+ color: var(--chatbubble-embed-color-agent-foreground);
195
+ }
196
+
197
+ .muka-chat-bubble__embed-content {
198
+ display: flex;
199
+ flex-direction: column;
200
+ gap: var(--chatbubble-embed-gap);
201
+ min-width: 0;
202
+ }
203
+
204
+ .muka-chat-bubble__embed-copy {
205
+ position: absolute;
206
+ top: var(--chatbubble-embed-padding);
207
+ right: var(--chatbubble-embed-padding);
208
+ }
209
+
210
+ /* ─── Stacked full-width action buttons ────────────────── */
211
+
212
+ .muka-chat-bubble__action-stack {
213
+ display: flex;
214
+ flex-direction: column;
215
+ gap: var(--chatbubble-action-stack-gap);
216
+ }
217
+
218
+ /* ─── Inset timestamp (user variant) ───────────────────── */
219
+
64
220
  .muka-chat-bubble__timestamp {
65
- display: inline-flex;
66
- align-items: center;
67
- padding: 0 var(--spacing-2);
68
- color: var(--color-text-subtle-default);
221
+ color: var(--chatbubble-color-timestamp);
69
222
  font-family: var(--text-body-sm-regular-fontFamily);
70
223
  font-weight: var(--text-body-sm-regular-fontWeight);
71
224
  font-size: var(--text-body-sm-regular-fontSize);
@@ -73,8 +226,75 @@
73
226
  white-space: nowrap;
74
227
  }
75
228
 
229
+ .muka-chat-bubble__timestamp--inset {
230
+ align-self: flex-end;
231
+ }
232
+
233
+ /* ─── Menu affordance ──────────────────────────────────── */
234
+
235
+ .muka-chat-bubble__menu {
236
+ position: absolute;
237
+ top: var(--spacing-1);
238
+ right: var(--spacing-1);
239
+ }
240
+
241
+ /* ─── Meta action row (below the bubble) ───────────────── */
242
+
76
243
  .muka-chat-bubble__actions {
244
+ grid-area: actions;
245
+ max-width: var(--chatbubble-max-width);
77
246
  display: flex;
78
247
  align-items: center;
79
248
  gap: 0;
80
249
  }
250
+
251
+ .muka-chat-bubble--own .muka-chat-bubble__actions,
252
+ .muka-chat-bubble--agent .muka-chat-bubble__actions {
253
+ justify-content: flex-end;
254
+ }
255
+
256
+ /*
257
+ * The meta row uses 32px icon buttons per the design. Expand the pointer/touch
258
+ * target to the 44px WCAG 2.1 AA minimum without changing the visual size.
259
+ */
260
+ .muka-chat-bubble__actions .muka-button--icon-only {
261
+ position: relative;
262
+ }
263
+
264
+ .muka-chat-bubble__actions .muka-button--icon-only::after {
265
+ content: '';
266
+ position: absolute;
267
+ top: 50%;
268
+ left: 50%;
269
+ width: 44px;
270
+ height: 44px;
271
+ transform: translate(-50%, -50%);
272
+ }
273
+
274
+ /* ─── Print ────────────────────────────────────────────── */
275
+
276
+ @media print {
277
+ .muka-chat-bubble__bubble {
278
+ box-shadow: none;
279
+ break-inside: avoid;
280
+ print-color-adjust: exact;
281
+ -webkit-print-color-adjust: exact;
282
+ }
283
+
284
+ .muka-chat-bubble__embed {
285
+ break-inside: avoid;
286
+ print-color-adjust: exact;
287
+ -webkit-print-color-adjust: exact;
288
+ }
289
+
290
+ .muka-chat-bubble__menu,
291
+ .muka-chat-bubble__actions,
292
+ .muka-chat-bubble__embed-copy,
293
+ .muka-chat-bubble__action-stack {
294
+ display: none;
295
+ }
296
+
297
+ .muka-chat-bubble__column {
298
+ max-width: 100%;
299
+ }
300
+ }
@@ -1,11 +1,15 @@
1
1
  /* ChatComposer Component Styles */
2
2
 
3
+ /*
4
+ * The composer is a bare, fill-width row: no padding, background, border or
5
+ * max-width of its own (Figma 5243:14141). Whatever hosts it owns the
6
+ * container — see BottomBar's `chat` variant.
7
+ */
3
8
  .muka-chat-composer {
4
9
  display: flex;
5
10
  flex-direction: column;
6
11
  gap: var(--spacing-3);
7
12
  width: 100%;
8
- max-width: 768px;
9
13
  }
10
14
 
11
15
  .muka-chat-composer--disabled {
@@ -111,3 +115,11 @@
111
115
  right: var(--spacing-2);
112
116
  transform: translateY(-50%);
113
117
  }
118
+
119
+ /* ─── Print ────────────────────────────────────────────── */
120
+
121
+ @media print {
122
+ .muka-chat-composer {
123
+ display: none;
124
+ }
125
+ }
@@ -19,6 +19,22 @@
19
19
  align-items: stretch;
20
20
  gap: var(--spacing-8);
21
21
  width: 100%;
22
- max-width: 640px;
22
+ max-width: var(--container-max-width-sm);
23
23
  margin: 0 auto;
24
24
  }
25
+
26
+ /* ─── Print ────────────────────────────────────────────── */
27
+
28
+ @media print {
29
+ .muka-chat-message-list {
30
+ overflow: visible;
31
+ height: auto;
32
+ max-height: none;
33
+ background: none;
34
+ padding: 0;
35
+ }
36
+
37
+ .muka-chat-message-list__inner {
38
+ max-width: 100%;
39
+ }
40
+ }
@@ -0,0 +1,113 @@
1
+ /* ChatPhotoGrid Component Styles */
2
+
3
+ .muka-chat-photo-grid {
4
+ display: grid;
5
+ gap: var(--chatphotogrid-gap);
6
+ width: 100%;
7
+ min-width: 0;
8
+ }
9
+
10
+ /* ─── Tiles ────────────────────────────────────────────── */
11
+
12
+ .muka-chat-photo-grid__tile {
13
+ position: relative;
14
+ display: block;
15
+ overflow: hidden;
16
+ min-width: 0;
17
+ padding: 0;
18
+ margin: 0;
19
+ border: none;
20
+ border-radius: var(--chatphotogrid-radius);
21
+ background-color: var(--chatphotogrid-color-placeholder);
22
+ aspect-ratio: 1 / 1;
23
+ }
24
+
25
+ button.muka-chat-photo-grid__tile {
26
+ cursor: pointer;
27
+ appearance: none;
28
+ }
29
+
30
+ button.muka-chat-photo-grid__tile:focus-visible {
31
+ outline: var(--border-width-bold) solid var(--color-border-focus);
32
+ outline-offset: var(--spacing-1);
33
+ }
34
+
35
+ .muka-chat-photo-grid__image {
36
+ display: block;
37
+ width: 100%;
38
+ height: 100%;
39
+ object-fit: cover;
40
+ }
41
+
42
+ /* ─── Overflow tile ────────────────────────────────────── */
43
+
44
+ .muka-chat-photo-grid__overflow {
45
+ position: absolute;
46
+ inset: 0;
47
+ display: flex;
48
+ align-items: center;
49
+ justify-content: center;
50
+ background-color: var(--chatphotogrid-color-overflow-background);
51
+ color: var(--chatphotogrid-color-overflow-foreground);
52
+ font-family: var(--text-body-2xl-regular-fontFamily);
53
+ font-weight: var(--text-body-2xl-regular-fontWeight);
54
+ font-size: var(--text-body-2xl-regular-fontSize);
55
+ line-height: var(--text-body-2xl-regular-lineHeight);
56
+ }
57
+
58
+ /* ─── Layouts ──────────────────────────────────────────── */
59
+
60
+ .muka-chat-photo-grid--1 {
61
+ grid-template-columns: 1fr;
62
+ }
63
+
64
+ .muka-chat-photo-grid--landscape .muka-chat-photo-grid__tile {
65
+ aspect-ratio: 4 / 3;
66
+ }
67
+
68
+ .muka-chat-photo-grid--portrait .muka-chat-photo-grid__tile {
69
+ aspect-ratio: 3 / 4;
70
+ }
71
+
72
+ .muka-chat-photo-grid--2 {
73
+ grid-template-columns: repeat(2, 1fr);
74
+ }
75
+
76
+ .muka-chat-photo-grid--3 {
77
+ grid-template-columns: repeat(3, 1fr);
78
+ }
79
+
80
+ .muka-chat-photo-grid--4 {
81
+ grid-template-columns: repeat(2, 1fr);
82
+ }
83
+
84
+ /* 5 photos: a 2-up row above a 3-up row, on a shared 6-column track */
85
+ .muka-chat-photo-grid--5 {
86
+ grid-template-columns: repeat(6, 1fr);
87
+ }
88
+
89
+ .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(-n + 2) {
90
+ grid-column: span 3;
91
+ }
92
+
93
+ .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(n + 3) {
94
+ grid-column: span 2;
95
+ }
96
+
97
+ .muka-chat-photo-grid--6,
98
+ .muka-chat-photo-grid--overflow {
99
+ grid-template-columns: repeat(3, 1fr);
100
+ }
101
+
102
+ /* ─── Print ────────────────────────────────────────────── */
103
+
104
+ @media print {
105
+ .muka-chat-photo-grid {
106
+ break-inside: avoid;
107
+ }
108
+
109
+ .muka-chat-photo-grid__image {
110
+ print-color-adjust: exact;
111
+ -webkit-print-color-adjust: exact;
112
+ }
113
+ }